Version Description
(27.05.2022) = * Added: Compatibility with Wordpress 6.0
Download this release
Release Info
Developer | webtemyk |
Plugin | Disable admin notices individually |
Version | 1.3.0 |
Comparing to | |
See all releases |
Code changes from version 1.2.9 to 1.3.0
- admin/ajax/hide-notice.php +63 -63
- admin/ajax/restore-notice.php +49 -49
- admin/assets/css/general.css +50 -50
- admin/assets/css/general.css.map +0 -1
- admin/assets/css/notifications-panel.css +76 -76
- admin/assets/css/notifications-panel.css.map +0 -1
- admin/assets/css/notifications-panel.less +96 -96
- admin/assets/css/page.css +8 -8
- admin/assets/css/page.css.map +0 -1
- admin/assets/css/page.less +8 -8
- admin/assets/css/settings.css +219 -219
- admin/assets/css/settings.css.map +0 -1
- admin/assets/css/settings.less +266 -266
- admin/assets/img/hide-icon-white.svg +25 -25
- admin/assets/img/hide-icon.svg +25 -25
- admin/assets/js/notifications-panel.js +59 -59
- admin/assets/js/settings.js +69 -69
- admin/boot.php +115 -115
- admin/class-page-basic.php +42 -42
- admin/options.php +269 -269
- admin/pages/class-pages-edit-admin-bar.php +147 -147
- admin/pages/class-pages-edit-redirects.php +164 -164
- admin/pages/class-pages-license.php +102 -102
- admin/pages/class-pages-notices.php +91 -91
- admin/pages/class-pages-settings.php +148 -148
- admin/pages/index.php +1 -1
- clearfy.php +56 -56
- disable-admin-notices.php +39 -39
- includes/3rd-party/class-clearfy-plugin.php +78 -78
- includes/class-plugin.php +15 -19
- includes/classes/class-configurate-notices.php +380 -380
- includes/functions.php +121 -121
- languages/disable-admin-notices-es_ES.po +181 -181
- languages/disable-admin-notices-nl_BE.po +172 -172
- languages/disable-admin-notices-pt_BR.po +180 -180
- languages/disable-admin-notices-ru_RU.po +256 -256
- languages/disable-admin-notices.pot +223 -223
- libs/factory/adverts/boot.php +50 -50
- libs/factory/adverts/includes/class-base.php +319 -319
- libs/factory/adverts/includes/class-dashboard-widget.php +125 -125
- libs/factory/adverts/includes/class-rest-request.php +217 -217
- libs/factory/adverts/includes/index.php +2 -2
- libs/factory/adverts/index.php +2 -2
- libs/factory/adverts/langs/{wbcr_factory_adverts_131-ru_RU.mo → wbcr_factory_adverts_137-ru_RU.mo} +0 -0
- libs/factory/adverts/langs/{wbcr_factory_adverts_131-ru_RU.po → wbcr_factory_adverts_137-ru_RU.po} +83 -83
- libs/factory/bootstrap/assets/css-min/bootstrap.accordion.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/bootstrap.blue.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/bootstrap.coffee.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/bootstrap.core.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/bootstrap.datepicker.min.css +10 -10
- libs/factory/bootstrap/assets/css-min/bootstrap.ectoplasm.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/bootstrap.form-group.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/bootstrap.light.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/bootstrap.midnight.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/bootstrap.ocean.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/bootstrap.separator.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/bootstrap.sunrise.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/control.checkbox.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/control.dropdown.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/control.multiple-textbox.min.css +11 -11
- libs/factory/bootstrap/assets/css-min/holder.more-link.min.css +11 -11
- libs/factory/bootstrap/assets/js-min/bootstrap.dropdown.min.js +10 -10
- libs/factory/bootstrap/assets/js-min/bootstrap.tooltip.min.js +9 -9
- libs/factory/bootstrap/assets/js-min/control.checkbox.min.js +10 -10
- libs/factory/bootstrap/assets/js-min/control.dropdown.min.js +10 -10
- libs/factory/bootstrap/assets/js-min/control.list.min.js +10 -10
- libs/factory/bootstrap/assets/js-min/control.multiple-textbox.min.js +10 -10
- libs/factory/bootstrap/boot.php +46 -46
- libs/factory/bootstrap/includes/functions.php +242 -242
- libs/factory/bootstrap/includes/index.php +1 -1
- libs/factory/bootstrap/index.php +1 -1
- libs/factory/bootstrap/package-lock.json +1810 -1810
- libs/factory/core/README.md +3 -3
- libs/factory/core/ajax/install-addons.php +227 -227
- libs/factory/core/assets/js/core-components.js +227 -227
- libs/factory/core/assets/js/core-general.js +99 -99
- libs/factory/core/boot.php +73 -73
- libs/factory/core/includes/activation/class-factory-activator.php +43 -43
- libs/factory/core/includes/activation/class-factory-update.php +39 -39
- libs/factory/core/includes/activation/index.php +1 -1
- libs/factory/core/includes/assets-managment/class-factory-assets-list.php +126 -126
- libs/factory/core/includes/assets-managment/class-factory-script-list.php +167 -167
- libs/factory/core/includes/assets-managment/class-factory-style-list.php +86 -86
- libs/factory/core/includes/assets-managment/index.php +1 -1
- libs/factory/core/includes/class-check-compatibility.php +121 -121
- libs/factory/core/includes/class-factory-migrations.php +541 -541
- libs/factory/core/includes/class-factory-notices.php +296 -296
- libs/factory/core/includes/class-factory-options.php +73 -432
admin/ajax/hide-notice.php
CHANGED
@@ -1,63 +1,63 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Hides notifications
|
4 |
-
*
|
5 |
-
* Github: https://github.com/alexkovalevv
|
6 |
-
*
|
7 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
8 |
-
* @copyright (c) 2018 Webraftic Ltd
|
9 |
-
* @version 1.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
// Exit if accessed directly
|
13 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
-
exit;
|
15 |
-
}
|
16 |
-
|
17 |
-
function wbcr_dan_ajax_hide_notices() {
|
18 |
-
check_ajax_referer( WDN_Plugin::app()->getPluginName() . '_ajax_hide_notices_nonce', 'security' );
|
19 |
-
|
20 |
-
if ( current_user_can( 'manage_options' ) || current_user_can( 'manage_network' ) ) {
|
21 |
-
$notice_id = WDN_Plugin::app()->request->post( 'notice_id', null, true );
|
22 |
-
$notice_html = WDN_Plugin::app()->request->post( 'notice_html', null );
|
23 |
-
$hide_target = WDN_Plugin::app()->request->post( 'target', 'user' );
|
24 |
-
//$notice_text = wp_kses( $notice_html, [] );
|
25 |
-
|
26 |
-
if ( empty( $notice_id ) ) {
|
27 |
-
wp_send_json_error( [ 'error_message' => __( 'Undefinded notice id.', 'disable-admin-notices' ) ] );
|
28 |
-
}
|
29 |
-
|
30 |
-
switch ( $hide_target ) {
|
31 |
-
case 'all':
|
32 |
-
$get_hidden_notices = WDN_Plugin::app()->getPopulateOption( 'hidden_notices', [] );
|
33 |
-
|
34 |
-
if ( ! is_array( $get_hidden_notices ) ) {
|
35 |
-
$get_hidden_notices = [];
|
36 |
-
}
|
37 |
-
|
38 |
-
$get_hidden_notices[ $notice_id ] = rtrim( trim( $notice_html ) );
|
39 |
-
|
40 |
-
WDN_Plugin::app()->updatePopulateOption('hidden_notices', $get_hidden_notices );
|
41 |
-
break;
|
42 |
-
case 'user':
|
43 |
-
default:
|
44 |
-
$current_user_id = get_current_user_id();
|
45 |
-
$get_hidden_notices = get_user_meta( $current_user_id, WDN_Plugin::app()->getOptionName( 'hidden_notices' ), true );
|
46 |
-
|
47 |
-
if ( ! is_array( $get_hidden_notices ) ) {
|
48 |
-
$get_hidden_notices = [];
|
49 |
-
}
|
50 |
-
|
51 |
-
$get_hidden_notices[ $notice_id ] = rtrim( trim( $notice_html ) );
|
52 |
-
|
53 |
-
update_user_meta( $current_user_id, WDN_Plugin::app()->getOptionName( 'hidden_notices' ), $get_hidden_notices );
|
54 |
-
break;
|
55 |
-
}
|
56 |
-
|
57 |
-
wp_send_json_success();
|
58 |
-
} else {
|
59 |
-
wp_send_json_error( [ 'error_message' => __( 'You don\'t have enough capability to edit this information.', 'disable-admin-notices' ) ] );
|
60 |
-
}
|
61 |
-
}
|
62 |
-
|
63 |
-
add_action( 'wp_ajax_wbcr-dan-hide-notices', 'wbcr_dan_ajax_hide_notices' );
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Hides notifications
|
4 |
+
*
|
5 |
+
* Github: https://github.com/alexkovalevv
|
6 |
+
*
|
7 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
8 |
+
* @copyright (c) 2018 Webraftic Ltd
|
9 |
+
* @version 1.0
|
10 |
+
*/
|
11 |
+
|
12 |
+
// Exit if accessed directly
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
+
exit;
|
15 |
+
}
|
16 |
+
|
17 |
+
function wbcr_dan_ajax_hide_notices() {
|
18 |
+
check_ajax_referer( WDN_Plugin::app()->getPluginName() . '_ajax_hide_notices_nonce', 'security' );
|
19 |
+
|
20 |
+
if ( current_user_can( 'manage_options' ) || current_user_can( 'manage_network' ) ) {
|
21 |
+
$notice_id = WDN_Plugin::app()->request->post( 'notice_id', null, true );
|
22 |
+
$notice_html = WDN_Plugin::app()->request->post( 'notice_html', null );
|
23 |
+
$hide_target = WDN_Plugin::app()->request->post( 'target', 'user' );
|
24 |
+
//$notice_text = wp_kses( $notice_html, [] );
|
25 |
+
|
26 |
+
if ( empty( $notice_id ) ) {
|
27 |
+
wp_send_json_error( [ 'error_message' => __( 'Undefinded notice id.', 'disable-admin-notices' ) ] );
|
28 |
+
}
|
29 |
+
|
30 |
+
switch ( $hide_target ) {
|
31 |
+
case 'all':
|
32 |
+
$get_hidden_notices = WDN_Plugin::app()->getPopulateOption( 'hidden_notices', [] );
|
33 |
+
|
34 |
+
if ( ! is_array( $get_hidden_notices ) ) {
|
35 |
+
$get_hidden_notices = [];
|
36 |
+
}
|
37 |
+
|
38 |
+
$get_hidden_notices[ $notice_id ] = rtrim( trim( $notice_html ) );
|
39 |
+
|
40 |
+
WDN_Plugin::app()->updatePopulateOption('hidden_notices', $get_hidden_notices );
|
41 |
+
break;
|
42 |
+
case 'user':
|
43 |
+
default:
|
44 |
+
$current_user_id = get_current_user_id();
|
45 |
+
$get_hidden_notices = get_user_meta( $current_user_id, WDN_Plugin::app()->getOptionName( 'hidden_notices' ), true );
|
46 |
+
|
47 |
+
if ( ! is_array( $get_hidden_notices ) ) {
|
48 |
+
$get_hidden_notices = [];
|
49 |
+
}
|
50 |
+
|
51 |
+
$get_hidden_notices[ $notice_id ] = rtrim( trim( $notice_html ) );
|
52 |
+
|
53 |
+
update_user_meta( $current_user_id, WDN_Plugin::app()->getOptionName( 'hidden_notices' ), $get_hidden_notices );
|
54 |
+
break;
|
55 |
+
}
|
56 |
+
|
57 |
+
wp_send_json_success();
|
58 |
+
} else {
|
59 |
+
wp_send_json_error( [ 'error_message' => __( 'You don\'t have enough capability to edit this information.', 'disable-admin-notices' ) ] );
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
add_action( 'wp_ajax_wbcr-dan-hide-notices', 'wbcr_dan_ajax_hide_notices' );
|
admin/ajax/restore-notice.php
CHANGED
@@ -1,49 +1,49 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Restore notice
|
4 |
-
*
|
5 |
-
* Github: https://github.com/alexkovalevv
|
6 |
-
*
|
7 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
8 |
-
* @copyright (c) 2018 Webraftic Ltd
|
9 |
-
* @version 1.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
// Exit if accessed directly
|
13 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
-
exit;
|
15 |
-
}
|
16 |
-
|
17 |
-
function wbcr_dan_ajax_restore_notice() {
|
18 |
-
check_ajax_referer( WDN_Plugin::app()->getPluginName() . '_ajax_restore_notice_nonce', 'security' );
|
19 |
-
|
20 |
-
if ( current_user_can( 'manage_options' ) || current_user_can( 'manage_network' ) ) {
|
21 |
-
$notice_id = WDN_Plugin::app()->request->post( 'notice_id', null, true );
|
22 |
-
|
23 |
-
if ( empty( $notice_id ) ) {
|
24 |
-
wp_send_json_error( [ 'error_message' => __( 'Undefinded notice id.', 'disable-admin-notices' ) ] );
|
25 |
-
}
|
26 |
-
|
27 |
-
//Users notices
|
28 |
-
$current_user_id = get_current_user_id();
|
29 |
-
$get_hidden_notices = get_user_meta( $current_user_id, WDN_Plugin::app()->getOptionName( 'hidden_notices' ), true );
|
30 |
-
if ( ! empty( $get_hidden_notices ) && isset( $get_hidden_notices[ $notice_id ] ) ) {
|
31 |
-
unset( $get_hidden_notices[ $notice_id ] );
|
32 |
-
update_user_meta( $current_user_id, WDN_Plugin::app()->getOptionName( 'hidden_notices' ), $get_hidden_notices );
|
33 |
-
}
|
34 |
-
|
35 |
-
//All notices
|
36 |
-
$get_hidden_notices_all = WDN_Plugin::app()->getPopulateOption( 'hidden_notices', [] );
|
37 |
-
if ( ! empty( $get_hidden_notices_all ) && isset( $get_hidden_notices_all[ $notice_id ] ) ) {
|
38 |
-
unset( $get_hidden_notices_all[ $notice_id ] );
|
39 |
-
WDN_Plugin::app()->updatePopulateOption( 'hidden_notices', $get_hidden_notices_all );
|
40 |
-
}
|
41 |
-
|
42 |
-
|
43 |
-
wp_send_json_success();
|
44 |
-
} else {
|
45 |
-
wp_send_json_error( [ 'error_message' => __( 'You don\'t have enough capability to edit this information.', 'disable-admin-notices' ) ] );
|
46 |
-
}
|
47 |
-
}
|
48 |
-
|
49 |
-
add_action( 'wp_ajax_wbcr-dan-restore-notice', 'wbcr_dan_ajax_restore_notice' );
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Restore notice
|
4 |
+
*
|
5 |
+
* Github: https://github.com/alexkovalevv
|
6 |
+
*
|
7 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
8 |
+
* @copyright (c) 2018 Webraftic Ltd
|
9 |
+
* @version 1.0
|
10 |
+
*/
|
11 |
+
|
12 |
+
// Exit if accessed directly
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
+
exit;
|
15 |
+
}
|
16 |
+
|
17 |
+
function wbcr_dan_ajax_restore_notice() {
|
18 |
+
check_ajax_referer( WDN_Plugin::app()->getPluginName() . '_ajax_restore_notice_nonce', 'security' );
|
19 |
+
|
20 |
+
if ( current_user_can( 'manage_options' ) || current_user_can( 'manage_network' ) ) {
|
21 |
+
$notice_id = WDN_Plugin::app()->request->post( 'notice_id', null, true );
|
22 |
+
|
23 |
+
if ( empty( $notice_id ) ) {
|
24 |
+
wp_send_json_error( [ 'error_message' => __( 'Undefinded notice id.', 'disable-admin-notices' ) ] );
|
25 |
+
}
|
26 |
+
|
27 |
+
//Users notices
|
28 |
+
$current_user_id = get_current_user_id();
|
29 |
+
$get_hidden_notices = get_user_meta( $current_user_id, WDN_Plugin::app()->getOptionName( 'hidden_notices' ), true );
|
30 |
+
if ( ! empty( $get_hidden_notices ) && isset( $get_hidden_notices[ $notice_id ] ) ) {
|
31 |
+
unset( $get_hidden_notices[ $notice_id ] );
|
32 |
+
update_user_meta( $current_user_id, WDN_Plugin::app()->getOptionName( 'hidden_notices' ), $get_hidden_notices );
|
33 |
+
}
|
34 |
+
|
35 |
+
//All notices
|
36 |
+
$get_hidden_notices_all = WDN_Plugin::app()->getPopulateOption( 'hidden_notices', [] );
|
37 |
+
if ( ! empty( $get_hidden_notices_all ) && isset( $get_hidden_notices_all[ $notice_id ] ) ) {
|
38 |
+
unset( $get_hidden_notices_all[ $notice_id ] );
|
39 |
+
WDN_Plugin::app()->updatePopulateOption( 'hidden_notices', $get_hidden_notices_all );
|
40 |
+
}
|
41 |
+
|
42 |
+
|
43 |
+
wp_send_json_success();
|
44 |
+
} else {
|
45 |
+
wp_send_json_error( [ 'error_message' => __( 'You don\'t have enough capability to edit this information.', 'disable-admin-notices' ) ] );
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
add_action( 'wp_ajax_wbcr-dan-restore-notice', 'wbcr_dan_ajax_restore_notice' );
|
admin/assets/css/general.css
CHANGED
@@ -1,51 +1,51 @@
|
|
1 |
-
.wbcr-dan-hide-notices {
|
2 |
-
position: initial;
|
3 |
-
padding: 5px 5px 0;
|
4 |
-
background: transparent;
|
5 |
-
}
|
6 |
-
.wbcr-dan-hide-notices > div {
|
7 |
-
margin: 0 !important;
|
8 |
-
}
|
9 |
-
.is-dismissible .wbcr-dan-hide-links {
|
10 |
-
margin-right: -25px;
|
11 |
-
}
|
12 |
-
.wbcr-dan-hide-links {
|
13 |
-
text-align: right;
|
14 |
-
padding: 0 5px 5px 0;
|
15 |
-
}
|
16 |
-
.wbcr-dan-hide-links .wbcr-dan-hide-notice-link {
|
17 |
-
min-height: 20px;
|
18 |
-
line-height: 2;
|
19 |
-
padding: 0 5px 0 0;
|
20 |
-
font-size: 11px;
|
21 |
-
color: #ec3c47;
|
22 |
-
background: #fff;
|
23 |
-
margin: 0;
|
24 |
-
cursor: pointer;
|
25 |
-
border: 1px solid #ec3c47;
|
26 |
-
border-radius: 5px;
|
27 |
-
}
|
28 |
-
.wbcr-dan-hide-links .wbcr-dan-hide-notice-link:hover {
|
29 |
-
background: #ec3c47;
|
30 |
-
color: #fff;
|
31 |
-
}
|
32 |
-
.wbcr-dan-hide-links .wbcr-dan-hide-notice-link:hover:before {
|
33 |
-
background-image: url('../img/hide-icon-white.svg');
|
34 |
-
}
|
35 |
-
.wbcr-dan-hide-links .wbcr-dan-hide-notice-link:focus {
|
36 |
-
border: 2px solid #ec3c47;
|
37 |
-
outline: none;
|
38 |
-
}
|
39 |
-
.wbcr-dan-hide-links .wbcr-dan-hide-notice-link:before {
|
40 |
-
content: '';
|
41 |
-
display: inline-block;
|
42 |
-
width: 25px;
|
43 |
-
height: 18px;
|
44 |
-
background-color: transparent;
|
45 |
-
background-image: url('../img/hide-icon.svg');
|
46 |
-
background-repeat: no-repeat;
|
47 |
-
background-position: center center;
|
48 |
-
background-size: 25px;
|
49 |
-
vertical-align: middle;
|
50 |
-
}
|
51 |
/*# sourceMappingURL=general.css.map */
|
1 |
+
.wbcr-dan-hide-notices {
|
2 |
+
position: initial;
|
3 |
+
padding: 5px 5px 0;
|
4 |
+
background: transparent;
|
5 |
+
}
|
6 |
+
.wbcr-dan-hide-notices > div {
|
7 |
+
margin: 0 !important;
|
8 |
+
}
|
9 |
+
.is-dismissible .wbcr-dan-hide-links {
|
10 |
+
margin-right: -25px;
|
11 |
+
}
|
12 |
+
.wbcr-dan-hide-links {
|
13 |
+
text-align: right;
|
14 |
+
padding: 0 5px 5px 0;
|
15 |
+
}
|
16 |
+
.wbcr-dan-hide-links .wbcr-dan-hide-notice-link {
|
17 |
+
min-height: 20px;
|
18 |
+
line-height: 2;
|
19 |
+
padding: 0 5px 0 0;
|
20 |
+
font-size: 11px;
|
21 |
+
color: #ec3c47;
|
22 |
+
background: #fff;
|
23 |
+
margin: 0;
|
24 |
+
cursor: pointer;
|
25 |
+
border: 1px solid #ec3c47;
|
26 |
+
border-radius: 5px;
|
27 |
+
}
|
28 |
+
.wbcr-dan-hide-links .wbcr-dan-hide-notice-link:hover {
|
29 |
+
background: #ec3c47;
|
30 |
+
color: #fff;
|
31 |
+
}
|
32 |
+
.wbcr-dan-hide-links .wbcr-dan-hide-notice-link:hover:before {
|
33 |
+
background-image: url('../img/hide-icon-white.svg');
|
34 |
+
}
|
35 |
+
.wbcr-dan-hide-links .wbcr-dan-hide-notice-link:focus {
|
36 |
+
border: 2px solid #ec3c47;
|
37 |
+
outline: none;
|
38 |
+
}
|
39 |
+
.wbcr-dan-hide-links .wbcr-dan-hide-notice-link:before {
|
40 |
+
content: '';
|
41 |
+
display: inline-block;
|
42 |
+
width: 25px;
|
43 |
+
height: 18px;
|
44 |
+
background-color: transparent;
|
45 |
+
background-image: url('../img/hide-icon.svg');
|
46 |
+
background-repeat: no-repeat;
|
47 |
+
background-position: center center;
|
48 |
+
background-size: 25px;
|
49 |
+
vertical-align: middle;
|
50 |
+
}
|
51 |
/*# sourceMappingURL=general.css.map */
|
admin/assets/css/general.css.map
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
{"version":3,"sources":["general.less"],"names":[],"mappings":"AAAA;EACE,iBAAA;EACA,kBAAA;EACA,uBAAA;;AAEA,sBAAE;EACA,oBAAA;;AAGJ,eAAgB;EACd,mBAAA;;AAEF;EACE,iBAAA;EACA,oBAAA;;AAFF,oBAIE;EACE,gBAAA;EACA,cAAA;EACA,kBAAA;EACA,eAAA;EACA,cAAA;EACA,gBAAA;EACA,SAAA;EACA,eAAA;EACA,yBAAA;EACA,kBAAA;;AAEA,oBAZF,2BAYG;EACC,mBAAA;EACA,WAAA;;AAGF,oBAjBF,2BAiBG,MAAM;EACL,sBAAsB,6BAAtB;;AAGF,oBArBF,2BAqBG;EACC,yBAAA;EACA,aAAA;;AAGF,oBA1BF,2BA0BG;EACC,SAAS,EAAT;EACA,qBAAA;EACA,WAAA;EACA,YAAA;EACA,6BAAA;EACA,sBAAsB,uBAAtB;EACA,4BAAA;EACA,kCAAA;EACA,qBAAA;EACA,sBAAA","file":"general.css"}
|
|
admin/assets/css/notifications-panel.css
CHANGED
@@ -1,77 +1,77 @@
|
|
1 |
-
/**
|
2 |
-
* Notification panel in admin bar
|
3 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
4 |
-
* @copyright Alex Kovalev 23.08.2017
|
5 |
-
*/
|
6 |
-
#wp-admin-bar-wbcr-han-notify-panel .wbcr-han-adminbar-counter {
|
7 |
-
background-color: #0073aa;
|
8 |
-
border-radius: 50%;
|
9 |
-
color: #fff;
|
10 |
-
font-weight: bold;
|
11 |
-
padding: 2px 6px;
|
12 |
-
font-size: 0.85em;
|
13 |
-
margin-left: 5px;
|
14 |
-
}
|
15 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper {
|
16 |
-
max-height: 500px;
|
17 |
-
overflow-y: scroll;
|
18 |
-
}
|
19 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu {
|
20 |
-
width: 400px;
|
21 |
-
padding: 0;
|
22 |
-
}
|
23 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li {
|
24 |
-
border-left: 4px solid #26292b;
|
25 |
-
padding: 0;
|
26 |
-
}
|
27 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li.wpnc-updated {
|
28 |
-
border-left-color: #7ad03a;
|
29 |
-
}
|
30 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li.wpnc-update-nag {
|
31 |
-
border-left-color: #ffba00;
|
32 |
-
}
|
33 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li.wpnc-error {
|
34 |
-
border-left-color: #dd3d36;
|
35 |
-
}
|
36 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .wbcr-han-panel-restore-notify-line {
|
37 |
-
text-align: right;
|
38 |
-
}
|
39 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .wbcr-han-panel-restore-notify-line a {
|
40 |
-
color: #ffba00 !important;
|
41 |
-
text-decoration: none !important;
|
42 |
-
}
|
43 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .wbcr-han-panel-restore-notify-line a:hover {
|
44 |
-
text-decoration: underline !important;
|
45 |
-
color: #ffc11a !important;
|
46 |
-
}
|
47 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .ab-item {
|
48 |
-
height: 100% !important;
|
49 |
-
white-space: normal !important;
|
50 |
-
padding: 0.5em 1em;
|
51 |
-
border-bottom: 1px solid #4a4f55;
|
52 |
-
color: #949494;
|
53 |
-
line-height: 1.5 !important;
|
54 |
-
}
|
55 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .ab-item a {
|
56 |
-
display: inline;
|
57 |
-
padding: 0;
|
58 |
-
margin: 0;
|
59 |
-
text-decoration: underline;
|
60 |
-
line-height: 1.5 !important;
|
61 |
-
color: #949494;
|
62 |
-
}
|
63 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li[id^=wp-admin-bar-wbcr-han-notify-panel-group] .ab-item {
|
64 |
-
height: 100%;
|
65 |
-
white-space: normal;
|
66 |
-
padding: 0.5em 1em;
|
67 |
-
border-bottom: 1px solid #fff;
|
68 |
-
color: #fff;
|
69 |
-
line-height: 2;
|
70 |
-
text-align: center;
|
71 |
-
font-weight: bold;
|
72 |
-
text-transform: uppercase;
|
73 |
-
}
|
74 |
-
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu li:nth-child(2n) {
|
75 |
-
background: #26292b;
|
76 |
-
}
|
77 |
/*# sourceMappingURL=notifications-panel.css.map */
|
1 |
+
/**
|
2 |
+
* Notification panel in admin bar
|
3 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
4 |
+
* @copyright Alex Kovalev 23.08.2017
|
5 |
+
*/
|
6 |
+
#wp-admin-bar-wbcr-han-notify-panel .wbcr-han-adminbar-counter {
|
7 |
+
background-color: #0073aa;
|
8 |
+
border-radius: 50%;
|
9 |
+
color: #fff;
|
10 |
+
font-weight: bold;
|
11 |
+
padding: 2px 6px;
|
12 |
+
font-size: 0.85em;
|
13 |
+
margin-left: 5px;
|
14 |
+
}
|
15 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper {
|
16 |
+
max-height: 500px;
|
17 |
+
overflow-y: scroll;
|
18 |
+
}
|
19 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu {
|
20 |
+
width: 400px;
|
21 |
+
padding: 0;
|
22 |
+
}
|
23 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li {
|
24 |
+
border-left: 4px solid #26292b;
|
25 |
+
padding: 0;
|
26 |
+
}
|
27 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li.wpnc-updated {
|
28 |
+
border-left-color: #7ad03a;
|
29 |
+
}
|
30 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li.wpnc-update-nag {
|
31 |
+
border-left-color: #ffba00;
|
32 |
+
}
|
33 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li.wpnc-error {
|
34 |
+
border-left-color: #dd3d36;
|
35 |
+
}
|
36 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .wbcr-han-panel-restore-notify-line {
|
37 |
+
text-align: right;
|
38 |
+
}
|
39 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .wbcr-han-panel-restore-notify-line a {
|
40 |
+
color: #ffba00 !important;
|
41 |
+
text-decoration: none !important;
|
42 |
+
}
|
43 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .wbcr-han-panel-restore-notify-line a:hover {
|
44 |
+
text-decoration: underline !important;
|
45 |
+
color: #ffc11a !important;
|
46 |
+
}
|
47 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .ab-item {
|
48 |
+
height: 100% !important;
|
49 |
+
white-space: normal !important;
|
50 |
+
padding: 0.5em 1em;
|
51 |
+
border-bottom: 1px solid #4a4f55;
|
52 |
+
color: #949494;
|
53 |
+
line-height: 1.5 !important;
|
54 |
+
}
|
55 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .ab-item a {
|
56 |
+
display: inline;
|
57 |
+
padding: 0;
|
58 |
+
margin: 0;
|
59 |
+
text-decoration: underline;
|
60 |
+
line-height: 1.5 !important;
|
61 |
+
color: #949494;
|
62 |
+
}
|
63 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li[id^=wp-admin-bar-wbcr-han-notify-panel-group] .ab-item {
|
64 |
+
height: 100%;
|
65 |
+
white-space: normal;
|
66 |
+
padding: 0.5em 1em;
|
67 |
+
border-bottom: 1px solid #fff;
|
68 |
+
color: #fff;
|
69 |
+
line-height: 2;
|
70 |
+
text-align: center;
|
71 |
+
font-weight: bold;
|
72 |
+
text-transform: uppercase;
|
73 |
+
}
|
74 |
+
#wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu li:nth-child(2n) {
|
75 |
+
background: #26292b;
|
76 |
+
}
|
77 |
/*# sourceMappingURL=notifications-panel.css.map */
|
admin/assets/css/notifications-panel.css.map
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
{"version":3,"sources":["notifications-panel.less"],"names":[],"mappings":";;;;;AAMA,mCAEE;EACE,yBAAA;EACA,kBAAA;EACA,WAAA;EACA,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;;AATJ,mCAYE;EAEE,iBAAA;EACA,kBAAA;;AAfJ,mCAYE,gBAKE,GAAE;EACA,YAAA;EACA,UAAA;;AAEA,mCATJ,gBAKE,GAAE,WAIE;EACA,8BAAA;EACA,UAAA;;AAEA,mCAbN,gBAKE,GAAE,WAIE,KAIC;EACC,0BAAA;;AAGF,mCAjBN,gBAKE,GAAE,WAIE,KAQC;EACC,0BAAA;;AAGF,mCArBN,gBAKE,GAAE,WAIE,KAYC;EACC,0BAAA;;AAbJ,mCATJ,gBAKE,GAAE,WAIE,KAgBA;EACE,iBAAA;;AAjBJ,mCATJ,gBAKE,GAAE,WAIE,KAgBA,oCAGE;EACE,cAAA;EACA,gCAAA;;AAEA,mCAhCV,gBAKE,GAAE,WAIE,KAgBA,oCAGE,EAIG;EACC,qCAAA;EACA,cAAA;;AAzBR,mCATJ,gBAKE,GAAE,WAIE,KA8BA;EACE,uBAAA;EACA,8BAAA;EACA,kBAAA;EACA,gCAAA;EACA,cAAA;EACA,gBAAA;;AApCJ,mCATJ,gBAKE,GAAE,WAIE,KA8BA,SAQE;EACE,eAAA;EACA,UAAA;EACA,SAAA;EACA,0BAAA;EACA,gBAAA;EACA,cAAA;;AAKN,mCA1DJ,gBAKE,GAAE,WAqDE,KAAI,8CACJ;EACE,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,6BAAA;EACA,WAAA;EACA,cAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;;AAhFV,mCAYE,gBAKE,GAAE,WAmEA,GAAE,UAAU;EACV,mBAAA","file":"notifications-panel.css"}
|
|
admin/assets/css/notifications-panel.less
CHANGED
@@ -1,96 +1,96 @@
|
|
1 |
-
/**
|
2 |
-
* Notification panel in admin bar
|
3 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
4 |
-
* @copyright Alex Kovalev 23.08.2017
|
5 |
-
*/
|
6 |
-
|
7 |
-
#wp-admin-bar-wbcr-han-notify-panel {
|
8 |
-
|
9 |
-
.wbcr-han-adminbar-counter {
|
10 |
-
background-color: #0073aa;
|
11 |
-
border-radius: 50%;
|
12 |
-
color: #fff;
|
13 |
-
font-weight: bold;
|
14 |
-
padding: 2px 6px;
|
15 |
-
font-size: 0.85em;
|
16 |
-
margin-left: 5px;
|
17 |
-
}
|
18 |
-
|
19 |
-
.ab-sub-wrapper {
|
20 |
-
|
21 |
-
max-height: 500px;
|
22 |
-
overflow-y: scroll;
|
23 |
-
|
24 |
-
ul.ab-submenu {
|
25 |
-
width: 400px;
|
26 |
-
padding: 0;
|
27 |
-
|
28 |
-
& > li {
|
29 |
-
border-left: 4px solid #26292b;
|
30 |
-
padding: 0;
|
31 |
-
|
32 |
-
&.wpnc-updated {
|
33 |
-
border-left-color: #7ad03a;
|
34 |
-
}
|
35 |
-
|
36 |
-
&.wpnc-update-nag {
|
37 |
-
border-left-color: #ffba00;
|
38 |
-
}
|
39 |
-
|
40 |
-
&.wpnc-error {
|
41 |
-
border-left-color: #dd3d36;
|
42 |
-
}
|
43 |
-
|
44 |
-
.wbcr-han-panel-restore-notify-line {
|
45 |
-
text-align: right;
|
46 |
-
|
47 |
-
a {
|
48 |
-
color: #ffba00 !important;
|
49 |
-
text-decoration: none !important;
|
50 |
-
|
51 |
-
&:hover {
|
52 |
-
text-decoration: underline !important;
|
53 |
-
color: lighten(#ffba00, 5%) !important;
|
54 |
-
}
|
55 |
-
}
|
56 |
-
}
|
57 |
-
|
58 |
-
.ab-item {
|
59 |
-
height: 100% !important;
|
60 |
-
white-space: normal !important;
|
61 |
-
padding: .5em 1em;
|
62 |
-
border-bottom: 1px solid #4a4f55;
|
63 |
-
color: #949494;
|
64 |
-
line-height: 1.5 !important;
|
65 |
-
|
66 |
-
a {
|
67 |
-
display: inline;
|
68 |
-
padding: 0;
|
69 |
-
margin: 0;
|
70 |
-
text-decoration: underline;
|
71 |
-
line-height: 1.5 !important;
|
72 |
-
color: #949494;
|
73 |
-
}
|
74 |
-
}
|
75 |
-
}
|
76 |
-
|
77 |
-
& > li[id^=wp-admin-bar-wbcr-han-notify-panel-group] {
|
78 |
-
.ab-item {
|
79 |
-
height: 100%;
|
80 |
-
white-space: normal;
|
81 |
-
padding: 0.5em 1em;
|
82 |
-
border-bottom: 1px solid #fff;
|
83 |
-
color: #fff;
|
84 |
-
line-height: 2;
|
85 |
-
text-align: center;
|
86 |
-
font-weight: bold;
|
87 |
-
text-transform: uppercase;
|
88 |
-
}
|
89 |
-
}
|
90 |
-
|
91 |
-
li:nth-child(2n) {
|
92 |
-
background: #26292b;
|
93 |
-
}
|
94 |
-
}
|
95 |
-
}
|
96 |
-
}
|
1 |
+
/**
|
2 |
+
* Notification panel in admin bar
|
3 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
4 |
+
* @copyright Alex Kovalev 23.08.2017
|
5 |
+
*/
|
6 |
+
|
7 |
+
#wp-admin-bar-wbcr-han-notify-panel {
|
8 |
+
|
9 |
+
.wbcr-han-adminbar-counter {
|
10 |
+
background-color: #0073aa;
|
11 |
+
border-radius: 50%;
|
12 |
+
color: #fff;
|
13 |
+
font-weight: bold;
|
14 |
+
padding: 2px 6px;
|
15 |
+
font-size: 0.85em;
|
16 |
+
margin-left: 5px;
|
17 |
+
}
|
18 |
+
|
19 |
+
.ab-sub-wrapper {
|
20 |
+
|
21 |
+
max-height: 500px;
|
22 |
+
overflow-y: scroll;
|
23 |
+
|
24 |
+
ul.ab-submenu {
|
25 |
+
width: 400px;
|
26 |
+
padding: 0;
|
27 |
+
|
28 |
+
& > li {
|
29 |
+
border-left: 4px solid #26292b;
|
30 |
+
padding: 0;
|
31 |
+
|
32 |
+
&.wpnc-updated {
|
33 |
+
border-left-color: #7ad03a;
|
34 |
+
}
|
35 |
+
|
36 |
+
&.wpnc-update-nag {
|
37 |
+
border-left-color: #ffba00;
|
38 |
+
}
|
39 |
+
|
40 |
+
&.wpnc-error {
|
41 |
+
border-left-color: #dd3d36;
|
42 |
+
}
|
43 |
+
|
44 |
+
.wbcr-han-panel-restore-notify-line {
|
45 |
+
text-align: right;
|
46 |
+
|
47 |
+
a {
|
48 |
+
color: #ffba00 !important;
|
49 |
+
text-decoration: none !important;
|
50 |
+
|
51 |
+
&:hover {
|
52 |
+
text-decoration: underline !important;
|
53 |
+
color: lighten(#ffba00, 5%) !important;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
.ab-item {
|
59 |
+
height: 100% !important;
|
60 |
+
white-space: normal !important;
|
61 |
+
padding: .5em 1em;
|
62 |
+
border-bottom: 1px solid #4a4f55;
|
63 |
+
color: #949494;
|
64 |
+
line-height: 1.5 !important;
|
65 |
+
|
66 |
+
a {
|
67 |
+
display: inline;
|
68 |
+
padding: 0;
|
69 |
+
margin: 0;
|
70 |
+
text-decoration: underline;
|
71 |
+
line-height: 1.5 !important;
|
72 |
+
color: #949494;
|
73 |
+
}
|
74 |
+
}
|
75 |
+
}
|
76 |
+
|
77 |
+
& > li[id^=wp-admin-bar-wbcr-han-notify-panel-group] {
|
78 |
+
.ab-item {
|
79 |
+
height: 100%;
|
80 |
+
white-space: normal;
|
81 |
+
padding: 0.5em 1em;
|
82 |
+
border-bottom: 1px solid #fff;
|
83 |
+
color: #fff;
|
84 |
+
line-height: 2;
|
85 |
+
text-align: center;
|
86 |
+
font-weight: bold;
|
87 |
+
text-transform: uppercase;
|
88 |
+
}
|
89 |
+
}
|
90 |
+
|
91 |
+
li:nth-child(2n) {
|
92 |
+
background: #26292b;
|
93 |
+
}
|
94 |
+
}
|
95 |
+
}
|
96 |
+
}
|
admin/assets/css/page.css
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
.wdan-plugin-header-logo {
|
2 |
-
background: transparent url('../img/hide-icon.svg') no-repeat left center !important;
|
3 |
-
background-size: 40px !important;
|
4 |
-
display: block;
|
5 |
-
float: left;
|
6 |
-
height: 30px;
|
7 |
-
width: 40px;
|
8 |
-
}
|
9 |
/*# sourceMappingURL=page.css.map */
|
1 |
+
.wdan-plugin-header-logo {
|
2 |
+
background: transparent url('../img/hide-icon.svg') no-repeat left center !important;
|
3 |
+
background-size: 40px !important;
|
4 |
+
display: block;
|
5 |
+
float: left;
|
6 |
+
height: 30px;
|
7 |
+
width: 40px;
|
8 |
+
}
|
9 |
/*# sourceMappingURL=page.css.map */
|
admin/assets/css/page.css.map
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
{"version":3,"sources":["page.less"],"names":[],"mappings":"AAAA;EACE,4BAA4B,6CAA5B;EACA,gCAAA;EACA,cAAA;EACA,WAAA;EACA,YAAA;EACA,WAAA","file":"page.css"}
|
|
admin/assets/css/page.less
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
-
.wdan-plugin-header-logo {
|
2 |
-
background: transparent url('../img/hide-icon.svg') no-repeat left center !important;
|
3 |
-
background-size: 40px !important;
|
4 |
-
display: block;
|
5 |
-
float: left;
|
6 |
-
height: 30px;
|
7 |
-
width: 40px;
|
8 |
-
}
|
1 |
+
.wdan-plugin-header-logo {
|
2 |
+
background: transparent url('../img/hide-icon.svg') no-repeat left center !important;
|
3 |
+
background-size: 40px !important;
|
4 |
+
display: block;
|
5 |
+
float: left;
|
6 |
+
height: 30px;
|
7 |
+
width: 40px;
|
8 |
+
}
|
admin/assets/css/settings.css
CHANGED
@@ -1,220 +1,220 @@
|
|
1 |
-
#WBCR .factory-checkbox.wdanpro-checkbox-premium-label:after,
|
2 |
-
#WBCR .wdanpro-radio-premium-label .factory-compact_panel:after {
|
3 |
-
display: inline-block;
|
4 |
-
position: relative;
|
5 |
-
content: 'PRO';
|
6 |
-
background: #ff5722;
|
7 |
-
border-radius: 4px;
|
8 |
-
color: #fff;
|
9 |
-
font-size: 10px;
|
10 |
-
line-height: 1;
|
11 |
-
font-style: normal;
|
12 |
-
padding: 4px 6px;
|
13 |
-
margin-left: 4px;
|
14 |
-
vertical-align: top;
|
15 |
-
top: -8px;
|
16 |
-
left: -10px;
|
17 |
-
right: auto;
|
18 |
-
z-index: 11;
|
19 |
-
cursor: pointer;
|
20 |
-
}
|
21 |
-
#WBCR .wdanpro-radio-premium-label .factory-compact_panel:after {
|
22 |
-
position: absolute;
|
23 |
-
top: -10px;
|
24 |
-
right: -10px;
|
25 |
-
left: auto;
|
26 |
-
}
|
27 |
-
#WBCR .factory-checkbox-disabled input,
|
28 |
-
#WBCR .factory-checkbox-disabled button,
|
29 |
-
#WBCR .wdanpro-radio-premium-label .factory-compact_panel {
|
30 |
-
pointer-events: none;
|
31 |
-
cursor: not-allowed;
|
32 |
-
opacity: 0.65;
|
33 |
-
filter: alpha(opacity=65);
|
34 |
-
-webkit-box-shadow: none;
|
35 |
-
box-shadow: none;
|
36 |
-
}
|
37 |
-
#WBCR .wrdan-premium-fake-content {
|
38 |
-
position: relative;
|
39 |
-
padding: 15px;
|
40 |
-
}
|
41 |
-
#WBCR .wdan-premium-info {
|
42 |
-
position: absolute;
|
43 |
-
top: 50px;
|
44 |
-
left: 50%;
|
45 |
-
margin-left: -250px;
|
46 |
-
max-width: 500px;
|
47 |
-
z-index: 999;
|
48 |
-
}
|
49 |
-
#WBCR .wdan-premium-info h3 {
|
50 |
-
font-size: 32px;
|
51 |
-
font-weight: 300;
|
52 |
-
color: inherit;
|
53 |
-
margin: 40px 0 10px;
|
54 |
-
line-height: 1.2;
|
55 |
-
}
|
56 |
-
#WBCR .wdan-premium-info p {
|
57 |
-
font-size: 16px;
|
58 |
-
font-weight: 400;
|
59 |
-
color: #a4afb7;
|
60 |
-
margin-bottom: 40px;
|
61 |
-
}
|
62 |
-
#WBCR .wdan-premium-layer {
|
63 |
-
position: absolute;
|
64 |
-
top: 0;
|
65 |
-
left: 0;
|
66 |
-
right: 0;
|
67 |
-
bottom: 0;
|
68 |
-
opacity: 0.9;
|
69 |
-
background: #fff;
|
70 |
-
}
|
71 |
-
#WBCR .wdan-button {
|
72 |
-
font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
|
73 |
-
font-weight: 500;
|
74 |
-
text-transform: uppercase;
|
75 |
-
outline: none;
|
76 |
-
border: none;
|
77 |
-
text-decoration: none;
|
78 |
-
-webkit-border-radius: 3px;
|
79 |
-
border-radius: 3px;
|
80 |
-
-webkit-transition-property: background, color, opacity, -webkit-box-shadow;
|
81 |
-
transition-property: background, color, opacity, -webkit-box-shadow;
|
82 |
-
-o-transition-property: background, color, box-shadow, opacity;
|
83 |
-
transition-property: background, color, box-shadow, opacity;
|
84 |
-
transition-property: background, color, box-shadow, opacity, -webkit-box-shadow;
|
85 |
-
-webkit-transition-duration: 0.3s;
|
86 |
-
-o-transition-duration: 0.3s;
|
87 |
-
transition-duration: 0.3s;
|
88 |
-
}
|
89 |
-
#WBCR .wdan-button:hover {
|
90 |
-
border: none;
|
91 |
-
}
|
92 |
-
#WBCR .wdan-button:not([disabled]) {
|
93 |
-
cursor: pointer;
|
94 |
-
}
|
95 |
-
#WBCR .wdan-button:not(.wdan-button-state) .wdan-state-icon {
|
96 |
-
display: none;
|
97 |
-
}
|
98 |
-
#WBCR .wdan-button.wdan-button-success {
|
99 |
-
color: #fff;
|
100 |
-
}
|
101 |
-
#WBCR .wdan-button.wdan-button-success[disabled] {
|
102 |
-
background-color: #c2cbd2;
|
103 |
-
}
|
104 |
-
#WBCR .wdan-button.wdan-button-success:not([disabled]) {
|
105 |
-
background-color: #39b54a;
|
106 |
-
}
|
107 |
-
#WBCR .wdan-button.wdan-button-success:not([disabled]):hover {
|
108 |
-
opacity: 0.85;
|
109 |
-
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
110 |
-
box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
111 |
-
}
|
112 |
-
#WBCR .wdan-button.wdan-button-success:not([disabled]):active {
|
113 |
-
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
114 |
-
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
115 |
-
}
|
116 |
-
#WBCR .wdan-button.wdan-button-warning {
|
117 |
-
background-color: #a4afb7;
|
118 |
-
color: #fff;
|
119 |
-
}
|
120 |
-
#WBCR .wdan-button.wdan-button-warning[disabled] {
|
121 |
-
background-color: #c2cbd2;
|
122 |
-
}
|
123 |
-
#WBCR .wdan-button.wdan-button-warning:not([disabled]):hover {
|
124 |
-
background-color: #b01b1b;
|
125 |
-
opacity: 0.85;
|
126 |
-
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
127 |
-
box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
128 |
-
}
|
129 |
-
#WBCR .wdan-button.wdan-button-warning:not([disabled]):active {
|
130 |
-
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
131 |
-
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
132 |
-
}
|
133 |
-
#WBCR .wdan-button.wdan-button-danger {
|
134 |
-
background-color: #d72b3f;
|
135 |
-
color: #fff;
|
136 |
-
}
|
137 |
-
#WBCR .wdan-button.wdan-button-danger[disabled] {
|
138 |
-
background-color: #c2cbd2;
|
139 |
-
}
|
140 |
-
#WBCR .wdan-button.wdan-button-danger:not([disabled]):hover {
|
141 |
-
opacity: 0.85;
|
142 |
-
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
143 |
-
box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
144 |
-
}
|
145 |
-
#WBCR .wdan-button.wdan-button-danger:not([disabled]):active {
|
146 |
-
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
147 |
-
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
148 |
-
}
|
149 |
-
#WBCR .wdan-button.wdan-edit-template {
|
150 |
-
display: inline-block;
|
151 |
-
margin-top: 15px;
|
152 |
-
color: #fff;
|
153 |
-
}
|
154 |
-
#WBCR .wdan-button.wdan-button-default {
|
155 |
-
background-color: #a4afb7;
|
156 |
-
color: #fff;
|
157 |
-
font-size: 11px;
|
158 |
-
padding: 7px 21px;
|
159 |
-
}
|
160 |
-
#WBCR .wdan-button.wdan-button-default:hover {
|
161 |
-
background-color: #6d7882;
|
162 |
-
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
163 |
-
box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
164 |
-
}
|
165 |
-
#WBCR .wdan-button.wdan-button-default:active {
|
166 |
-
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
167 |
-
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
168 |
-
}
|
169 |
-
#WBCR .wdan-button.wdan-button-default:visited {
|
170 |
-
color: #fff;
|
171 |
-
}
|
172 |
-
#WBCR .wdan-button.wdan-button-go-pro {
|
173 |
-
background-color: #ff5722;
|
174 |
-
}
|
175 |
-
#WBCR .wdan-button i {
|
176 |
-
margin-right: 10px;
|
177 |
-
}
|
178 |
-
.wdan-hidden-list {
|
179 |
-
padding: 0 15px;
|
180 |
-
}
|
181 |
-
.wdan-hidden-list-notice {
|
182 |
-
background: #fff;
|
183 |
-
border: 1px solid #ccd0d4;
|
184 |
-
border-left-width: 4px;
|
185 |
-
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
186 |
-
padding: 1px 12px;
|
187 |
-
}
|
188 |
-
.wdan-hidden-list-notice div.wdan-notice-p {
|
189 |
-
margin: 0.5em 0;
|
190 |
-
padding: 2px;
|
191 |
-
}
|
192 |
-
.wdan-hidden-list-notice div.wdan-notice-p div {
|
193 |
-
width: 100%;
|
194 |
-
}
|
195 |
-
.wdan-hidden-list-table {
|
196 |
-
border: 0;
|
197 |
-
}
|
198 |
-
.wdan-hidden-list-table tr > td:first-child {
|
199 |
-
padding: 5px 0 5px;
|
200 |
-
}
|
201 |
-
.wdan-hidden-list-table tr > td:last-child {
|
202 |
-
padding: 0 10px 0;
|
203 |
-
text-align: center;
|
204 |
-
}
|
205 |
-
.wdan-hidden-list-table .wdan-notices-page-table-head td {
|
206 |
-
font-size: 16px;
|
207 |
-
text-transform: uppercase;
|
208 |
-
padding: 10px !important;
|
209 |
-
font-weight: bold;
|
210 |
-
}
|
211 |
-
.wdan-hidden-list-table .wdan-hidden-list-notice-action {
|
212 |
-
vertical-align: middle;
|
213 |
-
}
|
214 |
-
.wdan-hidden-list-table .wdan-page-restore-notice-link-loader {
|
215 |
-
background: url(../img/loader.gif);
|
216 |
-
background-size: contain;
|
217 |
-
background-repeat: no-repeat;
|
218 |
-
background-position: top;
|
219 |
-
}
|
220 |
/*# sourceMappingURL=settings.css.map */
|
1 |
+
#WBCR .factory-checkbox.wdanpro-checkbox-premium-label:after,
|
2 |
+
#WBCR .wdanpro-radio-premium-label .factory-compact_panel:after {
|
3 |
+
display: inline-block;
|
4 |
+
position: relative;
|
5 |
+
content: 'PRO';
|
6 |
+
background: #ff5722;
|
7 |
+
border-radius: 4px;
|
8 |
+
color: #fff;
|
9 |
+
font-size: 10px;
|
10 |
+
line-height: 1;
|
11 |
+
font-style: normal;
|
12 |
+
padding: 4px 6px;
|
13 |
+
margin-left: 4px;
|
14 |
+
vertical-align: top;
|
15 |
+
top: -8px;
|
16 |
+
left: -10px;
|
17 |
+
right: auto;
|
18 |
+
z-index: 11;
|
19 |
+
cursor: pointer;
|
20 |
+
}
|
21 |
+
#WBCR .wdanpro-radio-premium-label .factory-compact_panel:after {
|
22 |
+
position: absolute;
|
23 |
+
top: -10px;
|
24 |
+
right: -10px;
|
25 |
+
left: auto;
|
26 |
+
}
|
27 |
+
#WBCR .factory-checkbox-disabled input,
|
28 |
+
#WBCR .factory-checkbox-disabled button,
|
29 |
+
#WBCR .wdanpro-radio-premium-label .factory-compact_panel {
|
30 |
+
pointer-events: none;
|
31 |
+
cursor: not-allowed;
|
32 |
+
opacity: 0.65;
|
33 |
+
filter: alpha(opacity=65);
|
34 |
+
-webkit-box-shadow: none;
|
35 |
+
box-shadow: none;
|
36 |
+
}
|
37 |
+
#WBCR .wrdan-premium-fake-content {
|
38 |
+
position: relative;
|
39 |
+
padding: 15px;
|
40 |
+
}
|
41 |
+
#WBCR .wdan-premium-info {
|
42 |
+
position: absolute;
|
43 |
+
top: 50px;
|
44 |
+
left: 50%;
|
45 |
+
margin-left: -250px;
|
46 |
+
max-width: 500px;
|
47 |
+
z-index: 999;
|
48 |
+
}
|
49 |
+
#WBCR .wdan-premium-info h3 {
|
50 |
+
font-size: 32px;
|
51 |
+
font-weight: 300;
|
52 |
+
color: inherit;
|
53 |
+
margin: 40px 0 10px;
|
54 |
+
line-height: 1.2;
|
55 |
+
}
|
56 |
+
#WBCR .wdan-premium-info p {
|
57 |
+
font-size: 16px;
|
58 |
+
font-weight: 400;
|
59 |
+
color: #a4afb7;
|
60 |
+
margin-bottom: 40px;
|
61 |
+
}
|
62 |
+
#WBCR .wdan-premium-layer {
|
63 |
+
position: absolute;
|
64 |
+
top: 0;
|
65 |
+
left: 0;
|
66 |
+
right: 0;
|
67 |
+
bottom: 0;
|
68 |
+
opacity: 0.9;
|
69 |
+
background: #fff;
|
70 |
+
}
|
71 |
+
#WBCR .wdan-button {
|
72 |
+
font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
|
73 |
+
font-weight: 500;
|
74 |
+
text-transform: uppercase;
|
75 |
+
outline: none;
|
76 |
+
border: none;
|
77 |
+
text-decoration: none;
|
78 |
+
-webkit-border-radius: 3px;
|
79 |
+
border-radius: 3px;
|
80 |
+
-webkit-transition-property: background, color, opacity, -webkit-box-shadow;
|
81 |
+
transition-property: background, color, opacity, -webkit-box-shadow;
|
82 |
+
-o-transition-property: background, color, box-shadow, opacity;
|
83 |
+
transition-property: background, color, box-shadow, opacity;
|
84 |
+
transition-property: background, color, box-shadow, opacity, -webkit-box-shadow;
|
85 |
+
-webkit-transition-duration: 0.3s;
|
86 |
+
-o-transition-duration: 0.3s;
|
87 |
+
transition-duration: 0.3s;
|
88 |
+
}
|
89 |
+
#WBCR .wdan-button:hover {
|
90 |
+
border: none;
|
91 |
+
}
|
92 |
+
#WBCR .wdan-button:not([disabled]) {
|
93 |
+
cursor: pointer;
|
94 |
+
}
|
95 |
+
#WBCR .wdan-button:not(.wdan-button-state) .wdan-state-icon {
|
96 |
+
display: none;
|
97 |
+
}
|
98 |
+
#WBCR .wdan-button.wdan-button-success {
|
99 |
+
color: #fff;
|
100 |
+
}
|
101 |
+
#WBCR .wdan-button.wdan-button-success[disabled] {
|
102 |
+
background-color: #c2cbd2;
|
103 |
+
}
|
104 |
+
#WBCR .wdan-button.wdan-button-success:not([disabled]) {
|
105 |
+
background-color: #39b54a;
|
106 |
+
}
|
107 |
+
#WBCR .wdan-button.wdan-button-success:not([disabled]):hover {
|
108 |
+
opacity: 0.85;
|
109 |
+
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
110 |
+
box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
111 |
+
}
|
112 |
+
#WBCR .wdan-button.wdan-button-success:not([disabled]):active {
|
113 |
+
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
114 |
+
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
115 |
+
}
|
116 |
+
#WBCR .wdan-button.wdan-button-warning {
|
117 |
+
background-color: #a4afb7;
|
118 |
+
color: #fff;
|
119 |
+
}
|
120 |
+
#WBCR .wdan-button.wdan-button-warning[disabled] {
|
121 |
+
background-color: #c2cbd2;
|
122 |
+
}
|
123 |
+
#WBCR .wdan-button.wdan-button-warning:not([disabled]):hover {
|
124 |
+
background-color: #b01b1b;
|
125 |
+
opacity: 0.85;
|
126 |
+
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
127 |
+
box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
128 |
+
}
|
129 |
+
#WBCR .wdan-button.wdan-button-warning:not([disabled]):active {
|
130 |
+
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
131 |
+
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
132 |
+
}
|
133 |
+
#WBCR .wdan-button.wdan-button-danger {
|
134 |
+
background-color: #d72b3f;
|
135 |
+
color: #fff;
|
136 |
+
}
|
137 |
+
#WBCR .wdan-button.wdan-button-danger[disabled] {
|
138 |
+
background-color: #c2cbd2;
|
139 |
+
}
|
140 |
+
#WBCR .wdan-button.wdan-button-danger:not([disabled]):hover {
|
141 |
+
opacity: 0.85;
|
142 |
+
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
143 |
+
box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
144 |
+
}
|
145 |
+
#WBCR .wdan-button.wdan-button-danger:not([disabled]):active {
|
146 |
+
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
147 |
+
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
148 |
+
}
|
149 |
+
#WBCR .wdan-button.wdan-edit-template {
|
150 |
+
display: inline-block;
|
151 |
+
margin-top: 15px;
|
152 |
+
color: #fff;
|
153 |
+
}
|
154 |
+
#WBCR .wdan-button.wdan-button-default {
|
155 |
+
background-color: #a4afb7;
|
156 |
+
color: #fff;
|
157 |
+
font-size: 11px;
|
158 |
+
padding: 7px 21px;
|
159 |
+
}
|
160 |
+
#WBCR .wdan-button.wdan-button-default:hover {
|
161 |
+
background-color: #6d7882;
|
162 |
+
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
163 |
+
box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
|
164 |
+
}
|
165 |
+
#WBCR .wdan-button.wdan-button-default:active {
|
166 |
+
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
167 |
+
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1);
|
168 |
+
}
|
169 |
+
#WBCR .wdan-button.wdan-button-default:visited {
|
170 |
+
color: #fff;
|
171 |
+
}
|
172 |
+
#WBCR .wdan-button.wdan-button-go-pro {
|
173 |
+
background-color: #ff5722;
|
174 |
+
}
|
175 |
+
#WBCR .wdan-button i {
|
176 |
+
margin-right: 10px;
|
177 |
+
}
|
178 |
+
.wdan-hidden-list {
|
179 |
+
padding: 0 15px;
|
180 |
+
}
|
181 |
+
.wdan-hidden-list-notice {
|
182 |
+
background: #fff;
|
183 |
+
border: 1px solid #ccd0d4;
|
184 |
+
border-left-width: 4px;
|
185 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
186 |
+
padding: 1px 12px;
|
187 |
+
}
|
188 |
+
.wdan-hidden-list-notice div.wdan-notice-p {
|
189 |
+
margin: 0.5em 0;
|
190 |
+
padding: 2px;
|
191 |
+
}
|
192 |
+
.wdan-hidden-list-notice div.wdan-notice-p div {
|
193 |
+
width: 100%;
|
194 |
+
}
|
195 |
+
.wdan-hidden-list-table {
|
196 |
+
border: 0;
|
197 |
+
}
|
198 |
+
.wdan-hidden-list-table tr > td:first-child {
|
199 |
+
padding: 5px 0 5px;
|
200 |
+
}
|
201 |
+
.wdan-hidden-list-table tr > td:last-child {
|
202 |
+
padding: 0 10px 0;
|
203 |
+
text-align: center;
|
204 |
+
}
|
205 |
+
.wdan-hidden-list-table .wdan-notices-page-table-head td {
|
206 |
+
font-size: 16px;
|
207 |
+
text-transform: uppercase;
|
208 |
+
padding: 10px !important;
|
209 |
+
font-weight: bold;
|
210 |
+
}
|
211 |
+
.wdan-hidden-list-table .wdan-hidden-list-notice-action {
|
212 |
+
vertical-align: middle;
|
213 |
+
}
|
214 |
+
.wdan-hidden-list-table .wdan-page-restore-notice-link-loader {
|
215 |
+
background: url(../img/loader.gif);
|
216 |
+
background-size: contain;
|
217 |
+
background-repeat: no-repeat;
|
218 |
+
background-position: top;
|
219 |
+
}
|
220 |
/*# sourceMappingURL=settings.css.map */
|
admin/assets/css/settings.css.map
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
{"version":3,"sources":["settings.less"],"names":[],"mappings":"AAAA,KACE,kBAAiB,+BAA+B;AADlD,KAEE,6BAA6B,uBAAsB;EACjD,qBAAA;EACA,kBAAA;EACA,SAAS,KAAT;EACA,mBAAA;EACA,kBAAA;EACA,WAAA;EACA,eAAA;EACA,cAAA;EACA,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,mBAAA;EACA,SAAA;EACA,WAAA;EACA,WAAA;EACA,WAAA;EACA,eAAA;;AAnBJ,KAsBE,6BAA6B,uBAAsB;EACjD,kBAAA;EACA,UAAA;EACA,YAAA;EACA,UAAA;;AA1BJ,KA6BE,2BAA2B;AA7B7B,KA8BE,2BAA2B;AA9B7B,KA+BE,6BAA6B;EAC3B,oBAAA;EACA,mBAAA;EACA,aAAA;EACA,yBAAA;EACA,wBAAA;EACA,gBAAA;;AArCJ,KAwCE;EACE,kBAAA;EACA,aAAA;;AA1CJ,KA8CE;EACE,kBAAA;EACA,SAAA;EACA,SAAA;EACA,mBAAA;EACA,gBAAA;EACA,YAAA;;AApDJ,KA8CE,mBAQE;EACE,eAAA;EACA,gBAAA;EACA,cAAA;EACA,mBAAA;EACA,gBAAA;;AA3DN,KA8CE,mBAgBE;EACE,eAAA;EACA,gBAAA;EACA,cAAA;EACA,mBAAA;;AAlEN,KAsEE;EACE,kBAAA;EACA,MAAA;EACA,OAAA;EACA,QAAA;EACA,SAAA;EACA,YAAA;EACA,gBAAA;;AA7EJ,KAkFE;EACE,0DAAA;EACA,gBAAA;EACA,yBAAA;EACA,aAAA;EACA,YAAA;EACA,qBAAA;EACA,0BAAA;EACA,kBAAA;EACA,2EAAA;EACA,mEAAA;EACA,8DAAA;EACA,2DAAA;EACA,+EAAA;EACA,iCAAA;EACA,4BAAA;EACA,yBAAA;;AAlGJ,KAqGE,aAAY;EACV,YAAA;;AAtGJ,KAyGE,aAAY,IAAI;EACd,eAAA;;AA1GJ,KA6GE,aAAY,IAAI,oBAAqB;EACnC,aAAA;;AA9GJ,KAiHE,aAAY;EACV,WAAA;;AAlHJ,KAqHE,aAAY,oBAAoB;EAC9B,yBAAA;;AAtHJ,KAyHE,aAAY,oBAAoB,IAAI;EAClC,yBAAA;;AA1HJ,KA6HE,aAAY,oBAAoB,IAAI,YAAY;EAC9C,aAAA;EACA,6EAAA;EACA,qEAAA;;AAhIJ,KAmIE,aAAY,oBAAoB,IAAI,YAAY;EAC9C,gFAAA;EACA,wEAAA;;AArIJ,KAwIE,aAAY;EACV,yBAAA;EACA,WAAA;;AA1IJ,KA6IE,aAAY,oBAAoB;EAC9B,yBAAA;;AA9IJ,KAiJE,aAAY,oBAAoB,IAAI,YAAY;EAC9C,yBAAA;EACA,aAAA;EACA,6EAAA;EACA,qEAAA;;AArJJ,KAwJE,aAAY,oBAAoB,IAAI,YAAY;EAC9C,gFAAA;EACA,wEAAA;;AA1JJ,KA6JE,aAAY;EACV,yBAAA;EACA,WAAA;;AA/JJ,KAkKE,aAAY,mBAAmB;EAC7B,yBAAA;;AAnKJ,KAsKE,aAAY,mBAAmB,IAAI,YAAY;EAC7C,aAAA;EACA,6EAAA;EACA,qEAAA;;AAzKJ,KA4KE,aAAY,mBAAmB,IAAI,YAAY;EAC7C,gFAAA;EACA,wEAAA;;AA9KJ,KAiLE,aAAY;EACV,qBAAA;EACA,gBAAA;EACA,WAAA;;AApLJ,KAuLE,aAAY;EACV,yBAAA;EACA,WAAA;EACA,eAAA;EACA,iBAAA;;AA3LJ,KA8LE,aAAY,oBAAoB;EAC9B,yBAAA;EACA,6EAAA;EACA,qEAAA;;AAjMJ,KAoME,aAAY,oBAAoB;EAC9B,gFAAA;EACA,wEAAA;;AAtMJ,KAyME,aAAY,oBAAoB;EAC9B,WAAA;;AA1MJ,KA6ME,aAAY;EACV,yBAAA;;AA9MJ,KAiNE,aAAa;EACX,kBAAA;;AAKJ;EACE,eAAA;;AAGF;EACE,gBAAA;EACA,yBAAA;EACA,sBAAA;EACA,yCAAA;EACA,iBAAA;;AALF,wBAOE,IAAG;EACD,eAAA;EACA,YAAA;;AAEA,wBAJF,IAAG,cAIC;EACA,WAAA;;AAKN;EACE,SAAA;;AADF,uBAGE,GAAG,KAAI;EACL,kBAAA;;AAJJ,uBAOE,GAAG,KAAI;EACL,iBAAA;EACA,kBAAA;;AATJ,uBAYE,8BAA8B;EAC5B,eAAA;EACA,yBAAA;EACA,wBAAA;EACA,iBAAA;;AAhBJ,uBAmBE;EACE,sBAAA;;AApBJ,uBAuBE;EACE,kCAAA;EACA,wBAAA;EACA,4BAAA;EACA,wBAAA","file":"settings.css"}
|
|
admin/assets/css/settings.less
CHANGED
@@ -1,266 +1,266 @@
|
|
1 |
-
#WBCR {
|
2 |
-
.factory-checkbox.wdanpro-checkbox-premium-label:after,
|
3 |
-
.wdanpro-radio-premium-label .factory-compact_panel:after {
|
4 |
-
display: inline-block;
|
5 |
-
position: relative;
|
6 |
-
content: 'PRO';
|
7 |
-
background: #ff5722;
|
8 |
-
border-radius: 4px;
|
9 |
-
color: #fff;
|
10 |
-
font-size: 10px;
|
11 |
-
line-height: 1;
|
12 |
-
font-style: normal;
|
13 |
-
padding: 4px 6px;
|
14 |
-
margin-left: 4px;
|
15 |
-
vertical-align: top;
|
16 |
-
top: -8px;
|
17 |
-
left: -10px;
|
18 |
-
right: auto;
|
19 |
-
z-index: 11;
|
20 |
-
cursor: pointer;
|
21 |
-
}
|
22 |
-
|
23 |
-
.wdanpro-radio-premium-label .factory-compact_panel:after {
|
24 |
-
position: absolute;
|
25 |
-
top: -10px;
|
26 |
-
right: -10px;
|
27 |
-
left: auto;
|
28 |
-
}
|
29 |
-
|
30 |
-
.factory-checkbox-disabled input,
|
31 |
-
.factory-checkbox-disabled button,
|
32 |
-
.wdanpro-radio-premium-label .factory-compact_panel {
|
33 |
-
pointer-events: none;
|
34 |
-
cursor: not-allowed;
|
35 |
-
opacity: 0.65;
|
36 |
-
filter: alpha(opacity=65);
|
37 |
-
-webkit-box-shadow: none;
|
38 |
-
box-shadow: none;
|
39 |
-
}
|
40 |
-
|
41 |
-
.wrdan-premium-fake-content {
|
42 |
-
position: relative;
|
43 |
-
padding: 15px;
|
44 |
-
|
45 |
-
}
|
46 |
-
|
47 |
-
.wdan-premium-info {
|
48 |
-
position: absolute;
|
49 |
-
top: 50px;
|
50 |
-
left: 50%;
|
51 |
-
margin-left: -250px;
|
52 |
-
max-width: 500px;
|
53 |
-
z-index: 999;
|
54 |
-
|
55 |
-
h3 {
|
56 |
-
font-size: 32px;
|
57 |
-
font-weight: 300;
|
58 |
-
color: inherit;
|
59 |
-
margin: 40px 0 10px;
|
60 |
-
line-height: 1.2;
|
61 |
-
}
|
62 |
-
|
63 |
-
p {
|
64 |
-
font-size: 16px;
|
65 |
-
font-weight: 400;
|
66 |
-
color: #a4afb7;
|
67 |
-
margin-bottom: 40px;
|
68 |
-
}
|
69 |
-
}
|
70 |
-
|
71 |
-
.wdan-premium-layer {
|
72 |
-
position: absolute;
|
73 |
-
top: 0;
|
74 |
-
left: 0;
|
75 |
-
right: 0;
|
76 |
-
bottom: 0;
|
77 |
-
opacity: 0.9;
|
78 |
-
background: #fff;
|
79 |
-
|
80 |
-
|
81 |
-
}
|
82 |
-
|
83 |
-
.wdan-button {
|
84 |
-
font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
|
85 |
-
font-weight: 500;
|
86 |
-
text-transform: uppercase;
|
87 |
-
outline: none;
|
88 |
-
border: none;
|
89 |
-
text-decoration: none;
|
90 |
-
-webkit-border-radius: 3px;
|
91 |
-
border-radius: 3px;
|
92 |
-
-webkit-transition-property: background, color, opacity, -webkit-box-shadow;
|
93 |
-
transition-property: background, color, opacity, -webkit-box-shadow;
|
94 |
-
-o-transition-property: background, color, box-shadow, opacity;
|
95 |
-
transition-property: background, color, box-shadow, opacity;
|
96 |
-
transition-property: background, color, box-shadow, opacity, -webkit-box-shadow;
|
97 |
-
-webkit-transition-duration: .3s;
|
98 |
-
-o-transition-duration: .3s;
|
99 |
-
transition-duration: .3s
|
100 |
-
}
|
101 |
-
|
102 |
-
.wdan-button:hover {
|
103 |
-
border: none
|
104 |
-
}
|
105 |
-
|
106 |
-
.wdan-button:not([disabled]) {
|
107 |
-
cursor: pointer
|
108 |
-
}
|
109 |
-
|
110 |
-
.wdan-button:not(.wdan-button-state) .wdan-state-icon {
|
111 |
-
display: none
|
112 |
-
}
|
113 |
-
|
114 |
-
.wdan-button.wdan-button-success {
|
115 |
-
color: #fff
|
116 |
-
}
|
117 |
-
|
118 |
-
.wdan-button.wdan-button-success[disabled] {
|
119 |
-
background-color: #c2cbd2
|
120 |
-
}
|
121 |
-
|
122 |
-
.wdan-button.wdan-button-success:not([disabled]) {
|
123 |
-
background-color: #39b54a
|
124 |
-
}
|
125 |
-
|
126 |
-
.wdan-button.wdan-button-success:not([disabled]):hover {
|
127 |
-
opacity: .85;
|
128 |
-
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2);
|
129 |
-
box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2)
|
130 |
-
}
|
131 |
-
|
132 |
-
.wdan-button.wdan-button-success:not([disabled]):active {
|
133 |
-
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1);
|
134 |
-
box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1)
|
135 |
-
}
|
136 |
-
|
137 |
-
.wdan-button.wdan-button-warning {
|
138 |
-
background-color: #a4afb7;
|
139 |
-
color: #fff
|
140 |
-
}
|
141 |
-
|
142 |
-
.wdan-button.wdan-button-warning[disabled] {
|
143 |
-
background-color: #c2cbd2
|
144 |
-
}
|
145 |
-
|
146 |
-
.wdan-button.wdan-button-warning:not([disabled]):hover {
|
147 |
-
background-color: #b01b1b;
|
148 |
-
opacity: .85;
|
149 |
-
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2);
|
150 |
-
box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2)
|
151 |
-
}
|
152 |
-
|
153 |
-
.wdan-button.wdan-button-warning:not([disabled]):active {
|
154 |
-
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1);
|
155 |
-
box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1)
|
156 |
-
}
|
157 |
-
|
158 |
-
.wdan-button.wdan-button-danger {
|
159 |
-
background-color: #d72b3f;
|
160 |
-
color: #fff
|
161 |
-
}
|
162 |
-
|
163 |
-
.wdan-button.wdan-button-danger[disabled] {
|
164 |
-
background-color: #c2cbd2
|
165 |
-
}
|
166 |
-
|
167 |
-
.wdan-button.wdan-button-danger:not([disabled]):hover {
|
168 |
-
opacity: .85;
|
169 |
-
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2);
|
170 |
-
box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2)
|
171 |
-
}
|
172 |
-
|
173 |
-
.wdan-button.wdan-button-danger:not([disabled]):active {
|
174 |
-
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1);
|
175 |
-
box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1)
|
176 |
-
}
|
177 |
-
|
178 |
-
.wdan-button.wdan-edit-template {
|
179 |
-
display: inline-block;
|
180 |
-
margin-top: 15px;
|
181 |
-
color: #fff
|
182 |
-
}
|
183 |
-
|
184 |
-
.wdan-button.wdan-button-default {
|
185 |
-
background-color: #a4afb7;
|
186 |
-
color: #fff;
|
187 |
-
font-size: 11px;
|
188 |
-
padding: 7px 21px
|
189 |
-
}
|
190 |
-
|
191 |
-
.wdan-button.wdan-button-default:hover {
|
192 |
-
background-color: #6d7882;
|
193 |
-
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2);
|
194 |
-
box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2)
|
195 |
-
}
|
196 |
-
|
197 |
-
.wdan-button.wdan-button-default:active {
|
198 |
-
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1);
|
199 |
-
box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1)
|
200 |
-
}
|
201 |
-
|
202 |
-
.wdan-button.wdan-button-default:visited {
|
203 |
-
color: #fff
|
204 |
-
}
|
205 |
-
|
206 |
-
.wdan-button.wdan-button-go-pro {
|
207 |
-
background-color: #ff5722
|
208 |
-
}
|
209 |
-
|
210 |
-
.wdan-button i {
|
211 |
-
margin-right: 10px
|
212 |
-
}
|
213 |
-
|
214 |
-
}
|
215 |
-
|
216 |
-
.wdan-hidden-list {
|
217 |
-
padding: 0 15px;
|
218 |
-
}
|
219 |
-
|
220 |
-
.wdan-hidden-list-notice {
|
221 |
-
background: #fff;
|
222 |
-
border: 1px solid #ccd0d4;
|
223 |
-
border-left-width: 4px;
|
224 |
-
box-shadow: 0 1px 1px rgba(0, 0, 0, .04);
|
225 |
-
padding: 1px 12px;
|
226 |
-
|
227 |
-
div.wdan-notice-p {
|
228 |
-
margin: 0.5em 0;
|
229 |
-
padding: 2px;
|
230 |
-
|
231 |
-
& div{
|
232 |
-
width: 100%;
|
233 |
-
}
|
234 |
-
}
|
235 |
-
}
|
236 |
-
|
237 |
-
.wdan-hidden-list-table {
|
238 |
-
border: 0;
|
239 |
-
|
240 |
-
tr > td:first-child {
|
241 |
-
padding: 5px 0 5px;
|
242 |
-
}
|
243 |
-
|
244 |
-
tr > td:last-child {
|
245 |
-
padding: 0 10px 0;
|
246 |
-
text-align: center;
|
247 |
-
}
|
248 |
-
|
249 |
-
.wdan-notices-page-table-head td {
|
250 |
-
font-size: 16px;
|
251 |
-
text-transform: uppercase;
|
252 |
-
padding: 10px !important;
|
253 |
-
font-weight: bold;
|
254 |
-
}
|
255 |
-
|
256 |
-
.wdan-hidden-list-notice-action {
|
257 |
-
vertical-align: middle;
|
258 |
-
}
|
259 |
-
|
260 |
-
.wdan-page-restore-notice-link-loader {
|
261 |
-
background: url(../img/loader.gif);
|
262 |
-
background-size: contain;
|
263 |
-
background-repeat: no-repeat;
|
264 |
-
background-position: top;
|
265 |
-
}
|
266 |
-
}
|
1 |
+
#WBCR {
|
2 |
+
.factory-checkbox.wdanpro-checkbox-premium-label:after,
|
3 |
+
.wdanpro-radio-premium-label .factory-compact_panel:after {
|
4 |
+
display: inline-block;
|
5 |
+
position: relative;
|
6 |
+
content: 'PRO';
|
7 |
+
background: #ff5722;
|
8 |
+
border-radius: 4px;
|
9 |
+
color: #fff;
|
10 |
+
font-size: 10px;
|
11 |
+
line-height: 1;
|
12 |
+
font-style: normal;
|
13 |
+
padding: 4px 6px;
|
14 |
+
margin-left: 4px;
|
15 |
+
vertical-align: top;
|
16 |
+
top: -8px;
|
17 |
+
left: -10px;
|
18 |
+
right: auto;
|
19 |
+
z-index: 11;
|
20 |
+
cursor: pointer;
|
21 |
+
}
|
22 |
+
|
23 |
+
.wdanpro-radio-premium-label .factory-compact_panel:after {
|
24 |
+
position: absolute;
|
25 |
+
top: -10px;
|
26 |
+
right: -10px;
|
27 |
+
left: auto;
|
28 |
+
}
|
29 |
+
|
30 |
+
.factory-checkbox-disabled input,
|
31 |
+
.factory-checkbox-disabled button,
|
32 |
+
.wdanpro-radio-premium-label .factory-compact_panel {
|
33 |
+
pointer-events: none;
|
34 |
+
cursor: not-allowed;
|
35 |
+
opacity: 0.65;
|
36 |
+
filter: alpha(opacity=65);
|
37 |
+
-webkit-box-shadow: none;
|
38 |
+
box-shadow: none;
|
39 |
+
}
|
40 |
+
|
41 |
+
.wrdan-premium-fake-content {
|
42 |
+
position: relative;
|
43 |
+
padding: 15px;
|
44 |
+
|
45 |
+
}
|
46 |
+
|
47 |
+
.wdan-premium-info {
|
48 |
+
position: absolute;
|
49 |
+
top: 50px;
|
50 |
+
left: 50%;
|
51 |
+
margin-left: -250px;
|
52 |
+
max-width: 500px;
|
53 |
+
z-index: 999;
|
54 |
+
|
55 |
+
h3 {
|
56 |
+
font-size: 32px;
|
57 |
+
font-weight: 300;
|
58 |
+
color: inherit;
|
59 |
+
margin: 40px 0 10px;
|
60 |
+
line-height: 1.2;
|
61 |
+
}
|
62 |
+
|
63 |
+
p {
|
64 |
+
font-size: 16px;
|
65 |
+
font-weight: 400;
|
66 |
+
color: #a4afb7;
|
67 |
+
margin-bottom: 40px;
|
68 |
+
}
|
69 |
+
}
|
70 |
+
|
71 |
+
.wdan-premium-layer {
|
72 |
+
position: absolute;
|
73 |
+
top: 0;
|
74 |
+
left: 0;
|
75 |
+
right: 0;
|
76 |
+
bottom: 0;
|
77 |
+
opacity: 0.9;
|
78 |
+
background: #fff;
|
79 |
+
|
80 |
+
|
81 |
+
}
|
82 |
+
|
83 |
+
.wdan-button {
|
84 |
+
font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
|
85 |
+
font-weight: 500;
|
86 |
+
text-transform: uppercase;
|
87 |
+
outline: none;
|
88 |
+
border: none;
|
89 |
+
text-decoration: none;
|
90 |
+
-webkit-border-radius: 3px;
|
91 |
+
border-radius: 3px;
|
92 |
+
-webkit-transition-property: background, color, opacity, -webkit-box-shadow;
|
93 |
+
transition-property: background, color, opacity, -webkit-box-shadow;
|
94 |
+
-o-transition-property: background, color, box-shadow, opacity;
|
95 |
+
transition-property: background, color, box-shadow, opacity;
|
96 |
+
transition-property: background, color, box-shadow, opacity, -webkit-box-shadow;
|
97 |
+
-webkit-transition-duration: .3s;
|
98 |
+
-o-transition-duration: .3s;
|
99 |
+
transition-duration: .3s
|
100 |
+
}
|
101 |
+
|
102 |
+
.wdan-button:hover {
|
103 |
+
border: none
|
104 |
+
}
|
105 |
+
|
106 |
+
.wdan-button:not([disabled]) {
|
107 |
+
cursor: pointer
|
108 |
+
}
|
109 |
+
|
110 |
+
.wdan-button:not(.wdan-button-state) .wdan-state-icon {
|
111 |
+
display: none
|
112 |
+
}
|
113 |
+
|
114 |
+
.wdan-button.wdan-button-success {
|
115 |
+
color: #fff
|
116 |
+
}
|
117 |
+
|
118 |
+
.wdan-button.wdan-button-success[disabled] {
|
119 |
+
background-color: #c2cbd2
|
120 |
+
}
|
121 |
+
|
122 |
+
.wdan-button.wdan-button-success:not([disabled]) {
|
123 |
+
background-color: #39b54a
|
124 |
+
}
|
125 |
+
|
126 |
+
.wdan-button.wdan-button-success:not([disabled]):hover {
|
127 |
+
opacity: .85;
|
128 |
+
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2);
|
129 |
+
box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2)
|
130 |
+
}
|
131 |
+
|
132 |
+
.wdan-button.wdan-button-success:not([disabled]):active {
|
133 |
+
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1);
|
134 |
+
box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1)
|
135 |
+
}
|
136 |
+
|
137 |
+
.wdan-button.wdan-button-warning {
|
138 |
+
background-color: #a4afb7;
|
139 |
+
color: #fff
|
140 |
+
}
|
141 |
+
|
142 |
+
.wdan-button.wdan-button-warning[disabled] {
|
143 |
+
background-color: #c2cbd2
|
144 |
+
}
|
145 |
+
|
146 |
+
.wdan-button.wdan-button-warning:not([disabled]):hover {
|
147 |
+
background-color: #b01b1b;
|
148 |
+
opacity: .85;
|
149 |
+
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2);
|
150 |
+
box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2)
|
151 |
+
}
|
152 |
+
|
153 |
+
.wdan-button.wdan-button-warning:not([disabled]):active {
|
154 |
+
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1);
|
155 |
+
box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1)
|
156 |
+
}
|
157 |
+
|
158 |
+
.wdan-button.wdan-button-danger {
|
159 |
+
background-color: #d72b3f;
|
160 |
+
color: #fff
|
161 |
+
}
|
162 |
+
|
163 |
+
.wdan-button.wdan-button-danger[disabled] {
|
164 |
+
background-color: #c2cbd2
|
165 |
+
}
|
166 |
+
|
167 |
+
.wdan-button.wdan-button-danger:not([disabled]):hover {
|
168 |
+
opacity: .85;
|
169 |
+
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2);
|
170 |
+
box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2)
|
171 |
+
}
|
172 |
+
|
173 |
+
.wdan-button.wdan-button-danger:not([disabled]):active {
|
174 |
+
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1);
|
175 |
+
box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1)
|
176 |
+
}
|
177 |
+
|
178 |
+
.wdan-button.wdan-edit-template {
|
179 |
+
display: inline-block;
|
180 |
+
margin-top: 15px;
|
181 |
+
color: #fff
|
182 |
+
}
|
183 |
+
|
184 |
+
.wdan-button.wdan-button-default {
|
185 |
+
background-color: #a4afb7;
|
186 |
+
color: #fff;
|
187 |
+
font-size: 11px;
|
188 |
+
padding: 7px 21px
|
189 |
+
}
|
190 |
+
|
191 |
+
.wdan-button.wdan-button-default:hover {
|
192 |
+
background-color: #6d7882;
|
193 |
+
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2);
|
194 |
+
box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2)
|
195 |
+
}
|
196 |
+
|
197 |
+
.wdan-button.wdan-button-default:active {
|
198 |
+
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1);
|
199 |
+
box-shadow: 0 5px 10px rgba(0, 0, 0, .19), 0 3px 3px rgba(0, 0, 0, .1)
|
200 |
+
}
|
201 |
+
|
202 |
+
.wdan-button.wdan-button-default:visited {
|
203 |
+
color: #fff
|
204 |
+
}
|
205 |
+
|
206 |
+
.wdan-button.wdan-button-go-pro {
|
207 |
+
background-color: #ff5722
|
208 |
+
}
|
209 |
+
|
210 |
+
.wdan-button i {
|
211 |
+
margin-right: 10px
|
212 |
+
}
|
213 |
+
|
214 |
+
}
|
215 |
+
|
216 |
+
.wdan-hidden-list {
|
217 |
+
padding: 0 15px;
|
218 |
+
}
|
219 |
+
|
220 |
+
.wdan-hidden-list-notice {
|
221 |
+
background: #fff;
|
222 |
+
border: 1px solid #ccd0d4;
|
223 |
+
border-left-width: 4px;
|
224 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, .04);
|
225 |
+
padding: 1px 12px;
|
226 |
+
|
227 |
+
div.wdan-notice-p {
|
228 |
+
margin: 0.5em 0;
|
229 |
+
padding: 2px;
|
230 |
+
|
231 |
+
& div{
|
232 |
+
width: 100%;
|
233 |
+
}
|
234 |
+
}
|
235 |
+
}
|
236 |
+
|
237 |
+
.wdan-hidden-list-table {
|
238 |
+
border: 0;
|
239 |
+
|
240 |
+
tr > td:first-child {
|
241 |
+
padding: 5px 0 5px;
|
242 |
+
}
|
243 |
+
|
244 |
+
tr > td:last-child {
|
245 |
+
padding: 0 10px 0;
|
246 |
+
text-align: center;
|
247 |
+
}
|
248 |
+
|
249 |
+
.wdan-notices-page-table-head td {
|
250 |
+
font-size: 16px;
|
251 |
+
text-transform: uppercase;
|
252 |
+
padding: 10px !important;
|
253 |
+
font-weight: bold;
|
254 |
+
}
|
255 |
+
|
256 |
+
.wdan-hidden-list-notice-action {
|
257 |
+
vertical-align: middle;
|
258 |
+
}
|
259 |
+
|
260 |
+
.wdan-page-restore-notice-link-loader {
|
261 |
+
background: url(../img/loader.gif);
|
262 |
+
background-size: contain;
|
263 |
+
background-repeat: no-repeat;
|
264 |
+
background-position: top;
|
265 |
+
}
|
266 |
+
}
|
admin/assets/img/hide-icon-white.svg
CHANGED
@@ -1,25 +1,25 @@
|
|
1 |
-
<?xml version="1.0" standalone="no"?>
|
2 |
-
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
3 |
-
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
4 |
-
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
5 |
-
width="300.000000pt" height="234.000000pt" viewBox="0 0 300.000000 234.000000"
|
6 |
-
preserveAspectRatio="xMidYMid meet">
|
7 |
-
|
8 |
-
<g transform="translate(0.000000,234.000000) scale(0.100000,-0.100000)"
|
9 |
-
fill="#ffffff" stroke="none">
|
10 |
-
<path d="M629 2072 c-15 -13 -22 -30 -22 -51 0 -29 20 -53 177 -210 l176 -177
|
11 |
-
-92 -95 c-99 -101 -201 -236 -244 -324 l-26 -54 21 -44 c85 -174 274 -388 446
|
12 |
-
-502 159 -106 295 -149 475 -148 141 1 236 24 365 87 l90 45 186 -185 c158
|
13 |
-
-157 190 -184 215 -184 39 0 74 36 74 76 0 25 -114 142 -878 906 -789 790
|
14 |
-
-880 878 -908 878 -18 0 -42 -8 -55 -18z m544 -650 l98 -98 -23 -50 c-31 -68
|
15 |
-
-30 -170 1 -242 31 -68 113 -144 182 -167 64 -22 177 -16 232 11 l38 18 89
|
16 |
-
-89 c50 -49 90 -92 90 -96 0 -9 -105 -55 -175 -75 -82 -25 -258 -25 -339 0
|
17 |
-
-124 37 -255 116 -364 220 -87 81 -232 273 -232 306 0 43 260 360 296 360 5 0
|
18 |
-
53 -44 107 -98z m314 -314 c51 -51 93 -96 93 -99 0 -13 -53 -17 -89 -7 -44 12
|
19 |
-
-89 52 -107 95 -21 48 -18 103 5 103 3 0 47 -42 98 -92z"/>
|
20 |
-
<path d="M1410 1849 c-87 -15 -123 -52 -105 -109 13 -40 47 -53 111 -41 226
|
21 |
-
42 459 -41 660 -235 69 -67 171 -194 210 -260 l26 -45 -37 -57 c-21 -31 -56
|
22 |
-
-81 -78 -110 -47 -62 -53 -105 -18 -134 27 -21 70 -24 92 -5 55 44 199 267
|
23 |
-
199 307 0 14 -16 53 -36 85 -263 437 -650 665 -1024 604z"/>
|
24 |
-
</g>
|
25 |
-
</svg>
|
1 |
+
<?xml version="1.0" standalone="no"?>
|
2 |
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
3 |
+
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
4 |
+
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
5 |
+
width="300.000000pt" height="234.000000pt" viewBox="0 0 300.000000 234.000000"
|
6 |
+
preserveAspectRatio="xMidYMid meet">
|
7 |
+
|
8 |
+
<g transform="translate(0.000000,234.000000) scale(0.100000,-0.100000)"
|
9 |
+
fill="#ffffff" stroke="none">
|
10 |
+
<path d="M629 2072 c-15 -13 -22 -30 -22 -51 0 -29 20 -53 177 -210 l176 -177
|
11 |
+
-92 -95 c-99 -101 -201 -236 -244 -324 l-26 -54 21 -44 c85 -174 274 -388 446
|
12 |
+
-502 159 -106 295 -149 475 -148 141 1 236 24 365 87 l90 45 186 -185 c158
|
13 |
+
-157 190 -184 215 -184 39 0 74 36 74 76 0 25 -114 142 -878 906 -789 790
|
14 |
+
-880 878 -908 878 -18 0 -42 -8 -55 -18z m544 -650 l98 -98 -23 -50 c-31 -68
|
15 |
+
-30 -170 1 -242 31 -68 113 -144 182 -167 64 -22 177 -16 232 11 l38 18 89
|
16 |
+
-89 c50 -49 90 -92 90 -96 0 -9 -105 -55 -175 -75 -82 -25 -258 -25 -339 0
|
17 |
+
-124 37 -255 116 -364 220 -87 81 -232 273 -232 306 0 43 260 360 296 360 5 0
|
18 |
+
53 -44 107 -98z m314 -314 c51 -51 93 -96 93 -99 0 -13 -53 -17 -89 -7 -44 12
|
19 |
+
-89 52 -107 95 -21 48 -18 103 5 103 3 0 47 -42 98 -92z"/>
|
20 |
+
<path d="M1410 1849 c-87 -15 -123 -52 -105 -109 13 -40 47 -53 111 -41 226
|
21 |
+
42 459 -41 660 -235 69 -67 171 -194 210 -260 l26 -45 -37 -57 c-21 -31 -56
|
22 |
+
-81 -78 -110 -47 -62 -53 -105 -18 -134 27 -21 70 -24 92 -5 55 44 199 267
|
23 |
+
199 307 0 14 -16 53 -36 85 -263 437 -650 665 -1024 604z"/>
|
24 |
+
</g>
|
25 |
+
</svg>
|
admin/assets/img/hide-icon.svg
CHANGED
@@ -1,25 +1,25 @@
|
|
1 |
-
<?xml version="1.0" standalone="no"?>
|
2 |
-
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
3 |
-
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
4 |
-
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
5 |
-
width="300.000000pt" height="234.000000pt" viewBox="0 0 300.000000 234.000000"
|
6 |
-
preserveAspectRatio="xMidYMid meet">
|
7 |
-
|
8 |
-
<g transform="translate(0.000000,234.000000) scale(0.100000,-0.100000)"
|
9 |
-
fill="#ed3c48" stroke="none">
|
10 |
-
<path d="M629 2072 c-15 -13 -22 -30 -22 -51 0 -29 20 -53 177 -210 l176 -177
|
11 |
-
-92 -95 c-99 -101 -201 -236 -244 -324 l-26 -54 21 -44 c85 -174 274 -388 446
|
12 |
-
-502 159 -106 295 -149 475 -148 141 1 236 24 365 87 l90 45 186 -185 c158
|
13 |
-
-157 190 -184 215 -184 39 0 74 36 74 76 0 25 -114 142 -878 906 -789 790
|
14 |
-
-880 878 -908 878 -18 0 -42 -8 -55 -18z m544 -650 l98 -98 -23 -50 c-31 -68
|
15 |
-
-30 -170 1 -242 31 -68 113 -144 182 -167 64 -22 177 -16 232 11 l38 18 89
|
16 |
-
-89 c50 -49 90 -92 90 -96 0 -9 -105 -55 -175 -75 -82 -25 -258 -25 -339 0
|
17 |
-
-124 37 -255 116 -364 220 -87 81 -232 273 -232 306 0 43 260 360 296 360 5 0
|
18 |
-
53 -44 107 -98z m314 -314 c51 -51 93 -96 93 -99 0 -13 -53 -17 -89 -7 -44 12
|
19 |
-
-89 52 -107 95 -21 48 -18 103 5 103 3 0 47 -42 98 -92z"/>
|
20 |
-
<path d="M1410 1849 c-87 -15 -123 -52 -105 -109 13 -40 47 -53 111 -41 226
|
21 |
-
42 459 -41 660 -235 69 -67 171 -194 210 -260 l26 -45 -37 -57 c-21 -31 -56
|
22 |
-
-81 -78 -110 -47 -62 -53 -105 -18 -134 27 -21 70 -24 92 -5 55 44 199 267
|
23 |
-
199 307 0 14 -16 53 -36 85 -263 437 -650 665 -1024 604z"/>
|
24 |
-
</g>
|
25 |
-
</svg>
|
1 |
+
<?xml version="1.0" standalone="no"?>
|
2 |
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
3 |
+
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
4 |
+
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
5 |
+
width="300.000000pt" height="234.000000pt" viewBox="0 0 300.000000 234.000000"
|
6 |
+
preserveAspectRatio="xMidYMid meet">
|
7 |
+
|
8 |
+
<g transform="translate(0.000000,234.000000) scale(0.100000,-0.100000)"
|
9 |
+
fill="#ed3c48" stroke="none">
|
10 |
+
<path d="M629 2072 c-15 -13 -22 -30 -22 -51 0 -29 20 -53 177 -210 l176 -177
|
11 |
+
-92 -95 c-99 -101 -201 -236 -244 -324 l-26 -54 21 -44 c85 -174 274 -388 446
|
12 |
+
-502 159 -106 295 -149 475 -148 141 1 236 24 365 87 l90 45 186 -185 c158
|
13 |
+
-157 190 -184 215 -184 39 0 74 36 74 76 0 25 -114 142 -878 906 -789 790
|
14 |
+
-880 878 -908 878 -18 0 -42 -8 -55 -18z m544 -650 l98 -98 -23 -50 c-31 -68
|
15 |
+
-30 -170 1 -242 31 -68 113 -144 182 -167 64 -22 177 -16 232 11 l38 18 89
|
16 |
+
-89 c50 -49 90 -92 90 -96 0 -9 -105 -55 -175 -75 -82 -25 -258 -25 -339 0
|
17 |
+
-124 37 -255 116 -364 220 -87 81 -232 273 -232 306 0 43 260 360 296 360 5 0
|
18 |
+
53 -44 107 -98z m314 -314 c51 -51 93 -96 93 -99 0 -13 -53 -17 -89 -7 -44 12
|
19 |
+
-89 52 -107 95 -21 48 -18 103 5 103 3 0 47 -42 98 -92z"/>
|
20 |
+
<path d="M1410 1849 c-87 -15 -123 -52 -105 -109 13 -40 47 -53 111 -41 226
|
21 |
+
42 459 -41 660 -235 69 -67 171 -194 210 -260 l26 -45 -37 -57 c-21 -31 -56
|
22 |
+
-81 -78 -110 -47 -62 -53 -105 -18 -134 27 -21 70 -24 92 -5 55 44 199 267
|
23 |
+
199 307 0 14 -16 53 -36 85 -263 437 -650 665 -1024 604z"/>
|
24 |
+
</g>
|
25 |
+
</svg>
|
admin/assets/js/notifications-panel.js
CHANGED
@@ -1,59 +1,59 @@
|
|
1 |
-
/**
|
2 |
-
* Notification panel
|
3 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>
|
4 |
-
* @copyright (c) 10.09.2017, Webcraftic
|
5 |
-
* @version 1.0
|
6 |
-
*/
|
7 |
-
|
8 |
-
(function($) {
|
9 |
-
'use strict';
|
10 |
-
|
11 |
-
$(document).ready(function() {
|
12 |
-
$(document).on('click', '.wbcr-han-panel-restore-notify-link', function() {
|
13 |
-
|
14 |
-
var self = $(this),
|
15 |
-
noticeID = $(this).data('notice-id'),
|
16 |
-
nonce = $(this).data('nonce'),
|
17 |
-
counterEl = $('.wbcr-han-adminbar-counter');
|
18 |
-
|
19 |
-
if( !noticeID ) {
|
20 |
-
alert('Undefinded error. Please report the bug to our support forum.');
|
21 |
-
}
|
22 |
-
|
23 |
-
self.closest('li').hide();
|
24 |
-
|
25 |
-
$.ajax(ajaxurl, {
|
26 |
-
type: 'post',
|
27 |
-
dataType: 'json',
|
28 |
-
data: {
|
29 |
-
action: 'wbcr-dan-restore-notice',
|
30 |
-
security: nonce,
|
31 |
-
notice_id: noticeID
|
32 |
-
},
|
33 |
-
success: function(response) {
|
34 |
-
if( !response || !response.success ) {
|
35 |
-
|
36 |
-
if( response.data.error_message ) {
|
37 |
-
console.log(response.data.error_message);
|
38 |
-
self.closest('li').show();
|
39 |
-
} else {
|
40 |
-
console.log(response);
|
41 |
-
}
|
42 |
-
|
43 |
-
return;
|
44 |
-
}
|
45 |
-
|
46 |
-
counterEl.text(counterEl.text() - 1);
|
47 |
-
self.closest('li').remove();
|
48 |
-
},
|
49 |
-
error: function(xhr, ajaxOptions, thrownError) {
|
50 |
-
console.log(xhr.status);
|
51 |
-
console.log(xhr.responseText);
|
52 |
-
console.log(thrownError);
|
53 |
-
}
|
54 |
-
});
|
55 |
-
|
56 |
-
return false;
|
57 |
-
});
|
58 |
-
});
|
59 |
-
})(jQuery);
|
1 |
+
/**
|
2 |
+
* Notification panel
|
3 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>
|
4 |
+
* @copyright (c) 10.09.2017, Webcraftic
|
5 |
+
* @version 1.0
|
6 |
+
*/
|
7 |
+
|
8 |
+
(function($) {
|
9 |
+
'use strict';
|
10 |
+
|
11 |
+
$(document).ready(function() {
|
12 |
+
$(document).on('click', '.wbcr-han-panel-restore-notify-link', function() {
|
13 |
+
|
14 |
+
var self = $(this),
|
15 |
+
noticeID = $(this).data('notice-id'),
|
16 |
+
nonce = $(this).data('nonce'),
|
17 |
+
counterEl = $('.wbcr-han-adminbar-counter');
|
18 |
+
|
19 |
+
if( !noticeID ) {
|
20 |
+
alert('Undefinded error. Please report the bug to our support forum.');
|
21 |
+
}
|
22 |
+
|
23 |
+
self.closest('li').hide();
|
24 |
+
|
25 |
+
$.ajax(ajaxurl, {
|
26 |
+
type: 'post',
|
27 |
+
dataType: 'json',
|
28 |
+
data: {
|
29 |
+
action: 'wbcr-dan-restore-notice',
|
30 |
+
security: nonce,
|
31 |
+
notice_id: noticeID
|
32 |
+
},
|
33 |
+
success: function(response) {
|
34 |
+
if( !response || !response.success ) {
|
35 |
+
|
36 |
+
if( response.data.error_message ) {
|
37 |
+
console.log(response.data.error_message);
|
38 |
+
self.closest('li').show();
|
39 |
+
} else {
|
40 |
+
console.log(response);
|
41 |
+
}
|
42 |
+
|
43 |
+
return;
|
44 |
+
}
|
45 |
+
|
46 |
+
counterEl.text(counterEl.text() - 1);
|
47 |
+
self.closest('li').remove();
|
48 |
+
},
|
49 |
+
error: function(xhr, ajaxOptions, thrownError) {
|
50 |
+
console.log(xhr.status);
|
51 |
+
console.log(xhr.responseText);
|
52 |
+
console.log(thrownError);
|
53 |
+
}
|
54 |
+
});
|
55 |
+
|
56 |
+
return false;
|
57 |
+
});
|
58 |
+
});
|
59 |
+
})(jQuery);
|
admin/assets/js/settings.js
CHANGED
@@ -1,69 +1,69 @@
|
|
1 |
-
/**
|
2 |
-
* General
|
3 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>
|
4 |
-
* @copyright (c) 2020, Webcraftic
|
5 |
-
* @version 1.0
|
6 |
-
*/
|
7 |
-
|
8 |
-
(function ($) {
|
9 |
-
|
10 |
-
function dan_pro_href(e) {
|
11 |
-
var pro_href = "https://clearfy.pro/disable-admin-notices/";
|
12 |
-
e.stopPropagation();
|
13 |
-
window.open(pro_href, '_blank');
|
14 |
-
}
|
15 |
-
|
16 |
-
$('.factory-checkbox.wdanpro-checkbox-premium-label').click(dan_pro_href);
|
17 |
-
$('.wdanpro-radio-premium-label .factory-compact_panel').click(dan_pro_href);
|
18 |
-
|
19 |
-
$(document).on('click', '.wdan-page-restore-notice-link', function () {
|
20 |
-
var self = $(this),
|
21 |
-
noticeID = $(this).data('notice-id'),
|
22 |
-
nonce = $(this).data('nonce'),
|
23 |
-
counterEl = $('.wbcr-han-adminbar-counter');
|
24 |
-
|
25 |
-
if (!noticeID) {
|
26 |
-
alert('Undefinded error. Please report the bug to our support forum.');
|
27 |
-
}
|
28 |
-
|
29 |
-
self.hide();
|
30 |
-
self.parent().find('.wdan-page-restore-notice-link-loader').show();
|
31 |
-
|
32 |
-
|
33 |
-
$.ajax(ajaxurl, {
|
34 |
-
type: 'post',
|
35 |
-
dataType: 'json',
|
36 |
-
data: {
|
37 |
-
action: 'wbcr-dan-restore-notice',
|
38 |
-
security: nonce,
|
39 |
-
notice_id: noticeID
|
40 |
-
},
|
41 |
-
success: function (response) {
|
42 |
-
if (!response || !response.success) {
|
43 |
-
|
44 |
-
if (response.data.error_message) {
|
45 |
-
console.log(response.data.error_message);
|
46 |
-
self.closest('li').show();
|
47 |
-
} else {
|
48 |
-
console.log(response);
|
49 |
-
}
|
50 |
-
|
51 |
-
return;
|
52 |
-
}
|
53 |
-
|
54 |
-
counterEl.text(counterEl.text() - 1);
|
55 |
-
self.closest('tr').hide();
|
56 |
-
self.closest('tr').remove();
|
57 |
-
},
|
58 |
-
error: function (xhr, ajaxOptions, thrownError) {
|
59 |
-
console.log(xhr.status);
|
60 |
-
console.log(xhr.responseText);
|
61 |
-
console.log(thrownError);
|
62 |
-
}
|
63 |
-
});
|
64 |
-
|
65 |
-
return false;
|
66 |
-
});
|
67 |
-
|
68 |
-
|
69 |
-
})(jQuery);
|
1 |
+
/**
|
2 |
+
* General
|
3 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>
|
4 |
+
* @copyright (c) 2020, Webcraftic
|
5 |
+
* @version 1.0
|
6 |
+
*/
|
7 |
+
|
8 |
+
(function ($) {
|
9 |
+
|
10 |
+
function dan_pro_href(e) {
|
11 |
+
var pro_href = "https://clearfy.pro/disable-admin-notices/";
|
12 |
+
e.stopPropagation();
|
13 |
+
window.open(pro_href, '_blank');
|
14 |
+
}
|
15 |
+
|
16 |
+
$('.factory-checkbox.wdanpro-checkbox-premium-label').click(dan_pro_href);
|
17 |
+
$('.wdanpro-radio-premium-label .factory-compact_panel').click(dan_pro_href);
|
18 |
+
|
19 |
+
$(document).on('click', '.wdan-page-restore-notice-link', function () {
|
20 |
+
var self = $(this),
|
21 |
+
noticeID = $(this).data('notice-id'),
|
22 |
+
nonce = $(this).data('nonce'),
|
23 |
+
counterEl = $('.wbcr-han-adminbar-counter');
|
24 |
+
|
25 |
+
if (!noticeID) {
|
26 |
+
alert('Undefinded error. Please report the bug to our support forum.');
|
27 |
+
}
|
28 |
+
|
29 |
+
self.hide();
|
30 |
+
self.parent().find('.wdan-page-restore-notice-link-loader').show();
|
31 |
+
|
32 |
+
|
33 |
+
$.ajax(ajaxurl, {
|
34 |
+
type: 'post',
|
35 |
+
dataType: 'json',
|
36 |
+
data: {
|
37 |
+
action: 'wbcr-dan-restore-notice',
|
38 |
+
security: nonce,
|
39 |
+
notice_id: noticeID
|
40 |
+
},
|
41 |
+
success: function (response) {
|
42 |
+
if (!response || !response.success) {
|
43 |
+
|
44 |
+
if (response.data.error_message) {
|
45 |
+
console.log(response.data.error_message);
|
46 |
+
self.closest('li').show();
|
47 |
+
} else {
|
48 |
+
console.log(response);
|
49 |
+
}
|
50 |
+
|
51 |
+
return;
|
52 |
+
}
|
53 |
+
|
54 |
+
counterEl.text(counterEl.text() - 1);
|
55 |
+
self.closest('tr').hide();
|
56 |
+
self.closest('tr').remove();
|
57 |
+
},
|
58 |
+
error: function (xhr, ajaxOptions, thrownError) {
|
59 |
+
console.log(xhr.status);
|
60 |
+
console.log(xhr.responseText);
|
61 |
+
console.log(thrownError);
|
62 |
+
}
|
63 |
+
});
|
64 |
+
|
65 |
+
return false;
|
66 |
+
});
|
67 |
+
|
68 |
+
|
69 |
+
})(jQuery);
|
admin/boot.php
CHANGED
@@ -1,116 +1,116 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Файл использует для реализации коротких сниппетов. Обычно сниппеты относятся к интеграции
|
4 |
-
* или каким мелким исправлениям и фиксам в интерфейсе этого плагина.
|
5 |
-
*
|
6 |
-
* Github: https://github.com/alexkovalevv
|
7 |
-
*
|
8 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
9 |
-
* @copyright (c) 2018 Webraftic Ltd
|
10 |
-
* @version 1.0
|
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/disable-admin-notices/';
|
22 |
-
$url .= '?utm_source=wordpress.org&utm_campaign=' . WDN_Plugin::app()->getPluginName();
|
23 |
-
$links[] = '<a href="' . $url . '" style="color: #FF5722;font-weight: bold;" target="_blank">' . __( 'Get premium plugin', 'disable-admin-notices' ) . '</a>';
|
24 |
-
}
|
25 |
-
|
26 |
-
return $links;
|
27 |
-
}, 10, 2 );
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Изменяем ссылку по умолчанию на собственную в виджете "Голосу за нас".
|
31 |
-
*
|
32 |
-
* Ссылка ведет на страницу рейтинга в репозитории Wordpress.org
|
33 |
-
* https://wordpress.org/support/plugin/disable-admin-notices/reviews/
|
34 |
-
*
|
35 |
-
* @param string $page_url
|
36 |
-
* @param string $plugin_name
|
37 |
-
*
|
38 |
-
* @return string
|
39 |
-
* @since 1.0
|
40 |
-
*
|
41 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
42 |
-
*/
|
43 |
-
add_filter( '
|
44 |
-
if ( $plugin_name == WDN_Plugin::app()->getPluginName() ) {
|
45 |
-
return 'https://goo.gl/68ucHp';
|
46 |
-
}
|
47 |
-
|
48 |
-
return $page_url;
|
49 |
-
}, 10, 2 );
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Удаляем лишние виджеты из правого сайдбара в интерфейсе плагина
|
53 |
-
*
|
54 |
-
* - Виджет с премиум рекламой
|
55 |
-
* - Виджет с рейтингом
|
56 |
-
* - Виджет с маркерами информации
|
57 |
-
*/
|
58 |
-
add_filter( 'wbcr/factory/pages/impressive/widgets', function ( $widgets, $position, $plugin ) {
|
59 |
-
if ( WDN_Plugin::app()->getPluginName() == $plugin->getPluginName() && 'right' == $position ) {
|
60 |
-
unset( $widgets['business_suggetion'] );
|
61 |
-
unset( $widgets['rating_widget'] );
|
62 |
-
unset( $widgets['info_widget'] );
|
63 |
-
}
|
64 |
-
|
65 |
-
return $widgets;
|
66 |
-
}, 20, 3 );
|
67 |
-
} else {
|
68 |
-
/**
|
69 |
-
* Регистрируем опции плагина в Clearfy, чтобы тот мог совершать манипуляции с опциями этого плагина.
|
70 |
-
* Обычно такие манипуляции относятся к быстрым настройкам, сбросу настроек.
|
71 |
-
*
|
72 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
73 |
-
* @since 1.0
|
74 |
-
*/
|
75 |
-
add_filter( "wbcr_clearfy_group_options", function ( $options ) {
|
76 |
-
$options[] = [
|
77 |
-
'name' => 'hide_admin_notices',
|
78 |
-
'title' => __( 'Hide admin notices', 'disable-admin-notices' ),
|
79 |
-
'tags' => [],
|
80 |
-
'values' => [ 'hide_admin_notices' => 'only_selected' ]
|
81 |
-
];
|
82 |
-
$options[] = [
|
83 |
-
'name' => 'show_notices_in_adminbar',
|
84 |
-
'title' => __( 'Enable hidden notices in adminbar', 'disable-admin-notices' ),
|
85 |
-
'tags' => []
|
86 |
-
];
|
87 |
-
|
88 |
-
return $options;
|
89 |
-
} );
|
90 |
-
}
|
91 |
-
|
92 |
-
/**
|
93 |
-
* Print admin notice: "Would you like to send them for spam checking?"
|
94 |
-
*
|
95 |
-
* If user clicked button "Yes, do it", plugin will exec action,
|
96 |
-
* that put all unapproved comments to spam check queue.
|
97 |
-
*/
|
98 |
-
add_action( 'wbcr/factory/admin_notices', function ( $notices, $plugin_name ) {
|
99 |
-
if ( $plugin_name != WDN_Plugin::app()->getPluginName() || 'wbcr_clearfy' === $plugin_name ) {
|
100 |
-
return $notices;
|
101 |
-
}
|
102 |
-
|
103 |
-
$page_url = 'https://clearfy.pro/disable-admin-notices/';
|
104 |
-
|
105 |
-
$notice_text = sprintf( __( 'Thanks for using the Disable admin notices plugin! If you need support or all the features of the plugin, please buy the pro version <a class="button" href="%s">Get PRO</a>' ), $page_url );
|
106 |
-
|
107 |
-
$notices[] = [
|
108 |
-
'id' => 'wdan_get_premium',
|
109 |
-
'type' => 'success',
|
110 |
-
'dismissible' => true,
|
111 |
-
'dismiss_expires' => 0,
|
112 |
-
'text' => '<p><strong>Disable Admin Notices Individually:</strong><br>' . $notice_text . '</p>'
|
113 |
-
];
|
114 |
-
|
115 |
-
return $notices;
|
116 |
}, 10, 2 );
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Файл использует для реализации коротких сниппетов. Обычно сниппеты относятся к интеграции
|
4 |
+
* или каким мелким исправлениям и фиксам в интерфейсе этого плагина.
|
5 |
+
*
|
6 |
+
* Github: https://github.com/alexkovalevv
|
7 |
+
*
|
8 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
9 |
+
* @copyright (c) 2018 Webraftic Ltd
|
10 |
+
* @version 1.0
|
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/disable-admin-notices/';
|
22 |
+
$url .= '?utm_source=wordpress.org&utm_campaign=' . WDN_Plugin::app()->getPluginName();
|
23 |
+
$links[] = '<a href="' . $url . '" style="color: #FF5722;font-weight: bold;" target="_blank">' . __( 'Get premium plugin', 'disable-admin-notices' ) . '</a>';
|
24 |
+
}
|
25 |
+
|
26 |
+
return $links;
|
27 |
+
}, 10, 2 );
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Изменяем ссылку по умолчанию на собственную в виджете "Голосу за нас".
|
31 |
+
*
|
32 |
+
* Ссылка ведет на страницу рейтинга в репозитории Wordpress.org
|
33 |
+
* https://wordpress.org/support/plugin/disable-admin-notices/reviews/
|
34 |
+
*
|
35 |
+
* @param string $page_url
|
36 |
+
* @param string $plugin_name
|
37 |
+
*
|
38 |
+
* @return string
|
39 |
+
* @since 1.0
|
40 |
+
*
|
41 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
42 |
+
*/
|
43 |
+
add_filter( 'wbcr_factory_pages_460_imppage_rating_widget_url', function ( $page_url, $plugin_name ) {
|
44 |
+
if ( $plugin_name == WDN_Plugin::app()->getPluginName() ) {
|
45 |
+
return 'https://goo.gl/68ucHp';
|
46 |
+
}
|
47 |
+
|
48 |
+
return $page_url;
|
49 |
+
}, 10, 2 );
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Удаляем лишние виджеты из правого сайдбара в интерфейсе плагина
|
53 |
+
*
|
54 |
+
* - Виджет с премиум рекламой
|
55 |
+
* - Виджет с рейтингом
|
56 |
+
* - Виджет с маркерами информации
|
57 |
+
*/
|
58 |
+
add_filter( 'wbcr/factory/pages/impressive/widgets', function ( $widgets, $position, $plugin ) {
|
59 |
+
if ( WDN_Plugin::app()->getPluginName() == $plugin->getPluginName() && 'right' == $position ) {
|
60 |
+
unset( $widgets['business_suggetion'] );
|
61 |
+
unset( $widgets['rating_widget'] );
|
62 |
+
unset( $widgets['info_widget'] );
|
63 |
+
}
|
64 |
+
|
65 |
+
return $widgets;
|
66 |
+
}, 20, 3 );
|
67 |
+
} else {
|
68 |
+
/**
|
69 |
+
* Регистрируем опции плагина в Clearfy, чтобы тот мог совершать манипуляции с опциями этого плагина.
|
70 |
+
* Обычно такие манипуляции относятся к быстрым настройкам, сбросу настроек.
|
71 |
+
*
|
72 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
73 |
+
* @since 1.0
|
74 |
+
*/
|
75 |
+
add_filter( "wbcr_clearfy_group_options", function ( $options ) {
|
76 |
+
$options[] = [
|
77 |
+
'name' => 'hide_admin_notices',
|
78 |
+
'title' => __( 'Hide admin notices', 'disable-admin-notices' ),
|
79 |
+
'tags' => [],
|
80 |
+
'values' => [ 'hide_admin_notices' => 'only_selected' ]
|
81 |
+
];
|
82 |
+
$options[] = [
|
83 |
+
'name' => 'show_notices_in_adminbar',
|
84 |
+
'title' => __( 'Enable hidden notices in adminbar', 'disable-admin-notices' ),
|
85 |
+
'tags' => []
|
86 |
+
];
|
87 |
+
|
88 |
+
return $options;
|
89 |
+
} );
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Print admin notice: "Would you like to send them for spam checking?"
|
94 |
+
*
|
95 |
+
* If user clicked button "Yes, do it", plugin will exec action,
|
96 |
+
* that put all unapproved comments to spam check queue.
|
97 |
+
*/
|
98 |
+
add_action( 'wbcr/factory/admin_notices', function ( $notices, $plugin_name ) {
|
99 |
+
if ( $plugin_name != WDN_Plugin::app()->getPluginName() || 'wbcr_clearfy' === $plugin_name ) {
|
100 |
+
return $notices;
|
101 |
+
}
|
102 |
+
|
103 |
+
$page_url = 'https://clearfy.pro/disable-admin-notices/';
|
104 |
+
|
105 |
+
$notice_text = sprintf( __( 'Thanks for using the Disable admin notices plugin! If you need support or all the features of the plugin, please buy the pro version <a class="button" href="%s">Get PRO</a>' ), $page_url );
|
106 |
+
|
107 |
+
$notices[] = [
|
108 |
+
'id' => 'wdan_get_premium',
|
109 |
+
'type' => 'success',
|
110 |
+
'dismissible' => true,
|
111 |
+
'dismiss_expires' => 0,
|
112 |
+
'text' => '<p><strong>Disable Admin Notices Individually:</strong><br>' . $notice_text . '</p>'
|
113 |
+
];
|
114 |
+
|
115 |
+
return $notices;
|
116 |
}, 10, 2 );
|
admin/class-page-basic.php
CHANGED
@@ -1,43 +1,43 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Страница общих настроек для этого плагина.
|
4 |
-
*
|
5 |
-
* Может быть использована только, если этот плагин используется как отдельный плагин, а не как аддон
|
6 |
-
* дя плагина Clearfy. Если плагин загружен, как аддон для Clearfy, эта страница не будет подключена.
|
7 |
-
*
|
8 |
-
* Поддерживает режим работы с мультисаймами. Вы можете увидеть эту страницу в панели настройки сети.
|
9 |
-
*
|
10 |
-
* Github: https://github.com/alexkovalevv
|
11 |
-
*
|
12 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
13 |
-
* @copyright (c) 2018 Webraftic Ltd
|
14 |
-
* @version 1.0
|
15 |
-
*/
|
16 |
-
|
17 |
-
// Exit if accessed directly
|
18 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
class WDN_Page extends WBCR\
|
23 |
-
|
24 |
-
/**
|
25 |
-
* Requests assets (js and css) for the page.
|
26 |
-
*
|
27 |
-
* @param
|
28 |
-
* @param
|
29 |
-
*
|
30 |
-
* @return void
|
31 |
-
* @see
|
32 |
-
*
|
33 |
-
*/
|
34 |
-
public function assets( $scripts, $styles ) {
|
35 |
-
$this->styles->add( WDN_PLUGIN_URL . '/admin/assets/css/page.css' );
|
36 |
-
|
37 |
-
parent::assets( $scripts, $styles );
|
38 |
-
}
|
39 |
-
|
40 |
-
public function getPluginTitle() {
|
41 |
-
return "<span class='wdan-plugin-header-logo'> </span>" . __( 'Webcraftic Disable Admin Notices', 'disable-admin-notices' );
|
42 |
-
}
|
43 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Страница общих настроек для этого плагина.
|
4 |
+
*
|
5 |
+
* Может быть использована только, если этот плагин используется как отдельный плагин, а не как аддон
|
6 |
+
* дя плагина Clearfy. Если плагин загружен, как аддон для Clearfy, эта страница не будет подключена.
|
7 |
+
*
|
8 |
+
* Поддерживает режим работы с мультисаймами. Вы можете увидеть эту страницу в панели настройки сети.
|
9 |
+
*
|
10 |
+
* Github: https://github.com/alexkovalevv
|
11 |
+
*
|
12 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
13 |
+
* @copyright (c) 2018 Webraftic Ltd
|
14 |
+
* @version 1.0
|
15 |
+
*/
|
16 |
+
|
17 |
+
// Exit if accessed directly
|
18 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
+
exit;
|
20 |
+
}
|
21 |
+
|
22 |
+
class WDN_Page extends WBCR\Factory_Templates_112\Pages\PageBase {
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Requests assets (js and css) for the page.
|
26 |
+
*
|
27 |
+
* @param Wbcr_Factory460_ScriptList $scripts
|
28 |
+
* @param Wbcr_Factory460_StyleList $styles
|
29 |
+
*
|
30 |
+
* @return void
|
31 |
+
* @see Wbcr_FactoryPages460_AdminPage
|
32 |
+
*
|
33 |
+
*/
|
34 |
+
public function assets( $scripts, $styles ) {
|
35 |
+
$this->styles->add( WDN_PLUGIN_URL . '/admin/assets/css/page.css' );
|
36 |
+
|
37 |
+
parent::assets( $scripts, $styles );
|
38 |
+
}
|
39 |
+
|
40 |
+
public function getPluginTitle() {
|
41 |
+
return "<span class='wdan-plugin-header-logo'> </span>" . __( 'Webcraftic Disable Admin Notices', 'disable-admin-notices' );
|
42 |
+
}
|
43 |
}
|
admin/options.php
CHANGED
@@ -1,269 +1,269 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Регистрируем поля Html формы в Clearfy на странице "Подолнительно". Если этот плагин загружен, как отдельный плагин
|
4 |
-
* то поля будет зарегистрированы для страницы общих настроек этого плагина.
|
5 |
-
*
|
6 |
-
* Github: https://github.com/alexkovalevv
|
7 |
-
*
|
8 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
9 |
-
* @copyright (c) 2018 Webraftic Ltd
|
10 |
-
* @version 1.0
|
11 |
-
*/
|
12 |
-
|
13 |
-
// Exit if accessed directly
|
14 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
15 |
-
exit;
|
16 |
-
}
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Регистрируем поля Html формы с настройками плагина.
|
20 |
-
*
|
21 |
-
* Эта функция используется для общей страницы настроек текущего плагина,
|
22 |
-
* а также для раширения настроек в плагине Clearfy.
|
23 |
-
*
|
24 |
-
* @return array Возвращает группу зарегистрируемых опций
|
25 |
-
* @since 1.0
|
26 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
27 |
-
*/
|
28 |
-
function wbcr_dan_get_plugin_options() {
|
29 |
-
$options = [];
|
30 |
-
|
31 |
-
$options[] = [
|
32 |
-
'type' => 'html',
|
33 |
-
'html' => '<div class="wbcr-factory-page-group-header">' . '<strong>' . __( 'Admin notifications, Update nags', 'disable-admin-notices' ) . '</strong>' . '<p>' . __( 'Do you know the situation, when some plugin offers you to update to premium, to collect technical data and shows many annoying notices? You are close these notices every now and again but they newly appears and interfere your work with WordPress. Even worse, some plugin’s authors delete “close” button from notices and they shows in your admin panel forever.', 'disable-admin-notices' ) . '</p>' . '</div>'
|
34 |
-
];
|
35 |
-
|
36 |
-
$hide_admin_notices_data = [
|
37 |
-
[
|
38 |
-
'not_hide',
|
39 |
-
__( "Don't hide", 'disable-admin-notices' ),
|
40 |
-
__( 'Do not hide notices and do not show “Hide notification forever” link for admin.', 'disable-admin-notices' )
|
41 |
-
],
|
42 |
-
[
|
43 |
-
'all',
|
44 |
-
__( 'All notices', 'disable-admin-notices' ),
|
45 |
-
__( 'Hide all notices globally.', 'disable-admin-notices' ) . sprintf( __( 'Watch the <a href="%s" target="_blank">video</a> to find out how it works .', 'disable-admin-notices' ), 'https://youtu.be/_Lv5i4P3Gqs' )
|
46 |
-
],
|
47 |
-
[
|
48 |
-
'only_selected',
|
49 |
-
__( 'Only selected', 'disable-admin-notices' ),
|
50 |
-
__( 'Hide selected notices only. You will see the link "Hide notification forever" in each notice. Push it and they will not bother you anymore.', 'disable-admin-notices' ) . sprintf( __( 'Watch the <a href="%s" target="_blank">video</a> to find out how it works .', 'disable-admin-notices' ), 'https://youtu.be/HazI81AsHuY' )
|
51 |
-
]
|
52 |
-
];
|
53 |
-
|
54 |
-
if ( ! wbcr_dan_is_active_clearfy_component() ) {
|
55 |
-
$hide_admin_notices_data[] = [
|
56 |
-
'compact_panel',
|
57 |
-
__( 'Compact panel', 'disable-admin-notices' ),
|
58 |
-
__( 'Collapse all notifications in one line (panel with notification counters), to see the notifications, you will need to click this panel.', 'disable-admin-notices' ) . sprintf( __( 'Watch the <a href="%s" target="_blank">video</a> to find out how it works .', 'disable-admin-notices' ), 'https://youtu.be/437u1Js2o2M' )
|
59 |
-
];
|
60 |
-
}
|
61 |
-
|
62 |
-
$options[] = [
|
63 |
-
'type' => 'dropdown',
|
64 |
-
'name' => 'hide_admin_notices',
|
65 |
-
'way' => 'buttons',
|
66 |
-
'title' => __( 'Hide admin notices', 'disable-admin-notices' ),
|
67 |
-
'data' => $hide_admin_notices_data,
|
68 |
-
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'green' ],
|
69 |
-
'hint' => __( 'Some plugins shows notifications about premium version, data collecting or promote their services. Even if you push close button (that sometimes are impossible), notices are shows again in some time. This option allows you to control notices. Hide them all or each individually. Some plugins shows notifications about premium version, data collecting or promote their services. Even if you push close button (that sometimes are impossible), notices are shows again in some time. This option allows you to control notices. Hide them all or each individually.', 'disable-admin-notices' ),
|
70 |
-
'default' => 'only_selected',
|
71 |
-
'cssClass' => ! ( WDN_Plugin::app()->premium->is_activate() && WDN_Plugin::app()->premium->is_install_package() ) ? [ 'wdanpro-radio-premium-label' ] : [],
|
72 |
-
'events' => [
|
73 |
-
'all' => [
|
74 |
-
'show' => '.factory-control-hide_admin_notices_user_roles',
|
75 |
-
'hide' => '.factory-control-reset_notices_button'
|
76 |
-
],
|
77 |
-
'only_selected' => [
|
78 |
-
'hide' => '.factory-control-hide_admin_notices_user_roles',
|
79 |
-
'show' => '.factory-control-reset_notices_button'
|
80 |
-
],
|
81 |
-
'not_hide' => [
|
82 |
-
'hide' => '.factory-control-hide_admin_notices_user_roles, .factory-control-reset_notices_button'
|
83 |
-
]
|
84 |
-
]
|
85 |
-
];
|
86 |
-
|
87 |
-
if ( ! wbcr_dan_is_active_clearfy_component() ) {
|
88 |
-
$options[] = [
|
89 |
-
'type' => 'checkbox',
|
90 |
-
'way' => 'buttons',
|
91 |
-
'name' => 'disable_updates_nags_for_plugins',
|
92 |
-
'title' => __( 'Disable plugins updates nags', 'disable-admin-notices' ),
|
93 |
-
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'grey' ],
|
94 |
-
'hint' => __( 'Disable plugins updates nags', 'disable-admin-notices' ),
|
95 |
-
'cssClass' => ! ( WDN_Plugin::app()->premium->is_activate() && WDN_Plugin::app()->premium->is_install_package() ) ? [ 'factory-checkbox-disabled wdanpro-checkbox-premium-label' ] : [],
|
96 |
-
'default' => false
|
97 |
-
];
|
98 |
-
|
99 |
-
$options[] = [
|
100 |
-
'type' => 'checkbox',
|
101 |
-
'way' => 'buttons',
|
102 |
-
'name' => 'disable_updates_nags_for_core',
|
103 |
-
'title' => __( 'Disable core updates nags', 'disable-admin-notices' ),
|
104 |
-
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'grey' ],
|
105 |
-
'hint' => __( 'Disable core updates nags', 'disable-admin-notices' ),
|
106 |
-
'cssClass' => ! ( WDN_Plugin::app()->premium->is_activate() && WDN_Plugin::app()->premium->is_install_package() ) ? [ 'factory-checkbox-disabled wdanpro-checkbox-premium-label' ] : [],
|
107 |
-
'default' => false
|
108 |
-
];
|
109 |
-
}
|
110 |
-
|
111 |
-
/*$options[] = array(
|
112 |
-
'type' => 'dropdown',
|
113 |
-
'name' => 'hide_admin_notices_for',
|
114 |
-
'way' => 'buttons',
|
115 |
-
'title' => __('Hide admin notices only for', 'disable-admin-notices'),
|
116 |
-
'data' => array(
|
117 |
-
array(
|
118 |
-
'user',
|
119 |
-
__('Current user', 'disable-admin-notices')
|
120 |
-
),
|
121 |
-
array(
|
122 |
-
'all_users',
|
123 |
-
__('All users', 'disable-admin-notices')
|
124 |
-
)
|
125 |
-
),
|
126 |
-
'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'green'),
|
127 |
-
'hint' => __('Choose who to hide notifications for?', 'disable-admin-notices'),
|
128 |
-
'default' => 'user',
|
129 |
-
'events' => array(
|
130 |
-
'all' => array(
|
131 |
-
'show' => '.factory-control-hide_admin_notices_user_roles',
|
132 |
-
'hide' => '.factory-control-reset_notices_button'
|
133 |
-
),
|
134 |
-
'only_selected' => array(
|
135 |
-
'hide' => '.factory-control-hide_admin_notices_user_roles',
|
136 |
-
'show' => '.factory-control-reset_notices_button'
|
137 |
-
),
|
138 |
-
'not_hide' => array(
|
139 |
-
'hide' => '.factory-control-hide_admin_notices_user_roles, .factory-control-reset_notices_button'
|
140 |
-
)
|
141 |
-
)
|
142 |
-
);*/
|
143 |
-
|
144 |
-
$options[] = [
|
145 |
-
'type' => 'checkbox',
|
146 |
-
'way' => 'buttons',
|
147 |
-
'name' => 'show_notices_in_adminbar',
|
148 |
-
'title' => __( 'Enable hidden notices in adminbar', 'disable-admin-notices' ),
|
149 |
-
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'green' ],
|
150 |
-
'hint' => __( 'By default, the plugin hides all notices, which you specified. If you enable this option, the plugin will collect all hidden notices and show them into the top admin toolbar. It will not disturb you but will allow to look notices at your convenience.', 'disable-admin-notices' ),
|
151 |
-
'default' => false
|
152 |
-
];
|
153 |
-
|
154 |
-
$options[] = [
|
155 |
-
'type' => 'html',
|
156 |
-
'html' => 'wbcr_dan_reset_notices_button'
|
157 |
-
];
|
158 |
-
|
159 |
-
return $options;
|
160 |
-
}
|
161 |
-
|
162 |
-
function wbcr_dan_is_active_clearfy_component() {
|
163 |
-
if ( defined( 'WCL_PLUGIN_ACTIVE' ) && class_exists( 'WCL_Plugin' ) ) {
|
164 |
-
$deactivate_components = WCL_Plugin::app()->getPopulateOption( 'deactive_preinstall_components', [] );
|
165 |
-
if ( ! in_array( 'disable_notices', $deactivate_components ) ) {
|
166 |
-
return true;
|
167 |
-
}
|
168 |
-
}
|
169 |
-
return false;
|
170 |
-
}
|
171 |
-
|
172 |
-
/**
|
173 |
-
* Расширяем опции html формы страницы "Дополнительно" в плагине Clearfy
|
174 |
-
*
|
175 |
-
* Это необходимо для того, чтобы не создавать отдельную страницу в плагине Clearfy, \
|
176 |
-
* с настройками этого плагина, потому что это ухудшает юзабилити.
|
177 |
-
*
|
178 |
-
* @param array $form Массив с группой настроек, страницы "Дополнительно" в плагине Clearfy
|
179 |
-
* @param
|
180 |
-
*
|
181 |
-
* @return mixed Отсортированный массив с группой опций
|
182 |
-
*/
|
183 |
-
function wbcr_dan_additionally_form_options( $form, $page ) {
|
184 |
-
if ( empty( $form ) ) {
|
185 |
-
return $form;
|
186 |
-
}
|
187 |
-
|
188 |
-
$options = wbcr_dan_get_plugin_options();
|
189 |
-
|
190 |
-
foreach ( array_reverse( $options ) as $option ) {
|
191 |
-
array_unshift( $form[0]['items'], $option );
|
192 |
-
}
|
193 |
-
|
194 |
-
return $form;
|
195 |
-
}
|
196 |
-
|
197 |
-
add_filter( 'wbcr_clr_additionally_form_options', 'wbcr_dan_additionally_form_options', 10, 2 );
|
198 |
-
|
199 |
-
/**
|
200 |
-
* Реализует кнопку сброса скрытых уведомлений.
|
201 |
-
*
|
202 |
-
* Вы можете выбрать для какой группы пользователей сбросить уведомления.
|
203 |
-
* Эта модикация является не стандартной, поэтому мы не можете реалировать ее
|
204 |
-
* через фреймворк.
|
205 |
-
*
|
206 |
-
* @param @param $html_builder
|
207 |
-
*
|
208 |
-
* @since 1.0
|
209 |
-
*
|
210 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
211 |
-
*/
|
212 |
-
function wbcr_dan_reset_notices_button( $html_builder ) {
|
213 |
-
global $wpdb;
|
214 |
-
|
215 |
-
$form_name = $html_builder->getFormName();
|
216 |
-
$reseted = false;
|
217 |
-
|
218 |
-
if ( isset( $_POST['wbcr_dan_reset_action'] ) ) {
|
219 |
-
check_admin_referer( $form_name, 'wbcr_dan_reset_nonce' );
|
220 |
-
$reset_for_users = WDN_Plugin::app()->request->post( 'wbcr_dan_reset_for_users', 'current_user', true );
|
221 |
-
|
222 |
-
if ( $reset_for_users == 'current_user' ) {
|
223 |
-
delete_user_meta( get_current_user_id(), WDN_Plugin::app()->getOptionName( 'hidden_notices' ) );
|
224 |
-
} else {
|
225 |
-
$meta_key = sanitize_key( WDN_Plugin::app()->getOptionName( 'hidden_notices' ) );
|
226 |
-
$wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key = '{$meta_key}'" );
|
227 |
-
}
|
228 |
-
|
229 |
-
$reseted = true;
|
230 |
-
}
|
231 |
-
|
232 |
-
?>
|
233 |
-
<div class="form-group form-group-checkbox factory-control-reset_notices_button">
|
234 |
-
<label for="wbcr_clearfy_reset_notices_button" class="col-sm-4 control-label">
|
235 |
-
<?= __( 'Reset hidden notices for', 'disable-admin-notices' ); ?>
|
236 |
-
<span class="factory-hint-icon factory-hint-icon-grey" data-toggle="factory-tooltip" data-placement="right"
|
237 |
-
title=""
|
238 |
-
data-original-title="<?php _e( 'Push reset hidden notices if you need to show hidden notices again.', 'disable-admin-notices' ) ?>">
|
239 |
-
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
240 |
-
alt="">
|
241 |
-
</span>
|
242 |
-
</label>
|
243 |
-
<div class="control-group col-sm-8">
|
244 |
-
<div class="factory-checkbox factory-from-control-checkbox factory-buttons-way btn-group">
|
245 |
-
<form method="post">
|
246 |
-
<?php wp_nonce_field( $form_name, 'wbcr_dan_reset_nonce' ); ?>
|
247 |
-
<p>
|
248 |
-
<input type="radio" name="wbcr_dan_reset_for_users" value="current_user"
|
249 |
-
checked/> <?= __( 'current user', 'disable-admin-notices' ); ?>
|
250 |
-
</p>
|
251 |
-
<p>
|
252 |
-
<input type="radio" name="wbcr_dan_reset_for_users"
|
253 |
-
value="all"/> <?= __( 'all users', 'disable-admin-notices' ); ?>
|
254 |
-
</p>
|
255 |
-
<p>
|
256 |
-
<input type="submit" name="wbcr_dan_reset_action"
|
257 |
-
value="<?= __( 'Reset notices', 'disable-admin-notices' ); ?>"
|
258 |
-
class="button button-default"/>
|
259 |
-
</p>
|
260 |
-
<?php if ( $reseted ): ?>
|
261 |
-
<div style="color:green;margin-top:5px;"><?php _e( 'Hidden notices are successfully reset, now you can see them again!', 'disable-admin-notices' ) ?></div>
|
262 |
-
<?php endif; ?>
|
263 |
-
</form>
|
264 |
-
</div>
|
265 |
-
</div>
|
266 |
-
</div>
|
267 |
-
<?php
|
268 |
-
}
|
269 |
-
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Регистрируем поля Html формы в Clearfy на странице "Подолнительно". Если этот плагин загружен, как отдельный плагин
|
4 |
+
* то поля будет зарегистрированы для страницы общих настроек этого плагина.
|
5 |
+
*
|
6 |
+
* Github: https://github.com/alexkovalevv
|
7 |
+
*
|
8 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
9 |
+
* @copyright (c) 2018 Webraftic Ltd
|
10 |
+
* @version 1.0
|
11 |
+
*/
|
12 |
+
|
13 |
+
// Exit if accessed directly
|
14 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
15 |
+
exit;
|
16 |
+
}
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Регистрируем поля Html формы с настройками плагина.
|
20 |
+
*
|
21 |
+
* Эта функция используется для общей страницы настроек текущего плагина,
|
22 |
+
* а также для раширения настроек в плагине Clearfy.
|
23 |
+
*
|
24 |
+
* @return array Возвращает группу зарегистрируемых опций
|
25 |
+
* @since 1.0
|
26 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
27 |
+
*/
|
28 |
+
function wbcr_dan_get_plugin_options() {
|
29 |
+
$options = [];
|
30 |
+
|
31 |
+
$options[] = [
|
32 |
+
'type' => 'html',
|
33 |
+
'html' => '<div class="wbcr-factory-page-group-header">' . '<strong>' . __( 'Admin notifications, Update nags', 'disable-admin-notices' ) . '</strong>' . '<p>' . __( 'Do you know the situation, when some plugin offers you to update to premium, to collect technical data and shows many annoying notices? You are close these notices every now and again but they newly appears and interfere your work with WordPress. Even worse, some plugin’s authors delete “close” button from notices and they shows in your admin panel forever.', 'disable-admin-notices' ) . '</p>' . '</div>'
|
34 |
+
];
|
35 |
+
|
36 |
+
$hide_admin_notices_data = [
|
37 |
+
[
|
38 |
+
'not_hide',
|
39 |
+
__( "Don't hide", 'disable-admin-notices' ),
|
40 |
+
__( 'Do not hide notices and do not show “Hide notification forever” link for admin.', 'disable-admin-notices' )
|
41 |
+
],
|
42 |
+
[
|
43 |
+
'all',
|
44 |
+
__( 'All notices', 'disable-admin-notices' ),
|
45 |
+
__( 'Hide all notices globally.', 'disable-admin-notices' ) . sprintf( __( 'Watch the <a href="%s" target="_blank">video</a> to find out how it works .', 'disable-admin-notices' ), 'https://youtu.be/_Lv5i4P3Gqs' )
|
46 |
+
],
|
47 |
+
[
|
48 |
+
'only_selected',
|
49 |
+
__( 'Only selected', 'disable-admin-notices' ),
|
50 |
+
__( 'Hide selected notices only. You will see the link "Hide notification forever" in each notice. Push it and they will not bother you anymore.', 'disable-admin-notices' ) . sprintf( __( 'Watch the <a href="%s" target="_blank">video</a> to find out how it works .', 'disable-admin-notices' ), 'https://youtu.be/HazI81AsHuY' )
|
51 |
+
]
|
52 |
+
];
|
53 |
+
|
54 |
+
if ( ! wbcr_dan_is_active_clearfy_component() ) {
|
55 |
+
$hide_admin_notices_data[] = [
|
56 |
+
'compact_panel',
|
57 |
+
__( 'Compact panel', 'disable-admin-notices' ),
|
58 |
+
__( 'Collapse all notifications in one line (panel with notification counters), to see the notifications, you will need to click this panel.', 'disable-admin-notices' ) . sprintf( __( 'Watch the <a href="%s" target="_blank">video</a> to find out how it works .', 'disable-admin-notices' ), 'https://youtu.be/437u1Js2o2M' )
|
59 |
+
];
|
60 |
+
}
|
61 |
+
|
62 |
+
$options[] = [
|
63 |
+
'type' => 'dropdown',
|
64 |
+
'name' => 'hide_admin_notices',
|
65 |
+
'way' => 'buttons',
|
66 |
+
'title' => __( 'Hide admin notices', 'disable-admin-notices' ),
|
67 |
+
'data' => $hide_admin_notices_data,
|
68 |
+
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'green' ],
|
69 |
+
'hint' => __( 'Some plugins shows notifications about premium version, data collecting or promote their services. Even if you push close button (that sometimes are impossible), notices are shows again in some time. This option allows you to control notices. Hide them all or each individually. Some plugins shows notifications about premium version, data collecting or promote their services. Even if you push close button (that sometimes are impossible), notices are shows again in some time. This option allows you to control notices. Hide them all or each individually.', 'disable-admin-notices' ),
|
70 |
+
'default' => 'only_selected',
|
71 |
+
'cssClass' => ! ( WDN_Plugin::app()->premium->is_activate() && WDN_Plugin::app()->premium->is_install_package() ) ? [ 'wdanpro-radio-premium-label' ] : [],
|
72 |
+
'events' => [
|
73 |
+
'all' => [
|
74 |
+
'show' => '.factory-control-hide_admin_notices_user_roles',
|
75 |
+
'hide' => '.factory-control-reset_notices_button'
|
76 |
+
],
|
77 |
+
'only_selected' => [
|
78 |
+
'hide' => '.factory-control-hide_admin_notices_user_roles',
|
79 |
+
'show' => '.factory-control-reset_notices_button'
|
80 |
+
],
|
81 |
+
'not_hide' => [
|
82 |
+
'hide' => '.factory-control-hide_admin_notices_user_roles, .factory-control-reset_notices_button'
|
83 |
+
]
|
84 |
+
]
|
85 |
+
];
|
86 |
+
|
87 |
+
if ( ! wbcr_dan_is_active_clearfy_component() ) {
|
88 |
+
$options[] = [
|
89 |
+
'type' => 'checkbox',
|
90 |
+
'way' => 'buttons',
|
91 |
+
'name' => 'disable_updates_nags_for_plugins',
|
92 |
+
'title' => __( 'Disable plugins updates nags', 'disable-admin-notices' ),
|
93 |
+
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'grey' ],
|
94 |
+
'hint' => __( 'Disable plugins updates nags', 'disable-admin-notices' ),
|
95 |
+
'cssClass' => ! ( WDN_Plugin::app()->premium->is_activate() && WDN_Plugin::app()->premium->is_install_package() ) ? [ 'factory-checkbox-disabled wdanpro-checkbox-premium-label' ] : [],
|
96 |
+
'default' => false
|
97 |
+
];
|
98 |
+
|
99 |
+
$options[] = [
|
100 |
+
'type' => 'checkbox',
|
101 |
+
'way' => 'buttons',
|
102 |
+
'name' => 'disable_updates_nags_for_core',
|
103 |
+
'title' => __( 'Disable core updates nags', 'disable-admin-notices' ),
|
104 |
+
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'grey' ],
|
105 |
+
'hint' => __( 'Disable core updates nags', 'disable-admin-notices' ),
|
106 |
+
'cssClass' => ! ( WDN_Plugin::app()->premium->is_activate() && WDN_Plugin::app()->premium->is_install_package() ) ? [ 'factory-checkbox-disabled wdanpro-checkbox-premium-label' ] : [],
|
107 |
+
'default' => false
|
108 |
+
];
|
109 |
+
}
|
110 |
+
|
111 |
+
/*$options[] = array(
|
112 |
+
'type' => 'dropdown',
|
113 |
+
'name' => 'hide_admin_notices_for',
|
114 |
+
'way' => 'buttons',
|
115 |
+
'title' => __('Hide admin notices only for', 'disable-admin-notices'),
|
116 |
+
'data' => array(
|
117 |
+
array(
|
118 |
+
'user',
|
119 |
+
__('Current user', 'disable-admin-notices')
|
120 |
+
),
|
121 |
+
array(
|
122 |
+
'all_users',
|
123 |
+
__('All users', 'disable-admin-notices')
|
124 |
+
)
|
125 |
+
),
|
126 |
+
'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'green'),
|
127 |
+
'hint' => __('Choose who to hide notifications for?', 'disable-admin-notices'),
|
128 |
+
'default' => 'user',
|
129 |
+
'events' => array(
|
130 |
+
'all' => array(
|
131 |
+
'show' => '.factory-control-hide_admin_notices_user_roles',
|
132 |
+
'hide' => '.factory-control-reset_notices_button'
|
133 |
+
),
|
134 |
+
'only_selected' => array(
|
135 |
+
'hide' => '.factory-control-hide_admin_notices_user_roles',
|
136 |
+
'show' => '.factory-control-reset_notices_button'
|
137 |
+
),
|
138 |
+
'not_hide' => array(
|
139 |
+
'hide' => '.factory-control-hide_admin_notices_user_roles, .factory-control-reset_notices_button'
|
140 |
+
)
|
141 |
+
)
|
142 |
+
);*/
|
143 |
+
|
144 |
+
$options[] = [
|
145 |
+
'type' => 'checkbox',
|
146 |
+
'way' => 'buttons',
|
147 |
+
'name' => 'show_notices_in_adminbar',
|
148 |
+
'title' => __( 'Enable hidden notices in adminbar', 'disable-admin-notices' ),
|
149 |
+
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'green' ],
|
150 |
+
'hint' => __( 'By default, the plugin hides all notices, which you specified. If you enable this option, the plugin will collect all hidden notices and show them into the top admin toolbar. It will not disturb you but will allow to look notices at your convenience.', 'disable-admin-notices' ),
|
151 |
+
'default' => false
|
152 |
+
];
|
153 |
+
|
154 |
+
$options[] = [
|
155 |
+
'type' => 'html',
|
156 |
+
'html' => 'wbcr_dan_reset_notices_button'
|
157 |
+
];
|
158 |
+
|
159 |
+
return $options;
|
160 |
+
}
|
161 |
+
|
162 |
+
function wbcr_dan_is_active_clearfy_component() {
|
163 |
+
if ( defined( 'WCL_PLUGIN_ACTIVE' ) && class_exists( 'WCL_Plugin' ) ) {
|
164 |
+
$deactivate_components = WCL_Plugin::app()->getPopulateOption( 'deactive_preinstall_components', [] );
|
165 |
+
if ( ! in_array( 'disable_notices', $deactivate_components ) ) {
|
166 |
+
return true;
|
167 |
+
}
|
168 |
+
}
|
169 |
+
return false;
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* Расширяем опции html формы страницы "Дополнительно" в плагине Clearfy
|
174 |
+
*
|
175 |
+
* Это необходимо для того, чтобы не создавать отдельную страницу в плагине Clearfy, \
|
176 |
+
* с настройками этого плагина, потому что это ухудшает юзабилити.
|
177 |
+
*
|
178 |
+
* @param array $form Массив с группой настроек, страницы "Дополнительно" в плагине Clearfy
|
179 |
+
* @param Wbcr_FactoryPages460_ImpressiveThemplate $page Экземпляр страницы
|
180 |
+
*
|
181 |
+
* @return mixed Отсортированный массив с группой опций
|
182 |
+
*/
|
183 |
+
function wbcr_dan_additionally_form_options( $form, $page ) {
|
184 |
+
if ( empty( $form ) ) {
|
185 |
+
return $form;
|
186 |
+
}
|
187 |
+
|
188 |
+
$options = wbcr_dan_get_plugin_options();
|
189 |
+
|
190 |
+
foreach ( array_reverse( $options ) as $option ) {
|
191 |
+
array_unshift( $form[0]['items'], $option );
|
192 |
+
}
|
193 |
+
|
194 |
+
return $form;
|
195 |
+
}
|
196 |
+
|
197 |
+
add_filter( 'wbcr_clr_additionally_form_options', 'wbcr_dan_additionally_form_options', 10, 2 );
|
198 |
+
|
199 |
+
/**
|
200 |
+
* Реализует кнопку сброса скрытых уведомлений.
|
201 |
+
*
|
202 |
+
* Вы можете выбрать для какой группы пользователей сбросить уведомления.
|
203 |
+
* Эта модикация является не стандартной, поэтому мы не можете реалировать ее
|
204 |
+
* через фреймворк.
|
205 |
+
*
|
206 |
+
* @param @param $html_builder Wbcr_FactoryForms457_Html
|
207 |
+
*
|
208 |
+
* @since 1.0
|
209 |
+
*
|
210 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
211 |
+
*/
|
212 |
+
function wbcr_dan_reset_notices_button( $html_builder ) {
|
213 |
+
global $wpdb;
|
214 |
+
|
215 |
+
$form_name = $html_builder->getFormName();
|
216 |
+
$reseted = false;
|
217 |
+
|
218 |
+
if ( isset( $_POST['wbcr_dan_reset_action'] ) ) {
|
219 |
+
check_admin_referer( $form_name, 'wbcr_dan_reset_nonce' );
|
220 |
+
$reset_for_users = WDN_Plugin::app()->request->post( 'wbcr_dan_reset_for_users', 'current_user', true );
|
221 |
+
|
222 |
+
if ( $reset_for_users == 'current_user' ) {
|
223 |
+
delete_user_meta( get_current_user_id(), WDN_Plugin::app()->getOptionName( 'hidden_notices' ) );
|
224 |
+
} else {
|
225 |
+
$meta_key = sanitize_key( WDN_Plugin::app()->getOptionName( 'hidden_notices' ) );
|
226 |
+
$wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key = '{$meta_key}'" );
|
227 |
+
}
|
228 |
+
|
229 |
+
$reseted = true;
|
230 |
+
}
|
231 |
+
|
232 |
+
?>
|
233 |
+
<div class="form-group form-group-checkbox factory-control-reset_notices_button">
|
234 |
+
<label for="wbcr_clearfy_reset_notices_button" class="col-sm-4 control-label">
|
235 |
+
<?= __( 'Reset hidden notices for', 'disable-admin-notices' ); ?>
|
236 |
+
<span class="factory-hint-icon factory-hint-icon-grey" data-toggle="factory-tooltip" data-placement="right"
|
237 |
+
title=""
|
238 |
+
data-original-title="<?php _e( 'Push reset hidden notices if you need to show hidden notices again.', 'disable-admin-notices' ) ?>">
|
239 |
+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
240 |
+
alt="">
|
241 |
+
</span>
|
242 |
+
</label>
|
243 |
+
<div class="control-group col-sm-8">
|
244 |
+
<div class="factory-checkbox factory-from-control-checkbox factory-buttons-way btn-group">
|
245 |
+
<form method="post">
|
246 |
+
<?php wp_nonce_field( $form_name, 'wbcr_dan_reset_nonce' ); ?>
|
247 |
+
<p>
|
248 |
+
<input type="radio" name="wbcr_dan_reset_for_users" value="current_user"
|
249 |
+
checked/> <?= __( 'current user', 'disable-admin-notices' ); ?>
|
250 |
+
</p>
|
251 |
+
<p>
|
252 |
+
<input type="radio" name="wbcr_dan_reset_for_users"
|
253 |
+
value="all"/> <?= __( 'all users', 'disable-admin-notices' ); ?>
|
254 |
+
</p>
|
255 |
+
<p>
|
256 |
+
<input type="submit" name="wbcr_dan_reset_action"
|
257 |
+
value="<?= __( 'Reset notices', 'disable-admin-notices' ); ?>"
|
258 |
+
class="button button-default"/>
|
259 |
+
</p>
|
260 |
+
<?php if ( $reseted ): ?>
|
261 |
+
<div style="color:green;margin-top:5px;"><?php _e( 'Hidden notices are successfully reset, now you can see them again!', 'disable-admin-notices' ) ?></div>
|
262 |
+
<?php endif; ?>
|
263 |
+
</form>
|
264 |
+
</div>
|
265 |
+
</div>
|
266 |
+
</div>
|
267 |
+
<?php
|
268 |
+
}
|
269 |
+
|
admin/pages/class-pages-edit-admin-bar.php
CHANGED
@@ -1,147 +1,147 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// Exit if accessed directly
|
4 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
5 |
-
exit;
|
6 |
-
}
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Страница общих настроек для этого плагина.
|
10 |
-
*
|
11 |
-
* Не поддерживает режим работы с мультисаймами.
|
12 |
-
*
|
13 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
14 |
-
* @copyright (c) 2019 Webraftic Ltd
|
15 |
-
* @version 1.0
|
16 |
-
*/
|
17 |
-
class WDAN_Edit_Admin_Bar extends WDN_Page {
|
18 |
-
|
19 |
-
/**
|
20 |
-
* {@inheritDoc}
|
21 |
-
*
|
22 |
-
* @var string
|
23 |
-
*/
|
24 |
-
public $id = "wdanp-edit-admin-bar";
|
25 |
-
|
26 |
-
/**
|
27 |
-
* {@inheritDoc}
|
28 |
-
*
|
29 |
-
* @var string
|
30 |
-
*/
|
31 |
-
public $type = "page";
|
32 |
-
|
33 |
-
/**
|
34 |
-
* {@inheritDoc}
|
35 |
-
*
|
36 |
-
* @var string
|
37 |
-
*/
|
38 |
-
public $page_menu_dashicon = 'dashicons-menu';
|
39 |
-
|
40 |
-
/**
|
41 |
-
* {@inheritDoc}
|
42 |
-
*
|
43 |
-
* @since 2.0.5 - добавлен
|
44 |
-
* @var bool
|
45 |
-
*/
|
46 |
-
public $show_right_sidebar_in_options = false;
|
47 |
-
|
48 |
-
|
49 |
-
/**
|
50 |
-
* @param WDN_Plugin $plugin
|
51 |
-
*/
|
52 |
-
public function __construct( $plugin ) {
|
53 |
-
$this->menu_title = __( 'Hide adminbar items', 'disable-admin-notices' );
|
54 |
-
$this->page_menu_short_description = __( 'You can hide an annoying adminbar menu', 'disable-admin-notices' );
|
55 |
-
|
56 |
-
parent::__construct( $plugin );
|
57 |
-
|
58 |
-
$this->plugin = $plugin;
|
59 |
-
|
60 |
-
add_action( 'wp_before_admin_bar_render', [ $this, 'remove_from_admin_bar' ], 999 );
|
61 |
-
}
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Requests assets (js and css) for the page.
|
65 |
-
*
|
66 |
-
* @param
|
67 |
-
* @param
|
68 |
-
*
|
69 |
-
* @return void
|
70 |
-
* @see
|
71 |
-
*
|
72 |
-
*/
|
73 |
-
public function assets( $scripts, $styles ) {
|
74 |
-
parent::assets( $scripts, $styles );
|
75 |
-
|
76 |
-
$this->styles->add( WDN_PLUGIN_URL . '/admin/assets/css/settings.css' );
|
77 |
-
}
|
78 |
-
|
79 |
-
public function remove_from_admin_bar() {
|
80 |
-
global $wp_admin_bar;
|
81 |
-
|
82 |
-
if ( empty( $wp_admin_bar ) ) {
|
83 |
-
return;
|
84 |
-
}
|
85 |
-
|
86 |
-
$hidden_items = $this->plugin->getPopulateOption( 'hidden_adminbar_items', [] );
|
87 |
-
|
88 |
-
$nodes = [];
|
89 |
-
foreach ( $wp_admin_bar->get_nodes() as $node ) {
|
90 |
-
if ( false === $node->parent && ! empty( $node->title ) ) {
|
91 |
-
if ( "updates" === $node->id ) {
|
92 |
-
$node->title = "Updates";
|
93 |
-
}
|
94 |
-
if ( "comments" === $node->id ) {
|
95 |
-
$node->title = "Comments";
|
96 |
-
}
|
97 |
-
$nodes[ $node->id ] = strip_tags( $node->title );
|
98 |
-
}
|
99 |
-
}
|
100 |
-
|
101 |
-
$this->plugin->updatePopulateOption( 'adminbar_items', $nodes );
|
102 |
-
}
|
103 |
-
|
104 |
-
public function showPageContent() {
|
105 |
-
$all_items = $this->plugin->getPopulateOption( 'adminbar_items', [] );
|
106 |
-
$hidden_items = $this->plugin->getPopulateOption( 'hidden_adminbar_items', [] );
|
107 |
-
|
108 |
-
?>
|
109 |
-
|
110 |
-
<div class="wrdan-premium-fake-content">
|
111 |
-
<div class="wdan-premium-info">
|
112 |
-
<h3>Hide admin bar items (menu) PRO</h3>
|
113 |
-
<p>This function allows you to disable annoying menu items in the admin bar. Some plugins take up space
|
114 |
-
in
|
115 |
-
the admin bar to insert their ads. Just get rid of this ad with the premium features of our
|
116 |
-
plugin.</p>
|
117 |
-
<a class="wdan-button wdan-button-default wdan-button-go-pro" target="_blank" href="https://clearfy.pro/disable-admin-notices/">Go
|
118 |
-
Pro</a>
|
119 |
-
</div>
|
120 |
-
<div class="wdan-premium-layer"></div>
|
121 |
-
|
122 |
-
<h4>Disable adminbar items</h4>
|
123 |
-
<table class="wp-list-table widefat fixed striped">
|
124 |
-
<tr>
|
125 |
-
<th><strong>Menu title</strong></th>
|
126 |
-
<th style="width:100px;"><strong>Action</strong></th>
|
127 |
-
</tr>
|
128 |
-
<?php foreach ( (array) $all_items as $ID => $title ): ?>
|
129 |
-
|
130 |
-
<tr>
|
131 |
-
<td><?php echo $title; ?></td>
|
132 |
-
<td>
|
133 |
-
<?php if ( ! isset( $hidden_items[ $ID ] ) ): ?>
|
134 |
-
<a style="color:#e66113;" href="<?php echo wp_nonce_url( $this->getActionUrl( 'disable-adminbar-item', [ 'id' => $ID ] ), 'disable_adminbar_item_' . $ID ); ?>">Disable</a>
|
135 |
-
<?php else: ?>
|
136 |
-
<a style="color:#428bca;" href="<?php echo wp_nonce_url( $this->getActionUrl( 'enable-adminbar-item', [ 'id' => $ID ] ), 'enable_adminbar_item_' . $ID ); ?>">Enable</a>
|
137 |
-
<?php endif; ?>
|
138 |
-
</td>
|
139 |
-
</tr>
|
140 |
-
<?php endforeach; ?>
|
141 |
-
</table>
|
142 |
-
</div>
|
143 |
-
|
144 |
-
<?php
|
145 |
-
}
|
146 |
-
|
147 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Exit if accessed directly
|
4 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
5 |
+
exit;
|
6 |
+
}
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Страница общих настроек для этого плагина.
|
10 |
+
*
|
11 |
+
* Не поддерживает режим работы с мультисаймами.
|
12 |
+
*
|
13 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
14 |
+
* @copyright (c) 2019 Webraftic Ltd
|
15 |
+
* @version 1.0
|
16 |
+
*/
|
17 |
+
class WDAN_Edit_Admin_Bar extends WDN_Page {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* {@inheritDoc}
|
21 |
+
*
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
public $id = "wdanp-edit-admin-bar";
|
25 |
+
|
26 |
+
/**
|
27 |
+
* {@inheritDoc}
|
28 |
+
*
|
29 |
+
* @var string
|
30 |
+
*/
|
31 |
+
public $type = "page";
|
32 |
+
|
33 |
+
/**
|
34 |
+
* {@inheritDoc}
|
35 |
+
*
|
36 |
+
* @var string
|
37 |
+
*/
|
38 |
+
public $page_menu_dashicon = 'dashicons-menu';
|
39 |
+
|
40 |
+
/**
|
41 |
+
* {@inheritDoc}
|
42 |
+
*
|
43 |
+
* @since 2.0.5 - добавлен
|
44 |
+
* @var bool
|
45 |
+
*/
|
46 |
+
public $show_right_sidebar_in_options = false;
|
47 |
+
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @param WDN_Plugin $plugin
|
51 |
+
*/
|
52 |
+
public function __construct( $plugin ) {
|
53 |
+
$this->menu_title = __( 'Hide adminbar items', 'disable-admin-notices' );
|
54 |
+
$this->page_menu_short_description = __( 'You can hide an annoying adminbar menu', 'disable-admin-notices' );
|
55 |
+
|
56 |
+
parent::__construct( $plugin );
|
57 |
+
|
58 |
+
$this->plugin = $plugin;
|
59 |
+
|
60 |
+
add_action( 'wp_before_admin_bar_render', [ $this, 'remove_from_admin_bar' ], 999 );
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Requests assets (js and css) for the page.
|
65 |
+
*
|
66 |
+
* @param Wbcr_Factory460_ScriptList $scripts
|
67 |
+
* @param Wbcr_Factory460_StyleList $styles
|
68 |
+
*
|
69 |
+
* @return void
|
70 |
+
* @see Wbcr_FactoryPages460_AdminPage
|
71 |
+
*
|
72 |
+
*/
|
73 |
+
public function assets( $scripts, $styles ) {
|
74 |
+
parent::assets( $scripts, $styles );
|
75 |
+
|
76 |
+
$this->styles->add( WDN_PLUGIN_URL . '/admin/assets/css/settings.css' );
|
77 |
+
}
|
78 |
+
|
79 |
+
public function remove_from_admin_bar() {
|
80 |
+
global $wp_admin_bar;
|
81 |
+
|
82 |
+
if ( empty( $wp_admin_bar ) ) {
|
83 |
+
return;
|
84 |
+
}
|
85 |
+
|
86 |
+
$hidden_items = $this->plugin->getPopulateOption( 'hidden_adminbar_items', [] );
|
87 |
+
|
88 |
+
$nodes = [];
|
89 |
+
foreach ( $wp_admin_bar->get_nodes() as $node ) {
|
90 |
+
if ( false === $node->parent && ! empty( $node->title ) ) {
|
91 |
+
if ( "updates" === $node->id ) {
|
92 |
+
$node->title = "Updates";
|
93 |
+
}
|
94 |
+
if ( "comments" === $node->id ) {
|
95 |
+
$node->title = "Comments";
|
96 |
+
}
|
97 |
+
$nodes[ $node->id ] = strip_tags( $node->title );
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
$this->plugin->updatePopulateOption( 'adminbar_items', $nodes );
|
102 |
+
}
|
103 |
+
|
104 |
+
public function showPageContent() {
|
105 |
+
$all_items = $this->plugin->getPopulateOption( 'adminbar_items', [] );
|
106 |
+
$hidden_items = $this->plugin->getPopulateOption( 'hidden_adminbar_items', [] );
|
107 |
+
|
108 |
+
?>
|
109 |
+
|
110 |
+
<div class="wrdan-premium-fake-content">
|
111 |
+
<div class="wdan-premium-info">
|
112 |
+
<h3>Hide admin bar items (menu) PRO</h3>
|
113 |
+
<p>This function allows you to disable annoying menu items in the admin bar. Some plugins take up space
|
114 |
+
in
|
115 |
+
the admin bar to insert their ads. Just get rid of this ad with the premium features of our
|
116 |
+
plugin.</p>
|
117 |
+
<a class="wdan-button wdan-button-default wdan-button-go-pro" target="_blank" href="https://clearfy.pro/disable-admin-notices/">Go
|
118 |
+
Pro</a>
|
119 |
+
</div>
|
120 |
+
<div class="wdan-premium-layer"></div>
|
121 |
+
|
122 |
+
<h4>Disable adminbar items</h4>
|
123 |
+
<table class="wp-list-table widefat fixed striped">
|
124 |
+
<tr>
|
125 |
+
<th><strong>Menu title</strong></th>
|
126 |
+
<th style="width:100px;"><strong>Action</strong></th>
|
127 |
+
</tr>
|
128 |
+
<?php foreach ( (array) $all_items as $ID => $title ): ?>
|
129 |
+
|
130 |
+
<tr>
|
131 |
+
<td><?php echo $title; ?></td>
|
132 |
+
<td>
|
133 |
+
<?php if ( ! isset( $hidden_items[ $ID ] ) ): ?>
|
134 |
+
<a style="color:#e66113;" href="<?php echo wp_nonce_url( $this->getActionUrl( 'disable-adminbar-item', [ 'id' => $ID ] ), 'disable_adminbar_item_' . $ID ); ?>">Disable</a>
|
135 |
+
<?php else: ?>
|
136 |
+
<a style="color:#428bca;" href="<?php echo wp_nonce_url( $this->getActionUrl( 'enable-adminbar-item', [ 'id' => $ID ] ), 'enable_adminbar_item_' . $ID ); ?>">Enable</a>
|
137 |
+
<?php endif; ?>
|
138 |
+
</td>
|
139 |
+
</tr>
|
140 |
+
<?php endforeach; ?>
|
141 |
+
</table>
|
142 |
+
</div>
|
143 |
+
|
144 |
+
<?php
|
145 |
+
}
|
146 |
+
|
147 |
+
}
|
admin/pages/class-pages-edit-redirects.php
CHANGED
@@ -1,164 +1,164 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// Exit if accessed directly
|
4 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
5 |
-
exit;
|
6 |
-
}
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Страница общих настроек для этого плагина.
|
10 |
-
*
|
11 |
-
* Не поддерживает режим работы с мультисаймами.
|
12 |
-
*
|
13 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
14 |
-
* @copyright (c) 2019 Webraftic Ltd
|
15 |
-
* @version 1.0
|
16 |
-
*/
|
17 |
-
class WDAN_Block_Ad_Redirects extends WDN_Page {
|
18 |
-
|
19 |
-
/**
|
20 |
-
* {@inheritDoc}
|
21 |
-
*
|
22 |
-
* @var string
|
23 |
-
*/
|
24 |
-
public $id = "wdanp-edit-redirects";
|
25 |
-
|
26 |
-
/**
|
27 |
-
* {@inheritDoc}
|
28 |
-
*
|
29 |
-
* @var string
|
30 |
-
*/
|
31 |
-
public $type = "page";
|
32 |
-
|
33 |
-
/**
|
34 |
-
* {@inheritDoc}
|
35 |
-
*
|
36 |
-
* @var string
|
37 |
-
*/
|
38 |
-
public $page_menu_dashicon = 'dashicons dashicons-undo';
|
39 |
-
|
40 |
-
/**
|
41 |
-
* {@inheritDoc}
|
42 |
-
*
|
43 |
-
* @since 2.0.5 - добавлен
|
44 |
-
* @var bool
|
45 |
-
*/
|
46 |
-
public $show_right_sidebar_in_options = false;
|
47 |
-
|
48 |
-
|
49 |
-
/**
|
50 |
-
* @param WDN_Plugin $plugin
|
51 |
-
*/
|
52 |
-
public function __construct( $plugin ) {
|
53 |
-
$this->menu_title = __( 'Block ad redirects', 'disable-admin-notices' );
|
54 |
-
$this->page_menu_short_description = __( 'Break advertising redirects', 'disable-admin-notices' );
|
55 |
-
|
56 |
-
parent::__construct( $plugin );
|
57 |
-
|
58 |
-
$this->plugin = $plugin;
|
59 |
-
}
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Requests assets (js and css) for the page.
|
63 |
-
*
|
64 |
-
* @param
|
65 |
-
* @param
|
66 |
-
*
|
67 |
-
* @return void
|
68 |
-
* @see
|
69 |
-
*
|
70 |
-
*/
|
71 |
-
public function assets( $scripts, $styles ) {
|
72 |
-
parent::assets( $scripts, $styles );
|
73 |
-
|
74 |
-
$this->styles->add( WDN_PLUGIN_URL . '/admin/assets/css/settings.css' );
|
75 |
-
}
|
76 |
-
|
77 |
-
public function get_break_redirects() {
|
78 |
-
return [];
|
79 |
-
}
|
80 |
-
|
81 |
-
public function showPageContent() {
|
82 |
-
$redirects = $this->get_break_redirects();
|
83 |
-
?>
|
84 |
-
|
85 |
-
<div class="wrdan-premium-fake-content">
|
86 |
-
<div class="wdan-premium-info">
|
87 |
-
<h3>Block Ad redirects PRO</h3>
|
88 |
-
<p>This feature will be useful to you to break advertising redirects. Some plugins, when updating or
|
89 |
-
during
|
90 |
-
installation, may redirect you to their page with advertisements or news. If plugins do this too
|
91 |
-
often,
|
92 |
-
it can be a headache for you. Break these redirects with our premium features.</p>
|
93 |
-
<a class="wdan-button wdan-button-default wdan-button-go-pro" target="_blank" href="https://clearfy.pro/disable-admin-notices/">
|
94 |
-
Go Pro
|
95 |
-
</a>
|
96 |
-
</div>
|
97 |
-
<div class="wdan-premium-layer"></div>
|
98 |
-
|
99 |
-
<h4>Block ad redirects</h4>
|
100 |
-
<form method="post">
|
101 |
-
<label for="wdnpro-redirect-url">Enter url for block:</label><br>
|
102 |
-
<input id="wdnpro-redirect-url" style="width:400px;" type="text" name="wdnpro_redirect_url">
|
103 |
-
<input type="submit" name="wdnpro_add_block" class="button" value="Add block">
|
104 |
-
</form>
|
105 |
-
<br>
|
106 |
-
<table class="wp-list-table widefat fixed striped">
|
107 |
-
<tr>
|
108 |
-
<th>Url</th>
|
109 |
-
<th style="width:200px;">Action</th>
|
110 |
-
</tr>
|
111 |
-
<tr>
|
112 |
-
<td>
|
113 |
-
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
114 |
-
</td>
|
115 |
-
<td>
|
116 |
-
<a style="color:#428bca;" href="#">Unblock</a>
|
117 |
-
</td>
|
118 |
-
</tr>
|
119 |
-
<tr>
|
120 |
-
<td>
|
121 |
-
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
122 |
-
</td>
|
123 |
-
<td>
|
124 |
-
<a style="color:#428bca;" href="#">Unblock</a>
|
125 |
-
</td>
|
126 |
-
</tr>
|
127 |
-
<tr>
|
128 |
-
<td>
|
129 |
-
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
130 |
-
</td>
|
131 |
-
<td>
|
132 |
-
<a style="color:#428bca;" href="#">Unblock</a>
|
133 |
-
</td>
|
134 |
-
</tr>
|
135 |
-
<tr>
|
136 |
-
<td>
|
137 |
-
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
138 |
-
</td>
|
139 |
-
<td>
|
140 |
-
<a style="color:#428bca;" href="#">Unblock</a>
|
141 |
-
</td>
|
142 |
-
</tr>
|
143 |
-
<tr>
|
144 |
-
<td>
|
145 |
-
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
146 |
-
</td>
|
147 |
-
<td>
|
148 |
-
<a style="color:#428bca;" href="#">Unblock</a>
|
149 |
-
</td>
|
150 |
-
</tr>
|
151 |
-
<tr>
|
152 |
-
<td>
|
153 |
-
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
154 |
-
</td>
|
155 |
-
<td>
|
156 |
-
<a style="color:#428bca;" href="#">Unblock</a>
|
157 |
-
</td>
|
158 |
-
</tr>
|
159 |
-
</table>
|
160 |
-
</div>
|
161 |
-
<?php
|
162 |
-
}
|
163 |
-
|
164 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Exit if accessed directly
|
4 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
5 |
+
exit;
|
6 |
+
}
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Страница общих настроек для этого плагина.
|
10 |
+
*
|
11 |
+
* Не поддерживает режим работы с мультисаймами.
|
12 |
+
*
|
13 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
14 |
+
* @copyright (c) 2019 Webraftic Ltd
|
15 |
+
* @version 1.0
|
16 |
+
*/
|
17 |
+
class WDAN_Block_Ad_Redirects extends WDN_Page {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* {@inheritDoc}
|
21 |
+
*
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
public $id = "wdanp-edit-redirects";
|
25 |
+
|
26 |
+
/**
|
27 |
+
* {@inheritDoc}
|
28 |
+
*
|
29 |
+
* @var string
|
30 |
+
*/
|
31 |
+
public $type = "page";
|
32 |
+
|
33 |
+
/**
|
34 |
+
* {@inheritDoc}
|
35 |
+
*
|
36 |
+
* @var string
|
37 |
+
*/
|
38 |
+
public $page_menu_dashicon = 'dashicons dashicons-undo';
|
39 |
+
|
40 |
+
/**
|
41 |
+
* {@inheritDoc}
|
42 |
+
*
|
43 |
+
* @since 2.0.5 - добавлен
|
44 |
+
* @var bool
|
45 |
+
*/
|
46 |
+
public $show_right_sidebar_in_options = false;
|
47 |
+
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @param WDN_Plugin $plugin
|
51 |
+
*/
|
52 |
+
public function __construct( $plugin ) {
|
53 |
+
$this->menu_title = __( 'Block ad redirects', 'disable-admin-notices' );
|
54 |
+
$this->page_menu_short_description = __( 'Break advertising redirects', 'disable-admin-notices' );
|
55 |
+
|
56 |
+
parent::__construct( $plugin );
|
57 |
+
|
58 |
+
$this->plugin = $plugin;
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Requests assets (js and css) for the page.
|
63 |
+
*
|
64 |
+
* @param Wbcr_Factory460_ScriptList $scripts
|
65 |
+
* @param Wbcr_Factory460_StyleList $styles
|
66 |
+
*
|
67 |
+
* @return void
|
68 |
+
* @see Wbcr_FactoryPages460_AdminPage
|
69 |
+
*
|
70 |
+
*/
|
71 |
+
public function assets( $scripts, $styles ) {
|
72 |
+
parent::assets( $scripts, $styles );
|
73 |
+
|
74 |
+
$this->styles->add( WDN_PLUGIN_URL . '/admin/assets/css/settings.css' );
|
75 |
+
}
|
76 |
+
|
77 |
+
public function get_break_redirects() {
|
78 |
+
return [];
|
79 |
+
}
|
80 |
+
|
81 |
+
public function showPageContent() {
|
82 |
+
$redirects = $this->get_break_redirects();
|
83 |
+
?>
|
84 |
+
|
85 |
+
<div class="wrdan-premium-fake-content">
|
86 |
+
<div class="wdan-premium-info">
|
87 |
+
<h3>Block Ad redirects PRO</h3>
|
88 |
+
<p>This feature will be useful to you to break advertising redirects. Some plugins, when updating or
|
89 |
+
during
|
90 |
+
installation, may redirect you to their page with advertisements or news. If plugins do this too
|
91 |
+
often,
|
92 |
+
it can be a headache for you. Break these redirects with our premium features.</p>
|
93 |
+
<a class="wdan-button wdan-button-default wdan-button-go-pro" target="_blank" href="https://clearfy.pro/disable-admin-notices/">
|
94 |
+
Go Pro
|
95 |
+
</a>
|
96 |
+
</div>
|
97 |
+
<div class="wdan-premium-layer"></div>
|
98 |
+
|
99 |
+
<h4>Block ad redirects</h4>
|
100 |
+
<form method="post">
|
101 |
+
<label for="wdnpro-redirect-url">Enter url for block:</label><br>
|
102 |
+
<input id="wdnpro-redirect-url" style="width:400px;" type="text" name="wdnpro_redirect_url">
|
103 |
+
<input type="submit" name="wdnpro_add_block" class="button" value="Add block">
|
104 |
+
</form>
|
105 |
+
<br>
|
106 |
+
<table class="wp-list-table widefat fixed striped">
|
107 |
+
<tr>
|
108 |
+
<th>Url</th>
|
109 |
+
<th style="width:200px;">Action</th>
|
110 |
+
</tr>
|
111 |
+
<tr>
|
112 |
+
<td>
|
113 |
+
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
114 |
+
</td>
|
115 |
+
<td>
|
116 |
+
<a style="color:#428bca;" href="#">Unblock</a>
|
117 |
+
</td>
|
118 |
+
</tr>
|
119 |
+
<tr>
|
120 |
+
<td>
|
121 |
+
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
122 |
+
</td>
|
123 |
+
<td>
|
124 |
+
<a style="color:#428bca;" href="#">Unblock</a>
|
125 |
+
</td>
|
126 |
+
</tr>
|
127 |
+
<tr>
|
128 |
+
<td>
|
129 |
+
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
130 |
+
</td>
|
131 |
+
<td>
|
132 |
+
<a style="color:#428bca;" href="#">Unblock</a>
|
133 |
+
</td>
|
134 |
+
</tr>
|
135 |
+
<tr>
|
136 |
+
<td>
|
137 |
+
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
138 |
+
</td>
|
139 |
+
<td>
|
140 |
+
<a style="color:#428bca;" href="#">Unblock</a>
|
141 |
+
</td>
|
142 |
+
</tr>
|
143 |
+
<tr>
|
144 |
+
<td>
|
145 |
+
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
146 |
+
</td>
|
147 |
+
<td>
|
148 |
+
<a style="color:#428bca;" href="#">Unblock</a>
|
149 |
+
</td>
|
150 |
+
</tr>
|
151 |
+
<tr>
|
152 |
+
<td>
|
153 |
+
https://site.com/wp-admin/?page=plugin-name&ads=redirect
|
154 |
+
</td>
|
155 |
+
<td>
|
156 |
+
<a style="color:#428bca;" href="#">Unblock</a>
|
157 |
+
</td>
|
158 |
+
</tr>
|
159 |
+
</table>
|
160 |
+
</div>
|
161 |
+
<?php
|
162 |
+
}
|
163 |
+
|
164 |
+
}
|
admin/pages/class-pages-license.php
CHANGED
@@ -1,103 +1,103 @@
|
|
1 |
-
<?php
|
2 |
-
// Exit if accessed directly
|
3 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
-
exit;
|
5 |
-
}
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Страница лицензирования плагина.
|
9 |
-
*
|
10 |
-
* Поддерживает режим работы с мультисаймами. Вы можете увидеть эту страницу в панели настройки сети.
|
11 |
-
*
|
12 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
13 |
-
*
|
14 |
-
* @copyright (c) 2018 Webraftic Ltd
|
15 |
-
*/
|
16 |
-
class WDN_LicensePage extends WBCR\
|
17 |
-
|
18 |
-
/**
|
19 |
-
* {@inheritdoc}
|
20 |
-
*
|
21 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
22 |
-
* @since 1.6.0
|
23 |
-
* @var string
|
24 |
-
*/
|
25 |
-
public $id = 'wdn_license';
|
26 |
-
|
27 |
-
/**
|
28 |
-
* {@inheritdoc}
|
29 |
-
*
|
30 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
31 |
-
* @since 1.6.0
|
32 |
-
* @var string
|
33 |
-
*/
|
34 |
-
public $page_parent_page;
|
35 |
-
|
36 |
-
/**
|
37 |
-
* WCL_LicensePage constructor.
|
38 |
-
*
|
39 |
-
* @param \
|
40 |
-
*
|
41 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
42 |
-
*
|
43 |
-
*/
|
44 |
-
public function __construct(
|
45 |
-
$this->menu_title = __( 'License', 'robin-image-optimizer' );
|
46 |
-
$this->page_menu_short_description = __( 'Product activation', 'robin-image-optimizer' );
|
47 |
-
$this->plan_name = __( 'Disable admin notices premium', 'robin-image-optimizer' );
|
48 |
-
|
49 |
-
/*if ( defined( 'WIO_PLUGIN_ACTIVE' ) && ! wrio_is_clearfy_license_activate() ) {
|
50 |
-
$this->page_parent_page = 'none';
|
51 |
-
}*/
|
52 |
-
|
53 |
-
parent::__construct( $plugin );
|
54 |
-
|
55 |
-
/**
|
56 |
-
* Adds a new plugin card to license components page
|
57 |
-
*
|
58 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
59 |
-
* @since 1.6.2
|
60 |
-
*/
|
61 |
-
/*add_filter( 'wbcr/clearfy/license/list_components', function ( $components ) {
|
62 |
-
$title = 'Free';
|
63 |
-
$icon = 'clearfy-premium-icon-256x256--lock.png';
|
64 |
-
|
65 |
-
if ( $this->is_premium ) {
|
66 |
-
$title = 'Premium';
|
67 |
-
$icon = 'clearfy-premium-icon-256x256--default.png';
|
68 |
-
}
|
69 |
-
|
70 |
-
$components[] = [
|
71 |
-
'name' => 'clearfy',
|
72 |
-
'title' => sprintf( __( 'Clearfy [%s]', 'clearfy' ), $title ),
|
73 |
-
'type' => 'internal',
|
74 |
-
'build' => $this->is_premium ? 'premium' : 'free',
|
75 |
-
'key' => $this->get_hidden_license_key(),
|
76 |
-
'plan' => $this->get_plan(),
|
77 |
-
'expiration_days' => $this->get_expiration_days(),
|
78 |
-
'quota' => $this->is_premium ? $this->premium_license->get_count_active_sites() . ' ' . __( 'of', 'clearfy' ) . ' ' . $this->premium_license->get_sites_quota() : null,
|
79 |
-
'subscription' => $this->is_premium && $this->premium_has_subscription ? sprintf( __( 'Automatic renewal, every %s', '' ), esc_attr( $this->get_billing_cycle_readable() ) ) : null,
|
80 |
-
'url' => 'https://clearfy.pro/',
|
81 |
-
'icon' => WCL_PLUGIN_URL . '/admin/assets/img/' . $icon,
|
82 |
-
'description' => __( '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.', 'clearfy' ),
|
83 |
-
'license_page_id' => 'clearfy_license'
|
84 |
-
];
|
85 |
-
|
86 |
-
return $components;
|
87 |
-
} );*/
|
88 |
-
}
|
89 |
-
|
90 |
-
/**
|
91 |
-
* {@inheritdoc}
|
92 |
-
*
|
93 |
-
* @return string
|
94 |
-
* @since 1.6.0
|
95 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
96 |
-
*/
|
97 |
-
/*public function get_plan_description() {
|
98 |
-
$description = '<p style="font-size: 16px;">' . __( '<b>Clearfy Business</b> is a paid package of components for the popular free WordPress plugin named Clearfy. You get access to all paid components at one price.', 'clearfy' ) . '</p>';
|
99 |
-
$description .= '<p style="font-size: 16px;">' . __( 'Paid license guarantees that you can download and update existing and future paid components of the plugin.', 'clearfy' ) . '</p>';
|
100 |
-
|
101 |
-
return $description;
|
102 |
-
}*/
|
103 |
}
|
1 |
+
<?php
|
2 |
+
// Exit if accessed directly
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Страница лицензирования плагина.
|
9 |
+
*
|
10 |
+
* Поддерживает режим работы с мультисаймами. Вы можете увидеть эту страницу в панели настройки сети.
|
11 |
+
*
|
12 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
13 |
+
*
|
14 |
+
* @copyright (c) 2018 Webraftic Ltd
|
15 |
+
*/
|
16 |
+
class WDN_LicensePage extends WBCR\Factory_Templates_112\Pages\License {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* {@inheritdoc}
|
20 |
+
*
|
21 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
22 |
+
* @since 1.6.0
|
23 |
+
* @var string
|
24 |
+
*/
|
25 |
+
public $id = 'wdn_license';
|
26 |
+
|
27 |
+
/**
|
28 |
+
* {@inheritdoc}
|
29 |
+
*
|
30 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
31 |
+
* @since 1.6.0
|
32 |
+
* @var string
|
33 |
+
*/
|
34 |
+
public $page_parent_page;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* WCL_LicensePage constructor.
|
38 |
+
*
|
39 |
+
* @param \Wbcr_Factory460_Plugin $plugin
|
40 |
+
*
|
41 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
42 |
+
*
|
43 |
+
*/
|
44 |
+
public function __construct( Wbcr_Factory460_Plugin $plugin ) {
|
45 |
+
$this->menu_title = __( 'License', 'robin-image-optimizer' );
|
46 |
+
$this->page_menu_short_description = __( 'Product activation', 'robin-image-optimizer' );
|
47 |
+
$this->plan_name = __( 'Disable admin notices premium', 'robin-image-optimizer' );
|
48 |
+
|
49 |
+
/*if ( defined( 'WIO_PLUGIN_ACTIVE' ) && ! wrio_is_clearfy_license_activate() ) {
|
50 |
+
$this->page_parent_page = 'none';
|
51 |
+
}*/
|
52 |
+
|
53 |
+
parent::__construct( $plugin );
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Adds a new plugin card to license components page
|
57 |
+
*
|
58 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
59 |
+
* @since 1.6.2
|
60 |
+
*/
|
61 |
+
/*add_filter( 'wbcr/clearfy/license/list_components', function ( $components ) {
|
62 |
+
$title = 'Free';
|
63 |
+
$icon = 'clearfy-premium-icon-256x256--lock.png';
|
64 |
+
|
65 |
+
if ( $this->is_premium ) {
|
66 |
+
$title = 'Premium';
|
67 |
+
$icon = 'clearfy-premium-icon-256x256--default.png';
|
68 |
+
}
|
69 |
+
|
70 |
+
$components[] = [
|
71 |
+
'name' => 'clearfy',
|
72 |
+
'title' => sprintf( __( 'Clearfy [%s]', 'clearfy' ), $title ),
|
73 |
+
'type' => 'internal',
|
74 |
+
'build' => $this->is_premium ? 'premium' : 'free',
|
75 |
+
'key' => $this->get_hidden_license_key(),
|
76 |
+
'plan' => $this->get_plan(),
|
77 |
+
'expiration_days' => $this->get_expiration_days(),
|
78 |
+
'quota' => $this->is_premium ? $this->premium_license->get_count_active_sites() . ' ' . __( 'of', 'clearfy' ) . ' ' . $this->premium_license->get_sites_quota() : null,
|
79 |
+
'subscription' => $this->is_premium && $this->premium_has_subscription ? sprintf( __( 'Automatic renewal, every %s', '' ), esc_attr( $this->get_billing_cycle_readable() ) ) : null,
|
80 |
+
'url' => 'https://clearfy.pro/',
|
81 |
+
'icon' => WCL_PLUGIN_URL . '/admin/assets/img/' . $icon,
|
82 |
+
'description' => __( '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.', 'clearfy' ),
|
83 |
+
'license_page_id' => 'clearfy_license'
|
84 |
+
];
|
85 |
+
|
86 |
+
return $components;
|
87 |
+
} );*/
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* {@inheritdoc}
|
92 |
+
*
|
93 |
+
* @return string
|
94 |
+
* @since 1.6.0
|
95 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
96 |
+
*/
|
97 |
+
/*public function get_plan_description() {
|
98 |
+
$description = '<p style="font-size: 16px;">' . __( '<b>Clearfy Business</b> is a paid package of components for the popular free WordPress plugin named Clearfy. You get access to all paid components at one price.', 'clearfy' ) . '</p>';
|
99 |
+
$description .= '<p style="font-size: 16px;">' . __( 'Paid license guarantees that you can download and update existing and future paid components of the plugin.', 'clearfy' ) . '</p>';
|
100 |
+
|
101 |
+
return $description;
|
102 |
+
}*/
|
103 |
}
|
admin/pages/class-pages-notices.php
CHANGED
@@ -1,91 +1,91 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// Exit if accessed directly
|
4 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
5 |
-
exit;
|
6 |
-
}
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Страница со списком скрытых нотисов.
|
10 |
-
*
|
11 |
-
* @author Artem Prihodko <webtemyk@yandex.ru>
|
12 |
-
* @copyright (c) 2020 Webraftic Ltd
|
13 |
-
* @version 1.0
|
14 |
-
*/
|
15 |
-
class WDAN_Notices extends WDN_Page {
|
16 |
-
|
17 |
-
/**
|
18 |
-
* {@inheritDoc}
|
19 |
-
*
|
20 |
-
* @var string
|
21 |
-
*/
|
22 |
-
public $id = "wdan-notices";
|
23 |
-
|
24 |
-
/**
|
25 |
-
* {@inheritDoc}
|
26 |
-
*
|
27 |
-
* @var string
|
28 |
-
*/
|
29 |
-
public $type = "page";
|
30 |
-
|
31 |
-
/**
|
32 |
-
* {@inheritDoc}
|
33 |
-
*
|
34 |
-
* @var string
|
35 |
-
*/
|
36 |
-
public $page_menu_dashicon = 'dashicons-hidden';
|
37 |
-
|
38 |
-
/**
|
39 |
-
* {@inheritDoc}
|
40 |
-
*
|
41 |
-
* @since 2.0.5 - добавлен
|
42 |
-
* @var bool
|
43 |
-
*/
|
44 |
-
public $show_right_sidebar_in_options = false;
|
45 |
-
|
46 |
-
|
47 |
-
/**
|
48 |
-
* @param WDN_Plugin $plugin
|
49 |
-
*/
|
50 |
-
public function __construct( $plugin ) {
|
51 |
-
$this->menu_title = __( 'Hidden notices', 'disable-admin-notices' );
|
52 |
-
$this->page_menu_short_description = __( 'Manage hidden notices', 'disable-admin-notices' );
|
53 |
-
|
54 |
-
parent::__construct( $plugin );
|
55 |
-
|
56 |
-
$this->plugin = $plugin;
|
57 |
-
}
|
58 |
-
|
59 |
-
/**
|
60 |
-
* Requests assets (js and css) for the page.
|
61 |
-
*
|
62 |
-
* @param
|
63 |
-
* @param
|
64 |
-
*
|
65 |
-
* @return void
|
66 |
-
* @see
|
67 |
-
*
|
68 |
-
*/
|
69 |
-
public function assets( $scripts, $styles ) {
|
70 |
-
parent::assets( $scripts, $styles );
|
71 |
-
|
72 |
-
$this->styles->add( WDN_PLUGIN_URL . '/admin/assets/css/settings.css' );
|
73 |
-
}
|
74 |
-
|
75 |
-
public function showPageContent() {
|
76 |
-
?>
|
77 |
-
<div class="wrdan-premium-fake-content">
|
78 |
-
<div class="wdan-premium-info">
|
79 |
-
<h3>Hidden notices PRO</h3>
|
80 |
-
<p>This function allows you to disable annoying menu items in the admin bar. Some plugins take up space
|
81 |
-
in
|
82 |
-
the admin bar to insert their ads. Just get rid of this ad with the premium features of our
|
83 |
-
plugin.</p>
|
84 |
-
<a class="wdan-button wdan-button-default wdan-button-go-pro" target="_blank"
|
85 |
-
href="https://clearfy.pro/disable-admin-notices/">Go
|
86 |
-
Pro</a>
|
87 |
-
</div>
|
88 |
-
</div>
|
89 |
-
<?php
|
90 |
-
}
|
91 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Exit if accessed directly
|
4 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
5 |
+
exit;
|
6 |
+
}
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Страница со списком скрытых нотисов.
|
10 |
+
*
|
11 |
+
* @author Artem Prihodko <webtemyk@yandex.ru>
|
12 |
+
* @copyright (c) 2020 Webraftic Ltd
|
13 |
+
* @version 1.0
|
14 |
+
*/
|
15 |
+
class WDAN_Notices extends WDN_Page {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* {@inheritDoc}
|
19 |
+
*
|
20 |
+
* @var string
|
21 |
+
*/
|
22 |
+
public $id = "wdan-notices";
|
23 |
+
|
24 |
+
/**
|
25 |
+
* {@inheritDoc}
|
26 |
+
*
|
27 |
+
* @var string
|
28 |
+
*/
|
29 |
+
public $type = "page";
|
30 |
+
|
31 |
+
/**
|
32 |
+
* {@inheritDoc}
|
33 |
+
*
|
34 |
+
* @var string
|
35 |
+
*/
|
36 |
+
public $page_menu_dashicon = 'dashicons-hidden';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* {@inheritDoc}
|
40 |
+
*
|
41 |
+
* @since 2.0.5 - добавлен
|
42 |
+
* @var bool
|
43 |
+
*/
|
44 |
+
public $show_right_sidebar_in_options = false;
|
45 |
+
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @param WDN_Plugin $plugin
|
49 |
+
*/
|
50 |
+
public function __construct( $plugin ) {
|
51 |
+
$this->menu_title = __( 'Hidden notices', 'disable-admin-notices' );
|
52 |
+
$this->page_menu_short_description = __( 'Manage hidden notices', 'disable-admin-notices' );
|
53 |
+
|
54 |
+
parent::__construct( $plugin );
|
55 |
+
|
56 |
+
$this->plugin = $plugin;
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Requests assets (js and css) for the page.
|
61 |
+
*
|
62 |
+
* @param Wbcr_Factory460_ScriptList $scripts
|
63 |
+
* @param Wbcr_Factory460_StyleList $styles
|
64 |
+
*
|
65 |
+
* @return void
|
66 |
+
* @see Wbcr_FactoryPages460_AdminPage
|
67 |
+
*
|
68 |
+
*/
|
69 |
+
public function assets( $scripts, $styles ) {
|
70 |
+
parent::assets( $scripts, $styles );
|
71 |
+
|
72 |
+
$this->styles->add( WDN_PLUGIN_URL . '/admin/assets/css/settings.css' );
|
73 |
+
}
|
74 |
+
|
75 |
+
public function showPageContent() {
|
76 |
+
?>
|
77 |
+
<div class="wrdan-premium-fake-content">
|
78 |
+
<div class="wdan-premium-info">
|
79 |
+
<h3>Hidden notices PRO</h3>
|
80 |
+
<p>This function allows you to disable annoying menu items in the admin bar. Some plugins take up space
|
81 |
+
in
|
82 |
+
the admin bar to insert their ads. Just get rid of this ad with the premium features of our
|
83 |
+
plugin.</p>
|
84 |
+
<a class="wdan-button wdan-button-default wdan-button-go-pro" target="_blank"
|
85 |
+
href="https://clearfy.pro/disable-admin-notices/">Go
|
86 |
+
Pro</a>
|
87 |
+
</div>
|
88 |
+
</div>
|
89 |
+
<?php
|
90 |
+
}
|
91 |
+
}
|
admin/pages/class-pages-settings.php
CHANGED
@@ -1,149 +1,149 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Страница общих настроек для этого плагина.
|
4 |
-
*
|
5 |
-
* Может быть использована только, если этот плагин используется как отдельный плагин, а не как аддон
|
6 |
-
* дя плагина Clearfy. Если плагин загружен, как аддон для Clearfy, эта страница не будет подключена.
|
7 |
-
*
|
8 |
-
* Поддерживает режим работы с мультисаймами. Вы можете увидеть эту страницу в панели настройки сети.
|
9 |
-
*
|
10 |
-
* Github: https://github.com/alexkovalevv
|
11 |
-
*
|
12 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
13 |
-
* @copyright (c) 2018 Webraftic Ltd
|
14 |
-
* @version 1.0
|
15 |
-
*/
|
16 |
-
|
17 |
-
// Exit if accessed directly
|
18 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
class WDN_Settings_Page extends WDN_Page {
|
23 |
-
|
24 |
-
/**
|
25 |
-
* {@inheritDoc}
|
26 |
-
*
|
27 |
-
* @var string
|
28 |
-
*/
|
29 |
-
public $id = "wdan_settings";
|
30 |
-
|
31 |
-
/**
|
32 |
-
* {@inheritDoc}
|
33 |
-
*
|
34 |
-
* @var string
|
35 |
-
*/
|
36 |
-
public $page_menu_dashicon = 'dashicons-admin-generic';
|
37 |
-
|
38 |
-
/**
|
39 |
-
* {@inheritDoc}
|
40 |
-
*
|
41 |
-
* @var bool
|
42 |
-
*/
|
43 |
-
public $available_for_multisite = true;
|
44 |
-
|
45 |
-
/**
|
46 |
-
* {@inheritDoc}
|
47 |
-
*
|
48 |
-
* @since 1.1.0
|
49 |
-
* @var bool
|
50 |
-
*/
|
51 |
-
public $show_right_sidebar_in_options = true;
|
52 |
-
|
53 |
-
/**
|
54 |
-
* {@inheritDoc}
|
55 |
-
*
|
56 |
-
* @since 1.1.3 - Added
|
57 |
-
* @var bool - true show, false hide
|
58 |
-
*/
|
59 |
-
public $show_search_options_form = false;
|
60 |
-
|
61 |
-
/**
|
62 |
-
* {@inheritDoc}
|
63 |
-
* @var int
|
64 |
-
*/
|
65 |
-
public $page_menu_position = 100;
|
66 |
-
|
67 |
-
|
68 |
-
/**
|
69 |
-
* @param
|
70 |
-
*/
|
71 |
-
public function __construct(
|
72 |
-
$this->menu_title = __( 'Hide admin notices', 'disable-admin-notices' );
|
73 |
-
$this->page_menu_short_description = __( 'General settings', 'disable-admin-notices' );
|
74 |
-
|
75 |
-
$this->internal = false;
|
76 |
-
$this->menu_target = 'options-general.php';
|
77 |
-
$this->add_link_to_plugin_actions = true;
|
78 |
-
|
79 |
-
parent::__construct( $plugin );
|
80 |
-
|
81 |
-
$this->plugin = $plugin;
|
82 |
-
}
|
83 |
-
|
84 |
-
public function getPageTitle() {
|
85 |
-
return __( 'Settings', 'disable-admin-notices' );
|
86 |
-
}
|
87 |
-
|
88 |
-
/**
|
89 |
-
* Requests assets (js and css) for the page.
|
90 |
-
*
|
91 |
-
* @param
|
92 |
-
* @param
|
93 |
-
*
|
94 |
-
* @return void
|
95 |
-
* @see
|
96 |
-
*
|
97 |
-
*/
|
98 |
-
public function assets( $scripts, $styles ) {
|
99 |
-
parent::assets( $scripts, $styles );
|
100 |
-
|
101 |
-
$this->styles->add( WDN_PLUGIN_URL . '/admin/assets/css/settings.css' );
|
102 |
-
$this->scripts->add( WDN_PLUGIN_URL . '/admin/assets/js/settings.js' );
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* {@inheritDoc}
|
107 |
-
*
|
108 |
-
* @return array
|
109 |
-
*/
|
110 |
-
public function actionsNotice( $notices ) {
|
111 |
-
$notices[] = [
|
112 |
-
'conditions' => [
|
113 |
-
'wbcr_dan_reseted_notices' => 1
|
114 |
-
],
|
115 |
-
'type' => 'success',
|
116 |
-
'message' => __( 'Hidden notices are successfully reset, now you can see them again!', 'disable-admin-notices' )
|
117 |
-
];
|
118 |
-
|
119 |
-
/*$notices[] = array(
|
120 |
-
'conditions' => array(
|
121 |
-
'wbcr_dan_clear_comments_error' => 1,
|
122 |
-
'wbcr_dan_code' => 'interal_error'
|
123 |
-
),
|
124 |
-
'type' => 'danger',
|
125 |
-
'message' => __('An error occurred while trying to delete comments. Internal error occured. Please try again later.', '
|
126 |
-
);*/
|
127 |
-
|
128 |
-
return $notices;
|
129 |
-
}
|
130 |
-
|
131 |
-
/**
|
132 |
-
* {@inheritDoc}
|
133 |
-
*
|
134 |
-
* @return array
|
135 |
-
*/
|
136 |
-
public function getPageOptions() {
|
137 |
-
$options = wbcr_dan_get_plugin_options();
|
138 |
-
|
139 |
-
$formOptions = [];
|
140 |
-
|
141 |
-
$formOptions[] = [
|
142 |
-
'type' => 'form-group',
|
143 |
-
'items' => $options,
|
144 |
-
//'cssClass' => 'postbox'
|
145 |
-
];
|
146 |
-
|
147 |
-
return apply_filters( 'wbcr_dan_notices_form_options', $formOptions, $this );
|
148 |
-
}
|
149 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Страница общих настроек для этого плагина.
|
4 |
+
*
|
5 |
+
* Может быть использована только, если этот плагин используется как отдельный плагин, а не как аддон
|
6 |
+
* дя плагина Clearfy. Если плагин загружен, как аддон для Clearfy, эта страница не будет подключена.
|
7 |
+
*
|
8 |
+
* Поддерживает режим работы с мультисаймами. Вы можете увидеть эту страницу в панели настройки сети.
|
9 |
+
*
|
10 |
+
* Github: https://github.com/alexkovalevv
|
11 |
+
*
|
12 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
13 |
+
* @copyright (c) 2018 Webraftic Ltd
|
14 |
+
* @version 1.0
|
15 |
+
*/
|
16 |
+
|
17 |
+
// Exit if accessed directly
|
18 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
+
exit;
|
20 |
+
}
|
21 |
+
|
22 |
+
class WDN_Settings_Page extends WDN_Page {
|
23 |
+
|
24 |
+
/**
|
25 |
+
* {@inheritDoc}
|
26 |
+
*
|
27 |
+
* @var string
|
28 |
+
*/
|
29 |
+
public $id = "wdan_settings";
|
30 |
+
|
31 |
+
/**
|
32 |
+
* {@inheritDoc}
|
33 |
+
*
|
34 |
+
* @var string
|
35 |
+
*/
|
36 |
+
public $page_menu_dashicon = 'dashicons-admin-generic';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* {@inheritDoc}
|
40 |
+
*
|
41 |
+
* @var bool
|
42 |
+
*/
|
43 |
+
public $available_for_multisite = true;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* {@inheritDoc}
|
47 |
+
*
|
48 |
+
* @since 1.1.0
|
49 |
+
* @var bool
|
50 |
+
*/
|
51 |
+
public $show_right_sidebar_in_options = true;
|
52 |
+
|
53 |
+
/**
|
54 |
+
* {@inheritDoc}
|
55 |
+
*
|
56 |
+
* @since 1.1.3 - Added
|
57 |
+
* @var bool - true show, false hide
|
58 |
+
*/
|
59 |
+
public $show_search_options_form = false;
|
60 |
+
|
61 |
+
/**
|
62 |
+
* {@inheritDoc}
|
63 |
+
* @var int
|
64 |
+
*/
|
65 |
+
public $page_menu_position = 100;
|
66 |
+
|
67 |
+
|
68 |
+
/**
|
69 |
+
* @param Wbcr_Factory460_Plugin $plugin
|
70 |
+
*/
|
71 |
+
public function __construct( Wbcr_Factory460_Plugin $plugin ) {
|
72 |
+
$this->menu_title = __( 'Hide admin notices', 'disable-admin-notices' );
|
73 |
+
$this->page_menu_short_description = __( 'General settings', 'disable-admin-notices' );
|
74 |
+
|
75 |
+
$this->internal = false;
|
76 |
+
$this->menu_target = 'options-general.php';
|
77 |
+
$this->add_link_to_plugin_actions = true;
|
78 |
+
|
79 |
+
parent::__construct( $plugin );
|
80 |
+
|
81 |
+
$this->plugin = $plugin;
|
82 |
+
}
|
83 |
+
|
84 |
+
public function getPageTitle() {
|
85 |
+
return __( 'Settings', 'disable-admin-notices' );
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Requests assets (js and css) for the page.
|
90 |
+
*
|
91 |
+
* @param Wbcr_Factory460_ScriptList $scripts
|
92 |
+
* @param Wbcr_Factory460_StyleList $styles
|
93 |
+
*
|
94 |
+
* @return void
|
95 |
+
* @see Wbcr_FactoryPages460_AdminPage
|
96 |
+
*
|
97 |
+
*/
|
98 |
+
public function assets( $scripts, $styles ) {
|
99 |
+
parent::assets( $scripts, $styles );
|
100 |
+
|
101 |
+
$this->styles->add( WDN_PLUGIN_URL . '/admin/assets/css/settings.css' );
|
102 |
+
$this->scripts->add( WDN_PLUGIN_URL . '/admin/assets/js/settings.js' );
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* {@inheritDoc}
|
107 |
+
*
|
108 |
+
* @return array
|
109 |
+
*/
|
110 |
+
public function actionsNotice( $notices ) {
|
111 |
+
$notices[] = [
|
112 |
+
'conditions' => [
|
113 |
+
'wbcr_dan_reseted_notices' => 1
|
114 |
+
],
|
115 |
+
'type' => 'success',
|
116 |
+
'message' => __( 'Hidden notices are successfully reset, now you can see them again!', 'disable-admin-notices' )
|
117 |
+
];
|
118 |
+
|
119 |
+
/*$notices[] = array(
|
120 |
+
'conditions' => array(
|
121 |
+
'wbcr_dan_clear_comments_error' => 1,
|
122 |
+
'wbcr_dan_code' => 'interal_error'
|
123 |
+
),
|
124 |
+
'type' => 'danger',
|
125 |
+
'message' => __('An error occurred while trying to delete comments. Internal error occured. Please try again later.', 'factory_pages_460')
|
126 |
+
);*/
|
127 |
+
|
128 |
+
return $notices;
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* {@inheritDoc}
|
133 |
+
*
|
134 |
+
* @return array
|
135 |
+
*/
|
136 |
+
public function getPageOptions() {
|
137 |
+
$options = wbcr_dan_get_plugin_options();
|
138 |
+
|
139 |
+
$formOptions = [];
|
140 |
+
|
141 |
+
$formOptions[] = [
|
142 |
+
'type' => 'form-group',
|
143 |
+
'items' => $options,
|
144 |
+
//'cssClass' => 'postbox'
|
145 |
+
];
|
146 |
+
|
147 |
+
return apply_filters( 'wbcr_dan_notices_form_options', $formOptions, $this );
|
148 |
+
}
|
149 |
}
|
admin/pages/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
// Silence is golden.
|
1 |
+
<?php
|
2 |
// Silence is golden.
|
clearfy.php
CHANGED
@@ -1,56 +1,56 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Этот файл инициализирует этот плагин, как аддон для плагина Clearfy.
|
4 |
-
*
|
5 |
-
* Файл будет подключен только в плагине Clearfy, используя особый вариант загрузки. Это более простое решение
|
6 |
-
* пришло на смену встроенной системы подключения аддонов в фреймворке.
|
7 |
-
*
|
8 |
-
* Github: https://github.com/alexkovalevv
|
9 |
-
*
|
10 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
11 |
-
* @copyright (c) 2018 Webraftic Ltd
|
12 |
-
* @version 1.0
|
13 |
-
*/
|
14 |
-
|
15 |
-
// Exit if accessed directly
|
16 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
17 |
-
exit;
|
18 |
-
}
|
19 |
-
|
20 |
-
if ( ! defined( 'WDN_PLUGIN_ACTIVE' ) ) {
|
21 |
-
define( 'WDN_PLUGIN_VERSION', '1.
|
22 |
-
define( 'WDN_TEXT_DOMAIN', 'disable-admin-notices' );
|
23 |
-
define( 'WDN_PLUGIN_ACTIVE', true );
|
24 |
-
|
25 |
-
// Этот плагин загружен, как аддон для плагина Clearfy
|
26 |
-
define( 'LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON', true );
|
27 |
-
|
28 |
-
if ( ! defined( 'WDN_PLUGIN_DIR' ) ) {
|
29 |
-
define( 'WDN_PLUGIN_DIR', dirname( __FILE__ ) );
|
30 |
-
}
|
31 |
-
|
32 |
-
if ( ! defined( 'WDN_PLUGIN_BASE' ) ) {
|
33 |
-
define( 'WDN_PLUGIN_BASE', plugin_basename( __FILE__ ) );
|
34 |
-
}
|
35 |
-
|
36 |
-
if ( ! defined( 'WDN_PLUGIN_URL' ) ) {
|
37 |
-
define( 'WDN_PLUGIN_URL', plugins_url( null, __FILE__ ) );
|
38 |
-
}
|
39 |
-
|
40 |
-
try {
|
41 |
-
// Global scripts
|
42 |
-
require_once( WDN_PLUGIN_DIR . '/includes/functions.php' );
|
43 |
-
require_once( WDN_PLUGIN_DIR . '/includes/3rd-party/class-clearfy-plugin.php' );
|
44 |
-
new WDN_Plugin();
|
45 |
-
} catch( Exception $e ) {
|
46 |
-
$wdan_plugin_error_func = function () use ( $e ) {
|
47 |
-
$error = sprintf( "The %s plugin has stopped. <b>Error:</b> %s Code: %s", 'Webcraftic Disable Admin Notices', $e->getMessage(), $e->getCode() );
|
48 |
-
echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
|
49 |
-
};
|
50 |
-
|
51 |
-
add_action( 'admin_notices', $wdan_plugin_error_func );
|
52 |
-
add_action( 'network_admin_notices', $wdan_plugin_error_func );
|
53 |
-
}
|
54 |
-
}
|
55 |
-
|
56 |
-
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Этот файл инициализирует этот плагин, как аддон для плагина Clearfy.
|
4 |
+
*
|
5 |
+
* Файл будет подключен только в плагине Clearfy, используя особый вариант загрузки. Это более простое решение
|
6 |
+
* пришло на смену встроенной системы подключения аддонов в фреймворке.
|
7 |
+
*
|
8 |
+
* Github: https://github.com/alexkovalevv
|
9 |
+
*
|
10 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
11 |
+
* @copyright (c) 2018 Webraftic Ltd
|
12 |
+
* @version 1.0
|
13 |
+
*/
|
14 |
+
|
15 |
+
// Exit if accessed directly
|
16 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
17 |
+
exit;
|
18 |
+
}
|
19 |
+
|
20 |
+
if ( ! defined( 'WDN_PLUGIN_ACTIVE' ) ) {
|
21 |
+
define( 'WDN_PLUGIN_VERSION', '1.3.0' );
|
22 |
+
define( 'WDN_TEXT_DOMAIN', 'disable-admin-notices' );
|
23 |
+
define( 'WDN_PLUGIN_ACTIVE', true );
|
24 |
+
|
25 |
+
// Этот плагин загружен, как аддон для плагина Clearfy
|
26 |
+
define( 'LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON', true );
|
27 |
+
|
28 |
+
if ( ! defined( 'WDN_PLUGIN_DIR' ) ) {
|
29 |
+
define( 'WDN_PLUGIN_DIR', dirname( __FILE__ ) );
|
30 |
+
}
|
31 |
+
|
32 |
+
if ( ! defined( 'WDN_PLUGIN_BASE' ) ) {
|
33 |
+
define( 'WDN_PLUGIN_BASE', plugin_basename( __FILE__ ) );
|
34 |
+
}
|
35 |
+
|
36 |
+
if ( ! defined( 'WDN_PLUGIN_URL' ) ) {
|
37 |
+
define( 'WDN_PLUGIN_URL', plugins_url( null, __FILE__ ) );
|
38 |
+
}
|
39 |
+
|
40 |
+
try {
|
41 |
+
// Global scripts
|
42 |
+
require_once( WDN_PLUGIN_DIR . '/includes/functions.php' );
|
43 |
+
require_once( WDN_PLUGIN_DIR . '/includes/3rd-party/class-clearfy-plugin.php' );
|
44 |
+
new WDN_Plugin();
|
45 |
+
} catch( Exception $e ) {
|
46 |
+
$wdan_plugin_error_func = function () use ( $e ) {
|
47 |
+
$error = sprintf( "The %s plugin has stopped. <b>Error:</b> %s Code: %s", 'Webcraftic Disable Admin Notices', $e->getMessage(), $e->getCode() );
|
48 |
+
echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
|
49 |
+
};
|
50 |
+
|
51 |
+
add_action( 'admin_notices', $wdan_plugin_error_func );
|
52 |
+
add_action( 'network_admin_notices', $wdan_plugin_error_func );
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
|
disable-admin-notices.php
CHANGED
@@ -4,11 +4,11 @@
|
|
4 |
* Plugin URI: https://clearfy.pro/disable-admin-notices
|
5 |
* Description: Disable admin notices plugin gives you the option to hide updates warnings and inline notices in the admin panel.
|
6 |
* Author: Creative Motion <info@cm-wp.com>
|
7 |
-
* Version: 1.
|
8 |
* Text Domain: disable-admin-notices
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
-
* Framework Version:
|
12 |
*/
|
13 |
|
14 |
/**
|
@@ -45,39 +45,39 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
45 |
* -----------------------------------------------------------------------------
|
46 |
*/
|
47 |
|
48 |
-
require_once
|
49 |
|
50 |
// @formatter:off
|
51 |
-
$wdan_plugin_info =
|
52 |
'prefix' => 'wbcr_dan_',
|
53 |
'plugin_name' => 'wbcr_dan',
|
54 |
'plugin_title' => __( 'Webcraftic disable admin notices', 'disable-admin-notices' ),
|
55 |
|
56 |
// PLUGIN SUPPORT
|
57 |
-
'support_details' =>
|
58 |
'url' => 'https://clearfy.pro/',
|
59 |
-
'pages_map' =>
|
60 |
'support' => 'support', // {site}/support
|
61 |
'docs' => 'docs', // {site}/docs,
|
62 |
-
'pricing' => 'disable-admin-notices'
|
63 |
-
|
64 |
-
|
65 |
// PLUGIN PREMIUM SETTINGS
|
66 |
'has_premium' => true,
|
67 |
-
'license_settings' =>
|
68 |
'provider' => 'freemius',
|
69 |
'slug' => 'disable-admin-notices-premium',
|
70 |
'plugin_id' => '6456',
|
71 |
'public_key' => 'pk_0570ec3c1b4100b9c9a0cbfe80f9f',
|
72 |
'price' => 29,
|
73 |
'has_updates' => true,
|
74 |
-
'updates_settings' =>
|
75 |
'maybe_rollback' => true,
|
76 |
-
'rollback_settings' =>
|
77 |
-
'prev_stable_version' => '0.0.0'
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
|
82 |
// PLUGIN SUBSCRIBE FORM
|
83 |
'subscribe_widget' => true,
|
@@ -85,30 +85,30 @@ $wdan_plugin_info = array(
|
|
85 |
|
86 |
// PLUGIN ADVERTS
|
87 |
'render_adverts' => true,
|
88 |
-
'adverts_settings' =>
|
89 |
'dashboard_widget' => false, // show dashboard widget (default: false)
|
90 |
'right_sidebar' => true, // show adverts sidebar (default: false)
|
91 |
'notice' => false, // show notice message (default: false)
|
92 |
-
|
93 |
|
94 |
// FRAMEWORK MODULES
|
95 |
-
'load_factory_modules' =>
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
//array('libs/factory/logger', '
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
$wdan_compatibility = new
|
107 |
'plugin_already_activate' => defined( 'WDN_PLUGIN_ACTIVE' ),
|
108 |
'required_php_version' => '7.0',
|
109 |
'required_wp_version' => '4.8.0',
|
110 |
-
'required_clearfy_check_component' => false
|
111 |
-
|
112 |
|
113 |
|
114 |
|
@@ -143,25 +143,25 @@ define( 'WDN_PLUGIN_URL', plugins_url( null, __FILE__ ) );
|
|
143 |
* -----------------------------------------------------------------------------
|
144 |
*/
|
145 |
|
146 |
-
require_once
|
147 |
-
require_once
|
148 |
-
require_once
|
149 |
|
150 |
try {
|
151 |
-
new WDN_Plugin( __FILE__, array_merge( $wdan_plugin_info,
|
152 |
'plugin_version' => WDN_PLUGIN_VERSION,
|
153 |
'plugin_text_domain' => $wdan_compatibility->get_text_domain(),
|
154 |
-
|
155 |
} catch ( Exception $e ) {
|
156 |
// Plugin wasn't initialized due to an error
|
157 |
define( 'WDN_PLUGIN_THROW_ERROR', true );
|
158 |
|
159 |
$wdan_plugin_error_func = function () use ( $e ) {
|
160 |
-
$error = sprintf(
|
161 |
echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
|
162 |
};
|
163 |
|
164 |
add_action( 'admin_notices', $wdan_plugin_error_func );
|
165 |
add_action( 'network_admin_notices', $wdan_plugin_error_func );
|
166 |
}
|
167 |
-
// @formatter:on
|
4 |
* Plugin URI: https://clearfy.pro/disable-admin-notices
|
5 |
* Description: Disable admin notices plugin gives you the option to hide updates warnings and inline notices in the admin panel.
|
6 |
* Author: Creative Motion <info@cm-wp.com>
|
7 |
+
* Version: 1.3.1
|
8 |
* Text Domain: disable-admin-notices
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
+
* Framework Version: FACTORY_460_VERSION
|
12 |
*/
|
13 |
|
14 |
/**
|
45 |
* -----------------------------------------------------------------------------
|
46 |
*/
|
47 |
|
48 |
+
require_once dirname( __FILE__ ) . '/libs/factory/core/includes/class-factory-requirements.php';
|
49 |
|
50 |
// @formatter:off
|
51 |
+
$wdan_plugin_info = [
|
52 |
'prefix' => 'wbcr_dan_',
|
53 |
'plugin_name' => 'wbcr_dan',
|
54 |
'plugin_title' => __( 'Webcraftic disable admin notices', 'disable-admin-notices' ),
|
55 |
|
56 |
// PLUGIN SUPPORT
|
57 |
+
'support_details' => [
|
58 |
'url' => 'https://clearfy.pro/',
|
59 |
+
'pages_map' => [
|
60 |
'support' => 'support', // {site}/support
|
61 |
'docs' => 'docs', // {site}/docs,
|
62 |
+
'pricing' => 'disable-admin-notices',
|
63 |
+
],
|
64 |
+
],
|
65 |
// PLUGIN PREMIUM SETTINGS
|
66 |
'has_premium' => true,
|
67 |
+
'license_settings' => [
|
68 |
'provider' => 'freemius',
|
69 |
'slug' => 'disable-admin-notices-premium',
|
70 |
'plugin_id' => '6456',
|
71 |
'public_key' => 'pk_0570ec3c1b4100b9c9a0cbfe80f9f',
|
72 |
'price' => 29,
|
73 |
'has_updates' => true,
|
74 |
+
'updates_settings' => [
|
75 |
'maybe_rollback' => true,
|
76 |
+
'rollback_settings' => [
|
77 |
+
'prev_stable_version' => '0.0.0',
|
78 |
+
],
|
79 |
+
],
|
80 |
+
],
|
81 |
|
82 |
// PLUGIN SUBSCRIBE FORM
|
83 |
'subscribe_widget' => true,
|
85 |
|
86 |
// PLUGIN ADVERTS
|
87 |
'render_adverts' => true,
|
88 |
+
'adverts_settings' => [
|
89 |
'dashboard_widget' => false, // show dashboard widget (default: false)
|
90 |
'right_sidebar' => true, // show adverts sidebar (default: false)
|
91 |
'notice' => false, // show notice message (default: false)
|
92 |
+
],
|
93 |
|
94 |
// FRAMEWORK MODULES
|
95 |
+
'load_factory_modules' => [
|
96 |
+
[ 'libs/factory/bootstrap', 'factory_bootstrap_461', 'admin' ],
|
97 |
+
[ 'libs/factory/forms', 'factory_forms_457', 'admin' ],
|
98 |
+
[ 'libs/factory/pages', 'factory_pages_460', 'admin' ],
|
99 |
+
[ 'libs/factory/templates', 'factory_templates_112', 'all' ],
|
100 |
+
[ 'libs/factory/freemius', 'factory_freemius_147', 'all' ],
|
101 |
+
[ 'libs/factory/adverts', 'factory_adverts_137', 'admin' ],
|
102 |
+
//array('libs/factory/logger', 'factory_logger_124', 'all')
|
103 |
+
],
|
104 |
+
];
|
105 |
+
|
106 |
+
$wdan_compatibility = new Wbcr_Factory460_Requirements( __FILE__, array_merge( $wdan_plugin_info, [
|
107 |
'plugin_already_activate' => defined( 'WDN_PLUGIN_ACTIVE' ),
|
108 |
'required_php_version' => '7.0',
|
109 |
'required_wp_version' => '4.8.0',
|
110 |
+
'required_clearfy_check_component' => false,
|
111 |
+
] ) );
|
112 |
|
113 |
|
114 |
|
143 |
* -----------------------------------------------------------------------------
|
144 |
*/
|
145 |
|
146 |
+
require_once WDN_PLUGIN_DIR . '/libs/factory/core/boot.php';
|
147 |
+
require_once WDN_PLUGIN_DIR . '/includes/functions.php';
|
148 |
+
require_once WDN_PLUGIN_DIR . '/includes/class-plugin.php';
|
149 |
|
150 |
try {
|
151 |
+
new WDN_Plugin( __FILE__, array_merge( $wdan_plugin_info, [
|
152 |
'plugin_version' => WDN_PLUGIN_VERSION,
|
153 |
'plugin_text_domain' => $wdan_compatibility->get_text_domain(),
|
154 |
+
] ) );
|
155 |
} catch ( Exception $e ) {
|
156 |
// Plugin wasn't initialized due to an error
|
157 |
define( 'WDN_PLUGIN_THROW_ERROR', true );
|
158 |
|
159 |
$wdan_plugin_error_func = function () use ( $e ) {
|
160 |
+
$error = sprintf( 'The %s plugin has stopped. <b>Error:</b> %s Code: %s', 'Disable Admin Notices', $e->getMessage(), $e->getCode() );
|
161 |
echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
|
162 |
};
|
163 |
|
164 |
add_action( 'admin_notices', $wdan_plugin_error_func );
|
165 |
add_action( 'network_admin_notices', $wdan_plugin_error_func );
|
166 |
}
|
167 |
+
// @formatter:on
|
includes/3rd-party/class-clearfy-plugin.php
CHANGED
@@ -1,79 +1,79 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Disable admin notices core class
|
4 |
-
*
|
5 |
-
* Github: https://github.com/alexkovalevv
|
6 |
-
*
|
7 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
8 |
-
* @copyright (c) 2018 Webraftic Ltd
|
9 |
-
* @version 1.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
// Exit if accessed directly
|
13 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
-
exit;
|
15 |
-
}
|
16 |
-
|
17 |
-
class WDN_Plugin {
|
18 |
-
|
19 |
-
/**
|
20 |
-
* @var WCL_Plugin
|
21 |
-
*/
|
22 |
-
private static $app;
|
23 |
-
|
24 |
-
/**
|
25 |
-
* Конструктор
|
26 |
-
* Вы
|
27 |
-
*
|
28 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
29 |
-
* @throws \Exception
|
30 |
-
*/
|
31 |
-
public function __construct() {
|
32 |
-
if ( ! class_exists( 'WCL_Plugin' ) ) {
|
33 |
-
throw new Exception( 'Plugin Clearfy is not installed!' );
|
34 |
-
}
|
35 |
-
|
36 |
-
self::$app = WCL_Plugin::app();
|
37 |
-
|
38 |
-
$this->globalScripts();
|
39 |
-
|
40 |
-
if ( is_admin() ) {
|
41 |
-
$this->adminScripts();
|
42 |
-
}
|
43 |
-
}
|
44 |
-
|
45 |
-
/**
|
46 |
-
* @return WCL_Plugin
|
47 |
-
*/
|
48 |
-
public static function app() {
|
49 |
-
return self::$app;
|
50 |
-
}
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Выполняет сценарии, которые должны быть запущены только в бекенде
|
54 |
-
*
|
55 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
56 |
-
* @since 1.1.0
|
57 |
-
*/
|
58 |
-
private function adminScripts() {
|
59 |
-
require( WDN_PLUGIN_DIR . '/admin/options.php' );
|
60 |
-
|
61 |
-
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
62 |
-
require( WDN_PLUGIN_DIR . '/admin/ajax/hide-notice.php' );
|
63 |
-
require( WDN_PLUGIN_DIR . '/admin/ajax/restore-notice.php' );
|
64 |
-
}
|
65 |
-
|
66 |
-
require( WDN_PLUGIN_DIR . '/admin/boot.php' );
|
67 |
-
}
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Выполняет сценрии, которые должны быть запущены глобально
|
71 |
-
*
|
72 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
73 |
-
* @since 1.1.0
|
74 |
-
*/
|
75 |
-
private function globalScripts() {
|
76 |
-
require( WDN_PLUGIN_DIR . '/includes/classes/class-configurate-notices.php' );
|
77 |
-
new WDN_ConfigHideNotices( self::$app );
|
78 |
-
}
|
79 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Disable admin notices core class
|
4 |
+
*
|
5 |
+
* Github: https://github.com/alexkovalevv
|
6 |
+
*
|
7 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
8 |
+
* @copyright (c) 2018 Webraftic Ltd
|
9 |
+
* @version 1.0
|
10 |
+
*/
|
11 |
+
|
12 |
+
// Exit if accessed directly
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
+
exit;
|
15 |
+
}
|
16 |
+
|
17 |
+
class WDN_Plugin {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @var WCL_Plugin
|
21 |
+
*/
|
22 |
+
private static $app;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Конструктор
|
26 |
+
* Вы
|
27 |
+
*
|
28 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
29 |
+
* @throws \Exception
|
30 |
+
*/
|
31 |
+
public function __construct() {
|
32 |
+
if ( ! class_exists( 'WCL_Plugin' ) ) {
|
33 |
+
throw new Exception( 'Plugin Clearfy is not installed!' );
|
34 |
+
}
|
35 |
+
|
36 |
+
self::$app = WCL_Plugin::app();
|
37 |
+
|
38 |
+
$this->globalScripts();
|
39 |
+
|
40 |
+
if ( is_admin() ) {
|
41 |
+
$this->adminScripts();
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* @return WCL_Plugin
|
47 |
+
*/
|
48 |
+
public static function app() {
|
49 |
+
return self::$app;
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Выполняет сценарии, которые должны быть запущены только в бекенде
|
54 |
+
*
|
55 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
56 |
+
* @since 1.1.0
|
57 |
+
*/
|
58 |
+
private function adminScripts() {
|
59 |
+
require( WDN_PLUGIN_DIR . '/admin/options.php' );
|
60 |
+
|
61 |
+
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
62 |
+
require( WDN_PLUGIN_DIR . '/admin/ajax/hide-notice.php' );
|
63 |
+
require( WDN_PLUGIN_DIR . '/admin/ajax/restore-notice.php' );
|
64 |
+
}
|
65 |
+
|
66 |
+
require( WDN_PLUGIN_DIR . '/admin/boot.php' );
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Выполняет сценрии, которые должны быть запущены глобально
|
71 |
+
*
|
72 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
73 |
+
* @since 1.1.0
|
74 |
+
*/
|
75 |
+
private function globalScripts() {
|
76 |
+
require( WDN_PLUGIN_DIR . '/includes/classes/class-configurate-notices.php' );
|
77 |
+
new WDN_ConfigHideNotices( self::$app );
|
78 |
+
}
|
79 |
}
|
includes/class-plugin.php
CHANGED
@@ -9,19 +9,19 @@
|
|
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
|
25 |
|
26 |
|
27 |
/**
|
@@ -44,7 +44,7 @@ class WDN_Plugin extends Wbcr_Factory454_Plugin {
|
|
44 |
}
|
45 |
|
46 |
/**
|
47 |
-
* @return
|
48 |
*/
|
49 |
public static function app() {
|
50 |
return self::$app;
|
@@ -64,18 +64,18 @@ class WDN_Plugin extends Wbcr_Factory454_Plugin {
|
|
64 |
}
|
65 |
|
66 |
private function admin_scripts() {
|
67 |
-
require
|
68 |
-
require
|
69 |
|
70 |
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
71 |
-
require_once
|
72 |
-
require_once
|
73 |
}
|
74 |
|
75 |
-
require_once
|
76 |
-
require_once
|
77 |
-
require_once
|
78 |
-
require_once
|
79 |
|
80 |
add_action( 'plugins_loaded', function () {
|
81 |
$this->registerPages();
|
@@ -83,7 +83,7 @@ class WDN_Plugin extends Wbcr_Factory454_Plugin {
|
|
83 |
}
|
84 |
|
85 |
private function global_scripts() {
|
86 |
-
require_once
|
87 |
new WDN_ConfigHideNotices( self::$app );
|
88 |
}
|
89 |
|
@@ -93,11 +93,7 @@ class WDN_Plugin extends Wbcr_Factory454_Plugin {
|
|
93 |
* @return bool
|
94 |
*/
|
95 |
public function is_premium() {
|
96 |
-
if (
|
97 |
-
$this->premium->is_active() &&
|
98 |
-
$this->premium->is_activate()
|
99 |
-
&& $this->premium->is_install_package()
|
100 |
-
) {
|
101 |
return true;
|
102 |
} else {
|
103 |
return false;
|
9 |
*/
|
10 |
|
11 |
// Exit if accessed directly
|
12 |
+
//use WBCR\Factory_Adverts_137\Base;
|
13 |
|
14 |
if ( ! defined( 'ABSPATH' ) ) {
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
+
class WDN_Plugin extends Wbcr_Factory460_Plugin {
|
19 |
|
20 |
/**
|
21 |
+
* @var Wbcr_Factory460_Plugin
|
22 |
*/
|
23 |
private static $app;
|
24 |
+
private $plugin_data;
|
25 |
|
26 |
|
27 |
/**
|
44 |
}
|
45 |
|
46 |
/**
|
47 |
+
* @return Wbcr_Factory460_Plugin
|
48 |
*/
|
49 |
public static function app() {
|
50 |
return self::$app;
|
64 |
}
|
65 |
|
66 |
private function admin_scripts() {
|
67 |
+
require WDN_PLUGIN_DIR . '/admin/options.php';
|
68 |
+
require WDN_PLUGIN_DIR . '/admin/class-page-basic.php';
|
69 |
|
70 |
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
71 |
+
require_once WDN_PLUGIN_DIR . '/admin/ajax/hide-notice.php';
|
72 |
+
require_once WDN_PLUGIN_DIR . '/admin/ajax/restore-notice.php';
|
73 |
}
|
74 |
|
75 |
+
require_once WDN_PLUGIN_DIR . '/admin/boot.php';
|
76 |
+
require_once WDN_PLUGIN_DIR . '/admin/pages/class-pages-edit-admin-bar.php';
|
77 |
+
require_once WDN_PLUGIN_DIR . '/admin/pages/class-pages-edit-redirects.php';
|
78 |
+
require_once WDN_PLUGIN_DIR . '/admin/pages/class-pages-notices.php';
|
79 |
|
80 |
add_action( 'plugins_loaded', function () {
|
81 |
$this->registerPages();
|
83 |
}
|
84 |
|
85 |
private function global_scripts() {
|
86 |
+
require_once WDN_PLUGIN_DIR . '/includes/classes/class-configurate-notices.php';
|
87 |
new WDN_ConfigHideNotices( self::$app );
|
88 |
}
|
89 |
|
93 |
* @return bool
|
94 |
*/
|
95 |
public function is_premium() {
|
96 |
+
if ( $this->premium->is_active() && $this->premium->is_activate() && $this->premium->is_install_package() ) {
|
|
|
|
|
|
|
|
|
97 |
return true;
|
98 |
} else {
|
99 |
return false;
|
includes/classes/class-configurate-notices.php
CHANGED
@@ -1,381 +1,381 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* This class configures hide admin notices
|
5 |
-
*
|
6 |
-
* Github: https://github.com/alexkovalevv
|
7 |
-
*
|
8 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
9 |
-
* @copyright (c) 2018 Webraftic Ltd
|
10 |
-
* @version 1.0
|
11 |
-
*/
|
12 |
-
|
13 |
-
// Exit if accessed directly
|
14 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
15 |
-
exit;
|
16 |
-
}
|
17 |
-
|
18 |
-
class WDN_ConfigHideNotices extends WBCR\
|
19 |
-
|
20 |
-
public function registerActionsAndFilters() {
|
21 |
-
if ( is_admin() ) {
|
22 |
-
$hide_notices_type = $this->getPopulateOption( 'hide_admin_notices', 'only_selected' );
|
23 |
-
|
24 |
-
if ( 'not_hide' !== $hide_notices_type && 'compact_panel' !== $hide_notices_type ) {
|
25 |
-
add_action( 'admin_print_scripts', [ $this, 'catchNotices' ], 999 );
|
26 |
-
|
27 |
-
if ( empty( $hide_notices_type ) || $hide_notices_type == 'only_selected' ) {
|
28 |
-
add_action( 'admin_head', [ $this, 'printNotices' ], 999 );
|
29 |
-
}
|
30 |
-
|
31 |
-
if ( ! empty( $hide_notices_type ) ) {
|
32 |
-
add_action( 'admin_bar_menu', [ $this, 'notificationsPanel' ], 999 );
|
33 |
-
add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_styles' ] );
|
34 |
-
}
|
35 |
-
}
|
36 |
-
}
|
37 |
-
}
|
38 |
-
|
39 |
-
public function printNotices() {
|
40 |
-
if ( is_multisite() && is_network_admin() ) {
|
41 |
-
add_action( 'network_admin_notices', [ $this, 'noticesCollection' ] );
|
42 |
-
} else {
|
43 |
-
add_action( 'admin_notices', [ $this, 'noticesCollection' ] );
|
44 |
-
}
|
45 |
-
}
|
46 |
-
|
47 |
-
|
48 |
-
public function enqueue_styles() {
|
49 |
-
wp_enqueue_style( 'wbcr-notification-hide-style', WDN_PLUGIN_URL . '/admin/assets/css/general.css', [], $this->plugin->getPluginVersion() );
|
50 |
-
|
51 |
-
if ( ! $this->getPopulateOption( 'show_notices_in_adminbar', false ) && current_user_can( 'manage_network' ) ) {
|
52 |
-
return;
|
53 |
-
}
|
54 |
-
wp_enqueue_style( 'wbcr-notification-panel-styles', WDN_PLUGIN_URL . '/admin/assets/css/notifications-panel.css', [], $this->plugin->getPluginVersion() );
|
55 |
-
wp_enqueue_script( 'wbcr-notification-panel-scripts', WDN_PLUGIN_URL . '/admin/assets/js/notifications-panel.js', [], $this->plugin->getPluginVersion() );
|
56 |
-
}
|
57 |
-
|
58 |
-
public function notificationsPanel( &$wp_admin_bar ) {
|
59 |
-
if ( ! $this->getPopulateOption( 'show_notices_in_adminbar', false ) ) {
|
60 |
-
return;
|
61 |
-
}
|
62 |
-
|
63 |
-
if ( current_user_can( 'manage_options' ) ) {
|
64 |
-
$notifications_user = get_user_meta( get_current_user_id(), $this->plugin->getOptionName( 'hidden_notices' ), true );
|
65 |
-
$notifications_all = apply_filters( 'wdan/notifications/all', [] );
|
66 |
-
|
67 |
-
if ( ! is_array( $notifications_user ) ) {
|
68 |
-
$notifications_user = [];
|
69 |
-
}
|
70 |
-
|
71 |
-
if ( empty( $notifications_user ) && empty( $notifications_all ) ) {
|
72 |
-
return;
|
73 |
-
}
|
74 |
-
|
75 |
-
$cont_notifications = sizeof( $notifications_user ) + sizeof( $notifications_all );
|
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' => $this->plugin->getPluginPageUrl( 'wdan-notices' )
|
83 |
-
] );
|
84 |
-
|
85 |
-
$i = 0;
|
86 |
-
|
87 |
-
// User
|
88 |
-
if ( ! empty( $notifications_user ) ) {
|
89 |
-
$wp_admin_bar->add_menu( [
|
90 |
-
'id' => 'wbcr-han-notify-panel-group-user',
|
91 |
-
'parent' => 'wbcr-han-notify-panel',
|
92 |
-
'title' => __( 'Hidden for you', 'disable-admin-notices' ),
|
93 |
-
'href' => false,
|
94 |
-
'meta' => [
|
95 |
-
'class' => ''
|
96 |
-
]
|
97 |
-
] );
|
98 |
-
|
99 |
-
foreach ( $notifications_user as $notice_id => $message ) {
|
100 |
-
$message = wp_kses( $message, [] );
|
101 |
-
$message = $this->getExcerpt( stripslashes( $message ), 0, 350 );
|
102 |
-
$message .= '<div class="wbcr-han-panel-restore-notify-line">';
|
103 |
-
$message .= '<a href="#" data-nonce="' . wp_create_nonce( $this->plugin->getPluginName() . '_ajax_restore_notice_nonce' );
|
104 |
-
$message .= '" data-notice-id="' . esc_attr( $notice_id ) . '" class="wbcr-han-panel-restore-notify-link">';
|
105 |
-
$message .= __( 'Restore notice', 'clearfy' );
|
106 |
-
$message .= '</a></div>';
|
107 |
-
|
108 |
-
$wp_admin_bar->add_menu( [
|
109 |
-
'id' => 'wbcr-han-notify-panel-item-' . $i,
|
110 |
-
'parent' => 'wbcr-han-notify-panel',
|
111 |
-
'title' => $message,
|
112 |
-
'href' => false,
|
113 |
-
'meta' => [
|
114 |
-
'class' => ''
|
115 |
-
]
|
116 |
-
] );
|
117 |
-
|
118 |
-
$i ++;
|
119 |
-
}
|
120 |
-
}
|
121 |
-
|
122 |
-
if ( $this->plugin->is_premium() && ( current_user_can( 'manage_options' ) || ( is_multisite() && current_user_can( 'manage_network' ) ) ) ) {
|
123 |
-
// All
|
124 |
-
do_action( 'wdn/notifications/panel/all', $wp_admin_bar, $notifications_all, $i );
|
125 |
-
}
|
126 |
-
}
|
127 |
-
}
|
128 |
-
|
129 |
-
public function noticesCollection() {
|
130 |
-
global $wbcr_dan_plugin_all_notices;
|
131 |
-
|
132 |
-
if ( empty( $wbcr_dan_plugin_all_notices ) ) {
|
133 |
-
return;
|
134 |
-
}
|
135 |
-
?>
|
136 |
-
<!-- Disable admin notices plugin (Clearfy tools) -->
|
137 |
-
<script>
|
138 |
-
jQuery(document).ready(function ($) {
|
139 |
-
$(document).on('click', '.wbcr-dan-hide-notice-link', function () {
|
140 |
-
var self = $(this),
|
141 |
-
target = self.data('target'),
|
142 |
-
noticeID = self.data('notice-id'),
|
143 |
-
nonce = self.data('nonce'),
|
144 |
-
noticeHtml = self.closest('.wbcr-dan-hide-links').prev('.wbcr-dan-hide-notices').clone(),
|
145 |
-
contanierEl = self.closest('.wbcr-dan-hide-links').prev('.wbcr-dan-hide-notices').parent();
|
146 |
-
|
147 |
-
contanierEl.find('.wbcr-dan-hide-links').remove();
|
148 |
-
contanierEl.slideUp();
|
149 |
-
|
150 |
-
if (!noticeID) {
|
151 |
-
alert('Undefinded error. Please report the bug to our support forum.');
|
152 |
-
}
|
153 |
-
|
154 |
-
$.ajax(ajaxurl, {
|
155 |
-
type: 'post',
|
156 |
-
dataType: 'json',
|
157 |
-
data: {
|
158 |
-
action: 'wbcr-dan-hide-notices',
|
159 |
-
target: target,
|
160 |
-
security: nonce,
|
161 |
-
notice_id: noticeID,
|
162 |
-
notice_html: noticeHtml.html()
|
163 |
-
},
|
164 |
-
success: function (response) {
|
165 |
-
if (!response || !response.success) {
|
166 |
-
|
167 |
-
if (response.data.error_message) {
|
168 |
-
console.log(response.data.error_message);
|
169 |
-
self.closest('li').show();
|
170 |
-
} else {
|
171 |
-
console.log(response);
|
172 |
-
}
|
173 |
-
|
174 |
-
contanierEl.show();
|
175 |
-
return;
|
176 |
-
}
|
177 |
-
|
178 |
-
contanierEl.remove();
|
179 |
-
},
|
180 |
-
error: function (xhr, ajaxOptions, thrownError) {
|
181 |
-
console.log(xhr.status);
|
182 |
-
console.log(xhr.responseText);
|
183 |
-
console.log(thrownError);
|
184 |
-
}
|
185 |
-
});
|
186 |
-
return false;
|
187 |
-
});
|
188 |
-
});
|
189 |
-
</script>
|
190 |
-
<?php
|
191 |
-
foreach ( $wbcr_dan_plugin_all_notices as $val ) {
|
192 |
-
echo $val;
|
193 |
-
}
|
194 |
-
}
|
195 |
-
|
196 |
-
public
|
197 |
-
function catchNotices() {
|
198 |
-
global $wbcr_dan_plugin_all_notices;
|
199 |
-
|
200 |
-
try {
|
201 |
-
$wp_filter_admin_notices = &wdan_get_wp_filter( 'admin_notices' );
|
202 |
-
$wp_filter_all_admin_notices = &wdan_get_wp_filter( 'all_admin_notices' );
|
203 |
-
|
204 |
-
$wp_filter_notices = $this->array_merge( $wp_filter_admin_notices, $wp_filter_all_admin_notices );
|
205 |
-
} catch ( Exception $e ) {
|
206 |
-
$wp_filter_notices = null;
|
207 |
-
}
|
208 |
-
|
209 |
-
$hide_notices_type = $this->getPopulateOption( 'hide_admin_notices' );
|
210 |
-
|
211 |
-
if ( empty( $hide_notices_type ) || $hide_notices_type == 'only_selected' ) {
|
212 |
-
$get_hidden_notices = get_user_meta( get_current_user_id(), $this->plugin->getOptionName( 'hidden_notices' ), true );
|
213 |
-
$get_hidden_notices_all = apply_filters( 'wdan/notifications/all', [] );
|
214 |
-
|
215 |
-
$content = [];
|
216 |
-
foreach ( (array) $wp_filter_notices as $filters ) {
|
217 |
-
foreach ( $filters as $callback_name => $callback ) {
|
218 |
-
|
219 |
-
if ( 'usof_hide_admin_notices_start' == $callback_name || 'usof_hide_admin_notices_end' == $callback_name ) {
|
220 |
-
continue;
|
221 |
-
}
|
222 |
-
|
223 |
-
ob_start();
|
224 |
-
|
225 |
-
// #CLRF-140 fix bug for php7
|
226 |
-
// when the developers forgot to delete the argument in the function of implementing the notification.
|
227 |
-
$args = [];
|
228 |
-
$accepted_args = isset( $callback['accepted_args'] ) && ! empty( $callback['accepted_args'] ) ? $callback['accepted_args'] : 0;
|
229 |
-
|
230 |
-
if ( $accepted_args > 0 ) {
|
231 |
-
for ( $i = 0; $i < (int) $accepted_args; $i ++ ) {
|
232 |
-
$args[] = null;
|
233 |
-
}
|
234 |
-
}
|
235 |
-
//===========
|
236 |
-
|
237 |
-
call_user_func_array( $callback['function'], $args );
|
238 |
-
$cont = ob_get_clean();
|
239 |
-
|
240 |
-
if ( empty( $cont ) ) {
|
241 |
-
continue;
|
242 |
-
}
|
243 |
-
|
244 |
-
$salt = is_multisite() ? get_current_blog_id() : '';
|
245 |
-
$txt = preg_replace( '/<(script|style)([^>]+)?>(.*?)<\/(script|style)>/is', '', $cont );
|
246 |
-
$uniq_id1 = md5( strip_tags( str_replace( [ "\t", "\r", "\n", " " ], "", $txt ) ) . $salt );
|
247 |
-
$uniq_id2 = md5( $callback_name . $salt );
|
248 |
-
|
249 |
-
if ( is_array( $callback['function'] ) && sizeof( $callback['function'] ) == 2 ) {
|
250 |
-
$class = $callback['function'][0];
|
251 |
-
if ( is_object( $class ) ) {
|
252 |
-
$class_name = get_class( $class );
|
253 |
-
$method_name = $callback['function'][1];
|
254 |
-
$uniq_id2 = md5( $class_name . ':' . $method_name );
|
255 |
-
}
|
256 |
-
}
|
257 |
-
//$txt = rtrim( trim( $txt ) );
|
258 |
-
//$txt = preg_replace( '/^(<div[^>]+>)(.*?)(<\/div>)$/is', '<p>$2</p>', $txt );
|
259 |
-
|
260 |
-
// All
|
261 |
-
$skip_notice = apply_filters( 'wdn/notifications/catch/all', true, $get_hidden_notices_all, $uniq_id1, $uniq_id2 );
|
262 |
-
if ( ! $skip_notice ) {
|
263 |
-
continue;
|
264 |
-
}
|
265 |
-
|
266 |
-
if ( ! empty( $get_hidden_notices ) ) {
|
267 |
-
$skip_notice = true;
|
268 |
-
foreach ( (array) $get_hidden_notices as $key => $notice ) {
|
269 |
-
$splited_notice_id = explode( '_', $key );
|
270 |
-
if ( empty( $splited_notice_id ) || sizeof( $splited_notice_id ) < 2 ) {
|
271 |
-
continue;
|
272 |
-
}
|
273 |
-
$compare_notice_id_1 = $splited_notice_id[0];
|
274 |
-
$compare_notice_id_2 = $splited_notice_id[1];
|
275 |
-
|
276 |
-
if ( $compare_notice_id_1 == $uniq_id1 || $compare_notice_id_2 == $uniq_id2 ) {
|
277 |
-
$skip_notice = false;
|
278 |
-
break;
|
279 |
-
}
|
280 |
-
}
|
281 |
-
|
282 |
-
if ( ! $skip_notice ) {
|
283 |
-
continue;
|
284 |
-
}
|
285 |
-
}
|
286 |
-
|
287 |
-
$nonce = wp_create_nonce( $this->plugin->getPluginName() . '_ajax_hide_notices_nonce' );
|
288 |
-
$hide_link_for_me = "<button data-target='user' data-nonce='{$nonce}' data-notice-id='{$uniq_id1}_{$uniq_id2}' class='wbcr-dan-hide-notice-link'>" . __( 'Hide <b>for me</b>', 'disable-admin-notices' ) . "</button>";
|
289 |
-
$hide_link_for_all = "";
|
290 |
-
|
291 |
-
if ( $this->plugin->is_premium() && ( current_user_can( 'manage_options' ) || ( is_multisite() && current_user_can( 'manage_network' ) ) ) ) {
|
292 |
-
$hide_link_for_all = "<button data-target='all' data-nonce='{$nonce}' data-notice-id='{$uniq_id1}_{$uniq_id2}' class='wbcr-dan-hide-notice-link'>" . __( 'Hide <b>for all</b>', 'disable-admin-notices' ) . "</button>";
|
293 |
-
}
|
294 |
-
|
295 |
-
if ( strpos( $cont, 'redux-connect-message' ) ) {
|
296 |
-
$a = 1;
|
297 |
-
}
|
298 |
-
|
299 |
-
// Fix for Woocommerce membership and Jetpack message
|
300 |
-
if ( $cont != '<div class="js-wc-memberships-admin-notice-placeholder"></div>' && false === strpos( $cont, 'jetpack-jitm-message' ) ) {
|
301 |
-
$cont = preg_replace( '/<(noscript|script|style)([^>]+)?>(.*?)<\/(noscript|script|style)>(<\/(noscript|script|style)>)*/is', '', $cont );
|
302 |
-
$cont = preg_replace( '/<!--(.*?)-->/is', '', $cont );
|
303 |
-
$cont = rtrim( trim( $cont ) );
|
304 |
-
$cont = preg_replace( '/^(<div[^>]+>)(.*?)(<\/div>)$/is',
|
305 |
-
"$1<div class='wbcr-dan-hide-notices'>$2</div><div class='wbcr-dan-hide-links'>{$hide_link_for_me} {$hide_link_for_all}</div>$3", $cont );
|
306 |
-
}
|
307 |
-
|
308 |
-
if ( empty( $cont ) ) {
|
309 |
-
continue;
|
310 |
-
}
|
311 |
-
$content[] = $cont;
|
312 |
-
}
|
313 |
-
}
|
314 |
-
|
315 |
-
$wbcr_dan_plugin_all_notices = $content;
|
316 |
-
}
|
317 |
-
|
318 |
-
wdan_clear_all_notices( 'user_admin_notices' );
|
319 |
-
wdan_clear_all_notices( 'network_admin_notices' );
|
320 |
-
wdan_clear_all_notices( 'admin_notices', [
|
321 |
-
'Learndash_Admin_Menus_Tabs',
|
322 |
-
'WC_Memberships_Admin',
|
323 |
-
'YIT_Plugin_Panel_WooCommerce'
|
324 |
-
], [ 'et_pb_export_layouts_interface' ] );
|
325 |
-
|
326 |
-
wdan_clear_all_notices( 'all_admin_notices', [
|
327 |
-
'Learndash_Admin_Menus_Tabs',
|
328 |
-
'WC_Memberships_Admin',
|
329 |
-
'YIT_Plugin_Panel_WooCommerce'
|
330 |
-
], [ 'et_pb_export_layouts_interface' ] );
|
331 |
-
}
|
332 |
-
|
333 |
-
|
334 |
-
/**
|
335 |
-
* Get excerpt from string
|
336 |
-
*
|
337 |
-
* @param String $str String to get an excerpt from
|
338 |
-
* @param Integer $startPos Position int string to start excerpt from
|
339 |
-
* @param Integer $maxLength Maximum length the excerpt may be
|
340 |
-
*
|
341 |
-
* @return String excerpt
|
342 |
-
*/
|
343 |
-
public
|
344 |
-
function getExcerpt(
|
345 |
-
$str, $startPos = 0, $maxLength = 100
|
346 |
-
) {
|
347 |
-
if ( strlen( $str ) > $maxLength ) {
|
348 |
-
$excerpt = substr( $str, $startPos, $maxLength - 3 );
|
349 |
-
$lastSpace = strrpos( $excerpt, ' ' );
|
350 |
-
$excerpt = substr( $excerpt, 0, $lastSpace );
|
351 |
-
$excerpt .= '...';
|
352 |
-
} else {
|
353 |
-
$excerpt = $str;
|
354 |
-
}
|
355 |
-
|
356 |
-
return $excerpt;
|
357 |
-
}
|
358 |
-
|
359 |
-
/**
|
360 |
-
* @param array $arr1
|
361 |
-
* @param array $arr2
|
362 |
-
*
|
363 |
-
* @return array
|
364 |
-
*/
|
365 |
-
protected
|
366 |
-
function array_merge(
|
367 |
-
array $arr1, array $arr2
|
368 |
-
) {
|
369 |
-
if ( ! empty( $arr2 ) ) {
|
370 |
-
foreach ( $arr2 as $key => $value ) {
|
371 |
-
if ( ! isset( $arr1[ $key ] ) ) {
|
372 |
-
$arr1[ $key ] = $value;
|
373 |
-
} else if ( is_array( $arr1[ $key ] ) ) {
|
374 |
-
$arr1[ $key ] = $arr1[ $key ] + $value;
|
375 |
-
}
|
376 |
-
}
|
377 |
-
}
|
378 |
-
|
379 |
-
return $arr1;
|
380 |
-
}
|
381 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* This class configures hide admin notices
|
5 |
+
*
|
6 |
+
* Github: https://github.com/alexkovalevv
|
7 |
+
*
|
8 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
9 |
+
* @copyright (c) 2018 Webraftic Ltd
|
10 |
+
* @version 1.0
|
11 |
+
*/
|
12 |
+
|
13 |
+
// Exit if accessed directly
|
14 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
15 |
+
exit;
|
16 |
+
}
|
17 |
+
|
18 |
+
class WDN_ConfigHideNotices extends WBCR\Factory_Templates_112\Configurate {
|
19 |
+
|
20 |
+
public function registerActionsAndFilters() {
|
21 |
+
if ( is_admin() ) {
|
22 |
+
$hide_notices_type = $this->getPopulateOption( 'hide_admin_notices', 'only_selected' );
|
23 |
+
|
24 |
+
if ( 'not_hide' !== $hide_notices_type && 'compact_panel' !== $hide_notices_type ) {
|
25 |
+
add_action( 'admin_print_scripts', [ $this, 'catchNotices' ], 999 );
|
26 |
+
|
27 |
+
if ( empty( $hide_notices_type ) || $hide_notices_type == 'only_selected' ) {
|
28 |
+
add_action( 'admin_head', [ $this, 'printNotices' ], 999 );
|
29 |
+
}
|
30 |
+
|
31 |
+
if ( ! empty( $hide_notices_type ) ) {
|
32 |
+
add_action( 'admin_bar_menu', [ $this, 'notificationsPanel' ], 999 );
|
33 |
+
add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_styles' ] );
|
34 |
+
}
|
35 |
+
}
|
36 |
+
}
|
37 |
+
}
|
38 |
+
|
39 |
+
public function printNotices() {
|
40 |
+
if ( is_multisite() && is_network_admin() ) {
|
41 |
+
add_action( 'network_admin_notices', [ $this, 'noticesCollection' ] );
|
42 |
+
} else {
|
43 |
+
add_action( 'admin_notices', [ $this, 'noticesCollection' ] );
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
|
48 |
+
public function enqueue_styles() {
|
49 |
+
wp_enqueue_style( 'wbcr-notification-hide-style', WDN_PLUGIN_URL . '/admin/assets/css/general.css', [], $this->plugin->getPluginVersion() );
|
50 |
+
|
51 |
+
if ( ! $this->getPopulateOption( 'show_notices_in_adminbar', false ) && current_user_can( 'manage_network' ) ) {
|
52 |
+
return;
|
53 |
+
}
|
54 |
+
wp_enqueue_style( 'wbcr-notification-panel-styles', WDN_PLUGIN_URL . '/admin/assets/css/notifications-panel.css', [], $this->plugin->getPluginVersion() );
|
55 |
+
wp_enqueue_script( 'wbcr-notification-panel-scripts', WDN_PLUGIN_URL . '/admin/assets/js/notifications-panel.js', [], $this->plugin->getPluginVersion() );
|
56 |
+
}
|
57 |
+
|
58 |
+
public function notificationsPanel( &$wp_admin_bar ) {
|
59 |
+
if ( ! $this->getPopulateOption( 'show_notices_in_adminbar', false ) ) {
|
60 |
+
return;
|
61 |
+
}
|
62 |
+
|
63 |
+
if ( current_user_can( 'manage_options' ) ) {
|
64 |
+
$notifications_user = get_user_meta( get_current_user_id(), $this->plugin->getOptionName( 'hidden_notices' ), true );
|
65 |
+
$notifications_all = apply_filters( 'wdan/notifications/all', [] );
|
66 |
+
|
67 |
+
if ( ! is_array( $notifications_user ) ) {
|
68 |
+
$notifications_user = [];
|
69 |
+
}
|
70 |
+
|
71 |
+
if ( empty( $notifications_user ) && empty( $notifications_all ) ) {
|
72 |
+
return;
|
73 |
+
}
|
74 |
+
|
75 |
+
$cont_notifications = sizeof( $notifications_user ) + sizeof( $notifications_all );
|
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' => $this->plugin->getPluginPageUrl( 'wdan-notices' )
|
83 |
+
] );
|
84 |
+
|
85 |
+
$i = 0;
|
86 |
+
|
87 |
+
// User
|
88 |
+
if ( ! empty( $notifications_user ) ) {
|
89 |
+
$wp_admin_bar->add_menu( [
|
90 |
+
'id' => 'wbcr-han-notify-panel-group-user',
|
91 |
+
'parent' => 'wbcr-han-notify-panel',
|
92 |
+
'title' => __( 'Hidden for you', 'disable-admin-notices' ),
|
93 |
+
'href' => false,
|
94 |
+
'meta' => [
|
95 |
+
'class' => ''
|
96 |
+
]
|
97 |
+
] );
|
98 |
+
|
99 |
+
foreach ( $notifications_user as $notice_id => $message ) {
|
100 |
+
$message = wp_kses( $message, [] );
|
101 |
+
$message = $this->getExcerpt( stripslashes( $message ), 0, 350 );
|
102 |
+
$message .= '<div class="wbcr-han-panel-restore-notify-line">';
|
103 |
+
$message .= '<a href="#" data-nonce="' . wp_create_nonce( $this->plugin->getPluginName() . '_ajax_restore_notice_nonce' );
|
104 |
+
$message .= '" data-notice-id="' . esc_attr( $notice_id ) . '" class="wbcr-han-panel-restore-notify-link">';
|
105 |
+
$message .= __( 'Restore notice', 'clearfy' );
|
106 |
+
$message .= '</a></div>';
|
107 |
+
|
108 |
+
$wp_admin_bar->add_menu( [
|
109 |
+
'id' => 'wbcr-han-notify-panel-item-' . $i,
|
110 |
+
'parent' => 'wbcr-han-notify-panel',
|
111 |
+
'title' => $message,
|
112 |
+
'href' => false,
|
113 |
+
'meta' => [
|
114 |
+
'class' => ''
|
115 |
+
]
|
116 |
+
] );
|
117 |
+
|
118 |
+
$i ++;
|
119 |
+
}
|
120 |
+
}
|
121 |
+
|
122 |
+
if ( $this->plugin->is_premium() && ( current_user_can( 'manage_options' ) || ( is_multisite() && current_user_can( 'manage_network' ) ) ) ) {
|
123 |
+
// All
|
124 |
+
do_action( 'wdn/notifications/panel/all', $wp_admin_bar, $notifications_all, $i );
|
125 |
+
}
|
126 |
+
}
|
127 |
+
}
|
128 |
+
|
129 |
+
public function noticesCollection() {
|
130 |
+
global $wbcr_dan_plugin_all_notices;
|
131 |
+
|
132 |
+
if ( empty( $wbcr_dan_plugin_all_notices ) ) {
|
133 |
+
return;
|
134 |
+
}
|
135 |
+
?>
|
136 |
+
<!-- Disable admin notices plugin (Clearfy tools) -->
|
137 |
+
<script>
|
138 |
+
jQuery(document).ready(function ($) {
|
139 |
+
$(document).on('click', '.wbcr-dan-hide-notice-link', function () {
|
140 |
+
var self = $(this),
|
141 |
+
target = self.data('target'),
|
142 |
+
noticeID = self.data('notice-id'),
|
143 |
+
nonce = self.data('nonce'),
|
144 |
+
noticeHtml = self.closest('.wbcr-dan-hide-links').prev('.wbcr-dan-hide-notices').clone(),
|
145 |
+
contanierEl = self.closest('.wbcr-dan-hide-links').prev('.wbcr-dan-hide-notices').parent();
|
146 |
+
|
147 |
+
contanierEl.find('.wbcr-dan-hide-links').remove();
|
148 |
+
contanierEl.slideUp();
|
149 |
+
|
150 |
+
if (!noticeID) {
|
151 |
+
alert('Undefinded error. Please report the bug to our support forum.');
|
152 |
+
}
|
153 |
+
|
154 |
+
$.ajax(ajaxurl, {
|
155 |
+
type: 'post',
|
156 |
+
dataType: 'json',
|
157 |
+
data: {
|
158 |
+
action: 'wbcr-dan-hide-notices',
|
159 |
+
target: target,
|
160 |
+
security: nonce,
|
161 |
+
notice_id: noticeID,
|
162 |
+
notice_html: noticeHtml.html()
|
163 |
+
},
|
164 |
+
success: function (response) {
|
165 |
+
if (!response || !response.success) {
|
166 |
+
|
167 |
+
if (response.data.error_message) {
|
168 |
+
console.log(response.data.error_message);
|
169 |
+
self.closest('li').show();
|
170 |
+
} else {
|
171 |
+
console.log(response);
|
172 |
+
}
|
173 |
+
|
174 |
+
contanierEl.show();
|
175 |
+
return;
|
176 |
+
}
|
177 |
+
|
178 |
+
contanierEl.remove();
|
179 |
+
},
|
180 |
+
error: function (xhr, ajaxOptions, thrownError) {
|
181 |
+
console.log(xhr.status);
|
182 |
+
console.log(xhr.responseText);
|
183 |
+
console.log(thrownError);
|
184 |
+
}
|
185 |
+
});
|
186 |
+
return false;
|
187 |
+
});
|
188 |
+
});
|
189 |
+
</script>
|
190 |
+
<?php
|
191 |
+
foreach ( $wbcr_dan_plugin_all_notices as $val ) {
|
192 |
+
echo $val;
|
193 |
+
}
|
194 |
+
}
|
195 |
+
|
196 |
+
public
|
197 |
+
function catchNotices() {
|
198 |
+
global $wbcr_dan_plugin_all_notices;
|
199 |
+
|
200 |
+
try {
|
201 |
+
$wp_filter_admin_notices = &wdan_get_wp_filter( 'admin_notices' );
|
202 |
+
$wp_filter_all_admin_notices = &wdan_get_wp_filter( 'all_admin_notices' );
|
203 |
+
|
204 |
+
$wp_filter_notices = $this->array_merge( $wp_filter_admin_notices, $wp_filter_all_admin_notices );
|
205 |
+
} catch ( Exception $e ) {
|
206 |
+
$wp_filter_notices = null;
|
207 |
+
}
|
208 |
+
|
209 |
+
$hide_notices_type = $this->getPopulateOption( 'hide_admin_notices' );
|
210 |
+
|
211 |
+
if ( empty( $hide_notices_type ) || $hide_notices_type == 'only_selected' ) {
|
212 |
+
$get_hidden_notices = get_user_meta( get_current_user_id(), $this->plugin->getOptionName( 'hidden_notices' ), true );
|
213 |
+
$get_hidden_notices_all = apply_filters( 'wdan/notifications/all', [] );
|
214 |
+
|
215 |
+
$content = [];
|
216 |
+
foreach ( (array) $wp_filter_notices as $filters ) {
|
217 |
+
foreach ( $filters as $callback_name => $callback ) {
|
218 |
+
|
219 |
+
if ( 'usof_hide_admin_notices_start' == $callback_name || 'usof_hide_admin_notices_end' == $callback_name ) {
|
220 |
+
continue;
|
221 |
+
}
|
222 |
+
|
223 |
+
ob_start();
|
224 |
+
|
225 |
+
// #CLRF-140 fix bug for php7
|
226 |
+
// when the developers forgot to delete the argument in the function of implementing the notification.
|
227 |
+
$args = [];
|
228 |
+
$accepted_args = isset( $callback['accepted_args'] ) && ! empty( $callback['accepted_args'] ) ? $callback['accepted_args'] : 0;
|
229 |
+
|
230 |
+
if ( $accepted_args > 0 ) {
|
231 |
+
for ( $i = 0; $i < (int) $accepted_args; $i ++ ) {
|
232 |
+
$args[] = null;
|
233 |
+
}
|
234 |
+
}
|
235 |
+
//===========
|
236 |
+
|
237 |
+
call_user_func_array( $callback['function'], $args );
|
238 |
+
$cont = ob_get_clean();
|
239 |
+
|
240 |
+
if ( empty( $cont ) ) {
|
241 |
+
continue;
|
242 |
+
}
|
243 |
+
|
244 |
+
$salt = is_multisite() ? get_current_blog_id() : '';
|
245 |
+
$txt = preg_replace( '/<(script|style)([^>]+)?>(.*?)<\/(script|style)>/is', '', $cont );
|
246 |
+
$uniq_id1 = md5( strip_tags( str_replace( [ "\t", "\r", "\n", " " ], "", $txt ) ) . $salt );
|
247 |
+
$uniq_id2 = md5( $callback_name . $salt );
|
248 |
+
|
249 |
+
if ( is_array( $callback['function'] ) && sizeof( $callback['function'] ) == 2 ) {
|
250 |
+
$class = $callback['function'][0];
|
251 |
+
if ( is_object( $class ) ) {
|
252 |
+
$class_name = get_class( $class );
|
253 |
+
$method_name = $callback['function'][1];
|
254 |
+
$uniq_id2 = md5( $class_name . ':' . $method_name );
|
255 |
+
}
|
256 |
+
}
|
257 |
+
//$txt = rtrim( trim( $txt ) );
|
258 |
+
//$txt = preg_replace( '/^(<div[^>]+>)(.*?)(<\/div>)$/is', '<p>$2</p>', $txt );
|
259 |
+
|
260 |
+
// All
|
261 |
+
$skip_notice = apply_filters( 'wdn/notifications/catch/all', true, $get_hidden_notices_all, $uniq_id1, $uniq_id2 );
|
262 |
+
if ( ! $skip_notice ) {
|
263 |
+
continue;
|
264 |
+
}
|
265 |
+
|
266 |
+
if ( ! empty( $get_hidden_notices ) ) {
|
267 |
+
$skip_notice = true;
|
268 |
+
foreach ( (array) $get_hidden_notices as $key => $notice ) {
|
269 |
+
$splited_notice_id = explode( '_', $key );
|
270 |
+
if ( empty( $splited_notice_id ) || sizeof( $splited_notice_id ) < 2 ) {
|
271 |
+
continue;
|
272 |
+
}
|
273 |
+
$compare_notice_id_1 = $splited_notice_id[0];
|
274 |
+
$compare_notice_id_2 = $splited_notice_id[1];
|
275 |
+
|
276 |
+
if ( $compare_notice_id_1 == $uniq_id1 || $compare_notice_id_2 == $uniq_id2 ) {
|
277 |
+
$skip_notice = false;
|
278 |
+
break;
|
279 |
+
}
|
280 |
+
}
|
281 |
+
|
282 |
+
if ( ! $skip_notice ) {
|
283 |
+
continue;
|
284 |
+
}
|
285 |
+
}
|
286 |
+
|
287 |
+
$nonce = wp_create_nonce( $this->plugin->getPluginName() . '_ajax_hide_notices_nonce' );
|
288 |
+
$hide_link_for_me = "<button data-target='user' data-nonce='{$nonce}' data-notice-id='{$uniq_id1}_{$uniq_id2}' class='wbcr-dan-hide-notice-link'>" . __( 'Hide <b>for me</b>', 'disable-admin-notices' ) . "</button>";
|
289 |
+
$hide_link_for_all = "";
|
290 |
+
|
291 |
+
if ( $this->plugin->is_premium() && ( current_user_can( 'manage_options' ) || ( is_multisite() && current_user_can( 'manage_network' ) ) ) ) {
|
292 |
+
$hide_link_for_all = "<button data-target='all' data-nonce='{$nonce}' data-notice-id='{$uniq_id1}_{$uniq_id2}' class='wbcr-dan-hide-notice-link'>" . __( 'Hide <b>for all</b>', 'disable-admin-notices' ) . "</button>";
|
293 |
+
}
|
294 |
+
|
295 |
+
if ( strpos( $cont, 'redux-connect-message' ) ) {
|
296 |
+
$a = 1;
|
297 |
+
}
|
298 |
+
|
299 |
+
// Fix for Woocommerce membership and Jetpack message
|
300 |
+
if ( $cont != '<div class="js-wc-memberships-admin-notice-placeholder"></div>' && false === strpos( $cont, 'jetpack-jitm-message' ) ) {
|
301 |
+
$cont = preg_replace( '/<(noscript|script|style)([^>]+)?>(.*?)<\/(noscript|script|style)>(<\/(noscript|script|style)>)*/is', '', $cont );
|
302 |
+
$cont = preg_replace( '/<!--(.*?)-->/is', '', $cont );
|
303 |
+
$cont = rtrim( trim( $cont ) );
|
304 |
+
$cont = preg_replace( '/^(<div[^>]+>)(.*?)(<\/div>)$/is',
|
305 |
+
"$1<div class='wbcr-dan-hide-notices'>$2</div><div class='wbcr-dan-hide-links'>{$hide_link_for_me} {$hide_link_for_all}</div>$3", $cont );
|
306 |
+
}
|
307 |
+
|
308 |
+
if ( empty( $cont ) ) {
|
309 |
+
continue;
|
310 |
+
}
|
311 |
+
$content[] = $cont;
|
312 |
+
}
|
313 |
+
}
|
314 |
+
|
315 |
+
$wbcr_dan_plugin_all_notices = $content;
|
316 |
+
}
|
317 |
+
|
318 |
+
wdan_clear_all_notices( 'user_admin_notices' );
|
319 |
+
wdan_clear_all_notices( 'network_admin_notices' );
|
320 |
+
wdan_clear_all_notices( 'admin_notices', [
|
321 |
+
'Learndash_Admin_Menus_Tabs',
|
322 |
+
'WC_Memberships_Admin',
|
323 |
+
'YIT_Plugin_Panel_WooCommerce'
|
324 |
+
], [ 'et_pb_export_layouts_interface' ] );
|
325 |
+
|
326 |
+
wdan_clear_all_notices( 'all_admin_notices', [
|
327 |
+
'Learndash_Admin_Menus_Tabs',
|
328 |
+
'WC_Memberships_Admin',
|
329 |
+
'YIT_Plugin_Panel_WooCommerce'
|
330 |
+
], [ 'et_pb_export_layouts_interface' ] );
|
331 |
+
}
|
332 |
+
|
333 |
+
|
334 |
+
/**
|
335 |
+
* Get excerpt from string
|
336 |
+
*
|
337 |
+
* @param String $str String to get an excerpt from
|
338 |
+
* @param Integer $startPos Position int string to start excerpt from
|
339 |
+
* @param Integer $maxLength Maximum length the excerpt may be
|
340 |
+
*
|
341 |
+
* @return String excerpt
|
342 |
+
*/
|
343 |
+
public
|
344 |
+
function getExcerpt(
|
345 |
+
$str, $startPos = 0, $maxLength = 100
|
346 |
+
) {
|
347 |
+
if ( strlen( $str ) > $maxLength ) {
|
348 |
+
$excerpt = substr( $str, $startPos, $maxLength - 3 );
|
349 |
+
$lastSpace = strrpos( $excerpt, ' ' );
|
350 |
+
$excerpt = substr( $excerpt, 0, $lastSpace );
|
351 |
+
$excerpt .= '...';
|
352 |
+
} else {
|
353 |
+
$excerpt = $str;
|
354 |
+
}
|
355 |
+
|
356 |
+
return $excerpt;
|
357 |
+
}
|
358 |
+
|
359 |
+
/**
|
360 |
+
* @param array $arr1
|
361 |
+
* @param array $arr2
|
362 |
+
*
|
363 |
+
* @return array
|
364 |
+
*/
|
365 |
+
protected
|
366 |
+
function array_merge(
|
367 |
+
array $arr1, array $arr2
|
368 |
+
) {
|
369 |
+
if ( ! empty( $arr2 ) ) {
|
370 |
+
foreach ( $arr2 as $key => $value ) {
|
371 |
+
if ( ! isset( $arr1[ $key ] ) ) {
|
372 |
+
$arr1[ $key ] = $value;
|
373 |
+
} else if ( is_array( $arr1[ $key ] ) ) {
|
374 |
+
$arr1[ $key ] = $arr1[ $key ] + $value;
|
375 |
+
}
|
376 |
+
}
|
377 |
+
}
|
378 |
+
|
379 |
+
return $arr1;
|
380 |
+
}
|
381 |
}
|
includes/functions.php
CHANGED
@@ -1,122 +1,122 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Helper functions
|
4 |
-
* @author Webcraftic <alex.kovalevv@gmail.com>
|
5 |
-
* @copyright (c) 05.07.2020, Webcraftic
|
6 |
-
* @version 1.0
|
7 |
-
*/
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Access to global variable $wp_filter in WP core.
|
11 |
-
* Migration from WP 4.2 to 4.9
|
12 |
-
*
|
13 |
-
* @see https://codex.wordpress.org/Version_4.7 WP 4.7 changelog (WP_Hook)
|
14 |
-
*
|
15 |
-
* @param $key string filter name
|
16 |
-
*
|
17 |
-
* @return array callbacks array by link
|
18 |
-
*/
|
19 |
-
function &wdan_get_wp_filter( $key ) {
|
20 |
-
global $wp_filter;
|
21 |
-
|
22 |
-
$default = [];
|
23 |
-
|
24 |
-
if ( 'admin_notices' === $key && is_multisite() && is_network_admin() ) {
|
25 |
-
$key = 'network_admin_notices';
|
26 |
-
}
|
27 |
-
|
28 |
-
if ( ! isset( $wp_filter[ $key ] ) ) {
|
29 |
-
return $default;
|
30 |
-
}
|
31 |
-
|
32 |
-
return $wp_filter[ $key ]->callbacks;
|
33 |
-
}
|
34 |
-
|
35 |
-
/**
|
36 |
-
* @param $key
|
37 |
-
*
|
38 |
-
* @return array
|
39 |
-
*/
|
40 |
-
function wdan_collect_notices( $key ) {
|
41 |
-
$wp_filter = &wdan_get_wp_filter( $key );
|
42 |
-
|
43 |
-
$content = [];
|
44 |
-
|
45 |
-
if ( ! empty( $wp_filter ) ) {
|
46 |
-
foreach ( (array) $wp_filter as $filters ) {
|
47 |
-
foreach ( $filters as $callback_name => $callback ) {
|
48 |
-
|
49 |
-
if ( 'usof_hide_admin_notices_start' == $callback_name || 'usof_hide_admin_notices_end' == $callback_name ) {
|
50 |
-
continue;
|
51 |
-
}
|
52 |
-
|
53 |
-
ob_start();
|
54 |
-
|
55 |
-
// #CLRF-140 fix bug for php7
|
56 |
-
// when the developers forgot to delete the argument in the function of implementing the notification.
|
57 |
-
$args = [];
|
58 |
-
$accepted_args = isset( $callback['accepted_args'] ) && ! empty( $callback['accepted_args'] ) ? $callback['accepted_args'] : 0;
|
59 |
-
|
60 |
-
if ( $accepted_args > 0 ) {
|
61 |
-
for ( $i = 0; $i < (int) $accepted_args; $i ++ ) {
|
62 |
-
$args[] = null;
|
63 |
-
}
|
64 |
-
}
|
65 |
-
//===========
|
66 |
-
|
67 |
-
call_user_func_array( $callback['function'], $args );
|
68 |
-
$cont = ob_get_clean();
|
69 |
-
|
70 |
-
if ( ! empty( $cont ) ) {
|
71 |
-
$salt = is_multisite() ? get_current_blog_id() : '';
|
72 |
-
$uniq_id1 = md5( $cont . $salt );
|
73 |
-
$uniq_id2 = md5( $callback_name . $salt );
|
74 |
-
|
75 |
-
if ( is_array( $callback['function'] ) && sizeof( $callback['function'] ) == 2 ) {
|
76 |
-
$class = $callback['function'][0];
|
77 |
-
if ( is_object( $class ) ) {
|
78 |
-
$class_name = get_class( $class );
|
79 |
-
$method_name = $callback['function'][1];
|
80 |
-
$uniq_id2 = md5( $class_name . ':' . $method_name );
|
81 |
-
}
|
82 |
-
}
|
83 |
-
|
84 |
-
$content[ $uniq_id1 . "_" . $uniq_id2 ] = $cont;
|
85 |
-
}
|
86 |
-
}
|
87 |
-
}
|
88 |
-
}
|
89 |
-
|
90 |
-
return $content;
|
91 |
-
}
|
92 |
-
|
93 |
-
/**
|
94 |
-
* @param $key
|
95 |
-
* @param array $excluded_classes
|
96 |
-
* @param array $excluded_callback_names
|
97 |
-
*/
|
98 |
-
function wdan_clear_all_notices( $key, $excluded_classes = [], $excluded_callback_names = [] ) {
|
99 |
-
$wp_filter = &wdan_get_wp_filter( $key );
|
100 |
-
|
101 |
-
if ( ! empty( $wp_filter ) ) {
|
102 |
-
foreach ( (array) $wp_filter as $f_key => $f ) {
|
103 |
-
foreach ( $f as $c_name => $clback ) {
|
104 |
-
if ( is_array( $clback['function'] ) && sizeof( $clback['function'] ) == 2 ) {
|
105 |
-
$class = $clback['function'][0];
|
106 |
-
if ( is_object( $class ) ) {
|
107 |
-
$class_name = get_class( $class );
|
108 |
-
|
109 |
-
if ( in_array( $class_name, $excluded_classes ) ) {
|
110 |
-
continue;
|
111 |
-
}
|
112 |
-
}
|
113 |
-
}
|
114 |
-
|
115 |
-
if ( in_array( $c_name, $excluded_callback_names ) ) {
|
116 |
-
continue;
|
117 |
-
}
|
118 |
-
unset( $wp_filter[ $f_key ][ $c_name ] );
|
119 |
-
}
|
120 |
-
}
|
121 |
-
}
|
122 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Helper functions
|
4 |
+
* @author Webcraftic <alex.kovalevv@gmail.com>
|
5 |
+
* @copyright (c) 05.07.2020, Webcraftic
|
6 |
+
* @version 1.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Access to global variable $wp_filter in WP core.
|
11 |
+
* Migration from WP 4.2 to 4.9
|
12 |
+
*
|
13 |
+
* @see https://codex.wordpress.org/Version_4.7 WP 4.7 changelog (WP_Hook)
|
14 |
+
*
|
15 |
+
* @param $key string filter name
|
16 |
+
*
|
17 |
+
* @return array callbacks array by link
|
18 |
+
*/
|
19 |
+
function &wdan_get_wp_filter( $key ) {
|
20 |
+
global $wp_filter;
|
21 |
+
|
22 |
+
$default = [];
|
23 |
+
|
24 |
+
if ( 'admin_notices' === $key && is_multisite() && is_network_admin() ) {
|
25 |
+
$key = 'network_admin_notices';
|
26 |
+
}
|
27 |
+
|
28 |
+
if ( ! isset( $wp_filter[ $key ] ) ) {
|
29 |
+
return $default;
|
30 |
+
}
|
31 |
+
|
32 |
+
return $wp_filter[ $key ]->callbacks;
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @param $key
|
37 |
+
*
|
38 |
+
* @return array
|
39 |
+
*/
|
40 |
+
function wdan_collect_notices( $key ) {
|
41 |
+
$wp_filter = &wdan_get_wp_filter( $key );
|
42 |
+
|
43 |
+
$content = [];
|
44 |
+
|
45 |
+
if ( ! empty( $wp_filter ) ) {
|
46 |
+
foreach ( (array) $wp_filter as $filters ) {
|
47 |
+
foreach ( $filters as $callback_name => $callback ) {
|
48 |
+
|
49 |
+
if ( 'usof_hide_admin_notices_start' == $callback_name || 'usof_hide_admin_notices_end' == $callback_name ) {
|
50 |
+
continue;
|
51 |
+
}
|
52 |
+
|
53 |
+
ob_start();
|
54 |
+
|
55 |
+
// #CLRF-140 fix bug for php7
|
56 |
+
// when the developers forgot to delete the argument in the function of implementing the notification.
|
57 |
+
$args = [];
|
58 |
+
$accepted_args = isset( $callback['accepted_args'] ) && ! empty( $callback['accepted_args'] ) ? $callback['accepted_args'] : 0;
|
59 |
+
|
60 |
+
if ( $accepted_args > 0 ) {
|
61 |
+
for ( $i = 0; $i < (int) $accepted_args; $i ++ ) {
|
62 |
+
$args[] = null;
|
63 |
+
}
|
64 |
+
}
|
65 |
+
//===========
|
66 |
+
|
67 |
+
call_user_func_array( $callback['function'], $args );
|
68 |
+
$cont = ob_get_clean();
|
69 |
+
|
70 |
+
if ( ! empty( $cont ) ) {
|
71 |
+
$salt = is_multisite() ? get_current_blog_id() : '';
|
72 |
+
$uniq_id1 = md5( $cont . $salt );
|
73 |
+
$uniq_id2 = md5( $callback_name . $salt );
|
74 |
+
|
75 |
+
if ( is_array( $callback['function'] ) && sizeof( $callback['function'] ) == 2 ) {
|
76 |
+
$class = $callback['function'][0];
|
77 |
+
if ( is_object( $class ) ) {
|
78 |
+
$class_name = get_class( $class );
|
79 |
+
$method_name = $callback['function'][1];
|
80 |
+
$uniq_id2 = md5( $class_name . ':' . $method_name );
|
81 |
+
}
|
82 |
+
}
|
83 |
+
|
84 |
+
$content[ $uniq_id1 . "_" . $uniq_id2 ] = $cont;
|
85 |
+
}
|
86 |
+
}
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
return $content;
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* @param $key
|
95 |
+
* @param array $excluded_classes
|
96 |
+
* @param array $excluded_callback_names
|
97 |
+
*/
|
98 |
+
function wdan_clear_all_notices( $key, $excluded_classes = [], $excluded_callback_names = [] ) {
|
99 |
+
$wp_filter = &wdan_get_wp_filter( $key );
|
100 |
+
|
101 |
+
if ( ! empty( $wp_filter ) ) {
|
102 |
+
foreach ( (array) $wp_filter as $f_key => $f ) {
|
103 |
+
foreach ( $f as $c_name => $clback ) {
|
104 |
+
if ( is_array( $clback['function'] ) && sizeof( $clback['function'] ) == 2 ) {
|
105 |
+
$class = $clback['function'][0];
|
106 |
+
if ( is_object( $class ) ) {
|
107 |
+
$class_name = get_class( $class );
|
108 |
+
|
109 |
+
if ( in_array( $class_name, $excluded_classes ) ) {
|
110 |
+
continue;
|
111 |
+
}
|
112 |
+
}
|
113 |
+
}
|
114 |
+
|
115 |
+
if ( in_array( $c_name, $excluded_callback_names ) ) {
|
116 |
+
continue;
|
117 |
+
}
|
118 |
+
unset( $wp_filter[ $f_key ][ $c_name ] );
|
119 |
+
}
|
120 |
+
}
|
121 |
+
}
|
122 |
}
|
languages/disable-admin-notices-es_ES.po
CHANGED
@@ -1,182 +1,182 @@
|
|
1 |
-
# Translation of Plugins - Clearfy in Spanish (Spain)
|
2 |
-
# This file is distributed under the same license as the Plugins - Clearfy – WordPress optimization plugin and disable ultimate tweaker - Development (trunk) package.
|
3 |
-
msgid ""
|
4 |
-
msgstr ""
|
5 |
-
"Project-Id-Version: \n"
|
6 |
-
"POT-Creation-Date: 2019-04-28 06:26+0300\n"
|
7 |
-
"PO-Revision-Date: 2019-04-28 06:26+0300\n"
|
8 |
-
"Last-Translator: \n"
|
9 |
-
"Language-Team: \n"
|
10 |
-
"Language: es\n"
|
11 |
-
"MIME-Version: 1.0\n"
|
12 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
13 |
-
"Content-Transfer-Encoding: 8bit\n"
|
14 |
-
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
15 |
-
"X-Generator: Poedit 2.1.1\n"
|
16 |
-
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
17 |
-
"X-Generator: Poedit 2.1.1\n"
|
18 |
-
"X-Poedit-Basepath: ..\n"
|
19 |
-
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
20 |
-
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
21 |
-
"X-Poedit-SourceCharset: UTF-8\n"
|
22 |
-
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
|
23 |
-
"X-Poedit-SearchPath-0: .\n"
|
24 |
-
"X-Poedit-SearchPathExcluded-0: libs\n"
|
25 |
-
"X-Poedit-SearchPathExcluded-1: components\n"
|
26 |
-
"X-Poedit-SearchPathExcluded-2: cache\n"
|
27 |
-
|
28 |
-
#: admin/ajax/hide-notice.php:24 admin/ajax/restore-notice.php:22
|
29 |
-
msgid "Undefinded notice id."
|
30 |
-
msgstr "Aviso de ID indefinido"
|
31 |
-
|
32 |
-
#: admin/ajax/hide-notice.php:40 admin/ajax/restore-notice.php:36
|
33 |
-
msgid "You don't have enough capability to edit this information."
|
34 |
-
msgstr "No tienes suficiente permisos para editar esta información."
|
35 |
-
|
36 |
-
#: admin/boot.php:18 admin/options.php:30 admin/pages/notices.php:38
|
37 |
-
msgid "Hide admin notices"
|
38 |
-
msgstr "Ocultar avisos administrativos"
|
39 |
-
|
40 |
-
#: admin/boot.php:24 admin/options.php:103
|
41 |
-
msgid "Enable hidden notices in adminbar"
|
42 |
-
msgstr "Habilitar avisos ocultos en la barra de administración"
|
43 |
-
|
44 |
-
#: admin/boot.php:46
|
45 |
-
msgid "Get ultimate plugin free"
|
46 |
-
msgstr "Obtener el ultimate plugin gratis"
|
47 |
-
|
48 |
-
#: admin/options.php:23
|
49 |
-
msgid "Admin notifications, Update nags"
|
50 |
-
msgstr "Notificaciones de administrador, actualización de nags"
|
51 |
-
|
52 |
-
#: admin/options.php:23
|
53 |
-
msgid ""
|
54 |
-
"Do you know the situation, when some plugin offers you to update to premium, "
|
55 |
-
"to collect technical data and shows many annoying notices? You are close "
|
56 |
-
"these notices every now and again but they newly appears and interfere your "
|
57 |
-
"work with WordPress. Even worse, some plugin’s authors delete “close” button "
|
58 |
-
"from notices and they shows in your admin panel forever."
|
59 |
-
msgstr ""
|
60 |
-
"¿Conoces la situación cuando algún plugin te ofrece actualizar a Premium, "
|
61 |
-
"recopilar datos técnicos y mostrar muchos avisos molestos? A veces no están, "
|
62 |
-
"pero aparecen de nuevo e interfieren en tu trabajo con WordPress. Peor aún, "
|
63 |
-
"los autores de algunos plugin eliminan el botón \"cerrar\" de las "
|
64 |
-
"notificaciones y se muestran en su panel de administración para siempre."
|
65 |
-
|
66 |
-
#: admin/options.php:34
|
67 |
-
msgid "All notices"
|
68 |
-
msgstr "Todos los avisos"
|
69 |
-
|
70 |
-
#: admin/options.php:35
|
71 |
-
msgid "Hide all notices globally."
|
72 |
-
msgstr "Ocultar todos los avisos globalmente."
|
73 |
-
|
74 |
-
#: admin/options.php:39
|
75 |
-
msgid "Only selected"
|
76 |
-
msgstr "Solo seleccionados"
|
77 |
-
|
78 |
-
#: admin/options.php:40
|
79 |
-
msgid ""
|
80 |
-
"Hide selected notices only. You will see the link \"Hide notification forever"
|
81 |
-
"\" in each notice. Push it and they will not bother you anymore."
|
82 |
-
msgstr ""
|
83 |
-
"Ocultar solo los avisos seleccionados. Verá el enlace \"Ocultar notificación "
|
84 |
-
"para siempre\" en cada aviso. Click y ya no los veras mas."
|
85 |
-
|
86 |
-
#: admin/options.php:44
|
87 |
-
msgid "Don't nide"
|
88 |
-
msgstr "No ocultar"
|
89 |
-
|
90 |
-
#: admin/options.php:45
|
91 |
-
msgid ""
|
92 |
-
"Do not hide notices and do not show “Hide notification forever” link for "
|
93 |
-
"admin."
|
94 |
-
msgstr ""
|
95 |
-
"No ocultar avisos y no mostrar el enlace \"Ocultar notificación para siempre"
|
96 |
-
"\" para el administrador."
|
97 |
-
|
98 |
-
#: admin/options.php:49
|
99 |
-
msgid ""
|
100 |
-
"Some plugins shows notifications about premium version, data collecting or "
|
101 |
-
"promote their services. Even if you push close button (that sometimes are "
|
102 |
-
"impossible), notices are shows again in some time. This option allows you to "
|
103 |
-
"control notices. Hide them all or each individually. Some plugins shows "
|
104 |
-
"notifications about premium version, data collecting or promote their "
|
105 |
-
"services. Even if you push close button (that sometimes are impossible), "
|
106 |
-
"notices are shows again in some time. This option allows you to control "
|
107 |
-
"notices. Hide them all or each individually."
|
108 |
-
msgstr ""
|
109 |
-
"Algunos plugin muestran notificaciones sobre la versión premium: "
|
110 |
-
"Recopilación de datos o la promoción de sus servicios; Incluso si presiona "
|
111 |
-
"el botón de cierre (que a veces es imposible), las notificaciones se "
|
112 |
-
"muestran de nuevo en algún momento. Esta opción le permite controlar avisos. "
|
113 |
-
"Ocúltelas todas o cada una individualmente."
|
114 |
-
|
115 |
-
#: admin/options.php:105
|
116 |
-
msgid ""
|
117 |
-
"By default, the plugin hides all notices, which you specified. If you enable "
|
118 |
-
"this option, the plugin will collect all hidden notices and show them into "
|
119 |
-
"the top admin toolbar. It will not disturb you but will allow to look "
|
120 |
-
"notices at your convenience."
|
121 |
-
msgstr ""
|
122 |
-
"Por defecto, el plugin oculta todos los avisos que especificó. Si habilita "
|
123 |
-
"esta opción, el plugin recopilará todos los avisos ocultos y los mostrará en "
|
124 |
-
"la barra superior de administración de herramientas. No le molestará, pero "
|
125 |
-
"le permitirá ver los avisos según su conveniencia."
|
126 |
-
|
127 |
-
#: admin/options.php:166
|
128 |
-
msgid "Reset hidden notices for"
|
129 |
-
msgstr "Restablecer avisos ocultos para"
|
130 |
-
|
131 |
-
#: admin/options.php:167
|
132 |
-
msgid "Push reset hidden notices if you need to show hidden notices again."
|
133 |
-
msgstr "Pulse reiniciar avisos ocultos si necesita mostrarlos de nuevo."
|
134 |
-
|
135 |
-
#: admin/options.php:177
|
136 |
-
msgid "current user"
|
137 |
-
msgstr "usuario actual"
|
138 |
-
|
139 |
-
#: admin/options.php:181
|
140 |
-
msgid "all users"
|
141 |
-
msgstr "todos los usuarios"
|
142 |
-
|
143 |
-
#: admin/options.php:185
|
144 |
-
msgid "Reset notices"
|
145 |
-
msgstr "Restablecer avisos"
|
146 |
-
|
147 |
-
#: admin/options.php:188 admin/pages/notices.php:71
|
148 |
-
msgid "Hidden notices are successfully reset, now you can see them again!"
|
149 |
-
msgstr ""
|
150 |
-
"Los avisos ocultos se restablecieron con éxito, ¡ahora puedes verlos "
|
151 |
-
"nuevamente!"
|
152 |
-
|
153 |
-
#: admin/pages/notices.php:54
|
154 |
-
msgid "Notices"
|
155 |
-
msgstr "Avisos"
|
156 |
-
|
157 |
-
#: admin/pages/notices.php:55
|
158 |
-
msgid "General"
|
159 |
-
msgstr "General"
|
160 |
-
|
161 |
-
#: disable-admin-notices.php:84
|
162 |
-
msgid "Webcraftic disable admin notices"
|
163 |
-
msgstr "Deshabilitar los avisos Webcraftic de administración"
|
164 |
-
|
165 |
-
#: includes/classes/class.configurate-notices.php:74
|
166 |
-
#, php-format
|
167 |
-
msgid "Notifications %s"
|
168 |
-
msgstr "Notificaciones %s"
|
169 |
-
|
170 |
-
#: includes/classes/class.configurate-notices.php:86
|
171 |
-
msgid "Restore notice"
|
172 |
-
msgstr "Aviso de restauración"
|
173 |
-
|
174 |
-
#: includes/classes/class.configurate-notices.php:285
|
175 |
-
msgid "Hide notification forever"
|
176 |
-
msgstr "Ocultar notificaciones para siempre"
|
177 |
-
|
178 |
-
#~ msgid "Assets Manager"
|
179 |
-
#~ msgstr "Gestor de Activos"
|
180 |
-
|
181 |
-
#~ msgid "Settings has been successfully imported!"
|
182 |
#~ msgstr "¡Configuración importada exitosamente!"
|
1 |
+
# Translation of Plugins - Clearfy in Spanish (Spain)
|
2 |
+
# This file is distributed under the same license as the Plugins - Clearfy – WordPress optimization plugin and disable ultimate tweaker - Development (trunk) package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: \n"
|
6 |
+
"POT-Creation-Date: 2019-04-28 06:26+0300\n"
|
7 |
+
"PO-Revision-Date: 2019-04-28 06:26+0300\n"
|
8 |
+
"Last-Translator: \n"
|
9 |
+
"Language-Team: \n"
|
10 |
+
"Language: es\n"
|
11 |
+
"MIME-Version: 1.0\n"
|
12 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
13 |
+
"Content-Transfer-Encoding: 8bit\n"
|
14 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
15 |
+
"X-Generator: Poedit 2.1.1\n"
|
16 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
17 |
+
"X-Generator: Poedit 2.1.1\n"
|
18 |
+
"X-Poedit-Basepath: ..\n"
|
19 |
+
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
20 |
+
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
21 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
22 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
|
23 |
+
"X-Poedit-SearchPath-0: .\n"
|
24 |
+
"X-Poedit-SearchPathExcluded-0: libs\n"
|
25 |
+
"X-Poedit-SearchPathExcluded-1: components\n"
|
26 |
+
"X-Poedit-SearchPathExcluded-2: cache\n"
|
27 |
+
|
28 |
+
#: admin/ajax/hide-notice.php:24 admin/ajax/restore-notice.php:22
|
29 |
+
msgid "Undefinded notice id."
|
30 |
+
msgstr "Aviso de ID indefinido"
|
31 |
+
|
32 |
+
#: admin/ajax/hide-notice.php:40 admin/ajax/restore-notice.php:36
|
33 |
+
msgid "You don't have enough capability to edit this information."
|
34 |
+
msgstr "No tienes suficiente permisos para editar esta información."
|
35 |
+
|
36 |
+
#: admin/boot.php:18 admin/options.php:30 admin/pages/notices.php:38
|
37 |
+
msgid "Hide admin notices"
|
38 |
+
msgstr "Ocultar avisos administrativos"
|
39 |
+
|
40 |
+
#: admin/boot.php:24 admin/options.php:103
|
41 |
+
msgid "Enable hidden notices in adminbar"
|
42 |
+
msgstr "Habilitar avisos ocultos en la barra de administración"
|
43 |
+
|
44 |
+
#: admin/boot.php:46
|
45 |
+
msgid "Get ultimate plugin free"
|
46 |
+
msgstr "Obtener el ultimate plugin gratis"
|
47 |
+
|
48 |
+
#: admin/options.php:23
|
49 |
+
msgid "Admin notifications, Update nags"
|
50 |
+
msgstr "Notificaciones de administrador, actualización de nags"
|
51 |
+
|
52 |
+
#: admin/options.php:23
|
53 |
+
msgid ""
|
54 |
+
"Do you know the situation, when some plugin offers you to update to premium, "
|
55 |
+
"to collect technical data and shows many annoying notices? You are close "
|
56 |
+
"these notices every now and again but they newly appears and interfere your "
|
57 |
+
"work with WordPress. Even worse, some plugin’s authors delete “close” button "
|
58 |
+
"from notices and they shows in your admin panel forever."
|
59 |
+
msgstr ""
|
60 |
+
"¿Conoces la situación cuando algún plugin te ofrece actualizar a Premium, "
|
61 |
+
"recopilar datos técnicos y mostrar muchos avisos molestos? A veces no están, "
|
62 |
+
"pero aparecen de nuevo e interfieren en tu trabajo con WordPress. Peor aún, "
|
63 |
+
"los autores de algunos plugin eliminan el botón \"cerrar\" de las "
|
64 |
+
"notificaciones y se muestran en su panel de administración para siempre."
|
65 |
+
|
66 |
+
#: admin/options.php:34
|
67 |
+
msgid "All notices"
|
68 |
+
msgstr "Todos los avisos"
|
69 |
+
|
70 |
+
#: admin/options.php:35
|
71 |
+
msgid "Hide all notices globally."
|
72 |
+
msgstr "Ocultar todos los avisos globalmente."
|
73 |
+
|
74 |
+
#: admin/options.php:39
|
75 |
+
msgid "Only selected"
|
76 |
+
msgstr "Solo seleccionados"
|
77 |
+
|
78 |
+
#: admin/options.php:40
|
79 |
+
msgid ""
|
80 |
+
"Hide selected notices only. You will see the link \"Hide notification forever"
|
81 |
+
"\" in each notice. Push it and they will not bother you anymore."
|
82 |
+
msgstr ""
|
83 |
+
"Ocultar solo los avisos seleccionados. Verá el enlace \"Ocultar notificación "
|
84 |
+
"para siempre\" en cada aviso. Click y ya no los veras mas."
|
85 |
+
|
86 |
+
#: admin/options.php:44
|
87 |
+
msgid "Don't nide"
|
88 |
+
msgstr "No ocultar"
|
89 |
+
|
90 |
+
#: admin/options.php:45
|
91 |
+
msgid ""
|
92 |
+
"Do not hide notices and do not show “Hide notification forever” link for "
|
93 |
+
"admin."
|
94 |
+
msgstr ""
|
95 |
+
"No ocultar avisos y no mostrar el enlace \"Ocultar notificación para siempre"
|
96 |
+
"\" para el administrador."
|
97 |
+
|
98 |
+
#: admin/options.php:49
|
99 |
+
msgid ""
|
100 |
+
"Some plugins shows notifications about premium version, data collecting or "
|
101 |
+
"promote their services. Even if you push close button (that sometimes are "
|
102 |
+
"impossible), notices are shows again in some time. This option allows you to "
|
103 |
+
"control notices. Hide them all or each individually. Some plugins shows "
|
104 |
+
"notifications about premium version, data collecting or promote their "
|
105 |
+
"services. Even if you push close button (that sometimes are impossible), "
|
106 |
+
"notices are shows again in some time. This option allows you to control "
|
107 |
+
"notices. Hide them all or each individually."
|
108 |
+
msgstr ""
|
109 |
+
"Algunos plugin muestran notificaciones sobre la versión premium: "
|
110 |
+
"Recopilación de datos o la promoción de sus servicios; Incluso si presiona "
|
111 |
+
"el botón de cierre (que a veces es imposible), las notificaciones se "
|
112 |
+
"muestran de nuevo en algún momento. Esta opción le permite controlar avisos. "
|
113 |
+
"Ocúltelas todas o cada una individualmente."
|
114 |
+
|
115 |
+
#: admin/options.php:105
|
116 |
+
msgid ""
|
117 |
+
"By default, the plugin hides all notices, which you specified. If you enable "
|
118 |
+
"this option, the plugin will collect all hidden notices and show them into "
|
119 |
+
"the top admin toolbar. It will not disturb you but will allow to look "
|
120 |
+
"notices at your convenience."
|
121 |
+
msgstr ""
|
122 |
+
"Por defecto, el plugin oculta todos los avisos que especificó. Si habilita "
|
123 |
+
"esta opción, el plugin recopilará todos los avisos ocultos y los mostrará en "
|
124 |
+
"la barra superior de administración de herramientas. No le molestará, pero "
|
125 |
+
"le permitirá ver los avisos según su conveniencia."
|
126 |
+
|
127 |
+
#: admin/options.php:166
|
128 |
+
msgid "Reset hidden notices for"
|
129 |
+
msgstr "Restablecer avisos ocultos para"
|
130 |
+
|
131 |
+
#: admin/options.php:167
|
132 |
+
msgid "Push reset hidden notices if you need to show hidden notices again."
|
133 |
+
msgstr "Pulse reiniciar avisos ocultos si necesita mostrarlos de nuevo."
|
134 |
+
|
135 |
+
#: admin/options.php:177
|
136 |
+
msgid "current user"
|
137 |
+
msgstr "usuario actual"
|
138 |
+
|
139 |
+
#: admin/options.php:181
|
140 |
+
msgid "all users"
|
141 |
+
msgstr "todos los usuarios"
|
142 |
+
|
143 |
+
#: admin/options.php:185
|
144 |
+
msgid "Reset notices"
|
145 |
+
msgstr "Restablecer avisos"
|
146 |
+
|
147 |
+
#: admin/options.php:188 admin/pages/notices.php:71
|
148 |
+
msgid "Hidden notices are successfully reset, now you can see them again!"
|
149 |
+
msgstr ""
|
150 |
+
"Los avisos ocultos se restablecieron con éxito, ¡ahora puedes verlos "
|
151 |
+
"nuevamente!"
|
152 |
+
|
153 |
+
#: admin/pages/notices.php:54
|
154 |
+
msgid "Notices"
|
155 |
+
msgstr "Avisos"
|
156 |
+
|
157 |
+
#: admin/pages/notices.php:55
|
158 |
+
msgid "General"
|
159 |
+
msgstr "General"
|
160 |
+
|
161 |
+
#: disable-admin-notices.php:84
|
162 |
+
msgid "Webcraftic disable admin notices"
|
163 |
+
msgstr "Deshabilitar los avisos Webcraftic de administración"
|
164 |
+
|
165 |
+
#: includes/classes/class.configurate-notices.php:74
|
166 |
+
#, php-format
|
167 |
+
msgid "Notifications %s"
|
168 |
+
msgstr "Notificaciones %s"
|
169 |
+
|
170 |
+
#: includes/classes/class.configurate-notices.php:86
|
171 |
+
msgid "Restore notice"
|
172 |
+
msgstr "Aviso de restauración"
|
173 |
+
|
174 |
+
#: includes/classes/class.configurate-notices.php:285
|
175 |
+
msgid "Hide notification forever"
|
176 |
+
msgstr "Ocultar notificaciones para siempre"
|
177 |
+
|
178 |
+
#~ msgid "Assets Manager"
|
179 |
+
#~ msgstr "Gestor de Activos"
|
180 |
+
|
181 |
+
#~ msgid "Settings has been successfully imported!"
|
182 |
#~ msgstr "¡Configuración importada exitosamente!"
|
languages/disable-admin-notices-nl_BE.po
CHANGED
@@ -1,173 +1,173 @@
|
|
1 |
-
msgid ""
|
2 |
-
msgstr ""
|
3 |
-
"Project-Id-Version: Clearfy\n"
|
4 |
-
"POT-Creation-Date: 2018-09-06 18:31+0300\n"
|
5 |
-
"PO-Revision-Date: \n"
|
6 |
-
"Last-Translator: \n"
|
7 |
-
"Language-Team: \n"
|
8 |
-
"Language: nl_BE\n"
|
9 |
-
"MIME-Version: 1.0\n"
|
10 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
-
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Poedit 2.1.1\n"
|
13 |
-
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
14 |
-
"X-Generator: Poedit 2.1.1\n"
|
15 |
-
"X-Poedit-Basepath: ..\n"
|
16 |
-
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
17 |
-
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
18 |
-
"X-Poedit-SourceCharset: UTF-8\n"
|
19 |
-
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
|
20 |
-
"X-Poedit-SearchPath-0: .\n"
|
21 |
-
"X-Poedit-SearchPathExcluded-0: libs\n"
|
22 |
-
"X-Poedit-SearchPathExcluded-1: components\n"
|
23 |
-
"X-Poedit-SearchPathExcluded-2: cache\n"
|
24 |
-
|
25 |
-
#: admin/ajax/hide-notice.php:19 admin/ajax/restore-notice.php:19
|
26 |
-
msgid "You don't have enough capability to edit this information."
|
27 |
-
msgstr "Je hebt niet voldoende mogelijkheden om deze informatie te bewerken."
|
28 |
-
|
29 |
-
#: admin/ajax/hide-notice.php:32 admin/ajax/restore-notice.php:28
|
30 |
-
msgid "Undefinded notice id."
|
31 |
-
msgstr "Ongedefinieerde mededeling id."
|
32 |
-
|
33 |
-
#: admin/ajax/hide-notice.php:46 admin/ajax/restore-notice.php:40
|
34 |
-
msgid "Success"
|
35 |
-
msgstr "Succes"
|
36 |
-
|
37 |
-
#: admin/boot.php:18 admin/options.php:30 admin/pages/notices.php:33
|
38 |
-
msgid "Hide admin notices"
|
39 |
-
msgstr "Verberg admin meldingen"
|
40 |
-
|
41 |
-
#: admin/boot.php:24 admin/options.php:70
|
42 |
-
msgid "Enable hidden notices in adminbar"
|
43 |
-
msgstr "Schakel verborgen meldingen in de beheer balk in"
|
44 |
-
|
45 |
-
#: admin/boot.php:46
|
46 |
-
msgid "Get ultimate plugin free"
|
47 |
-
msgstr "Krijg ultieme plugin gratis"
|
48 |
-
|
49 |
-
#: admin/options.php:23
|
50 |
-
msgid "Admin notifications, Update nags"
|
51 |
-
msgstr "Admin mededelingen, Update meldingen"
|
52 |
-
|
53 |
-
#: admin/options.php:23
|
54 |
-
msgid ""
|
55 |
-
"Do you know the situation, when some plugin offers you to update to premium, "
|
56 |
-
"to collect technical data and shows many annoying notices? You are close these "
|
57 |
-
"notices every now and again but they newly appears and interfere your work "
|
58 |
-
"with WordPress. Even worse, some plugin’s authors delete “close” button from "
|
59 |
-
"notices and they shows in your admin panel forever."
|
60 |
-
msgstr ""
|
61 |
-
"Herkent u de situatie, waarin sommige plugins u aanbieden om te updaten naar "
|
62 |
-
"premium, om technische gegevens te verzamelen en veel vervelende meldingen "
|
63 |
-
"weergeven? Zo nu en dan sluit u deze meldingen, maar ze verschijnen keer op "
|
64 |
-
"keer opnieuw en belemmeren uw werk met WordPress. Erger nog, de auteurs van "
|
65 |
-
"sommige plugins verwijderen de knop \"Sluiten\" uit meldingen en blijven "
|
66 |
-
"continu zichtbaar in uw beheer venster."
|
67 |
-
|
68 |
-
#: admin/options.php:34
|
69 |
-
msgid "All notices"
|
70 |
-
msgstr "Alle mededelingen"
|
71 |
-
|
72 |
-
#: admin/options.php:35
|
73 |
-
msgid "Hide all notices globally."
|
74 |
-
msgstr "Alle meldingen globaal verbergen."
|
75 |
-
|
76 |
-
#: admin/options.php:39
|
77 |
-
msgid "Only selected"
|
78 |
-
msgstr "Enkel geselecteerd"
|
79 |
-
|
80 |
-
#: admin/options.php:40
|
81 |
-
msgid ""
|
82 |
-
"Hide selected notices only. You will see the link \"Hide notification forever"
|
83 |
-
"\" in each notice. Push it and they will not bother you anymore."
|
84 |
-
msgstr ""
|
85 |
-
"Slechts bepaalde meldingen verbergen. U ziet in elke melding de link \"Verberg "
|
86 |
-
"melding voor altijd\". Klik erop en ze zullen je niet meer lastig vallen."
|
87 |
-
|
88 |
-
#: admin/options.php:44
|
89 |
-
msgid "Don't nide"
|
90 |
-
msgstr "Niet verbergen"
|
91 |
-
|
92 |
-
#: admin/options.php:45
|
93 |
-
msgid ""
|
94 |
-
"Do not hide notices and do not show “Hide notification forever” link for admin."
|
95 |
-
msgstr ""
|
96 |
-
"Meldingen niet verbergen en laat de link 'Verberg melding voor altijd' niet "
|
97 |
-
"zien voor beheerder."
|
98 |
-
|
99 |
-
#: admin/options.php:49
|
100 |
-
msgid ""
|
101 |
-
"Some plugins shows notifications about premium version, data collecting or "
|
102 |
-
"promote their services. Even if you push close button (that sometimes are "
|
103 |
-
"impossible), notices are shows again in some time. This option allows you to "
|
104 |
-
"control notices. Hide them all or each individually. Some plugins shows "
|
105 |
-
"notifications about premium version, data collecting or promote their "
|
106 |
-
"services. Even if you push close button (that sometimes are impossible), "
|
107 |
-
"notices are shows again in some time. This option allows you to control "
|
108 |
-
"notices. Hide them all or each individually."
|
109 |
-
msgstr ""
|
110 |
-
"Sommige plugins tonen meldingen over de premium versie, het verzamelen van "
|
111 |
-
"gegevens of het promoten van hun diensten. Zelfs als je op afsluiten klikt "
|
112 |
-
"(wat soms niet eens mogelijk is), worden mededelingen binnen afzienbare tijd "
|
113 |
-
"opnieuw getoond. Met deze optie kunt u mededelingen beheren. Verberg ze "
|
114 |
-
"allemaal of elk afzonderlijk."
|
115 |
-
|
116 |
-
#: admin/options.php:72
|
117 |
-
msgid ""
|
118 |
-
"By default, the plugin hides all notices, which you specified. If you enable "
|
119 |
-
"this option, the plugin will collect all hidden notices and show them into the "
|
120 |
-
"top admin toolbar. It will not disturb you but will allow to look notices at "
|
121 |
-
"your convenience."
|
122 |
-
msgstr ""
|
123 |
-
"Standaard verbergt de plugin alle kennisgevingen die u hebt opgegeven. Als u "
|
124 |
-
"deze optie inschakelt, verzamelt de plugin alle verborgen mededelingen en "
|
125 |
-
"toont deze in de bovenste beheer werkbalk. Het zal niet storend zijn, maar zal "
|
126 |
-
"je toelaten om aankondigingen op je gemak te bekijken."
|
127 |
-
|
128 |
-
#: admin/options.php:136
|
129 |
-
msgid "Push reset hidden notices if you need to show hidden notices again."
|
130 |
-
msgstr ""
|
131 |
-
"Druk op reset verborgen mededelingen als u verborgen mededelingen opnieuw wilt "
|
132 |
-
"weergeven."
|
133 |
-
|
134 |
-
#: admin/options.php:145
|
135 |
-
#, php-format
|
136 |
-
msgid "Reset hidden notices (%s)"
|
137 |
-
msgstr "Reset verborgen mededelingen (%s)"
|
138 |
-
|
139 |
-
#: admin/options.php:147 admin/pages/notices.php:85
|
140 |
-
msgid "Hidden notices are successfully reset, now you can see them again!"
|
141 |
-
msgstr "Verborgen meldingen zijn succesvol gereset, nu kun je ze opnieuw zien!"
|
142 |
-
|
143 |
-
#: admin/pages/notices.php:49
|
144 |
-
msgid "Notices"
|
145 |
-
msgstr "Mededelingen"
|
146 |
-
|
147 |
-
#: admin/pages/notices.php:50
|
148 |
-
msgid "General"
|
149 |
-
msgstr "Algemeen"
|
150 |
-
|
151 |
-
#: disable-admin-notices.php:23
|
152 |
-
msgid ""
|
153 |
-
"We found that you have the \"Clearfy - disable unused features\" plugin "
|
154 |
-
"installed, this plugin already has disable comments functions, so you can "
|
155 |
-
"deactivate plugin \"Disable admin notices\"!"
|
156 |
-
msgstr ""
|
157 |
-
|
158 |
-
#: disable-admin-notices.php:80
|
159 |
-
msgid "Webcraftic disable admin notices"
|
160 |
-
msgstr "Webcraftic uitschakelen admin mededelingen"
|
161 |
-
|
162 |
-
#: includes/classes/class.configurate-notices.php:79
|
163 |
-
#, php-format
|
164 |
-
msgid "Notifications %s"
|
165 |
-
msgstr "Meldingen %s"
|
166 |
-
|
167 |
-
#: includes/classes/class.configurate-notices.php:88
|
168 |
-
msgid "Restore notice"
|
169 |
-
msgstr "Herstel mededelingen"
|
170 |
-
|
171 |
-
#: includes/classes/class.configurate-notices.php:267
|
172 |
-
msgid "Hide notification forever"
|
173 |
msgstr "Verberg melding voor altijd"
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: Clearfy\n"
|
4 |
+
"POT-Creation-Date: 2018-09-06 18:31+0300\n"
|
5 |
+
"PO-Revision-Date: \n"
|
6 |
+
"Last-Translator: \n"
|
7 |
+
"Language-Team: \n"
|
8 |
+
"Language: nl_BE\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.1.1\n"
|
13 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
14 |
+
"X-Generator: Poedit 2.1.1\n"
|
15 |
+
"X-Poedit-Basepath: ..\n"
|
16 |
+
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
17 |
+
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
18 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
19 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
|
20 |
+
"X-Poedit-SearchPath-0: .\n"
|
21 |
+
"X-Poedit-SearchPathExcluded-0: libs\n"
|
22 |
+
"X-Poedit-SearchPathExcluded-1: components\n"
|
23 |
+
"X-Poedit-SearchPathExcluded-2: cache\n"
|
24 |
+
|
25 |
+
#: admin/ajax/hide-notice.php:19 admin/ajax/restore-notice.php:19
|
26 |
+
msgid "You don't have enough capability to edit this information."
|
27 |
+
msgstr "Je hebt niet voldoende mogelijkheden om deze informatie te bewerken."
|
28 |
+
|
29 |
+
#: admin/ajax/hide-notice.php:32 admin/ajax/restore-notice.php:28
|
30 |
+
msgid "Undefinded notice id."
|
31 |
+
msgstr "Ongedefinieerde mededeling id."
|
32 |
+
|
33 |
+
#: admin/ajax/hide-notice.php:46 admin/ajax/restore-notice.php:40
|
34 |
+
msgid "Success"
|
35 |
+
msgstr "Succes"
|
36 |
+
|
37 |
+
#: admin/boot.php:18 admin/options.php:30 admin/pages/notices.php:33
|
38 |
+
msgid "Hide admin notices"
|
39 |
+
msgstr "Verberg admin meldingen"
|
40 |
+
|
41 |
+
#: admin/boot.php:24 admin/options.php:70
|
42 |
+
msgid "Enable hidden notices in adminbar"
|
43 |
+
msgstr "Schakel verborgen meldingen in de beheer balk in"
|
44 |
+
|
45 |
+
#: admin/boot.php:46
|
46 |
+
msgid "Get ultimate plugin free"
|
47 |
+
msgstr "Krijg ultieme plugin gratis"
|
48 |
+
|
49 |
+
#: admin/options.php:23
|
50 |
+
msgid "Admin notifications, Update nags"
|
51 |
+
msgstr "Admin mededelingen, Update meldingen"
|
52 |
+
|
53 |
+
#: admin/options.php:23
|
54 |
+
msgid ""
|
55 |
+
"Do you know the situation, when some plugin offers you to update to premium, "
|
56 |
+
"to collect technical data and shows many annoying notices? You are close these "
|
57 |
+
"notices every now and again but they newly appears and interfere your work "
|
58 |
+
"with WordPress. Even worse, some plugin’s authors delete “close” button from "
|
59 |
+
"notices and they shows in your admin panel forever."
|
60 |
+
msgstr ""
|
61 |
+
"Herkent u de situatie, waarin sommige plugins u aanbieden om te updaten naar "
|
62 |
+
"premium, om technische gegevens te verzamelen en veel vervelende meldingen "
|
63 |
+
"weergeven? Zo nu en dan sluit u deze meldingen, maar ze verschijnen keer op "
|
64 |
+
"keer opnieuw en belemmeren uw werk met WordPress. Erger nog, de auteurs van "
|
65 |
+
"sommige plugins verwijderen de knop \"Sluiten\" uit meldingen en blijven "
|
66 |
+
"continu zichtbaar in uw beheer venster."
|
67 |
+
|
68 |
+
#: admin/options.php:34
|
69 |
+
msgid "All notices"
|
70 |
+
msgstr "Alle mededelingen"
|
71 |
+
|
72 |
+
#: admin/options.php:35
|
73 |
+
msgid "Hide all notices globally."
|
74 |
+
msgstr "Alle meldingen globaal verbergen."
|
75 |
+
|
76 |
+
#: admin/options.php:39
|
77 |
+
msgid "Only selected"
|
78 |
+
msgstr "Enkel geselecteerd"
|
79 |
+
|
80 |
+
#: admin/options.php:40
|
81 |
+
msgid ""
|
82 |
+
"Hide selected notices only. You will see the link \"Hide notification forever"
|
83 |
+
"\" in each notice. Push it and they will not bother you anymore."
|
84 |
+
msgstr ""
|
85 |
+
"Slechts bepaalde meldingen verbergen. U ziet in elke melding de link \"Verberg "
|
86 |
+
"melding voor altijd\". Klik erop en ze zullen je niet meer lastig vallen."
|
87 |
+
|
88 |
+
#: admin/options.php:44
|
89 |
+
msgid "Don't nide"
|
90 |
+
msgstr "Niet verbergen"
|
91 |
+
|
92 |
+
#: admin/options.php:45
|
93 |
+
msgid ""
|
94 |
+
"Do not hide notices and do not show “Hide notification forever” link for admin."
|
95 |
+
msgstr ""
|
96 |
+
"Meldingen niet verbergen en laat de link 'Verberg melding voor altijd' niet "
|
97 |
+
"zien voor beheerder."
|
98 |
+
|
99 |
+
#: admin/options.php:49
|
100 |
+
msgid ""
|
101 |
+
"Some plugins shows notifications about premium version, data collecting or "
|
102 |
+
"promote their services. Even if you push close button (that sometimes are "
|
103 |
+
"impossible), notices are shows again in some time. This option allows you to "
|
104 |
+
"control notices. Hide them all or each individually. Some plugins shows "
|
105 |
+
"notifications about premium version, data collecting or promote their "
|
106 |
+
"services. Even if you push close button (that sometimes are impossible), "
|
107 |
+
"notices are shows again in some time. This option allows you to control "
|
108 |
+
"notices. Hide them all or each individually."
|
109 |
+
msgstr ""
|
110 |
+
"Sommige plugins tonen meldingen over de premium versie, het verzamelen van "
|
111 |
+
"gegevens of het promoten van hun diensten. Zelfs als je op afsluiten klikt "
|
112 |
+
"(wat soms niet eens mogelijk is), worden mededelingen binnen afzienbare tijd "
|
113 |
+
"opnieuw getoond. Met deze optie kunt u mededelingen beheren. Verberg ze "
|
114 |
+
"allemaal of elk afzonderlijk."
|
115 |
+
|
116 |
+
#: admin/options.php:72
|
117 |
+
msgid ""
|
118 |
+
"By default, the plugin hides all notices, which you specified. If you enable "
|
119 |
+
"this option, the plugin will collect all hidden notices and show them into the "
|
120 |
+
"top admin toolbar. It will not disturb you but will allow to look notices at "
|
121 |
+
"your convenience."
|
122 |
+
msgstr ""
|
123 |
+
"Standaard verbergt de plugin alle kennisgevingen die u hebt opgegeven. Als u "
|
124 |
+
"deze optie inschakelt, verzamelt de plugin alle verborgen mededelingen en "
|
125 |
+
"toont deze in de bovenste beheer werkbalk. Het zal niet storend zijn, maar zal "
|
126 |
+
"je toelaten om aankondigingen op je gemak te bekijken."
|
127 |
+
|
128 |
+
#: admin/options.php:136
|
129 |
+
msgid "Push reset hidden notices if you need to show hidden notices again."
|
130 |
+
msgstr ""
|
131 |
+
"Druk op reset verborgen mededelingen als u verborgen mededelingen opnieuw wilt "
|
132 |
+
"weergeven."
|
133 |
+
|
134 |
+
#: admin/options.php:145
|
135 |
+
#, php-format
|
136 |
+
msgid "Reset hidden notices (%s)"
|
137 |
+
msgstr "Reset verborgen mededelingen (%s)"
|
138 |
+
|
139 |
+
#: admin/options.php:147 admin/pages/notices.php:85
|
140 |
+
msgid "Hidden notices are successfully reset, now you can see them again!"
|
141 |
+
msgstr "Verborgen meldingen zijn succesvol gereset, nu kun je ze opnieuw zien!"
|
142 |
+
|
143 |
+
#: admin/pages/notices.php:49
|
144 |
+
msgid "Notices"
|
145 |
+
msgstr "Mededelingen"
|
146 |
+
|
147 |
+
#: admin/pages/notices.php:50
|
148 |
+
msgid "General"
|
149 |
+
msgstr "Algemeen"
|
150 |
+
|
151 |
+
#: disable-admin-notices.php:23
|
152 |
+
msgid ""
|
153 |
+
"We found that you have the \"Clearfy - disable unused features\" plugin "
|
154 |
+
"installed, this plugin already has disable comments functions, so you can "
|
155 |
+
"deactivate plugin \"Disable admin notices\"!"
|
156 |
+
msgstr ""
|
157 |
+
|
158 |
+
#: disable-admin-notices.php:80
|
159 |
+
msgid "Webcraftic disable admin notices"
|
160 |
+
msgstr "Webcraftic uitschakelen admin mededelingen"
|
161 |
+
|
162 |
+
#: includes/classes/class.configurate-notices.php:79
|
163 |
+
#, php-format
|
164 |
+
msgid "Notifications %s"
|
165 |
+
msgstr "Meldingen %s"
|
166 |
+
|
167 |
+
#: includes/classes/class.configurate-notices.php:88
|
168 |
+
msgid "Restore notice"
|
169 |
+
msgstr "Herstel mededelingen"
|
170 |
+
|
171 |
+
#: includes/classes/class.configurate-notices.php:267
|
172 |
+
msgid "Hide notification forever"
|
173 |
msgstr "Verberg melding voor altijd"
|
languages/disable-admin-notices-pt_BR.po
CHANGED
@@ -1,181 +1,181 @@
|
|
1 |
-
msgid ""
|
2 |
-
msgstr ""
|
3 |
-
"Project-Id-Version: clearfy\n"
|
4 |
-
"POT-Creation-Date: 2018-09-06 18:31+0300\n"
|
5 |
-
"PO-Revision-Date: 2018-09-06 18:31+0300\n"
|
6 |
-
"Last-Translator: alex.kovalevv@gmail.com <alex.kovalevv@gmail.com>\n"
|
7 |
-
"Language-Team: Alex Kovalev <alex.kovalevv@gmail.com>\n"
|
8 |
-
"Language: pt_BR\n"
|
9 |
-
"MIME-Version: 1.0\n"
|
10 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
-
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Poedit 2.1.1\n"
|
13 |
-
"X-Poedit-Basepath: ..\n"
|
14 |
-
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
15 |
-
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
16 |
-
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
-
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
|
18 |
-
"X-Poedit-SearchPath-0: .\n"
|
19 |
-
"X-Poedit-SearchPathExcluded-0: libs\n"
|
20 |
-
"X-Poedit-SearchPathExcluded-1: components\n"
|
21 |
-
"X-Poedit-SearchPathExcluded-2: cache\n"
|
22 |
-
|
23 |
-
#: admin/ajax/hide-notice.php:19 admin/ajax/restore-notice.php:19
|
24 |
-
msgid "You don't have enough capability to edit this information."
|
25 |
-
msgstr "Você não tem capacidade suficiente para editar essas informações."
|
26 |
-
|
27 |
-
#: admin/ajax/hide-notice.php:32 admin/ajax/restore-notice.php:28
|
28 |
-
msgid "Undefinded notice id."
|
29 |
-
msgstr "ID de aviso não identificada."
|
30 |
-
|
31 |
-
#: admin/ajax/hide-notice.php:46 admin/ajax/restore-notice.php:40
|
32 |
-
msgid "Success"
|
33 |
-
msgstr "Sucesso"
|
34 |
-
|
35 |
-
#: admin/boot.php:18 admin/options.php:30 admin/pages/notices.php:33
|
36 |
-
msgid "Hide admin notices"
|
37 |
-
msgstr "Ocultar avisos de administrador"
|
38 |
-
|
39 |
-
#: admin/boot.php:24 admin/options.php:70
|
40 |
-
msgid "Enable hidden notices in adminbar"
|
41 |
-
msgstr "Ativar avisos ocultos no adminbar"
|
42 |
-
|
43 |
-
#: admin/boot.php:46
|
44 |
-
msgid "Get ultimate plugin free"
|
45 |
-
msgstr "Obtenha o melhor plugin grátis"
|
46 |
-
|
47 |
-
#: admin/options.php:23
|
48 |
-
msgid "Admin notifications, Update nags"
|
49 |
-
msgstr "Notificações de administrador, Atualizações nags"
|
50 |
-
|
51 |
-
#: admin/options.php:23
|
52 |
-
msgid ""
|
53 |
-
"Do you know the situation, when some plugin offers you to update to premium, "
|
54 |
-
"to collect technical data and shows many annoying notices? You are close "
|
55 |
-
"these notices every now and again but they newly appears and interfere your "
|
56 |
-
"work with WordPress. Even worse, some plugin’s authors delete “close” button "
|
57 |
-
"from notices and they shows in your admin panel forever."
|
58 |
-
msgstr ""
|
59 |
-
"Você conhece a situação, quando algum plugin lhe oferece para atualizar para "
|
60 |
-
"premium, para coletar dados técnicos e mostra muitos avisos irritantes? Você "
|
61 |
-
"está próximo desses avisos de vez em quando, mas eles aparecem recentemente "
|
62 |
-
"e interferem no seu trabalho com o WordPress. Pior ainda, alguns autores de "
|
63 |
-
"plug-in excluem o botão “fechar” dos avisos e eles são exibidos no seu "
|
64 |
-
"painel de administração para sempre."
|
65 |
-
|
66 |
-
#: admin/options.php:34
|
67 |
-
msgid "All notices"
|
68 |
-
msgstr "Todos os avisos"
|
69 |
-
|
70 |
-
#: admin/options.php:35
|
71 |
-
msgid "Hide all notices globally."
|
72 |
-
msgstr "Esconda todos os avisos globalmente."
|
73 |
-
|
74 |
-
#: admin/options.php:39
|
75 |
-
msgid "Only selected"
|
76 |
-
msgstr "Apenas selecionado"
|
77 |
-
|
78 |
-
#: admin/options.php:40
|
79 |
-
msgid ""
|
80 |
-
"Hide selected notices only. You will see the link \"Hide notification forever"
|
81 |
-
"\" in each notice. Push it and they will not bother you anymore."
|
82 |
-
msgstr ""
|
83 |
-
"Ocultar apenas avisos selecionados. Você verá o link \"Ocultar notificação "
|
84 |
-
"para sempre\" em cada aviso. Empurre-o e eles não vão incomodá-lo mais."
|
85 |
-
|
86 |
-
#: admin/options.php:44
|
87 |
-
msgid "Don't nide"
|
88 |
-
msgstr "Não nide"
|
89 |
-
|
90 |
-
#: admin/options.php:45
|
91 |
-
msgid ""
|
92 |
-
"Do not hide notices and do not show “Hide notification forever” link for "
|
93 |
-
"admin."
|
94 |
-
msgstr ""
|
95 |
-
"Não oculte avisos e não mostre o link \"Ocultar notificação para sempre\" "
|
96 |
-
"para o administrador."
|
97 |
-
|
98 |
-
#: admin/options.php:49
|
99 |
-
msgid ""
|
100 |
-
"Some plugins shows notifications about premium version, data collecting or "
|
101 |
-
"promote their services. Even if you push close button (that sometimes are "
|
102 |
-
"impossible), notices are shows again in some time. This option allows you to "
|
103 |
-
"control notices. Hide them all or each individually. Some plugins shows "
|
104 |
-
"notifications about premium version, data collecting or promote their "
|
105 |
-
"services. Even if you push close button (that sometimes are impossible), "
|
106 |
-
"notices are shows again in some time. This option allows you to control "
|
107 |
-
"notices. Hide them all or each individually."
|
108 |
-
msgstr ""
|
109 |
-
"Alguns plugins mostram notificações sobre a versão premium, coleta de dados "
|
110 |
-
"ou promover seus serviços. Mesmo se você apertar o botão fechar (que às "
|
111 |
-
"vezes são impossíveis), os avisos são exibidos novamente em algum momento. "
|
112 |
-
"Esta opção permite controlar avisos. Esconda-os todos ou cada um "
|
113 |
-
"individualmente. Alguns plugins mostram notificações sobre a versão premium, "
|
114 |
-
"coleta de dados ou promover seus serviços. Mesmo se você apertar o botão "
|
115 |
-
"fechar (que às vezes são impossíveis), os avisos são exibidos novamente em "
|
116 |
-
"algum momento. Esta opção permite controlar avisos. Esconda-os todos ou cada "
|
117 |
-
"um individualmente."
|
118 |
-
|
119 |
-
#: admin/options.php:72
|
120 |
-
msgid ""
|
121 |
-
"By default, the plugin hides all notices, which you specified. If you enable "
|
122 |
-
"this option, the plugin will collect all hidden notices and show them into "
|
123 |
-
"the top admin toolbar. It will not disturb you but will allow to look "
|
124 |
-
"notices at your convenience."
|
125 |
-
msgstr ""
|
126 |
-
"Por padrão, o plug-in oculta todos os avisos especificados. Se você ativar "
|
127 |
-
"essa opção, o plug-in coletará todos os avisos ocultos e os mostrará na "
|
128 |
-
"barra de ferramentas superior do administrador. Não o incomodará, mas "
|
129 |
-
"permitirá que você veja avisos de acordo com sua conveniência."
|
130 |
-
|
131 |
-
#: admin/options.php:136
|
132 |
-
msgid "Push reset hidden notices if you need to show hidden notices again."
|
133 |
-
msgstr ""
|
134 |
-
"Envie os avisos ocultos redefinidos se precisar mostrar avisos ocultos "
|
135 |
-
"novamente."
|
136 |
-
|
137 |
-
#: admin/options.php:145
|
138 |
-
#, php-format
|
139 |
-
msgid "Reset hidden notices (%s)"
|
140 |
-
msgstr "Redefinir avisos ocultos ( %s )"
|
141 |
-
|
142 |
-
#: admin/options.php:147 admin/pages/notices.php:85
|
143 |
-
msgid "Hidden notices are successfully reset, now you can see them again!"
|
144 |
-
msgstr ""
|
145 |
-
"Avisos ocultos são redefinidos com sucesso, agora você pode vê-los novamente!"
|
146 |
-
|
147 |
-
#: admin/pages/notices.php:49
|
148 |
-
msgid "Notices"
|
149 |
-
msgstr "Avisos"
|
150 |
-
|
151 |
-
#: admin/pages/notices.php:50
|
152 |
-
msgid "General"
|
153 |
-
msgstr "Geral"
|
154 |
-
|
155 |
-
#: disable-admin-notices.php:23
|
156 |
-
msgid ""
|
157 |
-
"We found that you have the \"Clearfy - disable unused features\" plugin "
|
158 |
-
"installed, this plugin already has disable comments functions, so you can "
|
159 |
-
"deactivate plugin \"Disable admin notices\"!"
|
160 |
-
msgstr ""
|
161 |
-
"Descobrimos que você tem o plug-in \"Clearfy - desativar recursos não "
|
162 |
-
"utilizados \" instalado, este plugin já tem funções de desabilitar "
|
163 |
-
"comentários, então você pode desativar o plugin \"Desativar avisos do "
|
164 |
-
"administrador \"!"
|
165 |
-
|
166 |
-
#: disable-admin-notices.php:80
|
167 |
-
msgid "Webcraftic disable admin notices"
|
168 |
-
msgstr "Webcraftic desabilitar avisos de administração"
|
169 |
-
|
170 |
-
#: includes/classes/class.configurate-notices.php:79
|
171 |
-
#, php-format
|
172 |
-
msgid "Notifications %s"
|
173 |
-
msgstr "Notificações %s"
|
174 |
-
|
175 |
-
#: includes/classes/class.configurate-notices.php:88
|
176 |
-
msgid "Restore notice"
|
177 |
-
msgstr "Aviso de restauração"
|
178 |
-
|
179 |
-
#: includes/classes/class.configurate-notices.php:267
|
180 |
-
msgid "Hide notification forever"
|
181 |
msgstr "Ocultar a notificação para sempre"
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: clearfy\n"
|
4 |
+
"POT-Creation-Date: 2018-09-06 18:31+0300\n"
|
5 |
+
"PO-Revision-Date: 2018-09-06 18:31+0300\n"
|
6 |
+
"Last-Translator: alex.kovalevv@gmail.com <alex.kovalevv@gmail.com>\n"
|
7 |
+
"Language-Team: Alex Kovalev <alex.kovalevv@gmail.com>\n"
|
8 |
+
"Language: pt_BR\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.1.1\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
15 |
+
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
16 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
|
18 |
+
"X-Poedit-SearchPath-0: .\n"
|
19 |
+
"X-Poedit-SearchPathExcluded-0: libs\n"
|
20 |
+
"X-Poedit-SearchPathExcluded-1: components\n"
|
21 |
+
"X-Poedit-SearchPathExcluded-2: cache\n"
|
22 |
+
|
23 |
+
#: admin/ajax/hide-notice.php:19 admin/ajax/restore-notice.php:19
|
24 |
+
msgid "You don't have enough capability to edit this information."
|
25 |
+
msgstr "Você não tem capacidade suficiente para editar essas informações."
|
26 |
+
|
27 |
+
#: admin/ajax/hide-notice.php:32 admin/ajax/restore-notice.php:28
|
28 |
+
msgid "Undefinded notice id."
|
29 |
+
msgstr "ID de aviso não identificada."
|
30 |
+
|
31 |
+
#: admin/ajax/hide-notice.php:46 admin/ajax/restore-notice.php:40
|
32 |
+
msgid "Success"
|
33 |
+
msgstr "Sucesso"
|
34 |
+
|
35 |
+
#: admin/boot.php:18 admin/options.php:30 admin/pages/notices.php:33
|
36 |
+
msgid "Hide admin notices"
|
37 |
+
msgstr "Ocultar avisos de administrador"
|
38 |
+
|
39 |
+
#: admin/boot.php:24 admin/options.php:70
|
40 |
+
msgid "Enable hidden notices in adminbar"
|
41 |
+
msgstr "Ativar avisos ocultos no adminbar"
|
42 |
+
|
43 |
+
#: admin/boot.php:46
|
44 |
+
msgid "Get ultimate plugin free"
|
45 |
+
msgstr "Obtenha o melhor plugin grátis"
|
46 |
+
|
47 |
+
#: admin/options.php:23
|
48 |
+
msgid "Admin notifications, Update nags"
|
49 |
+
msgstr "Notificações de administrador, Atualizações nags"
|
50 |
+
|
51 |
+
#: admin/options.php:23
|
52 |
+
msgid ""
|
53 |
+
"Do you know the situation, when some plugin offers you to update to premium, "
|
54 |
+
"to collect technical data and shows many annoying notices? You are close "
|
55 |
+
"these notices every now and again but they newly appears and interfere your "
|
56 |
+
"work with WordPress. Even worse, some plugin’s authors delete “close” button "
|
57 |
+
"from notices and they shows in your admin panel forever."
|
58 |
+
msgstr ""
|
59 |
+
"Você conhece a situação, quando algum plugin lhe oferece para atualizar para "
|
60 |
+
"premium, para coletar dados técnicos e mostra muitos avisos irritantes? Você "
|
61 |
+
"está próximo desses avisos de vez em quando, mas eles aparecem recentemente "
|
62 |
+
"e interferem no seu trabalho com o WordPress. Pior ainda, alguns autores de "
|
63 |
+
"plug-in excluem o botão “fechar” dos avisos e eles são exibidos no seu "
|
64 |
+
"painel de administração para sempre."
|
65 |
+
|
66 |
+
#: admin/options.php:34
|
67 |
+
msgid "All notices"
|
68 |
+
msgstr "Todos os avisos"
|
69 |
+
|
70 |
+
#: admin/options.php:35
|
71 |
+
msgid "Hide all notices globally."
|
72 |
+
msgstr "Esconda todos os avisos globalmente."
|
73 |
+
|
74 |
+
#: admin/options.php:39
|
75 |
+
msgid "Only selected"
|
76 |
+
msgstr "Apenas selecionado"
|
77 |
+
|
78 |
+
#: admin/options.php:40
|
79 |
+
msgid ""
|
80 |
+
"Hide selected notices only. You will see the link \"Hide notification forever"
|
81 |
+
"\" in each notice. Push it and they will not bother you anymore."
|
82 |
+
msgstr ""
|
83 |
+
"Ocultar apenas avisos selecionados. Você verá o link \"Ocultar notificação "
|
84 |
+
"para sempre\" em cada aviso. Empurre-o e eles não vão incomodá-lo mais."
|
85 |
+
|
86 |
+
#: admin/options.php:44
|
87 |
+
msgid "Don't nide"
|
88 |
+
msgstr "Não nide"
|
89 |
+
|
90 |
+
#: admin/options.php:45
|
91 |
+
msgid ""
|
92 |
+
"Do not hide notices and do not show “Hide notification forever” link for "
|
93 |
+
"admin."
|
94 |
+
msgstr ""
|
95 |
+
"Não oculte avisos e não mostre o link \"Ocultar notificação para sempre\" "
|
96 |
+
"para o administrador."
|
97 |
+
|
98 |
+
#: admin/options.php:49
|
99 |
+
msgid ""
|
100 |
+
"Some plugins shows notifications about premium version, data collecting or "
|
101 |
+
"promote their services. Even if you push close button (that sometimes are "
|
102 |
+
"impossible), notices are shows again in some time. This option allows you to "
|
103 |
+
"control notices. Hide them all or each individually. Some plugins shows "
|
104 |
+
"notifications about premium version, data collecting or promote their "
|
105 |
+
"services. Even if you push close button (that sometimes are impossible), "
|
106 |
+
"notices are shows again in some time. This option allows you to control "
|
107 |
+
"notices. Hide them all or each individually."
|
108 |
+
msgstr ""
|
109 |
+
"Alguns plugins mostram notificações sobre a versão premium, coleta de dados "
|
110 |
+
"ou promover seus serviços. Mesmo se você apertar o botão fechar (que às "
|
111 |
+
"vezes são impossíveis), os avisos são exibidos novamente em algum momento. "
|
112 |
+
"Esta opção permite controlar avisos. Esconda-os todos ou cada um "
|
113 |
+
"individualmente. Alguns plugins mostram notificações sobre a versão premium, "
|
114 |
+
"coleta de dados ou promover seus serviços. Mesmo se você apertar o botão "
|
115 |
+
"fechar (que às vezes são impossíveis), os avisos são exibidos novamente em "
|
116 |
+
"algum momento. Esta opção permite controlar avisos. Esconda-os todos ou cada "
|
117 |
+
"um individualmente."
|
118 |
+
|
119 |
+
#: admin/options.php:72
|
120 |
+
msgid ""
|
121 |
+
"By default, the plugin hides all notices, which you specified. If you enable "
|
122 |
+
"this option, the plugin will collect all hidden notices and show them into "
|
123 |
+
"the top admin toolbar. It will not disturb you but will allow to look "
|
124 |
+
"notices at your convenience."
|
125 |
+
msgstr ""
|
126 |
+
"Por padrão, o plug-in oculta todos os avisos especificados. Se você ativar "
|
127 |
+
"essa opção, o plug-in coletará todos os avisos ocultos e os mostrará na "
|
128 |
+
"barra de ferramentas superior do administrador. Não o incomodará, mas "
|
129 |
+
"permitirá que você veja avisos de acordo com sua conveniência."
|
130 |
+
|
131 |
+
#: admin/options.php:136
|
132 |
+
msgid "Push reset hidden notices if you need to show hidden notices again."
|
133 |
+
msgstr ""
|
134 |
+
"Envie os avisos ocultos redefinidos se precisar mostrar avisos ocultos "
|
135 |
+
"novamente."
|
136 |
+
|
137 |
+
#: admin/options.php:145
|
138 |
+
#, php-format
|
139 |
+
msgid "Reset hidden notices (%s)"
|
140 |
+
msgstr "Redefinir avisos ocultos ( %s )"
|
141 |
+
|
142 |
+
#: admin/options.php:147 admin/pages/notices.php:85
|
143 |
+
msgid "Hidden notices are successfully reset, now you can see them again!"
|
144 |
+
msgstr ""
|
145 |
+
"Avisos ocultos são redefinidos com sucesso, agora você pode vê-los novamente!"
|
146 |
+
|
147 |
+
#: admin/pages/notices.php:49
|
148 |
+
msgid "Notices"
|
149 |
+
msgstr "Avisos"
|
150 |
+
|
151 |
+
#: admin/pages/notices.php:50
|
152 |
+
msgid "General"
|
153 |
+
msgstr "Geral"
|
154 |
+
|
155 |
+
#: disable-admin-notices.php:23
|
156 |
+
msgid ""
|
157 |
+
"We found that you have the \"Clearfy - disable unused features\" plugin "
|
158 |
+
"installed, this plugin already has disable comments functions, so you can "
|
159 |
+
"deactivate plugin \"Disable admin notices\"!"
|
160 |
+
msgstr ""
|
161 |
+
"Descobrimos que você tem o plug-in \"Clearfy - desativar recursos não "
|
162 |
+
"utilizados \" instalado, este plugin já tem funções de desabilitar "
|
163 |
+
"comentários, então você pode desativar o plugin \"Desativar avisos do "
|
164 |
+
"administrador \"!"
|
165 |
+
|
166 |
+
#: disable-admin-notices.php:80
|
167 |
+
msgid "Webcraftic disable admin notices"
|
168 |
+
msgstr "Webcraftic desabilitar avisos de administração"
|
169 |
+
|
170 |
+
#: includes/classes/class.configurate-notices.php:79
|
171 |
+
#, php-format
|
172 |
+
msgid "Notifications %s"
|
173 |
+
msgstr "Notificações %s"
|
174 |
+
|
175 |
+
#: includes/classes/class.configurate-notices.php:88
|
176 |
+
msgid "Restore notice"
|
177 |
+
msgstr "Aviso de restauração"
|
178 |
+
|
179 |
+
#: includes/classes/class.configurate-notices.php:267
|
180 |
+
msgid "Hide notification forever"
|
181 |
msgstr "Ocultar a notificação para sempre"
|
languages/disable-admin-notices-ru_RU.po
CHANGED
@@ -1,256 +1,256 @@
|
|
1 |
-
msgid ""
|
2 |
-
msgstr ""
|
3 |
-
"Project-Id-Version: clearfy\n"
|
4 |
-
"POT-Creation-Date: 2020-08-27 12:50+0000\n"
|
5 |
-
"PO-Revision-Date: 2020-08-27 12:54+0000\n"
|
6 |
-
"Last-Translator: \n"
|
7 |
-
"Language-Team: Русский\n"
|
8 |
-
"Language: ru_RU\n"
|
9 |
-
"MIME-Version: 1.0\n"
|
10 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
-
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Loco https://localise.biz/\n"
|
13 |
-
"X-Poedit-Basepath: ..\n"
|
14 |
-
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
15 |
-
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
16 |
-
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
-
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
|
18 |
-
"X-Poedit-SearchPath-0: .\n"
|
19 |
-
"X-Poedit-SearchPathExcluded-0: libs\n"
|
20 |
-
"Report-Msgid-Bugs-To: \n"
|
21 |
-
"X-Loco-Version: 2.4.2; wp-5.5"
|
22 |
-
|
23 |
-
#: disable-admin-notices.php:46
|
24 |
-
msgid "Webcraftic disable admin notices"
|
25 |
-
msgstr "Webcraftic отключить уведомления администратора"
|
26 |
-
|
27 |
-
#: admin/boot.php:27
|
28 |
-
msgid "Get ultimate plugin free"
|
29 |
-
msgstr "Получите полную версию плагина бесплатно"
|
30 |
-
|
31 |
-
#: admin/boot.php:82 admin/options.php:66
|
32 |
-
#: admin/pages/class-pages-settings.php:72
|
33 |
-
msgid "Hide admin notices"
|
34 |
-
msgstr "Скрыть уведомления"
|
35 |
-
|
36 |
-
#: admin/boot.php:88 admin/options.php:148
|
37 |
-
msgid "Enable hidden notices in adminbar"
|
38 |
-
msgstr "Включить уведомления в админбаре"
|
39 |
-
|
40 |
-
#: admin/class-page-basic.php:41
|
41 |
-
msgid "Webcraftic Disable Admin Notices"
|
42 |
-
msgstr "Webcraftic Disable Admin Notices"
|
43 |
-
|
44 |
-
#: admin/options.php:33
|
45 |
-
msgid "Admin notifications, Update nags"
|
46 |
-
msgstr "Уведомления администратора, уведомления об обновлении Wordpress"
|
47 |
-
|
48 |
-
#: admin/options.php:33
|
49 |
-
msgid ""
|
50 |
-
"Do you know the situation, when some plugin offers you to update to premium, "
|
51 |
-
"to collect technical data and shows many annoying notices? You are close "
|
52 |
-
"these notices every now and again but they newly appears and interfere your "
|
53 |
-
"work with WordPress. Even worse, some plugin’s authors delete “close” button "
|
54 |
-
"from notices and they shows in your admin panel forever."
|
55 |
-
msgstr ""
|
56 |
-
"Вам знакома ситуация, когда какой-то плагин просит вас обновиться до премиум-"
|
57 |
-
"версии, получить права на сбор данных о вашем сайте и создает много "
|
58 |
-
"раздражающих уведомлений? Вы закрываете эти уведомления раз за разом, но они "
|
59 |
-
"вновь появляются и мешают вашей работе с WordPress. Хуже того, некоторые "
|
60 |
-
"авторы и вовсе удаляют кнопку “закрыть” из уведомлений, и они висят в шапке "
|
61 |
-
"вашей панели администратора целую вечность."
|
62 |
-
|
63 |
-
#: admin/options.php:39
|
64 |
-
msgid "Don't hide"
|
65 |
-
msgstr "Не скрывать"
|
66 |
-
|
67 |
-
#: admin/options.php:40
|
68 |
-
msgid ""
|
69 |
-
"Do not hide notices and do not show “Hide notification forever” link for "
|
70 |
-
"admin."
|
71 |
-
msgstr ""
|
72 |
-
"Не скрывать уведомления и не показывать ссылку \"Скрыть уведомление "
|
73 |
-
"навсегда\" в уведомлениях администратора."
|
74 |
-
|
75 |
-
#: admin/options.php:44
|
76 |
-
msgid "All notices"
|
77 |
-
msgstr "Все уведомления"
|
78 |
-
|
79 |
-
#: admin/options.php:45
|
80 |
-
msgid "Hide all notices globally."
|
81 |
-
msgstr "Скрыть все уведомления глобально."
|
82 |
-
|
83 |
-
#: admin/options.php:45 admin/options.php:50 admin/options.php:58
|
84 |
-
#, php-format
|
85 |
-
msgid ""
|
86 |
-
"Watch the <a href=\"%s\" target=\"_blank\">video</a> to find out how it "
|
87 |
-
"works ."
|
88 |
-
msgstr ""
|
89 |
-
"Посмотрите <a href=\"%s\" target=\"_blank\">видео</a> о том, как это "
|
90 |
-
"работает."
|
91 |
-
|
92 |
-
#: admin/options.php:49
|
93 |
-
msgid "Only selected"
|
94 |
-
msgstr "Только выбранные"
|
95 |
-
|
96 |
-
#: admin/options.php:50
|
97 |
-
msgid ""
|
98 |
-
"Hide selected notices only. You will see the link \"Hide notification "
|
99 |
-
"forever\" in each notice. Push it and they will not bother you anymore."
|
100 |
-
msgstr ""
|
101 |
-
"Скрывать только выбранные уведомления. В каждом уведомлении вы увидите "
|
102 |
-
"ссылку \"Скрыть уведомление навсегда\". Нажмите на неё и уведомление будет "
|
103 |
-
"скрыто навсегда и перестанет вас беспокоить."
|
104 |
-
|
105 |
-
#: admin/options.php:57
|
106 |
-
msgid "Compact panel"
|
107 |
-
msgstr "Компактная панель"
|
108 |
-
|
109 |
-
#: admin/options.php:58
|
110 |
-
msgid ""
|
111 |
-
"Collapse all notifications in one line (panel with notification counters), "
|
112 |
-
"to see the notifications, you will need to click this panel."
|
113 |
-
msgstr ""
|
114 |
-
"Свернуть все уведомления в одну строку (панель со счетчиками уведомлений), "
|
115 |
-
"чтобы увидеть уведомления, вам нужно будет нажать на эту панель."
|
116 |
-
|
117 |
-
#: admin/options.php:69
|
118 |
-
msgid ""
|
119 |
-
"Some plugins shows notifications about premium version, data collecting or "
|
120 |
-
"promote their services. Even if you push close button (that sometimes are "
|
121 |
-
"impossible), notices are shows again in some time. This option allows you to "
|
122 |
-
"control notices. Hide them all or each individually. Some plugins shows "
|
123 |
-
"notifications about premium version, data collecting or promote their "
|
124 |
-
"services. Even if you push close button (that sometimes are impossible), "
|
125 |
-
"notices are shows again in some time. This option allows you to control "
|
126 |
-
"notices. Hide them all or each individually."
|
127 |
-
msgstr ""
|
128 |
-
"Зачастую, плагины отображают уведомления о возможности перехода на премиум "
|
129 |
-
"версию, просят разрешение на сбор данных, рекламируют свои услуги. Даже если "
|
130 |
-
"вы нажмете кнопку закрыть (что не всегда возможно), уведомления всё равно "
|
131 |
-
"отобразятся через какое-то время. С помощью этой настройки, вы можете "
|
132 |
-
"контролировать эти уведомления. Скройте их все сразу или каждое по "
|
133 |
-
"отдельности."
|
134 |
-
|
135 |
-
#: admin/options.php:92 admin/options.php:94
|
136 |
-
msgid "Disable plugins updates nags"
|
137 |
-
msgstr "Отключить уведомления об обновлении плагинов"
|
138 |
-
|
139 |
-
#: admin/options.php:103 admin/options.php:105
|
140 |
-
msgid "Disable core updates nags"
|
141 |
-
msgstr "Отключить уведомления об обновлении Wordpress"
|
142 |
-
|
143 |
-
#: admin/options.php:150
|
144 |
-
msgid ""
|
145 |
-
"By default, the plugin hides all notices, which you specified. If you enable "
|
146 |
-
"this option, the plugin will collect all hidden notices and show them into "
|
147 |
-
"the top admin toolbar. It will not disturb you but will allow to look "
|
148 |
-
"notices at your convenience."
|
149 |
-
msgstr ""
|
150 |
-
"По умолчанию, плагин полностью скрывает отключенные вами уведомления. Если "
|
151 |
-
"включить эту опцию, то плагин будет собирать все скрытые вами уведомления и "
|
152 |
-
"выводить в верхней панели администратора. Это не будет вас раздражать, но и "
|
153 |
-
"позволит просматривать уведомления, когда вам это удобно."
|
154 |
-
|
155 |
-
#: admin/options.php:235
|
156 |
-
msgid "Reset hidden notices for"
|
157 |
-
msgstr "Сброс скрытых уведомлений для"
|
158 |
-
|
159 |
-
#: admin/options.php:238
|
160 |
-
msgid "Push reset hidden notices if you need to show hidden notices again."
|
161 |
-
msgstr "Нажмите кнопку \\\"Сбросить скрытые уведомления\\\""
|
162 |
-
|
163 |
-
#: admin/options.php:249
|
164 |
-
msgid "current user"
|
165 |
-
msgstr "Текущий пользователь"
|
166 |
-
|
167 |
-
#: admin/options.php:253
|
168 |
-
msgid "all users"
|
169 |
-
msgstr "Все пользователи"
|
170 |
-
|
171 |
-
#: admin/options.php:257
|
172 |
-
msgid "Reset notices"
|
173 |
-
msgstr "Сбросить уведомления"
|
174 |
-
|
175 |
-
#: admin/options.php:261 admin/pages/class-pages-settings.php:116
|
176 |
-
msgid "Hidden notices are successfully reset, now you can see them again!"
|
177 |
-
msgstr ""
|
178 |
-
"Скрытые уведомления успешно восстановлены, теперь вы можете снова видеть их!"
|
179 |
-
|
180 |
-
#: admin/ajax/hide-notice.php:27 admin/ajax/restore-notice.php:24
|
181 |
-
msgid "Undefinded notice id."
|
182 |
-
msgstr "Не передан notice id."
|
183 |
-
|
184 |
-
#: admin/ajax/hide-notice.php:59 admin/ajax/restore-notice.php:45
|
185 |
-
msgid "You don't have enough capability to edit this information."
|
186 |
-
msgstr "Вы не имеете разрешения на редактирование этого!"
|
187 |
-
|
188 |
-
#: admin/pages/class-pages-edit-admin-bar.php:53
|
189 |
-
msgid "Hide adminbar items"
|
190 |
-
msgstr "Меню админбара"
|
191 |
-
|
192 |
-
#: admin/pages/class-pages-edit-admin-bar.php:54
|
193 |
-
msgid "You can hide an annoying adminbar menu"
|
194 |
-
msgstr "Скрытие пунктов меню админбара"
|
195 |
-
|
196 |
-
#: admin/pages/class-pages-edit-redirects.php:53
|
197 |
-
msgid "Block ad redirects"
|
198 |
-
msgstr "Рекламные редиректы"
|
199 |
-
|
200 |
-
#: admin/pages/class-pages-edit-redirects.php:54
|
201 |
-
msgid "Break advertising redirects"
|
202 |
-
msgstr "Отключение рекламных редиректов"
|
203 |
-
|
204 |
-
#: admin/pages/class-pages-notices.php:51
|
205 |
-
msgid "Hidden notices"
|
206 |
-
msgstr "Скрытые нотисы"
|
207 |
-
|
208 |
-
#: admin/pages/class-pages-notices.php:52
|
209 |
-
msgid "Manage hidden notices"
|
210 |
-
msgstr "Управление скрытыми нотисами"
|
211 |
-
|
212 |
-
#: admin/pages/class-pages-settings.php:73
|
213 |
-
msgid "General settings"
|
214 |
-
msgstr "Основные настройки"
|
215 |
-
|
216 |
-
#: admin/pages/class-pages-settings.php:85
|
217 |
-
msgid "Settings"
|
218 |
-
msgstr "Настройки"
|
219 |
-
|
220 |
-
#: includes/classes/class-configurate-notices.php:81
|
221 |
-
#, php-format
|
222 |
-
msgid "Notifications %s"
|
223 |
-
msgstr "Уведомления %s"
|
224 |
-
|
225 |
-
#: includes/classes/class-configurate-notices.php:92
|
226 |
-
msgid "Hidden for you"
|
227 |
-
msgstr "Скрытые для Вас"
|
228 |
-
|
229 |
-
#: includes/classes/class-configurate-notices.php:289
|
230 |
-
msgid "Hide <b>for me</b>"
|
231 |
-
msgstr "Скрыть для меня"
|
232 |
-
|
233 |
-
#: includes/classes/class-configurate-notices.php:293
|
234 |
-
msgid "Hide <b>for all</b>"
|
235 |
-
msgstr "Скрыть для всех"
|
236 |
-
|
237 |
-
#. Name of the plugin
|
238 |
-
msgid "Disable Admin Notices Individually"
|
239 |
-
msgstr "Disable Admin Notices Individually"
|
240 |
-
|
241 |
-
#. Description of the plugin
|
242 |
-
msgid ""
|
243 |
-
"Disable admin notices plugin gives you the option to hide updates warnings "
|
244 |
-
"and inline notices in the admin panel."
|
245 |
-
msgstr ""
|
246 |
-
"Плагин Disable admin notices дает вам возможность скрыть предупреждения об "
|
247 |
-
"обновлениях и встроенные уведомления в панели администратора."
|
248 |
-
|
249 |
-
#. URI of the plugin
|
250 |
-
#. Author URI of the plugin
|
251 |
-
msgid "https://webcraftic.com"
|
252 |
-
msgstr "https://webcraftic.com"
|
253 |
-
|
254 |
-
#. Author of the plugin
|
255 |
-
msgid "Webcraftic <wordpress.webraftic@gmail.com>"
|
256 |
-
msgstr "Webcraftic <wordpress.webraftic@gmail.com>"
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: clearfy\n"
|
4 |
+
"POT-Creation-Date: 2020-08-27 12:50+0000\n"
|
5 |
+
"PO-Revision-Date: 2020-08-27 12:54+0000\n"
|
6 |
+
"Last-Translator: \n"
|
7 |
+
"Language-Team: Русский\n"
|
8 |
+
"Language: ru_RU\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Loco https://localise.biz/\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
15 |
+
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
16 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
|
18 |
+
"X-Poedit-SearchPath-0: .\n"
|
19 |
+
"X-Poedit-SearchPathExcluded-0: libs\n"
|
20 |
+
"Report-Msgid-Bugs-To: \n"
|
21 |
+
"X-Loco-Version: 2.4.2; wp-5.5"
|
22 |
+
|
23 |
+
#: disable-admin-notices.php:46
|
24 |
+
msgid "Webcraftic disable admin notices"
|
25 |
+
msgstr "Webcraftic отключить уведомления администратора"
|
26 |
+
|
27 |
+
#: admin/boot.php:27
|
28 |
+
msgid "Get ultimate plugin free"
|
29 |
+
msgstr "Получите полную версию плагина бесплатно"
|
30 |
+
|
31 |
+
#: admin/boot.php:82 admin/options.php:66
|
32 |
+
#: admin/pages/class-pages-settings.php:72
|
33 |
+
msgid "Hide admin notices"
|
34 |
+
msgstr "Скрыть уведомления"
|
35 |
+
|
36 |
+
#: admin/boot.php:88 admin/options.php:148
|
37 |
+
msgid "Enable hidden notices in adminbar"
|
38 |
+
msgstr "Включить уведомления в админбаре"
|
39 |
+
|
40 |
+
#: admin/class-page-basic.php:41
|
41 |
+
msgid "Webcraftic Disable Admin Notices"
|
42 |
+
msgstr "Webcraftic Disable Admin Notices"
|
43 |
+
|
44 |
+
#: admin/options.php:33
|
45 |
+
msgid "Admin notifications, Update nags"
|
46 |
+
msgstr "Уведомления администратора, уведомления об обновлении Wordpress"
|
47 |
+
|
48 |
+
#: admin/options.php:33
|
49 |
+
msgid ""
|
50 |
+
"Do you know the situation, when some plugin offers you to update to premium, "
|
51 |
+
"to collect technical data and shows many annoying notices? You are close "
|
52 |
+
"these notices every now and again but they newly appears and interfere your "
|
53 |
+
"work with WordPress. Even worse, some plugin’s authors delete “close” button "
|
54 |
+
"from notices and they shows in your admin panel forever."
|
55 |
+
msgstr ""
|
56 |
+
"Вам знакома ситуация, когда какой-то плагин просит вас обновиться до премиум-"
|
57 |
+
"версии, получить права на сбор данных о вашем сайте и создает много "
|
58 |
+
"раздражающих уведомлений? Вы закрываете эти уведомления раз за разом, но они "
|
59 |
+
"вновь появляются и мешают вашей работе с WordPress. Хуже того, некоторые "
|
60 |
+
"авторы и вовсе удаляют кнопку “закрыть” из уведомлений, и они висят в шапке "
|
61 |
+
"вашей панели администратора целую вечность."
|
62 |
+
|
63 |
+
#: admin/options.php:39
|
64 |
+
msgid "Don't hide"
|
65 |
+
msgstr "Не скрывать"
|
66 |
+
|
67 |
+
#: admin/options.php:40
|
68 |
+
msgid ""
|
69 |
+
"Do not hide notices and do not show “Hide notification forever” link for "
|
70 |
+
"admin."
|
71 |
+
msgstr ""
|
72 |
+
"Не скрывать уведомления и не показывать ссылку \"Скрыть уведомление "
|
73 |
+
"навсегда\" в уведомлениях администратора."
|
74 |
+
|
75 |
+
#: admin/options.php:44
|
76 |
+
msgid "All notices"
|
77 |
+
msgstr "Все уведомления"
|
78 |
+
|
79 |
+
#: admin/options.php:45
|
80 |
+
msgid "Hide all notices globally."
|
81 |
+
msgstr "Скрыть все уведомления глобально."
|
82 |
+
|
83 |
+
#: admin/options.php:45 admin/options.php:50 admin/options.php:58
|
84 |
+
#, php-format
|
85 |
+
msgid ""
|
86 |
+
"Watch the <a href=\"%s\" target=\"_blank\">video</a> to find out how it "
|
87 |
+
"works ."
|
88 |
+
msgstr ""
|
89 |
+
"Посмотрите <a href=\"%s\" target=\"_blank\">видео</a> о том, как это "
|
90 |
+
"работает."
|
91 |
+
|
92 |
+
#: admin/options.php:49
|
93 |
+
msgid "Only selected"
|
94 |
+
msgstr "Только выбранные"
|
95 |
+
|
96 |
+
#: admin/options.php:50
|
97 |
+
msgid ""
|
98 |
+
"Hide selected notices only. You will see the link \"Hide notification "
|
99 |
+
"forever\" in each notice. Push it and they will not bother you anymore."
|
100 |
+
msgstr ""
|
101 |
+
"Скрывать только выбранные уведомления. В каждом уведомлении вы увидите "
|
102 |
+
"ссылку \"Скрыть уведомление навсегда\". Нажмите на неё и уведомление будет "
|
103 |
+
"скрыто навсегда и перестанет вас беспокоить."
|
104 |
+
|
105 |
+
#: admin/options.php:57
|
106 |
+
msgid "Compact panel"
|
107 |
+
msgstr "Компактная панель"
|
108 |
+
|
109 |
+
#: admin/options.php:58
|
110 |
+
msgid ""
|
111 |
+
"Collapse all notifications in one line (panel with notification counters), "
|
112 |
+
"to see the notifications, you will need to click this panel."
|
113 |
+
msgstr ""
|
114 |
+
"Свернуть все уведомления в одну строку (панель со счетчиками уведомлений), "
|
115 |
+
"чтобы увидеть уведомления, вам нужно будет нажать на эту панель."
|
116 |
+
|
117 |
+
#: admin/options.php:69
|
118 |
+
msgid ""
|
119 |
+
"Some plugins shows notifications about premium version, data collecting or "
|
120 |
+
"promote their services. Even if you push close button (that sometimes are "
|
121 |
+
"impossible), notices are shows again in some time. This option allows you to "
|
122 |
+
"control notices. Hide them all or each individually. Some plugins shows "
|
123 |
+
"notifications about premium version, data collecting or promote their "
|
124 |
+
"services. Even if you push close button (that sometimes are impossible), "
|
125 |
+
"notices are shows again in some time. This option allows you to control "
|
126 |
+
"notices. Hide them all or each individually."
|
127 |
+
msgstr ""
|
128 |
+
"Зачастую, плагины отображают уведомления о возможности перехода на премиум "
|
129 |
+
"версию, просят разрешение на сбор данных, рекламируют свои услуги. Даже если "
|
130 |
+
"вы нажмете кнопку закрыть (что не всегда возможно), уведомления всё равно "
|
131 |
+
"отобразятся через какое-то время. С помощью этой настройки, вы можете "
|
132 |
+
"контролировать эти уведомления. Скройте их все сразу или каждое по "
|
133 |
+
"отдельности."
|
134 |
+
|
135 |
+
#: admin/options.php:92 admin/options.php:94
|
136 |
+
msgid "Disable plugins updates nags"
|
137 |
+
msgstr "Отключить уведомления об обновлении плагинов"
|
138 |
+
|
139 |
+
#: admin/options.php:103 admin/options.php:105
|
140 |
+
msgid "Disable core updates nags"
|
141 |
+
msgstr "Отключить уведомления об обновлении Wordpress"
|
142 |
+
|
143 |
+
#: admin/options.php:150
|
144 |
+
msgid ""
|
145 |
+
"By default, the plugin hides all notices, which you specified. If you enable "
|
146 |
+
"this option, the plugin will collect all hidden notices and show them into "
|
147 |
+
"the top admin toolbar. It will not disturb you but will allow to look "
|
148 |
+
"notices at your convenience."
|
149 |
+
msgstr ""
|
150 |
+
"По умолчанию, плагин полностью скрывает отключенные вами уведомления. Если "
|
151 |
+
"включить эту опцию, то плагин будет собирать все скрытые вами уведомления и "
|
152 |
+
"выводить в верхней панели администратора. Это не будет вас раздражать, но и "
|
153 |
+
"позволит просматривать уведомления, когда вам это удобно."
|
154 |
+
|
155 |
+
#: admin/options.php:235
|
156 |
+
msgid "Reset hidden notices for"
|
157 |
+
msgstr "Сброс скрытых уведомлений для"
|
158 |
+
|
159 |
+
#: admin/options.php:238
|
160 |
+
msgid "Push reset hidden notices if you need to show hidden notices again."
|
161 |
+
msgstr "Нажмите кнопку \\\"Сбросить скрытые уведомления\\\""
|
162 |
+
|
163 |
+
#: admin/options.php:249
|
164 |
+
msgid "current user"
|
165 |
+
msgstr "Текущий пользователь"
|
166 |
+
|
167 |
+
#: admin/options.php:253
|
168 |
+
msgid "all users"
|
169 |
+
msgstr "Все пользователи"
|
170 |
+
|
171 |
+
#: admin/options.php:257
|
172 |
+
msgid "Reset notices"
|
173 |
+
msgstr "Сбросить уведомления"
|
174 |
+
|
175 |
+
#: admin/options.php:261 admin/pages/class-pages-settings.php:116
|
176 |
+
msgid "Hidden notices are successfully reset, now you can see them again!"
|
177 |
+
msgstr ""
|
178 |
+
"Скрытые уведомления успешно восстановлены, теперь вы можете снова видеть их!"
|
179 |
+
|
180 |
+
#: admin/ajax/hide-notice.php:27 admin/ajax/restore-notice.php:24
|
181 |
+
msgid "Undefinded notice id."
|
182 |
+
msgstr "Не передан notice id."
|
183 |
+
|
184 |
+
#: admin/ajax/hide-notice.php:59 admin/ajax/restore-notice.php:45
|
185 |
+
msgid "You don't have enough capability to edit this information."
|
186 |
+
msgstr "Вы не имеете разрешения на редактирование этого!"
|
187 |
+
|
188 |
+
#: admin/pages/class-pages-edit-admin-bar.php:53
|
189 |
+
msgid "Hide adminbar items"
|
190 |
+
msgstr "Меню админбара"
|
191 |
+
|
192 |
+
#: admin/pages/class-pages-edit-admin-bar.php:54
|
193 |
+
msgid "You can hide an annoying adminbar menu"
|
194 |
+
msgstr "Скрытие пунктов меню админбара"
|
195 |
+
|
196 |
+
#: admin/pages/class-pages-edit-redirects.php:53
|
197 |
+
msgid "Block ad redirects"
|
198 |
+
msgstr "Рекламные редиректы"
|
199 |
+
|
200 |
+
#: admin/pages/class-pages-edit-redirects.php:54
|
201 |
+
msgid "Break advertising redirects"
|
202 |
+
msgstr "Отключение рекламных редиректов"
|
203 |
+
|
204 |
+
#: admin/pages/class-pages-notices.php:51
|
205 |
+
msgid "Hidden notices"
|
206 |
+
msgstr "Скрытые нотисы"
|
207 |
+
|
208 |
+
#: admin/pages/class-pages-notices.php:52
|
209 |
+
msgid "Manage hidden notices"
|
210 |
+
msgstr "Управление скрытыми нотисами"
|
211 |
+
|
212 |
+
#: admin/pages/class-pages-settings.php:73
|
213 |
+
msgid "General settings"
|
214 |
+
msgstr "Основные настройки"
|
215 |
+
|
216 |
+
#: admin/pages/class-pages-settings.php:85
|
217 |
+
msgid "Settings"
|
218 |
+
msgstr "Настройки"
|
219 |
+
|
220 |
+
#: includes/classes/class-configurate-notices.php:81
|
221 |
+
#, php-format
|
222 |
+
msgid "Notifications %s"
|
223 |
+
msgstr "Уведомления %s"
|
224 |
+
|
225 |
+
#: includes/classes/class-configurate-notices.php:92
|
226 |
+
msgid "Hidden for you"
|
227 |
+
msgstr "Скрытые для Вас"
|
228 |
+
|
229 |
+
#: includes/classes/class-configurate-notices.php:289
|
230 |
+
msgid "Hide <b>for me</b>"
|
231 |
+
msgstr "Скрыть для меня"
|
232 |
+
|
233 |
+
#: includes/classes/class-configurate-notices.php:293
|
234 |
+
msgid "Hide <b>for all</b>"
|
235 |
+
msgstr "Скрыть для всех"
|
236 |
+
|
237 |
+
#. Name of the plugin
|
238 |
+
msgid "Disable Admin Notices Individually"
|
239 |
+
msgstr "Disable Admin Notices Individually"
|
240 |
+
|
241 |
+
#. Description of the plugin
|
242 |
+
msgid ""
|
243 |
+
"Disable admin notices plugin gives you the option to hide updates warnings "
|
244 |
+
"and inline notices in the admin panel."
|
245 |
+
msgstr ""
|
246 |
+
"Плагин Disable admin notices дает вам возможность скрыть предупреждения об "
|
247 |
+
"обновлениях и встроенные уведомления в панели администратора."
|
248 |
+
|
249 |
+
#. URI of the plugin
|
250 |
+
#. Author URI of the plugin
|
251 |
+
msgid "https://webcraftic.com"
|
252 |
+
msgstr "https://webcraftic.com"
|
253 |
+
|
254 |
+
#. Author of the plugin
|
255 |
+
msgid "Webcraftic <wordpress.webraftic@gmail.com>"
|
256 |
+
msgstr "Webcraftic <wordpress.webraftic@gmail.com>"
|
languages/disable-admin-notices.pot
CHANGED
@@ -1,223 +1,223 @@
|
|
1 |
-
#, fuzzy
|
2 |
-
msgid ""
|
3 |
-
msgstr ""
|
4 |
-
"Project-Id-Version: Webcraftic Disable Admin Notices Individually\n"
|
5 |
-
"Report-Msgid-Bugs-To: \n"
|
6 |
-
"POT-Creation-Date: 2020-08-27 12:50+0000\n"
|
7 |
-
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
8 |
-
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
9 |
-
"Language-Team: \n"
|
10 |
-
"Language: \n"
|
11 |
-
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
12 |
-
"MIME-Version: 1.0\n"
|
13 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
-
"Content-Transfer-Encoding: 8bit\n"
|
15 |
-
"X-Generator: Loco https://localise.biz/\n"
|
16 |
-
"X-Loco-Version: 2.4.2; wp-5.5"
|
17 |
-
|
18 |
-
#: disable-admin-notices.php:46
|
19 |
-
msgid "Webcraftic disable admin notices"
|
20 |
-
msgstr ""
|
21 |
-
|
22 |
-
#: admin/boot.php:27
|
23 |
-
msgid "Get ultimate plugin free"
|
24 |
-
msgstr ""
|
25 |
-
|
26 |
-
#: admin/boot.php:82 admin/options.php:66
|
27 |
-
#: admin/pages/class-pages-settings.php:72
|
28 |
-
msgid "Hide admin notices"
|
29 |
-
msgstr ""
|
30 |
-
|
31 |
-
#: admin/boot.php:88 admin/options.php:148
|
32 |
-
msgid "Enable hidden notices in adminbar"
|
33 |
-
msgstr ""
|
34 |
-
|
35 |
-
#: admin/class-page-basic.php:41
|
36 |
-
msgid "Webcraftic Disable Admin Notices"
|
37 |
-
msgstr ""
|
38 |
-
|
39 |
-
#: admin/options.php:33
|
40 |
-
msgid "Admin notifications, Update nags"
|
41 |
-
msgstr ""
|
42 |
-
|
43 |
-
#: admin/options.php:33
|
44 |
-
msgid ""
|
45 |
-
"Do you know the situation, when some plugin offers you to update to premium, "
|
46 |
-
"to collect technical data and shows many annoying notices? You are close "
|
47 |
-
"these notices every now and again but they newly appears and interfere your "
|
48 |
-
"work with WordPress. Even worse, some plugin’s authors delete “close” button "
|
49 |
-
"from notices and they shows in your admin panel forever."
|
50 |
-
msgstr ""
|
51 |
-
|
52 |
-
#: admin/options.php:39
|
53 |
-
msgid "Don't hide"
|
54 |
-
msgstr ""
|
55 |
-
|
56 |
-
#: admin/options.php:40
|
57 |
-
msgid ""
|
58 |
-
"Do not hide notices and do not show “Hide notification forever” link for "
|
59 |
-
"admin."
|
60 |
-
msgstr ""
|
61 |
-
|
62 |
-
#: admin/options.php:44
|
63 |
-
msgid "All notices"
|
64 |
-
msgstr ""
|
65 |
-
|
66 |
-
#: admin/options.php:45
|
67 |
-
msgid "Hide all notices globally."
|
68 |
-
msgstr ""
|
69 |
-
|
70 |
-
#: admin/options.php:45 admin/options.php:50 admin/options.php:58
|
71 |
-
#, php-format
|
72 |
-
msgid ""
|
73 |
-
"Watch the <a href=\"%s\" target=\"_blank\">video</a> to find out how it "
|
74 |
-
"works ."
|
75 |
-
msgstr ""
|
76 |
-
|
77 |
-
#: admin/options.php:49
|
78 |
-
msgid "Only selected"
|
79 |
-
msgstr ""
|
80 |
-
|
81 |
-
#: admin/options.php:50
|
82 |
-
msgid ""
|
83 |
-
"Hide selected notices only. You will see the link \"Hide notification "
|
84 |
-
"forever\" in each notice. Push it and they will not bother you anymore."
|
85 |
-
msgstr ""
|
86 |
-
|
87 |
-
#: admin/options.php:57
|
88 |
-
msgid "Compact panel"
|
89 |
-
msgstr ""
|
90 |
-
|
91 |
-
#: admin/options.php:58
|
92 |
-
msgid ""
|
93 |
-
"Collapse all notifications in one line (panel with notification counters), "
|
94 |
-
"to see the notifications, you will need to click this panel."
|
95 |
-
msgstr ""
|
96 |
-
|
97 |
-
#: admin/options.php:69
|
98 |
-
msgid ""
|
99 |
-
"Some plugins shows notifications about premium version, data collecting or "
|
100 |
-
"promote their services. Even if you push close button (that sometimes are "
|
101 |
-
"impossible), notices are shows again in some time. This option allows you to "
|
102 |
-
"control notices. Hide them all or each individually. Some plugins shows "
|
103 |
-
"notifications about premium version, data collecting or promote their "
|
104 |
-
"services. Even if you push close button (that sometimes are impossible), "
|
105 |
-
"notices are shows again in some time. This option allows you to control "
|
106 |
-
"notices. Hide them all or each individually."
|
107 |
-
msgstr ""
|
108 |
-
|
109 |
-
#: admin/options.php:92 admin/options.php:94
|
110 |
-
msgid "Disable plugins updates nags"
|
111 |
-
msgstr ""
|
112 |
-
|
113 |
-
#: admin/options.php:103 admin/options.php:105
|
114 |
-
msgid "Disable core updates nags"
|
115 |
-
msgstr ""
|
116 |
-
|
117 |
-
#: admin/options.php:150
|
118 |
-
msgid ""
|
119 |
-
"By default, the plugin hides all notices, which you specified. If you enable "
|
120 |
-
"this option, the plugin will collect all hidden notices and show them into "
|
121 |
-
"the top admin toolbar. It will not disturb you but will allow to look "
|
122 |
-
"notices at your convenience."
|
123 |
-
msgstr ""
|
124 |
-
|
125 |
-
#: admin/options.php:235
|
126 |
-
msgid "Reset hidden notices for"
|
127 |
-
msgstr ""
|
128 |
-
|
129 |
-
#: admin/options.php:238
|
130 |
-
msgid "Push reset hidden notices if you need to show hidden notices again."
|
131 |
-
msgstr ""
|
132 |
-
|
133 |
-
#: admin/options.php:249
|
134 |
-
msgid "current user"
|
135 |
-
msgstr ""
|
136 |
-
|
137 |
-
#: admin/options.php:253
|
138 |
-
msgid "all users"
|
139 |
-
msgstr ""
|
140 |
-
|
141 |
-
#: admin/options.php:257
|
142 |
-
msgid "Reset notices"
|
143 |
-
msgstr ""
|
144 |
-
|
145 |
-
#: admin/options.php:261 admin/pages/class-pages-settings.php:116
|
146 |
-
msgid "Hidden notices are successfully reset, now you can see them again!"
|
147 |
-
msgstr ""
|
148 |
-
|
149 |
-
#: admin/ajax/hide-notice.php:27 admin/ajax/restore-notice.php:24
|
150 |
-
msgid "Undefinded notice id."
|
151 |
-
msgstr ""
|
152 |
-
|
153 |
-
#: admin/ajax/hide-notice.php:59 admin/ajax/restore-notice.php:45
|
154 |
-
msgid "You don't have enough capability to edit this information."
|
155 |
-
msgstr ""
|
156 |
-
|
157 |
-
#: admin/pages/class-pages-edit-admin-bar.php:53
|
158 |
-
msgid "Hide adminbar items"
|
159 |
-
msgstr ""
|
160 |
-
|
161 |
-
#: admin/pages/class-pages-edit-admin-bar.php:54
|
162 |
-
msgid "You can hide an annoying adminbar menu"
|
163 |
-
msgstr ""
|
164 |
-
|
165 |
-
#: admin/pages/class-pages-edit-redirects.php:53
|
166 |
-
msgid "Block ad redirects"
|
167 |
-
msgstr ""
|
168 |
-
|
169 |
-
#: admin/pages/class-pages-edit-redirects.php:54
|
170 |
-
msgid "Break advertising redirects"
|
171 |
-
msgstr ""
|
172 |
-
|
173 |
-
#: admin/pages/class-pages-notices.php:51
|
174 |
-
msgid "Hidden notices"
|
175 |
-
msgstr ""
|
176 |
-
|
177 |
-
#: admin/pages/class-pages-notices.php:52
|
178 |
-
msgid "Manage hidden notices"
|
179 |
-
msgstr ""
|
180 |
-
|
181 |
-
#: admin/pages/class-pages-settings.php:73
|
182 |
-
msgid "General settings"
|
183 |
-
msgstr ""
|
184 |
-
|
185 |
-
#: admin/pages/class-pages-settings.php:85
|
186 |
-
msgid "Settings"
|
187 |
-
msgstr ""
|
188 |
-
|
189 |
-
#: includes/classes/class-configurate-notices.php:81
|
190 |
-
#, php-format
|
191 |
-
msgid "Notifications %s"
|
192 |
-
msgstr ""
|
193 |
-
|
194 |
-
#: includes/classes/class-configurate-notices.php:92
|
195 |
-
msgid "Hidden for you"
|
196 |
-
msgstr ""
|
197 |
-
|
198 |
-
#: includes/classes/class-configurate-notices.php:289
|
199 |
-
msgid "Hide <b>for me</b>"
|
200 |
-
msgstr ""
|
201 |
-
|
202 |
-
#: includes/classes/class-configurate-notices.php:293
|
203 |
-
msgid "Hide <b>for all</b>"
|
204 |
-
msgstr ""
|
205 |
-
|
206 |
-
#. Name of the plugin
|
207 |
-
msgid "Disable Admin Notices Individually"
|
208 |
-
msgstr ""
|
209 |
-
|
210 |
-
#. Description of the plugin
|
211 |
-
msgid ""
|
212 |
-
"Disable admin notices plugin gives you the option to hide updates warnings "
|
213 |
-
"and inline notices in the admin panel."
|
214 |
-
msgstr ""
|
215 |
-
|
216 |
-
#. URI of the plugin
|
217 |
-
#. Author URI of the plugin
|
218 |
-
msgid "https://webcraftic.com"
|
219 |
-
msgstr ""
|
220 |
-
|
221 |
-
#. Author of the plugin
|
222 |
-
msgid "Webcraftic <wordpress.webraftic@gmail.com>"
|
223 |
-
msgstr ""
|
1 |
+
#, fuzzy
|
2 |
+
msgid ""
|
3 |
+
msgstr ""
|
4 |
+
"Project-Id-Version: Webcraftic Disable Admin Notices Individually\n"
|
5 |
+
"Report-Msgid-Bugs-To: \n"
|
6 |
+
"POT-Creation-Date: 2020-08-27 12:50+0000\n"
|
7 |
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
8 |
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
9 |
+
"Language-Team: \n"
|
10 |
+
"Language: \n"
|
11 |
+
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
12 |
+
"MIME-Version: 1.0\n"
|
13 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
+
"Content-Transfer-Encoding: 8bit\n"
|
15 |
+
"X-Generator: Loco https://localise.biz/\n"
|
16 |
+
"X-Loco-Version: 2.4.2; wp-5.5"
|
17 |
+
|
18 |
+
#: disable-admin-notices.php:46
|
19 |
+
msgid "Webcraftic disable admin notices"
|
20 |
+
msgstr ""
|
21 |
+
|
22 |
+
#: admin/boot.php:27
|
23 |
+
msgid "Get ultimate plugin free"
|
24 |
+
msgstr ""
|
25 |
+
|
26 |
+
#: admin/boot.php:82 admin/options.php:66
|
27 |
+
#: admin/pages/class-pages-settings.php:72
|
28 |
+
msgid "Hide admin notices"
|
29 |
+
msgstr ""
|
30 |
+
|
31 |
+
#: admin/boot.php:88 admin/options.php:148
|
32 |
+
msgid "Enable hidden notices in adminbar"
|
33 |
+
msgstr ""
|
34 |
+
|
35 |
+
#: admin/class-page-basic.php:41
|
36 |
+
msgid "Webcraftic Disable Admin Notices"
|
37 |
+
msgstr ""
|
38 |
+
|
39 |
+
#: admin/options.php:33
|
40 |
+
msgid "Admin notifications, Update nags"
|
41 |
+
msgstr ""
|
42 |
+
|
43 |
+
#: admin/options.php:33
|
44 |
+
msgid ""
|
45 |
+
"Do you know the situation, when some plugin offers you to update to premium, "
|
46 |
+
"to collect technical data and shows many annoying notices? You are close "
|
47 |
+
"these notices every now and again but they newly appears and interfere your "
|
48 |
+
"work with WordPress. Even worse, some plugin’s authors delete “close” button "
|
49 |
+
"from notices and they shows in your admin panel forever."
|
50 |
+
msgstr ""
|
51 |
+
|
52 |
+
#: admin/options.php:39
|
53 |
+
msgid "Don't hide"
|
54 |
+
msgstr ""
|
55 |
+
|
56 |
+
#: admin/options.php:40
|
57 |
+
msgid ""
|
58 |
+
"Do not hide notices and do not show “Hide notification forever” link for "
|
59 |
+
"admin."
|
60 |
+
msgstr ""
|
61 |
+
|
62 |
+
#: admin/options.php:44
|
63 |
+
msgid "All notices"
|
64 |
+
msgstr ""
|
65 |
+
|
66 |
+
#: admin/options.php:45
|
67 |
+
msgid "Hide all notices globally."
|
68 |
+
msgstr ""
|
69 |
+
|
70 |
+
#: admin/options.php:45 admin/options.php:50 admin/options.php:58
|
71 |
+
#, php-format
|
72 |
+
msgid ""
|
73 |
+
"Watch the <a href=\"%s\" target=\"_blank\">video</a> to find out how it "
|
74 |
+
"works ."
|
75 |
+
msgstr ""
|
76 |
+
|
77 |
+
#: admin/options.php:49
|
78 |
+
msgid "Only selected"
|
79 |
+
msgstr ""
|
80 |
+
|
81 |
+
#: admin/options.php:50
|
82 |
+
msgid ""
|
83 |
+
"Hide selected notices only. You will see the link \"Hide notification "
|
84 |
+
"forever\" in each notice. Push it and they will not bother you anymore."
|
85 |
+
msgstr ""
|
86 |
+
|
87 |
+
#: admin/options.php:57
|
88 |
+
msgid "Compact panel"
|
89 |
+
msgstr ""
|
90 |
+
|
91 |
+
#: admin/options.php:58
|
92 |
+
msgid ""
|
93 |
+
"Collapse all notifications in one line (panel with notification counters), "
|
94 |
+
"to see the notifications, you will need to click this panel."
|
95 |
+
msgstr ""
|
96 |
+
|
97 |
+
#: admin/options.php:69
|
98 |
+
msgid ""
|
99 |
+
"Some plugins shows notifications about premium version, data collecting or "
|
100 |
+
"promote their services. Even if you push close button (that sometimes are "
|
101 |
+
"impossible), notices are shows again in some time. This option allows you to "
|
102 |
+
"control notices. Hide them all or each individually. Some plugins shows "
|
103 |
+
"notifications about premium version, data collecting or promote their "
|
104 |
+
"services. Even if you push close button (that sometimes are impossible), "
|
105 |
+
"notices are shows again in some time. This option allows you to control "
|
106 |
+
"notices. Hide them all or each individually."
|
107 |
+
msgstr ""
|
108 |
+
|
109 |
+
#: admin/options.php:92 admin/options.php:94
|
110 |
+
msgid "Disable plugins updates nags"
|
111 |
+
msgstr ""
|
112 |
+
|
113 |
+
#: admin/options.php:103 admin/options.php:105
|
114 |
+
msgid "Disable core updates nags"
|
115 |
+
msgstr ""
|
116 |
+
|
117 |
+
#: admin/options.php:150
|
118 |
+
msgid ""
|
119 |
+
"By default, the plugin hides all notices, which you specified. If you enable "
|
120 |
+
"this option, the plugin will collect all hidden notices and show them into "
|
121 |
+
"the top admin toolbar. It will not disturb you but will allow to look "
|
122 |
+
"notices at your convenience."
|
123 |
+
msgstr ""
|
124 |
+
|
125 |
+
#: admin/options.php:235
|
126 |
+
msgid "Reset hidden notices for"
|
127 |
+
msgstr ""
|
128 |
+
|
129 |
+
#: admin/options.php:238
|
130 |
+
msgid "Push reset hidden notices if you need to show hidden notices again."
|
131 |
+
msgstr ""
|
132 |
+
|
133 |
+
#: admin/options.php:249
|
134 |
+
msgid "current user"
|
135 |
+
msgstr ""
|
136 |
+
|
137 |
+
#: admin/options.php:253
|
138 |
+
msgid "all users"
|
139 |
+
msgstr ""
|
140 |
+
|
141 |
+
#: admin/options.php:257
|
142 |
+
msgid "Reset notices"
|
143 |
+
msgstr ""
|
144 |
+
|
145 |
+
#: admin/options.php:261 admin/pages/class-pages-settings.php:116
|
146 |
+
msgid "Hidden notices are successfully reset, now you can see them again!"
|
147 |
+
msgstr ""
|
148 |
+
|
149 |
+
#: admin/ajax/hide-notice.php:27 admin/ajax/restore-notice.php:24
|
150 |
+
msgid "Undefinded notice id."
|
151 |
+
msgstr ""
|
152 |
+
|
153 |
+
#: admin/ajax/hide-notice.php:59 admin/ajax/restore-notice.php:45
|
154 |
+
msgid "You don't have enough capability to edit this information."
|
155 |
+
msgstr ""
|
156 |
+
|
157 |
+
#: admin/pages/class-pages-edit-admin-bar.php:53
|
158 |
+
msgid "Hide adminbar items"
|
159 |
+
msgstr ""
|
160 |
+
|
161 |
+
#: admin/pages/class-pages-edit-admin-bar.php:54
|
162 |
+
msgid "You can hide an annoying adminbar menu"
|
163 |
+
msgstr ""
|
164 |
+
|
165 |
+
#: admin/pages/class-pages-edit-redirects.php:53
|
166 |
+
msgid "Block ad redirects"
|
167 |
+
msgstr ""
|
168 |
+
|
169 |
+
#: admin/pages/class-pages-edit-redirects.php:54
|
170 |
+
msgid "Break advertising redirects"
|
171 |
+
msgstr ""
|
172 |
+
|
173 |
+
#: admin/pages/class-pages-notices.php:51
|
174 |
+
msgid "Hidden notices"
|
175 |
+
msgstr ""
|
176 |
+
|
177 |
+
#: admin/pages/class-pages-notices.php:52
|
178 |
+
msgid "Manage hidden notices"
|
179 |
+
msgstr ""
|
180 |
+
|
181 |
+
#: admin/pages/class-pages-settings.php:73
|
182 |
+
msgid "General settings"
|
183 |
+
msgstr ""
|
184 |
+
|
185 |
+
#: admin/pages/class-pages-settings.php:85
|
186 |
+
msgid "Settings"
|
187 |
+
msgstr ""
|
188 |
+
|
189 |
+
#: includes/classes/class-configurate-notices.php:81
|
190 |
+
#, php-format
|
191 |
+
msgid "Notifications %s"
|
192 |
+
msgstr ""
|
193 |
+
|
194 |
+
#: includes/classes/class-configurate-notices.php:92
|
195 |
+
msgid "Hidden for you"
|
196 |
+
msgstr ""
|
197 |
+
|
198 |
+
#: includes/classes/class-configurate-notices.php:289
|
199 |
+
msgid "Hide <b>for me</b>"
|
200 |
+
msgstr ""
|
201 |
+
|
202 |
+
#: includes/classes/class-configurate-notices.php:293
|
203 |
+
msgid "Hide <b>for all</b>"
|
204 |
+
msgstr ""
|
205 |
+
|
206 |
+
#. Name of the plugin
|
207 |
+
msgid "Disable Admin Notices Individually"
|
208 |
+
msgstr ""
|
209 |
+
|
210 |
+
#. Description of the plugin
|
211 |
+
msgid ""
|
212 |
+
"Disable admin notices plugin gives you the option to hide updates warnings "
|
213 |
+
"and inline notices in the admin panel."
|
214 |
+
msgstr ""
|
215 |
+
|
216 |
+
#. URI of the plugin
|
217 |
+
#. Author URI of the plugin
|
218 |
+
msgid "https://webcraftic.com"
|
219 |
+
msgstr ""
|
220 |
+
|
221 |
+
#. Author of the plugin
|
222 |
+
msgid "Webcraftic <wordpress.webraftic@gmail.com>"
|
223 |
+
msgstr ""
|
libs/factory/adverts/boot.php
CHANGED
@@ -1,50 +1,50 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use WBCR\
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Factory Adverts
|
7 |
-
*
|
8 |
-
* @author Alexander Vitkalov <nechin.va@gmail.com>
|
9 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
10 |
-
* @since 1.0.0
|
11 |
-
*
|
12 |
-
* @package factory-ad-inserter
|
13 |
-
* @copyright (c) 2019, Webcraftic Ltd
|
14 |
-
*
|
15 |
-
* @version 1.2.4
|
16 |
-
*/
|
17 |
-
|
18 |
-
// Exit if accessed directly
|
19 |
-
if( !defined('ABSPATH') ) {
|
20 |
-
exit;
|
21 |
-
}
|
22 |
-
|
23 |
-
if( defined('
|
24 |
-
return;
|
25 |
-
}
|
26 |
-
|
27 |
-
# Устанавливаем константу, что модуль уже загружен
|
28 |
-
define('
|
29 |
-
|
30 |
-
# Устанавливаем версию модуля
|
31 |
-
define('
|
32 |
-
|
33 |
-
# Регистрируем тектовый домен, для интернализации интерфейса модуля
|
34 |
-
load_plugin_textdomain('
|
35 |
-
|
36 |
-
# Устанавливаем директорию модуля
|
37 |
-
define('
|
38 |
-
|
39 |
-
# Устанавливаем url модуля
|
40 |
-
define('
|
41 |
-
|
42 |
-
require_once(
|
43 |
-
require_once(
|
44 |
-
|
45 |
-
/**
|
46 |
-
* @param
|
47 |
-
*/
|
48 |
-
add_action('
|
49 |
-
$plugin->set_adverts_manager("WBCR\
|
50 |
-
});
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use WBCR\Factory_Adverts_137\Base;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Factory Adverts
|
7 |
+
*
|
8 |
+
* @author Alexander Vitkalov <nechin.va@gmail.com>
|
9 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
10 |
+
* @since 1.0.0
|
11 |
+
*
|
12 |
+
* @package factory-ad-inserter
|
13 |
+
* @copyright (c) 2019, Webcraftic Ltd
|
14 |
+
*
|
15 |
+
* @version 1.2.4
|
16 |
+
*/
|
17 |
+
|
18 |
+
// Exit if accessed directly
|
19 |
+
if( !defined('ABSPATH') ) {
|
20 |
+
exit;
|
21 |
+
}
|
22 |
+
|
23 |
+
if( defined('FACTORY_ADVERTS_137_LOADED') || (defined('FACTORY_ADVERTS_BLOCK') && FACTORY_ADVERTS_BLOCK) ) {
|
24 |
+
return;
|
25 |
+
}
|
26 |
+
|
27 |
+
# Устанавливаем константу, что модуль уже загружен
|
28 |
+
define('FACTORY_ADVERTS_137_LOADED', true);
|
29 |
+
|
30 |
+
# Устанавливаем версию модуля
|
31 |
+
define('FACTORY_ADVERTS_137_VERSION', '1.3.7');
|
32 |
+
|
33 |
+
# Регистрируем тектовый домен, для интернализации интерфейса модуля
|
34 |
+
load_plugin_textdomain('wbcr_factory_adverts_137', false, dirname(plugin_basename(__FILE__)) . '/langs');
|
35 |
+
|
36 |
+
# Устанавливаем директорию модуля
|
37 |
+
define('FACTORY_ADVERTS_137_DIR', dirname(__FILE__));
|
38 |
+
|
39 |
+
# Устанавливаем url модуля
|
40 |
+
define('FACTORY_ADVERTS_137_URL', plugins_url(null, __FILE__));
|
41 |
+
|
42 |
+
require_once(FACTORY_ADVERTS_137_DIR . '/includes/class-rest-request.php');
|
43 |
+
require_once(FACTORY_ADVERTS_137_DIR . '/includes/class-base.php');
|
44 |
+
|
45 |
+
/**
|
46 |
+
* @param Wbcr_Factory460_Plugin $plugin
|
47 |
+
*/
|
48 |
+
add_action('wbcr_factory_adverts_137_plugin_created', function ($plugin) {
|
49 |
+
$plugin->set_adverts_manager("WBCR\Factory_Adverts_137\Base");
|
50 |
+
});
|
libs/factory/adverts/includes/class-base.php
CHANGED
@@ -1,319 +1,319 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace WBCR\
|
4 |
-
|
5 |
-
// Exit if accessed directly
|
6 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
7 |
-
exit;
|
8 |
-
}
|
9 |
-
|
10 |
-
/**
|
11 |
-
* Base class for adverts module.
|
12 |
-
*
|
13 |
-
* Contains methods for retrieving banner data for a specific position.
|
14 |
-
* With this class user cat get advert content for a specific position.
|
15 |
-
* This class use functional design pattern.
|
16 |
-
*
|
17 |
-
* @author Alexander Vitkalov <nechin.va@gmail.com>
|
18 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
19 |
-
*
|
20 |
-
* @since 1.0.0 Added
|
21 |
-
* @package factory-adverts
|
22 |
-
* @copyright (c) 2019 Webcraftic Ltd
|
23 |
-
*/
|
24 |
-
class Base {
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Экзепляр плагина с которым взаимодействует этот модуль
|
28 |
-
*
|
29 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
30 |
-
* @since 1.0.1
|
31 |
-
* @var \
|
32 |
-
*/
|
33 |
-
private $plugin;
|
34 |
-
|
35 |
-
/*
|
36 |
-
* Contain array data with the plugin information and the module settings.
|
37 |
-
* Mainly used to get the name of the plugin and how to get the adverts blocks.
|
38 |
-
*
|
39 |
-
* @since 1.0.0 Added
|
40 |
-
*
|
41 |
-
* @var array Example: array(
|
42 |
-
* 'dashboard_widget' => true,
|
43 |
-
* 'right_sidebar' => true,
|
44 |
-
* 'notice' => true,
|
45 |
-
* ...
|
46 |
-
* )
|
47 |
-
*
|
48 |
-
*/
|
49 |
-
private $settings = [];
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Экземпляр класса для работы API CreativeMotion
|
53 |
-
*
|
54 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
55 |
-
* @since 1.0.1
|
56 |
-
* @var \WBCR\
|
57 |
-
*/
|
58 |
-
private $api;
|
59 |
-
|
60 |
-
/**
|
61 |
-
* Сохраняем уже полученные данные, для объектного кеширования
|
62 |
-
*
|
63 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
64 |
-
* @since 1.0.1
|
65 |
-
* @var array
|
66 |
-
*/
|
67 |
-
private $placements = [];
|
68 |
-
|
69 |
-
/**
|
70 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
71 |
-
* @since 1.0.1
|
72 |
-
* @var array
|
73 |
-
*/
|
74 |
-
private $errors = [];
|
75 |
-
|
76 |
-
/**
|
77 |
-
* Wbcr_Factory_Adinserter constructor.
|
78 |
-
*
|
79 |
-
* - Store plugin information and settings.
|
80 |
-
* - Add filter and actions.
|
81 |
-
* - Include dashboard widget.
|
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, [
|
91 |
-
'dashboard_widget' => false, // show dashboard widget (default: false)
|
92 |
-
'right_sidebar' => false, // show adverts sidebar (default: false)
|
93 |
-
'notice' => false, // show notice message (default: false),
|
94 |
-
'business_suggetion' => false,
|
95 |
-
'support' => false
|
96 |
-
] );
|
97 |
-
|
98 |
-
$this->api = new Creative_Motion_API( $this->plugin );
|
99 |
-
|
100 |
-
add_filter( 'wbcr/factory/pages/impressive/widgets', [ $this, 'register_plugin_widgets' ], 10, 3 );
|
101 |
-
add_action( 'wbcr/factory/admin_notices', [ $this, 'register_plugin_notice' ], 10, 2 );
|
102 |
-
add_action( 'current_screen', [ $this, 'register_dashboard_widget' ], 10, 2 );
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* Directly get advert content for selected position.
|
107 |
-
*
|
108 |
-
* @since 1.0.1 Rename method. Content should now be printed.
|
109 |
-
* @since 1.0.0 Added
|
110 |
-
*
|
111 |
-
* @param string $position Custom position name
|
112 |
-
*
|
113 |
-
* @return void
|
114 |
-
*/
|
115 |
-
public function render_placement( $position = 'right_sidebar' ) {
|
116 |
-
$content = '';
|
117 |
-
|
118 |
-
if ( $position ) {
|
119 |
-
$content = $this->get_content( $position );
|
120 |
-
}
|
121 |
-
|
122 |
-
echo $content;
|
123 |
-
}
|
124 |
-
|
125 |
-
/**
|
126 |
-
* Register widgets.
|
127 |
-
*
|
128 |
-
* Depending on the settings, register new widgets.
|
129 |
-
*
|
130 |
-
* @since 1.0.0 Added
|
131 |
-
*
|
132 |
-
* @param array $widgets Already existing registered widgets
|
133 |
-
* @param string $position Position for the widget
|
134 |
-
* @param string $plugin Plugin object for which the hook is run
|
135 |
-
*
|
136 |
-
* @return array array(
|
137 |
-
* 'adverts_widget' => '<p></p>',
|
138 |
-
* 'business_suggetion' => '<p></p>',
|
139 |
-
* 'support' => '<p></p>',
|
140 |
-
* ...
|
141 |
-
* )
|
142 |
-
*/
|
143 |
-
public function register_plugin_widgets( $widgets, $position, $plugin ) {
|
144 |
-
if ( $plugin->getPluginName() == $this->plugin->getPluginName() && 'right' == $position ) {
|
145 |
-
|
146 |
-
if ( $this->settings['right_sidebar'] ) {
|
147 |
-
$content = $this->get_content( 'right_sidebar' );
|
148 |
-
$widgets['adverts_widget'] = $content;
|
149 |
-
|
150 |
-
if ( empty( $widgets['adverts_widget'] ) ) {
|
151 |
-
if ( defined( 'FACTORY_ADVERTS_DEBUG' ) && FACTORY_ADVERTS_DEBUG ) {
|
152 |
-
$debug_message = '<div style="background: #fff4f1;padding: 10px;color: #a58074;">';
|
153 |
-
$debug_message .= $this->get_debug_message( 'right_sidebar' );
|
154 |
-
$debug_message .= '</div>';
|
155 |
-
|
156 |
-
$widgets['adverts_widget'] = $debug_message;
|
157 |
-
} else {
|
158 |
-
unset( $widgets['adverts_widget'] );
|
159 |
-
}
|
160 |
-
}
|
161 |
-
}
|
162 |
-
|
163 |
-
if ( $this->settings['business_suggetion'] ) {
|
164 |
-
$content = $this->get_content( 'business_suggetion' );
|
165 |
-
|
166 |
-
if ( ! empty( $content ) ) {
|
167 |
-
$widgets['business_suggetion'] = $content;
|
168 |
-
}
|
169 |
-
}
|
170 |
-
|
171 |
-
if ( $this->settings['support'] ) {
|
172 |
-
$content = $this->get_content( 'support' );
|
173 |
-
|
174 |
-
if ( ! empty( $content ) ) {
|
175 |
-
$widgets['support'] = $content;
|
176 |
-
}
|
177 |
-
}
|
178 |
-
}
|
179 |
-
|
180 |
-
return $widgets;
|
181 |
-
}
|
182 |
-
|
183 |
-
/**
|
184 |
-
* Регистрирует уведомление для текущего плагина
|
185 |
-
*
|
186 |
-
* Мы добавляем уведомления в массив всех уведомлений плагина с ключем 'adverts_notice',
|
187 |
-
* то есть если другие плагины, тоже добавят свои рекламные уведомления, они просто
|
188 |
-
* будут перезаписывать друг друга, в итоге будет отображено только одно рекламное
|
189 |
-
* уведомеление. Это нужно для того, чтобы ограничить пользователя от спама.
|
190 |
-
*
|
191 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
192 |
-
*
|
193 |
-
* @since 1.0.1 Переделан полностью под интферфейс фреймворка. Используем встроенную систему уведомлений.
|
194 |
-
* @since 1.0.0 Added
|
195 |
-
*
|
196 |
-
* @param array $notices Массив со списком всех уведомлений, которые будут напечатыны в админ панели
|
197 |
-
* @param string $plugin_name Имя плагина, передано для того, чтобы выводить уведомления условно, только для конкретного плагина
|
198 |
-
*/
|
199 |
-
public function register_plugin_notice( $notices, $plugin_name ) {
|
200 |
-
if ( $plugin_name !== $this->plugin->getPluginName() ) {
|
201 |
-
return $notices;
|
202 |
-
}
|
203 |
-
|
204 |
-
if ( $this->settings['notice'] ) {
|
205 |
-
$notice_content = $this->get_content( 'notice' );
|
206 |
-
|
207 |
-
if ( empty( $notice_content ) ) {
|
208 |
-
# Информация для отладки
|
209 |
-
if ( defined( 'FACTORY_ADVERTS_DEBUG' ) && FACTORY_ADVERTS_DEBUG ) {
|
210 |
-
$debug_message = $this->get_debug_message( 'notice' );
|
211 |
-
|
212 |
-
$notices['adverts_notice'] = [
|
213 |
-
'id' => 'adverts_debug',
|
214 |
-
'type' => 'error',
|
215 |
-
'dismissible' => false,
|
216 |
-
'dismiss_expires' => 0,
|
217 |
-
'text' => '<p><b>' . $this->plugin->getPluginTitle() . '</b>:<br>' . $debug_message . '</p>'
|
218 |
-
];
|
219 |
-
}
|
220 |
-
|
221 |
-
return $notices;
|
222 |
-
}
|
223 |
-
|
224 |
-
$hash = md5( $notice_content );
|
225 |
-
|
226 |
-
$notices['adverts_notice'] = [
|
227 |
-
'id' => 'adverts_' . $hash,
|
228 |
-
'type' => 'success',
|
229 |
-
'dismissible' => true,
|
230 |
-
'dismiss_expires' => 0,
|
231 |
-
'text' => '<p><b>' . $this->plugin->getPluginTitle() . '</b>:<br>' . $notice_content . '</p>'
|
232 |
-
];
|
233 |
-
}
|
234 |
-
|
235 |
-
return $notices;
|
236 |
-
}
|
237 |
-
|
238 |
-
/**
|
239 |
-
* Include dashboard widget
|
240 |
-
*
|
241 |
-
* Include functionality the output of the widget on the dashboard.
|
242 |
-
* Only one dashboard widget must be shown for some plugins with this setting (dashboard_widget).
|
243 |
-
*
|
244 |
-
* @since 1.0.0 Added
|
245 |
-
*/
|
246 |
-
public function register_dashboard_widget() {
|
247 |
-
if ( $this->settings['dashboard_widget'] && current_user_can( 'manage_options' ) ) {
|
248 |
-
$current_screen = get_current_screen();
|
249 |
-
|
250 |
-
if ( ! in_array( $current_screen->id, [ 'dashboard', 'dashboard-network' ] ) ) {
|
251 |
-
return;
|
252 |
-
}
|
253 |
-
|
254 |
-
$content = $this->get_content( 'dashboard_widget' );
|
255 |
-
|
256 |
-
if ( empty( $content ) && defined( 'FACTORY_ADVERTS_DEBUG' ) && FACTORY_ADVERTS_DEBUG ) {
|
257 |
-
$content = $this->get_debug_message( 'dashboard_widget' );
|
258 |
-
}
|
259 |
-
|
260 |
-
require_once
|
261 |
-
new Dashboard_Widget( $this->plugin, $content );
|
262 |
-
}
|
263 |
-
}
|
264 |
-
|
265 |
-
/**
|
266 |
-
* Позволяет получить сообщение об ошибках
|
267 |
-
*
|
268 |
-
* Метод проверяет последние ошибки, которые могли произойти в результате api запроса.
|
269 |
-
* Если ошибки есть, он выводит предупреждение и список последних ошибок. Если ошибок нет,
|
270 |
-
* метод вернет просто предупреждение, что реклама не настроена.
|
271 |
-
*
|
272 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
273 |
-
* @since 1.0.1
|
274 |
-
*
|
275 |
-
* @param string $position Position for the widget
|
276 |
-
*
|
277 |
-
* @return string Возвращает сообщение с последниеми ошибками для отладки
|
278 |
-
*/
|
279 |
-
private function get_debug_message( $position ) {
|
280 |
-
$debug_massage = 'Plugin ads not configured or server unavailable. See full error report below.<br>';
|
281 |
-
|
282 |
-
if ( isset( $this->errors[ $position ] ) && ! empty( $this->errors ) ) {
|
283 |
-
$debug_massage .= '<b>Last errors:</b><br>';
|
284 |
-
foreach ( $this->errors[ $position ] as $error_code => $error_message ) {
|
285 |
-
$debug_massage .= 'Code: ' . $error_code . ' Error: ' . $error_message . '<br>';
|
286 |
-
}
|
287 |
-
}
|
288 |
-
|
289 |
-
return $debug_massage;
|
290 |
-
}
|
291 |
-
|
292 |
-
/**
|
293 |
-
* Get advert content for selected position.
|
294 |
-
*
|
295 |
-
* @since 1.0.1 Полностью переписан
|
296 |
-
* @since 1.0.0 Added
|
297 |
-
*
|
298 |
-
* @param string $position The position for advert
|
299 |
-
*
|
300 |
-
* @return string
|
301 |
-
*/
|
302 |
-
private function get_content( $position ) {
|
303 |
-
if ( isset( $this->placements[ $position ] ) ) {
|
304 |
-
return $this->placements[ $position ];
|
305 |
-
}
|
306 |
-
|
307 |
-
$content = $this->api->get_content( $position );
|
308 |
-
|
309 |
-
if ( is_wp_error( $content ) ) {
|
310 |
-
$this->errors[ $position ][ $content->get_error_code() ] = $content->get_error_message();
|
311 |
-
|
312 |
-
return null;
|
313 |
-
}
|
314 |
-
|
315 |
-
$this->placements[ $position ] = $content;
|
316 |
-
|
317 |
-
return $content;
|
318 |
-
}
|
319 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WBCR\Factory_Adverts_137;
|
4 |
+
|
5 |
+
// Exit if accessed directly
|
6 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
7 |
+
exit;
|
8 |
+
}
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Base class for adverts module.
|
12 |
+
*
|
13 |
+
* Contains methods for retrieving banner data for a specific position.
|
14 |
+
* With this class user cat get advert content for a specific position.
|
15 |
+
* This class use functional design pattern.
|
16 |
+
*
|
17 |
+
* @author Alexander Vitkalov <nechin.va@gmail.com>
|
18 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
19 |
+
*
|
20 |
+
* @since 1.0.0 Added
|
21 |
+
* @package factory-adverts
|
22 |
+
* @copyright (c) 2019 Webcraftic Ltd
|
23 |
+
*/
|
24 |
+
class Base {
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Экзепляр плагина с которым взаимодействует этот модуль
|
28 |
+
*
|
29 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
30 |
+
* @since 1.0.1
|
31 |
+
* @var \Wbcr_Factory460_Plugin
|
32 |
+
*/
|
33 |
+
private $plugin;
|
34 |
+
|
35 |
+
/*
|
36 |
+
* Contain array data with the plugin information and the module settings.
|
37 |
+
* Mainly used to get the name of the plugin and how to get the adverts blocks.
|
38 |
+
*
|
39 |
+
* @since 1.0.0 Added
|
40 |
+
*
|
41 |
+
* @var array Example: array(
|
42 |
+
* 'dashboard_widget' => true,
|
43 |
+
* 'right_sidebar' => true,
|
44 |
+
* 'notice' => true,
|
45 |
+
* ...
|
46 |
+
* )
|
47 |
+
*
|
48 |
+
*/
|
49 |
+
private $settings = [];
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Экземпляр класса для работы API CreativeMotion
|
53 |
+
*
|
54 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
55 |
+
* @since 1.0.1
|
56 |
+
* @var \WBCR\Factory_Adverts_137\Creative_Motion_API
|
57 |
+
*/
|
58 |
+
private $api;
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Сохраняем уже полученные данные, для объектного кеширования
|
62 |
+
*
|
63 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
64 |
+
* @since 1.0.1
|
65 |
+
* @var array
|
66 |
+
*/
|
67 |
+
private $placements = [];
|
68 |
+
|
69 |
+
/**
|
70 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
71 |
+
* @since 1.0.1
|
72 |
+
* @var array
|
73 |
+
*/
|
74 |
+
private $errors = [];
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Wbcr_Factory_Adinserter constructor.
|
78 |
+
*
|
79 |
+
* - Store plugin information and settings.
|
80 |
+
* - Add filter and actions.
|
81 |
+
* - Include dashboard widget.
|
82 |
+
*
|
83 |
+
* @since 1.0.0 Added
|
84 |
+
*
|
85 |
+
* @param \Wbcr_Factory460_Plugin $plugin
|
86 |
+
*/
|
87 |
+
public function __construct( \Wbcr_Factory460_Plugin $plugin, $settings ) {
|
88 |
+
$this->plugin = $plugin;
|
89 |
+
|
90 |
+
$this->settings = wp_parse_args( $settings, [
|
91 |
+
'dashboard_widget' => false, // show dashboard widget (default: false)
|
92 |
+
'right_sidebar' => false, // show adverts sidebar (default: false)
|
93 |
+
'notice' => false, // show notice message (default: false),
|
94 |
+
'business_suggetion' => false,
|
95 |
+
'support' => false
|
96 |
+
] );
|
97 |
+
|
98 |
+
$this->api = new Creative_Motion_API( $this->plugin );
|
99 |
+
|
100 |
+
add_filter( 'wbcr/factory/pages/impressive/widgets', [ $this, 'register_plugin_widgets' ], 10, 3 );
|
101 |
+
add_action( 'wbcr/factory/admin_notices', [ $this, 'register_plugin_notice' ], 10, 2 );
|
102 |
+
add_action( 'current_screen', [ $this, 'register_dashboard_widget' ], 10, 2 );
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Directly get advert content for selected position.
|
107 |
+
*
|
108 |
+
* @since 1.0.1 Rename method. Content should now be printed.
|
109 |
+
* @since 1.0.0 Added
|
110 |
+
*
|
111 |
+
* @param string $position Custom position name
|
112 |
+
*
|
113 |
+
* @return void
|
114 |
+
*/
|
115 |
+
public function render_placement( $position = 'right_sidebar' ) {
|
116 |
+
$content = '';
|
117 |
+
|
118 |
+
if ( $position ) {
|
119 |
+
$content = $this->get_content( $position );
|
120 |
+
}
|
121 |
+
|
122 |
+
echo $content;
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Register widgets.
|
127 |
+
*
|
128 |
+
* Depending on the settings, register new widgets.
|
129 |
+
*
|
130 |
+
* @since 1.0.0 Added
|
131 |
+
*
|
132 |
+
* @param array $widgets Already existing registered widgets
|
133 |
+
* @param string $position Position for the widget
|
134 |
+
* @param string $plugin Plugin object for which the hook is run
|
135 |
+
*
|
136 |
+
* @return array array(
|
137 |
+
* 'adverts_widget' => '<p></p>',
|
138 |
+
* 'business_suggetion' => '<p></p>',
|
139 |
+
* 'support' => '<p></p>',
|
140 |
+
* ...
|
141 |
+
* )
|
142 |
+
*/
|
143 |
+
public function register_plugin_widgets( $widgets, $position, $plugin ) {
|
144 |
+
if ( $plugin->getPluginName() == $this->plugin->getPluginName() && 'right' == $position ) {
|
145 |
+
|
146 |
+
if ( $this->settings['right_sidebar'] ) {
|
147 |
+
$content = $this->get_content( 'right_sidebar' );
|
148 |
+
$widgets['adverts_widget'] = $content;
|
149 |
+
|
150 |
+
if ( empty( $widgets['adverts_widget'] ) ) {
|
151 |
+
if ( defined( 'FACTORY_ADVERTS_DEBUG' ) && FACTORY_ADVERTS_DEBUG ) {
|
152 |
+
$debug_message = '<div style="background: #fff4f1;padding: 10px;color: #a58074;">';
|
153 |
+
$debug_message .= $this->get_debug_message( 'right_sidebar' );
|
154 |
+
$debug_message .= '</div>';
|
155 |
+
|
156 |
+
$widgets['adverts_widget'] = $debug_message;
|
157 |
+
} else {
|
158 |
+
unset( $widgets['adverts_widget'] );
|
159 |
+
}
|
160 |
+
}
|
161 |
+
}
|
162 |
+
|
163 |
+
if ( $this->settings['business_suggetion'] ) {
|
164 |
+
$content = $this->get_content( 'business_suggetion' );
|
165 |
+
|
166 |
+
if ( ! empty( $content ) ) {
|
167 |
+
$widgets['business_suggetion'] = $content;
|
168 |
+
}
|
169 |
+
}
|
170 |
+
|
171 |
+
if ( $this->settings['support'] ) {
|
172 |
+
$content = $this->get_content( 'support' );
|
173 |
+
|
174 |
+
if ( ! empty( $content ) ) {
|
175 |
+
$widgets['support'] = $content;
|
176 |
+
}
|
177 |
+
}
|
178 |
+
}
|
179 |
+
|
180 |
+
return $widgets;
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Регистрирует уведомление для текущего плагина
|
185 |
+
*
|
186 |
+
* Мы добавляем уведомления в массив всех уведомлений плагина с ключем 'adverts_notice',
|
187 |
+
* то есть если другие плагины, тоже добавят свои рекламные уведомления, они просто
|
188 |
+
* будут перезаписывать друг друга, в итоге будет отображено только одно рекламное
|
189 |
+
* уведомеление. Это нужно для того, чтобы ограничить пользователя от спама.
|
190 |
+
*
|
191 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
192 |
+
*
|
193 |
+
* @since 1.0.1 Переделан полностью под интферфейс фреймворка. Используем встроенную систему уведомлений.
|
194 |
+
* @since 1.0.0 Added
|
195 |
+
*
|
196 |
+
* @param array $notices Массив со списком всех уведомлений, которые будут напечатыны в админ панели
|
197 |
+
* @param string $plugin_name Имя плагина, передано для того, чтобы выводить уведомления условно, только для конкретного плагина
|
198 |
+
*/
|
199 |
+
public function register_plugin_notice( $notices, $plugin_name ) {
|
200 |
+
if ( $plugin_name !== $this->plugin->getPluginName() ) {
|
201 |
+
return $notices;
|
202 |
+
}
|
203 |
+
|
204 |
+
if ( $this->settings['notice'] ) {
|
205 |
+
$notice_content = $this->get_content( 'notice' );
|
206 |
+
|
207 |
+
if ( empty( $notice_content ) ) {
|
208 |
+
# Информация для отладки
|
209 |
+
if ( defined( 'FACTORY_ADVERTS_DEBUG' ) && FACTORY_ADVERTS_DEBUG ) {
|
210 |
+
$debug_message = $this->get_debug_message( 'notice' );
|
211 |
+
|
212 |
+
$notices['adverts_notice'] = [
|
213 |
+
'id' => 'adverts_debug',
|
214 |
+
'type' => 'error',
|
215 |
+
'dismissible' => false,
|
216 |
+
'dismiss_expires' => 0,
|
217 |
+
'text' => '<p><b>' . $this->plugin->getPluginTitle() . '</b>:<br>' . $debug_message . '</p>'
|
218 |
+
];
|
219 |
+
}
|
220 |
+
|
221 |
+
return $notices;
|
222 |
+
}
|
223 |
+
|
224 |
+
$hash = md5( $notice_content );
|
225 |
+
|
226 |
+
$notices['adverts_notice'] = [
|
227 |
+
'id' => 'adverts_' . $hash,
|
228 |
+
'type' => 'success',
|
229 |
+
'dismissible' => true,
|
230 |
+
'dismiss_expires' => 0,
|
231 |
+
'text' => '<p><b>' . $this->plugin->getPluginTitle() . '</b>:<br>' . $notice_content . '</p>'
|
232 |
+
];
|
233 |
+
}
|
234 |
+
|
235 |
+
return $notices;
|
236 |
+
}
|
237 |
+
|
238 |
+
/**
|
239 |
+
* Include dashboard widget
|
240 |
+
*
|
241 |
+
* Include functionality the output of the widget on the dashboard.
|
242 |
+
* Only one dashboard widget must be shown for some plugins with this setting (dashboard_widget).
|
243 |
+
*
|
244 |
+
* @since 1.0.0 Added
|
245 |
+
*/
|
246 |
+
public function register_dashboard_widget() {
|
247 |
+
if ( $this->settings['dashboard_widget'] && current_user_can( 'manage_options' ) ) {
|
248 |
+
$current_screen = get_current_screen();
|
249 |
+
|
250 |
+
if ( ! in_array( $current_screen->id, [ 'dashboard', 'dashboard-network' ] ) ) {
|
251 |
+
return;
|
252 |
+
}
|
253 |
+
|
254 |
+
$content = $this->get_content( 'dashboard_widget' );
|
255 |
+
|
256 |
+
if ( empty( $content ) && defined( 'FACTORY_ADVERTS_DEBUG' ) && FACTORY_ADVERTS_DEBUG ) {
|
257 |
+
$content = $this->get_debug_message( 'dashboard_widget' );
|
258 |
+
}
|
259 |
+
|
260 |
+
require_once FACTORY_ADVERTS_137_DIR . '/includes/class-dashboard-widget.php';
|
261 |
+
new Dashboard_Widget( $this->plugin, $content );
|
262 |
+
}
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* Позволяет получить сообщение об ошибках
|
267 |
+
*
|
268 |
+
* Метод проверяет последние ошибки, которые могли произойти в результате api запроса.
|
269 |
+
* Если ошибки есть, он выводит предупреждение и список последних ошибок. Если ошибок нет,
|
270 |
+
* метод вернет просто предупреждение, что реклама не настроена.
|
271 |
+
*
|
272 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
273 |
+
* @since 1.0.1
|
274 |
+
*
|
275 |
+
* @param string $position Position for the widget
|
276 |
+
*
|
277 |
+
* @return string Возвращает сообщение с последниеми ошибками для отладки
|
278 |
+
*/
|
279 |
+
private function get_debug_message( $position ) {
|
280 |
+
$debug_massage = 'Plugin ads not configured or server unavailable. See full error report below.<br>';
|
281 |
+
|
282 |
+
if ( isset( $this->errors[ $position ] ) && ! empty( $this->errors ) ) {
|
283 |
+
$debug_massage .= '<b>Last errors:</b><br>';
|
284 |
+
foreach ( $this->errors[ $position ] as $error_code => $error_message ) {
|
285 |
+
$debug_massage .= 'Code: ' . $error_code . ' Error: ' . $error_message . '<br>';
|
286 |
+
}
|
287 |
+
}
|
288 |
+
|
289 |
+
return $debug_massage;
|
290 |
+
}
|
291 |
+
|
292 |
+
/**
|
293 |
+
* Get advert content for selected position.
|
294 |
+
*
|
295 |
+
* @since 1.0.1 Полностью переписан
|
296 |
+
* @since 1.0.0 Added
|
297 |
+
*
|
298 |
+
* @param string $position The position for advert
|
299 |
+
*
|
300 |
+
* @return string
|
301 |
+
*/
|
302 |
+
private function get_content( $position ) {
|
303 |
+
if ( isset( $this->placements[ $position ] ) ) {
|
304 |
+
return $this->placements[ $position ];
|
305 |
+
}
|
306 |
+
|
307 |
+
$content = $this->api->get_content( $position );
|
308 |
+
|
309 |
+
if ( is_wp_error( $content ) ) {
|
310 |
+
$this->errors[ $position ][ $content->get_error_code() ] = $content->get_error_message();
|
311 |
+
|
312 |
+
return null;
|
313 |
+
}
|
314 |
+
|
315 |
+
$this->placements[ $position ] = $content;
|
316 |
+
|
317 |
+
return $content;
|
318 |
+
}
|
319 |
+
}
|
libs/factory/adverts/includes/class-dashboard-widget.php
CHANGED
@@ -1,125 +1,125 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace WBCR\
|
4 |
-
|
5 |
-
// Exit if accessed directly
|
6 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
7 |
-
exit;
|
8 |
-
}
|
9 |
-
|
10 |
-
/**
|
11 |
-
* Adverts Dashboard Widget.
|
12 |
-
*
|
13 |
-
* Adds a widget with a banner or a list of news.
|
14 |
-
*
|
15 |
-
* @author Alexander Vitkalov <nechin.va@gmail.com>
|
16 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
17 |
-
*
|
18 |
-
* @since 1.0.0 Added
|
19 |
-
* @package factory-adverts
|
20 |
-
* @copyright (c) 2019 Webcraftic Ltd
|
21 |
-
*/
|
22 |
-
class Dashboard_Widget {
|
23 |
-
|
24 |
-
/**
|
25 |
-
* Контент, который должен быть напечатан внутри дашбоард виджета
|
26 |
-
*
|
27 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
28 |
-
* @since 1.0.1
|
29 |
-
* @var string
|
30 |
-
*/
|
31 |
-
private $content;
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Экзепляр плагина с которым взаимодействует этот модуль
|
35 |
-
*
|
36 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
37 |
-
* @since 1.0.1
|
38 |
-
* @var \
|
39 |
-
*/
|
40 |
-
private $plugin;
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Dashboard_Widget constructor.
|
44 |
-
*
|
45 |
-
* Call parent constructor. Registration hooks.
|
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;
|
56 |
-
|
57 |
-
if ( ! empty( $this->content ) ) {
|
58 |
-
if ( $this->plugin->isNetworkActive() && $this->plugin->isNetworkAdmin() ) {
|
59 |
-
add_action( 'wp_network_dashboard_setup', [ $this, 'add_dashboard_widgets' ], 999 );
|
60 |
-
|
61 |
-
return;
|
62 |
-
}
|
63 |
-
|
64 |
-
add_action( 'wp_dashboard_setup', [ $this, 'add_dashboard_widgets' ], 999 );
|
65 |
-
}
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Add the News widget to the dashboard.
|
70 |
-
*
|
71 |
-
* @since 1.0.0 Added
|
72 |
-
*/
|
73 |
-
public function add_dashboard_widgets() {
|
74 |
-
$widget_id = 'wbcr-factory-adverts-widget';
|
75 |
-
|
76 |
-
wp_add_dashboard_widget( $widget_id, $this->plugin->getPluginTitle() . ' News', [
|
77 |
-
$this,
|
78 |
-
'print_widget_content'
|
79 |
-
] );
|
80 |
-
|
81 |
-
$this->sort_dashboard_widgets( $widget_id );
|
82 |
-
}
|
83 |
-
|
84 |
-
/**
|
85 |
-
* Create the function to output the contents of the Dashboard Widget.
|
86 |
-
*
|
87 |
-
* @since 1.0.0 Added
|
88 |
-
*/
|
89 |
-
public function print_widget_content() {
|
90 |
-
?>
|
91 |
-
<div class="wordpress-news hide-if-no-js">
|
92 |
-
<div class="rss-widget">
|
93 |
-
<?php echo $this->content; ?>
|
94 |
-
</div>
|
95 |
-
</div>
|
96 |
-
<?php
|
97 |
-
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Сортируем виджеты на странице дашбоард
|
102 |
-
*
|
103 |
-
* Виджеты должны быть в таком порядке, чтобы наш виджет был выше всех.
|
104 |
-
*
|
105 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
106 |
-
* @author Alexander Vitkalov <nechin.va@gmail.com>
|
107 |
-
*
|
108 |
-
* @since 1.0.2 Добавлена поддержка мультисайтов
|
109 |
-
* @since 1.0.0 Добавлен
|
110 |
-
*
|
111 |
-
* @param string $widget_id ID нашего виджета
|
112 |
-
*/
|
113 |
-
private function sort_dashboard_widgets( $widget_id ) {
|
114 |
-
global $wp_meta_boxes;
|
115 |
-
|
116 |
-
$location = $this->plugin->isNetworkAdmin() ? 'dashboard-network' : 'dashboard';
|
117 |
-
|
118 |
-
$normal_core = $wp_meta_boxes[ $location ]['normal']['core'];
|
119 |
-
$widget_backup = [ $widget_id => $normal_core[ $widget_id ] ];
|
120 |
-
unset( $normal_core[ $widget_id ] );
|
121 |
-
$sorted_core = array_merge( $widget_backup, $normal_core );
|
122 |
-
|
123 |
-
$wp_meta_boxes['dashboard']['normal']['core'] = $sorted_core;
|
124 |
-
}
|
125 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WBCR\Factory_Adverts_137;
|
4 |
+
|
5 |
+
// Exit if accessed directly
|
6 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
7 |
+
exit;
|
8 |
+
}
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Adverts Dashboard Widget.
|
12 |
+
*
|
13 |
+
* Adds a widget with a banner or a list of news.
|
14 |
+
*
|
15 |
+
* @author Alexander Vitkalov <nechin.va@gmail.com>
|
16 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
17 |
+
*
|
18 |
+
* @since 1.0.0 Added
|
19 |
+
* @package factory-adverts
|
20 |
+
* @copyright (c) 2019 Webcraftic Ltd
|
21 |
+
*/
|
22 |
+
class Dashboard_Widget {
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Контент, который должен быть напечатан внутри дашбоард виджета
|
26 |
+
*
|
27 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
28 |
+
* @since 1.0.1
|
29 |
+
* @var string
|
30 |
+
*/
|
31 |
+
private $content;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Экзепляр плагина с которым взаимодействует этот модуль
|
35 |
+
*
|
36 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
37 |
+
* @since 1.0.1
|
38 |
+
* @var \Wbcr_Factory460_Plugin
|
39 |
+
*/
|
40 |
+
private $plugin;
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Dashboard_Widget constructor.
|
44 |
+
*
|
45 |
+
* Call parent constructor. Registration hooks.
|
46 |
+
*
|
47 |
+
* @since 1.0.0 Added
|
48 |
+
*
|
49 |
+
* @param \Wbcr_Factory460_Plugin $plugin
|
50 |
+
* @param string $content
|
51 |
+
*/
|
52 |
+
public function __construct( \Wbcr_Factory460_Plugin $plugin, $content ) {
|
53 |
+
|
54 |
+
$this->plugin = $plugin;
|
55 |
+
$this->content = $content;
|
56 |
+
|
57 |
+
if ( ! empty( $this->content ) ) {
|
58 |
+
if ( $this->plugin->isNetworkActive() && $this->plugin->isNetworkAdmin() ) {
|
59 |
+
add_action( 'wp_network_dashboard_setup', [ $this, 'add_dashboard_widgets' ], 999 );
|
60 |
+
|
61 |
+
return;
|
62 |
+
}
|
63 |
+
|
64 |
+
add_action( 'wp_dashboard_setup', [ $this, 'add_dashboard_widgets' ], 999 );
|
65 |
+
}
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Add the News widget to the dashboard.
|
70 |
+
*
|
71 |
+
* @since 1.0.0 Added
|
72 |
+
*/
|
73 |
+
public function add_dashboard_widgets() {
|
74 |
+
$widget_id = 'wbcr-factory-adverts-widget';
|
75 |
+
|
76 |
+
wp_add_dashboard_widget( $widget_id, $this->plugin->getPluginTitle() . ' News', [
|
77 |
+
$this,
|
78 |
+
'print_widget_content'
|
79 |
+
] );
|
80 |
+
|
81 |
+
$this->sort_dashboard_widgets( $widget_id );
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Create the function to output the contents of the Dashboard Widget.
|
86 |
+
*
|
87 |
+
* @since 1.0.0 Added
|
88 |
+
*/
|
89 |
+
public function print_widget_content() {
|
90 |
+
?>
|
91 |
+
<div class="wordpress-news hide-if-no-js">
|
92 |
+
<div class="rss-widget">
|
93 |
+
<?php echo $this->content; ?>
|
94 |
+
</div>
|
95 |
+
</div>
|
96 |
+
<?php
|
97 |
+
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Сортируем виджеты на странице дашбоард
|
102 |
+
*
|
103 |
+
* Виджеты должны быть в таком порядке, чтобы наш виджет был выше всех.
|
104 |
+
*
|
105 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
106 |
+
* @author Alexander Vitkalov <nechin.va@gmail.com>
|
107 |
+
*
|
108 |
+
* @since 1.0.2 Добавлена поддержка мультисайтов
|
109 |
+
* @since 1.0.0 Добавлен
|
110 |
+
*
|
111 |
+
* @param string $widget_id ID нашего виджета
|
112 |
+
*/
|
113 |
+
private function sort_dashboard_widgets( $widget_id ) {
|
114 |
+
global $wp_meta_boxes;
|
115 |
+
|
116 |
+
$location = $this->plugin->isNetworkAdmin() ? 'dashboard-network' : 'dashboard';
|
117 |
+
|
118 |
+
$normal_core = $wp_meta_boxes[ $location ]['normal']['core'];
|
119 |
+
$widget_backup = [ $widget_id => $normal_core[ $widget_id ] ];
|
120 |
+
unset( $normal_core[ $widget_id ] );
|
121 |
+
$sorted_core = array_merge( $widget_backup, $normal_core );
|
122 |
+
|
123 |
+
$wp_meta_boxes['dashboard']['normal']['core'] = $sorted_core;
|
124 |
+
}
|
125 |
+
}
|
libs/factory/adverts/includes/class-rest-request.php
CHANGED
@@ -1,217 +1,217 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace WBCR\
|
4 |
-
|
5 |
-
// Exit if accessed directly
|
6 |
-
if( !defined('ABSPATH') ) {
|
7 |
-
exit;
|
8 |
-
}
|
9 |
-
|
10 |
-
/**
|
11 |
-
* Factory request class.
|
12 |
-
*
|
13 |
-
* Performs a server request, retrieves banner data and stores it in the cache.
|
14 |
-
*
|
15 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
16 |
-
* @author Alexander Vitkalov <nechin.va@gmail.com>
|
17 |
-
*
|
18 |
-
* @since 1.0.1 Изменил имя класса и доработал его.
|
19 |
-
* @since 1.0.0 Added
|
20 |
-
*
|
21 |
-
* @package factory-adverts
|
22 |
-
* @copyright (c) 2019 Webcraftic Ltd
|
23 |
-
*/
|
24 |
-
class Creative_Motion_API {
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Rest request url.
|
28 |
-
*
|
29 |
-
* Define rest request url for rest request to remote server.
|
30 |
-
*
|
31 |
-
* @since 1.2.1
|
32 |
-
*/
|
33 |
-
const SERVER_URL = 'https://api.cm-wp.com';
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Rest route path.
|
37 |
-
*
|
38 |
-
* Define rest route path for rest request.
|
39 |
-
*
|
40 |
-
* @since 1.0.0
|
41 |
-
*/
|
42 |
-
const REST_ROUTE = '/adverds/v1/advt';
|
43 |
-
|
44 |
-
/**
|
45 |
-
* Интервал между запросами по умолчанию
|
46 |
-
*
|
47 |
-
* Значение в часах.
|
48 |
-
*
|
49 |
-
* @since 1.0.1
|
50 |
-
*/
|
51 |
-
const DEFAULT_REQUESTS_INTERVAL = 24;
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Интервал между запросами, если сервер недоступен
|
55 |
-
*
|
56 |
-
* Значение в часах.
|
57 |
-
*
|
58 |
-
* @since 1.0.1
|
59 |
-
*/
|
60 |
-
const SERVER_UNAVAILABLE_INTERVAL = 4;
|
61 |
-
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Экзепляр плагина с которым взаимодействует этот модуль
|
65 |
-
*
|
66 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
67 |
-
* @since 1.0.1
|
68 |
-
* @var \
|
69 |
-
*/
|
70 |
-
private $plugin;
|
71 |
-
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Request constructor.
|
75 |
-
*
|
76 |
-
* Variable initialization.
|
77 |
-
*
|
78 |
-
* @param \
|
79 |
-
* @since 1.0.0 Added
|
80 |
-
*
|
81 |
-
*/
|
82 |
-
public function __construct(\
|
83 |
-
{
|
84 |
-
$this->plugin = $plugin;
|
85 |
-
}
|
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 |
-
/**
|
109 |
-
* Get data from cache.
|
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 |
-
}
|
162 |
-
|
163 |
-
/**
|
164 |
-
* Performs rest api request.
|
165 |
-
*
|
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 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WBCR\Factory_Adverts_137;
|
4 |
+
|
5 |
+
// Exit if accessed directly
|
6 |
+
if( !defined('ABSPATH') ) {
|
7 |
+
exit;
|
8 |
+
}
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Factory request class.
|
12 |
+
*
|
13 |
+
* Performs a server request, retrieves banner data and stores it in the cache.
|
14 |
+
*
|
15 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
16 |
+
* @author Alexander Vitkalov <nechin.va@gmail.com>
|
17 |
+
*
|
18 |
+
* @since 1.0.1 Изменил имя класса и доработал его.
|
19 |
+
* @since 1.0.0 Added
|
20 |
+
*
|
21 |
+
* @package factory-adverts
|
22 |
+
* @copyright (c) 2019 Webcraftic Ltd
|
23 |
+
*/
|
24 |
+
class Creative_Motion_API {
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Rest request url.
|
28 |
+
*
|
29 |
+
* Define rest request url for rest request to remote server.
|
30 |
+
*
|
31 |
+
* @since 1.2.1
|
32 |
+
*/
|
33 |
+
const SERVER_URL = 'https://api.cm-wp.com';
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Rest route path.
|
37 |
+
*
|
38 |
+
* Define rest route path for rest request.
|
39 |
+
*
|
40 |
+
* @since 1.0.0
|
41 |
+
*/
|
42 |
+
const REST_ROUTE = '/adverds/v1/advt';
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Интервал между запросами по умолчанию
|
46 |
+
*
|
47 |
+
* Значение в часах.
|
48 |
+
*
|
49 |
+
* @since 1.0.1
|
50 |
+
*/
|
51 |
+
const DEFAULT_REQUESTS_INTERVAL = 24;
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Интервал между запросами, если сервер недоступен
|
55 |
+
*
|
56 |
+
* Значение в часах.
|
57 |
+
*
|
58 |
+
* @since 1.0.1
|
59 |
+
*/
|
60 |
+
const SERVER_UNAVAILABLE_INTERVAL = 4;
|
61 |
+
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Экзепляр плагина с которым взаимодействует этот модуль
|
65 |
+
*
|
66 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
67 |
+
* @since 1.0.1
|
68 |
+
* @var \Wbcr_Factory460_Plugin
|
69 |
+
*/
|
70 |
+
private $plugin;
|
71 |
+
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Request constructor.
|
75 |
+
*
|
76 |
+
* Variable initialization.
|
77 |
+
*
|
78 |
+
* @param \Wbcr_Factory460_Plugin $plugin_name
|
79 |
+
* @since 1.0.0 Added
|
80 |
+
*
|
81 |
+
*/
|
82 |
+
public function __construct(\Wbcr_Factory460_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 |
+
/**
|
109 |
+
* Get data from cache.
|
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 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Performs rest api request.
|
165 |
+
*
|
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/includes/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
-
// Silence is golden.
|
1 |
+
<?php
|
2 |
+
// Silence is golden.
|
libs/factory/adverts/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
-
// Silence is golden.
|
1 |
+
<?php
|
2 |
+
// Silence is golden.
|
libs/factory/adverts/langs/{wbcr_factory_adverts_131-ru_RU.mo → wbcr_factory_adverts_137-ru_RU.mo}
RENAMED
File without changes
|
libs/factory/adverts/langs/{wbcr_factory_adverts_131-ru_RU.po → wbcr_factory_adverts_137-ru_RU.po}
RENAMED
@@ -1,83 +1,83 @@
|
|
1 |
-
msgid ""
|
2 |
-
msgstr ""
|
3 |
-
"Project-Id-Version: factory_forms\n"
|
4 |
-
"POT-Creation-Date: 2018-10-16 22:44+0300\n"
|
5 |
-
"PO-Revision-Date: 2018-10-16 22:45+0300\n"
|
6 |
-
"Last-Translator: \n"
|
7 |
-
"Language-Team: Alex Kovalev <alex.kovalevv@gmail.com>\n"
|
8 |
-
"Language: ru_RU\n"
|
9 |
-
"MIME-Version: 1.0\n"
|
10 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
-
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Poedit 2.1.1\n"
|
13 |
-
"X-Poedit-Basepath: ..\n"
|
14 |
-
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
15 |
-
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
16 |
-
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
-
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
|
18 |
-
"X-Poedit-SearchPath-0: .\n"
|
19 |
-
|
20 |
-
#: includes/check-compatibility.php:80
|
21 |
-
msgid "warning"
|
22 |
-
msgstr "предупреждение"
|
23 |
-
|
24 |
-
#: includes/check-compatibility.php:82
|
25 |
-
#, php-format
|
26 |
-
msgid "The %s plugin has stopped."
|
27 |
-
msgstr "Работа плагина %s была остановлена."
|
28 |
-
|
29 |
-
#: includes/check-compatibility.php:83
|
30 |
-
msgid "Possible reasons:"
|
31 |
-
msgstr "Возможные причины:"
|
32 |
-
|
33 |
-
#: includes/check-compatibility.php:89
|
34 |
-
#, php-format
|
35 |
-
msgid "You need to update the PHP version to %s or higher!"
|
36 |
-
msgstr "Вам нужно обновить версию PHP до %s или выше!"
|
37 |
-
|
38 |
-
#: includes/check-compatibility.php:94
|
39 |
-
#, php-format
|
40 |
-
msgid "You need to update WordPress to %s or higher!"
|
41 |
-
msgstr "Вам нужно обновить WordPress до %s или выше!"
|
42 |
-
|
43 |
-
#: includes/functions.php:132
|
44 |
-
#, php-format
|
45 |
-
msgid ""
|
46 |
-
"%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead."
|
47 |
-
msgstr ""
|
48 |
-
"%1$s является <strong>устаревшим,</strong> начиная с версии %2$s в "
|
49 |
-
"Wordpress! Используйте %3$s."
|
50 |
-
|
51 |
-
#: includes/functions.php:134
|
52 |
-
#, php-format
|
53 |
-
msgid ""
|
54 |
-
"%1$s is <strong>deprecated</strong> since version %2$s with no alternative "
|
55 |
-
"available."
|
56 |
-
msgstr ""
|
57 |
-
"%1$s был вызван с параметром, который является <strong>устаревшими</strong> "
|
58 |
-
"начиная с версии %2$s , в настоящее время доступных альтернатив нет."
|
59 |
-
|
60 |
-
#: includes/plugin.class.php:202 includes/plugin.class.php:237
|
61 |
-
msgid ""
|
62 |
-
"You are trying to call this earlier than the plugin menu will be registered."
|
63 |
-
msgstr ""
|
64 |
-
"Вы пытаетесь вызвать это раньше, чем будет зарегистрировано меню плагина."
|
65 |
-
|
66 |
-
#: includes/plugin.class.php:220
|
67 |
-
msgid ""
|
68 |
-
"You are trying to get a link to a page that does not have multisite mode. "
|
69 |
-
"Clicking this link will lead the user to a non-existent page."
|
70 |
-
msgstr ""
|
71 |
-
"Вы пытаетесь получить ссылку на страницу, которая не имеет "
|
72 |
-
"многопользовательского режима. Щелчок по этой ссылке приведет пользователя "
|
73 |
-
"к несуществующей странице."
|
74 |
-
|
75 |
-
#: includes/plugin.class.php:222
|
76 |
-
msgid ""
|
77 |
-
"Trying to get a link to an unregistered page. You are trying to call this "
|
78 |
-
"earlier than the plugin menu will be registered."
|
79 |
-
msgstr ""
|
80 |
-
"Попытка получить ссылку на незарегистрированную страницу. Вы пытаетесь "
|
81 |
-
"вызвать это раньше, чем будет зарегистрировано меню плагина."
|
82 |
-
|
83 |
-
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: factory_forms\n"
|
4 |
+
"POT-Creation-Date: 2018-10-16 22:44+0300\n"
|
5 |
+
"PO-Revision-Date: 2018-10-16 22:45+0300\n"
|
6 |
+
"Last-Translator: \n"
|
7 |
+
"Language-Team: Alex Kovalev <alex.kovalevv@gmail.com>\n"
|
8 |
+
"Language: ru_RU\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.1.1\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
15 |
+
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
16 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
|
18 |
+
"X-Poedit-SearchPath-0: .\n"
|
19 |
+
|
20 |
+
#: includes/check-compatibility.php:80
|
21 |
+
msgid "warning"
|
22 |
+
msgstr "предупреждение"
|
23 |
+
|
24 |
+
#: includes/check-compatibility.php:82
|
25 |
+
#, php-format
|
26 |
+
msgid "The %s plugin has stopped."
|
27 |
+
msgstr "Работа плагина %s была остановлена."
|
28 |
+
|
29 |
+
#: includes/check-compatibility.php:83
|
30 |
+
msgid "Possible reasons:"
|
31 |
+
msgstr "Возможные причины:"
|
32 |
+
|
33 |
+
#: includes/check-compatibility.php:89
|
34 |
+
#, php-format
|
35 |
+
msgid "You need to update the PHP version to %s or higher!"
|
36 |
+
msgstr "Вам нужно обновить версию PHP до %s или выше!"
|
37 |
+
|
38 |
+
#: includes/check-compatibility.php:94
|
39 |
+
#, php-format
|
40 |
+
msgid "You need to update WordPress to %s or higher!"
|
41 |
+
msgstr "Вам нужно обновить WordPress до %s или выше!"
|
42 |
+
|
43 |
+
#: includes/functions.php:132
|
44 |
+
#, php-format
|
45 |
+
msgid ""
|
46 |
+
"%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead."
|
47 |
+
msgstr ""
|
48 |
+
"%1$s является <strong>устаревшим,</strong> начиная с версии %2$s в "
|
49 |
+
"Wordpress! Используйте %3$s."
|
50 |
+
|
51 |
+
#: includes/functions.php:134
|
52 |
+
#, php-format
|
53 |
+
msgid ""
|
54 |
+
"%1$s is <strong>deprecated</strong> since version %2$s with no alternative "
|
55 |
+
"available."
|
56 |
+
msgstr ""
|
57 |
+
"%1$s был вызван с параметром, который является <strong>устаревшими</strong> "
|
58 |
+
"начиная с версии %2$s , в настоящее время доступных альтернатив нет."
|
59 |
+
|
60 |
+
#: includes/plugin.class.php:202 includes/plugin.class.php:237
|
61 |
+
msgid ""
|
62 |
+
"You are trying to call this earlier than the plugin menu will be registered."
|
63 |
+
msgstr ""
|
64 |
+
"Вы пытаетесь вызвать это раньше, чем будет зарегистрировано меню плагина."
|
65 |
+
|
66 |
+
#: includes/plugin.class.php:220
|
67 |
+
msgid ""
|
68 |
+
"You are trying to get a link to a page that does not have multisite mode. "
|
69 |
+
"Clicking this link will lead the user to a non-existent page."
|
70 |
+
msgstr ""
|
71 |
+
"Вы пытаетесь получить ссылку на страницу, которая не имеет "
|
72 |
+
"многопользовательского режима. Щелчок по этой ссылке приведет пользователя "
|
73 |
+
"к несуществующей странице."
|
74 |
+
|
75 |
+
#: includes/plugin.class.php:222
|
76 |
+
msgid ""
|
77 |
+
"Trying to get a link to an unregistered page. You are trying to call this "
|
78 |
+
"earlier than the plugin menu will be registered."
|
79 |
+
msgstr ""
|
80 |
+
"Попытка получить ссылку на незарегистрированную страницу. Вы пытаетесь "
|
81 |
+
"вызвать это раньше, чем будет зарегистрировано меню плагина."
|
82 |
+
|
83 |
+
|
libs/factory/bootstrap/assets/css-min/bootstrap.accordion.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .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-461 .factory-accordion>h3{border-bottom:1px solid #DDD;cursor:pointer;padding:8px 15px;margin:0}.factory-bootstrap-461 .factory-accordion>div{display:none;margin:0;border-bottom:1px solid #DDD}.factory-bootstrap-461 .factory-accordion-item{display:none}.factory-bootstrap-461 .inner-factory-accordion-item{padding:10px 0}.factory-bootstrap-461 .factory-accordion>h3.active:hover{cursor:default}
|
libs/factory/bootstrap/assets/css-min/bootstrap.blue.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .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-461 .btn-primary:focus,.factory-bootstrap-461 .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-461 .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-461 .btn-primary:disabled,.factory-bootstrap-461 .btn-primary[disabled]{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.factory-bootstrap-461 .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-461 .pagination>.active>a,.factory-bootstrap-461 .pagination>.active>a:focus,.factory-bootstrap-461 .pagination>.active>a:hover,.factory-bootstrap-461 .pagination>.active>span,.factory-bootstrap-461 .pagination>.active>span:focus,.factory-bootstrap-461 .pagination>.active>span:hover{background-color:#e1a948;border-color:#d39323}
|
libs/factory/bootstrap/assets/css-min/bootstrap.coffee.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .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-461 .btn-primary:focus,.factory-bootstrap-461 .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-461 .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-461 .btn-primary:disabled,.factory-bootstrap-461 .btn-primary[disabled]{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.factory-bootstrap-461 .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-461 .pagination>.active>a,.factory-bootstrap-461 .pagination>.active>a:focus,.factory-bootstrap-461 .pagination>.active>a:hover,.factory-bootstrap-461 .pagination>.active>span,.factory-bootstrap-461 .pagination>.active>span:focus,.factory-bootstrap-461 .pagination>.active>span:hover{background-color:#c7a589;border-color:#b78a66}
|
libs/factory/bootstrap/assets/css-min/bootstrap.core.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-455 article,.factory-bootstrap-455 aside,.factory-bootstrap-455 details,.factory-bootstrap-455 figcaption,.factory-bootstrap-455 figure,.factory-bootstrap-455 footer,.factory-bootstrap-455 header,.factory-bootstrap-455 hgroup,.factory-bootstrap-455 main,.factory-bootstrap-455 nav,.factory-bootstrap-455 section,.factory-bootstrap-455 summary{display:block}.factory-bootstrap-455 audio,.factory-bootstrap-455 canvas,.factory-bootstrap-455 video{display:inline-block}.factory-bootstrap-455 audio:not([controls]){display:none;height:0}.factory-bootstrap-455 [hidden],.factory-bootstrap-455 template{display:none}.factory-bootstrap-455 body{margin:0}.factory-bootstrap-455 a{background:0 0}.factory-bootstrap-455 a:focus{outline:thin dotted}.factory-bootstrap-455 a:active,.factory-bootstrap-455 a:hover{outline:0}.factory-bootstrap-455 h1{margin:.67em 0}.factory-bootstrap-455 b,.factory-bootstrap-455 strong{font-weight:700}.factory-bootstrap-455 dfn{font-style:italic}.factory-bootstrap-455 hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-455 mark{color:#000;background:#ff0}.factory-bootstrap-455 code,.factory-bootstrap-455 kbd,.factory-bootstrap-455 pre,.factory-bootstrap-455 samp{font-size:1em}.factory-bootstrap-455 pre{white-space:pre-wrap}.factory-bootstrap-455 q{quotes:"\201C" "\201D" "\2018" "\2019"}.factory-bootstrap-455 sub,.factory-bootstrap-455 sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.factory-bootstrap-455 sup{top:-.5em}.factory-bootstrap-455 sub{bottom:-.25em}.factory-bootstrap-455 img{border:0}.factory-bootstrap-455 svg:not(:root){overflow:hidden}.factory-bootstrap-455 figure{margin:0}.factory-bootstrap-455 button,.factory-bootstrap-455 input,.factory-bootstrap-455 select,.factory-bootstrap-455 textarea{margin:0}.factory-bootstrap-455 button,.factory-bootstrap-455 select{text-transform:none}.factory-bootstrap-455 select{padding-right:4px!important}.factory-bootstrap-455 button,.factory-bootstrap-455 input[type=reset],.factory-bootstrap-455 input[type=submit],html .factory-bootstrap-455 input[type=button]{cursor:pointer;-webkit-appearance:button}.factory-bootstrap-455 button[disabled],html .factory-bootstrap-455 input[disabled]{cursor:default}.factory-bootstrap-455 input[type=checkbox],.factory-bootstrap-455 input[type=radio]{padding:0;box-sizing:border-box}.factory-bootstrap-455 input[type=search]{-webkit-appearance:textfield}.factory-bootstrap-455 input[type=search]::-webkit-search-cancel-button,.factory-bootstrap-455 input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.factory-bootstrap-455 button::-moz-focus-inner,.factory-bootstrap-455 input::-moz-focus-inner{padding:0;border:0}.factory-bootstrap-455 textarea{overflow:auto;vertical-align:top}.factory-bootstrap-455 table{border-collapse:collapse;border-spacing:0}@media print{.factory-bootstrap-455 *{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}.factory-bootstrap-455 a,.factory-bootstrap-455 a:visited{text-decoration:underline}.factory-bootstrap-455 a[href]:after{content:" (" attr(href) ")"}.factory-bootstrap-455 abbr[title]:after{content:" (" attr(title) ")"}.factory-bootstrap-455 a[href^="javascript:"]:after,.factory-bootstrap-455 a[href^="#"]:after{content:""}.factory-bootstrap-455 blockquote,.factory-bootstrap-455 pre{border:1px solid #999;page-break-inside:avoid}.factory-bootstrap-455 thead{display:table-header-group}.factory-bootstrap-455 img,.factory-bootstrap-455 tr{page-break-inside:avoid}.factory-bootstrap-455 img{max-width:100%!important}@page{margin:2cm .5cm}.factory-bootstrap-455 h2,.factory-bootstrap-455 h3,.factory-bootstrap-455 p{orphans:3;widows:3}.factory-bootstrap-455 h2,.factory-bootstrap-455 h3{page-break-after:avoid}.factory-bootstrap-455 select{background:#fff!important}.factory-bootstrap-455 .navbar{display:none}.factory-bootstrap-455 .table td,.factory-bootstrap-455 .table th{background-color:#fff!important}.factory-bootstrap-455 .btn>.caret,.factory-bootstrap-455 .dropup>.btn>.caret{border-top-color:#000!important}.factory-bootstrap-455 .label{border:1px solid #000}.factory-bootstrap-455 .table{border-collapse:collapse!important}.factory-bootstrap-455 .table-bordered td,.factory-bootstrap-455 .table-bordered th{border:1px solid #ddd!important}}.factory-bootstrap-455 *,.factory-bootstrap-455 :after,.factory-bootstrap-455 :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html .factory-bootstrap-455{-webkit-tap-highlight-color:rgba(0,0,0,0)}.factory-bootstrap-455 body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}.factory-bootstrap-455 button,.factory-bootstrap-455 input,.factory-bootstrap-455 select,.factory-bootstrap-455 textarea{font-family:inherit;font-size:inherit;line-height:inherit}.factory-bootstrap-455 img{vertical-align:middle}.factory-bootstrap-455 .img-responsive{display:block;height:auto;max-width:100%}.factory-bootstrap-455 .img-rounded{border-radius:6px}.factory-bootstrap-455 .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-455 .img-circle{border-radius:50%}.factory-bootstrap-455 hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.factory-bootstrap-455 .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.factory-bootstrap-455 .h1,.factory-bootstrap-455 .h2,.factory-bootstrap-455 .h3,.factory-bootstrap-455 .h4,.factory-bootstrap-455 .h5,.factory-bootstrap-455 .h6,.factory-bootstrap-455 h1,.factory-bootstrap-455 h2,.factory-bootstrap-455 h3,.factory-bootstrap-455 h4,.factory-bootstrap-455 h5,.factory-bootstrap-455 h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.factory-bootstrap-455 .h1 .small,.factory-bootstrap-455 .h1 small,.factory-bootstrap-455 .h2 .small,.factory-bootstrap-455 .h2 small,.factory-bootstrap-455 .h3 .small,.factory-bootstrap-455 .h3 small,.factory-bootstrap-455 .h4 .small,.factory-bootstrap-455 .h4 small,.factory-bootstrap-455 .h5 .small,.factory-bootstrap-455 .h5 small,.factory-bootstrap-455 .h6 .small,.factory-bootstrap-455 .h6 small,.factory-bootstrap-455 h1 .small,.factory-bootstrap-455 h1 small,.factory-bootstrap-455 h2 .small,.factory-bootstrap-455 h2 small,.factory-bootstrap-455 h3 .small,.factory-bootstrap-455 h3 small,.factory-bootstrap-455 h4 .small,.factory-bootstrap-455 h4 small,.factory-bootstrap-455 h5 .small,.factory-bootstrap-455 h5 small,.factory-bootstrap-455 h6 .small,.factory-bootstrap-455 h6 small{font-weight:400;line-height:1;color:#999}.factory-bootstrap-455 h1,.factory-bootstrap-455 h2,.factory-bootstrap-455 h3{margin-top:20px;margin-bottom:10px}.factory-bootstrap-455 h1 .small,.factory-bootstrap-455 h1 small,.factory-bootstrap-455 h2 .small,.factory-bootstrap-455 h2 small,.factory-bootstrap-455 h3 .small,.factory-bootstrap-455 h3 small{font-size:65%}.factory-bootstrap-455 h4,.factory-bootstrap-455 h5,.factory-bootstrap-455 h6{margin-top:10px;margin-bottom:10px}.factory-bootstrap-455 h4 .small,.factory-bootstrap-455 h4 small,.factory-bootstrap-455 h5 .small,.factory-bootstrap-455 h5 small,.factory-bootstrap-455 h6 .small,.factory-bootstrap-455 h6 small{font-size:75%}.factory-bootstrap-455 .h1,.factory-bootstrap-455 h1{font-size:36px}.factory-bootstrap-455 .h2,.factory-bootstrap-455 h2{font-size:30px}.factory-bootstrap-455 .h3,.factory-bootstrap-455 h3{font-size:24px}.factory-bootstrap-455 .h4,.factory-bootstrap-455 h4{font-size:18px}.factory-bootstrap-455 .h5,.factory-bootstrap-455 h5{font-size:14px}.factory-bootstrap-455 .h6,.factory-bootstrap-455 h6{font-size:12px}.factory-bootstrap-455 p{margin:0 0 10px}.factory-bootstrap-455 .lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.factory-bootstrap-455 .small,.factory-bootstrap-455 small{font-size:85%}.factory-bootstrap-455 cite{font-style:normal}.factory-bootstrap-455 .text-muted{color:#999}.factory-bootstrap-455 .text-primary{color:#428bca}.factory-bootstrap-455 .text-primary:hover{color:#3071a9}.factory-bootstrap-455 .text-warning{color:#8a6d3b}.factory-bootstrap-455 .text-warning:hover{color:#66512c}.factory-bootstrap-455 .text-danger{color:#a94442}.factory-bootstrap-455 .text-danger:hover{color:#843534}.factory-bootstrap-455 .text-success{color:#3c763d}.factory-bootstrap-455 .text-success:hover{color:#2b542c}.factory-bootstrap-455 .text-info{color:#31708f}.factory-bootstrap-455 .text-info:hover{color:#245269}.factory-bootstrap-455 .text-left{text-align:left}.factory-bootstrap-455 .text-right{text-align:right}.factory-bootstrap-455 .text-center{text-align:center}.factory-bootstrap-455 .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}.factory-bootstrap-455 ol,.factory-bootstrap-455 ul{margin-top:0;margin-bottom:10px}.factory-bootstrap-455 ol ol,.factory-bootstrap-455 ol ul,.factory-bootstrap-455 ul ol,.factory-bootstrap-455 ul ul{margin-bottom:0}.factory-bootstrap-455 .list-inline,.factory-bootstrap-455 .list-unstyled{padding-left:0;list-style:none}.factory-bootstrap-455 .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.factory-bootstrap-455 .list-inline>li:first-child{padding-left:0}.factory-bootstrap-455 dl{margin-top:0;margin-bottom:20px}.factory-bootstrap-455 dd,.factory-bootstrap-455 dt{line-height:1.428571429}.factory-bootstrap-455 dt{font-weight:700}.factory-bootstrap-455 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-455 abbr[data-original-title],.factory-bootstrap-455 abbr[title]{cursor:help;border-bottom:1px dotted #999}.factory-bootstrap-455 .initialism{font-size:90%;text-transform:uppercase}.factory-bootstrap-455 blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}.factory-bootstrap-455 blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}.factory-bootstrap-455 blockquote p:last-child{margin-bottom:0}.factory-bootstrap-455 blockquote .small,.factory-bootstrap-455 blockquote small{display:block;line-height:1.428571429;color:#999}.factory-bootstrap-455 blockquote .small:before,.factory-bootstrap-455 blockquote small:before{content:'\2014 \00A0'}.factory-bootstrap-455 blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}.factory-bootstrap-455 blockquote.pull-right .small,.factory-bootstrap-455 blockquote.pull-right p,.factory-bootstrap-455 blockquote.pull-right small{text-align:right}.factory-bootstrap-455 blockquote.pull-right .small:before,.factory-bootstrap-455 blockquote.pull-right small:before{content:''}.factory-bootstrap-455 blockquote.pull-right .small:after,.factory-bootstrap-455 blockquote.pull-right small:after{content:'\00A0 \2014'}.factory-bootstrap-455 blockquote:after,.factory-bootstrap-455 blockquote:before{content:""}.factory-bootstrap-455 address{margin-bottom:20px;font-style:normal;line-height:1.428571429}.factory-bootstrap-455 code,.factory-bootstrap-455 kbd,.factory-bootstrap-455 pre,.factory-bootstrap-455 samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.factory-bootstrap-455 code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}.factory-bootstrap-455 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-455 pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.factory-bootstrap-455 .pre-scrollable{max-height:340px;overflow-y:scroll}.factory-bootstrap-455 .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.factory-bootstrap-455 .container:after,.factory-bootstrap-455 .container:before{display:table;content:" "}.factory-bootstrap-455 .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-455 .row{margin-right:-15px;margin-left:-15px}.factory-bootstrap-455 .row:after,.factory-bootstrap-455 .row:before{display:table;content:" "}.factory-bootstrap-455 .row:after{clear:both}.factory-bootstrap-455 .col-lg-1,.factory-bootstrap-455 .col-lg-10,.factory-bootstrap-455 .col-lg-11,.factory-bootstrap-455 .col-lg-12,.factory-bootstrap-455 .col-lg-2,.factory-bootstrap-455 .col-lg-3,.factory-bootstrap-455 .col-lg-4,.factory-bootstrap-455 .col-lg-5,.factory-bootstrap-455 .col-lg-6,.factory-bootstrap-455 .col-lg-7,.factory-bootstrap-455 .col-lg-8,.factory-bootstrap-455 .col-lg-9,.factory-bootstrap-455 .col-md-1,.factory-bootstrap-455 .col-md-10,.factory-bootstrap-455 .col-md-11,.factory-bootstrap-455 .col-md-12,.factory-bootstrap-455 .col-md-2,.factory-bootstrap-455 .col-md-3,.factory-bootstrap-455 .col-md-4,.factory-bootstrap-455 .col-md-5,.factory-bootstrap-455 .col-md-6,.factory-bootstrap-455 .col-md-7,.factory-bootstrap-455 .col-md-8,.factory-bootstrap-455 .col-md-9,.factory-bootstrap-455 .col-sm-1,.factory-bootstrap-455 .col-sm-10,.factory-bootstrap-455 .col-sm-11,.factory-bootstrap-455 .col-sm-12,.factory-bootstrap-455 .col-sm-2,.factory-bootstrap-455 .col-sm-3,.factory-bootstrap-455 .col-sm-4,.factory-bootstrap-455 .col-sm-5,.factory-bootstrap-455 .col-sm-6,.factory-bootstrap-455 .col-sm-7,.factory-bootstrap-455 .col-sm-8,.factory-bootstrap-455 .col-sm-9,.factory-bootstrap-455 .col-xs-1,.factory-bootstrap-455 .col-xs-10,.factory-bootstrap-455 .col-xs-11,.factory-bootstrap-455 .col-xs-12,.factory-bootstrap-455 .col-xs-2,.factory-bootstrap-455 .col-xs-3,.factory-bootstrap-455 .col-xs-4,.factory-bootstrap-455 .col-xs-5,.factory-bootstrap-455 .col-xs-6,.factory-bootstrap-455 .col-xs-7,.factory-bootstrap-455 .col-xs-8,.factory-bootstrap-455 .col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.factory-bootstrap-455 .col-xs-1,.factory-bootstrap-455 .col-xs-10,.factory-bootstrap-455 .col-xs-11,.factory-bootstrap-455 .col-xs-12,.factory-bootstrap-455 .col-xs-2,.factory-bootstrap-455 .col-xs-3,.factory-bootstrap-455 .col-xs-4,.factory-bootstrap-455 .col-xs-5,.factory-bootstrap-455 .col-xs-6,.factory-bootstrap-455 .col-xs-7,.factory-bootstrap-455 .col-xs-8,.factory-bootstrap-455 .col-xs-9{float:left}.factory-bootstrap-455 .col-xs-12{width:100%}.factory-bootstrap-455 .col-xs-11{width:91.66666666666666%}.factory-bootstrap-455 .col-xs-10{width:83.33333333333334%}.factory-bootstrap-455 .col-xs-9{width:75%}.factory-bootstrap-455 .col-xs-8{width:66.66666666666666%}.factory-bootstrap-455 .col-xs-7{width:58.333333333333336%}.factory-bootstrap-455 .col-xs-6{width:50%}.factory-bootstrap-455 .col-xs-5{width:41.66666666666667%}.factory-bootstrap-455 .col-xs-4{width:33.33333333333333%}.factory-bootstrap-455 .col-xs-3{width:25%}.factory-bootstrap-455 .col-xs-2{width:16.666666666666664%}.factory-bootstrap-455 .col-xs-1{width:8.333333333333332%}.factory-bootstrap-455 .col-xs-pull-12{right:100%}.factory-bootstrap-455 .col-xs-pull-11{right:91.66666666666666%}.factory-bootstrap-455 .col-xs-pull-10{right:83.33333333333334%}.factory-bootstrap-455 .col-xs-pull-9{right:75%}.factory-bootstrap-455 .col-xs-pull-8{right:66.66666666666666%}.factory-bootstrap-455 .col-xs-pull-7{right:58.333333333333336%}.factory-bootstrap-455 .col-xs-pull-6{right:50%}.factory-bootstrap-455 .col-xs-pull-5{right:41.66666666666667%}.factory-bootstrap-455 .col-xs-pull-4{right:33.33333333333333%}.factory-bootstrap-455 .col-xs-pull-3{right:25%}.factory-bootstrap-455 .col-xs-pull-2{right:16.666666666666664%}.factory-bootstrap-455 .col-xs-pull-1{right:8.333333333333332%}.factory-bootstrap-455 .col-xs-pull-0{right:0}.factory-bootstrap-455 .col-xs-push-12{left:100%}.factory-bootstrap-455 .col-xs-push-11{left:91.66666666666666%}.factory-bootstrap-455 .col-xs-push-10{left:83.33333333333334%}.factory-bootstrap-455 .col-xs-push-9{left:75%}.factory-bootstrap-455 .col-xs-push-8{left:66.66666666666666%}.factory-bootstrap-455 .col-xs-push-7{left:58.333333333333336%}.factory-bootstrap-455 .col-xs-push-6{left:50%}.factory-bootstrap-455 .col-xs-push-5{left:41.66666666666667%}.factory-bootstrap-455 .col-xs-push-4{left:33.33333333333333%}.factory-bootstrap-455 .col-xs-push-3{left:25%}.factory-bootstrap-455 .col-xs-push-2{left:16.666666666666664%}.factory-bootstrap-455 .col-xs-push-1{left:8.333333333333332%}.factory-bootstrap-455 .col-xs-push-0{left:0}.factory-bootstrap-455 .col-xs-offset-12{margin-left:100%}.factory-bootstrap-455 .col-xs-offset-11{margin-left:91.66666666666666%}.factory-bootstrap-455 .col-xs-offset-10{margin-left:83.33333333333334%}.factory-bootstrap-455 .col-xs-offset-9{margin-left:75%}.factory-bootstrap-455 .col-xs-offset-8{margin-left:66.66666666666666%}.factory-bootstrap-455 .col-xs-offset-7{margin-left:58.333333333333336%}.factory-bootstrap-455 .col-xs-offset-6{margin-left:50%}.factory-bootstrap-455 .col-xs-offset-5{margin-left:41.66666666666667%}.factory-bootstrap-455 .col-xs-offset-4{margin-left:33.33333333333333%}.factory-bootstrap-455 .col-xs-offset-3{margin-left:25%}.factory-bootstrap-455 .col-xs-offset-2{margin-left:16.666666666666664%}.factory-bootstrap-455 .col-xs-offset-1{margin-left:8.333333333333332%}.factory-bootstrap-455 .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-455 table{max-width:100%;background-color:transparent}.factory-bootstrap-455 th{text-align:left}.factory-bootstrap-455 .table{width:100%;margin-bottom:20px}.factory-bootstrap-455 .table>tbody>tr>td,.factory-bootstrap-455 .table>tbody>tr>th,.factory-bootstrap-455 .table>tfoot>tr>td,.factory-bootstrap-455 .table>tfoot>tr>th,.factory-bootstrap-455 .table>thead>tr>td,.factory-bootstrap-455 .table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.factory-bootstrap-455 .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.factory-bootstrap-455 .table>caption+thead>tr:first-child>td,.factory-bootstrap-455 .table>caption+thead>tr:first-child>th,.factory-bootstrap-455 .table>colgroup+thead>tr:first-child>td,.factory-bootstrap-455 .table>colgroup+thead>tr:first-child>th,.factory-bootstrap-455 .table>thead:first-child>tr:first-child>td,.factory-bootstrap-455 .table>thead:first-child>tr:first-child>th{border-top:0}.factory-bootstrap-455 .table>tbody+tbody{border-top:2px solid #ddd}.factory-bootstrap-455 .table .table{background-color:#fff}.factory-bootstrap-455 .table-condensed>tbody>tr>td,.factory-bootstrap-455 .table-condensed>tbody>tr>th,.factory-bootstrap-455 .table-condensed>tfoot>tr>td,.factory-bootstrap-455 .table-condensed>tfoot>tr>th,.factory-bootstrap-455 .table-condensed>thead>tr>td,.factory-bootstrap-455 .table-condensed>thead>tr>th{padding:5px}.factory-bootstrap-455 .table-bordered,.factory-bootstrap-455 .table-bordered>tbody>tr>td,.factory-bootstrap-455 .table-bordered>tbody>tr>th,.factory-bootstrap-455 .table-bordered>tfoot>tr>td,.factory-bootstrap-455 .table-bordered>tfoot>tr>th,.factory-bootstrap-455 .table-bordered>thead>tr>td,.factory-bootstrap-455 .table-bordered>thead>tr>th{border:1px solid #ddd}.factory-bootstrap-455 .table-bordered>thead>tr>td,.factory-bootstrap-455 .table-bordered>thead>tr>th{border-bottom-width:2px}.factory-bootstrap-455 .table-striped>tbody>tr:nth-child(odd)>td,.factory-bootstrap-455 .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.factory-bootstrap-455 .table-hover>tbody>tr:hover>td,.factory-bootstrap-455 .table-hover>tbody>tr:hover>th{background-color:#f5f5f5}.factory-bootstrap-455 table col[class*=col-]{position:static;display:table-column;float:none}.factory-bootstrap-455 table td[class*=col-],.factory-bootstrap-455 table th[class*=col-]{display:table-cell;float:none}.factory-bootstrap-455 .table>tbody>.active>td,.factory-bootstrap-455 .table>tbody>.active>th,.factory-bootstrap-455 .table>tbody>tr>.active,.factory-bootstrap-455 .table>tfoot>.active>td,.factory-bootstrap-455 .table>tfoot>.active>th,.factory-bootstrap-455 .table>tfoot>tr>.active,.factory-bootstrap-455 .table>thead>.active>td,.factory-bootstrap-455 .table>thead>.active>th,.factory-bootstrap-455 .table>thead>tr>.active{background-color:#f5f5f5}.factory-bootstrap-455 .table-hover>tbody>.active:hover>td,.factory-bootstrap-455 .table-hover>tbody>.active:hover>th,.factory-bootstrap-455 .table-hover>tbody>tr>.active:hover{background-color:#e8e8e8}.factory-bootstrap-455 .table>tbody>.success>td,.factory-bootstrap-455 .table>tbody>.success>th,.factory-bootstrap-455 .table>tbody>tr>.success,.factory-bootstrap-455 .table>tfoot>.success>td,.factory-bootstrap-455 .table>tfoot>.success>th,.factory-bootstrap-455 .table>tfoot>tr>.success,.factory-bootstrap-455 .table>thead>.success>td,.factory-bootstrap-455 .table>thead>.success>th,.factory-bootstrap-455 .table>thead>tr>.success{background-color:#dff0d8}.factory-bootstrap-455 .table-hover>tbody>.success:hover>td,.factory-bootstrap-455 .table-hover>tbody>.success:hover>th,.factory-bootstrap-455 .table-hover>tbody>tr>.success:hover{background-color:#d0e9c6}.factory-bootstrap-455 .table>tbody>.danger>td,.factory-bootstrap-455 .table>tbody>.danger>th,.factory-bootstrap-455 .table>tbody>tr>.danger,.factory-bootstrap-455 .table>tfoot>.danger>td,.factory-bootstrap-455 .table>tfoot>.danger>th,.factory-bootstrap-455 .table>tfoot>tr>.danger,.factory-bootstrap-455 .table>thead>.danger>td,.factory-bootstrap-455 .table>thead>.danger>th,.factory-bootstrap-455 .table>thead>tr>.danger{background-color:#f2dede}.factory-bootstrap-455 .table-hover>tbody>.danger:hover>td,.factory-bootstrap-455 .table-hover>tbody>.danger:hover>th,.factory-bootstrap-455 .table-hover>tbody>tr>.danger:hover{background-color:#ebcccc}.factory-bootstrap-455 .table>tbody>.warning>td,.factory-bootstrap-455 .table>tbody>.warning>th,.factory-bootstrap-455 .table>tbody>tr>.warning,.factory-bootstrap-455 .table>tfoot>.warning>td,.factory-bootstrap-455 .table>tfoot>.warning>th,.factory-bootstrap-455 .table>tfoot>tr>.warning,.factory-bootstrap-455 .table>thead>.warning>td,.factory-bootstrap-455 .table>thead>.warning>th,.factory-bootstrap-455 .table>thead>tr>.warning{background-color:#fcf8e3}.factory-bootstrap-455 .table-hover>tbody>.warning:hover>td,.factory-bootstrap-455 .table-hover>tbody>.warning:hover>th,.factory-bootstrap-455 .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-455 fieldset{padding:0;margin:0;border:0}.factory-bootstrap-455 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-455 label{display:inline-block;margin-bottom:5px;font-weight:700}.factory-bootstrap-455 input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-455 input[type=checkbox],.factory-bootstrap-455 input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}.factory-bootstrap-455 input[type=file]{display:block}.factory-bootstrap-455 select[multiple],.factory-bootstrap-455 select[size]{height:auto}.factory-bootstrap-455 select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}.factory-bootstrap-455 input[type=checkbox]:focus,.factory-bootstrap-455 input[type=file]:focus,.factory-bootstrap-455 input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-455 input[type=number]::-webkit-inner-spin-button,.factory-bootstrap-455 input[type=number]::-webkit-outer-spin-button{height:auto}.factory-bootstrap-455 output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.factory-bootstrap-455 .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-455 .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-455 .form-control:-moz-placeholder{color:#999}.factory-bootstrap-455 .form-control::-moz-placeholder{color:#999;opacity:1}.factory-bootstrap-455 .form-control:-ms-input-placeholder{color:#999}.factory-bootstrap-455 .form-control::-webkit-input-placeholder{color:#999}.factory-bootstrap-455 .form-control[disabled],.factory-bootstrap-455 .form-control[readonly],.factory-bootstrap-455 fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}.factory-bootstrap-455 textarea.form-control{height:auto}.factory-bootstrap-455 .form-group{margin-bottom:15px}.factory-bootstrap-455 .checkbox,.factory-bootstrap-455 .radio{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.factory-bootstrap-455 .checkbox label,.factory-bootstrap-455 .radio label{display:inline;margin-bottom:0;font-weight:400;cursor:pointer}.factory-bootstrap-455 .checkbox input[type=checkbox],.factory-bootstrap-455 .checkbox-inline input[type=checkbox],.factory-bootstrap-455 .radio input[type=radio],.factory-bootstrap-455 .radio-inline input[type=radio]{float:left;margin-left:-20px}.factory-bootstrap-455 .checkbox+.checkbox,.factory-bootstrap-455 .radio+.radio{margin-top:-5px}.factory-bootstrap-455 .checkbox-inline,.factory-bootstrap-455 .radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.factory-bootstrap-455 .checkbox-inline+.checkbox-inline,.factory-bootstrap-455 .radio-inline+.radio-inline{margin-top:0;margin-left:10px}.factory-bootstrap-455 .checkbox-inline[disabled],.factory-bootstrap-455 .checkbox[disabled],.factory-bootstrap-455 .radio-inline[disabled],.factory-bootstrap-455 .radio[disabled],.factory-bootstrap-455 fieldset[disabled] .checkbox,.factory-bootstrap-455 fieldset[disabled] .checkbox-inline,.factory-bootstrap-455 fieldset[disabled] .radio,.factory-bootstrap-455 fieldset[disabled] .radio-inline,.factory-bootstrap-455 fieldset[disabled] input[type=checkbox],.factory-bootstrap-455 fieldset[disabled] input[type=radio],.factory-bootstrap-455 input[type=checkbox][disabled],.factory-bootstrap-455 input[type=radio][disabled]{cursor:not-allowed}.factory-bootstrap-455 .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-455 select.input-sm{height:30px;line-height:30px}.factory-bootstrap-455 textarea.input-sm{height:auto}.factory-bootstrap-455 .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-455 select.input-lg{height:46px;line-height:46px}.factory-bootstrap-455 textarea.input-lg{height:auto}.factory-bootstrap-455 .has-warning .checkbox,.factory-bootstrap-455 .has-warning .checkbox-inline,.factory-bootstrap-455 .has-warning .control-label,.factory-bootstrap-455 .has-warning .help-block,.factory-bootstrap-455 .has-warning .radio,.factory-bootstrap-455 .has-warning .radio-inline{color:#8a6d3b}.factory-bootstrap-455 .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-455 .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-455 .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.factory-bootstrap-455 .has-error .checkbox,.factory-bootstrap-455 .has-error .checkbox-inline,.factory-bootstrap-455 .has-error .control-label,.factory-bootstrap-455 .has-error .help-block,.factory-bootstrap-455 .has-error .radio,.factory-bootstrap-455 .has-error .radio-inline{color:#a94442}.factory-bootstrap-455 .controls{display:block}.factory-bootstrap-455 .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-455 .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-455 .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.factory-bootstrap-455 .has-success .checkbox,.factory-bootstrap-455 .has-success .checkbox-inline,.factory-bootstrap-455 .has-success .control-label,.factory-bootstrap-455 .has-success .help-block,.factory-bootstrap-455 .has-success .radio,.factory-bootstrap-455 .has-success .radio-inline{color:#3c763d}.factory-bootstrap-455 .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-455 .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-455 .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.factory-bootstrap-455 .form-control-static{margin-bottom:0}.factory-bootstrap-455 .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-455 .form-horizontal .checkbox,.factory-bootstrap-455 .form-horizontal .checkbox-inline,.factory-bootstrap-455 .form-horizontal .control-label,.factory-bootstrap-455 .form-horizontal .radio,.factory-bootstrap-455 .form-horizontal .radio-inline{position:relative;padding-top:7px;margin-top:0;margin-bottom:0}.factory-bootstrap-455 .form-horizontal .control-label{max-width:200px}.factory-bootstrap-455 .form-horizontal .checkbox,.factory-bootstrap-455 .form-horizontal .radio{min-height:27px}.factory-bootstrap-455 .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.factory-bootstrap-455 .form-horizontal .form-group:after,.factory-bootstrap-455 .form-horizontal .form-group:before{display:table;content:" "}.factory-bootstrap-455 .form-horizontal .form-group:after{clear:both}.factory-bootstrap-455 .form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.factory-bootstrap-455 .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-455 .btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-455 .btn{text-decoration:none}.factory-bootstrap-455 .btn:focus,.factory-bootstrap-455 .btn:hover{color:#333;text-decoration:none}.factory-bootstrap-455 .btn.disabled,.factory-bootstrap-455 .btn[disabled],.factory-bootstrap-455 fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-455 .btn-default.active,.factory-bootstrap-455 .btn-default:active,.factory-bootstrap-455 .btn-default:focus,.factory-bootstrap-455 .btn-default:hover,.factory-bootstrap-455 .open .dropdown-toggle.btn-default{background:#fafafa;border-color:#999;color:#222}.factory-bootstrap-455 .btn-default.active,.factory-bootstrap-455 .btn-default:active,.factory-bootstrap-455 .open .dropdown-toggle.btn-default{background-image:none}.factory-bootstrap-455 .btn-default.disabled,.factory-bootstrap-455 .btn-default.disabled.active,.factory-bootstrap-455 .btn-default.disabled:active,.factory-bootstrap-455 .btn-default.disabled:focus,.factory-bootstrap-455 .btn-default.disabled:hover,.factory-bootstrap-455 .btn-default[disabled],.factory-bootstrap-455 .btn-default[disabled].active,.factory-bootstrap-455 .btn-default[disabled]:active,.factory-bootstrap-455 .btn-default[disabled]:focus,.factory-bootstrap-455 .btn-default[disabled]:hover,.factory-bootstrap-455 fieldset[disabled] .btn-default,.factory-bootstrap-455 fieldset[disabled] .btn-default.active,.factory-bootstrap-455 fieldset[disabled] .btn-default:active,.factory-bootstrap-455 fieldset[disabled] .btn-default:focus,.factory-bootstrap-455 fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.factory-bootstrap-455 .btn-default .badge{color:#fff;background-color:#fff}.factory-bootstrap-455 .btn-primary.active,.factory-bootstrap-455 .btn-primary:active,.factory-bootstrap-455 .btn-primary:focus,.factory-bootstrap-455 .btn-primary:hover,.factory-bootstrap-455 .open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.factory-bootstrap-455 .btn-primary.active,.factory-bootstrap-455 .btn-primary:active,.factory-bootstrap-455 .open .dropdown-toggle.btn-primary{background-image:none}.factory-bootstrap-455 .btn-primary.disabled,.factory-bootstrap-455 .btn-primary.disabled.active,.factory-bootstrap-455 .btn-primary.disabled:active,.factory-bootstrap-455 .btn-primary.disabled:focus,.factory-bootstrap-455 .btn-primary.disabled:hover,.factory-bootstrap-455 .btn-primary[disabled],.factory-bootstrap-455 .btn-primary[disabled].active,.factory-bootstrap-455 .btn-primary[disabled]:active,.factory-bootstrap-455 .btn-primary[disabled]:focus,.factory-bootstrap-455 .btn-primary[disabled]:hover,.factory-bootstrap-455 fieldset[disabled] .btn-primary,.factory-bootstrap-455 fieldset[disabled] .btn-primary.active,.factory-bootstrap-455 fieldset[disabled] .btn-primary:active,.factory-bootstrap-455 fieldset[disabled] .btn-primary:focus,.factory-bootstrap-455 fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.factory-bootstrap-455 .btn-primary .badge{color:#428bca;background-color:#fff}.factory-bootstrap-455 .btn-warning{color:#fff;background-color:#f0ad4e}.factory-bootstrap-455 .btn-warning.active,.factory-bootstrap-455 .btn-warning:active,.factory-bootstrap-455 .btn-warning:focus,.factory-bootstrap-455 .btn-warning:hover,.factory-bootstrap-455 .open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.factory-bootstrap-455 .btn-warning.active,.factory-bootstrap-455 .btn-warning:active,.factory-bootstrap-455 .open .dropdown-toggle.btn-warning{background-image:none}.factory-bootstrap-455 .btn-warning.disabled,.factory-bootstrap-455 .btn-warning.disabled.active,.factory-bootstrap-455 .btn-warning.disabled:active,.factory-bootstrap-455 .btn-warning.disabled:focus,.factory-bootstrap-455 .btn-warning.disabled:hover,.factory-bootstrap-455 .btn-warning[disabled],.factory-bootstrap-455 .btn-warning[disabled].active,.factory-bootstrap-455 .btn-warning[disabled]:active,.factory-bootstrap-455 .btn-warning[disabled]:focus,.factory-bootstrap-455 .btn-warning[disabled]:hover,.factory-bootstrap-455 fieldset[disabled] .btn-warning,.factory-bootstrap-455 fieldset[disabled] .btn-warning.active,.factory-bootstrap-455 fieldset[disabled] .btn-warning:active,.factory-bootstrap-455 fieldset[disabled] .btn-warning:focus,.factory-bootstrap-455 fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.factory-bootstrap-455 .btn-warning .badge{color:#f0ad4e;background-color:#fff}.factory-bootstrap-455 .btn-success{color:#fff;background-color:#5cb85c}.factory-bootstrap-455 .btn-success.active,.factory-bootstrap-455 .btn-success:active,.factory-bootstrap-455 .btn-success:focus,.factory-bootstrap-455 .btn-success:hover,.factory-bootstrap-455 .open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.factory-bootstrap-455 .btn-success.active,.factory-bootstrap-455 .btn-success:active,.factory-bootstrap-455 .open .dropdown-toggle.btn-success{background-image:none}.factory-bootstrap-455 .btn-success.disabled,.factory-bootstrap-455 .btn-success.disabled.active,.factory-bootstrap-455 .btn-success.disabled:active,.factory-bootstrap-455 .btn-success.disabled:focus,.factory-bootstrap-455 .btn-success.disabled:hover,.factory-bootstrap-455 .btn-success[disabled],.factory-bootstrap-455 .btn-success[disabled].active,.factory-bootstrap-455 .btn-success[disabled]:active,.factory-bootstrap-455 .btn-success[disabled]:focus,.factory-bootstrap-455 .btn-success[disabled]:hover,.factory-bootstrap-455 fieldset[disabled] .btn-success,.factory-bootstrap-455 fieldset[disabled] .btn-success.active,.factory-bootstrap-455 fieldset[disabled] .btn-success:active,.factory-bootstrap-455 fieldset[disabled] .btn-success:focus,.factory-bootstrap-455 fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.factory-bootstrap-455 .btn-success .badge{color:#5cb85c;background-color:#fff}.factory-bootstrap-455 .btn-info{color:#fff;background-color:#5bc0de}.factory-bootstrap-455 .btn-info.active,.factory-bootstrap-455 .btn-info:active,.factory-bootstrap-455 .btn-info:focus,.factory-bootstrap-455 .btn-info:hover,.factory-bootstrap-455 .open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.factory-bootstrap-455 .btn-info.active,.factory-bootstrap-455 .btn-info:active,.factory-bootstrap-455 .open .dropdown-toggle.btn-info{background-image:none}.factory-bootstrap-455 .btn-info.disabled,.factory-bootstrap-455 .btn-info.disabled.active,.factory-bootstrap-455 .btn-info.disabled:active,.factory-bootstrap-455 .btn-info.disabled:focus,.factory-bootstrap-455 .btn-info.disabled:hover,.factory-bootstrap-455 .btn-info[disabled],.factory-bootstrap-455 .btn-info[disabled].active,.factory-bootstrap-455 .btn-info[disabled]:active,.factory-bootstrap-455 .btn-info[disabled]:focus,.factory-bootstrap-455 .btn-info[disabled]:hover,.factory-bootstrap-455 fieldset[disabled] .btn-info,.factory-bootstrap-455 fieldset[disabled] .btn-info.active,.factory-bootstrap-455 fieldset[disabled] .btn-info:active,.factory-bootstrap-455 fieldset[disabled] .btn-info:focus,.factory-bootstrap-455 fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.factory-bootstrap-455 .btn-info .badge{color:#5bc0de;background-color:#fff}.factory-bootstrap-455 .btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.factory-bootstrap-455 .btn-link,.factory-bootstrap-455 .btn-link:active,.factory-bootstrap-455 .btn-link[disabled],.factory-bootstrap-455 fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-455 .btn-link,.factory-bootstrap-455 .btn-link:active,.factory-bootstrap-455 .btn-link:focus,.factory-bootstrap-455 .btn-link:hover{border-color:transparent}.factory-bootstrap-455 .btn-link:focus,.factory-bootstrap-455 .btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.factory-bootstrap-455 .btn-link[disabled]:focus,.factory-bootstrap-455 .btn-link[disabled]:hover,.factory-bootstrap-455 fieldset[disabled] .btn-link:focus,.factory-bootstrap-455 fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.factory-bootstrap-455 .btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-455 .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-455 .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-455 .btn-block{display:block;width:100%;padding-right:0;padding-left:0}.factory-bootstrap-455 .btn-block+.btn-block{margin-top:5px}.factory-bootstrap-455 input[type=button].btn-block,.factory-bootstrap-455 input[type=reset].btn-block,.factory-bootstrap-455 input[type=submit].btn-block{width:100%}.factory-bootstrap-455 .fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.factory-bootstrap-455 .fade.in{opacity:1}.factory-bootstrap-455 .collapse{display:none}.factory-bootstrap-455 .collapse.in{display:block}.factory-bootstrap-455 .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-455 .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-455 .glyphicon:empty{width:1em}.factory-bootstrap-455 .glyphicon-asterisk:before{content:"\2a"}.factory-bootstrap-455 .glyphicon-plus:before{content:"\2b"}.factory-bootstrap-455 .glyphicon-euro:before{content:"\20ac"}.factory-bootstrap-455 .glyphicon-minus:before{content:"\2212"}.factory-bootstrap-455 .glyphicon-cloud:before{content:"\2601"}.factory-bootstrap-455 .glyphicon-envelope:before{content:"\2709"}.factory-bootstrap-455 .glyphicon-pencil:before{content:"\270f"}.factory-bootstrap-455 .glyphicon-glass:before{content:"\e001"}.factory-bootstrap-455 .glyphicon-music:before{content:"\e002"}.factory-bootstrap-455 .glyphicon-search:before{content:"\e003"}.factory-bootstrap-455 .glyphicon-heart:before{content:"\e005"}.factory-bootstrap-455 .glyphicon-star:before{content:"\e006"}.factory-bootstrap-455 .glyphicon-star-empty:before{content:"\e007"}.factory-bootstrap-455 .glyphicon-user:before{content:"\e008"}.factory-bootstrap-455 .glyphicon-film:before{content:"\e009"}.factory-bootstrap-455 .glyphicon-th-large:before{content:"\e010"}.factory-bootstrap-455 .glyphicon-th:before{content:"\e011"}.factory-bootstrap-455 .glyphicon-th-list:before{content:"\e012"}.factory-bootstrap-455 .glyphicon-ok:before{content:"\e013"}.factory-bootstrap-455 .glyphicon-remove:before{content:"\e014"}.factory-bootstrap-455 .glyphicon-zoom-in:before{content:"\e015"}.factory-bootstrap-455 .glyphicon-zoom-out:before{content:"\e016"}.factory-bootstrap-455 .glyphicon-off:before{content:"\e017"}.factory-bootstrap-455 .glyphicon-signal:before{content:"\e018"}.factory-bootstrap-455 .glyphicon-cog:before{content:"\e019"}.factory-bootstrap-455 .glyphicon-trash:before{content:"\e020"}.factory-bootstrap-455 .glyphicon-home:before{content:"\e021"}.factory-bootstrap-455 .glyphicon-file:before{content:"\e022"}.factory-bootstrap-455 .glyphicon-time:before{content:"\e023"}.factory-bootstrap-455 .glyphicon-road:before{content:"\e024"}.factory-bootstrap-455 .glyphicon-download-alt:before{content:"\e025"}.factory-bootstrap-455 .glyphicon-download:before{content:"\e026"}.factory-bootstrap-455 .glyphicon-upload:before{content:"\e027"}.factory-bootstrap-455 .glyphicon-inbox:before{content:"\e028"}.factory-bootstrap-455 .glyphicon-play-circle:before{content:"\e029"}.factory-bootstrap-455 .glyphicon-repeat:before{content:"\e030"}.factory-bootstrap-455 .glyphicon-refresh:before{content:"\e031"}.factory-bootstrap-455 .glyphicon-list-alt:before{content:"\e032"}.factory-bootstrap-455 .glyphicon-lock:before{content:"\e033"}.factory-bootstrap-455 .glyphicon-flag:before{content:"\e034"}.factory-bootstrap-455 .glyphicon-headphones:before{content:"\e035"}.factory-bootstrap-455 .glyphicon-volume-off:before{content:"\e036"}.factory-bootstrap-455 .glyphicon-volume-down:before{content:"\e037"}.factory-bootstrap-455 .glyphicon-volume-up:before{content:"\e038"}.factory-bootstrap-455 .glyphicon-qrcode:before{content:"\e039"}.factory-bootstrap-455 .glyphicon-barcode:before{content:"\e040"}.factory-bootstrap-455 .glyphicon-tag:before{content:"\e041"}.factory-bootstrap-455 .glyphicon-tags:before{content:"\e042"}.factory-bootstrap-455 .glyphicon-book:before{content:"\e043"}.factory-bootstrap-455 .glyphicon-bookmark:before{content:"\e044"}.factory-bootstrap-455 .glyphicon-print:before{content:"\e045"}.factory-bootstrap-455 .glyphicon-camera:before{content:"\e046"}.factory-bootstrap-455 .glyphicon-font:before{content:"\e047"}.factory-bootstrap-455 .glyphicon-bold:before{content:"\e048"}.factory-bootstrap-455 .glyphicon-italic:before{content:"\e049"}.factory-bootstrap-455 .glyphicon-text-height:before{content:"\e050"}.factory-bootstrap-455 .glyphicon-text-width:before{content:"\e051"}.factory-bootstrap-455 .glyphicon-align-left:before{content:"\e052"}.factory-bootstrap-455 .glyphicon-align-center:before{content:"\e053"}.factory-bootstrap-455 .glyphicon-align-right:before{content:"\e054"}.factory-bootstrap-455 .glyphicon-align-justify:before{content:"\e055"}.factory-bootstrap-455 .glyphicon-list:before{content:"\e056"}.factory-bootstrap-455 .glyphicon-indent-left:before{content:"\e057"}.factory-bootstrap-455 .glyphicon-indent-right:before{content:"\e058"}.factory-bootstrap-455 .glyphicon-facetime-video:before{content:"\e059"}.factory-bootstrap-455 .glyphicon-picture:before{content:"\e060"}.factory-bootstrap-455 .glyphicon-map-marker:before{content:"\e062"}.factory-bootstrap-455 .glyphicon-adjust:before{content:"\e063"}.factory-bootstrap-455 .glyphicon-tint:before{content:"\e064"}.factory-bootstrap-455 .glyphicon-edit:before{content:"\e065"}.factory-bootstrap-455 .glyphicon-share:before{content:"\e066"}.factory-bootstrap-455 .glyphicon-check:before{content:"\e067"}.factory-bootstrap-455 .glyphicon-move:before{content:"\e068"}.factory-bootstrap-455 .glyphicon-step-backward:before{content:"\e069"}.factory-bootstrap-455 .glyphicon-fast-backward:before{content:"\e070"}.factory-bootstrap-455 .glyphicon-backward:before{content:"\e071"}.factory-bootstrap-455 .glyphicon-play:before{content:"\e072"}.factory-bootstrap-455 .glyphicon-pause:before{content:"\e073"}.factory-bootstrap-455 .glyphicon-stop:before{content:"\e074"}.factory-bootstrap-455 .glyphicon-forward:before{content:"\e075"}.factory-bootstrap-455 .glyphicon-fast-forward:before{content:"\e076"}.factory-bootstrap-455 .glyphicon-step-forward:before{content:"\e077"}.factory-bootstrap-455 .glyphicon-eject:before{content:"\e078"}.factory-bootstrap-455 .glyphicon-chevron-left:before{content:"\e079"}.factory-bootstrap-455 .glyphicon-chevron-right:before{content:"\e080"}.factory-bootstrap-455 .glyphicon-plus-sign:before{content:"\e081"}.factory-bootstrap-455 .glyphicon-minus-sign:before{content:"\e082"}.factory-bootstrap-455 .glyphicon-remove-sign:before{content:"\e083"}.factory-bootstrap-455 .glyphicon-ok-sign:before{content:"\e084"}.factory-bootstrap-455 .glyphicon-question-sign:before{content:"\e085"}.factory-bootstrap-455 .glyphicon-info-sign:before{content:"\e086"}.factory-bootstrap-455 .glyphicon-screenshot:before{content:"\e087"}.factory-bootstrap-455 .glyphicon-remove-circle:before{content:"\e088"}.factory-bootstrap-455 .glyphicon-ok-circle:before{content:"\e089"}.factory-bootstrap-455 .glyphicon-ban-circle:before{content:"\e090"}.factory-bootstrap-455 .glyphicon-arrow-left:before{content:"\e091"}.factory-bootstrap-455 .glyphicon-arrow-right:before{content:"\e092"}.factory-bootstrap-455 .glyphicon-arrow-up:before{content:"\e093"}.factory-bootstrap-455 .glyphicon-arrow-down:before{content:"\e094"}.factory-bootstrap-455 .glyphicon-share-alt:before{content:"\e095"}.factory-bootstrap-455 .glyphicon-resize-full:before{content:"\e096"}.factory-bootstrap-455 .glyphicon-resize-small:before{content:"\e097"}.factory-bootstrap-455 .glyphicon-exclamation-sign:before{content:"\e101"}.factory-bootstrap-455 .glyphicon-gift:before{content:"\e102"}.factory-bootstrap-455 .glyphicon-leaf:before{content:"\e103"}.factory-bootstrap-455 .glyphicon-fire:before{content:"\e104"}.factory-bootstrap-455 .glyphicon-eye-open:before{content:"\e105"}.factory-bootstrap-455 .glyphicon-eye-close:before{content:"\e106"}.factory-bootstrap-455 .glyphicon-warning-sign:before{content:"\e107"}.factory-bootstrap-455 .glyphicon-plane:before{content:"\e108"}.factory-bootstrap-455 .glyphicon-calendar:before{content:"\e109"}.factory-bootstrap-455 .glyphicon-random:before{content:"\e110"}.factory-bootstrap-455 .glyphicon-comment:before{content:"\e111"}.factory-bootstrap-455 .glyphicon-magnet:before{content:"\e112"}.factory-bootstrap-455 .glyphicon-chevron-up:before{content:"\e113"}.factory-bootstrap-455 .glyphicon-chevron-down:before{content:"\e114"}.factory-bootstrap-455 .glyphicon-retweet:before{content:"\e115"}.factory-bootstrap-455 .glyphicon-shopping-cart:before{content:"\e116"}.factory-bootstrap-455 .glyphicon-folder-close:before{content:"\e117"}.factory-bootstrap-455 .glyphicon-folder-open:before{content:"\e118"}.factory-bootstrap-455 .glyphicon-resize-vertical:before{content:"\e119"}.factory-bootstrap-455 .glyphicon-resize-horizontal:before{content:"\e120"}.factory-bootstrap-455 .glyphicon-hdd:before{content:"\e121"}.factory-bootstrap-455 .glyphicon-bullhorn:before{content:"\e122"}.factory-bootstrap-455 .glyphicon-bell:before{content:"\e123"}.factory-bootstrap-455 .glyphicon-certificate:before{content:"\e124"}.factory-bootstrap-455 .glyphicon-thumbs-up:before{content:"\e125"}.factory-bootstrap-455 .glyphicon-thumbs-down:before{content:"\e126"}.factory-bootstrap-455 .glyphicon-hand-right:before{content:"\e127"}.factory-bootstrap-455 .glyphicon-hand-left:before{content:"\e128"}.factory-bootstrap-455 .glyphicon-hand-up:before{content:"\e129"}.factory-bootstrap-455 .glyphicon-hand-down:before{content:"\e130"}.factory-bootstrap-455 .glyphicon-circle-arrow-right:before{content:"\e131"}.factory-bootstrap-455 .glyphicon-circle-arrow-left:before{content:"\e132"}.factory-bootstrap-455 .glyphicon-circle-arrow-up:before{content:"\e133"}.factory-bootstrap-455 .glyphicon-circle-arrow-down:before{content:"\e134"}.factory-bootstrap-455 .glyphicon-globe:before{content:"\e135"}.factory-bootstrap-455 .glyphicon-wrench:before{content:"\e136"}.factory-bootstrap-455 .glyphicon-tasks:before{content:"\e137"}.factory-bootstrap-455 .glyphicon-filter:before{content:"\e138"}.factory-bootstrap-455 .glyphicon-briefcase:before{content:"\e139"}.factory-bootstrap-455 .glyphicon-fullscreen:before{content:"\e140"}.factory-bootstrap-455 .glyphicon-dashboard:before{content:"\e141"}.factory-bootstrap-455 .glyphicon-paperclip:before{content:"\e142"}.factory-bootstrap-455 .glyphicon-heart-empty:before{content:"\e143"}.factory-bootstrap-455 .glyphicon-link:before{content:"\e144"}.factory-bootstrap-455 .glyphicon-phone:before{content:"\e145"}.factory-bootstrap-455 .glyphicon-pushpin:before{content:"\e146"}.factory-bootstrap-455 .glyphicon-usd:before{content:"\e148"}.factory-bootstrap-455 .glyphicon-gbp:before{content:"\e149"}.factory-bootstrap-455 .glyphicon-sort:before{content:"\e150"}.factory-bootstrap-455 .glyphicon-sort-by-alphabet:before{content:"\e151"}.factory-bootstrap-455 .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.factory-bootstrap-455 .glyphicon-sort-by-order:before{content:"\e153"}.factory-bootstrap-455 .glyphicon-sort-by-order-alt:before{content:"\e154"}.factory-bootstrap-455 .glyphicon-sort-by-attributes:before{content:"\e155"}.factory-bootstrap-455 .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.factory-bootstrap-455 .glyphicon-unchecked:before{content:"\e157"}.factory-bootstrap-455 .glyphicon-expand:before{content:"\e158"}.factory-bootstrap-455 .glyphicon-collapse-down:before{content:"\e159"}.factory-bootstrap-455 .glyphicon-collapse-up:before{content:"\e160"}.factory-bootstrap-455 .glyphicon-log-in:before{content:"\e161"}.factory-bootstrap-455 .glyphicon-flash:before{content:"\e162"}.factory-bootstrap-455 .glyphicon-log-out:before{content:"\e163"}.factory-bootstrap-455 .glyphicon-new-window:before{content:"\e164"}.factory-bootstrap-455 .glyphicon-record:before{content:"\e165"}.factory-bootstrap-455 .glyphicon-save:before{content:"\e166"}.factory-bootstrap-455 .glyphicon-open:before{content:"\e167"}.factory-bootstrap-455 .glyphicon-saved:before{content:"\e168"}.factory-bootstrap-455 .glyphicon-import:before{content:"\e169"}.factory-bootstrap-455 .glyphicon-export:before{content:"\e170"}.factory-bootstrap-455 .glyphicon-send:before{content:"\e171"}.factory-bootstrap-455 .glyphicon-floppy-disk:before{content:"\e172"}.factory-bootstrap-455 .glyphicon-floppy-saved:before{content:"\e173"}.factory-bootstrap-455 .glyphicon-floppy-remove:before{content:"\e174"}.factory-bootstrap-455 .glyphicon-floppy-save:before{content:"\e175"}.factory-bootstrap-455 .glyphicon-floppy-open:before{content:"\e176"}.factory-bootstrap-455 .glyphicon-credit-card:before{content:"\e177"}.factory-bootstrap-455 .glyphicon-transfer:before{content:"\e178"}.factory-bootstrap-455 .glyphicon-cutlery:before{content:"\e179"}.factory-bootstrap-455 .glyphicon-header:before{content:"\e180"}.factory-bootstrap-455 .glyphicon-compressed:before{content:"\e181"}.factory-bootstrap-455 .glyphicon-earphone:before{content:"\e182"}.factory-bootstrap-455 .glyphicon-phone-alt:before{content:"\e183"}.factory-bootstrap-455 .glyphicon-tower:before{content:"\e184"}.factory-bootstrap-455 .glyphicon-stats:before{content:"\e185"}.factory-bootstrap-455 .glyphicon-sd-video:before{content:"\e186"}.factory-bootstrap-455 .glyphicon-hd-video:before{content:"\e187"}.factory-bootstrap-455 .glyphicon-subtitles:before{content:"\e188"}.factory-bootstrap-455 .glyphicon-sound-stereo:before{content:"\e189"}.factory-bootstrap-455 .glyphicon-sound-dolby:before{content:"\e190"}.factory-bootstrap-455 .glyphicon-sound-5-1:before{content:"\e191"}.factory-bootstrap-455 .glyphicon-sound-6-1:before{content:"\e192"}.factory-bootstrap-455 .glyphicon-sound-7-1:before{content:"\e193"}.factory-bootstrap-455 .glyphicon-copyright-mark:before{content:"\e194"}.factory-bootstrap-455 .glyphicon-registration-mark:before{content:"\e195"}.factory-bootstrap-455 .glyphicon-cloud-download:before{content:"\e197"}.factory-bootstrap-455 .glyphicon-cloud-upload:before{content:"\e198"}.factory-bootstrap-455 .glyphicon-tree-conifer:before{content:"\e199"}.factory-bootstrap-455 .glyphicon-tree-deciduous:before{content:"\e200"}.factory-bootstrap-455 .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-455 .dropdown{position:relative}.factory-bootstrap-455 .dropdown-toggle:focus{outline:0}.factory-bootstrap-455 .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-455 .dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-455 .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-455 .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-455 .dropdown-menu>li>a:focus,.factory-bootstrap-455 .dropdown-menu>li>a:hover{color:#262626;text-decoration:none}.factory-bootstrap-455 .dropdown-menu>.active>a,.factory-bootstrap-455 .dropdown-menu>.active>a:focus,.factory-bootstrap-455 .dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0}.factory-bootstrap-455 .dropdown-menu>.disabled>a,.factory-bootstrap-455 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-455 .dropdown-menu>.disabled>a:hover{color:#999}.factory-bootstrap-455 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-455 .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-455 .open>.dropdown-menu{display:block}.factory-bootstrap-455 .open>a{outline:0}.factory-bootstrap-455 .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.factory-bootstrap-455 .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.factory-bootstrap-455 .pull-right>.dropdown-menu{right:0;left:auto}.factory-bootstrap-455 .dropup .caret,.factory-bootstrap-455 .navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.factory-bootstrap-455 .dropup .dropdown-menu,.factory-bootstrap-455 .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-455 .btn-group,.factory-bootstrap-455 .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.factory-bootstrap-455 .btn-group-vertical>.btn,.factory-bootstrap-455 .btn-group>.btn{position:relative;float:left}.factory-bootstrap-455 .btn-group-vertical>.btn.active,.factory-bootstrap-455 .btn-group-vertical>.btn:active,.factory-bootstrap-455 .btn-group-vertical>.btn:focus,.factory-bootstrap-455 .btn-group-vertical>.btn:hover,.factory-bootstrap-455 .btn-group>.btn.active,.factory-bootstrap-455 .btn-group>.btn:active,.factory-bootstrap-455 .btn-group>.btn:focus,.factory-bootstrap-455 .btn-group>.btn:hover{z-index:2}.factory-bootstrap-455 .btn-group-vertical>.btn:focus,.factory-bootstrap-455 .btn-group>.btn:focus{outline:0}.factory-bootstrap-455 .btn-group .btn+.btn,.factory-bootstrap-455 .btn-group .btn+.btn-group,.factory-bootstrap-455 .btn-group .btn-group+.btn,.factory-bootstrap-455 .btn-group .btn-group+.btn-group{margin-left:-1px}.factory-bootstrap-455 .btn-toolbar:after,.factory-bootstrap-455 .btn-toolbar:before{display:table;content:" "}.factory-bootstrap-455 .btn-toolbar:after{clear:both}.factory-bootstrap-455 .btn-toolbar .btn-group{float:left}.factory-bootstrap-455 .btn-toolbar>.btn+.btn,.factory-bootstrap-455 .btn-toolbar>.btn+.btn-group,.factory-bootstrap-455 .btn-toolbar>.btn-group+.btn,.factory-bootstrap-455 .btn-toolbar>.btn-group+.btn-group{margin-left:5px}.factory-bootstrap-455 .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.factory-bootstrap-455 .btn-group>.btn:first-child{margin-left:0}.factory-bootstrap-455 .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-455 .btn-group>.btn:last-child:not(:first-child),.factory-bootstrap-455 .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-455 .btn-group>.btn-group{float:left}.factory-bootstrap-455 .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-455 .btn-group>.btn-group:first-child>.btn:last-child,.factory-bootstrap-455 .btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-455 .btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-455 .btn-group .dropdown-toggle:active,.factory-bootstrap-455 .btn-group.open .dropdown-toggle{outline:0}.factory-bootstrap-455 .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-455 .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-455 .btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-455 .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.factory-bootstrap-455 .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.factory-bootstrap-455 .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-455 .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-455 .btn-group{border:4px solid #f9f9f9;border-radius:4px}.factory-bootstrap-455 .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-455 .btn .caret{margin-left:0}.factory-bootstrap-455 .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.factory-bootstrap-455 .dropup .btn-lg .caret{border-width:0 5px 5px}.factory-bootstrap-455 .btn-group-vertical>.btn,.factory-bootstrap-455 .btn-group-vertical>.btn-group,.factory-bootstrap-455 .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.factory-bootstrap-455 .btn-group-vertical>.btn-group:after,.factory-bootstrap-455 .btn-group-vertical>.btn-group:before{display:table;content:" "}.factory-bootstrap-455 .btn-group-vertical>.btn-group:after{clear:both}.factory-bootstrap-455 .btn-group-vertical>.btn-group>.btn{float:none}.factory-bootstrap-455 .btn-group-vertical>.btn+.btn,.factory-bootstrap-455 .btn-group-vertical>.btn+.btn-group,.factory-bootstrap-455 .btn-group-vertical>.btn-group+.btn,.factory-bootstrap-455 .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.factory-bootstrap-455 .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-455 .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-455 .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-455 .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-455 .btn-group-vertical>.btn-group:first-child>.btn:last-child,.factory-bootstrap-455 .btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-455 .btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-455 .btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.factory-bootstrap-455 .btn-group-justified>.btn,.factory-bootstrap-455 .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.factory-bootstrap-455 .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-455 .input-group{position:relative;display:table;border-collapse:separate}.factory-bootstrap-455 .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.factory-bootstrap-455 .input-group .form-control{width:100%;margin-bottom:0}.factory-bootstrap-455 .input-group-lg>.form-control,.factory-bootstrap-455 .input-group-lg>.input-group-addon,.factory-bootstrap-455 .input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-455 select.input-group-lg>.form-control,.factory-bootstrap-455 select.input-group-lg>.input-group-addon,.factory-bootstrap-455 select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.factory-bootstrap-455 textarea.input-group-lg>.form-control,.factory-bootstrap-455 textarea.input-group-lg>.input-group-addon,.factory-bootstrap-455 textarea.input-group-lg>.input-group-btn>.btn{height:auto}.factory-bootstrap-455 .input-group-sm>.form-control,.factory-bootstrap-455 .input-group-sm>.input-group-addon,.factory-bootstrap-455 .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-455 select.input-group-sm>.form-control,.factory-bootstrap-455 select.input-group-sm>.input-group-addon,.factory-bootstrap-455 select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.factory-bootstrap-455 textarea.input-group-sm>.form-control,.factory-bootstrap-455 textarea.input-group-sm>.input-group-addon,.factory-bootstrap-455 textarea.input-group-sm>.input-group-btn>.btn{height:auto}.factory-bootstrap-455 .input-group .form-control,.factory-bootstrap-455 .input-group-addon,.factory-bootstrap-455 .input-group-btn{display:table-cell}.factory-bootstrap-455 .input-group .form-control:not(:first-child):not(:last-child),.factory-bootstrap-455 .input-group-addon:not(:first-child):not(:last-child),.factory-bootstrap-455 .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-455 .input-group-addon,.factory-bootstrap-455 .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.factory-bootstrap-455 .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-455 .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.factory-bootstrap-455 .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.factory-bootstrap-455 .input-group-addon input[type=checkbox],.factory-bootstrap-455 .input-group-addon input[type=radio]{margin-top:0}.factory-bootstrap-455 .input-group .form-control:first-child,.factory-bootstrap-455 .input-group-addon:first-child,.factory-bootstrap-455 .input-group-btn:first-child>.btn,.factory-bootstrap-455 .input-group-btn:first-child>.dropdown-toggle,.factory-bootstrap-455 .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-455 .input-group-addon:first-child{border-right:0}.factory-bootstrap-455 .input-group .form-control:last-child,.factory-bootstrap-455 .input-group-addon:last-child,.factory-bootstrap-455 .input-group-btn:first-child>.btn:not(:first-child),.factory-bootstrap-455 .input-group-btn:last-child>.btn,.factory-bootstrap-455 .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-455 .input-group-addon:last-child{border-left:0}.factory-bootstrap-455 .input-group-btn{position:relative;white-space:nowrap}.factory-bootstrap-455 .input-group-btn:first-child>.btn{margin-right:-1px}.factory-bootstrap-455 .input-group-btn:last-child>.btn{margin-left:-1px}.factory-bootstrap-455 .input-group-btn>.btn{position:relative}.factory-bootstrap-455 .input-group-btn>.btn+.btn{margin-left:-4px}.factory-bootstrap-455 .input-group-btn>.btn:active,.factory-bootstrap-455 .input-group-btn>.btn:hover{z-index:2}.factory-bootstrap-455 .nav{padding-left:0;margin-bottom:0;list-style:none}.factory-bootstrap-455 .nav:after,.factory-bootstrap-455 .nav:before{display:table;content:" "}.factory-bootstrap-455 .nav:after{clear:both}.factory-bootstrap-455 .nav>li{position:relative;display:block}.factory-bootstrap-455 .nav>li>a{position:relative;display:block;padding:10px 15px}.factory-bootstrap-455 .nav>li>a:focus,.factory-bootstrap-455 .nav>li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-455 .nav>li.disabled>a{color:#999}.factory-bootstrap-455 .nav>li.disabled>a:focus,.factory-bootstrap-455 .nav>li.disabled>a:hover{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.factory-bootstrap-455 .nav .open>a,.factory-bootstrap-455 .nav .open>a:focus,.factory-bootstrap-455 .nav .open>a:hover{background-color:#eee;border-color:#428bca}.factory-bootstrap-455 .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-455 .nav>li>a>img{max-width:none}.factory-bootstrap-455 .nav-tabs{border-bottom:1px solid #ddd}.factory-bootstrap-455 .nav-tabs>li{float:left;margin-bottom:-1px}.factory-bootstrap-455 .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.factory-bootstrap-455 .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.factory-bootstrap-455 .nav-tabs>li.active>a,.factory-bootstrap-455 .nav-tabs>li.active>a:focus,.factory-bootstrap-455 .nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.factory-bootstrap-455 .nav-tabs.nav-justified{width:100%;border-bottom:0}.factory-bootstrap-455 .nav-tabs.nav-justified>li{float:none}.factory-bootstrap-455 .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-455 .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-455 .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-455 .nav-tabs.nav-justified>.active>a,.factory-bootstrap-455 .nav-tabs.nav-justified>.active>a:focus,.factory-bootstrap-455 .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-455 .nav-pills>li{float:left}.factory-bootstrap-455 .nav-pills>li>a{border-radius:4px}.factory-bootstrap-455 .nav-pills>li+li{margin-left:2px}.factory-bootstrap-455 .nav-pills>li.active>a,.factory-bootstrap-455 .nav-pills>li.active>a:focus,.factory-bootstrap-455 .nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.factory-bootstrap-455 .nav-stacked>li{float:none}.factory-bootstrap-455 .nav-stacked>li+li{margin-top:2px;margin-left:0}.factory-bootstrap-455 .nav-justified{width:100%}.factory-bootstrap-455 .nav-justified>li{float:none}.factory-bootstrap-455 .nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-455 .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-455 .nav-tabs-justified{border-bottom:0}.factory-bootstrap-455 .nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-455 .nav-tabs-justified>.active>a,.factory-bootstrap-455 .nav-tabs-justified>.active>a:focus,.factory-bootstrap-455 .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-455 .tab-content>.tab-pane{display:none}.factory-bootstrap-455 .tab-content>.active{display:block}.factory-bootstrap-455 .nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-455 .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.factory-bootstrap-455 .navbar:after,.factory-bootstrap-455 .navbar:before{display:table;content:" "}.factory-bootstrap-455 .navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.factory-bootstrap-455 .navbar-header:after,.factory-bootstrap-455 .navbar-header:before{display:table;content:" "}.factory-bootstrap-455 .navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.factory-bootstrap-455 .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-455 .navbar-collapse:after,.factory-bootstrap-455 .navbar-collapse:before{display:table;content:" "}.factory-bootstrap-455 .navbar-collapse:after{clear:both}.factory-bootstrap-455 .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-455 .container>.navbar-collapse,.factory-bootstrap-455 .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-455 .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.factory-bootstrap-455 .navbar-fixed-bottom,.factory-bootstrap-455 .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-455 .navbar-fixed-top{top:0;border-width:0 0 1px}.factory-bootstrap-455 .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.factory-bootstrap-455 .navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px}.factory-bootstrap-455 .navbar-brand:focus,.factory-bootstrap-455 .navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.factory-bootstrap-455 .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-455 .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.factory-bootstrap-455 .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.factory-bootstrap-455 .navbar-nav{margin:7.5px -15px}.factory-bootstrap-455 .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-455 .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-455 .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-455 .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-455 .navbar-nav.pull-right>li>.dropdown-menu,.factory-bootstrap-455 .navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-455 .navbar-btn{margin-top:8px;margin-bottom:8px}.factory-bootstrap-455 .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.factory-bootstrap-455 .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.factory-bootstrap-455 .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-455 .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.factory-bootstrap-455 .navbar-default .navbar-brand{color:#777}.factory-bootstrap-455 .navbar-default .navbar-brand:focus,.factory-bootstrap-455 .navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.factory-bootstrap-455 .navbar-default .navbar-nav>li>a,.factory-bootstrap-455 .navbar-default .navbar-text{color:#777}.factory-bootstrap-455 .navbar-default .navbar-nav>li>a:focus,.factory-bootstrap-455 .navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.factory-bootstrap-455 .navbar-default .navbar-nav>.active>a,.factory-bootstrap-455 .navbar-default .navbar-nav>.active>a:focus,.factory-bootstrap-455 .navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.factory-bootstrap-455 .navbar-default .navbar-nav>.disabled>a,.factory-bootstrap-455 .navbar-default .navbar-nav>.disabled>a:focus,.factory-bootstrap-455 .navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.factory-bootstrap-455 .navbar-default .navbar-toggle{border-color:#ddd}.factory-bootstrap-455 .navbar-default .navbar-toggle:focus,.factory-bootstrap-455 .navbar-default .navbar-toggle:hover{background-color:#ddd}.factory-bootstrap-455 .navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.factory-bootstrap-455 .navbar-default .navbar-collapse,.factory-bootstrap-455 .navbar-default .navbar-form{border-color:#e7e7e7}.factory-bootstrap-455 .navbar-default .navbar-nav>.open>a,.factory-bootstrap-455 .navbar-default .navbar-nav>.open>a:focus,.factory-bootstrap-455 .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-455 .navbar-default .navbar-link{color:#777}.factory-bootstrap-455 .navbar-default .navbar-link:hover{color:#333}.factory-bootstrap-455 .navbar-inverse{background-color:#222;border-color:#080808}.factory-bootstrap-455 .navbar-inverse .navbar-brand{color:#999}.factory-bootstrap-455 .navbar-inverse .navbar-brand:focus,.factory-bootstrap-455 .navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.factory-bootstrap-455 .navbar-inverse .navbar-nav>li>a,.factory-bootstrap-455 .navbar-inverse .navbar-text{color:#999}.factory-bootstrap-455 .navbar-inverse .navbar-nav>li>a:focus,.factory-bootstrap-455 .navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.factory-bootstrap-455 .navbar-inverse .navbar-nav>.active>a,.factory-bootstrap-455 .navbar-inverse .navbar-nav>.active>a:focus,.factory-bootstrap-455 .navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.factory-bootstrap-455 .navbar-inverse .navbar-nav>.disabled>a,.factory-bootstrap-455 .navbar-inverse .navbar-nav>.disabled>a:focus,.factory-bootstrap-455 .navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.factory-bootstrap-455 .navbar-inverse .navbar-toggle{border-color:#333}.factory-bootstrap-455 .navbar-inverse .navbar-toggle:focus,.factory-bootstrap-455 .navbar-inverse .navbar-toggle:hover{background-color:#333}.factory-bootstrap-455 .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.factory-bootstrap-455 .navbar-inverse .navbar-collapse,.factory-bootstrap-455 .navbar-inverse .navbar-form{border-color:#101010}.factory-bootstrap-455 .navbar-inverse .navbar-nav>.open>a,.factory-bootstrap-455 .navbar-inverse .navbar-nav>.open>a:focus,.factory-bootstrap-455 .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-455 .navbar-inverse .navbar-link{color:#999}.factory-bootstrap-455 .navbar-inverse .navbar-link:hover{color:#fff}.factory-bootstrap-455 .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.factory-bootstrap-455 .breadcrumb>li{display:inline-block}.factory-bootstrap-455 .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.factory-bootstrap-455 .breadcrumb>.active{color:#999}.factory-bootstrap-455 .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.factory-bootstrap-455 .pagination>li{display:inline}.factory-bootstrap-455 .pagination>li>a,.factory-bootstrap-455 .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-455 .pagination>li:first-child>a,.factory-bootstrap-455 .pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.factory-bootstrap-455 .pagination>li:last-child>a,.factory-bootstrap-455 .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.factory-bootstrap-455 .pagination>li>a:focus,.factory-bootstrap-455 .pagination>li>a:hover,.factory-bootstrap-455 .pagination>li>span:focus,.factory-bootstrap-455 .pagination>li>span:hover{background-color:#eee}.factory-bootstrap-455 .pagination>.active>a,.factory-bootstrap-455 .pagination>.active>a:focus,.factory-bootstrap-455 .pagination>.active>a:hover,.factory-bootstrap-455 .pagination>.active>span,.factory-bootstrap-455 .pagination>.active>span:focus,.factory-bootstrap-455 .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#1e8cbe;border-color:#0074a2}.factory-bootstrap-455 .pagination>.disabled>a,.factory-bootstrap-455 .pagination>.disabled>a:focus,.factory-bootstrap-455 .pagination>.disabled>a:hover,.factory-bootstrap-455 .pagination>.disabled>span,.factory-bootstrap-455 .pagination>.disabled>span:focus,.factory-bootstrap-455 .pagination>.disabled>span:hover{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.factory-bootstrap-455 .pagination-lg>li>a,.factory-bootstrap-455 .pagination-lg>li>span{padding:10px 16px;font-size:18px}.factory-bootstrap-455 .pagination-lg>li:first-child>a,.factory-bootstrap-455 .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.factory-bootstrap-455 .pagination-lg>li:last-child>a,.factory-bootstrap-455 .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.factory-bootstrap-455 .pagination-sm>li>a,.factory-bootstrap-455 .pagination-sm>li>span{padding:5px 10px;font-size:12px}.factory-bootstrap-455 .pagination-sm>li:first-child>a,.factory-bootstrap-455 .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.factory-bootstrap-455 .pagination-sm>li:last-child>a,.factory-bootstrap-455 .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.factory-bootstrap-455 .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.factory-bootstrap-455 .pager:after,.factory-bootstrap-455 .pager:before{display:table;content:" "}.factory-bootstrap-455 .pager:after{clear:both}.factory-bootstrap-455 .pager li{display:inline}.factory-bootstrap-455 .pager li>a,.factory-bootstrap-455 .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.factory-bootstrap-455 .pager li>a:focus,.factory-bootstrap-455 .pager li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-455 .pager .next>a,.factory-bootstrap-455 .pager .next>span{float:right}.factory-bootstrap-455 .pager .previous>a,.factory-bootstrap-455 .pager .previous>span{float:left}.factory-bootstrap-455 .pager .disabled>a,.factory-bootstrap-455 .pager .disabled>a:focus,.factory-bootstrap-455 .pager .disabled>a:hover,.factory-bootstrap-455 .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.factory-bootstrap-455 .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-455 .label[href]:focus,.factory-bootstrap-455 .label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-455 .label:empty{display:none}.factory-bootstrap-455 .btn .label{position:relative;top:-1px}.factory-bootstrap-455 .label-default{background-color:#999}.factory-bootstrap-455 .label-default[href]:focus,.factory-bootstrap-455 .label-default[href]:hover{background-color:gray}.factory-bootstrap-455 .label-primary{background-color:#428bca}.factory-bootstrap-455 .label-primary[href]:focus,.factory-bootstrap-455 .label-primary[href]:hover{background-color:#3071a9}.factory-bootstrap-455 .label-success{background-color:#5cb85c}.factory-bootstrap-455 .label-success[href]:focus,.factory-bootstrap-455 .label-success[href]:hover{background-color:#449d44}.factory-bootstrap-455 .label-info{background-color:#5bc0de}.factory-bootstrap-455 .label-info[href]:focus,.factory-bootstrap-455 .label-info[href]:hover{background-color:#31b0d5}.factory-bootstrap-455 .label-warning{background-color:#f0ad4e}.factory-bootstrap-455 .label-warning[href]:focus,.factory-bootstrap-455 .label-warning[href]:hover{background-color:#ec971f}.factory-bootstrap-455 .label-danger{background-color:#d9534f}.factory-bootstrap-455 .label-danger[href]:focus,.factory-bootstrap-455 .label-danger[href]:hover{background-color:#c9302c}.factory-bootstrap-455 .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-455 .badge:empty{display:none}.factory-bootstrap-455 .btn .badge{position:relative;top:-1px}.factory-bootstrap-455 a.badge:focus,.factory-bootstrap-455 a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-455 .nav-pills>.active>a>.badge,.factory-bootstrap-455 a.list-group-item.active>.badge{color:#428bca;background-color:#fff}.factory-bootstrap-455 .nav-pills>li>a>.badge{margin-left:3px}.factory-bootstrap-455 .jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.factory-bootstrap-455 .jumbotron .h1,.factory-bootstrap-455 .jumbotron h1{line-height:1;color:inherit}.factory-bootstrap-455 .jumbotron p{line-height:1.4}.factory-bootstrap-455 .container .jumbotron{border-radius:6px}.factory-bootstrap-455 .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-455 .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-455 .thumbnail a>img,.factory-bootstrap-455 .thumbnail>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}.factory-bootstrap-455 a.thumbnail.active,.factory-bootstrap-455 a.thumbnail:focus,.factory-bootstrap-455 a.thumbnail:hover{border-color:#428bca}.factory-bootstrap-455 .thumbnail .caption{padding:9px;color:#333}.factory-bootstrap-455 .alert{border:1px solid transparent;border-radius:4px}.factory-bootstrap-455 .alert h4{margin-top:0;color:inherit}.factory-bootstrap-455 .alert .alert-link{font-weight:700}.factory-bootstrap-455 .alert>p,.factory-bootstrap-455 .alert>ul{margin-bottom:0}.factory-bootstrap-455 .alert>p+p{margin-top:5px}.factory-bootstrap-455 .alert-dismissable{padding-right:35px}.factory-bootstrap-455 .alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.factory-bootstrap-455 .alert-info{color:#31708f;background-color:#d9edf7}.factory-bootstrap-455 .alert-info hr{border-top-color:#a6e1ec}.factory-bootstrap-455 .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-455 .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-455 .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-455 .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-455 .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.factory-bootstrap-455 .progress-bar-success{background-color:#5cb85c}.factory-bootstrap-455 .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-455 .progress-bar-info{background-color:#5bc0de}.factory-bootstrap-455 .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-455 .progress-bar-warning{background-color:#f0ad4e}.factory-bootstrap-455 .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-455 .progress-bar-danger{background-color:#d9534f}.factory-bootstrap-455 .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-455 .media,.factory-bootstrap-455 .media-body{overflow:hidden;zoom:1}.factory-bootstrap-455 .media,.factory-bootstrap-455 .media .media{margin-top:15px}.factory-bootstrap-455 .media:first-child{margin-top:0}.factory-bootstrap-455 .media-object{display:block}.factory-bootstrap-455 .media-heading{margin:0 0 5px}.factory-bootstrap-455 .media>.pull-left{margin-right:10px}.factory-bootstrap-455 .media>.pull-right{margin-left:10px}.factory-bootstrap-455 .media-list{padding-left:0;list-style:none}.factory-bootstrap-455 .list-group{padding-left:0;margin-bottom:20px}.factory-bootstrap-455 .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-455 .list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.factory-bootstrap-455 .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.factory-bootstrap-455 .list-group-item>.badge{float:right}.factory-bootstrap-455 .list-group-item>.badge+.badge{margin-right:5px}.factory-bootstrap-455 a.list-group-item{color:#555}.factory-bootstrap-455 a.list-group-item .list-group-item-heading{color:#333}.factory-bootstrap-455 a.list-group-item:focus,.factory-bootstrap-455 a.list-group-item:hover{text-decoration:none;background-color:#f5f5f5}.factory-bootstrap-455 a.list-group-item.active,.factory-bootstrap-455 a.list-group-item.active:focus,.factory-bootstrap-455 a.list-group-item.active:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-455 a.list-group-item.active .list-group-item-heading,.factory-bootstrap-455 a.list-group-item.active:focus .list-group-item-heading,.factory-bootstrap-455 a.list-group-item.active:hover .list-group-item-heading{color:inherit}.factory-bootstrap-455 a.list-group-item.active .list-group-item-text,.factory-bootstrap-455 a.list-group-item.active:focus .list-group-item-text,.factory-bootstrap-455 a.list-group-item.active:hover .list-group-item-text{color:#e1edf7}.factory-bootstrap-455 .list-group-item-heading{margin-top:0;margin-bottom:5px}.factory-bootstrap-455 .list-group-item-text{margin-bottom:0;line-height:1.3}.factory-bootstrap-455 .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px}.factory-bootstrap-455 .panel-body{padding:15px}.factory-bootstrap-455 .panel-body:after,.factory-bootstrap-455 .panel-body:before{display:table;content:" "}.factory-bootstrap-455 .panel-body:after{clear:both}.factory-bootstrap-455 .panel>.list-group{margin-bottom:0}.factory-bootstrap-455 .panel>.list-group .list-group-item{border-width:1px 0}.factory-bootstrap-455 .panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-455 .panel>.list-group .list-group-item:last-child{border-bottom:0}.factory-bootstrap-455 .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.factory-bootstrap-455 .panel>.table,.factory-bootstrap-455 .panel>.table-responsive>.table{margin-bottom:0}.factory-bootstrap-455 .panel>.panel-body+.table,.factory-bootstrap-455 .panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.factory-bootstrap-455 .panel>.table>tbody:first-child td,.factory-bootstrap-455 .panel>.table>tbody:first-child th{border-top:0}.factory-bootstrap-455 .panel>.table-bordered,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered{border:0}.factory-bootstrap-455 .panel>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-455 .panel>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-455 .panel>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-455 .panel>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-455 .panel>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-455 .panel>.table-bordered>thead>tr>th:first-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.factory-bootstrap-455 .panel>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-455 .panel>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-455 .panel>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-455 .panel>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-455 .panel>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-455 .panel>.table-bordered>thead>tr>th:last-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.factory-bootstrap-455 .panel>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-455 .panel>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-455 .panel>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-455 .panel>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-455 .panel>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-455 .panel>.table-bordered>thead>tr:last-child>th,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-455 .panel>.table-responsive>.table-bordered>thead>tr:last-child>th{border-bottom:0}.factory-bootstrap-455 .panel>.table-responsive{margin-bottom:0;border:0}.factory-bootstrap-455 .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.factory-bootstrap-455 .panel-heading>.dropdown .dropdown-toggle{color:inherit}.factory-bootstrap-455 .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.factory-bootstrap-455 .panel-title>a{color:inherit}.factory-bootstrap-455 .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-455 .panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.factory-bootstrap-455 .panel-group .panel+.panel{margin-top:5px}.factory-bootstrap-455 .panel-group .panel-heading{border-bottom:0}.factory-bootstrap-455 .panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.factory-bootstrap-455 .panel-group .panel-footer{border-top:0}.factory-bootstrap-455 .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.factory-bootstrap-455 .panel-default{border-color:#ddd}.factory-bootstrap-455 .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.factory-bootstrap-455 .panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.factory-bootstrap-455 .panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.factory-bootstrap-455 .panel-primary{border-color:#428bca}.factory-bootstrap-455 .panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-455 .panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.factory-bootstrap-455 .panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.factory-bootstrap-455 .panel-success{border-color:#d6e9c6}.factory-bootstrap-455 .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.factory-bootstrap-455 .panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.factory-bootstrap-455 .panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.factory-bootstrap-455 .panel-warning{border-color:#faebcc}.factory-bootstrap-455 .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.factory-bootstrap-455 .panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.factory-bootstrap-455 .panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.factory-bootstrap-455 .panel-danger{border-color:#ebccd1}.factory-bootstrap-455 .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.factory-bootstrap-455 .panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.factory-bootstrap-455 .panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.factory-bootstrap-455 .panel-info{border-color:#bce8f1}.factory-bootstrap-455 .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.factory-bootstrap-455 .panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.factory-bootstrap-455 .panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.factory-bootstrap-455 .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px}.factory-bootstrap-455 .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.factory-bootstrap-455 .well-lg{padding:24px;border-radius:6px}.factory-bootstrap-455 .well-sm{padding:9px;border-radius:3px}.factory-bootstrap-455 .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-455 .alert .close{position:relative;top:-8px;right:-7px}.factory-bootstrap-455 .close:focus,.factory-bootstrap-455 .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-455 button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.factory-bootstrap-455 .modal-open{overflow:hidden}.factory-bootstrap-455 .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-455 .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-455 .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.factory-bootstrap-455 .modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.factory-bootstrap-455 .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-455 .modal-backdrop,.factory-bootstrap-455-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.factory-bootstrap-455 .modal-backdrop.fade,.factory-bootstrap-455-modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.factory-bootstrap-455 .modal-backdrop.in,.factory-bootstrap-455-modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-455 .modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.factory-bootstrap-455 .modal-header .close{margin-top:-2px}.factory-bootstrap-455 .modal-title{margin:0;line-height:1.428571429}.factory-bootstrap-455 .modal-body{position:relative;padding:20px;max-height:none}.factory-bootstrap-455 .modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.factory-bootstrap-455 .modal-footer:after,.factory-bootstrap-455 .modal-footer:before{display:table;content:" "}.factory-bootstrap-455 .modal-footer:after{clear:both}.factory-bootstrap-455 .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.factory-bootstrap-455 .modal-footer .btn-group .btn+.btn{margin-left:-1px}.factory-bootstrap-455 .modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.factory-bootstrap-455 .modal-dialog{width:600px;margin:30px auto}.factory-bootstrap-455 .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-455 .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-455 .tooltip.in{opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-455 .tooltip.top{padding:5px 0;margin-top:-3px}.factory-bootstrap-455 .tooltip.right{padding:0 5px;margin-left:3px}.factory-bootstrap-455 .tooltip.bottom{padding:5px 0;margin-top:3px}.factory-bootstrap-455 .tooltip.left{padding:0 5px;margin-left:-3px}.factory-bootstrap-455 .tooltip-inner{width:400px;padding:15px 20px;color:#fff;text-align:left;text-decoration:none;background-color:#673ab7;border-radius:3px}.factory-bootstrap-455 .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-455 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-455 .tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-455 .tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-455 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#673ab7;border-width:5px 5px 5px 0}.factory-bootstrap-455 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#673ab7;border-width:5px 0 5px 5px}.factory-bootstrap-455 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-455 .tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-455 .tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-455 .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-455 .popover.top{margin-top:-10px}.factory-bootstrap-455 .popover.right{margin-left:10px}.factory-bootstrap-455 .popover.bottom{margin-top:10px}.factory-bootstrap-455 .popover.left{margin-left:-10px}.factory-bootstrap-455 .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-455 .popover-content{padding:9px 14px}.factory-bootstrap-455 .popover .arrow,.factory-bootstrap-455 .popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-455 .popover .arrow{border-width:11px}.factory-bootstrap-455 .popover .arrow:after{border-width:10px;content:""}.factory-bootstrap-455 .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-455 .popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.factory-bootstrap-455 .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-455 .popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.factory-bootstrap-455 .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-455 .popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.factory-bootstrap-455 .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-455 .popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.factory-bootstrap-455 .carousel{position:relative}.factory-bootstrap-455 .carousel-inner{position:relative;width:100%;overflow:hidden}.factory-bootstrap-455 .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.factory-bootstrap-455 .carousel-inner>.item>a>img,.factory-bootstrap-455 .carousel-inner>.item>img{display:block;height:auto;max-width:100%;line-height:1}.factory-bootstrap-455 .carousel-inner>.active,.factory-bootstrap-455 .carousel-inner>.next,.factory-bootstrap-455 .carousel-inner>.prev{display:block}.factory-bootstrap-455 .carousel-inner>.active{left:0}.factory-bootstrap-455 .carousel-inner>.next,.factory-bootstrap-455 .carousel-inner>.prev{position:absolute;top:0;width:100%}.factory-bootstrap-455 .carousel-inner>.next{left:100%}.factory-bootstrap-455 .carousel-inner>.prev{left:-100%}.factory-bootstrap-455 .carousel-inner>.next.left,.factory-bootstrap-455 .carousel-inner>.prev.right{left:0}.factory-bootstrap-455 .carousel-inner>.active.left{left:-100%}.factory-bootstrap-455 .carousel-inner>.active.right{left:100%}.factory-bootstrap-455 .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-455 .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-455 .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-455 .carousel-control:focus,.factory-bootstrap-455 .carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-455 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-455 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-455 .carousel-control .icon-next,.factory-bootstrap-455 .carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.factory-bootstrap-455 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-455 .carousel-control .icon-prev{left:50%}.factory-bootstrap-455 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-455 .carousel-control .icon-next{right:50%}.factory-bootstrap-455 .carousel-control .icon-next,.factory-bootstrap-455 .carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.factory-bootstrap-455 .carousel-control .icon-prev:before{content:'\2039'}.factory-bootstrap-455 .carousel-control .icon-next:before{content:'\203a'}.factory-bootstrap-455 .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-455 .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-455 .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.factory-bootstrap-455 .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-455 .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-455 .clearfix:after,.factory-bootstrap-455 .clearfix:before{display:table;content:" "}.factory-bootstrap-455 .clearfix:after{clear:both}.factory-bootstrap-455 .center-block{display:block;margin-right:auto;margin-left:auto}.factory-bootstrap-455 .pull-right{float:right!important}.factory-bootstrap-455 .pull-left{float:left!important}.factory-bootstrap-455 .hide{display:none!important}.factory-bootstrap-455 .show{display:block!important}.factory-bootstrap-455 .invisible{visibility:hidden}.factory-bootstrap-455 .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.factory-bootstrap-455 .hidden{display:none!important;visibility:hidden!important}.factory-bootstrap-455 .affix{position:fixed}@-ms-viewport{width:device-width}.factory-bootstrap-455 .visible-lg,.factory-bootstrap-455 .visible-md,.factory-bootstrap-455 .visible-sm,.factory-bootstrap-455 .visible-xs,.factory-bootstrap-455 td.visible-lg,.factory-bootstrap-455 td.visible-md,.factory-bootstrap-455 td.visible-sm,.factory-bootstrap-455 td.visible-xs,.factory-bootstrap-455 th.visible-lg,.factory-bootstrap-455 th.visible-md,.factory-bootstrap-455 th.visible-sm,.factory-bootstrap-455 th.visible-xs,.factory-bootstrap-455 tr.visible-lg,.factory-bootstrap-455 tr.visible-md,.factory-bootstrap-455 tr.visible-sm,.factory-bootstrap-455 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-455 .hidden-xs{display:block!important}.factory-bootstrap-455 table.hidden-xs{display:table}.factory-bootstrap-455 tr.hidden-xs{display:table-row!important}.factory-bootstrap-455 td.hidden-xs,.factory-bootstrap-455 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-455 .hidden-sm{display:block!important}.factory-bootstrap-455 table.hidden-sm{display:table}.factory-bootstrap-455 tr.hidden-sm{display:table-row!important}.factory-bootstrap-455 td.hidden-sm,.factory-bootstrap-455 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-455 .hidden-md{display:block!important}.factory-bootstrap-455 table.hidden-md{display:table}.factory-bootstrap-455 tr.hidden-md{display:table-row!important}.factory-bootstrap-455 td.hidden-md,.factory-bootstrap-455 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-455 .hidden-lg{display:block!important}.factory-bootstrap-455 table.hidden-lg{display:table}.factory-bootstrap-455 tr.hidden-lg{display:table-row!important}.factory-bootstrap-455 td.hidden-lg,.factory-bootstrap-455 th.hidden-lg{display:table-cell!important}@media (max-width:767px){.factory-bootstrap-455 .hidden-lg.hidden-xs,.factory-bootstrap-455 td.hidden-lg.hidden-xs,.factory-bootstrap-455 th.hidden-lg.hidden-xs,.factory-bootstrap-455 tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.factory-bootstrap-455 .hidden-lg.hidden-sm,.factory-bootstrap-455 td.hidden-lg.hidden-sm,.factory-bootstrap-455 th.hidden-lg.hidden-sm,.factory-bootstrap-455 tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.factory-bootstrap-455 .hidden-lg.hidden-md,.factory-bootstrap-455 td.hidden-lg.hidden-md,.factory-bootstrap-455 th.hidden-lg.hidden-md,.factory-bootstrap-455 tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1200px){.factory-bootstrap-455 .hidden-lg,.factory-bootstrap-455 td.hidden-lg,.factory-bootstrap-455 th.hidden-lg,.factory-bootstrap-455 tr.hidden-lg{display:none!important}}.factory-bootstrap-455 .visible-print,.factory-bootstrap-455 td.visible-print,.factory-bootstrap-455 th.visible-print,.factory-bootstrap-455 tr.visible-print{display:none!important}@media print{.factory-bootstrap-455 .visible-print{display:block!important}.factory-bootstrap-455 table.visible-print{display:table}.factory-bootstrap-455 tr.visible-print{display:table-row!important}.factory-bootstrap-455 td.visible-print,.factory-bootstrap-455 th.visible-print{display:table-cell!important}.factory-bootstrap-455 .hidden-print,.factory-bootstrap-455 td.hidden-print,.factory-bootstrap-455 th.hidden-print,.factory-bootstrap-455 tr.hidden-print{display:none!important}}.factory-bootstrap-455 .btn-danger,.factory-bootstrap-455 .btn-default,.factory-bootstrap-455 .btn-info,.factory-bootstrap-455 .btn-primary,.factory-bootstrap-455 .btn-success,.factory-bootstrap-455 .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-455 .btn-danger.active,.factory-bootstrap-455 .btn-danger:active,.factory-bootstrap-455 .btn-default.active,.factory-bootstrap-455 .btn-default:active,.factory-bootstrap-455 .btn-info.active,.factory-bootstrap-455 .btn-info:active,.factory-bootstrap-455 .btn-primary.active,.factory-bootstrap-455 .btn-primary:active,.factory-bootstrap-455 .btn-success.active,.factory-bootstrap-455 .btn-success:active,.factory-bootstrap-455 .btn-warning.active,.factory-bootstrap-455 .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-455 .btn.active,.factory-bootstrap-455 .btn:active{background-image:none}.factory-bootstrap-455 .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-455 .btn-default.active,.factory-bootstrap-455 .btn-default:active{background-color:#fff;border-color:#dbdbdb}.factory-bootstrap-455 .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-455 .btn-gold:focus,.factory-bootstrap-455 .btn-gold:hover{background:#fef0a1}.factory-bootstrap-455 .btn-gold.active,.factory-bootstrap-455 .btn-gold:active{background:#fef0a1;-webkit-box-shadow:inset 0 3px 8px 0 #f8ba36;box-shadow:inset 0 3px 8px 0 #f8ba36}.factory-bootstrap-455 .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-455 .btn-primary:focus,.factory-bootstrap-455 .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-455 .btn-primary.active,.factory-bootstrap-455 .btn-primary:active{background-color:#2d6ca2;border-color:#2b669a}.factory-bootstrap-455 .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-455 .btn-success:focus,.factory-bootstrap-455 .btn-success:hover{background-color:#419641;background-position:0 -15px}.factory-bootstrap-455 .btn-success.active,.factory-bootstrap-455 .btn-success:active{background-color:#419641;border-color:#3e8f3e}.factory-bootstrap-455 .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-455 .btn-warning:focus,.factory-bootstrap-455 .btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.factory-bootstrap-455 .btn-warning.active,.factory-bootstrap-455 .btn-warning:active{background-color:#eb9316;border-color:#e38d13}.factory-bootstrap-455 .btn-danger{color:#fff;background:#d9534f;border-color:#d43f3a}.factory-bootstrap-455 .btn-danger.active,.factory-bootstrap-455 .btn-danger:active,.factory-bootstrap-455 .btn-danger:focus,.factory-bootstrap-455 .btn-danger:hover,.factory-bootstrap-455 .open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.factory-bootstrap-455 .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-455 .btn-info:focus,.factory-bootstrap-455 .btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.factory-bootstrap-455 .btn-info.active,.factory-bootstrap-455 .btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.factory-bootstrap-455 .img-thumbnail,.factory-bootstrap-455 .thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-455 .dropdown-menu>li>a:focus,.factory-bootstrap-455 .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-455 .dropdown-menu>.active>a,.factory-bootstrap-455 .dropdown-menu>.active>a:focus,.factory-bootstrap-455 .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-455 .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-455 .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-455 .navbar-brand,.factory-bootstrap-455 .navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.factory-bootstrap-455 .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-455 .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-455 .navbar-inverse .navbar-brand,.factory-bootstrap-455 .navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-455 .navbar-fixed-bottom,.factory-bootstrap-455 .navbar-fixed-top,.factory-bootstrap-455 .navbar-static-top{border-radius:0}.factory-bootstrap-455 .alert{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-455 .alert .actions{padding-top:10px}.factory-bootstrap-455 .alert-success{color:#3c763d;background-color:#dff0d8;border-bottom:2px solid #c8e5bc}.factory-bootstrap-455 .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-455 .alert{text-shadow:none;box-shadow:none;margin:0;margin-top:10px;margin-bottom:10px;padding:10px}.factory-bootstrap-455 .alert-normal,.factory-bootstrap-455 .alert-warning{background:#fcf8e3;color:#8a6d3b;border:1px solid #b8823b}.factory-bootstrap-455 .alert-danger{background:#cf4944;color:#fff;border-bottom:2px solid #b23e3a}.factory-bootstrap-455 .alert-danger a:not(.btn),.factory-bootstrap-455 .alert-error a:not(.btn){color:#fff}.factory-bootstrap-455 .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-455 .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-455 .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-455 .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-455 .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-455 .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-455 .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-455 .list-group-item.active,.factory-bootstrap-455 .list-group-item.active:focus,.factory-bootstrap-455 .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-455 .panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-455 .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-455 .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-455 .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-455 .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-455 .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-455 .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-455 .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-455 .factory-after{margin-left:7px;display:inline-block}.factory-bootstrap-455 .factory-hidden{display:none}.factory-bootstrap-455 .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}
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 article,.factory-bootstrap-461 aside,.factory-bootstrap-461 details,.factory-bootstrap-461 figcaption,.factory-bootstrap-461 figure,.factory-bootstrap-461 footer,.factory-bootstrap-461 header,.factory-bootstrap-461 hgroup,.factory-bootstrap-461 main,.factory-bootstrap-461 nav,.factory-bootstrap-461 section,.factory-bootstrap-461 summary{display:block}.factory-bootstrap-461 audio,.factory-bootstrap-461 canvas,.factory-bootstrap-461 video{display:inline-block}.factory-bootstrap-461 audio:not([controls]){display:none;height:0}.factory-bootstrap-461 [hidden],.factory-bootstrap-461 template{display:none}.factory-bootstrap-461 body{margin:0}.factory-bootstrap-461 a{background:0 0}.factory-bootstrap-461 a:focus{outline:thin dotted}.factory-bootstrap-461 a:active,.factory-bootstrap-461 a:hover{outline:0}.factory-bootstrap-461 h1{margin:.67em 0}.factory-bootstrap-461 b,.factory-bootstrap-461 strong{font-weight:700}.factory-bootstrap-461 dfn{font-style:italic}.factory-bootstrap-461 hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-461 mark{color:#000;background:#ff0}.factory-bootstrap-461 code,.factory-bootstrap-461 kbd,.factory-bootstrap-461 pre,.factory-bootstrap-461 samp{font-size:1em}.factory-bootstrap-461 pre{white-space:pre-wrap}.factory-bootstrap-461 q{quotes:"\201C" "\201D" "\2018" "\2019"}.factory-bootstrap-461 sub,.factory-bootstrap-461 sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.factory-bootstrap-461 sup{top:-.5em}.factory-bootstrap-461 sub{bottom:-.25em}.factory-bootstrap-461 img{border:0}.factory-bootstrap-461 svg:not(:root){overflow:hidden}.factory-bootstrap-461 figure{margin:0}.factory-bootstrap-461 button,.factory-bootstrap-461 input,.factory-bootstrap-461 select,.factory-bootstrap-461 textarea{margin:0}.factory-bootstrap-461 button,.factory-bootstrap-461 select{text-transform:none}.factory-bootstrap-461 select{padding-right:4px!important}.factory-bootstrap-461 button,.factory-bootstrap-461 input[type=reset],.factory-bootstrap-461 input[type=submit],html .factory-bootstrap-461 input[type=button]{cursor:pointer;-webkit-appearance:button}.factory-bootstrap-461 button[disabled],html .factory-bootstrap-461 input[disabled]{cursor:default}.factory-bootstrap-461 input[type=checkbox],.factory-bootstrap-461 input[type=radio]{padding:0;box-sizing:border-box}.factory-bootstrap-461 input[type=search]{-webkit-appearance:textfield}.factory-bootstrap-461 input[type=search]::-webkit-search-cancel-button,.factory-bootstrap-461 input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.factory-bootstrap-461 button::-moz-focus-inner,.factory-bootstrap-461 input::-moz-focus-inner{padding:0;border:0}.factory-bootstrap-461 textarea{overflow:auto;vertical-align:top}.factory-bootstrap-461 table{border-collapse:collapse;border-spacing:0}@media print{.factory-bootstrap-461 *{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}.factory-bootstrap-461 a,.factory-bootstrap-461 a:visited{text-decoration:underline}.factory-bootstrap-461 a[href]:after{content:" (" attr(href) ")"}.factory-bootstrap-461 abbr[title]:after{content:" (" attr(title) ")"}.factory-bootstrap-461 a[href^="javascript:"]:after,.factory-bootstrap-461 a[href^="#"]:after{content:""}.factory-bootstrap-461 blockquote,.factory-bootstrap-461 pre{border:1px solid #999;page-break-inside:avoid}.factory-bootstrap-461 thead{display:table-header-group}.factory-bootstrap-461 img,.factory-bootstrap-461 tr{page-break-inside:avoid}.factory-bootstrap-461 img{max-width:100%!important}@page{margin:2cm .5cm}.factory-bootstrap-461 h2,.factory-bootstrap-461 h3,.factory-bootstrap-461 p{orphans:3;widows:3}.factory-bootstrap-461 h2,.factory-bootstrap-461 h3{page-break-after:avoid}.factory-bootstrap-461 select{background:#fff!important}.factory-bootstrap-461 .navbar{display:none}.factory-bootstrap-461 .table td,.factory-bootstrap-461 .table th{background-color:#fff!important}.factory-bootstrap-461 .btn>.caret,.factory-bootstrap-461 .dropup>.btn>.caret{border-top-color:#000!important}.factory-bootstrap-461 .label{border:1px solid #000}.factory-bootstrap-461 .table{border-collapse:collapse!important}.factory-bootstrap-461 .table-bordered td,.factory-bootstrap-461 .table-bordered th{border:1px solid #ddd!important}}.factory-bootstrap-461 *,.factory-bootstrap-461 :after,.factory-bootstrap-461 :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html .factory-bootstrap-461{-webkit-tap-highlight-color:rgba(0,0,0,0)}.factory-bootstrap-461 body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}.factory-bootstrap-461 button,.factory-bootstrap-461 input,.factory-bootstrap-461 select,.factory-bootstrap-461 textarea{font-family:inherit;font-size:inherit;line-height:inherit}.factory-bootstrap-461 img{vertical-align:middle}.factory-bootstrap-461 .img-responsive{display:block;height:auto;max-width:100%}.factory-bootstrap-461 .img-rounded{border-radius:6px}.factory-bootstrap-461 .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-461 .img-circle{border-radius:50%}.factory-bootstrap-461 hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.factory-bootstrap-461 .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.factory-bootstrap-461 .h1,.factory-bootstrap-461 .h2,.factory-bootstrap-461 .h3,.factory-bootstrap-461 .h4,.factory-bootstrap-461 .h5,.factory-bootstrap-461 .h6,.factory-bootstrap-461 h1,.factory-bootstrap-461 h2,.factory-bootstrap-461 h3,.factory-bootstrap-461 h4,.factory-bootstrap-461 h5,.factory-bootstrap-461 h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.factory-bootstrap-461 .h1 .small,.factory-bootstrap-461 .h1 small,.factory-bootstrap-461 .h2 .small,.factory-bootstrap-461 .h2 small,.factory-bootstrap-461 .h3 .small,.factory-bootstrap-461 .h3 small,.factory-bootstrap-461 .h4 .small,.factory-bootstrap-461 .h4 small,.factory-bootstrap-461 .h5 .small,.factory-bootstrap-461 .h5 small,.factory-bootstrap-461 .h6 .small,.factory-bootstrap-461 .h6 small,.factory-bootstrap-461 h1 .small,.factory-bootstrap-461 h1 small,.factory-bootstrap-461 h2 .small,.factory-bootstrap-461 h2 small,.factory-bootstrap-461 h3 .small,.factory-bootstrap-461 h3 small,.factory-bootstrap-461 h4 .small,.factory-bootstrap-461 h4 small,.factory-bootstrap-461 h5 .small,.factory-bootstrap-461 h5 small,.factory-bootstrap-461 h6 .small,.factory-bootstrap-461 h6 small{font-weight:400;line-height:1;color:#999}.factory-bootstrap-461 h1,.factory-bootstrap-461 h2,.factory-bootstrap-461 h3{margin-top:20px;margin-bottom:10px}.factory-bootstrap-461 h1 .small,.factory-bootstrap-461 h1 small,.factory-bootstrap-461 h2 .small,.factory-bootstrap-461 h2 small,.factory-bootstrap-461 h3 .small,.factory-bootstrap-461 h3 small{font-size:65%}.factory-bootstrap-461 h4,.factory-bootstrap-461 h5,.factory-bootstrap-461 h6{margin-top:10px;margin-bottom:10px}.factory-bootstrap-461 h4 .small,.factory-bootstrap-461 h4 small,.factory-bootstrap-461 h5 .small,.factory-bootstrap-461 h5 small,.factory-bootstrap-461 h6 .small,.factory-bootstrap-461 h6 small{font-size:75%}.factory-bootstrap-461 .h1,.factory-bootstrap-461 h1{font-size:36px}.factory-bootstrap-461 .h2,.factory-bootstrap-461 h2{font-size:30px}.factory-bootstrap-461 .h3,.factory-bootstrap-461 h3{font-size:24px}.factory-bootstrap-461 .h4,.factory-bootstrap-461 h4{font-size:18px}.factory-bootstrap-461 .h5,.factory-bootstrap-461 h5{font-size:14px}.factory-bootstrap-461 .h6,.factory-bootstrap-461 h6{font-size:12px}.factory-bootstrap-461 p{margin:0 0 10px}.factory-bootstrap-461 .lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.factory-bootstrap-461 .small,.factory-bootstrap-461 small{font-size:85%}.factory-bootstrap-461 cite{font-style:normal}.factory-bootstrap-461 .text-muted{color:#999}.factory-bootstrap-461 .text-primary{color:#428bca}.factory-bootstrap-461 .text-primary:hover{color:#3071a9}.factory-bootstrap-461 .text-warning{color:#8a6d3b}.factory-bootstrap-461 .text-warning:hover{color:#66512c}.factory-bootstrap-461 .text-danger{color:#a94442}.factory-bootstrap-461 .text-danger:hover{color:#843534}.factory-bootstrap-461 .text-success{color:#3c763d}.factory-bootstrap-461 .text-success:hover{color:#2b542c}.factory-bootstrap-461 .text-info{color:#31708f}.factory-bootstrap-461 .text-info:hover{color:#245269}.factory-bootstrap-461 .text-left{text-align:left}.factory-bootstrap-461 .text-right{text-align:right}.factory-bootstrap-461 .text-center{text-align:center}.factory-bootstrap-461 .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}.factory-bootstrap-461 ol,.factory-bootstrap-461 ul{margin-top:0;margin-bottom:10px}.factory-bootstrap-461 ol ol,.factory-bootstrap-461 ol ul,.factory-bootstrap-461 ul ol,.factory-bootstrap-461 ul ul{margin-bottom:0}.factory-bootstrap-461 .list-inline,.factory-bootstrap-461 .list-unstyled{padding-left:0;list-style:none}.factory-bootstrap-461 .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.factory-bootstrap-461 .list-inline>li:first-child{padding-left:0}.factory-bootstrap-461 dl{margin-top:0;margin-bottom:20px}.factory-bootstrap-461 dd,.factory-bootstrap-461 dt{line-height:1.428571429}.factory-bootstrap-461 dt{font-weight:700}.factory-bootstrap-461 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-461 abbr[data-original-title],.factory-bootstrap-461 abbr[title]{cursor:help;border-bottom:1px dotted #999}.factory-bootstrap-461 .initialism{font-size:90%;text-transform:uppercase}.factory-bootstrap-461 blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}.factory-bootstrap-461 blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}.factory-bootstrap-461 blockquote p:last-child{margin-bottom:0}.factory-bootstrap-461 blockquote .small,.factory-bootstrap-461 blockquote small{display:block;line-height:1.428571429;color:#999}.factory-bootstrap-461 blockquote .small:before,.factory-bootstrap-461 blockquote small:before{content:'\2014 \00A0'}.factory-bootstrap-461 blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}.factory-bootstrap-461 blockquote.pull-right .small,.factory-bootstrap-461 blockquote.pull-right p,.factory-bootstrap-461 blockquote.pull-right small{text-align:right}.factory-bootstrap-461 blockquote.pull-right .small:before,.factory-bootstrap-461 blockquote.pull-right small:before{content:''}.factory-bootstrap-461 blockquote.pull-right .small:after,.factory-bootstrap-461 blockquote.pull-right small:after{content:'\00A0 \2014'}.factory-bootstrap-461 blockquote:after,.factory-bootstrap-461 blockquote:before{content:""}.factory-bootstrap-461 address{margin-bottom:20px;font-style:normal;line-height:1.428571429}.factory-bootstrap-461 code,.factory-bootstrap-461 kbd,.factory-bootstrap-461 pre,.factory-bootstrap-461 samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.factory-bootstrap-461 code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}.factory-bootstrap-461 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-461 pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.factory-bootstrap-461 .pre-scrollable{max-height:340px;overflow-y:scroll}.factory-bootstrap-461 .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.factory-bootstrap-461 .container:after,.factory-bootstrap-461 .container:before{display:table;content:" "}.factory-bootstrap-461 .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-461 .row{margin-right:-15px;margin-left:-15px}.factory-bootstrap-461 .row:after,.factory-bootstrap-461 .row:before{display:table;content:" "}.factory-bootstrap-461 .row:after{clear:both}.factory-bootstrap-461 .col-lg-1,.factory-bootstrap-461 .col-lg-10,.factory-bootstrap-461 .col-lg-11,.factory-bootstrap-461 .col-lg-12,.factory-bootstrap-461 .col-lg-2,.factory-bootstrap-461 .col-lg-3,.factory-bootstrap-461 .col-lg-4,.factory-bootstrap-461 .col-lg-5,.factory-bootstrap-461 .col-lg-6,.factory-bootstrap-461 .col-lg-7,.factory-bootstrap-461 .col-lg-8,.factory-bootstrap-461 .col-lg-9,.factory-bootstrap-461 .col-md-1,.factory-bootstrap-461 .col-md-10,.factory-bootstrap-461 .col-md-11,.factory-bootstrap-461 .col-md-12,.factory-bootstrap-461 .col-md-2,.factory-bootstrap-461 .col-md-3,.factory-bootstrap-461 .col-md-4,.factory-bootstrap-461 .col-md-5,.factory-bootstrap-461 .col-md-6,.factory-bootstrap-461 .col-md-7,.factory-bootstrap-461 .col-md-8,.factory-bootstrap-461 .col-md-9,.factory-bootstrap-461 .col-sm-1,.factory-bootstrap-461 .col-sm-10,.factory-bootstrap-461 .col-sm-11,.factory-bootstrap-461 .col-sm-12,.factory-bootstrap-461 .col-sm-2,.factory-bootstrap-461 .col-sm-3,.factory-bootstrap-461 .col-sm-4,.factory-bootstrap-461 .col-sm-5,.factory-bootstrap-461 .col-sm-6,.factory-bootstrap-461 .col-sm-7,.factory-bootstrap-461 .col-sm-8,.factory-bootstrap-461 .col-sm-9,.factory-bootstrap-461 .col-xs-1,.factory-bootstrap-461 .col-xs-10,.factory-bootstrap-461 .col-xs-11,.factory-bootstrap-461 .col-xs-12,.factory-bootstrap-461 .col-xs-2,.factory-bootstrap-461 .col-xs-3,.factory-bootstrap-461 .col-xs-4,.factory-bootstrap-461 .col-xs-5,.factory-bootstrap-461 .col-xs-6,.factory-bootstrap-461 .col-xs-7,.factory-bootstrap-461 .col-xs-8,.factory-bootstrap-461 .col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.factory-bootstrap-461 .col-xs-1,.factory-bootstrap-461 .col-xs-10,.factory-bootstrap-461 .col-xs-11,.factory-bootstrap-461 .col-xs-12,.factory-bootstrap-461 .col-xs-2,.factory-bootstrap-461 .col-xs-3,.factory-bootstrap-461 .col-xs-4,.factory-bootstrap-461 .col-xs-5,.factory-bootstrap-461 .col-xs-6,.factory-bootstrap-461 .col-xs-7,.factory-bootstrap-461 .col-xs-8,.factory-bootstrap-461 .col-xs-9{float:left}.factory-bootstrap-461 .col-xs-12{width:100%}.factory-bootstrap-461 .col-xs-11{width:91.66666666666666%}.factory-bootstrap-461 .col-xs-10{width:83.33333333333334%}.factory-bootstrap-461 .col-xs-9{width:75%}.factory-bootstrap-461 .col-xs-8{width:66.66666666666666%}.factory-bootstrap-461 .col-xs-7{width:58.333333333333336%}.factory-bootstrap-461 .col-xs-6{width:50%}.factory-bootstrap-461 .col-xs-5{width:41.66666666666667%}.factory-bootstrap-461 .col-xs-4{width:33.33333333333333%}.factory-bootstrap-461 .col-xs-3{width:25%}.factory-bootstrap-461 .col-xs-2{width:16.666666666666664%}.factory-bootstrap-461 .col-xs-1{width:8.333333333333332%}.factory-bootstrap-461 .col-xs-pull-12{right:100%}.factory-bootstrap-461 .col-xs-pull-11{right:91.66666666666666%}.factory-bootstrap-461 .col-xs-pull-10{right:83.33333333333334%}.factory-bootstrap-461 .col-xs-pull-9{right:75%}.factory-bootstrap-461 .col-xs-pull-8{right:66.66666666666666%}.factory-bootstrap-461 .col-xs-pull-7{right:58.333333333333336%}.factory-bootstrap-461 .col-xs-pull-6{right:50%}.factory-bootstrap-461 .col-xs-pull-5{right:41.66666666666667%}.factory-bootstrap-461 .col-xs-pull-4{right:33.33333333333333%}.factory-bootstrap-461 .col-xs-pull-3{right:25%}.factory-bootstrap-461 .col-xs-pull-2{right:16.666666666666664%}.factory-bootstrap-461 .col-xs-pull-1{right:8.333333333333332%}.factory-bootstrap-461 .col-xs-pull-0{right:0}.factory-bootstrap-461 .col-xs-push-12{left:100%}.factory-bootstrap-461 .col-xs-push-11{left:91.66666666666666%}.factory-bootstrap-461 .col-xs-push-10{left:83.33333333333334%}.factory-bootstrap-461 .col-xs-push-9{left:75%}.factory-bootstrap-461 .col-xs-push-8{left:66.66666666666666%}.factory-bootstrap-461 .col-xs-push-7{left:58.333333333333336%}.factory-bootstrap-461 .col-xs-push-6{left:50%}.factory-bootstrap-461 .col-xs-push-5{left:41.66666666666667%}.factory-bootstrap-461 .col-xs-push-4{left:33.33333333333333%}.factory-bootstrap-461 .col-xs-push-3{left:25%}.factory-bootstrap-461 .col-xs-push-2{left:16.666666666666664%}.factory-bootstrap-461 .col-xs-push-1{left:8.333333333333332%}.factory-bootstrap-461 .col-xs-push-0{left:0}.factory-bootstrap-461 .col-xs-offset-12{margin-left:100%}.factory-bootstrap-461 .col-xs-offset-11{margin-left:91.66666666666666%}.factory-bootstrap-461 .col-xs-offset-10{margin-left:83.33333333333334%}.factory-bootstrap-461 .col-xs-offset-9{margin-left:75%}.factory-bootstrap-461 .col-xs-offset-8{margin-left:66.66666666666666%}.factory-bootstrap-461 .col-xs-offset-7{margin-left:58.333333333333336%}.factory-bootstrap-461 .col-xs-offset-6{margin-left:50%}.factory-bootstrap-461 .col-xs-offset-5{margin-left:41.66666666666667%}.factory-bootstrap-461 .col-xs-offset-4{margin-left:33.33333333333333%}.factory-bootstrap-461 .col-xs-offset-3{margin-left:25%}.factory-bootstrap-461 .col-xs-offset-2{margin-left:16.666666666666664%}.factory-bootstrap-461 .col-xs-offset-1{margin-left:8.333333333333332%}.factory-bootstrap-461 .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-461 table{max-width:100%;background-color:transparent}.factory-bootstrap-461 th{text-align:left}.factory-bootstrap-461 .table{width:100%;margin-bottom:20px}.factory-bootstrap-461 .table>tbody>tr>td,.factory-bootstrap-461 .table>tbody>tr>th,.factory-bootstrap-461 .table>tfoot>tr>td,.factory-bootstrap-461 .table>tfoot>tr>th,.factory-bootstrap-461 .table>thead>tr>td,.factory-bootstrap-461 .table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.factory-bootstrap-461 .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.factory-bootstrap-461 .table>caption+thead>tr:first-child>td,.factory-bootstrap-461 .table>caption+thead>tr:first-child>th,.factory-bootstrap-461 .table>colgroup+thead>tr:first-child>td,.factory-bootstrap-461 .table>colgroup+thead>tr:first-child>th,.factory-bootstrap-461 .table>thead:first-child>tr:first-child>td,.factory-bootstrap-461 .table>thead:first-child>tr:first-child>th{border-top:0}.factory-bootstrap-461 .table>tbody+tbody{border-top:2px solid #ddd}.factory-bootstrap-461 .table .table{background-color:#fff}.factory-bootstrap-461 .table-condensed>tbody>tr>td,.factory-bootstrap-461 .table-condensed>tbody>tr>th,.factory-bootstrap-461 .table-condensed>tfoot>tr>td,.factory-bootstrap-461 .table-condensed>tfoot>tr>th,.factory-bootstrap-461 .table-condensed>thead>tr>td,.factory-bootstrap-461 .table-condensed>thead>tr>th{padding:5px}.factory-bootstrap-461 .table-bordered,.factory-bootstrap-461 .table-bordered>tbody>tr>td,.factory-bootstrap-461 .table-bordered>tbody>tr>th,.factory-bootstrap-461 .table-bordered>tfoot>tr>td,.factory-bootstrap-461 .table-bordered>tfoot>tr>th,.factory-bootstrap-461 .table-bordered>thead>tr>td,.factory-bootstrap-461 .table-bordered>thead>tr>th{border:1px solid #ddd}.factory-bootstrap-461 .table-bordered>thead>tr>td,.factory-bootstrap-461 .table-bordered>thead>tr>th{border-bottom-width:2px}.factory-bootstrap-461 .table-striped>tbody>tr:nth-child(odd)>td,.factory-bootstrap-461 .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.factory-bootstrap-461 .table-hover>tbody>tr:hover>td,.factory-bootstrap-461 .table-hover>tbody>tr:hover>th{background-color:#f5f5f5}.factory-bootstrap-461 table col[class*=col-]{position:static;display:table-column;float:none}.factory-bootstrap-461 table td[class*=col-],.factory-bootstrap-461 table th[class*=col-]{display:table-cell;float:none}.factory-bootstrap-461 .table>tbody>.active>td,.factory-bootstrap-461 .table>tbody>.active>th,.factory-bootstrap-461 .table>tbody>tr>.active,.factory-bootstrap-461 .table>tfoot>.active>td,.factory-bootstrap-461 .table>tfoot>.active>th,.factory-bootstrap-461 .table>tfoot>tr>.active,.factory-bootstrap-461 .table>thead>.active>td,.factory-bootstrap-461 .table>thead>.active>th,.factory-bootstrap-461 .table>thead>tr>.active{background-color:#f5f5f5}.factory-bootstrap-461 .table-hover>tbody>.active:hover>td,.factory-bootstrap-461 .table-hover>tbody>.active:hover>th,.factory-bootstrap-461 .table-hover>tbody>tr>.active:hover{background-color:#e8e8e8}.factory-bootstrap-461 .table>tbody>.success>td,.factory-bootstrap-461 .table>tbody>.success>th,.factory-bootstrap-461 .table>tbody>tr>.success,.factory-bootstrap-461 .table>tfoot>.success>td,.factory-bootstrap-461 .table>tfoot>.success>th,.factory-bootstrap-461 .table>tfoot>tr>.success,.factory-bootstrap-461 .table>thead>.success>td,.factory-bootstrap-461 .table>thead>.success>th,.factory-bootstrap-461 .table>thead>tr>.success{background-color:#dff0d8}.factory-bootstrap-461 .table-hover>tbody>.success:hover>td,.factory-bootstrap-461 .table-hover>tbody>.success:hover>th,.factory-bootstrap-461 .table-hover>tbody>tr>.success:hover{background-color:#d0e9c6}.factory-bootstrap-461 .table>tbody>.danger>td,.factory-bootstrap-461 .table>tbody>.danger>th,.factory-bootstrap-461 .table>tbody>tr>.danger,.factory-bootstrap-461 .table>tfoot>.danger>td,.factory-bootstrap-461 .table>tfoot>.danger>th,.factory-bootstrap-461 .table>tfoot>tr>.danger,.factory-bootstrap-461 .table>thead>.danger>td,.factory-bootstrap-461 .table>thead>.danger>th,.factory-bootstrap-461 .table>thead>tr>.danger{background-color:#f2dede}.factory-bootstrap-461 .table-hover>tbody>.danger:hover>td,.factory-bootstrap-461 .table-hover>tbody>.danger:hover>th,.factory-bootstrap-461 .table-hover>tbody>tr>.danger:hover{background-color:#ebcccc}.factory-bootstrap-461 .table>tbody>.warning>td,.factory-bootstrap-461 .table>tbody>.warning>th,.factory-bootstrap-461 .table>tbody>tr>.warning,.factory-bootstrap-461 .table>tfoot>.warning>td,.factory-bootstrap-461 .table>tfoot>.warning>th,.factory-bootstrap-461 .table>tfoot>tr>.warning,.factory-bootstrap-461 .table>thead>.warning>td,.factory-bootstrap-461 .table>thead>.warning>th,.factory-bootstrap-461 .table>thead>tr>.warning{background-color:#fcf8e3}.factory-bootstrap-461 .table-hover>tbody>.warning:hover>td,.factory-bootstrap-461 .table-hover>tbody>.warning:hover>th,.factory-bootstrap-461 .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-461 fieldset{padding:0;margin:0;border:0}.factory-bootstrap-461 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-461 label{display:inline-block;margin-bottom:5px;font-weight:700}.factory-bootstrap-461 input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-461 input[type=checkbox],.factory-bootstrap-461 input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}.factory-bootstrap-461 input[type=file]{display:block}.factory-bootstrap-461 select[multiple],.factory-bootstrap-461 select[size]{height:auto}.factory-bootstrap-461 select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}.factory-bootstrap-461 input[type=checkbox]:focus,.factory-bootstrap-461 input[type=file]:focus,.factory-bootstrap-461 input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-461 input[type=number]::-webkit-inner-spin-button,.factory-bootstrap-461 input[type=number]::-webkit-outer-spin-button{height:auto}.factory-bootstrap-461 output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.factory-bootstrap-461 .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-461 .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-461 .form-control:-moz-placeholder{color:#999}.factory-bootstrap-461 .form-control::-moz-placeholder{color:#999;opacity:1}.factory-bootstrap-461 .form-control:-ms-input-placeholder{color:#999}.factory-bootstrap-461 .form-control::-webkit-input-placeholder{color:#999}.factory-bootstrap-461 .form-control[disabled],.factory-bootstrap-461 .form-control[readonly],.factory-bootstrap-461 fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}.factory-bootstrap-461 textarea.form-control{height:auto}.factory-bootstrap-461 .form-group{margin-bottom:15px}.factory-bootstrap-461 .checkbox,.factory-bootstrap-461 .radio{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.factory-bootstrap-461 .checkbox label,.factory-bootstrap-461 .radio label{display:inline;margin-bottom:0;font-weight:400;cursor:pointer}.factory-bootstrap-461 .checkbox input[type=checkbox],.factory-bootstrap-461 .checkbox-inline input[type=checkbox],.factory-bootstrap-461 .radio input[type=radio],.factory-bootstrap-461 .radio-inline input[type=radio]{float:left;margin-left:-20px}.factory-bootstrap-461 .checkbox+.checkbox,.factory-bootstrap-461 .radio+.radio{margin-top:-5px}.factory-bootstrap-461 .checkbox-inline,.factory-bootstrap-461 .radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.factory-bootstrap-461 .checkbox-inline+.checkbox-inline,.factory-bootstrap-461 .radio-inline+.radio-inline{margin-top:0;margin-left:10px}.factory-bootstrap-461 .checkbox-inline[disabled],.factory-bootstrap-461 .checkbox[disabled],.factory-bootstrap-461 .radio-inline[disabled],.factory-bootstrap-461 .radio[disabled],.factory-bootstrap-461 fieldset[disabled] .checkbox,.factory-bootstrap-461 fieldset[disabled] .checkbox-inline,.factory-bootstrap-461 fieldset[disabled] .radio,.factory-bootstrap-461 fieldset[disabled] .radio-inline,.factory-bootstrap-461 fieldset[disabled] input[type=checkbox],.factory-bootstrap-461 fieldset[disabled] input[type=radio],.factory-bootstrap-461 input[type=checkbox][disabled],.factory-bootstrap-461 input[type=radio][disabled]{cursor:not-allowed}.factory-bootstrap-461 .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-461 select.input-sm{height:30px;line-height:30px}.factory-bootstrap-461 textarea.input-sm{height:auto}.factory-bootstrap-461 .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-461 select.input-lg{height:46px;line-height:46px}.factory-bootstrap-461 textarea.input-lg{height:auto}.factory-bootstrap-461 .has-warning .checkbox,.factory-bootstrap-461 .has-warning .checkbox-inline,.factory-bootstrap-461 .has-warning .control-label,.factory-bootstrap-461 .has-warning .help-block,.factory-bootstrap-461 .has-warning .radio,.factory-bootstrap-461 .has-warning .radio-inline{color:#8a6d3b}.factory-bootstrap-461 .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-461 .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-461 .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.factory-bootstrap-461 .has-error .checkbox,.factory-bootstrap-461 .has-error .checkbox-inline,.factory-bootstrap-461 .has-error .control-label,.factory-bootstrap-461 .has-error .help-block,.factory-bootstrap-461 .has-error .radio,.factory-bootstrap-461 .has-error .radio-inline{color:#a94442}.factory-bootstrap-461 .controls{display:block}.factory-bootstrap-461 .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-461 .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-461 .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.factory-bootstrap-461 .has-success .checkbox,.factory-bootstrap-461 .has-success .checkbox-inline,.factory-bootstrap-461 .has-success .control-label,.factory-bootstrap-461 .has-success .help-block,.factory-bootstrap-461 .has-success .radio,.factory-bootstrap-461 .has-success .radio-inline{color:#3c763d}.factory-bootstrap-461 .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-461 .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-461 .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.factory-bootstrap-461 .form-control-static{margin-bottom:0}.factory-bootstrap-461 .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-461 .form-horizontal .checkbox,.factory-bootstrap-461 .form-horizontal .checkbox-inline,.factory-bootstrap-461 .form-horizontal .control-label,.factory-bootstrap-461 .form-horizontal .radio,.factory-bootstrap-461 .form-horizontal .radio-inline{position:relative;padding-top:7px;margin-top:0;margin-bottom:0}.factory-bootstrap-461 .form-horizontal .control-label{max-width:200px}.factory-bootstrap-461 .form-horizontal .checkbox,.factory-bootstrap-461 .form-horizontal .radio{min-height:27px}.factory-bootstrap-461 .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.factory-bootstrap-461 .form-horizontal .form-group:after,.factory-bootstrap-461 .form-horizontal .form-group:before{display:table;content:" "}.factory-bootstrap-461 .form-horizontal .form-group:after{clear:both}.factory-bootstrap-461 .form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.factory-bootstrap-461 .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-461 .btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-461 .btn{text-decoration:none}.factory-bootstrap-461 .btn:focus,.factory-bootstrap-461 .btn:hover{color:#333;text-decoration:none}.factory-bootstrap-461 .btn.disabled,.factory-bootstrap-461 .btn[disabled],.factory-bootstrap-461 fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-461 .btn-default.active,.factory-bootstrap-461 .btn-default:active,.factory-bootstrap-461 .btn-default:focus,.factory-bootstrap-461 .btn-default:hover,.factory-bootstrap-461 .open .dropdown-toggle.btn-default{background:#fafafa;border-color:#999;color:#222}.factory-bootstrap-461 .btn-default.active,.factory-bootstrap-461 .btn-default:active,.factory-bootstrap-461 .open .dropdown-toggle.btn-default{background-image:none}.factory-bootstrap-461 .btn-default.disabled,.factory-bootstrap-461 .btn-default.disabled.active,.factory-bootstrap-461 .btn-default.disabled:active,.factory-bootstrap-461 .btn-default.disabled:focus,.factory-bootstrap-461 .btn-default.disabled:hover,.factory-bootstrap-461 .btn-default[disabled],.factory-bootstrap-461 .btn-default[disabled].active,.factory-bootstrap-461 .btn-default[disabled]:active,.factory-bootstrap-461 .btn-default[disabled]:focus,.factory-bootstrap-461 .btn-default[disabled]:hover,.factory-bootstrap-461 fieldset[disabled] .btn-default,.factory-bootstrap-461 fieldset[disabled] .btn-default.active,.factory-bootstrap-461 fieldset[disabled] .btn-default:active,.factory-bootstrap-461 fieldset[disabled] .btn-default:focus,.factory-bootstrap-461 fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.factory-bootstrap-461 .btn-default .badge{color:#fff;background-color:#fff}.factory-bootstrap-461 .btn-primary.active,.factory-bootstrap-461 .btn-primary:active,.factory-bootstrap-461 .btn-primary:focus,.factory-bootstrap-461 .btn-primary:hover,.factory-bootstrap-461 .open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.factory-bootstrap-461 .btn-primary.active,.factory-bootstrap-461 .btn-primary:active,.factory-bootstrap-461 .open .dropdown-toggle.btn-primary{background-image:none}.factory-bootstrap-461 .btn-primary.disabled,.factory-bootstrap-461 .btn-primary.disabled.active,.factory-bootstrap-461 .btn-primary.disabled:active,.factory-bootstrap-461 .btn-primary.disabled:focus,.factory-bootstrap-461 .btn-primary.disabled:hover,.factory-bootstrap-461 .btn-primary[disabled],.factory-bootstrap-461 .btn-primary[disabled].active,.factory-bootstrap-461 .btn-primary[disabled]:active,.factory-bootstrap-461 .btn-primary[disabled]:focus,.factory-bootstrap-461 .btn-primary[disabled]:hover,.factory-bootstrap-461 fieldset[disabled] .btn-primary,.factory-bootstrap-461 fieldset[disabled] .btn-primary.active,.factory-bootstrap-461 fieldset[disabled] .btn-primary:active,.factory-bootstrap-461 fieldset[disabled] .btn-primary:focus,.factory-bootstrap-461 fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.factory-bootstrap-461 .btn-primary .badge{color:#428bca;background-color:#fff}.factory-bootstrap-461 .btn-warning{color:#fff;background-color:#f0ad4e}.factory-bootstrap-461 .btn-warning.active,.factory-bootstrap-461 .btn-warning:active,.factory-bootstrap-461 .btn-warning:focus,.factory-bootstrap-461 .btn-warning:hover,.factory-bootstrap-461 .open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.factory-bootstrap-461 .btn-warning.active,.factory-bootstrap-461 .btn-warning:active,.factory-bootstrap-461 .open .dropdown-toggle.btn-warning{background-image:none}.factory-bootstrap-461 .btn-warning.disabled,.factory-bootstrap-461 .btn-warning.disabled.active,.factory-bootstrap-461 .btn-warning.disabled:active,.factory-bootstrap-461 .btn-warning.disabled:focus,.factory-bootstrap-461 .btn-warning.disabled:hover,.factory-bootstrap-461 .btn-warning[disabled],.factory-bootstrap-461 .btn-warning[disabled].active,.factory-bootstrap-461 .btn-warning[disabled]:active,.factory-bootstrap-461 .btn-warning[disabled]:focus,.factory-bootstrap-461 .btn-warning[disabled]:hover,.factory-bootstrap-461 fieldset[disabled] .btn-warning,.factory-bootstrap-461 fieldset[disabled] .btn-warning.active,.factory-bootstrap-461 fieldset[disabled] .btn-warning:active,.factory-bootstrap-461 fieldset[disabled] .btn-warning:focus,.factory-bootstrap-461 fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.factory-bootstrap-461 .btn-warning .badge{color:#f0ad4e;background-color:#fff}.factory-bootstrap-461 .btn-success{color:#fff;background-color:#5cb85c}.factory-bootstrap-461 .btn-success.active,.factory-bootstrap-461 .btn-success:active,.factory-bootstrap-461 .btn-success:focus,.factory-bootstrap-461 .btn-success:hover,.factory-bootstrap-461 .open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.factory-bootstrap-461 .btn-success.active,.factory-bootstrap-461 .btn-success:active,.factory-bootstrap-461 .open .dropdown-toggle.btn-success{background-image:none}.factory-bootstrap-461 .btn-success.disabled,.factory-bootstrap-461 .btn-success.disabled.active,.factory-bootstrap-461 .btn-success.disabled:active,.factory-bootstrap-461 .btn-success.disabled:focus,.factory-bootstrap-461 .btn-success.disabled:hover,.factory-bootstrap-461 .btn-success[disabled],.factory-bootstrap-461 .btn-success[disabled].active,.factory-bootstrap-461 .btn-success[disabled]:active,.factory-bootstrap-461 .btn-success[disabled]:focus,.factory-bootstrap-461 .btn-success[disabled]:hover,.factory-bootstrap-461 fieldset[disabled] .btn-success,.factory-bootstrap-461 fieldset[disabled] .btn-success.active,.factory-bootstrap-461 fieldset[disabled] .btn-success:active,.factory-bootstrap-461 fieldset[disabled] .btn-success:focus,.factory-bootstrap-461 fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.factory-bootstrap-461 .btn-success .badge{color:#5cb85c;background-color:#fff}.factory-bootstrap-461 .btn-info{color:#fff;background-color:#5bc0de}.factory-bootstrap-461 .btn-info.active,.factory-bootstrap-461 .btn-info:active,.factory-bootstrap-461 .btn-info:focus,.factory-bootstrap-461 .btn-info:hover,.factory-bootstrap-461 .open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.factory-bootstrap-461 .btn-info.active,.factory-bootstrap-461 .btn-info:active,.factory-bootstrap-461 .open .dropdown-toggle.btn-info{background-image:none}.factory-bootstrap-461 .btn-info.disabled,.factory-bootstrap-461 .btn-info.disabled.active,.factory-bootstrap-461 .btn-info.disabled:active,.factory-bootstrap-461 .btn-info.disabled:focus,.factory-bootstrap-461 .btn-info.disabled:hover,.factory-bootstrap-461 .btn-info[disabled],.factory-bootstrap-461 .btn-info[disabled].active,.factory-bootstrap-461 .btn-info[disabled]:active,.factory-bootstrap-461 .btn-info[disabled]:focus,.factory-bootstrap-461 .btn-info[disabled]:hover,.factory-bootstrap-461 fieldset[disabled] .btn-info,.factory-bootstrap-461 fieldset[disabled] .btn-info.active,.factory-bootstrap-461 fieldset[disabled] .btn-info:active,.factory-bootstrap-461 fieldset[disabled] .btn-info:focus,.factory-bootstrap-461 fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.factory-bootstrap-461 .btn-info .badge{color:#5bc0de;background-color:#fff}.factory-bootstrap-461 .btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.factory-bootstrap-461 .btn-link,.factory-bootstrap-461 .btn-link:active,.factory-bootstrap-461 .btn-link[disabled],.factory-bootstrap-461 fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-461 .btn-link,.factory-bootstrap-461 .btn-link:active,.factory-bootstrap-461 .btn-link:focus,.factory-bootstrap-461 .btn-link:hover{border-color:transparent}.factory-bootstrap-461 .btn-link:focus,.factory-bootstrap-461 .btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.factory-bootstrap-461 .btn-link[disabled]:focus,.factory-bootstrap-461 .btn-link[disabled]:hover,.factory-bootstrap-461 fieldset[disabled] .btn-link:focus,.factory-bootstrap-461 fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.factory-bootstrap-461 .btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-461 .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-461 .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-461 .btn-block{display:block;width:100%;padding-right:0;padding-left:0}.factory-bootstrap-461 .btn-block+.btn-block{margin-top:5px}.factory-bootstrap-461 input[type=button].btn-block,.factory-bootstrap-461 input[type=reset].btn-block,.factory-bootstrap-461 input[type=submit].btn-block{width:100%}.factory-bootstrap-461 .fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.factory-bootstrap-461 .fade.in{opacity:1}.factory-bootstrap-461 .collapse{display:none}.factory-bootstrap-461 .collapse.in{display:block}.factory-bootstrap-461 .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-461 .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-461 .glyphicon:empty{width:1em}.factory-bootstrap-461 .glyphicon-asterisk:before{content:"\2a"}.factory-bootstrap-461 .glyphicon-plus:before{content:"\2b"}.factory-bootstrap-461 .glyphicon-euro:before{content:"\20ac"}.factory-bootstrap-461 .glyphicon-minus:before{content:"\2212"}.factory-bootstrap-461 .glyphicon-cloud:before{content:"\2601"}.factory-bootstrap-461 .glyphicon-envelope:before{content:"\2709"}.factory-bootstrap-461 .glyphicon-pencil:before{content:"\270f"}.factory-bootstrap-461 .glyphicon-glass:before{content:"\e001"}.factory-bootstrap-461 .glyphicon-music:before{content:"\e002"}.factory-bootstrap-461 .glyphicon-search:before{content:"\e003"}.factory-bootstrap-461 .glyphicon-heart:before{content:"\e005"}.factory-bootstrap-461 .glyphicon-star:before{content:"\e006"}.factory-bootstrap-461 .glyphicon-star-empty:before{content:"\e007"}.factory-bootstrap-461 .glyphicon-user:before{content:"\e008"}.factory-bootstrap-461 .glyphicon-film:before{content:"\e009"}.factory-bootstrap-461 .glyphicon-th-large:before{content:"\e010"}.factory-bootstrap-461 .glyphicon-th:before{content:"\e011"}.factory-bootstrap-461 .glyphicon-th-list:before{content:"\e012"}.factory-bootstrap-461 .glyphicon-ok:before{content:"\e013"}.factory-bootstrap-461 .glyphicon-remove:before{content:"\e014"}.factory-bootstrap-461 .glyphicon-zoom-in:before{content:"\e015"}.factory-bootstrap-461 .glyphicon-zoom-out:before{content:"\e016"}.factory-bootstrap-461 .glyphicon-off:before{content:"\e017"}.factory-bootstrap-461 .glyphicon-signal:before{content:"\e018"}.factory-bootstrap-461 .glyphicon-cog:before{content:"\e019"}.factory-bootstrap-461 .glyphicon-trash:before{content:"\e020"}.factory-bootstrap-461 .glyphicon-home:before{content:"\e021"}.factory-bootstrap-461 .glyphicon-file:before{content:"\e022"}.factory-bootstrap-461 .glyphicon-time:before{content:"\e023"}.factory-bootstrap-461 .glyphicon-road:before{content:"\e024"}.factory-bootstrap-461 .glyphicon-download-alt:before{content:"\e025"}.factory-bootstrap-461 .glyphicon-download:before{content:"\e026"}.factory-bootstrap-461 .glyphicon-upload:before{content:"\e027"}.factory-bootstrap-461 .glyphicon-inbox:before{content:"\e028"}.factory-bootstrap-461 .glyphicon-play-circle:before{content:"\e029"}.factory-bootstrap-461 .glyphicon-repeat:before{content:"\e030"}.factory-bootstrap-461 .glyphicon-refresh:before{content:"\e031"}.factory-bootstrap-461 .glyphicon-list-alt:before{content:"\e032"}.factory-bootstrap-461 .glyphicon-lock:before{content:"\e033"}.factory-bootstrap-461 .glyphicon-flag:before{content:"\e034"}.factory-bootstrap-461 .glyphicon-headphones:before{content:"\e035"}.factory-bootstrap-461 .glyphicon-volume-off:before{content:"\e036"}.factory-bootstrap-461 .glyphicon-volume-down:before{content:"\e037"}.factory-bootstrap-461 .glyphicon-volume-up:before{content:"\e038"}.factory-bootstrap-461 .glyphicon-qrcode:before{content:"\e039"}.factory-bootstrap-461 .glyphicon-barcode:before{content:"\e040"}.factory-bootstrap-461 .glyphicon-tag:before{content:"\e041"}.factory-bootstrap-461 .glyphicon-tags:before{content:"\e042"}.factory-bootstrap-461 .glyphicon-book:before{content:"\e043"}.factory-bootstrap-461 .glyphicon-bookmark:before{content:"\e044"}.factory-bootstrap-461 .glyphicon-print:before{content:"\e045"}.factory-bootstrap-461 .glyphicon-camera:before{content:"\e046"}.factory-bootstrap-461 .glyphicon-font:before{content:"\e047"}.factory-bootstrap-461 .glyphicon-bold:before{content:"\e048"}.factory-bootstrap-461 .glyphicon-italic:before{content:"\e049"}.factory-bootstrap-461 .glyphicon-text-height:before{content:"\e050"}.factory-bootstrap-461 .glyphicon-text-width:before{content:"\e051"}.factory-bootstrap-461 .glyphicon-align-left:before{content:"\e052"}.factory-bootstrap-461 .glyphicon-align-center:before{content:"\e053"}.factory-bootstrap-461 .glyphicon-align-right:before{content:"\e054"}.factory-bootstrap-461 .glyphicon-align-justify:before{content:"\e055"}.factory-bootstrap-461 .glyphicon-list:before{content:"\e056"}.factory-bootstrap-461 .glyphicon-indent-left:before{content:"\e057"}.factory-bootstrap-461 .glyphicon-indent-right:before{content:"\e058"}.factory-bootstrap-461 .glyphicon-facetime-video:before{content:"\e059"}.factory-bootstrap-461 .glyphicon-picture:before{content:"\e060"}.factory-bootstrap-461 .glyphicon-map-marker:before{content:"\e062"}.factory-bootstrap-461 .glyphicon-adjust:before{content:"\e063"}.factory-bootstrap-461 .glyphicon-tint:before{content:"\e064"}.factory-bootstrap-461 .glyphicon-edit:before{content:"\e065"}.factory-bootstrap-461 .glyphicon-share:before{content:"\e066"}.factory-bootstrap-461 .glyphicon-check:before{content:"\e067"}.factory-bootstrap-461 .glyphicon-move:before{content:"\e068"}.factory-bootstrap-461 .glyphicon-step-backward:before{content:"\e069"}.factory-bootstrap-461 .glyphicon-fast-backward:before{content:"\e070"}.factory-bootstrap-461 .glyphicon-backward:before{content:"\e071"}.factory-bootstrap-461 .glyphicon-play:before{content:"\e072"}.factory-bootstrap-461 .glyphicon-pause:before{content:"\e073"}.factory-bootstrap-461 .glyphicon-stop:before{content:"\e074"}.factory-bootstrap-461 .glyphicon-forward:before{content:"\e075"}.factory-bootstrap-461 .glyphicon-fast-forward:before{content:"\e076"}.factory-bootstrap-461 .glyphicon-step-forward:before{content:"\e077"}.factory-bootstrap-461 .glyphicon-eject:before{content:"\e078"}.factory-bootstrap-461 .glyphicon-chevron-left:before{content:"\e079"}.factory-bootstrap-461 .glyphicon-chevron-right:before{content:"\e080"}.factory-bootstrap-461 .glyphicon-plus-sign:before{content:"\e081"}.factory-bootstrap-461 .glyphicon-minus-sign:before{content:"\e082"}.factory-bootstrap-461 .glyphicon-remove-sign:before{content:"\e083"}.factory-bootstrap-461 .glyphicon-ok-sign:before{content:"\e084"}.factory-bootstrap-461 .glyphicon-question-sign:before{content:"\e085"}.factory-bootstrap-461 .glyphicon-info-sign:before{content:"\e086"}.factory-bootstrap-461 .glyphicon-screenshot:before{content:"\e087"}.factory-bootstrap-461 .glyphicon-remove-circle:before{content:"\e088"}.factory-bootstrap-461 .glyphicon-ok-circle:before{content:"\e089"}.factory-bootstrap-461 .glyphicon-ban-circle:before{content:"\e090"}.factory-bootstrap-461 .glyphicon-arrow-left:before{content:"\e091"}.factory-bootstrap-461 .glyphicon-arrow-right:before{content:"\e092"}.factory-bootstrap-461 .glyphicon-arrow-up:before{content:"\e093"}.factory-bootstrap-461 .glyphicon-arrow-down:before{content:"\e094"}.factory-bootstrap-461 .glyphicon-share-alt:before{content:"\e095"}.factory-bootstrap-461 .glyphicon-resize-full:before{content:"\e096"}.factory-bootstrap-461 .glyphicon-resize-small:before{content:"\e097"}.factory-bootstrap-461 .glyphicon-exclamation-sign:before{content:"\e101"}.factory-bootstrap-461 .glyphicon-gift:before{content:"\e102"}.factory-bootstrap-461 .glyphicon-leaf:before{content:"\e103"}.factory-bootstrap-461 .glyphicon-fire:before{content:"\e104"}.factory-bootstrap-461 .glyphicon-eye-open:before{content:"\e105"}.factory-bootstrap-461 .glyphicon-eye-close:before{content:"\e106"}.factory-bootstrap-461 .glyphicon-warning-sign:before{content:"\e107"}.factory-bootstrap-461 .glyphicon-plane:before{content:"\e108"}.factory-bootstrap-461 .glyphicon-calendar:before{content:"\e109"}.factory-bootstrap-461 .glyphicon-random:before{content:"\e110"}.factory-bootstrap-461 .glyphicon-comment:before{content:"\e111"}.factory-bootstrap-461 .glyphicon-magnet:before{content:"\e112"}.factory-bootstrap-461 .glyphicon-chevron-up:before{content:"\e113"}.factory-bootstrap-461 .glyphicon-chevron-down:before{content:"\e114"}.factory-bootstrap-461 .glyphicon-retweet:before{content:"\e115"}.factory-bootstrap-461 .glyphicon-shopping-cart:before{content:"\e116"}.factory-bootstrap-461 .glyphicon-folder-close:before{content:"\e117"}.factory-bootstrap-461 .glyphicon-folder-open:before{content:"\e118"}.factory-bootstrap-461 .glyphicon-resize-vertical:before{content:"\e119"}.factory-bootstrap-461 .glyphicon-resize-horizontal:before{content:"\e120"}.factory-bootstrap-461 .glyphicon-hdd:before{content:"\e121"}.factory-bootstrap-461 .glyphicon-bullhorn:before{content:"\e122"}.factory-bootstrap-461 .glyphicon-bell:before{content:"\e123"}.factory-bootstrap-461 .glyphicon-certificate:before{content:"\e124"}.factory-bootstrap-461 .glyphicon-thumbs-up:before{content:"\e125"}.factory-bootstrap-461 .glyphicon-thumbs-down:before{content:"\e126"}.factory-bootstrap-461 .glyphicon-hand-right:before{content:"\e127"}.factory-bootstrap-461 .glyphicon-hand-left:before{content:"\e128"}.factory-bootstrap-461 .glyphicon-hand-up:before{content:"\e129"}.factory-bootstrap-461 .glyphicon-hand-down:before{content:"\e130"}.factory-bootstrap-461 .glyphicon-circle-arrow-right:before{content:"\e131"}.factory-bootstrap-461 .glyphicon-circle-arrow-left:before{content:"\e132"}.factory-bootstrap-461 .glyphicon-circle-arrow-up:before{content:"\e133"}.factory-bootstrap-461 .glyphicon-circle-arrow-down:before{content:"\e134"}.factory-bootstrap-461 .glyphicon-globe:before{content:"\e135"}.factory-bootstrap-461 .glyphicon-wrench:before{content:"\e136"}.factory-bootstrap-461 .glyphicon-tasks:before{content:"\e137"}.factory-bootstrap-461 .glyphicon-filter:before{content:"\e138"}.factory-bootstrap-461 .glyphicon-briefcase:before{content:"\e139"}.factory-bootstrap-461 .glyphicon-fullscreen:before{content:"\e140"}.factory-bootstrap-461 .glyphicon-dashboard:before{content:"\e141"}.factory-bootstrap-461 .glyphicon-paperclip:before{content:"\e142"}.factory-bootstrap-461 .glyphicon-heart-empty:before{content:"\e143"}.factory-bootstrap-461 .glyphicon-link:before{content:"\e144"}.factory-bootstrap-461 .glyphicon-phone:before{content:"\e145"}.factory-bootstrap-461 .glyphicon-pushpin:before{content:"\e146"}.factory-bootstrap-461 .glyphicon-usd:before{content:"\e148"}.factory-bootstrap-461 .glyphicon-gbp:before{content:"\e149"}.factory-bootstrap-461 .glyphicon-sort:before{content:"\e150"}.factory-bootstrap-461 .glyphicon-sort-by-alphabet:before{content:"\e151"}.factory-bootstrap-461 .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.factory-bootstrap-461 .glyphicon-sort-by-order:before{content:"\e153"}.factory-bootstrap-461 .glyphicon-sort-by-order-alt:before{content:"\e154"}.factory-bootstrap-461 .glyphicon-sort-by-attributes:before{content:"\e155"}.factory-bootstrap-461 .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.factory-bootstrap-461 .glyphicon-unchecked:before{content:"\e157"}.factory-bootstrap-461 .glyphicon-expand:before{content:"\e158"}.factory-bootstrap-461 .glyphicon-collapse-down:before{content:"\e159"}.factory-bootstrap-461 .glyphicon-collapse-up:before{content:"\e160"}.factory-bootstrap-461 .glyphicon-log-in:before{content:"\e161"}.factory-bootstrap-461 .glyphicon-flash:before{content:"\e162"}.factory-bootstrap-461 .glyphicon-log-out:before{content:"\e163"}.factory-bootstrap-461 .glyphicon-new-window:before{content:"\e164"}.factory-bootstrap-461 .glyphicon-record:before{content:"\e165"}.factory-bootstrap-461 .glyphicon-save:before{content:"\e166"}.factory-bootstrap-461 .glyphicon-open:before{content:"\e167"}.factory-bootstrap-461 .glyphicon-saved:before{content:"\e168"}.factory-bootstrap-461 .glyphicon-import:before{content:"\e169"}.factory-bootstrap-461 .glyphicon-export:before{content:"\e170"}.factory-bootstrap-461 .glyphicon-send:before{content:"\e171"}.factory-bootstrap-461 .glyphicon-floppy-disk:before{content:"\e172"}.factory-bootstrap-461 .glyphicon-floppy-saved:before{content:"\e173"}.factory-bootstrap-461 .glyphicon-floppy-remove:before{content:"\e174"}.factory-bootstrap-461 .glyphicon-floppy-save:before{content:"\e175"}.factory-bootstrap-461 .glyphicon-floppy-open:before{content:"\e176"}.factory-bootstrap-461 .glyphicon-credit-card:before{content:"\e177"}.factory-bootstrap-461 .glyphicon-transfer:before{content:"\e178"}.factory-bootstrap-461 .glyphicon-cutlery:before{content:"\e179"}.factory-bootstrap-461 .glyphicon-header:before{content:"\e180"}.factory-bootstrap-461 .glyphicon-compressed:before{content:"\e181"}.factory-bootstrap-461 .glyphicon-earphone:before{content:"\e182"}.factory-bootstrap-461 .glyphicon-phone-alt:before{content:"\e183"}.factory-bootstrap-461 .glyphicon-tower:before{content:"\e184"}.factory-bootstrap-461 .glyphicon-stats:before{content:"\e185"}.factory-bootstrap-461 .glyphicon-sd-video:before{content:"\e186"}.factory-bootstrap-461 .glyphicon-hd-video:before{content:"\e187"}.factory-bootstrap-461 .glyphicon-subtitles:before{content:"\e188"}.factory-bootstrap-461 .glyphicon-sound-stereo:before{content:"\e189"}.factory-bootstrap-461 .glyphicon-sound-dolby:before{content:"\e190"}.factory-bootstrap-461 .glyphicon-sound-5-1:before{content:"\e191"}.factory-bootstrap-461 .glyphicon-sound-6-1:before{content:"\e192"}.factory-bootstrap-461 .glyphicon-sound-7-1:before{content:"\e193"}.factory-bootstrap-461 .glyphicon-copyright-mark:before{content:"\e194"}.factory-bootstrap-461 .glyphicon-registration-mark:before{content:"\e195"}.factory-bootstrap-461 .glyphicon-cloud-download:before{content:"\e197"}.factory-bootstrap-461 .glyphicon-cloud-upload:before{content:"\e198"}.factory-bootstrap-461 .glyphicon-tree-conifer:before{content:"\e199"}.factory-bootstrap-461 .glyphicon-tree-deciduous:before{content:"\e200"}.factory-bootstrap-461 .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-461 .dropdown{position:relative}.factory-bootstrap-461 .dropdown-toggle:focus{outline:0}.factory-bootstrap-461 .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-461 .dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-461 .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-461 .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-461 .dropdown-menu>li>a:focus,.factory-bootstrap-461 .dropdown-menu>li>a:hover{color:#262626;text-decoration:none}.factory-bootstrap-461 .dropdown-menu>.active>a,.factory-bootstrap-461 .dropdown-menu>.active>a:focus,.factory-bootstrap-461 .dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0}.factory-bootstrap-461 .dropdown-menu>.disabled>a,.factory-bootstrap-461 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-461 .dropdown-menu>.disabled>a:hover{color:#999}.factory-bootstrap-461 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-461 .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-461 .open>.dropdown-menu{display:block}.factory-bootstrap-461 .open>a{outline:0}.factory-bootstrap-461 .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.factory-bootstrap-461 .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.factory-bootstrap-461 .pull-right>.dropdown-menu{right:0;left:auto}.factory-bootstrap-461 .dropup .caret,.factory-bootstrap-461 .navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.factory-bootstrap-461 .dropup .dropdown-menu,.factory-bootstrap-461 .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-461 .btn-group,.factory-bootstrap-461 .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.factory-bootstrap-461 .btn-group-vertical>.btn,.factory-bootstrap-461 .btn-group>.btn{position:relative;float:left}.factory-bootstrap-461 .btn-group-vertical>.btn.active,.factory-bootstrap-461 .btn-group-vertical>.btn:active,.factory-bootstrap-461 .btn-group-vertical>.btn:focus,.factory-bootstrap-461 .btn-group-vertical>.btn:hover,.factory-bootstrap-461 .btn-group>.btn.active,.factory-bootstrap-461 .btn-group>.btn:active,.factory-bootstrap-461 .btn-group>.btn:focus,.factory-bootstrap-461 .btn-group>.btn:hover{z-index:2}.factory-bootstrap-461 .btn-group-vertical>.btn:focus,.factory-bootstrap-461 .btn-group>.btn:focus{outline:0}.factory-bootstrap-461 .btn-group .btn+.btn,.factory-bootstrap-461 .btn-group .btn+.btn-group,.factory-bootstrap-461 .btn-group .btn-group+.btn,.factory-bootstrap-461 .btn-group .btn-group+.btn-group{margin-left:-1px}.factory-bootstrap-461 .btn-toolbar:after,.factory-bootstrap-461 .btn-toolbar:before{display:table;content:" "}.factory-bootstrap-461 .btn-toolbar:after{clear:both}.factory-bootstrap-461 .btn-toolbar .btn-group{float:left}.factory-bootstrap-461 .btn-toolbar>.btn+.btn,.factory-bootstrap-461 .btn-toolbar>.btn+.btn-group,.factory-bootstrap-461 .btn-toolbar>.btn-group+.btn,.factory-bootstrap-461 .btn-toolbar>.btn-group+.btn-group{margin-left:5px}.factory-bootstrap-461 .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.factory-bootstrap-461 .btn-group>.btn:first-child{margin-left:0}.factory-bootstrap-461 .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-461 .btn-group>.btn:last-child:not(:first-child),.factory-bootstrap-461 .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-461 .btn-group>.btn-group{float:left}.factory-bootstrap-461 .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-461 .btn-group>.btn-group:first-child>.btn:last-child,.factory-bootstrap-461 .btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-461 .btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-461 .btn-group .dropdown-toggle:active,.factory-bootstrap-461 .btn-group.open .dropdown-toggle{outline:0}.factory-bootstrap-461 .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-461 .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-461 .btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-461 .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.factory-bootstrap-461 .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.factory-bootstrap-461 .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-461 .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-461 .btn-group{border:4px solid #f9f9f9;border-radius:4px}.factory-bootstrap-461 .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-461 .btn .caret{margin-left:0}.factory-bootstrap-461 .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.factory-bootstrap-461 .dropup .btn-lg .caret{border-width:0 5px 5px}.factory-bootstrap-461 .btn-group-vertical>.btn,.factory-bootstrap-461 .btn-group-vertical>.btn-group,.factory-bootstrap-461 .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.factory-bootstrap-461 .btn-group-vertical>.btn-group:after,.factory-bootstrap-461 .btn-group-vertical>.btn-group:before{display:table;content:" "}.factory-bootstrap-461 .btn-group-vertical>.btn-group:after{clear:both}.factory-bootstrap-461 .btn-group-vertical>.btn-group>.btn{float:none}.factory-bootstrap-461 .btn-group-vertical>.btn+.btn,.factory-bootstrap-461 .btn-group-vertical>.btn+.btn-group,.factory-bootstrap-461 .btn-group-vertical>.btn-group+.btn,.factory-bootstrap-461 .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.factory-bootstrap-461 .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-461 .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-461 .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-461 .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-461 .btn-group-vertical>.btn-group:first-child>.btn:last-child,.factory-bootstrap-461 .btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-461 .btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-461 .btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.factory-bootstrap-461 .btn-group-justified>.btn,.factory-bootstrap-461 .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.factory-bootstrap-461 .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-461 .input-group{position:relative;display:table;border-collapse:separate}.factory-bootstrap-461 .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.factory-bootstrap-461 .input-group .form-control{width:100%;margin-bottom:0}.factory-bootstrap-461 .input-group-lg>.form-control,.factory-bootstrap-461 .input-group-lg>.input-group-addon,.factory-bootstrap-461 .input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-461 select.input-group-lg>.form-control,.factory-bootstrap-461 select.input-group-lg>.input-group-addon,.factory-bootstrap-461 select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.factory-bootstrap-461 textarea.input-group-lg>.form-control,.factory-bootstrap-461 textarea.input-group-lg>.input-group-addon,.factory-bootstrap-461 textarea.input-group-lg>.input-group-btn>.btn{height:auto}.factory-bootstrap-461 .input-group-sm>.form-control,.factory-bootstrap-461 .input-group-sm>.input-group-addon,.factory-bootstrap-461 .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-461 select.input-group-sm>.form-control,.factory-bootstrap-461 select.input-group-sm>.input-group-addon,.factory-bootstrap-461 select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.factory-bootstrap-461 textarea.input-group-sm>.form-control,.factory-bootstrap-461 textarea.input-group-sm>.input-group-addon,.factory-bootstrap-461 textarea.input-group-sm>.input-group-btn>.btn{height:auto}.factory-bootstrap-461 .input-group .form-control,.factory-bootstrap-461 .input-group-addon,.factory-bootstrap-461 .input-group-btn{display:table-cell}.factory-bootstrap-461 .input-group .form-control:not(:first-child):not(:last-child),.factory-bootstrap-461 .input-group-addon:not(:first-child):not(:last-child),.factory-bootstrap-461 .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-461 .input-group-addon,.factory-bootstrap-461 .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.factory-bootstrap-461 .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-461 .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.factory-bootstrap-461 .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.factory-bootstrap-461 .input-group-addon input[type=checkbox],.factory-bootstrap-461 .input-group-addon input[type=radio]{margin-top:0}.factory-bootstrap-461 .input-group .form-control:first-child,.factory-bootstrap-461 .input-group-addon:first-child,.factory-bootstrap-461 .input-group-btn:first-child>.btn,.factory-bootstrap-461 .input-group-btn:first-child>.dropdown-toggle,.factory-bootstrap-461 .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-461 .input-group-addon:first-child{border-right:0}.factory-bootstrap-461 .input-group .form-control:last-child,.factory-bootstrap-461 .input-group-addon:last-child,.factory-bootstrap-461 .input-group-btn:first-child>.btn:not(:first-child),.factory-bootstrap-461 .input-group-btn:last-child>.btn,.factory-bootstrap-461 .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-461 .input-group-addon:last-child{border-left:0}.factory-bootstrap-461 .input-group-btn{position:relative;white-space:nowrap}.factory-bootstrap-461 .input-group-btn:first-child>.btn{margin-right:-1px}.factory-bootstrap-461 .input-group-btn:last-child>.btn{margin-left:-1px}.factory-bootstrap-461 .input-group-btn>.btn{position:relative}.factory-bootstrap-461 .input-group-btn>.btn+.btn{margin-left:-4px}.factory-bootstrap-461 .input-group-btn>.btn:active,.factory-bootstrap-461 .input-group-btn>.btn:hover{z-index:2}.factory-bootstrap-461 .nav{padding-left:0;margin-bottom:0;list-style:none}.factory-bootstrap-461 .nav:after,.factory-bootstrap-461 .nav:before{display:table;content:" "}.factory-bootstrap-461 .nav:after{clear:both}.factory-bootstrap-461 .nav>li{position:relative;display:block}.factory-bootstrap-461 .nav>li>a{position:relative;display:block;padding:10px 15px}.factory-bootstrap-461 .nav>li>a:focus,.factory-bootstrap-461 .nav>li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-461 .nav>li.disabled>a{color:#999}.factory-bootstrap-461 .nav>li.disabled>a:focus,.factory-bootstrap-461 .nav>li.disabled>a:hover{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.factory-bootstrap-461 .nav .open>a,.factory-bootstrap-461 .nav .open>a:focus,.factory-bootstrap-461 .nav .open>a:hover{background-color:#eee;border-color:#428bca}.factory-bootstrap-461 .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-461 .nav>li>a>img{max-width:none}.factory-bootstrap-461 .nav-tabs{border-bottom:1px solid #ddd}.factory-bootstrap-461 .nav-tabs>li{float:left;margin-bottom:-1px}.factory-bootstrap-461 .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.factory-bootstrap-461 .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.factory-bootstrap-461 .nav-tabs>li.active>a,.factory-bootstrap-461 .nav-tabs>li.active>a:focus,.factory-bootstrap-461 .nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.factory-bootstrap-461 .nav-tabs.nav-justified{width:100%;border-bottom:0}.factory-bootstrap-461 .nav-tabs.nav-justified>li{float:none}.factory-bootstrap-461 .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-461 .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-461 .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-461 .nav-tabs.nav-justified>.active>a,.factory-bootstrap-461 .nav-tabs.nav-justified>.active>a:focus,.factory-bootstrap-461 .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-461 .nav-pills>li{float:left}.factory-bootstrap-461 .nav-pills>li>a{border-radius:4px}.factory-bootstrap-461 .nav-pills>li+li{margin-left:2px}.factory-bootstrap-461 .nav-pills>li.active>a,.factory-bootstrap-461 .nav-pills>li.active>a:focus,.factory-bootstrap-461 .nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.factory-bootstrap-461 .nav-stacked>li{float:none}.factory-bootstrap-461 .nav-stacked>li+li{margin-top:2px;margin-left:0}.factory-bootstrap-461 .nav-justified{width:100%}.factory-bootstrap-461 .nav-justified>li{float:none}.factory-bootstrap-461 .nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-461 .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-461 .nav-tabs-justified{border-bottom:0}.factory-bootstrap-461 .nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-461 .nav-tabs-justified>.active>a,.factory-bootstrap-461 .nav-tabs-justified>.active>a:focus,.factory-bootstrap-461 .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-461 .tab-content>.tab-pane{display:none}.factory-bootstrap-461 .tab-content>.active{display:block}.factory-bootstrap-461 .nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-461 .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.factory-bootstrap-461 .navbar:after,.factory-bootstrap-461 .navbar:before{display:table;content:" "}.factory-bootstrap-461 .navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.factory-bootstrap-461 .navbar-header:after,.factory-bootstrap-461 .navbar-header:before{display:table;content:" "}.factory-bootstrap-461 .navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.factory-bootstrap-461 .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-461 .navbar-collapse:after,.factory-bootstrap-461 .navbar-collapse:before{display:table;content:" "}.factory-bootstrap-461 .navbar-collapse:after{clear:both}.factory-bootstrap-461 .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-461 .container>.navbar-collapse,.factory-bootstrap-461 .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-461 .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.factory-bootstrap-461 .navbar-fixed-bottom,.factory-bootstrap-461 .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-461 .navbar-fixed-top{top:0;border-width:0 0 1px}.factory-bootstrap-461 .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.factory-bootstrap-461 .navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px}.factory-bootstrap-461 .navbar-brand:focus,.factory-bootstrap-461 .navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.factory-bootstrap-461 .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-461 .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.factory-bootstrap-461 .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.factory-bootstrap-461 .navbar-nav{margin:7.5px -15px}.factory-bootstrap-461 .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-461 .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-461 .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-461 .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-461 .navbar-nav.pull-right>li>.dropdown-menu,.factory-bootstrap-461 .navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-461 .navbar-btn{margin-top:8px;margin-bottom:8px}.factory-bootstrap-461 .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.factory-bootstrap-461 .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.factory-bootstrap-461 .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-461 .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.factory-bootstrap-461 .navbar-default .navbar-brand{color:#777}.factory-bootstrap-461 .navbar-default .navbar-brand:focus,.factory-bootstrap-461 .navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.factory-bootstrap-461 .navbar-default .navbar-nav>li>a,.factory-bootstrap-461 .navbar-default .navbar-text{color:#777}.factory-bootstrap-461 .navbar-default .navbar-nav>li>a:focus,.factory-bootstrap-461 .navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.factory-bootstrap-461 .navbar-default .navbar-nav>.active>a,.factory-bootstrap-461 .navbar-default .navbar-nav>.active>a:focus,.factory-bootstrap-461 .navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.factory-bootstrap-461 .navbar-default .navbar-nav>.disabled>a,.factory-bootstrap-461 .navbar-default .navbar-nav>.disabled>a:focus,.factory-bootstrap-461 .navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.factory-bootstrap-461 .navbar-default .navbar-toggle{border-color:#ddd}.factory-bootstrap-461 .navbar-default .navbar-toggle:focus,.factory-bootstrap-461 .navbar-default .navbar-toggle:hover{background-color:#ddd}.factory-bootstrap-461 .navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.factory-bootstrap-461 .navbar-default .navbar-collapse,.factory-bootstrap-461 .navbar-default .navbar-form{border-color:#e7e7e7}.factory-bootstrap-461 .navbar-default .navbar-nav>.open>a,.factory-bootstrap-461 .navbar-default .navbar-nav>.open>a:focus,.factory-bootstrap-461 .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-461 .navbar-default .navbar-link{color:#777}.factory-bootstrap-461 .navbar-default .navbar-link:hover{color:#333}.factory-bootstrap-461 .navbar-inverse{background-color:#222;border-color:#080808}.factory-bootstrap-461 .navbar-inverse .navbar-brand{color:#999}.factory-bootstrap-461 .navbar-inverse .navbar-brand:focus,.factory-bootstrap-461 .navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.factory-bootstrap-461 .navbar-inverse .navbar-nav>li>a,.factory-bootstrap-461 .navbar-inverse .navbar-text{color:#999}.factory-bootstrap-461 .navbar-inverse .navbar-nav>li>a:focus,.factory-bootstrap-461 .navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.factory-bootstrap-461 .navbar-inverse .navbar-nav>.active>a,.factory-bootstrap-461 .navbar-inverse .navbar-nav>.active>a:focus,.factory-bootstrap-461 .navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.factory-bootstrap-461 .navbar-inverse .navbar-nav>.disabled>a,.factory-bootstrap-461 .navbar-inverse .navbar-nav>.disabled>a:focus,.factory-bootstrap-461 .navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.factory-bootstrap-461 .navbar-inverse .navbar-toggle{border-color:#333}.factory-bootstrap-461 .navbar-inverse .navbar-toggle:focus,.factory-bootstrap-461 .navbar-inverse .navbar-toggle:hover{background-color:#333}.factory-bootstrap-461 .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.factory-bootstrap-461 .navbar-inverse .navbar-collapse,.factory-bootstrap-461 .navbar-inverse .navbar-form{border-color:#101010}.factory-bootstrap-461 .navbar-inverse .navbar-nav>.open>a,.factory-bootstrap-461 .navbar-inverse .navbar-nav>.open>a:focus,.factory-bootstrap-461 .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-461 .navbar-inverse .navbar-link{color:#999}.factory-bootstrap-461 .navbar-inverse .navbar-link:hover{color:#fff}.factory-bootstrap-461 .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.factory-bootstrap-461 .breadcrumb>li{display:inline-block}.factory-bootstrap-461 .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.factory-bootstrap-461 .breadcrumb>.active{color:#999}.factory-bootstrap-461 .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.factory-bootstrap-461 .pagination>li{display:inline}.factory-bootstrap-461 .pagination>li>a,.factory-bootstrap-461 .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-461 .pagination>li:first-child>a,.factory-bootstrap-461 .pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.factory-bootstrap-461 .pagination>li:last-child>a,.factory-bootstrap-461 .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.factory-bootstrap-461 .pagination>li>a:focus,.factory-bootstrap-461 .pagination>li>a:hover,.factory-bootstrap-461 .pagination>li>span:focus,.factory-bootstrap-461 .pagination>li>span:hover{background-color:#eee}.factory-bootstrap-461 .pagination>.active>a,.factory-bootstrap-461 .pagination>.active>a:focus,.factory-bootstrap-461 .pagination>.active>a:hover,.factory-bootstrap-461 .pagination>.active>span,.factory-bootstrap-461 .pagination>.active>span:focus,.factory-bootstrap-461 .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#1e8cbe;border-color:#0074a2}.factory-bootstrap-461 .pagination>.disabled>a,.factory-bootstrap-461 .pagination>.disabled>a:focus,.factory-bootstrap-461 .pagination>.disabled>a:hover,.factory-bootstrap-461 .pagination>.disabled>span,.factory-bootstrap-461 .pagination>.disabled>span:focus,.factory-bootstrap-461 .pagination>.disabled>span:hover{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.factory-bootstrap-461 .pagination-lg>li>a,.factory-bootstrap-461 .pagination-lg>li>span{padding:10px 16px;font-size:18px}.factory-bootstrap-461 .pagination-lg>li:first-child>a,.factory-bootstrap-461 .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.factory-bootstrap-461 .pagination-lg>li:last-child>a,.factory-bootstrap-461 .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.factory-bootstrap-461 .pagination-sm>li>a,.factory-bootstrap-461 .pagination-sm>li>span{padding:5px 10px;font-size:12px}.factory-bootstrap-461 .pagination-sm>li:first-child>a,.factory-bootstrap-461 .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.factory-bootstrap-461 .pagination-sm>li:last-child>a,.factory-bootstrap-461 .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.factory-bootstrap-461 .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.factory-bootstrap-461 .pager:after,.factory-bootstrap-461 .pager:before{display:table;content:" "}.factory-bootstrap-461 .pager:after{clear:both}.factory-bootstrap-461 .pager li{display:inline}.factory-bootstrap-461 .pager li>a,.factory-bootstrap-461 .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.factory-bootstrap-461 .pager li>a:focus,.factory-bootstrap-461 .pager li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-461 .pager .next>a,.factory-bootstrap-461 .pager .next>span{float:right}.factory-bootstrap-461 .pager .previous>a,.factory-bootstrap-461 .pager .previous>span{float:left}.factory-bootstrap-461 .pager .disabled>a,.factory-bootstrap-461 .pager .disabled>a:focus,.factory-bootstrap-461 .pager .disabled>a:hover,.factory-bootstrap-461 .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.factory-bootstrap-461 .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-461 .label[href]:focus,.factory-bootstrap-461 .label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-461 .label:empty{display:none}.factory-bootstrap-461 .btn .label{position:relative;top:-1px}.factory-bootstrap-461 .label-default{background-color:#999}.factory-bootstrap-461 .label-default[href]:focus,.factory-bootstrap-461 .label-default[href]:hover{background-color:gray}.factory-bootstrap-461 .label-primary{background-color:#428bca}.factory-bootstrap-461 .label-primary[href]:focus,.factory-bootstrap-461 .label-primary[href]:hover{background-color:#3071a9}.factory-bootstrap-461 .label-success{background-color:#5cb85c}.factory-bootstrap-461 .label-success[href]:focus,.factory-bootstrap-461 .label-success[href]:hover{background-color:#449d44}.factory-bootstrap-461 .label-info{background-color:#5bc0de}.factory-bootstrap-461 .label-info[href]:focus,.factory-bootstrap-461 .label-info[href]:hover{background-color:#31b0d5}.factory-bootstrap-461 .label-warning{background-color:#f0ad4e}.factory-bootstrap-461 .label-warning[href]:focus,.factory-bootstrap-461 .label-warning[href]:hover{background-color:#ec971f}.factory-bootstrap-461 .label-danger{background-color:#d9534f}.factory-bootstrap-461 .label-danger[href]:focus,.factory-bootstrap-461 .label-danger[href]:hover{background-color:#c9302c}.factory-bootstrap-461 .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-461 .badge:empty{display:none}.factory-bootstrap-461 .btn .badge{position:relative;top:-1px}.factory-bootstrap-461 a.badge:focus,.factory-bootstrap-461 a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-461 .nav-pills>.active>a>.badge,.factory-bootstrap-461 a.list-group-item.active>.badge{color:#428bca;background-color:#fff}.factory-bootstrap-461 .nav-pills>li>a>.badge{margin-left:3px}.factory-bootstrap-461 .jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.factory-bootstrap-461 .jumbotron .h1,.factory-bootstrap-461 .jumbotron h1{line-height:1;color:inherit}.factory-bootstrap-461 .jumbotron p{line-height:1.4}.factory-bootstrap-461 .container .jumbotron{border-radius:6px}.factory-bootstrap-461 .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-461 .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-461 .thumbnail a>img,.factory-bootstrap-461 .thumbnail>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}.factory-bootstrap-461 a.thumbnail.active,.factory-bootstrap-461 a.thumbnail:focus,.factory-bootstrap-461 a.thumbnail:hover{border-color:#428bca}.factory-bootstrap-461 .thumbnail .caption{padding:9px;color:#333}.factory-bootstrap-461 .alert{border:1px solid transparent;border-radius:4px}.factory-bootstrap-461 .alert h4{margin-top:0;color:inherit}.factory-bootstrap-461 .alert .alert-link{font-weight:700}.factory-bootstrap-461 .alert>p,.factory-bootstrap-461 .alert>ul{margin-bottom:0}.factory-bootstrap-461 .alert>p+p{margin-top:5px}.factory-bootstrap-461 .alert-dismissable{padding-right:35px}.factory-bootstrap-461 .alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.factory-bootstrap-461 .alert-info{color:#31708f;background-color:#d9edf7}.factory-bootstrap-461 .alert-info hr{border-top-color:#a6e1ec}.factory-bootstrap-461 .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-461 .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-461 .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-461 .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-461 .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.factory-bootstrap-461 .progress-bar-success{background-color:#5cb85c}.factory-bootstrap-461 .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-461 .progress-bar-info{background-color:#5bc0de}.factory-bootstrap-461 .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-461 .progress-bar-warning{background-color:#f0ad4e}.factory-bootstrap-461 .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-461 .progress-bar-danger{background-color:#d9534f}.factory-bootstrap-461 .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-461 .media,.factory-bootstrap-461 .media-body{overflow:hidden;zoom:1}.factory-bootstrap-461 .media,.factory-bootstrap-461 .media .media{margin-top:15px}.factory-bootstrap-461 .media:first-child{margin-top:0}.factory-bootstrap-461 .media-object{display:block}.factory-bootstrap-461 .media-heading{margin:0 0 5px}.factory-bootstrap-461 .media>.pull-left{margin-right:10px}.factory-bootstrap-461 .media>.pull-right{margin-left:10px}.factory-bootstrap-461 .media-list{padding-left:0;list-style:none}.factory-bootstrap-461 .list-group{padding-left:0;margin-bottom:20px}.factory-bootstrap-461 .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-461 .list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.factory-bootstrap-461 .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.factory-bootstrap-461 .list-group-item>.badge{float:right}.factory-bootstrap-461 .list-group-item>.badge+.badge{margin-right:5px}.factory-bootstrap-461 a.list-group-item{color:#555}.factory-bootstrap-461 a.list-group-item .list-group-item-heading{color:#333}.factory-bootstrap-461 a.list-group-item:focus,.factory-bootstrap-461 a.list-group-item:hover{text-decoration:none;background-color:#f5f5f5}.factory-bootstrap-461 a.list-group-item.active,.factory-bootstrap-461 a.list-group-item.active:focus,.factory-bootstrap-461 a.list-group-item.active:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-461 a.list-group-item.active .list-group-item-heading,.factory-bootstrap-461 a.list-group-item.active:focus .list-group-item-heading,.factory-bootstrap-461 a.list-group-item.active:hover .list-group-item-heading{color:inherit}.factory-bootstrap-461 a.list-group-item.active .list-group-item-text,.factory-bootstrap-461 a.list-group-item.active:focus .list-group-item-text,.factory-bootstrap-461 a.list-group-item.active:hover .list-group-item-text{color:#e1edf7}.factory-bootstrap-461 .list-group-item-heading{margin-top:0;margin-bottom:5px}.factory-bootstrap-461 .list-group-item-text{margin-bottom:0;line-height:1.3}.factory-bootstrap-461 .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px}.factory-bootstrap-461 .panel-body{padding:15px}.factory-bootstrap-461 .panel-body:after,.factory-bootstrap-461 .panel-body:before{display:table;content:" "}.factory-bootstrap-461 .panel-body:after{clear:both}.factory-bootstrap-461 .panel>.list-group{margin-bottom:0}.factory-bootstrap-461 .panel>.list-group .list-group-item{border-width:1px 0}.factory-bootstrap-461 .panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-461 .panel>.list-group .list-group-item:last-child{border-bottom:0}.factory-bootstrap-461 .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.factory-bootstrap-461 .panel>.table,.factory-bootstrap-461 .panel>.table-responsive>.table{margin-bottom:0}.factory-bootstrap-461 .panel>.panel-body+.table,.factory-bootstrap-461 .panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.factory-bootstrap-461 .panel>.table>tbody:first-child td,.factory-bootstrap-461 .panel>.table>tbody:first-child th{border-top:0}.factory-bootstrap-461 .panel>.table-bordered,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered{border:0}.factory-bootstrap-461 .panel>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-461 .panel>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-461 .panel>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-461 .panel>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-461 .panel>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-461 .panel>.table-bordered>thead>tr>th:first-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.factory-bootstrap-461 .panel>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-461 .panel>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-461 .panel>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-461 .panel>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-461 .panel>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-461 .panel>.table-bordered>thead>tr>th:last-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.factory-bootstrap-461 .panel>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-461 .panel>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-461 .panel>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-461 .panel>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-461 .panel>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-461 .panel>.table-bordered>thead>tr:last-child>th,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-461 .panel>.table-responsive>.table-bordered>thead>tr:last-child>th{border-bottom:0}.factory-bootstrap-461 .panel>.table-responsive{margin-bottom:0;border:0}.factory-bootstrap-461 .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.factory-bootstrap-461 .panel-heading>.dropdown .dropdown-toggle{color:inherit}.factory-bootstrap-461 .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.factory-bootstrap-461 .panel-title>a{color:inherit}.factory-bootstrap-461 .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-461 .panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.factory-bootstrap-461 .panel-group .panel+.panel{margin-top:5px}.factory-bootstrap-461 .panel-group .panel-heading{border-bottom:0}.factory-bootstrap-461 .panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.factory-bootstrap-461 .panel-group .panel-footer{border-top:0}.factory-bootstrap-461 .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.factory-bootstrap-461 .panel-default{border-color:#ddd}.factory-bootstrap-461 .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.factory-bootstrap-461 .panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.factory-bootstrap-461 .panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.factory-bootstrap-461 .panel-primary{border-color:#428bca}.factory-bootstrap-461 .panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-461 .panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.factory-bootstrap-461 .panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.factory-bootstrap-461 .panel-success{border-color:#d6e9c6}.factory-bootstrap-461 .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.factory-bootstrap-461 .panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.factory-bootstrap-461 .panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.factory-bootstrap-461 .panel-warning{border-color:#faebcc}.factory-bootstrap-461 .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.factory-bootstrap-461 .panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.factory-bootstrap-461 .panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.factory-bootstrap-461 .panel-danger{border-color:#ebccd1}.factory-bootstrap-461 .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.factory-bootstrap-461 .panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.factory-bootstrap-461 .panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.factory-bootstrap-461 .panel-info{border-color:#bce8f1}.factory-bootstrap-461 .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.factory-bootstrap-461 .panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.factory-bootstrap-461 .panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.factory-bootstrap-461 .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px}.factory-bootstrap-461 .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.factory-bootstrap-461 .well-lg{padding:24px;border-radius:6px}.factory-bootstrap-461 .well-sm{padding:9px;border-radius:3px}.factory-bootstrap-461 .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-461 .alert .close{position:relative;top:-8px;right:-7px}.factory-bootstrap-461 .close:focus,.factory-bootstrap-461 .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-461 button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.factory-bootstrap-461 .modal-open{overflow:hidden}.factory-bootstrap-461 .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-461 .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-461 .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.factory-bootstrap-461 .modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.factory-bootstrap-461 .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-461 .modal-backdrop,.factory-bootstrap-461-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.factory-bootstrap-461 .modal-backdrop.fade,.factory-bootstrap-461-modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.factory-bootstrap-461 .modal-backdrop.in,.factory-bootstrap-461-modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-461 .modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.factory-bootstrap-461 .modal-header .close{margin-top:-2px}.factory-bootstrap-461 .modal-title{margin:0;line-height:1.428571429}.factory-bootstrap-461 .modal-body{position:relative;padding:20px;max-height:none}.factory-bootstrap-461 .modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.factory-bootstrap-461 .modal-footer:after,.factory-bootstrap-461 .modal-footer:before{display:table;content:" "}.factory-bootstrap-461 .modal-footer:after{clear:both}.factory-bootstrap-461 .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.factory-bootstrap-461 .modal-footer .btn-group .btn+.btn{margin-left:-1px}.factory-bootstrap-461 .modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.factory-bootstrap-461 .modal-dialog{width:600px;margin:30px auto}.factory-bootstrap-461 .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-461 .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-461 .tooltip.in{opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-461 .tooltip.top{padding:5px 0;margin-top:-3px}.factory-bootstrap-461 .tooltip.right{padding:0 5px;margin-left:3px}.factory-bootstrap-461 .tooltip.bottom{padding:5px 0;margin-top:3px}.factory-bootstrap-461 .tooltip.left{padding:0 5px;margin-left:-3px}.factory-bootstrap-461 .tooltip-inner{width:400px;padding:15px 20px;color:#fff;text-align:left;text-decoration:none;background-color:#673ab7;border-radius:3px}.factory-bootstrap-461 .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-461 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-461 .tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-461 .tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-461 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#673ab7;border-width:5px 5px 5px 0}.factory-bootstrap-461 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#673ab7;border-width:5px 0 5px 5px}.factory-bootstrap-461 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-461 .tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-461 .tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-461 .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-461 .popover.top{margin-top:-10px}.factory-bootstrap-461 .popover.right{margin-left:10px}.factory-bootstrap-461 .popover.bottom{margin-top:10px}.factory-bootstrap-461 .popover.left{margin-left:-10px}.factory-bootstrap-461 .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-461 .popover-content{padding:9px 14px}.factory-bootstrap-461 .popover .arrow,.factory-bootstrap-461 .popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-461 .popover .arrow{border-width:11px}.factory-bootstrap-461 .popover .arrow:after{border-width:10px;content:""}.factory-bootstrap-461 .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-461 .popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.factory-bootstrap-461 .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-461 .popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.factory-bootstrap-461 .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-461 .popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.factory-bootstrap-461 .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-461 .popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.factory-bootstrap-461 .carousel{position:relative}.factory-bootstrap-461 .carousel-inner{position:relative;width:100%;overflow:hidden}.factory-bootstrap-461 .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.factory-bootstrap-461 .carousel-inner>.item>a>img,.factory-bootstrap-461 .carousel-inner>.item>img{display:block;height:auto;max-width:100%;line-height:1}.factory-bootstrap-461 .carousel-inner>.active,.factory-bootstrap-461 .carousel-inner>.next,.factory-bootstrap-461 .carousel-inner>.prev{display:block}.factory-bootstrap-461 .carousel-inner>.active{left:0}.factory-bootstrap-461 .carousel-inner>.next,.factory-bootstrap-461 .carousel-inner>.prev{position:absolute;top:0;width:100%}.factory-bootstrap-461 .carousel-inner>.next{left:100%}.factory-bootstrap-461 .carousel-inner>.prev{left:-100%}.factory-bootstrap-461 .carousel-inner>.next.left,.factory-bootstrap-461 .carousel-inner>.prev.right{left:0}.factory-bootstrap-461 .carousel-inner>.active.left{left:-100%}.factory-bootstrap-461 .carousel-inner>.active.right{left:100%}.factory-bootstrap-461 .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-461 .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-461 .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-461 .carousel-control:focus,.factory-bootstrap-461 .carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-461 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-461 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-461 .carousel-control .icon-next,.factory-bootstrap-461 .carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.factory-bootstrap-461 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-461 .carousel-control .icon-prev{left:50%}.factory-bootstrap-461 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-461 .carousel-control .icon-next{right:50%}.factory-bootstrap-461 .carousel-control .icon-next,.factory-bootstrap-461 .carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.factory-bootstrap-461 .carousel-control .icon-prev:before{content:'\2039'}.factory-bootstrap-461 .carousel-control .icon-next:before{content:'\203a'}.factory-bootstrap-461 .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-461 .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-461 .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.factory-bootstrap-461 .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-461 .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-461 .clearfix:after,.factory-bootstrap-461 .clearfix:before{display:table;content:" "}.factory-bootstrap-461 .clearfix:after{clear:both}.factory-bootstrap-461 .center-block{display:block;margin-right:auto;margin-left:auto}.factory-bootstrap-461 .pull-right{float:right!important}.factory-bootstrap-461 .pull-left{float:left!important}.factory-bootstrap-461 .hide{display:none!important}.factory-bootstrap-461 .show{display:block!important}.factory-bootstrap-461 .invisible{visibility:hidden}.factory-bootstrap-461 .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.factory-bootstrap-461 .hidden{display:none!important;visibility:hidden!important}.factory-bootstrap-461 .affix{position:fixed}@-ms-viewport{width:device-width}.factory-bootstrap-461 .visible-lg,.factory-bootstrap-461 .visible-md,.factory-bootstrap-461 .visible-sm,.factory-bootstrap-461 .visible-xs,.factory-bootstrap-461 td.visible-lg,.factory-bootstrap-461 td.visible-md,.factory-bootstrap-461 td.visible-sm,.factory-bootstrap-461 td.visible-xs,.factory-bootstrap-461 th.visible-lg,.factory-bootstrap-461 th.visible-md,.factory-bootstrap-461 th.visible-sm,.factory-bootstrap-461 th.visible-xs,.factory-bootstrap-461 tr.visible-lg,.factory-bootstrap-461 tr.visible-md,.factory-bootstrap-461 tr.visible-sm,.factory-bootstrap-461 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-461 .hidden-xs{display:block!important}.factory-bootstrap-461 table.hidden-xs{display:table}.factory-bootstrap-461 tr.hidden-xs{display:table-row!important}.factory-bootstrap-461 td.hidden-xs,.factory-bootstrap-461 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-461 .hidden-sm{display:block!important}.factory-bootstrap-461 table.hidden-sm{display:table}.factory-bootstrap-461 tr.hidden-sm{display:table-row!important}.factory-bootstrap-461 td.hidden-sm,.factory-bootstrap-461 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-461 .hidden-md{display:block!important}.factory-bootstrap-461 table.hidden-md{display:table}.factory-bootstrap-461 tr.hidden-md{display:table-row!important}.factory-bootstrap-461 td.hidden-md,.factory-bootstrap-461 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-461 .hidden-lg{display:block!important}.factory-bootstrap-461 table.hidden-lg{display:table}.factory-bootstrap-461 tr.hidden-lg{display:table-row!important}.factory-bootstrap-461 td.hidden-lg,.factory-bootstrap-461 th.hidden-lg{display:table-cell!important}@media (max-width:767px){.factory-bootstrap-461 .hidden-lg.hidden-xs,.factory-bootstrap-461 td.hidden-lg.hidden-xs,.factory-bootstrap-461 th.hidden-lg.hidden-xs,.factory-bootstrap-461 tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.factory-bootstrap-461 .hidden-lg.hidden-sm,.factory-bootstrap-461 td.hidden-lg.hidden-sm,.factory-bootstrap-461 th.hidden-lg.hidden-sm,.factory-bootstrap-461 tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.factory-bootstrap-461 .hidden-lg.hidden-md,.factory-bootstrap-461 td.hidden-lg.hidden-md,.factory-bootstrap-461 th.hidden-lg.hidden-md,.factory-bootstrap-461 tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1200px){.factory-bootstrap-461 .hidden-lg,.factory-bootstrap-461 td.hidden-lg,.factory-bootstrap-461 th.hidden-lg,.factory-bootstrap-461 tr.hidden-lg{display:none!important}}.factory-bootstrap-461 .visible-print,.factory-bootstrap-461 td.visible-print,.factory-bootstrap-461 th.visible-print,.factory-bootstrap-461 tr.visible-print{display:none!important}@media print{.factory-bootstrap-461 .visible-print{display:block!important}.factory-bootstrap-461 table.visible-print{display:table}.factory-bootstrap-461 tr.visible-print{display:table-row!important}.factory-bootstrap-461 td.visible-print,.factory-bootstrap-461 th.visible-print{display:table-cell!important}.factory-bootstrap-461 .hidden-print,.factory-bootstrap-461 td.hidden-print,.factory-bootstrap-461 th.hidden-print,.factory-bootstrap-461 tr.hidden-print{display:none!important}}.factory-bootstrap-461 .btn-danger,.factory-bootstrap-461 .btn-default,.factory-bootstrap-461 .btn-info,.factory-bootstrap-461 .btn-primary,.factory-bootstrap-461 .btn-success,.factory-bootstrap-461 .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-461 .btn-danger.active,.factory-bootstrap-461 .btn-danger:active,.factory-bootstrap-461 .btn-default.active,.factory-bootstrap-461 .btn-default:active,.factory-bootstrap-461 .btn-info.active,.factory-bootstrap-461 .btn-info:active,.factory-bootstrap-461 .btn-primary.active,.factory-bootstrap-461 .btn-primary:active,.factory-bootstrap-461 .btn-success.active,.factory-bootstrap-461 .btn-success:active,.factory-bootstrap-461 .btn-warning.active,.factory-bootstrap-461 .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-461 .btn.active,.factory-bootstrap-461 .btn:active{background-image:none}.factory-bootstrap-461 .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-461 .btn-default.active,.factory-bootstrap-461 .btn-default:active{background-color:#fff;border-color:#dbdbdb}.factory-bootstrap-461 .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-461 .btn-gold:focus,.factory-bootstrap-461 .btn-gold:hover{background:#fef0a1}.factory-bootstrap-461 .btn-gold.active,.factory-bootstrap-461 .btn-gold:active{background:#fef0a1;-webkit-box-shadow:inset 0 3px 8px 0 #f8ba36;box-shadow:inset 0 3px 8px 0 #f8ba36}.factory-bootstrap-461 .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-461 .btn-primary:focus,.factory-bootstrap-461 .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-461 .btn-primary.active,.factory-bootstrap-461 .btn-primary:active{background-color:#2d6ca2;border-color:#2b669a}.factory-bootstrap-461 .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-461 .btn-success:focus,.factory-bootstrap-461 .btn-success:hover{background-color:#419641;background-position:0 -15px}.factory-bootstrap-461 .btn-success.active,.factory-bootstrap-461 .btn-success:active{background-color:#419641;border-color:#3e8f3e}.factory-bootstrap-461 .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-461 .btn-warning:focus,.factory-bootstrap-461 .btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.factory-bootstrap-461 .btn-warning.active,.factory-bootstrap-461 .btn-warning:active{background-color:#eb9316;border-color:#e38d13}.factory-bootstrap-461 .btn-danger{color:#fff;background:#d9534f;border-color:#d43f3a}.factory-bootstrap-461 .btn-danger.active,.factory-bootstrap-461 .btn-danger:active,.factory-bootstrap-461 .btn-danger:focus,.factory-bootstrap-461 .btn-danger:hover,.factory-bootstrap-461 .open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.factory-bootstrap-461 .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-461 .btn-info:focus,.factory-bootstrap-461 .btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.factory-bootstrap-461 .btn-info.active,.factory-bootstrap-461 .btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.factory-bootstrap-461 .img-thumbnail,.factory-bootstrap-461 .thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-461 .dropdown-menu>li>a:focus,.factory-bootstrap-461 .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-461 .dropdown-menu>.active>a,.factory-bootstrap-461 .dropdown-menu>.active>a:focus,.factory-bootstrap-461 .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-461 .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-461 .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-461 .navbar-brand,.factory-bootstrap-461 .navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.factory-bootstrap-461 .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-461 .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-461 .navbar-inverse .navbar-brand,.factory-bootstrap-461 .navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-461 .navbar-fixed-bottom,.factory-bootstrap-461 .navbar-fixed-top,.factory-bootstrap-461 .navbar-static-top{border-radius:0}.factory-bootstrap-461 .alert{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-461 .alert .actions{padding-top:10px}.factory-bootstrap-461 .alert-success{color:#3c763d;background-color:#dff0d8;border-bottom:2px solid #c8e5bc}.factory-bootstrap-461 .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-461 .alert{text-shadow:none;box-shadow:none;margin:0;margin-top:10px;margin-bottom:10px;padding:10px}.factory-bootstrap-461 .alert-normal,.factory-bootstrap-461 .alert-warning{background:#fcf8e3;color:#8a6d3b;border:1px solid #b8823b}.factory-bootstrap-461 .alert-danger{background:#cf4944;color:#fff;border-bottom:2px solid #b23e3a}.factory-bootstrap-461 .alert-danger a:not(.btn),.factory-bootstrap-461 .alert-error a:not(.btn){color:#fff}.factory-bootstrap-461 .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-461 .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-461 .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-461 .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-461 .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-461 .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-461 .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-461 .list-group-item.active,.factory-bootstrap-461 .list-group-item.active:focus,.factory-bootstrap-461 .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-461 .panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-461 .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-461 .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-461 .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-461 .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-461 .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-461 .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-461 .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-461 .factory-after{margin-left:7px;display:inline-block}.factory-bootstrap-461 .factory-hidden{display:none}.factory-bootstrap-461 .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.datepicker.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
.datepicker{border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker.datepicker-rtl{direction:rtl}.datepicker.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0}.datepicker-dropdown:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-top:0;border-bottom-color:rgba(0,0,0,.2);position:absolute}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;border-top:0;position:absolute}.datepicker-dropdown.datepicker-orient-left:before{left:6px}.datepicker-dropdown.datepicker-orient-left:after{left:7px}.datepicker-dropdown.datepicker-orient-right:before{right:6px}.datepicker-dropdown.datepicker-orient-right:after{right:7px}.datepicker-dropdown.datepicker-orient-top:before{top:-7px}.datepicker-dropdown.datepicker-orient-top:after{top:-6px}.datepicker-dropdown.datepicker-orient-bottom:before{bottom:-7px;border-bottom:0;border-top:7px solid #999}.datepicker-dropdown.datepicker-orient-bottom:after{bottom:-6px;border-bottom:0;border-top:6px solid #fff}.datepicker>div{display:none}.datepicker.days .datepicker-days,.datepicker.months .datepicker-months,.datepicker.years .datepicker-years{display:block}.datepicker table{margin:0;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.datepicker table tr td,.datepicker table tr th{text-align:center;width:30px;height:30px;border-radius:4px;border:0}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.day.focused,.datepicker table tr td.day:hover{background:#eee;cursor:pointer}.datepicker table tr td.new,.datepicker table tr td.old{color:#999}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td.today,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today:hover{color:#000;background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:focus,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.disabled:hover:focus,.datepicker table tr td.today.disabled:hover:hover,.datepicker table tr td.today:active,.datepicker table tr td.today:focus,.datepicker table tr td.today:hover,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover:active,.datepicker table tr td.today:hover:focus,.datepicker table tr td.today:hover:hover,.open .dropdown-toggle.datepicker table tr td.today,.open .dropdown-toggle.datepicker table tr td.today.disabled,.open .dropdown-toggle.datepicker table tr td.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.today:hover{color:#000;background-color:#ffcd70;border-color:#f59e00}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today:active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover:active,.open .dropdown-toggle.datepicker table tr td.today,.open .dropdown-toggle.datepicker table tr td.today.disabled,.open .dropdown-toggle.datepicker table tr td.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.today:hover{background-image:none}.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled.disabled,.datepicker table tr td.today.disabled.disabled.active,.datepicker table tr td.today.disabled.disabled:active,.datepicker table tr td.today.disabled.disabled:focus,.datepicker table tr td.today.disabled.disabled:hover,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:focus,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover.disabled,.datepicker table tr td.today.disabled:hover.disabled.active,.datepicker table tr td.today.disabled:hover.disabled:active,.datepicker table tr td.today.disabled:hover.disabled:focus,.datepicker table tr td.today.disabled:hover.disabled:hover,.datepicker table tr td.today.disabled:hover[disabled],.datepicker table tr td.today.disabled:hover[disabled].active,.datepicker table tr td.today.disabled:hover[disabled]:active,.datepicker table tr td.today.disabled:hover[disabled]:focus,.datepicker table tr td.today.disabled:hover[disabled]:hover,.datepicker table tr td.today.disabled[disabled],.datepicker table tr td.today.disabled[disabled].active,.datepicker table tr td.today.disabled[disabled]:active,.datepicker table tr td.today.disabled[disabled]:focus,.datepicker table tr td.today.disabled[disabled]:hover,.datepicker table tr td.today:hover.disabled,.datepicker table tr td.today:hover.disabled.active,.datepicker table tr td.today:hover.disabled:active,.datepicker table tr td.today:hover.disabled:focus,.datepicker table tr td.today:hover.disabled:hover,.datepicker table tr td.today:hover[disabled],.datepicker table tr td.today:hover[disabled].active,.datepicker table tr td.today:hover[disabled]:active,.datepicker table tr td.today:hover[disabled]:focus,.datepicker table tr td.today:hover[disabled]:hover,.datepicker table tr td.today[disabled],.datepicker table tr td.today[disabled].active,.datepicker table tr td.today[disabled]:active,.datepicker table tr td.today[disabled]:focus,.datepicker table tr td.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.today,fieldset[disabled] .datepicker table tr td.today.active,fieldset[disabled] .datepicker table tr td.today.disabled,fieldset[disabled] .datepicker table tr td.today.disabled.active,fieldset[disabled] .datepicker table tr td.today.disabled:active,fieldset[disabled] .datepicker table tr td.today.disabled:focus,fieldset[disabled] .datepicker table tr td.today.disabled:hover,fieldset[disabled] .datepicker table tr td.today.disabled:hover.active,fieldset[disabled] .datepicker table tr td.today.disabled:hover:active,fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.today:active,fieldset[disabled] .datepicker table tr td.today:focus,fieldset[disabled] .datepicker table tr td.today:hover,fieldset[disabled] .datepicker table tr td.today:hover.active,fieldset[disabled] .datepicker table tr td.today:hover:active,fieldset[disabled] .datepicker table tr td.today:hover:focus,fieldset[disabled] .datepicker table tr td.today:hover:hover{background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today:hover:hover{color:#000}.datepicker table tr td.today.active:hover{color:#fff}.datepicker table tr td.range,.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range:hover{background:#eee;border-radius:0}.datepicker table tr td.range.today,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today:hover{color:#000;background-color:#f7ca77;border-color:#f1a417;border-radius:0}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:focus,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.disabled:hover:focus,.datepicker table tr td.range.today.disabled:hover:hover,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:focus,.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today:hover:focus,.datepicker table tr td.range.today:hover:hover,.open .dropdown-toggle.datepicker table tr td.range.today,.open .dropdown-toggle.datepicker table tr td.range.today.disabled,.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.range.today:hover{color:#000;background-color:#f4bb51;border-color:#bf800c}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover:active,.open .dropdown-toggle.datepicker table tr td.range.today,.open .dropdown-toggle.datepicker table tr td.range.today.disabled,.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.range.today:hover{background-image:none}.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled.disabled,.datepicker table tr td.range.today.disabled.disabled.active,.datepicker table tr td.range.today.disabled.disabled:active,.datepicker table tr td.range.today.disabled.disabled:focus,.datepicker table tr td.range.today.disabled.disabled:hover,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:focus,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover.disabled,.datepicker table tr td.range.today.disabled:hover.disabled.active,.datepicker table tr td.range.today.disabled:hover.disabled:active,.datepicker table tr td.range.today.disabled:hover.disabled:focus,.datepicker table tr td.range.today.disabled:hover.disabled:hover,.datepicker table tr td.range.today.disabled:hover[disabled],.datepicker table tr td.range.today.disabled:hover[disabled].active,.datepicker table tr td.range.today.disabled:hover[disabled]:active,.datepicker table tr td.range.today.disabled:hover[disabled]:focus,.datepicker table tr td.range.today.disabled:hover[disabled]:hover,.datepicker table tr td.range.today.disabled[disabled],.datepicker table tr td.range.today.disabled[disabled].active,.datepicker table tr td.range.today.disabled[disabled]:active,.datepicker table tr td.range.today.disabled[disabled]:focus,.datepicker table tr td.range.today.disabled[disabled]:hover,.datepicker table tr td.range.today:hover.disabled,.datepicker table tr td.range.today:hover.disabled.active,.datepicker table tr td.range.today:hover.disabled:active,.datepicker table tr td.range.today:hover.disabled:focus,.datepicker table tr td.range.today:hover.disabled:hover,.datepicker table tr td.range.today:hover[disabled],.datepicker table tr td.range.today:hover[disabled].active,.datepicker table tr td.range.today:hover[disabled]:active,.datepicker table tr td.range.today:hover[disabled]:focus,.datepicker table tr td.range.today:hover[disabled]:hover,.datepicker table tr td.range.today[disabled],.datepicker table tr td.range.today[disabled].active,.datepicker table tr td.range.today[disabled]:active,.datepicker table tr td.range.today[disabled]:focus,.datepicker table tr td.range.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.today,fieldset[disabled] .datepicker table tr td.range.today.active,fieldset[disabled] .datepicker table tr td.range.today.disabled,fieldset[disabled] .datepicker table tr td.range.today.disabled.active,fieldset[disabled] .datepicker table tr td.range.today.disabled:active,fieldset[disabled] .datepicker table tr td.range.today.disabled:focus,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.range.today:active,fieldset[disabled] .datepicker table tr td.range.today:focus,fieldset[disabled] .datepicker table tr td.range.today:hover,fieldset[disabled] .datepicker table tr td.range.today:hover.active,fieldset[disabled] .datepicker table tr td.range.today:hover:active,fieldset[disabled] .datepicker table tr td.range.today:hover:focus,fieldset[disabled] .datepicker table tr td.range.today:hover:hover{background-color:#f7ca77;border-color:#f1a417}.datepicker table tr td.selected,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected:hover{color:#fff;background-color:#999;border-color:#555;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:focus,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.disabled:hover:focus,.datepicker table tr td.selected.disabled:hover:hover,.datepicker table tr td.selected:active,.datepicker table tr td.selected:focus,.datepicker table tr td.selected:hover,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected:hover:focus,.datepicker table tr td.selected:hover:hover,.open .dropdown-toggle.datepicker table tr td.selected,.open .dropdown-toggle.datepicker table tr td.selected.disabled,.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover,.open .dropdown-toggle.datepicker table tr td.selected:hover{color:#fff;background-color:#858585;border-color:#373737}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover:active,.open .dropdown-toggle.datepicker table tr td.selected,.open .dropdown-toggle.datepicker table tr td.selected.disabled,.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover,.open .dropdown-toggle.datepicker table tr td.selected:hover{background-image:none}.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled.disabled,.datepicker table tr td.selected.disabled.disabled.active,.datepicker table tr td.selected.disabled.disabled:active,.datepicker table tr td.selected.disabled.disabled:focus,.datepicker table tr td.selected.disabled.disabled:hover,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:focus,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover.disabled,.datepicker table tr td.selected.disabled:hover.disabled.active,.datepicker table tr td.selected.disabled:hover.disabled:active,.datepicker table tr td.selected.disabled:hover.disabled:focus,.datepicker table tr td.selected.disabled:hover.disabled:hover,.datepicker table tr td.selected.disabled:hover[disabled],.datepicker table tr td.selected.disabled:hover[disabled].active,.datepicker table tr td.selected.disabled:hover[disabled]:active,.datepicker table tr td.selected.disabled:hover[disabled]:focus,.datepicker table tr td.selected.disabled:hover[disabled]:hover,.datepicker table tr td.selected.disabled[disabled],.datepicker table tr td.selected.disabled[disabled].active,.datepicker table tr td.selected.disabled[disabled]:active,.datepicker table tr td.selected.disabled[disabled]:focus,.datepicker table tr td.selected.disabled[disabled]:hover,.datepicker table tr td.selected:hover.disabled,.datepicker table tr td.selected:hover.disabled.active,.datepicker table tr td.selected:hover.disabled:active,.datepicker table tr td.selected:hover.disabled:focus,.datepicker table tr td.selected:hover.disabled:hover,.datepicker table tr td.selected:hover[disabled],.datepicker table tr td.selected:hover[disabled].active,.datepicker table tr td.selected:hover[disabled]:active,.datepicker table tr td.selected:hover[disabled]:focus,.datepicker table tr td.selected:hover[disabled]:hover,.datepicker table tr td.selected[disabled],.datepicker table tr td.selected[disabled].active,.datepicker table tr td.selected[disabled]:active,.datepicker table tr td.selected[disabled]:focus,.datepicker table tr td.selected[disabled]:hover,fieldset[disabled] .datepicker table tr td.selected,fieldset[disabled] .datepicker table tr td.selected.active,fieldset[disabled] .datepicker table tr td.selected.disabled,fieldset[disabled] .datepicker table tr td.selected.disabled.active,fieldset[disabled] .datepicker table tr td.selected.disabled:active,fieldset[disabled] .datepicker table tr td.selected.disabled:focus,fieldset[disabled] .datepicker table tr td.selected.disabled:hover,fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active,fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active,fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.selected:active,fieldset[disabled] .datepicker table tr td.selected:focus,fieldset[disabled] .datepicker table tr td.selected:hover,fieldset[disabled] .datepicker table tr td.selected:hover.active,fieldset[disabled] .datepicker table tr td.selected:hover:active,fieldset[disabled] .datepicker table tr td.selected:hover:focus,fieldset[disabled] .datepicker table tr td.selected:hover:hover{background-color:#999;border-color:#555}.datepicker table tr td.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active:hover{color:#fff;background-color:#428bca;border-color:#357ebd;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:focus,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.disabled:hover:focus,.datepicker table tr td.active.disabled:hover:hover,.datepicker table tr td.active:active,.datepicker table tr td.active:focus,.datepicker table tr td.active:hover,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover:active,.datepicker table tr td.active:hover:focus,.datepicker table tr td.active:hover:hover,.open .dropdown-toggle.datepicker table tr td.active,.open .dropdown-toggle.datepicker table tr td.active.disabled,.open .dropdown-toggle.datepicker table tr td.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td.active:hover{color:#fff;background-color:#3276b1;border-color:#285e8e}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active:active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover:active,.open .dropdown-toggle.datepicker table tr td.active,.open .dropdown-toggle.datepicker table tr td.active.disabled,.open .dropdown-toggle.datepicker table tr td.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td.active:hover{background-image:none}.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled.disabled,.datepicker table tr td.active.disabled.disabled.active,.datepicker table tr td.active.disabled.disabled:active,.datepicker table tr td.active.disabled.disabled:focus,.datepicker table tr td.active.disabled.disabled:hover,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:focus,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover.disabled,.datepicker table tr td.active.disabled:hover.disabled.active,.datepicker table tr td.active.disabled:hover.disabled:active,.datepicker table tr td.active.disabled:hover.disabled:focus,.datepicker table tr td.active.disabled:hover.disabled:hover,.datepicker table tr td.active.disabled:hover[disabled],.datepicker table tr td.active.disabled:hover[disabled].active,.datepicker table tr td.active.disabled:hover[disabled]:active,.datepicker table tr td.active.disabled:hover[disabled]:focus,.datepicker table tr td.active.disabled:hover[disabled]:hover,.datepicker table tr td.active.disabled[disabled],.datepicker table tr td.active.disabled[disabled].active,.datepicker table tr td.active.disabled[disabled]:active,.datepicker table tr td.active.disabled[disabled]:focus,.datepicker table tr td.active.disabled[disabled]:hover,.datepicker table tr td.active:hover.disabled,.datepicker table tr td.active:hover.disabled.active,.datepicker table tr td.active:hover.disabled:active,.datepicker table tr td.active:hover.disabled:focus,.datepicker table tr td.active:hover.disabled:hover,.datepicker table tr td.active:hover[disabled],.datepicker table tr td.active:hover[disabled].active,.datepicker table tr td.active:hover[disabled]:active,.datepicker table tr td.active:hover[disabled]:focus,.datepicker table tr td.active:hover[disabled]:hover,.datepicker table tr td.active[disabled],.datepicker table tr td.active[disabled].active,.datepicker table tr td.active[disabled]:active,.datepicker table tr td.active[disabled]:focus,.datepicker table tr td.active[disabled]:hover,fieldset[disabled] .datepicker table tr td.active,fieldset[disabled] .datepicker table tr td.active.active,fieldset[disabled] .datepicker table tr td.active.disabled,fieldset[disabled] .datepicker table tr td.active.disabled.active,fieldset[disabled] .datepicker table tr td.active.disabled:active,fieldset[disabled] .datepicker table tr td.active.disabled:focus,fieldset[disabled] .datepicker table tr td.active.disabled:hover,fieldset[disabled] .datepicker table tr td.active.disabled:hover.active,fieldset[disabled] .datepicker table tr td.active.disabled:hover:active,fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.active:active,fieldset[disabled] .datepicker table tr td.active:focus,fieldset[disabled] .datepicker table tr td.active:hover,fieldset[disabled] .datepicker table tr td.active:hover.active,fieldset[disabled] .datepicker table tr td.active:hover:active,fieldset[disabled] .datepicker table tr td.active:hover:focus,fieldset[disabled] .datepicker table tr td.active:hover:hover{background-color:#428bca;border-color:#357ebd}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;border-radius:4px}.datepicker table tr td span:hover{background:#eee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{color:#fff;background-color:#428bca;border-color:#357ebd;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.disabled:hover:focus,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active:active,.datepicker table tr td span.active:focus,.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active:hover:focus,.datepicker table tr td span.active:hover:hover,.open .dropdown-toggle.datepicker table tr td span.active,.open .dropdown-toggle.datepicker table tr td span.active.disabled,.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td span.active:hover{color:#fff;background-color:#3276b1;border-color:#285e8e}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active,.open .dropdown-toggle.datepicker table tr td span.active,.open .dropdown-toggle.datepicker table tr td span.active.disabled,.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td span.active:hover{background-image:none}.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled.disabled,.datepicker table tr td span.active.disabled.disabled.active,.datepicker table tr td span.active.disabled.disabled:active,.datepicker table tr td span.active.disabled.disabled:focus,.datepicker table tr td span.active.disabled.disabled:hover,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.disabled,.datepicker table tr td span.active.disabled:hover.disabled.active,.datepicker table tr td span.active.disabled:hover.disabled:active,.datepicker table tr td span.active.disabled:hover.disabled:focus,.datepicker table tr td span.active.disabled:hover.disabled:hover,.datepicker table tr td span.active.disabled:hover[disabled],.datepicker table tr td span.active.disabled:hover[disabled].active,.datepicker table tr td span.active.disabled:hover[disabled]:active,.datepicker table tr td span.active.disabled:hover[disabled]:focus,.datepicker table tr td span.active.disabled:hover[disabled]:hover,.datepicker table tr td span.active.disabled[disabled],.datepicker table tr td span.active.disabled[disabled].active,.datepicker table tr td span.active.disabled[disabled]:active,.datepicker table tr td span.active.disabled[disabled]:focus,.datepicker table tr td span.active.disabled[disabled]:hover,.datepicker table tr td span.active:hover.disabled,.datepicker table tr td span.active:hover.disabled.active,.datepicker table tr td span.active:hover.disabled:active,.datepicker table tr td span.active:hover.disabled:focus,.datepicker table tr td span.active:hover.disabled:hover,.datepicker table tr td span.active:hover[disabled],.datepicker table tr td span.active:hover[disabled].active,.datepicker table tr td span.active:hover[disabled]:active,.datepicker table tr td span.active:hover[disabled]:focus,.datepicker table tr td span.active:hover[disabled]:hover,.datepicker table tr td span.active[disabled],.datepicker table tr td span.active[disabled].active,.datepicker table tr td span.active[disabled]:active,.datepicker table tr td span.active[disabled]:focus,.datepicker table tr td span.active[disabled]:hover,fieldset[disabled] .datepicker table tr td span.active,fieldset[disabled] .datepicker table tr td span.active.active,fieldset[disabled] .datepicker table tr td span.active.disabled,fieldset[disabled] .datepicker table tr td span.active.disabled.active,fieldset[disabled] .datepicker table tr td span.active.disabled:active,fieldset[disabled] .datepicker table tr td span.active.disabled:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover,fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,fieldset[disabled] .datepicker table tr td span.active:active,fieldset[disabled] .datepicker table tr td span.active:focus,fieldset[disabled] .datepicker table tr td span.active:hover,fieldset[disabled] .datepicker table tr td span.active:hover.active,fieldset[disabled] .datepicker table tr td span.active:hover:active,fieldset[disabled] .datepicker table tr td span.active:hover:focus,fieldset[disabled] .datepicker table tr td span.active:hover:hover{background-color:#428bca;border-color:#357ebd}.datepicker table tr td span.new,.datepicker table tr td span.old{color:#999}.datepicker .datepicker-switch{width:145px}.datepicker tfoot tr th,.datepicker thead tr:first-child th{cursor:pointer}.datepicker tfoot tr th:hover,.datepicker thead tr:first-child th:hover{background:#eee}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.datepicker thead tr:first-child .cw{cursor:default;background-color:transparent}.input-group.date .input-group-addon{cursor:pointer}.input-daterange{width:100%}.input-daterange input{text-align:center}.input-daterange input:first-child{border-radius:3px 0 0 3px}.input-daterange input:last-child{border-radius:0 3px 3px 0}.input-daterange .input-group-addon{width:auto;min-width:16px;padding:4px 5px;font-weight:400;line-height:1.42857143;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:solid #ccc;border-width:1px 0;margin-left:-5px;margin-right:-5px}.datepicker.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:5px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;color:#333;font-size:13px;line-height:1.42857143}.datepicker.datepicker-inline td,.datepicker.datepicker-inline th,.datepicker.dropdown-menu td,.datepicker.dropdown-menu th{padding:0 5px}
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
.datepicker{border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker.datepicker-rtl{direction:rtl}.datepicker.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0}.datepicker-dropdown:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-top:0;border-bottom-color:rgba(0,0,0,.2);position:absolute}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;border-top:0;position:absolute}.datepicker-dropdown.datepicker-orient-left:before{left:6px}.datepicker-dropdown.datepicker-orient-left:after{left:7px}.datepicker-dropdown.datepicker-orient-right:before{right:6px}.datepicker-dropdown.datepicker-orient-right:after{right:7px}.datepicker-dropdown.datepicker-orient-top:before{top:-7px}.datepicker-dropdown.datepicker-orient-top:after{top:-6px}.datepicker-dropdown.datepicker-orient-bottom:before{bottom:-7px;border-bottom:0;border-top:7px solid #999}.datepicker-dropdown.datepicker-orient-bottom:after{bottom:-6px;border-bottom:0;border-top:6px solid #fff}.datepicker>div{display:none}.datepicker.days .datepicker-days,.datepicker.months .datepicker-months,.datepicker.years .datepicker-years{display:block}.datepicker table{margin:0;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.datepicker table tr td,.datepicker table tr th{text-align:center;width:30px;height:30px;border-radius:4px;border:0}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.day.focused,.datepicker table tr td.day:hover{background:#eee;cursor:pointer}.datepicker table tr td.new,.datepicker table tr td.old{color:#999}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td.today,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today:hover{color:#000;background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:focus,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.disabled:hover:focus,.datepicker table tr td.today.disabled:hover:hover,.datepicker table tr td.today:active,.datepicker table tr td.today:focus,.datepicker table tr td.today:hover,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover:active,.datepicker table tr td.today:hover:focus,.datepicker table tr td.today:hover:hover,.open .dropdown-toggle.datepicker table tr td.today,.open .dropdown-toggle.datepicker table tr td.today.disabled,.open .dropdown-toggle.datepicker table tr td.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.today:hover{color:#000;background-color:#ffcd70;border-color:#f59e00}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today:active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover:active,.open .dropdown-toggle.datepicker table tr td.today,.open .dropdown-toggle.datepicker table tr td.today.disabled,.open .dropdown-toggle.datepicker table tr td.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.today:hover{background-image:none}.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled.disabled,.datepicker table tr td.today.disabled.disabled.active,.datepicker table tr td.today.disabled.disabled:active,.datepicker table tr td.today.disabled.disabled:focus,.datepicker table tr td.today.disabled.disabled:hover,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:focus,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover.disabled,.datepicker table tr td.today.disabled:hover.disabled.active,.datepicker table tr td.today.disabled:hover.disabled:active,.datepicker table tr td.today.disabled:hover.disabled:focus,.datepicker table tr td.today.disabled:hover.disabled:hover,.datepicker table tr td.today.disabled:hover[disabled],.datepicker table tr td.today.disabled:hover[disabled].active,.datepicker table tr td.today.disabled:hover[disabled]:active,.datepicker table tr td.today.disabled:hover[disabled]:focus,.datepicker table tr td.today.disabled:hover[disabled]:hover,.datepicker table tr td.today.disabled[disabled],.datepicker table tr td.today.disabled[disabled].active,.datepicker table tr td.today.disabled[disabled]:active,.datepicker table tr td.today.disabled[disabled]:focus,.datepicker table tr td.today.disabled[disabled]:hover,.datepicker table tr td.today:hover.disabled,.datepicker table tr td.today:hover.disabled.active,.datepicker table tr td.today:hover.disabled:active,.datepicker table tr td.today:hover.disabled:focus,.datepicker table tr td.today:hover.disabled:hover,.datepicker table tr td.today:hover[disabled],.datepicker table tr td.today:hover[disabled].active,.datepicker table tr td.today:hover[disabled]:active,.datepicker table tr td.today:hover[disabled]:focus,.datepicker table tr td.today:hover[disabled]:hover,.datepicker table tr td.today[disabled],.datepicker table tr td.today[disabled].active,.datepicker table tr td.today[disabled]:active,.datepicker table tr td.today[disabled]:focus,.datepicker table tr td.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.today,fieldset[disabled] .datepicker table tr td.today.active,fieldset[disabled] .datepicker table tr td.today.disabled,fieldset[disabled] .datepicker table tr td.today.disabled.active,fieldset[disabled] .datepicker table tr td.today.disabled:active,fieldset[disabled] .datepicker table tr td.today.disabled:focus,fieldset[disabled] .datepicker table tr td.today.disabled:hover,fieldset[disabled] .datepicker table tr td.today.disabled:hover.active,fieldset[disabled] .datepicker table tr td.today.disabled:hover:active,fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.today:active,fieldset[disabled] .datepicker table tr td.today:focus,fieldset[disabled] .datepicker table tr td.today:hover,fieldset[disabled] .datepicker table tr td.today:hover.active,fieldset[disabled] .datepicker table tr td.today:hover:active,fieldset[disabled] .datepicker table tr td.today:hover:focus,fieldset[disabled] .datepicker table tr td.today:hover:hover{background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today:hover:hover{color:#000}.datepicker table tr td.today.active:hover{color:#fff}.datepicker table tr td.range,.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range:hover{background:#eee;border-radius:0}.datepicker table tr td.range.today,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today:hover{color:#000;background-color:#f7ca77;border-color:#f1a417;border-radius:0}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:focus,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.disabled:hover:focus,.datepicker table tr td.range.today.disabled:hover:hover,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:focus,.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today:hover:focus,.datepicker table tr td.range.today:hover:hover,.open .dropdown-toggle.datepicker table tr td.range.today,.open .dropdown-toggle.datepicker table tr td.range.today.disabled,.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.range.today:hover{color:#000;background-color:#f4bb51;border-color:#bf800c}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover:active,.open .dropdown-toggle.datepicker table tr td.range.today,.open .dropdown-toggle.datepicker table tr td.range.today.disabled,.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover,.open .dropdown-toggle.datepicker table tr td.range.today:hover{background-image:none}.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled.disabled,.datepicker table tr td.range.today.disabled.disabled.active,.datepicker table tr td.range.today.disabled.disabled:active,.datepicker table tr td.range.today.disabled.disabled:focus,.datepicker table tr td.range.today.disabled.disabled:hover,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:focus,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover.disabled,.datepicker table tr td.range.today.disabled:hover.disabled.active,.datepicker table tr td.range.today.disabled:hover.disabled:active,.datepicker table tr td.range.today.disabled:hover.disabled:focus,.datepicker table tr td.range.today.disabled:hover.disabled:hover,.datepicker table tr td.range.today.disabled:hover[disabled],.datepicker table tr td.range.today.disabled:hover[disabled].active,.datepicker table tr td.range.today.disabled:hover[disabled]:active,.datepicker table tr td.range.today.disabled:hover[disabled]:focus,.datepicker table tr td.range.today.disabled:hover[disabled]:hover,.datepicker table tr td.range.today.disabled[disabled],.datepicker table tr td.range.today.disabled[disabled].active,.datepicker table tr td.range.today.disabled[disabled]:active,.datepicker table tr td.range.today.disabled[disabled]:focus,.datepicker table tr td.range.today.disabled[disabled]:hover,.datepicker table tr td.range.today:hover.disabled,.datepicker table tr td.range.today:hover.disabled.active,.datepicker table tr td.range.today:hover.disabled:active,.datepicker table tr td.range.today:hover.disabled:focus,.datepicker table tr td.range.today:hover.disabled:hover,.datepicker table tr td.range.today:hover[disabled],.datepicker table tr td.range.today:hover[disabled].active,.datepicker table tr td.range.today:hover[disabled]:active,.datepicker table tr td.range.today:hover[disabled]:focus,.datepicker table tr td.range.today:hover[disabled]:hover,.datepicker table tr td.range.today[disabled],.datepicker table tr td.range.today[disabled].active,.datepicker table tr td.range.today[disabled]:active,.datepicker table tr td.range.today[disabled]:focus,.datepicker table tr td.range.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.today,fieldset[disabled] .datepicker table tr td.range.today.active,fieldset[disabled] .datepicker table tr td.range.today.disabled,fieldset[disabled] .datepicker table tr td.range.today.disabled.active,fieldset[disabled] .datepicker table tr td.range.today.disabled:active,fieldset[disabled] .datepicker table tr td.range.today.disabled:focus,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.range.today:active,fieldset[disabled] .datepicker table tr td.range.today:focus,fieldset[disabled] .datepicker table tr td.range.today:hover,fieldset[disabled] .datepicker table tr td.range.today:hover.active,fieldset[disabled] .datepicker table tr td.range.today:hover:active,fieldset[disabled] .datepicker table tr td.range.today:hover:focus,fieldset[disabled] .datepicker table tr td.range.today:hover:hover{background-color:#f7ca77;border-color:#f1a417}.datepicker table tr td.selected,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected:hover{color:#fff;background-color:#999;border-color:#555;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:focus,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.disabled:hover:focus,.datepicker table tr td.selected.disabled:hover:hover,.datepicker table tr td.selected:active,.datepicker table tr td.selected:focus,.datepicker table tr td.selected:hover,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected:hover:focus,.datepicker table tr td.selected:hover:hover,.open .dropdown-toggle.datepicker table tr td.selected,.open .dropdown-toggle.datepicker table tr td.selected.disabled,.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover,.open .dropdown-toggle.datepicker table tr td.selected:hover{color:#fff;background-color:#858585;border-color:#373737}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover:active,.open .dropdown-toggle.datepicker table tr td.selected,.open .dropdown-toggle.datepicker table tr td.selected.disabled,.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover,.open .dropdown-toggle.datepicker table tr td.selected:hover{background-image:none}.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled.disabled,.datepicker table tr td.selected.disabled.disabled.active,.datepicker table tr td.selected.disabled.disabled:active,.datepicker table tr td.selected.disabled.disabled:focus,.datepicker table tr td.selected.disabled.disabled:hover,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:focus,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover.disabled,.datepicker table tr td.selected.disabled:hover.disabled.active,.datepicker table tr td.selected.disabled:hover.disabled:active,.datepicker table tr td.selected.disabled:hover.disabled:focus,.datepicker table tr td.selected.disabled:hover.disabled:hover,.datepicker table tr td.selected.disabled:hover[disabled],.datepicker table tr td.selected.disabled:hover[disabled].active,.datepicker table tr td.selected.disabled:hover[disabled]:active,.datepicker table tr td.selected.disabled:hover[disabled]:focus,.datepicker table tr td.selected.disabled:hover[disabled]:hover,.datepicker table tr td.selected.disabled[disabled],.datepicker table tr td.selected.disabled[disabled].active,.datepicker table tr td.selected.disabled[disabled]:active,.datepicker table tr td.selected.disabled[disabled]:focus,.datepicker table tr td.selected.disabled[disabled]:hover,.datepicker table tr td.selected:hover.disabled,.datepicker table tr td.selected:hover.disabled.active,.datepicker table tr td.selected:hover.disabled:active,.datepicker table tr td.selected:hover.disabled:focus,.datepicker table tr td.selected:hover.disabled:hover,.datepicker table tr td.selected:hover[disabled],.datepicker table tr td.selected:hover[disabled].active,.datepicker table tr td.selected:hover[disabled]:active,.datepicker table tr td.selected:hover[disabled]:focus,.datepicker table tr td.selected:hover[disabled]:hover,.datepicker table tr td.selected[disabled],.datepicker table tr td.selected[disabled].active,.datepicker table tr td.selected[disabled]:active,.datepicker table tr td.selected[disabled]:focus,.datepicker table tr td.selected[disabled]:hover,fieldset[disabled] .datepicker table tr td.selected,fieldset[disabled] .datepicker table tr td.selected.active,fieldset[disabled] .datepicker table tr td.selected.disabled,fieldset[disabled] .datepicker table tr td.selected.disabled.active,fieldset[disabled] .datepicker table tr td.selected.disabled:active,fieldset[disabled] .datepicker table tr td.selected.disabled:focus,fieldset[disabled] .datepicker table tr td.selected.disabled:hover,fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active,fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active,fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.selected:active,fieldset[disabled] .datepicker table tr td.selected:focus,fieldset[disabled] .datepicker table tr td.selected:hover,fieldset[disabled] .datepicker table tr td.selected:hover.active,fieldset[disabled] .datepicker table tr td.selected:hover:active,fieldset[disabled] .datepicker table tr td.selected:hover:focus,fieldset[disabled] .datepicker table tr td.selected:hover:hover{background-color:#999;border-color:#555}.datepicker table tr td.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active:hover{color:#fff;background-color:#428bca;border-color:#357ebd;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:focus,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.disabled:hover:focus,.datepicker table tr td.active.disabled:hover:hover,.datepicker table tr td.active:active,.datepicker table tr td.active:focus,.datepicker table tr td.active:hover,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover:active,.datepicker table tr td.active:hover:focus,.datepicker table tr td.active:hover:hover,.open .dropdown-toggle.datepicker table tr td.active,.open .dropdown-toggle.datepicker table tr td.active.disabled,.open .dropdown-toggle.datepicker table tr td.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td.active:hover{color:#fff;background-color:#3276b1;border-color:#285e8e}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active:active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover:active,.open .dropdown-toggle.datepicker table tr td.active,.open .dropdown-toggle.datepicker table tr td.active.disabled,.open .dropdown-toggle.datepicker table tr td.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td.active:hover{background-image:none}.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled.disabled,.datepicker table tr td.active.disabled.disabled.active,.datepicker table tr td.active.disabled.disabled:active,.datepicker table tr td.active.disabled.disabled:focus,.datepicker table tr td.active.disabled.disabled:hover,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:focus,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover.disabled,.datepicker table tr td.active.disabled:hover.disabled.active,.datepicker table tr td.active.disabled:hover.disabled:active,.datepicker table tr td.active.disabled:hover.disabled:focus,.datepicker table tr td.active.disabled:hover.disabled:hover,.datepicker table tr td.active.disabled:hover[disabled],.datepicker table tr td.active.disabled:hover[disabled].active,.datepicker table tr td.active.disabled:hover[disabled]:active,.datepicker table tr td.active.disabled:hover[disabled]:focus,.datepicker table tr td.active.disabled:hover[disabled]:hover,.datepicker table tr td.active.disabled[disabled],.datepicker table tr td.active.disabled[disabled].active,.datepicker table tr td.active.disabled[disabled]:active,.datepicker table tr td.active.disabled[disabled]:focus,.datepicker table tr td.active.disabled[disabled]:hover,.datepicker table tr td.active:hover.disabled,.datepicker table tr td.active:hover.disabled.active,.datepicker table tr td.active:hover.disabled:active,.datepicker table tr td.active:hover.disabled:focus,.datepicker table tr td.active:hover.disabled:hover,.datepicker table tr td.active:hover[disabled],.datepicker table tr td.active:hover[disabled].active,.datepicker table tr td.active:hover[disabled]:active,.datepicker table tr td.active:hover[disabled]:focus,.datepicker table tr td.active:hover[disabled]:hover,.datepicker table tr td.active[disabled],.datepicker table tr td.active[disabled].active,.datepicker table tr td.active[disabled]:active,.datepicker table tr td.active[disabled]:focus,.datepicker table tr td.active[disabled]:hover,fieldset[disabled] .datepicker table tr td.active,fieldset[disabled] .datepicker table tr td.active.active,fieldset[disabled] .datepicker table tr td.active.disabled,fieldset[disabled] .datepicker table tr td.active.disabled.active,fieldset[disabled] .datepicker table tr td.active.disabled:active,fieldset[disabled] .datepicker table tr td.active.disabled:focus,fieldset[disabled] .datepicker table tr td.active.disabled:hover,fieldset[disabled] .datepicker table tr td.active.disabled:hover.active,fieldset[disabled] .datepicker table tr td.active.disabled:hover:active,fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus,fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover,fieldset[disabled] .datepicker table tr td.active:active,fieldset[disabled] .datepicker table tr td.active:focus,fieldset[disabled] .datepicker table tr td.active:hover,fieldset[disabled] .datepicker table tr td.active:hover.active,fieldset[disabled] .datepicker table tr td.active:hover:active,fieldset[disabled] .datepicker table tr td.active:hover:focus,fieldset[disabled] .datepicker table tr td.active:hover:hover{background-color:#428bca;border-color:#357ebd}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;border-radius:4px}.datepicker table tr td span:hover{background:#eee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{color:#fff;background-color:#428bca;border-color:#357ebd;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.disabled:hover:focus,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active:active,.datepicker table tr td span.active:focus,.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active:hover:focus,.datepicker table tr td span.active:hover:hover,.open .dropdown-toggle.datepicker table tr td span.active,.open .dropdown-toggle.datepicker table tr td span.active.disabled,.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td span.active:hover{color:#fff;background-color:#3276b1;border-color:#285e8e}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active,.open .dropdown-toggle.datepicker table tr td span.active,.open .dropdown-toggle.datepicker table tr td span.active.disabled,.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover,.open .dropdown-toggle.datepicker table tr td span.active:hover{background-image:none}.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled.disabled,.datepicker table tr td span.active.disabled.disabled.active,.datepicker table tr td span.active.disabled.disabled:active,.datepicker table tr td span.active.disabled.disabled:focus,.datepicker table tr td span.active.disabled.disabled:hover,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.disabled,.datepicker table tr td span.active.disabled:hover.disabled.active,.datepicker table tr td span.active.disabled:hover.disabled:active,.datepicker table tr td span.active.disabled:hover.disabled:focus,.datepicker table tr td span.active.disabled:hover.disabled:hover,.datepicker table tr td span.active.disabled:hover[disabled],.datepicker table tr td span.active.disabled:hover[disabled].active,.datepicker table tr td span.active.disabled:hover[disabled]:active,.datepicker table tr td span.active.disabled:hover[disabled]:focus,.datepicker table tr td span.active.disabled:hover[disabled]:hover,.datepicker table tr td span.active.disabled[disabled],.datepicker table tr td span.active.disabled[disabled].active,.datepicker table tr td span.active.disabled[disabled]:active,.datepicker table tr td span.active.disabled[disabled]:focus,.datepicker table tr td span.active.disabled[disabled]:hover,.datepicker table tr td span.active:hover.disabled,.datepicker table tr td span.active:hover.disabled.active,.datepicker table tr td span.active:hover.disabled:active,.datepicker table tr td span.active:hover.disabled:focus,.datepicker table tr td span.active:hover.disabled:hover,.datepicker table tr td span.active:hover[disabled],.datepicker table tr td span.active:hover[disabled].active,.datepicker table tr td span.active:hover[disabled]:active,.datepicker table tr td span.active:hover[disabled]:focus,.datepicker table tr td span.active:hover[disabled]:hover,.datepicker table tr td span.active[disabled],.datepicker table tr td span.active[disabled].active,.datepicker table tr td span.active[disabled]:active,.datepicker table tr td span.active[disabled]:focus,.datepicker table tr td span.active[disabled]:hover,fieldset[disabled] .datepicker table tr td span.active,fieldset[disabled] .datepicker table tr td span.active.active,fieldset[disabled] .datepicker table tr td span.active.disabled,fieldset[disabled] .datepicker table tr td span.active.disabled.active,fieldset[disabled] .datepicker table tr td span.active.disabled:active,fieldset[disabled] .datepicker table tr td span.active.disabled:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover,fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,fieldset[disabled] .datepicker table tr td span.active:active,fieldset[disabled] .datepicker table tr td span.active:focus,fieldset[disabled] .datepicker table tr td span.active:hover,fieldset[disabled] .datepicker table tr td span.active:hover.active,fieldset[disabled] .datepicker table tr td span.active:hover:active,fieldset[disabled] .datepicker table tr td span.active:hover:focus,fieldset[disabled] .datepicker table tr td span.active:hover:hover{background-color:#428bca;border-color:#357ebd}.datepicker table tr td span.new,.datepicker table tr td span.old{color:#999}.datepicker .datepicker-switch{width:145px}.datepicker tfoot tr th,.datepicker thead tr:first-child th{cursor:pointer}.datepicker tfoot tr th:hover,.datepicker thead tr:first-child th:hover{background:#eee}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.datepicker thead tr:first-child .cw{cursor:default;background-color:transparent}.input-group.date .input-group-addon{cursor:pointer}.input-daterange{width:100%}.input-daterange input{text-align:center}.input-daterange input:first-child{border-radius:3px 0 0 3px}.input-daterange input:last-child{border-radius:0 3px 3px 0}.input-daterange .input-group-addon{width:auto;min-width:16px;padding:4px 5px;font-weight:400;line-height:1.42857143;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:solid #ccc;border-width:1px 0;margin-left:-5px;margin-right:-5px}.datepicker.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:5px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;color:#333;font-size:13px;line-height:1.42857143}.datepicker.datepicker-inline td,.datepicker.datepicker-inline th,.datepicker.dropdown-menu td,.datepicker.dropdown-menu th{padding:0 5px}
|
libs/factory/bootstrap/assets/css-min/bootstrap.ectoplasm.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .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-461 .btn-primary:focus,.factory-bootstrap-461 .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-461 .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-461 .btn-primary:disabled,.factory-bootstrap-461 .btn-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.factory-bootstrap-461 .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-461 .pagination>.active>a,.factory-bootstrap-461 .pagination>.active>a:focus,.factory-bootstrap-461 .pagination>.active>a:hover,.factory-bootstrap-461 .pagination>.active>span,.factory-bootstrap-461 .pagination>.active>span:focus,.factory-bootstrap-461 .pagination>.active>span:hover{background-color:#a3b745;border-color:#839237}
|
libs/factory/bootstrap/assets/css-min/bootstrap.form-group.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .factory-form-group .factory-legend{padding:9px 12px;background-color:#f9f9f9}.factory-bootstrap-461 .factory-form-group .factory-title{font-weight:700;font-size:14px;line-height:14px;color:#555;margin:0}.factory-bootstrap-461 .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-461 .factory-form-group .factory-hint-icon.factory-hint-icon-green{background:#8bc34a}.factory-bootstrap-461 .factory-form-group .factory-hint-icon.factory-hint-icon-grey{background:#9e9e9e}.factory-bootstrap-461 .factory-form-group .factory-hint-icon.factory-hint-icon-red{background:#E91E63}.factory-bootstrap-461 .factory-form-group .factory-hint{margin:0;font-size:12px;line-height:16px;margin-top:6px}.factory-bootstrap-461 .factory-form-group+.factory-form-group{margin-top:30px}.factory-bootstrap-461 .factory-form-group legend+.control-group{margin-top:0}
|
libs/factory/bootstrap/assets/css-min/bootstrap.light.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .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-461 .btn-primary:focus,.factory-bootstrap-461 .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-461 .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-461 .btn-primary:disabled,.factory-bootstrap-461 .btn-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.factory-bootstrap-461 .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-461 .pagination>.active>a,.factory-bootstrap-461 .pagination>.active>a:focus,.factory-bootstrap-461 .pagination>.active>a:hover,.factory-bootstrap-461 .pagination>.active>span,.factory-bootstrap-461 .pagination>.active>span:focus,.factory-bootstrap-461 .pagination>.active>span:hover{background-color:#04a4cc;border-color:#037c9a}
|
libs/factory/bootstrap/assets/css-min/bootstrap.midnight.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .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-461 .btn-primary:focus,.factory-bootstrap-461 .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-461 .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-461 .btn-primary:disabled,.factory-bootstrap-461 .btn-primary[disabled]{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.factory-bootstrap-461 .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-461 .pagination>.active>a,.factory-bootstrap-461 .pagination>.active>a:focus,.factory-bootstrap-461 .pagination>.active>a:hover,.factory-bootstrap-461 .pagination>.active>span,.factory-bootstrap-461 .pagination>.active>span:focus,.factory-bootstrap-461 .pagination>.active>span:hover{background-color:#e14d43;border-color:#d02a21}
|
libs/factory/bootstrap/assets/css-min/bootstrap.ocean.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .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-461 .btn-primary:focus,.factory-bootstrap-461 .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-461 .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-461 .btn-primary:disabled,.factory-bootstrap-461 .btn-primary[disabled]{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.factory-bootstrap-461 .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-461 .pagination>.active>a,.factory-bootstrap-461 .pagination>.active>a:focus,.factory-bootstrap-461 .pagination>.active>a:hover,.factory-bootstrap-461 .pagination>.active>span,.factory-bootstrap-461 .pagination>.active>span:focus,.factory-bootstrap-461 .pagination>.active>span:hover{background-color:#9ebaa0;border-color:#80a583}
|
libs/factory/bootstrap/assets/css-min/bootstrap.separator.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .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
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .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-461 .btn-primary:focus,.factory-bootstrap-461 .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-461 .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-461 .btn-primary:disabled,.factory-bootstrap-461 .btn-primary[disabled]{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.factory-bootstrap-461 .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-461 .pagination>.active>a,.factory-bootstrap-461 .pagination>.active>a:focus,.factory-bootstrap-461 .pagination>.active>a:hover,.factory-bootstrap-461 .pagination>.active>span,.factory-bootstrap-461 .pagination>.active>span:focus,.factory-bootstrap-461 .pagination>.active>span:hover{background-color:#dd823b;border-color:#c36822}
|
libs/factory/bootstrap/assets/css-min/control.checkbox.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
#side-sortables .factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
#side-sortables .factory-bootstrap-461 .factory-buttons-way{float:right;position:relative;top:-25px;left:5px;border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-461 .factory-checkbox-disabled button,.factory-bootstrap-461 .factory-checkbox-disabled input{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-461 .factory-buttons-way{border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-461 .factory-buttons-way button{padding-left:10px;padding-right:10px}.factory-bootstrap-461 .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-461 .factory-checkbox-tumbler-hint{margin-top:5px}.factory-bootstrap-461 .factory-checkbox-tumbler-hint .factory-tumbler-content{display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-461 .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-461 .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-461 .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-461 .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-461 .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-461 .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-461 .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
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .factory-dropdown.factory-buttons-way .fa{margin-right:6px;position:relative}.factory-bootstrap-461 .factory-dropdown.factory-buttons-way{border:0;border-radius:0}.factory-bootstrap-461 .factory-hints .factory-hint{margin-top:5px;display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-461 .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-461 .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-461 .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-461 .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-461 .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-461 .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-461 .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-461 .factory-dropdown.factory-ddslick-way .dd-select{background-color:#fff!important}.factory-bootstrap-461 .factory-dropdown.factory-ddslick-way label{margin-bottom:1px}.factory-bootstrap-461 .factory-dropdown.factory-ddslick-way .dd-option,.factory-bootstrap-461 .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
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .factory-mtextbox-item{position:relative;margin-bottom:5px}.factory-bootstrap-461 .factory-mtextbox-item input,.factory-mtextbox-remove-item{display:inline-block}.factory-bootstrap-461 .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-461 .factory-mtextbox-item .factory-mtextbox-remove-item:focus,.factory-bootstrap-461 .factory-mtextbox-item .factory-mtextbox-remove-item:hover{box-shadow:none;outline:0}.factory-bootstrap-461 .factory-mtextbox-add-item{display:block;margin-top:10px}
|
libs/factory/bootstrap/assets/css-min/holder.more-link.min.css
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
|
11 |
-
.factory-bootstrap-
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
|
11 |
+
.factory-bootstrap-461 .factory-more-link-content{border-top:1px dashed #DDD;padding-top:25px;width:100%;padding-right:20px;position:relative}.factory-bootstrap-461 .factory-tab .factory-more-link-show{display:inline-block;text-decoration:none;border-bottom:1px dotted #21759b;position:relative}.factory-bootstrap-461 .factory-tab .factory-more-link-show:hover{border-color:#d54e21}.factory-bootstrap-461 .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-461 .factory-tab .factory-more-link-hide:hover{color:#999}
|
libs/factory/bootstrap/assets/js-min/bootstrap.dropdown.min.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
+function(a){"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.
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
+function(a){"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.factoryBootstrap461_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.factoryBootstrap461_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/bootstrap.tooltip.min.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focus",i="hover"==g?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this.tip();this.setContent(),this.options.animation&&c.addClass("fade");var d="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement,e=/\s?auto?\s?/i,f=e.test(d);f&&(d=d.replace(e,"")||"top"),c.detach().css({top:0,left:0,display:"block"}).addClass(d),this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);var g=this.getPosition(),h=c[0].offsetWidth,i=c[0].offsetHeight;if(f){var j=this.$element.parent(),k=d,l=document.documentElement.scrollTop||document.body.scrollTop,m="body"==this.options.container?window.innerWidth:j.outerWidth(),n="body"==this.options.container?window.innerHeight:j.outerHeight(),o="body"==this.options.container?0:j.offset().left;d="bottom"==d&&g.top+g.height+i-l>n?"top":"top"==d&&g.top-l-i<0?"bottom":"right"==d&&g.right+h>m?"left":"left"==d&&g.left-h<o?"right":d,c.removeClass(k).addClass(d)}var p=this.getCalculatedOffset(d,g,h,i);this.applyPlacement(p,d),this.$element.trigger("shown.bs."+this.type)}},b.prototype.applyPlacement=function(a,b){var c,d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),a.top=a.top+g,a.left=a.left+h,d.offset(a).addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;if("top"==b&&j!=f&&(c=!0,a.top=a.top+f-j),/bottom|top/.test(b)){var k=0;a.left<0&&(k=-2*a.left,a.left=0,d.offset(a),i=d[0].offsetWidth,j=d[0].offsetHeight),this.replaceArrow(k-e+i,i,"left")}else this.replaceArrow(j-f,j,"top");c&&d.offset(a)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach()}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.$element.trigger("hidden.bs."+this.type),this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this},a(function(){a('[data-toggle="factory-tooltip"]').tooltip({html:!0})})}(jQuery);
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focus",i="hover"==g?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this.tip();this.setContent(),this.options.animation&&c.addClass("fade");var d="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement,e=/\s?auto?\s?/i,f=e.test(d);f&&(d=d.replace(e,"")||"top"),c.detach().css({top:0,left:0,display:"block"}).addClass(d),this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);var g=this.getPosition(),h=c[0].offsetWidth,i=c[0].offsetHeight;if(f){var j=this.$element.parent(),k=d,l=document.documentElement.scrollTop||document.body.scrollTop,m="body"==this.options.container?window.innerWidth:j.outerWidth(),n="body"==this.options.container?window.innerHeight:j.outerHeight(),o="body"==this.options.container?0:j.offset().left;d="bottom"==d&&g.top+g.height+i-l>n?"top":"top"==d&&g.top-l-i<0?"bottom":"right"==d&&g.right+h>m?"left":"left"==d&&g.left-h<o?"right":d,c.removeClass(k).addClass(d)}var p=this.getCalculatedOffset(d,g,h,i);this.applyPlacement(p,d),this.$element.trigger("shown.bs."+this.type)}},b.prototype.applyPlacement=function(a,b){var c,d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),a.top=a.top+g,a.left=a.left+h,d.offset(a).addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;if("top"==b&&j!=f&&(c=!0,a.top=a.top+f-j),/bottom|top/.test(b)){var k=0;a.left<0&&(k=-2*a.left,a.left=0,d.offset(a),i=d[0].offsetWidth,j=d[0].offsetHeight),this.replaceArrow(k-e+i,i,"left")}else this.replaceArrow(j-f,j,"top");c&&d.offset(a)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach()}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.$element.trigger("hidden.bs."+this.type),this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this},a(function(){a('[data-toggle="factory-tooltip"]').tooltip({html:!0})})}(jQuery);
|
libs/factory/bootstrap/assets/js-min/control.checkbox.min.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
!function(a){var b=function(b){var c=this;this.$element=a(b),this.$result=this.$element.find(".factory-result"),this.$on=this.$element.find(".factory-on"),this.$off=this.$element.find(".factory-off");var d=this.$element.is(".factory-tumbler"),e=this.$element.is(".factory-has-tumbler-hint"),f=this.$element.data("tumbler-function"),g=this.$element.data("tumbler-delay");g||(g=3e3),this.callByPath=function(a,b){for(var c=a.split("."),d=window,e=0;e<c.length;e++)d=d[c[e]];d.apply(d,b)},this.$on.click(function(){return c.$off.removeClass("active"),c.$on.addClass("active"),d?setTimeout(function(){c.$on.removeClass("active"),c.$off.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!0),c.$result.val(1),c.$result.trigger("change")),!1}),this.$off.click(function(){return c.$on.removeClass("active"),c.$off.addClass("active"),d?setTimeout(function(){c.$off.removeClass("active"),c.$on.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!1),c.$result.val(0),c.$result.trigger("change")),!1}),this.hashCode=function(a){var b=0;if(!a||0===a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b=b.toString(16),b=b.replace("-","")},this.executeEvents=function(a){(void 0!==window.__factory_checkbox_control_events_off_data||void 0!==window.__factory_checkbox_control_events_on_data)&&(a.change(function(){c.eventsProcess(a)}),c.eventsProcess(a))},this.eventsProcess=function(b){var d=b.attr("name"),e=b.prop("checked"),f=window.__factory_checkbox_control_events_on_data[d],g=window.__factory_checkbox_control_events_off_data[d];if(f||g){var h,i;void 0===window.__factory_checkbox_control_detach_elements&&(window.__factory_checkbox_control_detach_elements={}),h=window.__factory_checkbox_control_detach_elements,i=e?f:g;for(var j in i)if(i.hasOwnProperty(j)){var k,l=i[j];a.isArray(l)||(k=c.hashCode(d+l));var m;switch(j){case"hide":"string"==typeof l&&a(l).hide(0);break;case"show":"string"==typeof l&&a(l).fadeIn(200);break;case"detach":"string"==typeof l&&a(l).each(function(b){h[k]||(h[k]={}),h[k][b]||(h[k][b]={}),h[k][b].recovery_contanier=a(this).parent(),h[k][b].element=a(this).clone(!0),a(this).remove()});break;case"recovery":if(h[k]){for(var n in h[k])h[k].hasOwnProperty(n)&&h[k][n].recovery_contanier&&h[k][n].element&&h[k][n].recovery_contanier.append(h[k][n].element);delete h[k]}break;case"removeClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).removeClass(l[m]);break;case"addClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).addClass(l[m]);break;case"setValue":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&void 0!==l[m]&&null!==l[m]&&a(m).val(l[m])}}}},this.executeEvents(this.$result)};a.fn.
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
!function(a){var b=function(b){var c=this;this.$element=a(b),this.$result=this.$element.find(".factory-result"),this.$on=this.$element.find(".factory-on"),this.$off=this.$element.find(".factory-off");var d=this.$element.is(".factory-tumbler"),e=this.$element.is(".factory-has-tumbler-hint"),f=this.$element.data("tumbler-function"),g=this.$element.data("tumbler-delay");g||(g=3e3),this.callByPath=function(a,b){for(var c=a.split("."),d=window,e=0;e<c.length;e++)d=d[c[e]];d.apply(d,b)},this.$on.click(function(){return c.$off.removeClass("active"),c.$on.addClass("active"),d?setTimeout(function(){c.$on.removeClass("active"),c.$off.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!0),c.$result.val(1),c.$result.trigger("change")),!1}),this.$off.click(function(){return c.$on.removeClass("active"),c.$off.addClass("active"),d?setTimeout(function(){c.$off.removeClass("active"),c.$on.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!1),c.$result.val(0),c.$result.trigger("change")),!1}),this.hashCode=function(a){var b=0;if(!a||0===a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b=b.toString(16),b=b.replace("-","")},this.executeEvents=function(a){(void 0!==window.__factory_checkbox_control_events_off_data||void 0!==window.__factory_checkbox_control_events_on_data)&&(a.change(function(){c.eventsProcess(a)}),c.eventsProcess(a))},this.eventsProcess=function(b){var d=b.attr("name"),e=b.prop("checked"),f=window.__factory_checkbox_control_events_on_data[d],g=window.__factory_checkbox_control_events_off_data[d];if(f||g){var h,i;void 0===window.__factory_checkbox_control_detach_elements&&(window.__factory_checkbox_control_detach_elements={}),h=window.__factory_checkbox_control_detach_elements,i=e?f:g;for(var j in i)if(i.hasOwnProperty(j)){var k,l=i[j];a.isArray(l)||(k=c.hashCode(d+l));var m;switch(j){case"hide":"string"==typeof l&&a(l).hide(0);break;case"show":"string"==typeof l&&a(l).fadeIn(200);break;case"detach":"string"==typeof l&&a(l).each(function(b){h[k]||(h[k]={}),h[k][b]||(h[k][b]={}),h[k][b].recovery_contanier=a(this).parent(),h[k][b].element=a(this).clone(!0),a(this).remove()});break;case"recovery":if(h[k]){for(var n in h[k])h[k].hasOwnProperty(n)&&h[k][n].recovery_contanier&&h[k][n].element&&h[k][n].recovery_contanier.append(h[k][n].element);delete h[k]}break;case"removeClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).removeClass(l[m]);break;case"addClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).addClass(l[m]);break;case"setValue":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&void 0!==l[m]&&null!==l[m]&&a(m).val(l[m])}}}},this.executeEvents(this.$result)};a.fn.factoryBootstrap461_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.factoryBootstrap461_checkboxControl.Constructor=b,a(function(){a(".factory-bootstrap-461 .factory-checkbox.factory-buttons-way").factoryBootstrap461_checkboxControl(),a(".factory-bootstrap-461 .factory-checkbox").not(".factory-buttons-way").click(function(){a(this).prop("checked")?a(this).val(1):a(this).val(0)})})}(jQuery);
|
libs/factory/bootstrap/assets/js-min/control.dropdown.min.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
!function(a){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.
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
!function(a){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.factoryBootstrap461_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.factoryBootstrap461_dropdownControl.Constructor=b,a(function(){a(".factory-bootstrap-461 .factory-dropdown").factoryBootstrap461_dropdownControl()})}(jQuery);
|
libs/factory/bootstrap/assets/js-min/control.list.min.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
!function(a){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.
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
!function(a){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.factoryBootstrap461_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.factoryBootstrap461_listControl.Constructor=b,a(function(){a(".factory-bootstrap-461 .factory-list").factoryBootstrap461_listControl()})}(jQuery);
|
libs/factory/bootstrap/assets/js-min/control.multiple-textbox.min.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
-
* Webcraftic factory build
|
4 |
-
*
|
5 |
-
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
-
* Site: http://webcraftic.com
|
7 |
-
* Support: http://webcraftic.com/contact-us/
|
8 |
-
*/
|
9 |
-
|
10 |
-
!function(a){"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.
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-11-19
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
!function(a){"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.factoryBootstrap461_MultipleTextboxControl=function(){return this.each(function(){new b(this)})},a(function(){a(".factory-bootstrap-461 .factory-multiple-textbox-group").factoryBootstrap461_MultipleTextboxControl()})}(jQuery);
|
libs/factory/bootstrap/boot.php
CHANGED
@@ -1,46 +1,46 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Factory Bootstrap
|
4 |
-
*
|
5 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
6 |
-
* @since 1.0.0
|
7 |
-
* @package factory-bootstrap
|
8 |
-
* @copyright (c) 2018, Webcraftic Ltd
|
9 |
-
*
|
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('
|
23 |
-
return;
|
24 |
-
}
|
25 |
-
|
26 |
-
define('
|
27 |
-
define('
|
28 |
-
|
29 |
-
if( !defined('FACTORY_FLAT_ADMIN') ) {
|
30 |
-
define('FACTORY_FLAT_ADMIN', true);
|
31 |
-
}
|
32 |
-
|
33 |
-
define('
|
34 |
-
define('
|
35 |
-
|
36 |
-
require_once(
|
37 |
-
|
38 |
-
/**
|
39 |
-
* @param
|
40 |
-
*/
|
41 |
-
add_action('
|
42 |
-
$manager = new
|
43 |
-
$plugin->setBootstap($manager);
|
44 |
-
});
|
45 |
-
|
46 |
-
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Factory Bootstrap
|
4 |
+
*
|
5 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
6 |
+
* @since 1.0.0
|
7 |
+
* @package factory-bootstrap
|
8 |
+
* @copyright (c) 2018, Webcraftic Ltd
|
9 |
+
*
|
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_461_LOADED') ) {
|
23 |
+
return;
|
24 |
+
}
|
25 |
+
|
26 |
+
define('FACTORY_BOOTSTRAP_461_VERSION', '4.6.1');
|
27 |
+
define('FACTORY_BOOTSTRAP_461_LOADED', true);
|
28 |
+
|
29 |
+
if( !defined('FACTORY_FLAT_ADMIN') ) {
|
30 |
+
define('FACTORY_FLAT_ADMIN', true);
|
31 |
+
}
|
32 |
+
|
33 |
+
define('FACTORY_BOOTSTRAP_461_DIR', dirname(__FILE__));
|
34 |
+
define('FACTORY_BOOTSTRAP_461_URL', plugins_url(null, __FILE__));
|
35 |
+
|
36 |
+
require_once(FACTORY_BOOTSTRAP_461_DIR . '/includes/functions.php');
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @param Wbcr_Factory460_Plugin $plugin
|
40 |
+
*/
|
41 |
+
add_action('wbcr_factory_bootstrap_461_plugin_created', function ($plugin) {
|
42 |
+
$manager = new Wbcr_FactoryBootstrap461_Manager($plugin);
|
43 |
+
$plugin->setBootstap($manager);
|
44 |
+
});
|
45 |
+
|
46 |
+
|
libs/factory/bootstrap/includes/functions.php
CHANGED
@@ -1,242 +1,242 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* This file manages assets of the Factory Bootstap.
|
4 |
-
*
|
5 |
-
* @author Alex Kovalev <alex@byonepress.com>
|
6 |
-
* @author Paul Kashtanoff <paul@byonepress.com>
|
7 |
-
* @since 1.0.0
|
8 |
-
* @package factory-bootstrap
|
9 |
-
* @copyright (c) 2018, OnePress Ltd
|
10 |
-
*
|
11 |
-
*/
|
12 |
-
|
13 |
-
// Exit if accessed directly
|
14 |
-
if( !defined('ABSPATH') ) {
|
15 |
-
exit;
|
16 |
-
}
|
17 |
-
|
18 |
-
/**
|
19 |
-
* The Bootstrap Manager class.
|
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 |
-
|
33 |
-
/**
|
34 |
-
* Contains scripts to include.
|
35 |
-
*
|
36 |
-
* @since 3.2.0
|
37 |
-
* @var string[]
|
38 |
-
*/
|
39 |
-
public $scripts = [];
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Contains styles to include.
|
43 |
-
*
|
44 |
-
* @since 3.2.0
|
45 |
-
* @var string[]
|
46 |
-
*/
|
47 |
-
public $styles = [];
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Createas a new instance of the license api for a given plugin.
|
51 |
-
*
|
52 |
-
* @since 1.0.0
|
53 |
-
*/
|
54 |
-
public function __construct(
|
55 |
-
{
|
56 |
-
$this->plugin = $plugin;
|
57 |
-
|
58 |
-
add_action('admin_enqueue_scripts', [$this, 'loadAssets']);
|
59 |
-
add_filter('admin_body_class', [$this, 'adminBodyClass']);
|
60 |
-
}
|
61 |
-
|
62 |
-
/**
|
63 |
-
* Includes the Bootstrap scripts.
|
64 |
-
*
|
65 |
-
* @param array|string $scripts
|
66 |
-
* @since 3.2.0
|
67 |
-
*
|
68 |
-
*/
|
69 |
-
public function enqueueScript($scripts)
|
70 |
-
{
|
71 |
-
if( is_array($scripts) ) {
|
72 |
-
foreach($scripts as $script) {
|
73 |
-
if( !in_array($script, $this->scripts) ) {
|
74 |
-
$this->scripts[] = $script;
|
75 |
-
}
|
76 |
-
}
|
77 |
-
} else {
|
78 |
-
if( !in_array($scripts, $this->scripts) ) {
|
79 |
-
$this->scripts[] = $scripts;
|
80 |
-
}
|
81 |
-
}
|
82 |
-
}
|
83 |
-
|
84 |
-
/**
|
85 |
-
* * Includes the Bootstrap styles.
|
86 |
-
*
|
87 |
-
* @param array|string $styles
|
88 |
-
* @since 3.2.0
|
89 |
-
*
|
90 |
-
*/
|
91 |
-
public function enqueueStyle($styles)
|
92 |
-
{
|
93 |
-
|
94 |
-
if( is_array($styles) ) {
|
95 |
-
foreach($styles as $style) {
|
96 |
-
if( !in_array($style, $this->styles) ) {
|
97 |
-
$this->styles[] = $style;
|
98 |
-
}
|
99 |
-
}
|
100 |
-
} else {
|
101 |
-
if( !in_array($styles, $this->styles) ) {
|
102 |
-
$this->styles[] = $styles;
|
103 |
-
}
|
104 |
-
}
|
105 |
-
}
|
106 |
-
|
107 |
-
/**
|
108 |
-
* Loads Bootstrap assets.
|
109 |
-
*
|
110 |
-
* @return void
|
111 |
-
* @since 3.2.0
|
112 |
-
* @see admin_enqueue_scripts
|
113 |
-
*
|
114 |
-
*/
|
115 |
-
public function loadAssets($hook)
|
116 |
-
{
|
117 |
-
|
118 |
-
do_action('
|
119 |
-
do_action('
|
120 |
-
|
121 |
-
$dependencies = [];
|
122 |
-
if( !empty($this->scripts) ) {
|
123 |
-
$dependencies[] = 'jquery';
|
124 |
-
$dependencies[] = 'jquery-ui-core';
|
125 |
-
$dependencies[] = 'jquery-ui-widget';
|
126 |
-
}
|
127 |
-
|
128 |
-
foreach($this->scripts as $script) {
|
129 |
-
switch( $script ) {
|
130 |
-
case 'plugin.iris':
|
131 |
-
$dependencies[] = 'jquery-ui-widget';
|
132 |
-
$dependencies[] = 'jquery-ui-slider';
|
133 |
-
$dependencies[] = 'jquery-ui-draggable';
|
134 |
-
break;
|
135 |
-
}
|
136 |
-
}
|
137 |
-
|
138 |
-
if( !empty($this->scripts) ) {
|
139 |
-
$this->enqueueScripts($this->scripts, 'js', $dependencies);
|
140 |
-
}
|
141 |
-
if( !empty($this->styles) ) {
|
142 |
-
$this->enqueueScripts($this->styles, 'css', $dependencies);
|
143 |
-
}
|
144 |
-
}
|
145 |
-
|
146 |
-
/**
|
147 |
-
* @param array $scripts
|
148 |
-
* @param string $type
|
149 |
-
* @param array $dependencies
|
150 |
-
*/
|
151 |
-
protected function enqueueScripts(array $scripts, $type, array $dependencies)
|
152 |
-
{
|
153 |
-
|
154 |
-
$is_first = true;
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Sets permission for file caching and combining into one file.
|
158 |
-
*
|
159 |
-
* @since 4.1.0
|
160 |
-
*/
|
161 |
-
$cache_enable = apply_filters('wbcr/factory/bootstrap/cache_enable', true);
|
162 |
-
|
163 |
-
$cache_id = md5(implode(',', $this->scripts) . $type . $this->plugin->getPluginVersion());
|
164 |
-
$cache_dir_path =
|
165 |
-
$cache_dir_url =
|
166 |
-
|
167 |
-
$cache_filepath = $cache_dir_path . $cache_id . ".min." . $type;
|
168 |
-
$cache_fileurl = $cache_dir_url . $cache_id . ".min." . $type;
|
169 |
-
|
170 |
-
if( $cache_enable && file_exists($cache_filepath) ) {
|
171 |
-
if( $type == 'js' ) {
|
172 |
-
wp_enqueue_script('wbcr-factory-bootstrap-cached', $cache_fileurl, $dependencies, $this->plugin->getPluginVersion());
|
173 |
-
} else {
|
174 |
-
wp_enqueue_style('wbcr-factory-bootstrap-cached', $cache_fileurl, [], $this->plugin->getPluginVersion());
|
175 |
-
}
|
176 |
-
} else {
|
177 |
-
$cache_dir_exists = false;
|
178 |
-
if( !file_exists($cache_dir_path) ) {
|
179 |
-
if( @mkdir($cache_dir_path, 0755) && wp_is_writable($cache_dir_path) ) {
|
180 |
-
$cache_dir_exists = true;
|
181 |
-
}
|
182 |
-
} else {
|
183 |
-
if( wp_is_writable($cache_dir_path) ) {
|
184 |
-
$cache_dir_exists = true;
|
185 |
-
}
|
186 |
-
}
|
187 |
-
|
188 |
-
$concat_files = [];
|
189 |
-
foreach($scripts as $script_to_load) {
|
190 |
-
$script_to_load = sanitize_text_field($script_to_load);
|
191 |
-
if( $cache_enable && $cache_dir_exists ) {
|
192 |
-
$fname =
|
193 |
-
if( file_exists($fname) ) {
|
194 |
-
$f = @fopen($fname, 'r');
|
195 |
-
$concat_files[] = @fread($f, filesize($fname));
|
196 |
-
@fclose($f);
|
197 |
-
}
|
198 |
-
} else {
|
199 |
-
if( $type == 'js' ) {
|
200 |
-
wp_enqueue_script(md5($script_to_load),
|
201 |
-
} else {
|
202 |
-
wp_enqueue_style(md5($script_to_load),
|
203 |
-
}
|
204 |
-
$is_first = false;
|
205 |
-
}
|
206 |
-
}
|
207 |
-
|
208 |
-
if( $cache_enable && $cache_dir_exists && !empty($concat_files) ) {
|
209 |
-
|
210 |
-
$cf = @fopen($cache_filepath, 'w');
|
211 |
-
$write_content = implode(PHP_EOL, $concat_files);
|
212 |
-
@fwrite($cf, $write_content);
|
213 |
-
@fclose($cf);
|
214 |
-
chmod($cache_filepath, 0755);
|
215 |
-
|
216 |
-
if( file_exists($cache_filepath) ) {
|
217 |
-
if( $type == 'js' ) {
|
218 |
-
wp_enqueue_script('wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, $dependencies, $this->plugin->getPluginVersion());
|
219 |
-
} else {
|
220 |
-
wp_enqueue_style('wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, [], $this->plugin->getPluginVersion());
|
221 |
-
}
|
222 |
-
}
|
223 |
-
}
|
224 |
-
}
|
225 |
-
}
|
226 |
-
|
227 |
-
/**
|
228 |
-
* Adds the body classes: 'factory-flat or 'factory-volumetric'.
|
229 |
-
*
|
230 |
-
* @param string $classes
|
231 |
-
*
|
232 |
-
* @return string
|
233 |
-
* @since 3.2.0
|
234 |
-
*
|
235 |
-
*/
|
236 |
-
public function adminBodyClass($classes)
|
237 |
-
{
|
238 |
-
$classes .= FACTORY_FLAT_ADMIN ? ' factory-flat ' : ' factory-volumetric ';
|
239 |
-
|
240 |
-
return $classes;
|
241 |
-
}
|
242 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* This file manages assets of the Factory Bootstap.
|
4 |
+
*
|
5 |
+
* @author Alex Kovalev <alex@byonepress.com>
|
6 |
+
* @author Paul Kashtanoff <paul@byonepress.com>
|
7 |
+
* @since 1.0.0
|
8 |
+
* @package factory-bootstrap
|
9 |
+
* @copyright (c) 2018, OnePress Ltd
|
10 |
+
*
|
11 |
+
*/
|
12 |
+
|
13 |
+
// Exit if accessed directly
|
14 |
+
if( !defined('ABSPATH') ) {
|
15 |
+
exit;
|
16 |
+
}
|
17 |
+
|
18 |
+
/**
|
19 |
+
* The Bootstrap Manager class.
|
20 |
+
*
|
21 |
+
* @since 3.2.0
|
22 |
+
*/
|
23 |
+
class Wbcr_FactoryBootstrap461_Manager {
|
24 |
+
|
25 |
+
/**
|
26 |
+
* A plugin for which the manager was created.
|
27 |
+
*
|
28 |
+
* @since 3.2.0
|
29 |
+
* @var Wbcr_Factory460_Plugin
|
30 |
+
*/
|
31 |
+
public $plugin;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Contains scripts to include.
|
35 |
+
*
|
36 |
+
* @since 3.2.0
|
37 |
+
* @var string[]
|
38 |
+
*/
|
39 |
+
public $scripts = [];
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Contains styles to include.
|
43 |
+
*
|
44 |
+
* @since 3.2.0
|
45 |
+
* @var string[]
|
46 |
+
*/
|
47 |
+
public $styles = [];
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Createas a new instance of the license api for a given plugin.
|
51 |
+
*
|
52 |
+
* @since 1.0.0
|
53 |
+
*/
|
54 |
+
public function __construct(Wbcr_Factory460_Plugin $plugin)
|
55 |
+
{
|
56 |
+
$this->plugin = $plugin;
|
57 |
+
|
58 |
+
add_action('admin_enqueue_scripts', [$this, 'loadAssets']);
|
59 |
+
add_filter('admin_body_class', [$this, 'adminBodyClass']);
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Includes the Bootstrap scripts.
|
64 |
+
*
|
65 |
+
* @param array|string $scripts
|
66 |
+
* @since 3.2.0
|
67 |
+
*
|
68 |
+
*/
|
69 |
+
public function enqueueScript($scripts)
|
70 |
+
{
|
71 |
+
if( is_array($scripts) ) {
|
72 |
+
foreach($scripts as $script) {
|
73 |
+
if( !in_array($script, $this->scripts) ) {
|
74 |
+
$this->scripts[] = $script;
|
75 |
+
}
|
76 |
+
}
|
77 |
+
} else {
|
78 |
+
if( !in_array($scripts, $this->scripts) ) {
|
79 |
+
$this->scripts[] = $scripts;
|
80 |
+
}
|
81 |
+
}
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* * Includes the Bootstrap styles.
|
86 |
+
*
|
87 |
+
* @param array|string $styles
|
88 |
+
* @since 3.2.0
|
89 |
+
*
|
90 |
+
*/
|
91 |
+
public function enqueueStyle($styles)
|
92 |
+
{
|
93 |
+
|
94 |
+
if( is_array($styles) ) {
|
95 |
+
foreach($styles as $style) {
|
96 |
+
if( !in_array($style, $this->styles) ) {
|
97 |
+
$this->styles[] = $style;
|
98 |
+
}
|
99 |
+
}
|
100 |
+
} else {
|
101 |
+
if( !in_array($styles, $this->styles) ) {
|
102 |
+
$this->styles[] = $styles;
|
103 |
+
}
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Loads Bootstrap assets.
|
109 |
+
*
|
110 |
+
* @return void
|
111 |
+
* @since 3.2.0
|
112 |
+
* @see admin_enqueue_scripts
|
113 |
+
*
|
114 |
+
*/
|
115 |
+
public function loadAssets($hook)
|
116 |
+
{
|
117 |
+
|
118 |
+
do_action('wbcr_factory_460_bootstrap_enqueue_scripts', $hook);
|
119 |
+
do_action('wbcr_factory_460_bootstrap_enqueue_scripts_' . $this->plugin->getPluginName(), $hook);
|
120 |
+
|
121 |
+
$dependencies = [];
|
122 |
+
if( !empty($this->scripts) ) {
|
123 |
+
$dependencies[] = 'jquery';
|
124 |
+
$dependencies[] = 'jquery-ui-core';
|
125 |
+
$dependencies[] = 'jquery-ui-widget';
|
126 |
+
}
|
127 |
+
|
128 |
+
foreach($this->scripts as $script) {
|
129 |
+
switch( $script ) {
|
130 |
+
case 'plugin.iris':
|
131 |
+
$dependencies[] = 'jquery-ui-widget';
|
132 |
+
$dependencies[] = 'jquery-ui-slider';
|
133 |
+
$dependencies[] = 'jquery-ui-draggable';
|
134 |
+
break;
|
135 |
+
}
|
136 |
+
}
|
137 |
+
|
138 |
+
if( !empty($this->scripts) ) {
|
139 |
+
$this->enqueueScripts($this->scripts, 'js', $dependencies);
|
140 |
+
}
|
141 |
+
if( !empty($this->styles) ) {
|
142 |
+
$this->enqueueScripts($this->styles, 'css', $dependencies);
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* @param array $scripts
|
148 |
+
* @param string $type
|
149 |
+
* @param array $dependencies
|
150 |
+
*/
|
151 |
+
protected function enqueueScripts(array $scripts, $type, array $dependencies)
|
152 |
+
{
|
153 |
+
|
154 |
+
$is_first = true;
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Sets permission for file caching and combining into one file.
|
158 |
+
*
|
159 |
+
* @since 4.1.0
|
160 |
+
*/
|
161 |
+
$cache_enable = apply_filters('wbcr/factory/bootstrap/cache_enable', true);
|
162 |
+
|
163 |
+
$cache_id = md5(implode(',', $this->scripts) . $type . $this->plugin->getPluginVersion());
|
164 |
+
$cache_dir_path = FACTORY_BOOTSTRAP_461_DIR . '/assets/cache/';
|
165 |
+
$cache_dir_url = FACTORY_BOOTSTRAP_461_URL . '/assets/cache/';
|
166 |
+
|
167 |
+
$cache_filepath = $cache_dir_path . $cache_id . ".min." . $type;
|
168 |
+
$cache_fileurl = $cache_dir_url . $cache_id . ".min." . $type;
|
169 |
+
|
170 |
+
if( $cache_enable && file_exists($cache_filepath) ) {
|
171 |
+
if( $type == 'js' ) {
|
172 |
+
wp_enqueue_script('wbcr-factory-bootstrap-cached', $cache_fileurl, $dependencies, $this->plugin->getPluginVersion());
|
173 |
+
} else {
|
174 |
+
wp_enqueue_style('wbcr-factory-bootstrap-cached', $cache_fileurl, [], $this->plugin->getPluginVersion());
|
175 |
+
}
|
176 |
+
} else {
|
177 |
+
$cache_dir_exists = false;
|
178 |
+
if( !file_exists($cache_dir_path) ) {
|
179 |
+
if( @mkdir($cache_dir_path, 0755) && wp_is_writable($cache_dir_path) ) {
|
180 |
+
$cache_dir_exists = true;
|
181 |
+
}
|
182 |
+
} else {
|
183 |
+
if( wp_is_writable($cache_dir_path) ) {
|
184 |
+
$cache_dir_exists = true;
|
185 |
+
}
|
186 |
+
}
|
187 |
+
|
188 |
+
$concat_files = [];
|
189 |
+
foreach($scripts as $script_to_load) {
|
190 |
+
$script_to_load = sanitize_text_field($script_to_load);
|
191 |
+
if( $cache_enable && $cache_dir_exists ) {
|
192 |
+
$fname = FACTORY_BOOTSTRAP_461_DIR . "/assets/$type-min/$script_to_load.min." . $type;
|
193 |
+
if( file_exists($fname) ) {
|
194 |
+
$f = @fopen($fname, 'r');
|
195 |
+
$concat_files[] = @fread($f, filesize($fname));
|
196 |
+
@fclose($f);
|
197 |
+
}
|
198 |
+
} else {
|
199 |
+
if( $type == 'js' ) {
|
200 |
+
wp_enqueue_script(md5($script_to_load), FACTORY_BOOTSTRAP_461_URL . "/assets/$type-min/$script_to_load.min." . $type, $is_first ? $dependencies : false, $this->plugin->getPluginVersion());
|
201 |
+
} else {
|
202 |
+
wp_enqueue_style(md5($script_to_load), FACTORY_BOOTSTRAP_461_URL . "/assets/$type-min/$script_to_load.min." . $type, [], $this->plugin->getPluginVersion());
|
203 |
+
}
|
204 |
+
$is_first = false;
|
205 |
+
}
|
206 |
+
}
|
207 |
+
|
208 |
+
if( $cache_enable && $cache_dir_exists && !empty($concat_files) ) {
|
209 |
+
|
210 |
+
$cf = @fopen($cache_filepath, 'w');
|
211 |
+
$write_content = implode(PHP_EOL, $concat_files);
|
212 |
+
@fwrite($cf, $write_content);
|
213 |
+
@fclose($cf);
|
214 |
+
chmod($cache_filepath, 0755);
|
215 |
+
|
216 |
+
if( file_exists($cache_filepath) ) {
|
217 |
+
if( $type == 'js' ) {
|
218 |
+
wp_enqueue_script('wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, $dependencies, $this->plugin->getPluginVersion());
|
219 |
+
} else {
|
220 |
+
wp_enqueue_style('wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, [], $this->plugin->getPluginVersion());
|
221 |
+
}
|
222 |
+
}
|
223 |
+
}
|
224 |
+
}
|
225 |
+
}
|
226 |
+
|
227 |
+
/**
|
228 |
+
* Adds the body classes: 'factory-flat or 'factory-volumetric'.
|
229 |
+
*
|
230 |
+
* @param string $classes
|
231 |
+
*
|
232 |
+
* @return string
|
233 |
+
* @since 3.2.0
|
234 |
+
*
|
235 |
+
*/
|
236 |
+
public function adminBodyClass($classes)
|
237 |
+
{
|
238 |
+
$classes .= FACTORY_FLAT_ADMIN ? ' factory-flat ' : ' factory-volumetric ';
|
239 |
+
|
240 |
+
return $classes;
|
241 |
+
}
|
242 |
+
}
|
libs/factory/bootstrap/includes/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
// Silence is golden.
|
1 |
+
<?php
|
2 |
// Silence is golden.
|
libs/factory/bootstrap/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
// Silence is golden.
|
1 |
+
<?php
|
2 |
// Silence is golden.
|
libs/factory/bootstrap/package-lock.json
CHANGED
@@ -1,1810 +1,1810 @@
|
|
1 |
-
{
|
2 |
-
"name": "bootstrap-generator",
|
3 |
-
"version": "1.0.1",
|
4 |
-
"lockfileVersion": 1,
|
5 |
-
"requires": true,
|
6 |
-
"dependencies": {
|
7 |
-
"abbrev": {
|
8 |
-
"version": "1.1.1",
|
9 |
-
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
|
10 |
-
"integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg="
|
11 |
-
},
|
12 |
-
"amdefine": {
|
13 |
-
"version": "1.0.1",
|
14 |
-
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
|
15 |
-
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
|
16 |
-
"dev": true
|
17 |
-
},
|
18 |
-
"argparse": {
|
19 |
-
"version": "0.1.16",
|
20 |
-
"resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz",
|
21 |
-
"integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=",
|
22 |
-
"dev": true,
|
23 |
-
"requires": {
|
24 |
-
"underscore": "~1.7.0",
|
25 |
-
"underscore.string": "~2.4.0"
|
26 |
-
},
|
27 |
-
"dependencies": {
|
28 |
-
"underscore.string": {
|
29 |
-
"version": "2.4.0",
|
30 |
-
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz",
|
31 |
-
"integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=",
|
32 |
-
"dev": true
|
33 |
-
}
|
34 |
-
}
|
35 |
-
},
|
36 |
-
"arr-diff": {
|
37 |
-
"version": "4.0.0",
|
38 |
-
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
39 |
-
"integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
|
40 |
-
},
|
41 |
-
"arr-flatten": {
|
42 |
-
"version": "1.1.0",
|
43 |
-
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
|
44 |
-
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
|
45 |
-
},
|
46 |
-
"arr-union": {
|
47 |
-
"version": "3.1.0",
|
48 |
-
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
|
49 |
-
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
|
50 |
-
},
|
51 |
-
"array-each": {
|
52 |
-
"version": "1.0.1",
|
53 |
-
"resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
|
54 |
-
"integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
|
55 |
-
},
|
56 |
-
"array-slice": {
|
57 |
-
"version": "1.1.0",
|
58 |
-
"resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
|
59 |
-
"integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
|
60 |
-
},
|
61 |
-
"array-unique": {
|
62 |
-
"version": "0.3.2",
|
63 |
-
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
|
64 |
-
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
|
65 |
-
},
|
66 |
-
"assign-symbols": {
|
67 |
-
"version": "1.0.0",
|
68 |
-
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
|
69 |
-
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
|
70 |
-
},
|
71 |
-
"async": {
|
72 |
-
"version": "0.1.22",
|
73 |
-
"resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
|
74 |
-
"integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=",
|
75 |
-
"dev": true
|
76 |
-
},
|
77 |
-
"atob": {
|
78 |
-
"version": "2.1.2",
|
79 |
-
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
|
80 |
-
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
|
81 |
-
},
|
82 |
-
"base": {
|
83 |
-
"version": "0.11.2",
|
84 |
-
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
|
85 |
-
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
|
86 |
-
"requires": {
|
87 |
-
"cache-base": "^1.0.1",
|
88 |
-
"class-utils": "^0.3.5",
|
89 |
-
"component-emitter": "^1.2.1",
|
90 |
-
"define-property": "^1.0.0",
|
91 |
-
"isobject": "^3.0.1",
|
92 |
-
"mixin-deep": "^1.2.0",
|
93 |
-
"pascalcase": "^0.1.1"
|
94 |
-
},
|
95 |
-
"dependencies": {
|
96 |
-
"define-property": {
|
97 |
-
"version": "1.0.0",
|
98 |
-
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
|
99 |
-
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
|
100 |
-
"requires": {
|
101 |
-
"is-descriptor": "^1.0.0"
|
102 |
-
}
|
103 |
-
},
|
104 |
-
"is-accessor-descriptor": {
|
105 |
-
"version": "1.0.0",
|
106 |
-
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
|
107 |
-
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
|
108 |
-
"requires": {
|
109 |
-
"kind-of": "^6.0.0"
|
110 |
-
}
|
111 |
-
},
|
112 |
-
"is-data-descriptor": {
|
113 |
-
"version": "1.0.0",
|
114 |
-
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
|
115 |
-
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
|
116 |
-
"requires": {
|
117 |
-
"kind-of": "^6.0.0"
|
118 |
-
}
|
119 |
-
},
|
120 |
-
"is-descriptor": {
|
121 |
-
"version": "1.0.2",
|
122 |
-
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
|
123 |
-
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
|
124 |
-
"requires": {
|
125 |
-
"is-accessor-descriptor": "^1.0.0",
|
126 |
-
"is-data-descriptor": "^1.0.0",
|
127 |
-
"kind-of": "^6.0.2"
|
128 |
-
}
|
129 |
-
}
|
130 |
-
}
|
131 |
-
},
|
132 |
-
"braces": {
|
133 |
-
"version": "2.3.2",
|
134 |
-
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
|
135 |
-
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
|
136 |
-
"requires": {
|
137 |
-
"arr-flatten": "^1.1.0",
|
138 |
-
"array-unique": "^0.3.2",
|
139 |
-
"extend-shallow": "^2.0.1",
|
140 |
-
"fill-range": "^4.0.0",
|
141 |
-
"isobject": "^3.0.1",
|
142 |
-
"repeat-element": "^1.1.2",
|
143 |
-
"snapdragon": "^0.8.1",
|
144 |
-
"snapdragon-node": "^2.0.1",
|
145 |
-
"split-string": "^3.0.2",
|
146 |
-
"to-regex": "^3.0.1"
|
147 |
-
},
|
148 |
-
"dependencies": {
|
149 |
-
"extend-shallow": {
|
150 |
-
"version": "2.0.1",
|
151 |
-
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
152 |
-
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
153 |
-
"requires": {
|
154 |
-
"is-extendable": "^0.1.0"
|
155 |
-
}
|
156 |
-
}
|
157 |
-
}
|
158 |
-
},
|
159 |
-
"cache-base": {
|
160 |
-
"version": "1.0.1",
|
161 |
-
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
|
162 |
-
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
|
163 |
-
"requires": {
|
164 |
-
"collection-visit": "^1.0.0",
|
165 |
-
"component-emitter": "^1.2.1",
|
166 |
-
"get-value": "^2.0.6",
|
167 |
-
"has-value": "^1.0.0",
|
168 |
-
"isobject": "^3.0.1",
|
169 |
-
"set-value": "^2.0.0",
|
170 |
-
"to-object-path": "^0.3.0",
|
171 |
-
"union-value": "^1.0.0",
|
172 |
-
"unset-value": "^1.0.0"
|
173 |
-
}
|
174 |
-
},
|
175 |
-
"camelcase": {
|
176 |
-
"version": "1.2.1",
|
177 |
-
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
|
178 |
-
"integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
|
179 |
-
"dev": true
|
180 |
-
},
|
181 |
-
"class-utils": {
|
182 |
-
"version": "0.3.6",
|
183 |
-
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
|
184 |
-
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
|
185 |
-
"requires": {
|
186 |
-
"arr-union": "^3.1.0",
|
187 |
-
"define-property": "^0.2.5",
|
188 |
-
"isobject": "^3.0.0",
|
189 |
-
"static-extend": "^0.1.1"
|
190 |
-
},
|
191 |
-
"dependencies": {
|
192 |
-
"define-property": {
|
193 |
-
"version": "0.2.5",
|
194 |
-
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
195 |
-
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
196 |
-
"requires": {
|
197 |
-
"is-descriptor": "^0.1.0"
|
198 |
-
}
|
199 |
-
}
|
200 |
-
}
|
201 |
-
},
|
202 |
-
"clean-css": {
|
203 |
-
"version": "2.0.8",
|
204 |
-
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-2.0.8.tgz",
|
205 |
-
"integrity": "sha1-6TfN/cxXgaAIF67EB56Fs+wVeiA=",
|
206 |
-
"dev": true,
|
207 |
-
"requires": {
|
208 |
-
"commander": "2.0.x"
|
209 |
-
}
|
210 |
-
},
|
211 |
-
"cli": {
|
212 |
-
"version": "0.4.5",
|
213 |
-
"resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz",
|
214 |
-
"integrity": "sha1-ePlIXNFhtWbppsctcXDEJw6B22E=",
|
215 |
-
"dev": true,
|
216 |
-
"requires": {
|
217 |
-
"glob": ">= 3.1.4"
|
218 |
-
}
|
219 |
-
},
|
220 |
-
"coffee-script": {
|
221 |
-
"version": "1.3.3",
|
222 |
-
"resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz",
|
223 |
-
"integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=",
|
224 |
-
"dev": true
|
225 |
-
},
|
226 |
-
"collection-visit": {
|
227 |
-
"version": "1.0.0",
|
228 |
-
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
|
229 |
-
"integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
|
230 |
-
"requires": {
|
231 |
-
"map-visit": "^1.0.0",
|
232 |
-
"object-visit": "^1.0.0"
|
233 |
-
}
|
234 |
-
},
|
235 |
-
"colors": {
|
236 |
-
"version": "0.6.2",
|
237 |
-
"resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
|
238 |
-
"integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=",
|
239 |
-
"dev": true
|
240 |
-
},
|
241 |
-
"commander": {
|
242 |
-
"version": "2.0.0",
|
243 |
-
"resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz",
|
244 |
-
"integrity": "sha1-0bhvkB+LZL2UG96tr5JFMDk76Sg=",
|
245 |
-
"dev": true
|
246 |
-
},
|
247 |
-
"component-emitter": {
|
248 |
-
"version": "1.3.0",
|
249 |
-
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
250 |
-
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
|
251 |
-
},
|
252 |
-
"console-browserify": {
|
253 |
-
"version": "0.1.6",
|
254 |
-
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz",
|
255 |
-
"integrity": "sha1-0SijwLuINQ61YmxufHGm8P1ImDw=",
|
256 |
-
"dev": true
|
257 |
-
},
|
258 |
-
"copy-descriptor": {
|
259 |
-
"version": "0.1.1",
|
260 |
-
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
|
261 |
-
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
|
262 |
-
},
|
263 |
-
"dateformat": {
|
264 |
-
"version": "1.0.2-1.2.3",
|
265 |
-
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz",
|
266 |
-
"integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=",
|
267 |
-
"dev": true
|
268 |
-
},
|
269 |
-
"debug": {
|
270 |
-
"version": "2.6.9",
|
271 |
-
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
272 |
-
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
273 |
-
"requires": {
|
274 |
-
"ms": "2.0.0"
|
275 |
-
}
|
276 |
-
},
|
277 |
-
"decamelize": {
|
278 |
-
"version": "1.2.0",
|
279 |
-
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
280 |
-
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
|
281 |
-
"dev": true
|
282 |
-
},
|
283 |
-
"decode-uri-component": {
|
284 |
-
"version": "0.2.0",
|
285 |
-
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
|
286 |
-
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
|
287 |
-
},
|
288 |
-
"define-property": {
|
289 |
-
"version": "2.0.2",
|
290 |
-
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
|
291 |
-
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
|
292 |
-
"requires": {
|
293 |
-
"is-descriptor": "^1.0.2",
|
294 |
-
"isobject": "^3.0.1"
|
295 |
-
},
|
296 |
-
"dependencies": {
|
297 |
-
"is-accessor-descriptor": {
|
298 |
-
"version": "1.0.0",
|
299 |
-
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
|
300 |
-
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
|
301 |
-
"requires": {
|
302 |
-
"kind-of": "^6.0.0"
|
303 |
-
}
|
304 |
-
},
|
305 |
-
"is-data-descriptor": {
|
306 |
-
"version": "1.0.0",
|
307 |
-
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
|
308 |
-
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
|
309 |
-
"requires": {
|
310 |
-
"kind-of": "^6.0.0"
|
311 |
-
}
|
312 |
-
},
|
313 |
-
"is-descriptor": {
|
314 |
-
"version": "1.0.2",
|
315 |
-
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
|
316 |
-
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
|
317 |
-
"requires": {
|
318 |
-
"is-accessor-descriptor": "^1.0.0",
|
319 |
-
"is-data-descriptor": "^1.0.0",
|
320 |
-
"kind-of": "^6.0.2"
|
321 |
-
}
|
322 |
-
}
|
323 |
-
}
|
324 |
-
},
|
325 |
-
"detect-file": {
|
326 |
-
"version": "1.0.0",
|
327 |
-
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
|
328 |
-
"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
|
329 |
-
},
|
330 |
-
"esprima": {
|
331 |
-
"version": "1.0.4",
|
332 |
-
"resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
|
333 |
-
"integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
|
334 |
-
"dev": true
|
335 |
-
},
|
336 |
-
"eventemitter2": {
|
337 |
-
"version": "0.4.14",
|
338 |
-
"resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
|
339 |
-
"integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
|
340 |
-
"dev": true
|
341 |
-
},
|
342 |
-
"exit": {
|
343 |
-
"version": "0.1.2",
|
344 |
-
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
|
345 |
-
"integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
|
346 |
-
"dev": true
|
347 |
-
},
|
348 |
-
"expand-brackets": {
|
349 |
-
"version": "2.1.4",
|
350 |
-
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
|
351 |
-
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
|
352 |
-
"requires": {
|
353 |
-
"debug": "^2.3.3",
|
354 |
-
"define-property": "^0.2.5",
|
355 |
-
"extend-shallow": "^2.0.1",
|
356 |
-
"posix-character-classes": "^0.1.0",
|
357 |
-
"regex-not": "^1.0.0",
|
358 |
-
"snapdragon": "^0.8.1",
|
359 |
-
"to-regex": "^3.0.1"
|
360 |
-
},
|
361 |
-
"dependencies": {
|
362 |
-
"define-property": {
|
363 |
-
"version": "0.2.5",
|
364 |
-
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
365 |
-
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
366 |
-
"requires": {
|
367 |
-
"is-descriptor": "^0.1.0"
|
368 |
-
}
|
369 |
-
},
|
370 |
-
"extend-shallow": {
|
371 |
-
"version": "2.0.1",
|
372 |
-
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
373 |
-
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
374 |
-
"requires": {
|
375 |
-
"is-extendable": "^0.1.0"
|
376 |
-
}
|
377 |
-
}
|
378 |
-
}
|
379 |
-
},
|
380 |
-
"expand-tilde": {
|
381 |
-
"version": "2.0.2",
|
382 |
-
"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
|
383 |
-
"integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
|
384 |
-
"requires": {
|
385 |
-
"homedir-polyfill": "^1.0.1"
|
386 |
-
}
|
387 |
-
},
|
388 |
-
"extend": {
|
389 |
-
"version": "3.0.2",
|
390 |
-
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
391 |
-
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
392 |
-
},
|
393 |
-
"extend-shallow": {
|
394 |
-
"version": "3.0.2",
|
395 |
-
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
|
396 |
-
"integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
|
397 |
-
"requires": {
|
398 |
-
"assign-symbols": "^1.0.0",
|
399 |
-
"is-extendable": "^1.0.1"
|
400 |
-
},
|
401 |
-
"dependencies": {
|
402 |
-
"is-extendable": {
|
403 |
-
"version": "1.0.1",
|
404 |
-
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
|
405 |
-
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
|
406 |
-
"requires": {
|
407 |
-
"is-plain-object": "^2.0.4"
|
408 |
-
}
|
409 |
-
}
|
410 |
-
}
|
411 |
-
},
|
412 |
-
"extglob": {
|
413 |
-
"version": "2.0.4",
|
414 |
-
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
|
415 |
-
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
|
416 |
-
"requires": {
|
417 |
-
"array-unique": "^0.3.2",
|
418 |
-
"define-property": "^1.0.0",
|
419 |
-
"expand-brackets": "^2.1.4",
|
420 |
-
"extend-shallow": "^2.0.1",
|
421 |
-
"fragment-cache": "^0.2.1",
|
422 |
-
"regex-not": "^1.0.0",
|
423 |
-
"snapdragon": "^0.8.1",
|
424 |
-
"to-regex": "^3.0.1"
|
425 |
-
},
|
426 |
-
"dependencies": {
|
427 |
-
"define-property": {
|
428 |
-
"version": "1.0.0",
|
429 |
-
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
|
430 |
-
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
|
431 |
-
"requires": {
|
432 |
-
"is-descriptor": "^1.0.0"
|
433 |
-
}
|
434 |
-
},
|
435 |
-
"extend-shallow": {
|
436 |
-
"version": "2.0.1",
|
437 |
-
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
438 |
-
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
439 |
-
"requires": {
|
440 |
-
"is-extendable": "^0.1.0"
|
441 |
-
}
|
442 |
-
},
|
443 |
-
"is-accessor-descriptor": {
|
444 |
-
"version": "1.0.0",
|
445 |
-
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
|
446 |
-
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
|
447 |
-
"requires": {
|
448 |
-
"kind-of": "^6.0.0"
|
449 |
-
}
|
450 |
-
},
|
451 |
-
"is-data-descriptor": {
|
452 |
-
"version": "1.0.0",
|
453 |
-
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
|
454 |
-
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
|
455 |
-
"requires": {
|
456 |
-
"kind-of": "^6.0.0"
|
457 |
-
}
|
458 |
-
},
|
459 |
-
"is-descriptor": {
|
460 |
-
"version": "1.0.2",
|
461 |
-
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
|
462 |
-
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
|
463 |
-
"requires": {
|
464 |
-
"is-accessor-descriptor": "^1.0.0",
|
465 |
-
"is-data-descriptor": "^1.0.0",
|
466 |
-
"kind-of": "^6.0.2"
|
467 |
-
}
|
468 |
-
}
|
469 |
-
}
|
470 |
-
},
|
471 |
-
"fill-range": {
|
472 |
-
"version": "4.0.0",
|
473 |
-
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
|
474 |
-
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
|
475 |
-
"requires": {
|
476 |
-
"extend-shallow": "^2.0.1",
|
477 |
-
"is-number": "^3.0.0",
|
478 |
-
"repeat-string": "^1.6.1",
|
479 |
-
"to-regex-range": "^2.1.0"
|
480 |
-
},
|
481 |
-
"dependencies": {
|
482 |
-
"extend-shallow": {
|
483 |
-
"version": "2.0.1",
|
484 |
-
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
485 |
-
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
486 |
-
"requires": {
|
487 |
-
"is-extendable": "^0.1.0"
|
488 |
-
}
|
489 |
-
}
|
490 |
-
}
|
491 |
-
},
|
492 |
-
"findup-sync": {
|
493 |
-
"version": "0.1.3",
|
494 |
-
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz",
|
495 |
-
"integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=",
|
496 |
-
"dev": true,
|
497 |
-
"requires": {
|
498 |
-
"glob": "~3.2.9",
|
499 |
-
"lodash": "~2.4.1"
|
500 |
-
},
|
501 |
-
"dependencies": {
|
502 |
-
"glob": {
|
503 |
-
"version": "3.2.11",
|
504 |
-
"resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
|
505 |
-
"integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
|
506 |
-
"dev": true,
|
507 |
-
"requires": {
|
508 |
-
"inherits": "2",
|
509 |
-
"minimatch": "0.3"
|
510 |
-
}
|
511 |
-
},
|
512 |
-
"lodash": {
|
513 |
-
"version": "2.4.2",
|
514 |
-
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
|
515 |
-
"integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
|
516 |
-
"dev": true
|
517 |
-
},
|
518 |
-
"minimatch": {
|
519 |
-
"version": "0.3.0",
|
520 |
-
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
|
521 |
-
"integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
|
522 |
-
"dev": true,
|
523 |
-
"requires": {
|
524 |
-
"lru-cache": "2",
|
525 |
-
"sigmund": "~1.0.0"
|
526 |
-
}
|
527 |
-
}
|
528 |
-
}
|
529 |
-
},
|
530 |
-
"fined": {
|
531 |
-
"version": "1.2.0",
|
532 |
-
"resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
|
533 |
-
"integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
|
534 |
-
"requires": {
|
535 |
-
"expand-tilde": "^2.0.2",
|
536 |
-
"is-plain-object": "^2.0.3",
|
537 |
-
"object.defaults": "^1.1.0",
|
538 |
-
"object.pick": "^1.2.0",
|
539 |
-
"parse-filepath": "^1.0.1"
|
540 |
-
}
|
541 |
-
},
|
542 |
-
"flagged-respawn": {
|
543 |
-
"version": "1.0.1",
|
544 |
-
"resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
|
545 |
-
"integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q=="
|
546 |
-
},
|
547 |
-
"for-in": {
|
548 |
-
"version": "1.0.2",
|
549 |
-
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
|
550 |
-
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
|
551 |
-
},
|
552 |
-
"for-own": {
|
553 |
-
"version": "1.0.0",
|
554 |
-
"resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
|
555 |
-
"integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
|
556 |
-
"requires": {
|
557 |
-
"for-in": "^1.0.1"
|
558 |
-
}
|
559 |
-
},
|
560 |
-
"fragment-cache": {
|
561 |
-
"version": "0.2.1",
|
562 |
-
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
|
563 |
-
"integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
|
564 |
-
"requires": {
|
565 |
-
"map-cache": "^0.2.2"
|
566 |
-
}
|
567 |
-
},
|
568 |
-
"function-bind": {
|
569 |
-
"version": "1.1.1",
|
570 |
-
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
571 |
-
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
572 |
-
},
|
573 |
-
"get-value": {
|
574 |
-
"version": "2.0.6",
|
575 |
-
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
|
576 |
-
"integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
|
577 |
-
},
|
578 |
-
"getobject": {
|
579 |
-
"version": "0.1.0",
|
580 |
-
"resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
|
581 |
-
"integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
|
582 |
-
"dev": true
|
583 |
-
},
|
584 |
-
"glob": {
|
585 |
-
"version": "3.1.21",
|
586 |
-
"resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
|
587 |
-
"integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
|
588 |
-
"dev": true,
|
589 |
-
"requires": {
|
590 |
-
"graceful-fs": "~1.2.0",
|
591 |
-
"inherits": "1",
|
592 |
-
"minimatch": "~0.2.11"
|
593 |
-
},
|
594 |
-
"dependencies": {
|
595 |
-
"inherits": {
|
596 |
-
"version": "1.0.2",
|
597 |
-
"resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
|
598 |
-
"integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
|
599 |
-
"dev": true
|
600 |
-
}
|
601 |
-
}
|
602 |
-
},
|
603 |
-
"global-modules": {
|
604 |
-
"version": "1.0.0",
|
605 |
-
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
|
606 |
-
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
|
607 |
-
"requires": {
|
608 |
-
"global-prefix": "^1.0.1",
|
609 |
-
"is-windows": "^1.0.1",
|
610 |
-
"resolve-dir": "^1.0.0"
|
611 |
-
}
|
612 |
-
},
|
613 |
-
"global-prefix": {
|
614 |
-
"version": "1.0.2",
|
615 |
-
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
|
616 |
-
"integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
|
617 |
-
"requires": {
|
618 |
-
"expand-tilde": "^2.0.2",
|
619 |
-
"homedir-polyfill": "^1.0.1",
|
620 |
-
"ini": "^1.3.4",
|
621 |
-
"is-windows": "^1.0.1",
|
622 |
-
"which": "^1.2.14"
|
623 |
-
},
|
624 |
-
"dependencies": {
|
625 |
-
"which": {
|
626 |
-
"version": "1.3.1",
|
627 |
-
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
628 |
-
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
|
629 |
-
"requires": {
|
630 |
-
"isexe": "^2.0.0"
|
631 |
-
}
|
632 |
-
}
|
633 |
-
}
|
634 |
-
},
|
635 |
-
"graceful-fs": {
|
636 |
-
"version": "1.2.3",
|
637 |
-
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
|
638 |
-
"integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
|
639 |
-
"dev": true
|
640 |
-
},
|
641 |
-
"grunt": {
|
642 |
-
"version": "0.4.5",
|
643 |
-
"resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz",
|
644 |
-
"integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=",
|
645 |
-
"dev": true,
|
646 |
-
"requires": {
|
647 |
-
"async": "~0.1.22",
|
648 |
-
"coffee-script": "~1.3.3",
|
649 |
-
"colors": "~0.6.2",
|
650 |
-
"dateformat": "1.0.2-1.2.3",
|
651 |
-
"eventemitter2": "~0.4.13",
|
652 |
-
"exit": "~0.1.1",
|
653 |
-
"findup-sync": "~0.1.2",
|
654 |
-
"getobject": "~0.1.0",
|
655 |
-
"glob": "~3.1.21",
|
656 |
-
"grunt-legacy-log": "~0.1.0",
|
657 |
-
"grunt-legacy-util": "~0.2.0",
|
658 |
-
"hooker": "~0.2.3",
|
659 |
-
"iconv-lite": "~0.2.11",
|
660 |
-
"js-yaml": "~2.0.5",
|
661 |
-
"lodash": "~0.9.2",
|
662 |
-
"minimatch": "~0.2.12",
|
663 |
-
"nopt": "~1.0.10",
|
664 |
-
"rimraf": "~2.2.8",
|
665 |
-
"underscore.string": "~2.2.1",
|
666 |
-
"which": "~1.0.5"
|
667 |
-
}
|
668 |
-
},
|
669 |
-
"grunt-cli": {
|
670 |
-
"version": "1.3.2",
|
671 |
-
"resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.2.tgz",
|
672 |
-
"integrity": "sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ==",
|
673 |
-
"requires": {
|
674 |
-
"grunt-known-options": "~1.1.0",
|
675 |
-
"interpret": "~1.1.0",
|
676 |
-
"liftoff": "~2.5.0",
|
677 |
-
"nopt": "~4.0.1",
|
678 |
-
"v8flags": "~3.1.1"
|
679 |
-
},
|
680 |
-
"dependencies": {
|
681 |
-
"nopt": {
|
682 |
-
"version": "4.0.3",
|
683 |
-
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
|
684 |
-
"integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
|
685 |
-
"requires": {
|
686 |
-
"abbrev": "1",
|
687 |
-
"osenv": "^0.1.4"
|
688 |
-
}
|
689 |
-
}
|
690 |
-
}
|
691 |
-
},
|
692 |
-
"grunt-contrib-clean": {
|
693 |
-
"version": "0.5.0",
|
694 |
-
"resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.5.0.tgz",
|
695 |
-
"integrity": "sha1-9T397ghJsce0Dp67umn0jExgecU=",
|
696 |
-
"dev": true,
|
697 |
-
"requires": {
|
698 |
-
"rimraf": "~2.2.1"
|
699 |
-
}
|
700 |
-
},
|
701 |
-
"grunt-contrib-concat": {
|
702 |
-
"version": "0.3.0",
|
703 |
-
"resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.3.0.tgz",
|
704 |
-
"integrity": "sha1-SPoNQzbSm2U62CJaa9b4VrRIPjI=",
|
705 |
-
"dev": true
|
706 |
-
},
|
707 |
-
"grunt-contrib-copy": {
|
708 |
-
"version": "0.5.0",
|
709 |
-
"resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-0.5.0.tgz",
|
710 |
-
"integrity": "sha1-QQB1rEWlhWuhkbHMclclRQ1KAhU=",
|
711 |
-
"dev": true
|
712 |
-
},
|
713 |
-
"grunt-contrib-cssmin": {
|
714 |
-
"version": "0.7.0",
|
715 |
-
"resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-0.7.0.tgz",
|
716 |
-
"integrity": "sha1-pXNenx0mMUnkn+A1KU5CnYxnC6s=",
|
717 |
-
"dev": true,
|
718 |
-
"requires": {
|
719 |
-
"clean-css": "~2.0.0",
|
720 |
-
"grunt-lib-contrib": "~0.6.0"
|
721 |
-
}
|
722 |
-
},
|
723 |
-
"grunt-contrib-jshint": {
|
724 |
-
"version": "0.6.5",
|
725 |
-
"resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz",
|
726 |
-
"integrity": "sha1-OvtGdnRTZMxKGe7nk0wOBgCLVm4=",
|
727 |
-
"dev": true,
|
728 |
-
"requires": {
|
729 |
-
"jshint": "~2.1.10"
|
730 |
-
}
|
731 |
-
},
|
732 |
-
"grunt-contrib-uglify": {
|
733 |
-
"version": "0.2.7",
|
734 |
-
"resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.2.7.tgz",
|
735 |
-
"integrity": "sha1-5r2lHgxAoUWfbOrUI8Ze/XJaG/c=",
|
736 |
-
"dev": true,
|
737 |
-
"requires": {
|
738 |
-
"grunt-lib-contrib": "~0.6.1",
|
739 |
-
"uglify-js": "~2.4.0"
|
740 |
-
}
|
741 |
-
},
|
742 |
-
"grunt-known-options": {
|
743 |
-
"version": "1.1.1",
|
744 |
-
"resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz",
|
745 |
-
"integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ=="
|
746 |
-
},
|
747 |
-
"grunt-legacy-log": {
|
748 |
-
"version": "0.1.3",
|
749 |
-
"resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz",
|
750 |
-
"integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=",
|
751 |
-
"dev": true,
|
752 |
-
"requires": {
|
753 |
-
"colors": "~0.6.2",
|
754 |
-
"grunt-legacy-log-utils": "~0.1.1",
|
755 |
-
"hooker": "~0.2.3",
|
756 |
-
"lodash": "~2.4.1",
|
757 |
-
"underscore.string": "~2.3.3"
|
758 |
-
},
|
759 |
-
"dependencies": {
|
760 |
-
"lodash": {
|
761 |
-
"version": "2.4.2",
|
762 |
-
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
|
763 |
-
"integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
|
764 |
-
"dev": true
|
765 |
-
},
|
766 |
-
"underscore.string": {
|
767 |
-
"version": "2.3.3",
|
768 |
-
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
|
769 |
-
"integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
|
770 |
-
"dev": true
|
771 |
-
}
|
772 |
-
}
|
773 |
-
},
|
774 |
-
"grunt-legacy-log-utils": {
|
775 |
-
"version": "0.1.1",
|
776 |
-
"resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz",
|
777 |
-
"integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=",
|
778 |
-
"dev": true,
|
779 |
-
"requires": {
|
780 |
-
"colors": "~0.6.2",
|
781 |
-
"lodash": "~2.4.1",
|
782 |
-
"underscore.string": "~2.3.3"
|
783 |
-
},
|
784 |
-
"dependencies": {
|
785 |
-
"lodash": {
|
786 |
-
"version": "2.4.2",
|
787 |
-
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
|
788 |
-
"integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
|
789 |
-
"dev": true
|
790 |
-
},
|
791 |
-
"underscore.string": {
|
792 |
-
"version": "2.3.3",
|
793 |
-
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
|
794 |
-
"integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
|
795 |
-
"dev": true
|
796 |
-
}
|
797 |
-
}
|
798 |
-
},
|
799 |
-
"grunt-legacy-util": {
|
800 |
-
"version": "0.2.0",
|
801 |
-
"resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz",
|
802 |
-
"integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=",
|
803 |
-
"dev": true,
|
804 |
-
"requires": {
|
805 |
-
"async": "~0.1.22",
|
806 |
-
"exit": "~0.1.1",
|
807 |
-
"getobject": "~0.1.0",
|
808 |
-
"hooker": "~0.2.3",
|
809 |
-
"lodash": "~0.9.2",
|
810 |
-
"underscore.string": "~2.2.1",
|
811 |
-
"which": "~1.0.5"
|
812 |
-
}
|
813 |
-
},
|
814 |
-
"grunt-lib-contrib": {
|
815 |
-
"version": "0.6.1",
|
816 |
-
"resolved": "https://registry.npmjs.org/grunt-lib-contrib/-/grunt-lib-contrib-0.6.1.tgz",
|
817 |
-
"integrity": "sha1-P1att9oG6BR5XuJBWw6+X7iQPrs=",
|
818 |
-
"dev": true,
|
819 |
-
"requires": {
|
820 |
-
"zlib-browserify": "0.0.1"
|
821 |
-
}
|
822 |
-
},
|
823 |
-
"grunt-preprocess": {
|
824 |
-
"version": "4.2.0",
|
825 |
-
"resolved": "https://registry.npmjs.org/grunt-preprocess/-/grunt-preprocess-4.2.0.tgz",
|
826 |
-
"integrity": "sha1-SJUTzet1A1NEmn9lbVAXWvc/FfY=",
|
827 |
-
"dev": true,
|
828 |
-
"requires": {
|
829 |
-
"preprocess": "~2.3.1"
|
830 |
-
}
|
831 |
-
},
|
832 |
-
"has": {
|
833 |
-
"version": "1.0.3",
|
834 |
-
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
|
835 |
-
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
|
836 |
-
"requires": {
|
837 |
-
"function-bind": "^1.1.1"
|
838 |
-
}
|
839 |
-
},
|
840 |
-
"has-value": {
|
841 |
-
"version": "1.0.0",
|
842 |
-
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
|
843 |
-
"integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
|
844 |
-
"requires": {
|
845 |
-
"get-value": "^2.0.6",
|
846 |
-
"has-values": "^1.0.0",
|
847 |
-
"isobject": "^3.0.0"
|
848 |
-
}
|
849 |
-
},
|
850 |
-
"has-values": {
|
851 |
-
"version": "1.0.0",
|
852 |
-
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
|
853 |
-
"integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
|
854 |
-
"requires": {
|
855 |
-
"is-number": "^3.0.0",
|
856 |
-
"kind-of": "^4.0.0"
|
857 |
-
},
|
858 |
-
"dependencies": {
|
859 |
-
"kind-of": {
|
860 |
-
"version": "4.0.0",
|
861 |
-
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
|
862 |
-
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
|
863 |
-
"requires": {
|
864 |
-
"is-buffer": "^1.1.5"
|
865 |
-
}
|
866 |
-
}
|
867 |
-
}
|
868 |
-
},
|
869 |
-
"homedir-polyfill": {
|
870 |
-
"version": "1.0.3",
|
871 |
-
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
|
872 |
-
"integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
|
873 |
-
"requires": {
|
874 |
-
"parse-passwd": "^1.0.0"
|
875 |
-
}
|
876 |
-
},
|
877 |
-
"hooker": {
|
878 |
-
"version": "0.2.3",
|
879 |
-
"resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
|
880 |
-
"integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
|
881 |
-
"dev": true
|
882 |
-
},
|
883 |
-
"iconv-lite": {
|
884 |
-
"version": "0.2.11",
|
885 |
-
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
|
886 |
-
"integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=",
|
887 |
-
"dev": true
|
888 |
-
},
|
889 |
-
"inherits": {
|
890 |
-
"version": "2.0.3",
|
891 |
-
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
892 |
-
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
|
893 |
-
"dev": true
|
894 |
-
},
|
895 |
-
"ini": {
|
896 |
-
"version": "1.3.5",
|
897 |
-
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
898 |
-
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
|
899 |
-
},
|
900 |
-
"interpret": {
|
901 |
-
"version": "1.1.0",
|
902 |
-
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
|
903 |
-
"integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ="
|
904 |
-
},
|
905 |
-
"is-absolute": {
|
906 |
-
"version": "1.0.0",
|
907 |
-
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
|
908 |
-
"integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
|
909 |
-
"requires": {
|
910 |
-
"is-relative": "^1.0.0",
|
911 |
-
"is-windows": "^1.0.1"
|
912 |
-
}
|
913 |
-
},
|
914 |
-
"is-accessor-descriptor": {
|
915 |
-
"version": "0.1.6",
|
916 |
-
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
917 |
-
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
|
918 |
-
"requires": {
|
919 |
-
"kind-of": "^3.0.2"
|
920 |
-
},
|
921 |
-
"dependencies": {
|
922 |
-
"kind-of": {
|
923 |
-
"version": "3.2.2",
|
924 |
-
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
925 |
-
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
926 |
-
"requires": {
|
927 |
-
"is-buffer": "^1.1.5"
|
928 |
-
}
|
929 |
-
}
|
930 |
-
}
|
931 |
-
},
|
932 |
-
"is-buffer": {
|
933 |
-
"version": "1.1.6",
|
934 |
-
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
|
935 |
-
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
|
936 |
-
},
|
937 |
-
"is-core-module": {
|
938 |
-
"version": "2.1.0",
|
939 |
-
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz",
|
940 |
-
"integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==",
|
941 |
-
"requires": {
|
942 |
-
"has": "^1.0.3"
|
943 |
-
}
|
944 |
-
},
|
945 |
-
"is-data-descriptor": {
|
946 |
-
"version": "0.1.4",
|
947 |
-
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
948 |
-
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
|
949 |
-
"requires": {
|
950 |
-
"kind-of": "^3.0.2"
|
951 |
-
},
|
952 |
-
"dependencies": {
|
953 |
-
"kind-of": {
|
954 |
-
"version": "3.2.2",
|
955 |
-
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
956 |
-
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
957 |
-
"requires": {
|
958 |
-
"is-buffer": "^1.1.5"
|
959 |
-
}
|
960 |
-
}
|
961 |
-
}
|
962 |
-
},
|
963 |
-
"is-descriptor": {
|
964 |
-
"version": "0.1.6",
|
965 |
-
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
|
966 |
-
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
|
967 |
-
"requires": {
|
968 |
-
"is-accessor-descriptor": "^0.1.6",
|
969 |
-
"is-data-descriptor": "^0.1.4",
|
970 |
-
"kind-of": "^5.0.0"
|
971 |
-
},
|
972 |
-
"dependencies": {
|
973 |
-
"kind-of": {
|
974 |
-
"version": "5.1.0",
|
975 |
-
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
|
976 |
-
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
|
977 |
-
}
|
978 |
-
}
|
979 |
-
},
|
980 |
-
"is-extendable": {
|
981 |
-
"version": "0.1.1",
|
982 |
-
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
|
983 |
-
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
|
984 |
-
},
|
985 |
-
"is-extglob": {
|
986 |
-
"version": "2.1.1",
|
987 |
-
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
988 |
-
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
|
989 |
-
},
|
990 |
-
"is-glob": {
|
991 |
-
"version": "3.1.0",
|
992 |
-
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
|
993 |
-
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
|
994 |
-
"requires": {
|
995 |
-
"is-extglob": "^2.1.0"
|
996 |
-
}
|
997 |
-
},
|
998 |
-
"is-number": {
|
999 |
-
"version": "3.0.0",
|
1000 |
-
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
|
1001 |
-
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
|
1002 |
-
"requires": {
|
1003 |
-
"kind-of": "^3.0.2"
|
1004 |
-
},
|
1005 |
-
"dependencies": {
|
1006 |
-
"kind-of": {
|
1007 |
-
"version": "3.2.2",
|
1008 |
-
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
1009 |
-
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
1010 |
-
"requires": {
|
1011 |
-
"is-buffer": "^1.1.5"
|
1012 |
-
}
|
1013 |
-
}
|
1014 |
-
}
|
1015 |
-
},
|
1016 |
-
"is-plain-object": {
|
1017 |
-
"version": "2.0.4",
|
1018 |
-
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
|
1019 |
-
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
|
1020 |
-
"requires": {
|
1021 |
-
"isobject": "^3.0.1"
|
1022 |
-
}
|
1023 |
-
},
|
1024 |
-
"is-relative": {
|
1025 |
-
"version": "1.0.0",
|
1026 |
-
"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
|
1027 |
-
"integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
|
1028 |
-
"requires": {
|
1029 |
-
"is-unc-path": "^1.0.0"
|
1030 |
-
}
|
1031 |
-
},
|
1032 |
-
"is-unc-path": {
|
1033 |
-
"version": "1.0.0",
|
1034 |
-
"resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
|
1035 |
-
"integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
|
1036 |
-
"requires": {
|
1037 |
-
"unc-path-regex": "^0.1.2"
|
1038 |
-
}
|
1039 |
-
},
|
1040 |
-
"is-windows": {
|
1041 |
-
"version": "1.0.2",
|
1042 |
-
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
|
1043 |
-
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
|
1044 |
-
},
|
1045 |
-
"isarray": {
|
1046 |
-
"version": "1.0.0",
|
1047 |
-
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
1048 |
-
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
1049 |
-
},
|
1050 |
-
"isexe": {
|
1051 |
-
"version": "2.0.0",
|
1052 |
-
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
1053 |
-
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
|
1054 |
-
},
|
1055 |
-
"isobject": {
|
1056 |
-
"version": "3.0.1",
|
1057 |
-
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
|
1058 |
-
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
|
1059 |
-
},
|
1060 |
-
"js-yaml": {
|
1061 |
-
"version": "2.0.5",
|
1062 |
-
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz",
|
1063 |
-
"integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=",
|
1064 |
-
"dev": true,
|
1065 |
-
"requires": {
|
1066 |
-
"argparse": "~ 0.1.11",
|
1067 |
-
"esprima": "~ 1.0.2"
|
1068 |
-
}
|
1069 |
-
},
|
1070 |
-
"jshint": {
|
1071 |
-
"version": "2.1.11",
|
1072 |
-
"resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz",
|
1073 |
-
"integrity": "sha1-61EI/vm6Xd67gwmD9XLSQuSeP5Y=",
|
1074 |
-
"dev": true,
|
1075 |
-
"requires": {
|
1076 |
-
"cli": "0.4.x",
|
1077 |
-
"console-browserify": "0.1.x",
|
1078 |
-
"minimatch": "0.x.x",
|
1079 |
-
"shelljs": "0.1.x",
|
1080 |
-
"underscore": "1.4.x"
|
1081 |
-
},
|
1082 |
-
"dependencies": {
|
1083 |
-
"underscore": {
|
1084 |
-
"version": "1.4.4",
|
1085 |
-
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
|
1086 |
-
"integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=",
|
1087 |
-
"dev": true
|
1088 |
-
}
|
1089 |
-
}
|
1090 |
-
},
|
1091 |
-
"kind-of": {
|
1092 |
-
"version": "6.0.3",
|
1093 |
-
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
|
1094 |
-
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
|
1095 |
-
},
|
1096 |
-
"liftoff": {
|
1097 |
-
"version": "2.5.0",
|
1098 |
-
"resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
|
1099 |
-
"integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
|
1100 |
-
"requires": {
|
1101 |
-
"extend": "^3.0.0",
|
1102 |
-
"findup-sync": "^2.0.0",
|
1103 |
-
"fined": "^1.0.1",
|
1104 |
-
"flagged-respawn": "^1.0.0",
|
1105 |
-
"is-plain-object": "^2.0.4",
|
1106 |
-
"object.map": "^1.0.0",
|
1107 |
-
"rechoir": "^0.6.2",
|
1108 |
-
"resolve": "^1.1.7"
|
1109 |
-
},
|
1110 |
-
"dependencies": {
|
1111 |
-
"findup-sync": {
|
1112 |
-
"version": "2.0.0",
|
1113 |
-
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
|
1114 |
-
"integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
|
1115 |
-
"requires": {
|
1116 |
-
"detect-file": "^1.0.0",
|
1117 |
-
"is-glob": "^3.1.0",
|
1118 |
-
"micromatch": "^3.0.4",
|
1119 |
-
"resolve-dir": "^1.0.1"
|
1120 |
-
}
|
1121 |
-
}
|
1122 |
-
}
|
1123 |
-
},
|
1124 |
-
"lodash": {
|
1125 |
-
"version": "0.9.2",
|
1126 |
-
"resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz",
|
1127 |
-
"integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=",
|
1128 |
-
"dev": true
|
1129 |
-
},
|
1130 |
-
"lru-cache": {
|
1131 |
-
"version": "2.7.3",
|
1132 |
-
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
|
1133 |
-
"integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
|
1134 |
-
"dev": true
|
1135 |
-
},
|
1136 |
-
"make-iterator": {
|
1137 |
-
"version": "1.0.1",
|
1138 |
-
"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
|
1139 |
-
"integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
|
1140 |
-
"requires": {
|
1141 |
-
"kind-of": "^6.0.2"
|
1142 |
-
}
|
1143 |
-
},
|
1144 |
-
"map-cache": {
|
1145 |
-
"version": "0.2.2",
|
1146 |
-
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
|
1147 |
-
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
|
1148 |
-
},
|
1149 |
-
"map-visit": {
|
1150 |
-
"version": "1.0.0",
|
1151 |
-
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
|
1152 |
-
"integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
|
1153 |
-
"requires": {
|
1154 |
-
"object-visit": "^1.0.0"
|
1155 |
-
}
|
1156 |
-
},
|
1157 |
-
"micromatch": {
|
1158 |
-
"version": "3.1.10",
|
1159 |
-
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
|
1160 |
-
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
|
1161 |
-
"requires": {
|
1162 |
-
"arr-diff": "^4.0.0",
|
1163 |
-
"array-unique": "^0.3.2",
|
1164 |
-
"braces": "^2.3.1",
|
1165 |
-
"define-property": "^2.0.2",
|
1166 |
-
"extend-shallow": "^3.0.2",
|
1167 |
-
"extglob": "^2.0.4",
|
1168 |
-
"fragment-cache": "^0.2.1",
|
1169 |
-
"kind-of": "^6.0.2",
|
1170 |
-
"nanomatch": "^1.2.9",
|
1171 |
-
"object.pick": "^1.3.0",
|
1172 |
-
"regex-not": "^1.0.0",
|
1173 |
-
"snapdragon": "^0.8.1",
|
1174 |
-
"to-regex": "^3.0.2"
|
1175 |
-
}
|
1176 |
-
},
|
1177 |
-
"minimatch": {
|
1178 |
-
"version": "0.2.14",
|
1179 |
-
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
|
1180 |
-
"integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
|
1181 |
-
"dev": true,
|
1182 |
-
"requires": {
|
1183 |
-
"lru-cache": "2",
|
1184 |
-
"sigmund": "~1.0.0"
|
1185 |
-
}
|
1186 |
-
},
|
1187 |
-
"mixin-deep": {
|
1188 |
-
"version": "1.3.2",
|
1189 |
-
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
|
1190 |
-
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
|
1191 |
-
"requires": {
|
1192 |
-
"for-in": "^1.0.2",
|
1193 |
-
"is-extendable": "^1.0.1"
|
1194 |
-
},
|
1195 |
-
"dependencies": {
|
1196 |
-
"is-extendable": {
|
1197 |
-
"version": "1.0.1",
|
1198 |
-
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
|
1199 |
-
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
|
1200 |
-
"requires": {
|
1201 |
-
"is-plain-object": "^2.0.4"
|
1202 |
-
}
|
1203 |
-
}
|
1204 |
-
}
|
1205 |
-
},
|
1206 |
-
"ms": {
|
1207 |
-
"version": "2.0.0",
|
1208 |
-
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
1209 |
-
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
1210 |
-
},
|
1211 |
-
"nanomatch": {
|
1212 |
-
"version": "1.2.13",
|
1213 |
-
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
|
1214 |
-
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
|
1215 |
-
"requires": {
|
1216 |
-
"arr-diff": "^4.0.0",
|
1217 |
-
"array-unique": "^0.3.2",
|
1218 |
-
"define-property": "^2.0.2",
|
1219 |
-
"extend-shallow": "^3.0.2",
|
1220 |
-
"fragment-cache": "^0.2.1",
|
1221 |
-
"is-windows": "^1.0.2",
|
1222 |
-
"kind-of": "^6.0.2",
|
1223 |
-
"object.pick": "^1.3.0",
|
1224 |
-
"regex-not": "^1.0.0",
|
1225 |
-
"snapdragon": "^0.8.1",
|
1226 |
-
"to-regex": "^3.0.1"
|
1227 |
-
}
|
1228 |
-
},
|
1229 |
-
"nopt": {
|
1230 |
-
"version": "1.0.10",
|
1231 |
-
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
|
1232 |
-
"integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
|
1233 |
-
"dev": true,
|
1234 |
-
"requires": {
|
1235 |
-
"abbrev": "1"
|
1236 |
-
}
|
1237 |
-
},
|
1238 |
-
"object-copy": {
|
1239 |
-
"version": "0.1.0",
|
1240 |
-
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
|
1241 |
-
"integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
|
1242 |
-
"requires": {
|
1243 |
-
"copy-descriptor": "^0.1.0",
|
1244 |
-
"define-property": "^0.2.5",
|
1245 |
-
"kind-of": "^3.0.3"
|
1246 |
-
},
|
1247 |
-
"dependencies": {
|
1248 |
-
"define-property": {
|
1249 |
-
"version": "0.2.5",
|
1250 |
-
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
1251 |
-
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
1252 |
-
"requires": {
|
1253 |
-
"is-descriptor": "^0.1.0"
|
1254 |
-
}
|
1255 |
-
},
|
1256 |
-
"kind-of": {
|
1257 |
-
"version": "3.2.2",
|
1258 |
-
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
1259 |
-
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
1260 |
-
"requires": {
|
1261 |
-
"is-buffer": "^1.1.5"
|
1262 |
-
}
|
1263 |
-
}
|
1264 |
-
}
|
1265 |
-
},
|
1266 |
-
"object-visit": {
|
1267 |
-
"version": "1.0.1",
|
1268 |
-
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
|
1269 |
-
"integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
|
1270 |
-
"requires": {
|
1271 |
-
"isobject": "^3.0.0"
|
1272 |
-
}
|
1273 |
-
},
|
1274 |
-
"object.defaults": {
|
1275 |
-
"version": "1.1.0",
|
1276 |
-
"resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
|
1277 |
-
"integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
|
1278 |
-
"requires": {
|
1279 |
-
"array-each": "^1.0.1",
|
1280 |
-
"array-slice": "^1.0.0",
|
1281 |
-
"for-own": "^1.0.0",
|
1282 |
-
"isobject": "^3.0.0"
|
1283 |
-
}
|
1284 |
-
},
|
1285 |
-
"object.map": {
|
1286 |
-
"version": "1.0.1",
|
1287 |
-
"resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
|
1288 |
-
"integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
|
1289 |
-
"requires": {
|
1290 |
-
"for-own": "^1.0.0",
|
1291 |
-
"make-iterator": "^1.0.0"
|
1292 |
-
}
|
1293 |
-
},
|
1294 |
-
"object.pick": {
|
1295 |
-
"version": "1.3.0",
|
1296 |
-
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
|
1297 |
-
"integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
|
1298 |
-
"requires": {
|
1299 |
-
"isobject": "^3.0.1"
|
1300 |
-
}
|
1301 |
-
},
|
1302 |
-
"os-homedir": {
|
1303 |
-
"version": "1.0.2",
|
1304 |
-
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
|
1305 |
-
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
|
1306 |
-
},
|
1307 |
-
"os-tmpdir": {
|
1308 |
-
"version": "1.0.2",
|
1309 |
-
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
1310 |
-
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
|
1311 |
-
},
|
1312 |
-
"osenv": {
|
1313 |
-
"version": "0.1.5",
|
1314 |
-
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
|
1315 |
-
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
|
1316 |
-
"requires": {
|
1317 |
-
"os-homedir": "^1.0.0",
|
1318 |
-
"os-tmpdir": "^1.0.0"
|
1319 |
-
}
|
1320 |
-
},
|
1321 |
-
"parse-filepath": {
|
1322 |
-
"version": "1.0.2",
|
1323 |
-
"resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
|
1324 |
-
"integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
|
1325 |
-
"requires": {
|
1326 |
-
"is-absolute": "^1.0.0",
|
1327 |
-
"map-cache": "^0.2.0",
|
1328 |
-
"path-root": "^0.1.1"
|
1329 |
-
}
|
1330 |
-
},
|
1331 |
-
"parse-passwd": {
|
1332 |
-
"version": "1.0.0",
|
1333 |
-
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
|
1334 |
-
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
|
1335 |
-
},
|
1336 |
-
"pascalcase": {
|
1337 |
-
"version": "0.1.1",
|
1338 |
-
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
|
1339 |
-
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
|
1340 |
-
},
|
1341 |
-
"path-parse": {
|
1342 |
-
"version": "1.0.6",
|
1343 |
-
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
1344 |
-
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
|
1345 |
-
},
|
1346 |
-
"path-root": {
|
1347 |
-
"version": "0.1.1",
|
1348 |
-
"resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
|
1349 |
-
"integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
|
1350 |
-
"requires": {
|
1351 |
-
"path-root-regex": "^0.1.0"
|
1352 |
-
}
|
1353 |
-
},
|
1354 |
-
"path-root-regex": {
|
1355 |
-
"version": "0.1.2",
|
1356 |
-
"resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
|
1357 |
-
"integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
|
1358 |
-
},
|
1359 |
-
"posix-character-classes": {
|
1360 |
-
"version": "0.1.1",
|
1361 |
-
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
|
1362 |
-
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
|
1363 |
-
},
|
1364 |
-
"preprocess": {
|
1365 |
-
"version": "2.3.1",
|
1366 |
-
"resolved": "https://registry.npmjs.org/preprocess/-/preprocess-2.3.1.tgz",
|
1367 |
-
"integrity": "sha1-vaMCLmI+m1mdTAgoGG2FvZ8SxQA=",
|
1368 |
-
"dev": true
|
1369 |
-
},
|
1370 |
-
"rechoir": {
|
1371 |
-
"version": "0.6.2",
|
1372 |
-
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
|
1373 |
-
"integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
|
1374 |
-
"requires": {
|
1375 |
-
"resolve": "^1.1.6"
|
1376 |
-
}
|
1377 |
-
},
|
1378 |
-
"regex-not": {
|
1379 |
-
"version": "1.0.2",
|
1380 |
-
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
|
1381 |
-
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
|
1382 |
-
"requires": {
|
1383 |
-
"extend-shallow": "^3.0.2",
|
1384 |
-
"safe-regex": "^1.1.0"
|
1385 |
-
}
|
1386 |
-
},
|
1387 |
-
"repeat-element": {
|
1388 |
-
"version": "1.1.3",
|
1389 |
-
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
|
1390 |
-
"integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
|
1391 |
-
},
|
1392 |
-
"repeat-string": {
|
1393 |
-
"version": "1.6.1",
|
1394 |
-
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
|
1395 |
-
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
|
1396 |
-
},
|
1397 |
-
"resolve": {
|
1398 |
-
"version": "1.18.1",
|
1399 |
-
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
|
1400 |
-
"integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
|
1401 |
-
"requires": {
|
1402 |
-
"is-core-module": "^2.0.0",
|
1403 |
-
"path-parse": "^1.0.6"
|
1404 |
-
}
|
1405 |
-
},
|
1406 |
-
"resolve-dir": {
|
1407 |
-
"version": "1.0.1",
|
1408 |
-
"resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
|
1409 |
-
"integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
|
1410 |
-
"requires": {
|
1411 |
-
"expand-tilde": "^2.0.0",
|
1412 |
-
"global-modules": "^1.0.0"
|
1413 |
-
}
|
1414 |
-
},
|
1415 |
-
"resolve-url": {
|
1416 |
-
"version": "0.2.1",
|
1417 |
-
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
|
1418 |
-
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
|
1419 |
-
},
|
1420 |
-
"ret": {
|
1421 |
-
"version": "0.1.15",
|
1422 |
-
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
|
1423 |
-
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
|
1424 |
-
},
|
1425 |
-
"rimraf": {
|
1426 |
-
"version": "2.2.8",
|
1427 |
-
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
|
1428 |
-
"integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
|
1429 |
-
"dev": true
|
1430 |
-
},
|
1431 |
-
"safe-regex": {
|
1432 |
-
"version": "1.1.0",
|
1433 |
-
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
|
1434 |
-
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
|
1435 |
-
"requires": {
|
1436 |
-
"ret": "~0.1.10"
|
1437 |
-
}
|
1438 |
-
},
|
1439 |
-
"set-value": {
|
1440 |
-
"version": "2.0.1",
|
1441 |
-
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
|
1442 |
-
"integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
|
1443 |
-
"requires": {
|
1444 |
-
"extend-shallow": "^2.0.1",
|
1445 |
-
"is-extendable": "^0.1.1",
|
1446 |
-
"is-plain-object": "^2.0.3",
|
1447 |
-
"split-string": "^3.0.1"
|
1448 |
-
},
|
1449 |
-
"dependencies": {
|
1450 |
-
"extend-shallow": {
|
1451 |
-
"version": "2.0.1",
|
1452 |
-
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
1453 |
-
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
1454 |
-
"requires": {
|
1455 |
-
"is-extendable": "^0.1.0"
|
1456 |
-
}
|
1457 |
-
}
|
1458 |
-
}
|
1459 |
-
},
|
1460 |
-
"shelljs": {
|
1461 |
-
"version": "0.1.4",
|
1462 |
-
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz",
|
1463 |
-
"integrity": "sha1-37vnjVbDwBaNL7eeEOzR28sH7A4=",
|
1464 |
-
"dev": true
|
1465 |
-
},
|
1466 |
-
"sigmund": {
|
1467 |
-
"version": "1.0.1",
|
1468 |
-
"resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
|
1469 |
-
"integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
|
1470 |
-
"dev": true
|
1471 |
-
},
|
1472 |
-
"snapdragon": {
|
1473 |
-
"version": "0.8.2",
|
1474 |
-
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
1475 |
-
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
|
1476 |
-
"requires": {
|
1477 |
-
"base": "^0.11.1",
|
1478 |
-
"debug": "^2.2.0",
|
1479 |
-
"define-property": "^0.2.5",
|
1480 |
-
"extend-shallow": "^2.0.1",
|
1481 |
-
"map-cache": "^0.2.2",
|
1482 |
-
"source-map": "^0.5.6",
|
1483 |
-
"source-map-resolve": "^0.5.0",
|
1484 |
-
"use": "^3.1.0"
|
1485 |
-
},
|
1486 |
-
"dependencies": {
|
1487 |
-
"define-property": {
|
1488 |
-
"version": "0.2.5",
|
1489 |
-
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
1490 |
-
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
1491 |
-
"requires": {
|
1492 |
-
"is-descriptor": "^0.1.0"
|
1493 |
-
}
|
1494 |
-
},
|
1495 |
-
"extend-shallow": {
|
1496 |
-
"version": "2.0.1",
|
1497 |
-
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
1498 |
-
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
1499 |
-
"requires": {
|
1500 |
-
"is-extendable": "^0.1.0"
|
1501 |
-
}
|
1502 |
-
},
|
1503 |
-
"source-map": {
|
1504 |
-
"version": "0.5.7",
|
1505 |
-
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
1506 |
-
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
|
1507 |
-
}
|
1508 |
-
}
|
1509 |
-
},
|
1510 |
-
"snapdragon-node": {
|
1511 |
-
"version": "2.1.1",
|
1512 |
-
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
|
1513 |
-
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
|
1514 |
-
"requires": {
|
1515 |
-
"define-property": "^1.0.0",
|
1516 |
-
"isobject": "^3.0.0",
|
1517 |
-
"snapdragon-util": "^3.0.1"
|
1518 |
-
},
|
1519 |
-
"dependencies": {
|
1520 |
-
"define-property": {
|
1521 |
-
"version": "1.0.0",
|
1522 |
-
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
|
1523 |
-
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
|
1524 |
-
"requires": {
|
1525 |
-
"is-descriptor": "^1.0.0"
|
1526 |
-
}
|
1527 |
-
},
|
1528 |
-
"is-accessor-descriptor": {
|
1529 |
-
"version": "1.0.0",
|
1530 |
-
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
|
1531 |
-
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
|
1532 |
-
"requires": {
|
1533 |
-
"kind-of": "^6.0.0"
|
1534 |
-
}
|
1535 |
-
},
|
1536 |
-
"is-data-descriptor": {
|
1537 |
-
"version": "1.0.0",
|
1538 |
-
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
|
1539 |
-
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
|
1540 |
-
"requires": {
|
1541 |
-
"kind-of": "^6.0.0"
|
1542 |
-
}
|
1543 |
-
},
|
1544 |
-
"is-descriptor": {
|
1545 |
-
"version": "1.0.2",
|
1546 |
-
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
|
1547 |
-
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
|
1548 |
-
"requires": {
|
1549 |
-
"is-accessor-descriptor": "^1.0.0",
|
1550 |
-
"is-data-descriptor": "^1.0.0",
|
1551 |
-
"kind-of": "^6.0.2"
|
1552 |
-
}
|
1553 |
-
}
|
1554 |
-
}
|
1555 |
-
},
|
1556 |
-
"snapdragon-util": {
|
1557 |
-
"version": "3.0.1",
|
1558 |
-
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
|
1559 |
-
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
|
1560 |
-
"requires": {
|
1561 |
-
"kind-of": "^3.2.0"
|
1562 |
-
},
|
1563 |
-
"dependencies": {
|
1564 |
-
"kind-of": {
|
1565 |
-
"version": "3.2.2",
|
1566 |
-
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
1567 |
-
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
1568 |
-
"requires": {
|
1569 |
-
"is-buffer": "^1.1.5"
|
1570 |
-
}
|
1571 |
-
}
|
1572 |
-
}
|
1573 |
-
},
|
1574 |
-
"source-map": {
|
1575 |
-
"version": "0.1.34",
|
1576 |
-
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
|
1577 |
-
"integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=",
|
1578 |
-
"dev": true,
|
1579 |
-
"requires": {
|
1580 |
-
"amdefine": ">=0.0.4"
|
1581 |
-
}
|
1582 |
-
},
|
1583 |
-
"source-map-resolve": {
|
1584 |
-
"version": "0.5.3",
|
1585 |
-
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
|
1586 |
-
"integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
|
1587 |
-
"requires": {
|
1588 |
-
"atob": "^2.1.2",
|
1589 |
-
"decode-uri-component": "^0.2.0",
|
1590 |
-
"resolve-url": "^0.2.1",
|
1591 |
-
"source-map-url": "^0.4.0",
|
1592 |
-
"urix": "^0.1.0"
|
1593 |
-
}
|
1594 |
-
},
|
1595 |
-
"source-map-url": {
|
1596 |
-
"version": "0.4.0",
|
1597 |
-
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
|
1598 |
-
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
|
1599 |
-
},
|
1600 |
-
"split-string": {
|
1601 |
-
"version": "3.1.0",
|
1602 |
-
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
|
1603 |
-
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
|
1604 |
-
"requires": {
|
1605 |
-
"extend-shallow": "^3.0.0"
|
1606 |
-
}
|
1607 |
-
},
|
1608 |
-
"static-extend": {
|
1609 |
-
"version": "0.1.2",
|
1610 |
-
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
|
1611 |
-
"integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
|
1612 |
-
"requires": {
|
1613 |
-
"define-property": "^0.2.5",
|
1614 |
-
"object-copy": "^0.1.0"
|
1615 |
-
},
|
1616 |
-
"dependencies": {
|
1617 |
-
"define-property": {
|
1618 |
-
"version": "0.2.5",
|
1619 |
-
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
1620 |
-
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
1621 |
-
"requires": {
|
1622 |
-
"is-descriptor": "^0.1.0"
|
1623 |
-
}
|
1624 |
-
}
|
1625 |
-
}
|
1626 |
-
},
|
1627 |
-
"to-object-path": {
|
1628 |
-
"version": "0.3.0",
|
1629 |
-
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
|
1630 |
-
"integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
|
1631 |
-
"requires": {
|
1632 |
-
"kind-of": "^3.0.2"
|
1633 |
-
},
|
1634 |
-
"dependencies": {
|
1635 |
-
"kind-of": {
|
1636 |
-
"version": "3.2.2",
|
1637 |
-
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
1638 |
-
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
1639 |
-
"requires": {
|
1640 |
-
"is-buffer": "^1.1.5"
|
1641 |
-
}
|
1642 |
-
}
|
1643 |
-
}
|
1644 |
-
},
|
1645 |
-
"to-regex": {
|
1646 |
-
"version": "3.0.2",
|
1647 |
-
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
|
1648 |
-
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
|
1649 |
-
"requires": {
|
1650 |
-
"define-property": "^2.0.2",
|
1651 |
-
"extend-shallow": "^3.0.2",
|
1652 |
-
"regex-not": "^1.0.2",
|
1653 |
-
"safe-regex": "^1.1.0"
|
1654 |
-
}
|
1655 |
-
},
|
1656 |
-
"to-regex-range": {
|
1657 |
-
"version": "2.1.1",
|
1658 |
-
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
|
1659 |
-
"integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
|
1660 |
-
"requires": {
|
1661 |
-
"is-number": "^3.0.0",
|
1662 |
-
"repeat-string": "^1.6.1"
|
1663 |
-
}
|
1664 |
-
},
|
1665 |
-
"uglify-js": {
|
1666 |
-
"version": "2.4.24",
|
1667 |
-
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz",
|
1668 |
-
"integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=",
|
1669 |
-
"dev": true,
|
1670 |
-
"requires": {
|
1671 |
-
"async": "~0.2.6",
|
1672 |
-
"source-map": "0.1.34",
|
1673 |
-
"uglify-to-browserify": "~1.0.0",
|
1674 |
-
"yargs": "~3.5.4"
|
1675 |
-
},
|
1676 |
-
"dependencies": {
|
1677 |
-
"async": {
|
1678 |
-
"version": "0.2.10",
|
1679 |
-
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
|
1680 |
-
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
|
1681 |
-
"dev": true
|
1682 |
-
}
|
1683 |
-
}
|
1684 |
-
},
|
1685 |
-
"uglify-to-browserify": {
|
1686 |
-
"version": "1.0.2",
|
1687 |
-
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
|
1688 |
-
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
|
1689 |
-
"dev": true
|
1690 |
-
},
|
1691 |
-
"unc-path-regex": {
|
1692 |
-
"version": "0.1.2",
|
1693 |
-
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
|
1694 |
-
"integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
|
1695 |
-
},
|
1696 |
-
"underscore": {
|
1697 |
-
"version": "1.7.0",
|
1698 |
-
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
|
1699 |
-
"integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=",
|
1700 |
-
"dev": true
|
1701 |
-
},
|
1702 |
-
"underscore.string": {
|
1703 |
-
"version": "2.2.1",
|
1704 |
-
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz",
|
1705 |
-
"integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=",
|
1706 |
-
"dev": true
|
1707 |
-
},
|
1708 |
-
"union-value": {
|
1709 |
-
"version": "1.0.1",
|
1710 |
-
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
|
1711 |
-
"integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
|
1712 |
-
"requires": {
|
1713 |
-
"arr-union": "^3.1.0",
|
1714 |
-
"get-value": "^2.0.6",
|
1715 |
-
"is-extendable": "^0.1.1",
|
1716 |
-
"set-value": "^2.0.1"
|
1717 |
-
}
|
1718 |
-
},
|
1719 |
-
"unset-value": {
|
1720 |
-
"version": "1.0.0",
|
1721 |
-
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
|
1722 |
-
"integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
|
1723 |
-
"requires": {
|
1724 |
-
"has-value": "^0.3.1",
|
1725 |
-
"isobject": "^3.0.0"
|
1726 |
-
},
|
1727 |
-
"dependencies": {
|
1728 |
-
"has-value": {
|
1729 |
-
"version": "0.3.1",
|
1730 |
-
"resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
|
1731 |
-
"integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
|
1732 |
-
"requires": {
|
1733 |
-
"get-value": "^2.0.3",
|
1734 |
-
"has-values": "^0.1.4",
|
1735 |
-
"isobject": "^2.0.0"
|
1736 |
-
},
|
1737 |
-
"dependencies": {
|
1738 |
-
"isobject": {
|
1739 |
-
"version": "2.1.0",
|
1740 |
-
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
|
1741 |
-
"integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
|
1742 |
-
"requires": {
|
1743 |
-
"isarray": "1.0.0"
|
1744 |
-
}
|
1745 |
-
}
|
1746 |
-
}
|
1747 |
-
},
|
1748 |
-
"has-values": {
|
1749 |
-
"version": "0.1.4",
|
1750 |
-
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
|
1751 |
-
"integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
|
1752 |
-
}
|
1753 |
-
}
|
1754 |
-
},
|
1755 |
-
"urix": {
|
1756 |
-
"version": "0.1.0",
|
1757 |
-
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
|
1758 |
-
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
|
1759 |
-
},
|
1760 |
-
"use": {
|
1761 |
-
"version": "3.1.1",
|
1762 |
-
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
|
1763 |
-
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
|
1764 |
-
},
|
1765 |
-
"v8flags": {
|
1766 |
-
"version": "3.1.3",
|
1767 |
-
"resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz",
|
1768 |
-
"integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==",
|
1769 |
-
"requires": {
|
1770 |
-
"homedir-polyfill": "^1.0.1"
|
1771 |
-
}
|
1772 |
-
},
|
1773 |
-
"which": {
|
1774 |
-
"version": "1.0.9",
|
1775 |
-
"resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz",
|
1776 |
-
"integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=",
|
1777 |
-
"dev": true
|
1778 |
-
},
|
1779 |
-
"window-size": {
|
1780 |
-
"version": "0.1.0",
|
1781 |
-
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
|
1782 |
-
"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
|
1783 |
-
"dev": true
|
1784 |
-
},
|
1785 |
-
"wordwrap": {
|
1786 |
-
"version": "0.0.2",
|
1787 |
-
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
|
1788 |
-
"integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
|
1789 |
-
"dev": true
|
1790 |
-
},
|
1791 |
-
"yargs": {
|
1792 |
-
"version": "3.5.4",
|
1793 |
-
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz",
|
1794 |
-
"integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=",
|
1795 |
-
"dev": true,
|
1796 |
-
"requires": {
|
1797 |
-
"camelcase": "^1.0.2",
|
1798 |
-
"decamelize": "^1.0.0",
|
1799 |
-
"window-size": "0.1.0",
|
1800 |
-
"wordwrap": "0.0.2"
|
1801 |
-
}
|
1802 |
-
},
|
1803 |
-
"zlib-browserify": {
|
1804 |
-
"version": "0.0.1",
|
1805 |
-
"resolved": "https://registry.npmjs.org/zlib-browserify/-/zlib-browserify-0.0.1.tgz",
|
1806 |
-
"integrity": "sha1-T6akXQDbwV8xikr6HZr8Aljhdsw=",
|
1807 |
-
"dev": true
|
1808 |
-
}
|
1809 |
-
}
|
1810 |
-
}
|
1 |
+
{
|
2 |
+
"name": "bootstrap-generator",
|
3 |
+
"version": "1.0.1",
|
4 |
+
"lockfileVersion": 1,
|
5 |
+
"requires": true,
|
6 |
+
"dependencies": {
|
7 |
+
"abbrev": {
|
8 |
+
"version": "1.1.1",
|
9 |
+
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
|
10 |
+
"integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg="
|
11 |
+
},
|
12 |
+
"amdefine": {
|
13 |
+
"version": "1.0.1",
|
14 |
+
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
|
15 |
+
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
|
16 |
+
"dev": true
|
17 |
+
},
|
18 |
+
"argparse": {
|
19 |
+
"version": "0.1.16",
|
20 |
+
"resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz",
|
21 |
+
"integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=",
|
22 |
+
"dev": true,
|
23 |
+
"requires": {
|
24 |
+
"underscore": "~1.7.0",
|
25 |
+
"underscore.string": "~2.4.0"
|
26 |
+
},
|
27 |
+
"dependencies": {
|
28 |
+
"underscore.string": {
|
29 |
+
"version": "2.4.0",
|
30 |
+
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz",
|
31 |
+
"integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=",
|
32 |
+
"dev": true
|
33 |
+
}
|
34 |
+
}
|
35 |
+
},
|
36 |
+
"arr-diff": {
|
37 |
+
"version": "4.0.0",
|
38 |
+
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
39 |
+
"integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
|
40 |
+
},
|
41 |
+
"arr-flatten": {
|
42 |
+
"version": "1.1.0",
|
43 |
+
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
|
44 |
+
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
|
45 |
+
},
|
46 |
+
"arr-union": {
|
47 |
+
"version": "3.1.0",
|
48 |
+
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
|
49 |
+
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
|
50 |
+
},
|
51 |
+
"array-each": {
|
52 |
+
"version": "1.0.1",
|
53 |
+
"resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
|
54 |
+
"integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
|
55 |
+
},
|
56 |
+
"array-slice": {
|
57 |
+
"version": "1.1.0",
|
58 |
+
"resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
|
59 |
+
"integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
|
60 |
+
},
|
61 |
+
"array-unique": {
|
62 |
+
"version": "0.3.2",
|
63 |
+
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
|
64 |
+
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
|
65 |
+
},
|
66 |
+
"assign-symbols": {
|
67 |
+
"version": "1.0.0",
|
68 |
+
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
|
69 |
+
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
|
70 |
+
},
|
71 |
+
"async": {
|
72 |
+
"version": "0.1.22",
|
73 |
+
"resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
|
74 |
+
"integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=",
|
75 |
+
"dev": true
|
76 |
+
},
|
77 |
+
"atob": {
|
78 |
+
"version": "2.1.2",
|
79 |
+
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
|
80 |
+
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
|
81 |
+
},
|
82 |
+
"base": {
|
83 |
+
"version": "0.11.2",
|
84 |
+
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
|
85 |
+
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
|
86 |
+
"requires": {
|
87 |
+
"cache-base": "^1.0.1",
|
88 |
+
"class-utils": "^0.3.5",
|
89 |
+
"component-emitter": "^1.2.1",
|
90 |
+
"define-property": "^1.0.0",
|
91 |
+
"isobject": "^3.0.1",
|
92 |
+
"mixin-deep": "^1.2.0",
|
93 |
+
"pascalcase": "^0.1.1"
|
94 |
+
},
|
95 |
+
"dependencies": {
|
96 |
+
"define-property": {
|
97 |
+
"version": "1.0.0",
|
98 |
+
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
|
99 |
+
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
|
100 |
+
"requires": {
|
101 |
+
"is-descriptor": "^1.0.0"
|
102 |
+
}
|
103 |
+
},
|
104 |
+
"is-accessor-descriptor": {
|
105 |
+
"version": "1.0.0",
|
106 |
+
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
|
107 |
+
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
|
108 |
+
"requires": {
|
109 |
+
"kind-of": "^6.0.0"
|
110 |
+
}
|
111 |
+
},
|
112 |
+
"is-data-descriptor": {
|
113 |
+
"version": "1.0.0",
|
114 |
+
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
|
115 |
+
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
|
116 |
+
"requires": {
|
117 |
+
"kind-of": "^6.0.0"
|
118 |
+
}
|
119 |
+
},
|
120 |
+
"is-descriptor": {
|
121 |
+
"version": "1.0.2",
|
122 |
+
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
|
123 |
+
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
|
124 |
+
"requires": {
|
125 |
+
"is-accessor-descriptor": "^1.0.0",
|
126 |
+
"is-data-descriptor": "^1.0.0",
|
127 |
+
"kind-of": "^6.0.2"
|
128 |
+
}
|
129 |
+
}
|
130 |
+
}
|
131 |
+
},
|
132 |
+
"braces": {
|
133 |
+
"version": "2.3.2",
|
134 |
+
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
|
135 |
+
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
|
136 |
+
"requires": {
|
137 |
+
"arr-flatten": "^1.1.0",
|
138 |
+
"array-unique": "^0.3.2",
|
139 |
+
"extend-shallow": "^2.0.1",
|
140 |
+
"fill-range": "^4.0.0",
|
141 |
+
"isobject": "^3.0.1",
|
142 |
+
"repeat-element": "^1.1.2",
|
143 |
+
"snapdragon": "^0.8.1",
|
144 |
+
"snapdragon-node": "^2.0.1",
|
145 |
+
"split-string": "^3.0.2",
|
146 |
+
"to-regex": "^3.0.1"
|
147 |
+
},
|
148 |
+
"dependencies": {
|
149 |
+
"extend-shallow": {
|
150 |
+
"version": "2.0.1",
|
151 |
+
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
152 |
+
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
153 |
+
"requires": {
|
154 |
+
"is-extendable": "^0.1.0"
|
155 |
+
}
|
156 |
+
}
|
157 |
+
}
|
158 |
+
},
|
159 |
+
"cache-base": {
|
160 |
+
"version": "1.0.1",
|
161 |
+
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
|
162 |
+
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
|
163 |
+
"requires": {
|
164 |
+
"collection-visit": "^1.0.0",
|
165 |
+
"component-emitter": "^1.2.1",
|
166 |
+
"get-value": "^2.0.6",
|
167 |
+
"has-value": "^1.0.0",
|
168 |
+
"isobject": "^3.0.1",
|
169 |
+
"set-value": "^2.0.0",
|
170 |
+
"to-object-path": "^0.3.0",
|
171 |
+
"union-value": "^1.0.0",
|
172 |
+
"unset-value": "^1.0.0"
|
173 |
+
}
|
174 |
+
},
|
175 |
+
"camelcase": {
|
176 |
+
"version": "1.2.1",
|
177 |
+
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
|
178 |
+
"integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
|
179 |
+
"dev": true
|
180 |
+
},
|
181 |
+
"class-utils": {
|
182 |
+
"version": "0.3.6",
|
183 |
+
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
|
184 |
+
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
|
185 |
+
"requires": {
|
186 |
+
"arr-union": "^3.1.0",
|
187 |
+
"define-property": "^0.2.5",
|
188 |
+
"isobject": "^3.0.0",
|
189 |
+
"static-extend": "^0.1.1"
|
190 |
+
},
|
191 |
+
"dependencies": {
|
192 |
+
"define-property": {
|
193 |
+
"version": "0.2.5",
|
194 |
+
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
195 |
+
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
196 |
+
"requires": {
|
197 |
+
"is-descriptor": "^0.1.0"
|
198 |
+
}
|
199 |
+
}
|
200 |
+
}
|
201 |
+
},
|
202 |
+
"clean-css": {
|
203 |
+
"version": "2.0.8",
|
204 |
+
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-2.0.8.tgz",
|
205 |
+
"integrity": "sha1-6TfN/cxXgaAIF67EB56Fs+wVeiA=",
|
206 |
+
"dev": true,
|
207 |
+
"requires": {
|
208 |
+
"commander": "2.0.x"
|
209 |
+
}
|
210 |
+
},
|
211 |
+
"cli": {
|
212 |
+
"version": "0.4.5",
|
213 |
+
"resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz",
|
214 |
+
"integrity": "sha1-ePlIXNFhtWbppsctcXDEJw6B22E=",
|
215 |
+
"dev": true,
|
216 |
+
"requires": {
|
217 |
+
"glob": ">= 3.1.4"
|
218 |
+
}
|
219 |
+
},
|
220 |
+
"coffee-script": {
|
221 |
+
"version": "1.3.3",
|
222 |
+
"resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz",
|
223 |
+
"integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=",
|
224 |
+
"dev": true
|
225 |
+
},
|
226 |
+
"collection-visit": {
|
227 |
+
"version": "1.0.0",
|
228 |
+
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
|
229 |
+
"integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
|
230 |
+
"requires": {
|
231 |
+
"map-visit": "^1.0.0",
|
232 |
+
"object-visit": "^1.0.0"
|
233 |
+
}
|
234 |
+
},
|
235 |
+
"colors": {
|
236 |
+
"version": "0.6.2",
|
237 |
+
"resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
|
238 |
+
"integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=",
|
239 |
+
"dev": true
|
240 |
+
},
|
241 |
+
"commander": {
|
242 |
+
"version": "2.0.0",
|
243 |
+
"resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz",
|
244 |
+
"integrity": "sha1-0bhvkB+LZL2UG96tr5JFMDk76Sg=",
|
245 |
+
"dev": true
|
246 |
+
},
|
247 |
+
"component-emitter": {
|
248 |
+
"version": "1.3.0",
|
249 |
+
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
250 |
+
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
|
251 |
+
},
|
252 |
+
"console-browserify": {
|
253 |
+
"version": "0.1.6",
|
254 |
+
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz",
|
255 |
+
"integrity": "sha1-0SijwLuINQ61YmxufHGm8P1ImDw=",
|
256 |
+
"dev": true
|
257 |
+
},
|
258 |
+
"copy-descriptor": {
|
259 |
+
"version": "0.1.1",
|
260 |
+
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
|
261 |
+
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
|
262 |
+
},
|
263 |
+
"dateformat": {
|
264 |
+
"version": "1.0.2-1.2.3",
|
265 |
+
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz",
|
266 |
+
"integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=",
|
267 |
+
"dev": true
|
268 |
+
},
|
269 |
+
"debug": {
|
270 |
+
"version": "2.6.9",
|
271 |
+
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
272 |
+
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
273 |
+
"requires": {
|
274 |
+
"ms": "2.0.0"
|
275 |
+
}
|
276 |
+
},
|
277 |
+
"decamelize": {
|
278 |
+
"version": "1.2.0",
|
279 |
+
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
280 |
+
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
|
281 |
+
"dev": true
|
282 |
+
},
|
283 |
+
"decode-uri-component": {
|
284 |
+
"version": "0.2.0",
|
285 |
+
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
|
286 |
+
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
|
287 |
+
},
|
288 |
+
"define-property": {
|
289 |
+
"version": "2.0.2",
|
290 |
+
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
|
291 |
+
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
|
292 |
+
"requires": {
|
293 |
+
"is-descriptor": "^1.0.2",
|
294 |
+
"isobject": "^3.0.1"
|
295 |
+
},
|
296 |
+
"dependencies": {
|
297 |
+
"is-accessor-descriptor": {
|
298 |
+
"version": "1.0.0",
|
299 |
+
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
|
300 |
+
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
|
301 |
+
"requires": {
|
302 |
+
"kind-of": "^6.0.0"
|
303 |
+
}
|
304 |
+
},
|
305 |
+
"is-data-descriptor": {
|
306 |
+
"version": "1.0.0",
|
307 |
+
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
|
308 |
+
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
|
309 |
+
"requires": {
|
310 |
+
"kind-of": "^6.0.0"
|
311 |
+
}
|
312 |
+
},
|
313 |
+
"is-descriptor": {
|
314 |
+
"version": "1.0.2",
|
315 |
+
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
|
316 |
+
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
|
317 |
+
"requires": {
|
318 |
+
"is-accessor-descriptor": "^1.0.0",
|
319 |
+
"is-data-descriptor": "^1.0.0",
|
320 |
+
"kind-of": "^6.0.2"
|
321 |
+
}
|
322 |
+
}
|
323 |
+
}
|
324 |
+
},
|
325 |
+
"detect-file": {
|
326 |
+
"version": "1.0.0",
|
327 |
+
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
|
328 |
+
"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
|
329 |
+
},
|
330 |
+
"esprima": {
|
331 |
+
"version": "1.0.4",
|
332 |
+
"resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
|
333 |
+
"integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
|
334 |
+
"dev": true
|
335 |
+
},
|
336 |
+
"eventemitter2": {
|
337 |
+
"version": "0.4.14",
|
338 |
+
"resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
|
339 |
+
"integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
|
340 |
+
"dev": true
|
341 |
+
},
|
342 |
+
"exit": {
|
343 |
+
"version": "0.1.2",
|
344 |
+
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
|
345 |
+
"integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
|
346 |
+
"dev": true
|
347 |
+
},
|
348 |
+
"expand-brackets": {
|
349 |
+
"version": "2.1.4",
|
350 |
+
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
|
351 |
+
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
|
352 |
+
"requires": {
|
353 |
+
"debug": "^2.3.3",
|
354 |
+
"define-property": "^0.2.5",
|
355 |
+
"extend-shallow": "^2.0.1",
|
356 |
+
"posix-character-classes": "^0.1.0",
|
357 |
+
"regex-not": "^1.0.0",
|
358 |
+
"snapdragon": "^0.8.1",
|
359 |
+
"to-regex": "^3.0.1"
|
360 |
+
},
|
361 |
+
"dependencies": {
|
362 |
+
"define-property": {
|
363 |
+
"version": "0.2.5",
|
364 |
+
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
365 |
+
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
366 |
+
"requires": {
|
367 |
+
"is-descriptor": "^0.1.0"
|
368 |
+
}
|
369 |
+
},
|
370 |
+
"extend-shallow": {
|
371 |
+
"version": "2.0.1",
|
372 |
+
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
373 |
+
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
374 |
+
"requires": {
|
375 |
+
"is-extendable": "^0.1.0"
|
376 |
+
}
|
377 |
+
}
|
378 |
+
}
|
379 |
+
},
|
380 |
+
"expand-tilde": {
|
381 |
+
"version": "2.0.2",
|
382 |
+
"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
|
383 |
+
"integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
|
384 |
+
"requires": {
|
385 |
+
"homedir-polyfill": "^1.0.1"
|
386 |
+
}
|
387 |
+
},
|
388 |
+
"extend": {
|
389 |
+
"version": "3.0.2",
|
390 |
+
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
391 |
+
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
392 |
+
},
|
393 |
+
"extend-shallow": {
|
394 |
+
"version": "3.0.2",
|
395 |
+
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
|
396 |
+
"integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
|
397 |
+
"requires": {
|
398 |
+
"assign-symbols": "^1.0.0",
|
399 |
+
"is-extendable": "^1.0.1"
|
400 |
+
},
|
401 |
+
"dependencies": {
|
402 |
+
"is-extendable": {
|
403 |
+
"version": "1.0.1",
|
404 |
+
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
|
405 |
+
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
|
406 |
+
"requires": {
|
407 |
+
"is-plain-object": "^2.0.4"
|
408 |
+
}
|
409 |
+
}
|
410 |
+
}
|
411 |
+
},
|
412 |
+
"extglob": {
|
413 |
+
"version": "2.0.4",
|
414 |
+
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
|
415 |
+
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
|
416 |
+
"requires": {
|
417 |
+
"array-unique": "^0.3.2",
|
418 |
+
"define-property": "^1.0.0",
|
419 |
+
"expand-brackets": "^2.1.4",
|
420 |
+
"extend-shallow": "^2.0.1",
|
421 |
+
"fragment-cache": "^0.2.1",
|
422 |
+
"regex-not": "^1.0.0",
|
423 |
+
"snapdragon": "^0.8.1",
|
424 |
+
"to-regex": "^3.0.1"
|
425 |
+
},
|
426 |
+
"dependencies": {
|
427 |
+
"define-property": {
|
428 |
+
"version": "1.0.0",
|
429 |
+
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
|
430 |
+
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
|
431 |
+
"requires": {
|
432 |
+
"is-descriptor": "^1.0.0"
|
433 |
+
}
|
434 |
+
},
|
435 |
+
"extend-shallow": {
|
436 |
+
"version": "2.0.1",
|
437 |
+
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
438 |
+
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
439 |
+
"requires": {
|
440 |
+
"is-extendable": "^0.1.0"
|
441 |
+
}
|
442 |
+
},
|
443 |
+
"is-accessor-descriptor": {
|
444 |
+
"version": "1.0.0",
|
445 |
+
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
|
446 |
+
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
|
447 |
+
"requires": {
|
448 |
+
"kind-of": "^6.0.0"
|
449 |
+
}
|
450 |
+
},
|
451 |
+
"is-data-descriptor": {
|
452 |
+
"version": "1.0.0",
|
453 |
+
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
|
454 |
+
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
|
455 |
+
"requires": {
|
456 |
+
"kind-of": "^6.0.0"
|
457 |
+
}
|
458 |
+
},
|
459 |
+
"is-descriptor": {
|
460 |
+
"version": "1.0.2",
|
461 |
+
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
|
462 |
+
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
|
463 |
+
"requires": {
|
464 |
+
"is-accessor-descriptor": "^1.0.0",
|
465 |
+
"is-data-descriptor": "^1.0.0",
|
466 |
+
"kind-of": "^6.0.2"
|
467 |
+
}
|
468 |
+
}
|
469 |
+
}
|
470 |
+
},
|
471 |
+
"fill-range": {
|
472 |
+
"version": "4.0.0",
|
473 |
+
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
|
474 |
+
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
|
475 |
+
"requires": {
|
476 |
+
"extend-shallow": "^2.0.1",
|
477 |
+
"is-number": "^3.0.0",
|
478 |
+
"repeat-string": "^1.6.1",
|
479 |
+
"to-regex-range": "^2.1.0"
|
480 |
+
},
|
481 |
+
"dependencies": {
|
482 |
+
"extend-shallow": {
|
483 |
+
"version": "2.0.1",
|
484 |
+
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
485 |
+
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
486 |
+
"requires": {
|
487 |
+
"is-extendable": "^0.1.0"
|
488 |
+
}
|
489 |
+
}
|
490 |
+
}
|
491 |
+
},
|
492 |
+
"findup-sync": {
|
493 |
+
"version": "0.1.3",
|
494 |
+
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz",
|
495 |
+
"integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=",
|
496 |
+
"dev": true,
|
497 |
+
"requires": {
|
498 |
+
"glob": "~3.2.9",
|
499 |
+
"lodash": "~2.4.1"
|
500 |
+
},
|
501 |
+
"dependencies": {
|
502 |
+
"glob": {
|
503 |
+
"version": "3.2.11",
|
504 |
+
"resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
|
505 |
+
"integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
|
506 |
+
"dev": true,
|
507 |
+
"requires": {
|
508 |
+
"inherits": "2",
|
509 |
+
"minimatch": "0.3"
|
510 |
+
}
|
511 |
+
},
|
512 |
+
"lodash": {
|
513 |
+
"version": "2.4.2",
|
514 |
+
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
|
515 |
+
"integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
|
516 |
+
"dev": true
|
517 |
+
},
|
518 |
+
"minimatch": {
|
519 |
+
"version": "0.3.0",
|
520 |
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
|
521 |
+
"integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
|
522 |
+
"dev": true,
|
523 |
+
"requires": {
|
524 |
+
"lru-cache": "2",
|
525 |
+
"sigmund": "~1.0.0"
|
526 |
+
}
|
527 |
+
}
|
528 |
+
}
|
529 |
+
},
|
530 |
+
"fined": {
|
531 |
+
"version": "1.2.0",
|
532 |
+
"resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
|
533 |
+
"integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
|
534 |
+
"requires": {
|
535 |
+
"expand-tilde": "^2.0.2",
|
536 |
+
"is-plain-object": "^2.0.3",
|
537 |
+
"object.defaults": "^1.1.0",
|
538 |
+
"object.pick": "^1.2.0",
|
539 |
+
"parse-filepath": "^1.0.1"
|
540 |
+
}
|
541 |
+
},
|
542 |
+
"flagged-respawn": {
|
543 |
+
"version": "1.0.1",
|
544 |
+
"resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
|
545 |
+
"integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q=="
|
546 |
+
},
|
547 |
+
"for-in": {
|
548 |
+
"version": "1.0.2",
|
549 |
+
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
|
550 |
+
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
|
551 |
+
},
|
552 |
+
"for-own": {
|
553 |
+
"version": "1.0.0",
|
554 |
+
"resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
|
555 |
+
"integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
|
556 |
+
"requires": {
|
557 |
+
"for-in": "^1.0.1"
|
558 |
+
}
|
559 |
+
},
|
560 |
+
"fragment-cache": {
|
561 |
+
"version": "0.2.1",
|
562 |
+
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
|
563 |
+
"integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
|
564 |
+
"requires": {
|
565 |
+
"map-cache": "^0.2.2"
|
566 |
+
}
|
567 |
+
},
|
568 |
+
"function-bind": {
|
569 |
+
"version": "1.1.1",
|
570 |
+
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
571 |
+
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
572 |
+
},
|
573 |
+
"get-value": {
|
574 |
+
"version": "2.0.6",
|
575 |
+
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
|
576 |
+
"integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
|
577 |
+
},
|
578 |
+
"getobject": {
|
579 |
+
"version": "0.1.0",
|
580 |
+
"resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
|
581 |
+
"integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
|
582 |
+
"dev": true
|
583 |
+
},
|
584 |
+
"glob": {
|
585 |
+
"version": "3.1.21",
|
586 |
+
"resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
|
587 |
+
"integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
|
588 |
+
"dev": true,
|
589 |
+
"requires": {
|
590 |
+
"graceful-fs": "~1.2.0",
|
591 |
+
"inherits": "1",
|
592 |
+
"minimatch": "~0.2.11"
|
593 |
+
},
|
594 |
+
"dependencies": {
|
595 |
+
"inherits": {
|
596 |
+
"version": "1.0.2",
|
597 |
+
"resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
|
598 |
+
"integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
|
599 |
+
"dev": true
|
600 |
+
}
|
601 |
+
}
|
602 |
+
},
|
603 |
+
"global-modules": {
|
604 |
+
"version": "1.0.0",
|
605 |
+
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
|
606 |
+
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
|
607 |
+
"requires": {
|
608 |
+
"global-prefix": "^1.0.1",
|
609 |
+
"is-windows": "^1.0.1",
|
610 |
+
"resolve-dir": "^1.0.0"
|
611 |
+
}
|
612 |
+
},
|
613 |
+
"global-prefix": {
|
614 |
+
"version": "1.0.2",
|
615 |
+
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
|
616 |
+
"integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
|
617 |
+
"requires": {
|
618 |
+
"expand-tilde": "^2.0.2",
|
619 |
+
"homedir-polyfill": "^1.0.1",
|
620 |
+
"ini": "^1.3.4",
|
621 |
+
"is-windows": "^1.0.1",
|
622 |
+
"which": "^1.2.14"
|
623 |
+
},
|
624 |
+
"dependencies": {
|
625 |
+
"which": {
|
626 |
+
"version": "1.3.1",
|
627 |
+
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
628 |
+
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
|
629 |
+
"requires": {
|
630 |
+
"isexe": "^2.0.0"
|
631 |
+
}
|
632 |
+
}
|
633 |
+
}
|
634 |
+
},
|
635 |
+
"graceful-fs": {
|
636 |
+
"version": "1.2.3",
|
637 |
+
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
|
638 |
+
"integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
|
639 |
+
"dev": true
|
640 |
+
},
|
641 |
+
"grunt": {
|
642 |
+
"version": "0.4.5",
|
643 |
+
"resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz",
|
644 |
+
"integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=",
|
645 |
+
"dev": true,
|
646 |
+
"requires": {
|
647 |
+
"async": "~0.1.22",
|
648 |
+
"coffee-script": "~1.3.3",
|
649 |
+
"colors": "~0.6.2",
|
650 |
+
"dateformat": "1.0.2-1.2.3",
|
651 |
+
"eventemitter2": "~0.4.13",
|
652 |
+
"exit": "~0.1.1",
|
653 |
+
"findup-sync": "~0.1.2",
|
654 |
+
"getobject": "~0.1.0",
|
655 |
+
"glob": "~3.1.21",
|
656 |
+
"grunt-legacy-log": "~0.1.0",
|
657 |
+
"grunt-legacy-util": "~0.2.0",
|
658 |
+
"hooker": "~0.2.3",
|
659 |
+
"iconv-lite": "~0.2.11",
|
660 |
+
"js-yaml": "~2.0.5",
|
661 |
+
"lodash": "~0.9.2",
|
662 |
+
"minimatch": "~0.2.12",
|
663 |
+
"nopt": "~1.0.10",
|
664 |
+
"rimraf": "~2.2.8",
|
665 |
+
"underscore.string": "~2.2.1",
|
666 |
+
"which": "~1.0.5"
|
667 |
+
}
|
668 |
+
},
|
669 |
+
"grunt-cli": {
|
670 |
+
"version": "1.3.2",
|
671 |
+
"resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.2.tgz",
|
672 |
+
"integrity": "sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ==",
|
673 |
+
"requires": {
|
674 |
+
"grunt-known-options": "~1.1.0",
|
675 |
+
"interpret": "~1.1.0",
|
676 |
+
"liftoff": "~2.5.0",
|
677 |
+
"nopt": "~4.0.1",
|
678 |
+
"v8flags": "~3.1.1"
|
679 |
+
},
|
680 |
+
"dependencies": {
|
681 |
+
"nopt": {
|
682 |
+
"version": "4.0.3",
|
683 |
+
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
|
684 |
+
"integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
|
685 |
+
"requires": {
|
686 |
+
"abbrev": "1",
|
687 |
+
"osenv": "^0.1.4"
|
688 |
+
}
|
689 |
+
}
|
690 |
+
}
|
691 |
+
},
|
692 |
+
"grunt-contrib-clean": {
|
693 |
+
"version": "0.5.0",
|
694 |
+
"resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.5.0.tgz",
|
695 |
+
"integrity": "sha1-9T397ghJsce0Dp67umn0jExgecU=",
|
696 |
+
"dev": true,
|
697 |
+
"requires": {
|
698 |
+
"rimraf": "~2.2.1"
|
699 |
+
}
|
700 |
+
},
|
701 |
+
"grunt-contrib-concat": {
|
702 |
+
"version": "0.3.0",
|
703 |
+
"resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.3.0.tgz",
|
704 |
+
"integrity": "sha1-SPoNQzbSm2U62CJaa9b4VrRIPjI=",
|
705 |
+
"dev": true
|
706 |
+
},
|
707 |
+
"grunt-contrib-copy": {
|
708 |
+
"version": "0.5.0",
|
709 |
+
"resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-0.5.0.tgz",
|
710 |
+
"integrity": "sha1-QQB1rEWlhWuhkbHMclclRQ1KAhU=",
|
711 |
+
"dev": true
|
712 |
+
},
|
713 |
+
"grunt-contrib-cssmin": {
|
714 |
+
"version": "0.7.0",
|
715 |
+
"resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-0.7.0.tgz",
|
716 |
+
"integrity": "sha1-pXNenx0mMUnkn+A1KU5CnYxnC6s=",
|
717 |
+
"dev": true,
|
718 |
+
"requires": {
|
719 |
+
"clean-css": "~2.0.0",
|
720 |
+
"grunt-lib-contrib": "~0.6.0"
|
721 |
+
}
|
722 |
+
},
|
723 |
+
"grunt-contrib-jshint": {
|
724 |
+
"version": "0.6.5",
|
725 |
+
"resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz",
|
726 |
+
"integrity": "sha1-OvtGdnRTZMxKGe7nk0wOBgCLVm4=",
|
727 |
+
"dev": true,
|
728 |
+
"requires": {
|
729 |
+
"jshint": "~2.1.10"
|
730 |
+
}
|
731 |
+
},
|
732 |
+
"grunt-contrib-uglify": {
|
733 |
+
"version": "0.2.7",
|
734 |
+
"resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.2.7.tgz",
|
735 |
+
"integrity": "sha1-5r2lHgxAoUWfbOrUI8Ze/XJaG/c=",
|
736 |
+
"dev": true,
|
737 |
+
"requires": {
|
738 |
+
"grunt-lib-contrib": "~0.6.1",
|
739 |
+
"uglify-js": "~2.4.0"
|
740 |
+
}
|
741 |
+
},
|
742 |
+
"grunt-known-options": {
|
743 |
+
"version": "1.1.1",
|
744 |
+
"resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz",
|
745 |
+
"integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ=="
|
746 |
+
},
|
747 |
+
"grunt-legacy-log": {
|
748 |
+
"version": "0.1.3",
|
749 |
+
"resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz",
|
750 |
+
"integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=",
|
751 |
+
"dev": true,
|
752 |
+
"requires": {
|
753 |
+
"colors": "~0.6.2",
|
754 |
+
"grunt-legacy-log-utils": "~0.1.1",
|
755 |
+
"hooker": "~0.2.3",
|
756 |
+
"lodash": "~2.4.1",
|
757 |
+
"underscore.string": "~2.3.3"
|
758 |
+
},
|
759 |
+
"dependencies": {
|
760 |
+
"lodash": {
|
761 |
+
"version": "2.4.2",
|
762 |
+
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
|
763 |
+
"integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
|
764 |
+
"dev": true
|
765 |
+
},
|
766 |
+
"underscore.string": {
|
767 |
+
"version": "2.3.3",
|
768 |
+
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
|
769 |
+
"integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
|
770 |
+
"dev": true
|
771 |
+
}
|
772 |
+
}
|
773 |
+
},
|
774 |
+
"grunt-legacy-log-utils": {
|
775 |
+
"version": "0.1.1",
|
776 |
+
"resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz",
|
777 |
+
"integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=",
|
778 |
+
"dev": true,
|
779 |
+
"requires": {
|
780 |
+
"colors": "~0.6.2",
|
781 |
+
"lodash": "~2.4.1",
|
782 |
+
"underscore.string": "~2.3.3"
|
783 |
+
},
|
784 |
+
"dependencies": {
|
785 |
+
"lodash": {
|
786 |
+
"version": "2.4.2",
|
787 |
+
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
|
788 |
+
"integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
|
789 |
+
"dev": true
|
790 |
+
},
|
791 |
+
"underscore.string": {
|
792 |
+
"version": "2.3.3",
|
793 |
+
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
|
794 |
+
"integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
|
795 |
+
"dev": true
|
796 |
+
}
|
797 |
+
}
|
798 |
+
},
|
799 |
+
"grunt-legacy-util": {
|
800 |
+
"version": "0.2.0",
|
801 |
+
"resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz",
|
802 |
+
"integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=",
|
803 |
+
"dev": true,
|
804 |
+
"requires": {
|
805 |
+
"async": "~0.1.22",
|
806 |
+
"exit": "~0.1.1",
|
807 |
+
"getobject": "~0.1.0",
|
808 |
+
"hooker": "~0.2.3",
|
809 |
+
"lodash": "~0.9.2",
|
810 |
+
"underscore.string": "~2.2.1",
|
811 |
+
"which": "~1.0.5"
|
812 |
+
}
|
813 |
+
},
|
814 |
+
"grunt-lib-contrib": {
|
815 |
+
"version": "0.6.1",
|
816 |
+
"resolved": "https://registry.npmjs.org/grunt-lib-contrib/-/grunt-lib-contrib-0.6.1.tgz",
|
817 |
+
"integrity": "sha1-P1att9oG6BR5XuJBWw6+X7iQPrs=",
|
818 |
+
"dev": true,
|
819 |
+
"requires": {
|
820 |
+
"zlib-browserify": "0.0.1"
|
821 |
+
}
|
822 |
+
},
|
823 |
+
"grunt-preprocess": {
|
824 |
+
"version": "4.2.0",
|
825 |
+
"resolved": "https://registry.npmjs.org/grunt-preprocess/-/grunt-preprocess-4.2.0.tgz",
|
826 |
+
"integrity": "sha1-SJUTzet1A1NEmn9lbVAXWvc/FfY=",
|
827 |
+
"dev": true,
|
828 |
+
"requires": {
|
829 |
+
"preprocess": "~2.3.1"
|
830 |
+
}
|
831 |
+
},
|
832 |
+
"has": {
|
833 |
+
"version": "1.0.3",
|
834 |
+
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
|
835 |
+
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
|
836 |
+
"requires": {
|
837 |
+
"function-bind": "^1.1.1"
|
838 |
+
}
|
839 |
+
},
|
840 |
+
"has-value": {
|
841 |
+
"version": "1.0.0",
|
842 |
+
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
|
843 |
+
"integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
|
844 |
+
"requires": {
|
845 |
+
"get-value": "^2.0.6",
|
846 |
+
"has-values": "^1.0.0",
|
847 |
+
"isobject": "^3.0.0"
|
848 |
+
}
|
849 |
+
},
|
850 |
+
"has-values": {
|
851 |
+
"version": "1.0.0",
|
852 |
+
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
|
853 |
+
"integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
|
854 |
+
"requires": {
|
855 |
+
"is-number": "^3.0.0",
|
856 |
+
"kind-of": "^4.0.0"
|
857 |
+
},
|
858 |
+
"dependencies": {
|
859 |
+
"kind-of": {
|
860 |
+
"version": "4.0.0",
|
861 |
+
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
|
862 |
+
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
|
863 |
+
"requires": {
|
864 |
+
"is-buffer": "^1.1.5"
|
865 |
+
}
|
866 |
+
}
|
867 |
+
}
|
868 |
+
},
|
869 |
+
"homedir-polyfill": {
|
870 |
+
"version": "1.0.3",
|
871 |
+
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
|
872 |
+
"integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
|
873 |
+
"requires": {
|
874 |
+
"parse-passwd": "^1.0.0"
|
875 |
+
}
|
876 |
+
},
|
877 |
+
"hooker": {
|
878 |
+
"version": "0.2.3",
|
879 |
+
"resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
|
880 |
+
"integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
|
881 |
+
"dev": true
|
882 |
+
},
|
883 |
+
"iconv-lite": {
|
884 |
+
"version": "0.2.11",
|
885 |
+
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
|
886 |
+
"integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=",
|
887 |
+
"dev": true
|
888 |
+
},
|
889 |
+
"inherits": {
|
890 |
+
"version": "2.0.3",
|
891 |
+
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
892 |
+
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
|
893 |
+
"dev": true
|
894 |
+
},
|
895 |
+
"ini": {
|
896 |
+
"version": "1.3.5",
|
897 |
+
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
898 |
+
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
|
899 |
+
},
|
900 |
+
"interpret": {
|
901 |
+
"version": "1.1.0",
|
902 |
+
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
|
903 |
+
"integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ="
|
904 |
+
},
|
905 |
+
"is-absolute": {
|
906 |
+
"version": "1.0.0",
|
907 |
+
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
|
908 |
+
"integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
|
909 |
+
"requires": {
|
910 |
+
"is-relative": "^1.0.0",
|
911 |
+
"is-windows": "^1.0.1"
|
912 |
+
}
|
913 |
+
},
|
914 |
+
"is-accessor-descriptor": {
|
915 |
+
"version": "0.1.6",
|
916 |
+
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
917 |
+
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
|
918 |
+
"requires": {
|
919 |
+
"kind-of": "^3.0.2"
|
920 |
+
},
|
921 |
+
"dependencies": {
|
922 |
+
"kind-of": {
|
923 |
+
"version": "3.2.2",
|
924 |
+
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
925 |
+
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
926 |
+
"requires": {
|
927 |
+
"is-buffer": "^1.1.5"
|
928 |
+
}
|
929 |
+
}
|
930 |
+
}
|
931 |
+
},
|
932 |
+
"is-buffer": {
|
933 |
+
"version": "1.1.6",
|
934 |
+
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
|
935 |
+
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
|
936 |
+
},
|
937 |
+
"is-core-module": {
|
938 |
+
"version": "2.1.0",
|
939 |
+
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz",
|
940 |
+
"integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==",
|
941 |
+
"requires": {
|
942 |
+
"has": "^1.0.3"
|
943 |
+
}
|
944 |
+
},
|
945 |
+
"is-data-descriptor": {
|
946 |
+
"version": "0.1.4",
|
947 |
+
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
948 |
+
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
|
949 |
+
"requires": {
|
950 |
+
"kind-of": "^3.0.2"
|
951 |
+
},
|
952 |
+
"dependencies": {
|
953 |
+
"kind-of": {
|
954 |
+
"version": "3.2.2",
|
955 |
+
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
956 |
+
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
957 |
+
"requires": {
|
958 |
+
"is-buffer": "^1.1.5"
|
959 |
+
}
|
960 |
+
}
|
961 |
+
}
|
962 |
+
},
|
963 |
+
"is-descriptor": {
|
964 |
+
"version": "0.1.6",
|
965 |
+
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
|
966 |
+
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
|
967 |
+
"requires": {
|
968 |
+
"is-accessor-descriptor": "^0.1.6",
|
969 |
+
"is-data-descriptor": "^0.1.4",
|
970 |
+
"kind-of": "^5.0.0"
|
971 |
+
},
|
972 |
+
"dependencies": {
|
973 |
+
"kind-of": {
|
974 |
+
"version": "5.1.0",
|
975 |
+
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
|
976 |
+
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
|
977 |
+
}
|
978 |
+
}
|
979 |
+
},
|
980 |
+
"is-extendable": {
|
981 |
+
"version": "0.1.1",
|
982 |
+
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
|
983 |
+
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
|
984 |
+
},
|
985 |
+
"is-extglob": {
|
986 |
+
"version": "2.1.1",
|
987 |
+
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
988 |
+
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
|
989 |
+
},
|
990 |
+
"is-glob": {
|
991 |
+
"version": "3.1.0",
|
992 |
+
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
|
993 |
+
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
|
994 |
+
"requires": {
|
995 |
+
"is-extglob": "^2.1.0"
|
996 |
+
}
|
997 |
+
},
|
998 |
+
"is-number": {
|
999 |
+
"version": "3.0.0",
|
1000 |
+
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
|
1001 |
+
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
|
1002 |
+
"requires": {
|
1003 |
+
"kind-of": "^3.0.2"
|
1004 |
+
},
|
1005 |
+
"dependencies": {
|
1006 |
+
"kind-of": {
|
1007 |
+
"version": "3.2.2",
|
1008 |
+
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
1009 |
+
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
1010 |
+
"requires": {
|
1011 |
+
"is-buffer": "^1.1.5"
|
1012 |
+
}
|
1013 |
+
}
|
1014 |
+
}
|
1015 |
+
},
|
1016 |
+
"is-plain-object": {
|
1017 |
+
"version": "2.0.4",
|
1018 |
+
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
|
1019 |
+
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
|
1020 |
+
"requires": {
|
1021 |
+
"isobject": "^3.0.1"
|
1022 |
+
}
|
1023 |
+
},
|
1024 |
+
"is-relative": {
|
1025 |
+
"version": "1.0.0",
|
1026 |
+
"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
|
1027 |
+
"integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
|
1028 |
+
"requires": {
|
1029 |
+
"is-unc-path": "^1.0.0"
|
1030 |
+
}
|
1031 |
+
},
|
1032 |
+
"is-unc-path": {
|
1033 |
+
"version": "1.0.0",
|
1034 |
+
"resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
|
1035 |
+
"integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
|
1036 |
+
"requires": {
|
1037 |
+
"unc-path-regex": "^0.1.2"
|
1038 |
+
}
|
1039 |
+
},
|
1040 |
+
"is-windows": {
|
1041 |
+
"version": "1.0.2",
|
1042 |
+
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
|
1043 |
+
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
|
1044 |
+
},
|
1045 |
+
"isarray": {
|
1046 |
+
"version": "1.0.0",
|
1047 |
+
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
1048 |
+
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
1049 |
+
},
|
1050 |
+
"isexe": {
|
1051 |
+
"version": "2.0.0",
|
1052 |
+
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
1053 |
+
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
|
1054 |
+
},
|
1055 |
+
"isobject": {
|
1056 |
+
"version": "3.0.1",
|
1057 |
+
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
|
1058 |
+
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
|
1059 |
+
},
|
1060 |
+
"js-yaml": {
|
1061 |
+
"version": "2.0.5",
|
1062 |
+
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz",
|
1063 |
+
"integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=",
|
1064 |
+
"dev": true,
|
1065 |
+
"requires": {
|
1066 |
+
"argparse": "~ 0.1.11",
|
1067 |
+
"esprima": "~ 1.0.2"
|
1068 |
+
}
|
1069 |
+
},
|
1070 |
+
"jshint": {
|
1071 |
+
"version": "2.1.11",
|
1072 |
+
"resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz",
|
1073 |
+
"integrity": "sha1-61EI/vm6Xd67gwmD9XLSQuSeP5Y=",
|
1074 |
+
"dev": true,
|
1075 |
+
"requires": {
|
1076 |
+
"cli": "0.4.x",
|
1077 |
+
"console-browserify": "0.1.x",
|
1078 |
+
"minimatch": "0.x.x",
|
1079 |
+
"shelljs": "0.1.x",
|
1080 |
+
"underscore": "1.4.x"
|
1081 |
+
},
|
1082 |
+
"dependencies": {
|
1083 |
+
"underscore": {
|
1084 |
+
"version": "1.4.4",
|
1085 |
+
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
|
1086 |
+
"integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=",
|
1087 |
+
"dev": true
|
1088 |
+
}
|
1089 |
+
}
|
1090 |
+
},
|
1091 |
+
"kind-of": {
|
1092 |
+
"version": "6.0.3",
|
1093 |
+
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
|
1094 |
+
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
|
1095 |
+
},
|
1096 |
+
"liftoff": {
|
1097 |
+
"version": "2.5.0",
|
1098 |
+
"resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
|
1099 |
+
"integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
|
1100 |
+
"requires": {
|
1101 |
+
"extend": "^3.0.0",
|
1102 |
+
"findup-sync": "^2.0.0",
|
1103 |
+
"fined": "^1.0.1",
|
1104 |
+
"flagged-respawn": "^1.0.0",
|
1105 |
+
"is-plain-object": "^2.0.4",
|
1106 |
+
"object.map": "^1.0.0",
|
1107 |
+
"rechoir": "^0.6.2",
|
1108 |
+
"resolve": "^1.1.7"
|
1109 |
+
},
|
1110 |
+
"dependencies": {
|
1111 |
+
"findup-sync": {
|
1112 |
+
"version": "2.0.0",
|
1113 |
+
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
|
1114 |
+
"integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
|
1115 |
+
"requires": {
|
1116 |
+
"detect-file": "^1.0.0",
|
1117 |
+
"is-glob": "^3.1.0",
|
1118 |
+
"micromatch": "^3.0.4",
|
1119 |
+
"resolve-dir": "^1.0.1"
|
1120 |
+
}
|
1121 |
+
}
|
1122 |
+
}
|
1123 |
+
},
|
1124 |
+
"lodash": {
|
1125 |
+
"version": "0.9.2",
|
1126 |
+
"resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz",
|
1127 |
+
"integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=",
|
1128 |
+
"dev": true
|
1129 |
+
},
|
1130 |
+
"lru-cache": {
|
1131 |
+
"version": "2.7.3",
|
1132 |
+
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
|
1133 |
+
"integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
|
1134 |
+
"dev": true
|
1135 |
+
},
|
1136 |
+
"make-iterator": {
|
1137 |
+
"version": "1.0.1",
|
1138 |
+
"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
|
1139 |
+
"integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
|
1140 |
+
"requires": {
|
1141 |
+
"kind-of": "^6.0.2"
|
1142 |
+
}
|
1143 |
+
},
|
1144 |
+
"map-cache": {
|
1145 |
+
"version": "0.2.2",
|
1146 |
+
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
|
1147 |
+
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
|
1148 |
+
},
|
1149 |
+
"map-visit": {
|
1150 |
+
"version": "1.0.0",
|
1151 |
+
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
|
1152 |
+
"integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
|
1153 |
+
"requires": {
|
1154 |
+
"object-visit": "^1.0.0"
|
1155 |
+
}
|
1156 |
+
},
|
1157 |
+
"micromatch": {
|
1158 |
+
"version": "3.1.10",
|
1159 |
+
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
|
1160 |
+
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
|
1161 |
+
"requires": {
|
1162 |
+
"arr-diff": "^4.0.0",
|
1163 |
+
"array-unique": "^0.3.2",
|
1164 |
+
"braces": "^2.3.1",
|
1165 |
+
"define-property": "^2.0.2",
|
1166 |
+
"extend-shallow": "^3.0.2",
|
1167 |
+
"extglob": "^2.0.4",
|
1168 |
+
"fragment-cache": "^0.2.1",
|
1169 |
+
"kind-of": "^6.0.2",
|
1170 |
+
"nanomatch": "^1.2.9",
|
1171 |
+
"object.pick": "^1.3.0",
|
1172 |
+
"regex-not": "^1.0.0",
|
1173 |
+
"snapdragon": "^0.8.1",
|
1174 |
+
"to-regex": "^3.0.2"
|
1175 |
+
}
|
1176 |
+
},
|
1177 |
+
"minimatch": {
|
1178 |
+
"version": "0.2.14",
|
1179 |
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
|
1180 |
+
"integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
|
1181 |
+
"dev": true,
|
1182 |
+
"requires": {
|
1183 |
+
"lru-cache": "2",
|
1184 |
+
"sigmund": "~1.0.0"
|
1185 |
+
}
|
1186 |
+
},
|
1187 |
+
"mixin-deep": {
|
1188 |
+
"version": "1.3.2",
|
1189 |
+
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
|
1190 |
+
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
|
1191 |
+
"requires": {
|
1192 |
+
"for-in": "^1.0.2",
|
1193 |
+
"is-extendable": "^1.0.1"
|
1194 |
+
},
|
1195 |
+
"dependencies": {
|
1196 |
+
"is-extendable": {
|
1197 |
+
"version": "1.0.1",
|
1198 |
+
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
|
1199 |
+
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
|
1200 |
+
"requires": {
|
1201 |
+
"is-plain-object": "^2.0.4"
|
1202 |
+
}
|
1203 |
+
}
|
1204 |
+
}
|
1205 |
+
},
|
1206 |
+
"ms": {
|
1207 |
+
"version": "2.0.0",
|
1208 |
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
1209 |
+
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
1210 |
+
},
|
1211 |
+
"nanomatch": {
|
1212 |
+
"version": "1.2.13",
|
1213 |
+
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
|
1214 |
+
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
|
1215 |
+
"requires": {
|
1216 |
+
"arr-diff": "^4.0.0",
|
1217 |
+
"array-unique": "^0.3.2",
|
1218 |
+
"define-property": "^2.0.2",
|
1219 |
+
"extend-shallow": "^3.0.2",
|
1220 |
+
"fragment-cache": "^0.2.1",
|
1221 |
+
"is-windows": "^1.0.2",
|
1222 |
+
"kind-of": "^6.0.2",
|
1223 |
+
"object.pick": "^1.3.0",
|
1224 |
+
"regex-not": "^1.0.0",
|
1225 |
+
"snapdragon": "^0.8.1",
|
1226 |
+
"to-regex": "^3.0.1"
|
1227 |
+
}
|
1228 |
+
},
|
1229 |
+
"nopt": {
|
1230 |
+
"version": "1.0.10",
|
1231 |
+
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
|
1232 |
+
"integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
|
1233 |
+
"dev": true,
|
1234 |
+
"requires": {
|
1235 |
+
"abbrev": "1"
|
1236 |
+
}
|
1237 |
+
},
|
1238 |
+
"object-copy": {
|
1239 |
+
"version": "0.1.0",
|
1240 |
+
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
|
1241 |
+
"integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
|
1242 |
+
"requires": {
|
1243 |
+
"copy-descriptor": "^0.1.0",
|
1244 |
+
"define-property": "^0.2.5",
|
1245 |
+
"kind-of": "^3.0.3"
|
1246 |
+
},
|
1247 |
+
"dependencies": {
|
1248 |
+
"define-property": {
|
1249 |
+
"version": "0.2.5",
|
1250 |
+
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
1251 |
+
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
1252 |
+
"requires": {
|
1253 |
+
"is-descriptor": "^0.1.0"
|
1254 |
+
}
|
1255 |
+
},
|
1256 |
+
"kind-of": {
|
1257 |
+
"version": "3.2.2",
|
1258 |
+
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
1259 |
+
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
1260 |
+
"requires": {
|
1261 |
+
"is-buffer": "^1.1.5"
|
1262 |
+
}
|
1263 |
+
}
|
1264 |
+
}
|
1265 |
+
},
|
1266 |
+
"object-visit": {
|
1267 |
+
"version": "1.0.1",
|
1268 |
+
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
|
1269 |
+
"integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
|
1270 |
+
"requires": {
|
1271 |
+
"isobject": "^3.0.0"
|
1272 |
+
}
|
1273 |
+
},
|
1274 |
+
"object.defaults": {
|
1275 |
+
"version": "1.1.0",
|
1276 |
+
"resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
|
1277 |
+
"integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
|
1278 |
+
"requires": {
|
1279 |
+
"array-each": "^1.0.1",
|
1280 |
+
"array-slice": "^1.0.0",
|
1281 |
+
"for-own": "^1.0.0",
|
1282 |
+
"isobject": "^3.0.0"
|
1283 |
+
}
|
1284 |
+
},
|
1285 |
+
"object.map": {
|
1286 |
+
"version": "1.0.1",
|
1287 |
+
"resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
|
1288 |
+
"integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
|
1289 |
+
"requires": {
|
1290 |
+
"for-own": "^1.0.0",
|
1291 |
+
"make-iterator": "^1.0.0"
|
1292 |
+
}
|
1293 |
+
},
|
1294 |
+
"object.pick": {
|
1295 |
+
"version": "1.3.0",
|
1296 |
+
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
|
1297 |
+
"integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
|
1298 |
+
"requires": {
|
1299 |
+
"isobject": "^3.0.1"
|
1300 |
+
}
|
1301 |
+
},
|
1302 |
+
"os-homedir": {
|
1303 |
+
"version": "1.0.2",
|
1304 |
+
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
|
1305 |
+
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
|
1306 |
+
},
|
1307 |
+
"os-tmpdir": {
|
1308 |
+
"version": "1.0.2",
|
1309 |
+
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
1310 |
+
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
|
1311 |
+
},
|
1312 |
+
"osenv": {
|
1313 |
+
"version": "0.1.5",
|
1314 |
+
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
|
1315 |
+
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
|
1316 |
+
"requires": {
|
1317 |
+
"os-homedir": "^1.0.0",
|
1318 |
+
"os-tmpdir": "^1.0.0"
|
1319 |
+
}
|
1320 |
+
},
|
1321 |
+
"parse-filepath": {
|
1322 |
+
"version": "1.0.2",
|
1323 |
+
"resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
|
1324 |
+
"integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
|
1325 |
+
"requires": {
|
1326 |
+
"is-absolute": "^1.0.0",
|
1327 |
+
"map-cache": "^0.2.0",
|
1328 |
+
"path-root": "^0.1.1"
|
1329 |
+
}
|
1330 |
+
},
|
1331 |
+
"parse-passwd": {
|
1332 |
+
"version": "1.0.0",
|
1333 |
+
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
|
1334 |
+
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
|
1335 |
+
},
|
1336 |
+
"pascalcase": {
|
1337 |
+
"version": "0.1.1",
|
1338 |
+
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
|
1339 |
+
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
|
1340 |
+
},
|
1341 |
+
"path-parse": {
|
1342 |
+
"version": "1.0.6",
|
1343 |
+
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
1344 |
+
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
|
1345 |
+
},
|
1346 |
+
"path-root": {
|
1347 |
+
"version": "0.1.1",
|
1348 |
+
"resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
|
1349 |
+
"integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
|
1350 |
+
"requires": {
|
1351 |
+
"path-root-regex": "^0.1.0"
|
1352 |
+
}
|
1353 |
+
},
|
1354 |
+
"path-root-regex": {
|
1355 |
+
"version": "0.1.2",
|
1356 |
+
"resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
|
1357 |
+
"integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
|
1358 |
+
},
|
1359 |
+
"posix-character-classes": {
|
1360 |
+
"version": "0.1.1",
|
1361 |
+
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
|
1362 |
+
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
|
1363 |
+
},
|
1364 |
+
"preprocess": {
|
1365 |
+
"version": "2.3.1",
|
1366 |
+
"resolved": "https://registry.npmjs.org/preprocess/-/preprocess-2.3.1.tgz",
|
1367 |
+
"integrity": "sha1-vaMCLmI+m1mdTAgoGG2FvZ8SxQA=",
|
1368 |
+
"dev": true
|
1369 |
+
},
|
1370 |
+
"rechoir": {
|
1371 |
+
"version": "0.6.2",
|
1372 |
+
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
|
1373 |
+
"integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
|
1374 |
+
"requires": {
|
1375 |
+
"resolve": "^1.1.6"
|
1376 |
+
}
|
1377 |
+
},
|
1378 |
+
"regex-not": {
|
1379 |
+
"version": "1.0.2",
|
1380 |
+
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
|
1381 |
+
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
|
1382 |
+
"requires": {
|
1383 |
+
"extend-shallow": "^3.0.2",
|
1384 |
+
"safe-regex": "^1.1.0"
|
1385 |
+
}
|
1386 |
+
},
|
1387 |
+
"repeat-element": {
|
1388 |
+
"version": "1.1.3",
|
1389 |
+
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
|
1390 |
+
"integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
|
1391 |
+
},
|
1392 |
+
"repeat-string": {
|
1393 |
+
"version": "1.6.1",
|
1394 |
+
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
|
1395 |
+
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
|
1396 |
+
},
|
1397 |
+
"resolve": {
|
1398 |
+
"version": "1.18.1",
|
1399 |
+
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
|
1400 |
+
"integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
|
1401 |
+
"requires": {
|
1402 |
+
"is-core-module": "^2.0.0",
|
1403 |
+
"path-parse": "^1.0.6"
|
1404 |
+
}
|
1405 |
+
},
|
1406 |
+
"resolve-dir": {
|
1407 |
+
"version": "1.0.1",
|
1408 |
+
"resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
|
1409 |
+
"integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
|
1410 |
+
"requires": {
|
1411 |
+
"expand-tilde": "^2.0.0",
|
1412 |
+
"global-modules": "^1.0.0"
|
1413 |
+
}
|
1414 |
+
},
|
1415 |
+
"resolve-url": {
|
1416 |
+
"version": "0.2.1",
|
1417 |
+
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
|
1418 |
+
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
|
1419 |
+
},
|
1420 |
+
"ret": {
|
1421 |
+
"version": "0.1.15",
|
1422 |
+
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
|
1423 |
+
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
|
1424 |
+
},
|
1425 |
+
"rimraf": {
|
1426 |
+
"version": "2.2.8",
|
1427 |
+
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
|
1428 |
+
"integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
|
1429 |
+
"dev": true
|
1430 |
+
},
|
1431 |
+
"safe-regex": {
|
1432 |
+
"version": "1.1.0",
|
1433 |
+
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
|
1434 |
+
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
|
1435 |
+
"requires": {
|
1436 |
+
"ret": "~0.1.10"
|
1437 |
+
}
|
1438 |
+
},
|
1439 |
+
"set-value": {
|
1440 |
+
"version": "2.0.1",
|
1441 |
+
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
|
1442 |
+
"integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
|
1443 |
+
"requires": {
|
1444 |
+
"extend-shallow": "^2.0.1",
|
1445 |
+
"is-extendable": "^0.1.1",
|
1446 |
+
"is-plain-object": "^2.0.3",
|
1447 |
+
"split-string": "^3.0.1"
|
1448 |
+
},
|
1449 |
+
"dependencies": {
|
1450 |
+
"extend-shallow": {
|
1451 |
+
"version": "2.0.1",
|
1452 |
+
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
1453 |
+
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
1454 |
+
"requires": {
|
1455 |
+
"is-extendable": "^0.1.0"
|
1456 |
+
}
|
1457 |
+
}
|
1458 |
+
}
|
1459 |
+
},
|
1460 |
+
"shelljs": {
|
1461 |
+
"version": "0.1.4",
|
1462 |
+
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz",
|
1463 |
+
"integrity": "sha1-37vnjVbDwBaNL7eeEOzR28sH7A4=",
|
1464 |
+
"dev": true
|
1465 |
+
},
|
1466 |
+
"sigmund": {
|
1467 |
+
"version": "1.0.1",
|
1468 |
+
"resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
|
1469 |
+
"integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
|
1470 |
+
"dev": true
|
1471 |
+
},
|
1472 |
+
"snapdragon": {
|
1473 |
+
"version": "0.8.2",
|
1474 |
+
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
1475 |
+
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
|
1476 |
+
"requires": {
|
1477 |
+
"base": "^0.11.1",
|
1478 |
+
"debug": "^2.2.0",
|
1479 |
+
"define-property": "^0.2.5",
|
1480 |
+
"extend-shallow": "^2.0.1",
|
1481 |
+
"map-cache": "^0.2.2",
|
1482 |
+
"source-map": "^0.5.6",
|
1483 |
+
"source-map-resolve": "^0.5.0",
|
1484 |
+
"use": "^3.1.0"
|
1485 |
+
},
|
1486 |
+
"dependencies": {
|
1487 |
+
"define-property": {
|
1488 |
+
"version": "0.2.5",
|
1489 |
+
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
1490 |
+
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
1491 |
+
"requires": {
|
1492 |
+
"is-descriptor": "^0.1.0"
|
1493 |
+
}
|
1494 |
+
},
|
1495 |
+
"extend-shallow": {
|
1496 |
+
"version": "2.0.1",
|
1497 |
+
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
1498 |
+
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
1499 |
+
"requires": {
|
1500 |
+
"is-extendable": "^0.1.0"
|
1501 |
+
}
|
1502 |
+
},
|
1503 |
+
"source-map": {
|
1504 |
+
"version": "0.5.7",
|
1505 |
+
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
1506 |
+
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
|
1507 |
+
}
|
1508 |
+
}
|
1509 |
+
},
|
1510 |
+
"snapdragon-node": {
|
1511 |
+
"version": "2.1.1",
|
1512 |
+
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
|
1513 |
+
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
|
1514 |
+
"requires": {
|
1515 |
+
"define-property": "^1.0.0",
|
1516 |
+
"isobject": "^3.0.0",
|
1517 |
+
"snapdragon-util": "^3.0.1"
|
1518 |
+
},
|
1519 |
+
"dependencies": {
|
1520 |
+
"define-property": {
|
1521 |
+
"version": "1.0.0",
|
1522 |
+
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
|
1523 |
+
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
|
1524 |
+
"requires": {
|
1525 |
+
"is-descriptor": "^1.0.0"
|
1526 |
+
}
|
1527 |
+
},
|
1528 |
+
"is-accessor-descriptor": {
|
1529 |
+
"version": "1.0.0",
|
1530 |
+
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
|
1531 |
+
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
|
1532 |
+
"requires": {
|
1533 |
+
"kind-of": "^6.0.0"
|
1534 |
+
}
|
1535 |
+
},
|
1536 |
+
"is-data-descriptor": {
|
1537 |
+
"version": "1.0.0",
|
1538 |
+
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
|
1539 |
+
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
|
1540 |
+
"requires": {
|
1541 |
+
"kind-of": "^6.0.0"
|
1542 |
+
}
|
1543 |
+
},
|
1544 |
+
"is-descriptor": {
|
1545 |
+
"version": "1.0.2",
|
1546 |
+
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
|
1547 |
+
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
|
1548 |
+
"requires": {
|
1549 |
+
"is-accessor-descriptor": "^1.0.0",
|
1550 |
+
"is-data-descriptor": "^1.0.0",
|
1551 |
+
"kind-of": "^6.0.2"
|
1552 |
+
}
|
1553 |
+
}
|
1554 |
+
}
|
1555 |
+
},
|
1556 |
+
"snapdragon-util": {
|
1557 |
+
"version": "3.0.1",
|
1558 |
+
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
|
1559 |
+
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
|
1560 |
+
"requires": {
|
1561 |
+
"kind-of": "^3.2.0"
|
1562 |
+
},
|
1563 |
+
"dependencies": {
|
1564 |
+
"kind-of": {
|
1565 |
+
"version": "3.2.2",
|
1566 |
+
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
1567 |
+
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
1568 |
+
"requires": {
|
1569 |
+
"is-buffer": "^1.1.5"
|
1570 |
+
}
|
1571 |
+
}
|
1572 |
+
}
|
1573 |
+
},
|
1574 |
+
"source-map": {
|
1575 |
+
"version": "0.1.34",
|
1576 |
+
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
|
1577 |
+
"integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=",
|
1578 |
+
"dev": true,
|
1579 |
+
"requires": {
|
1580 |
+
"amdefine": ">=0.0.4"
|
1581 |
+
}
|
1582 |
+
},
|
1583 |
+
"source-map-resolve": {
|
1584 |
+
"version": "0.5.3",
|
1585 |
+
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
|
1586 |
+
"integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
|
1587 |
+
"requires": {
|
1588 |
+
"atob": "^2.1.2",
|
1589 |
+
"decode-uri-component": "^0.2.0",
|
1590 |
+
"resolve-url": "^0.2.1",
|
1591 |
+
"source-map-url": "^0.4.0",
|
1592 |
+
"urix": "^0.1.0"
|
1593 |
+
}
|
1594 |
+
},
|
1595 |
+
"source-map-url": {
|
1596 |
+
"version": "0.4.0",
|
1597 |
+
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
|
1598 |
+
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
|
1599 |
+
},
|
1600 |
+
"split-string": {
|
1601 |
+
"version": "3.1.0",
|
1602 |
+
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
|
1603 |
+
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
|
1604 |
+
"requires": {
|
1605 |
+
"extend-shallow": "^3.0.0"
|
1606 |
+
}
|
1607 |
+
},
|
1608 |
+
"static-extend": {
|
1609 |
+
"version": "0.1.2",
|
1610 |
+
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
|
1611 |
+
"integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
|
1612 |
+
"requires": {
|
1613 |
+
"define-property": "^0.2.5",
|
1614 |
+
"object-copy": "^0.1.0"
|
1615 |
+
},
|
1616 |
+
"dependencies": {
|
1617 |
+
"define-property": {
|
1618 |
+
"version": "0.2.5",
|
1619 |
+
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
1620 |
+
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
1621 |
+
"requires": {
|
1622 |
+
"is-descriptor": "^0.1.0"
|
1623 |
+
}
|
1624 |
+
}
|
1625 |
+
}
|
1626 |
+
},
|
1627 |
+
"to-object-path": {
|
1628 |
+
"version": "0.3.0",
|
1629 |
+
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
|
1630 |
+
"integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
|
1631 |
+
"requires": {
|
1632 |
+
"kind-of": "^3.0.2"
|
1633 |
+
},
|
1634 |
+
"dependencies": {
|
1635 |
+
"kind-of": {
|
1636 |
+
"version": "3.2.2",
|
1637 |
+
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
1638 |
+
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
1639 |
+
"requires": {
|
1640 |
+
"is-buffer": "^1.1.5"
|
1641 |
+
}
|
1642 |
+
}
|
1643 |
+
}
|
1644 |
+
},
|
1645 |
+
"to-regex": {
|
1646 |
+
"version": "3.0.2",
|
1647 |
+
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
|
1648 |
+
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
|
1649 |
+
"requires": {
|
1650 |
+
"define-property": "^2.0.2",
|
1651 |
+
"extend-shallow": "^3.0.2",
|
1652 |
+
"regex-not": "^1.0.2",
|
1653 |
+
"safe-regex": "^1.1.0"
|
1654 |
+
}
|
1655 |
+
},
|
1656 |
+
"to-regex-range": {
|
1657 |
+
"version": "2.1.1",
|
1658 |
+
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
|
1659 |
+
"integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
|
1660 |
+
"requires": {
|
1661 |
+
"is-number": "^3.0.0",
|
1662 |
+
"repeat-string": "^1.6.1"
|
1663 |
+
}
|
1664 |
+
},
|
1665 |
+
"uglify-js": {
|
1666 |
+
"version": "2.4.24",
|
1667 |
+
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz",
|
1668 |
+
"integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=",
|
1669 |
+
"dev": true,
|
1670 |
+
"requires": {
|
1671 |
+
"async": "~0.2.6",
|
1672 |
+
"source-map": "0.1.34",
|
1673 |
+
"uglify-to-browserify": "~1.0.0",
|
1674 |
+
"yargs": "~3.5.4"
|
1675 |
+
},
|
1676 |
+
"dependencies": {
|
1677 |
+
"async": {
|
1678 |
+
"version": "0.2.10",
|
1679 |
+
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
|
1680 |
+
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
|
1681 |
+
"dev": true
|
1682 |
+
}
|
1683 |
+
}
|
1684 |
+
},
|
1685 |
+
"uglify-to-browserify": {
|
1686 |
+
"version": "1.0.2",
|
1687 |
+
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
|
1688 |
+
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
|
1689 |
+
"dev": true
|
1690 |
+
},
|
1691 |
+
"unc-path-regex": {
|
1692 |
+
"version": "0.1.2",
|
1693 |
+
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
|
1694 |
+
"integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
|
1695 |
+
},
|
1696 |
+
"underscore": {
|
1697 |
+
"version": "1.7.0",
|
1698 |
+
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
|
1699 |
+
"integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=",
|
1700 |
+
"dev": true
|
1701 |
+
},
|
1702 |
+
"underscore.string": {
|
1703 |
+
"version": "2.2.1",
|
1704 |
+
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz",
|
1705 |
+
"integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=",
|
1706 |
+
"dev": true
|
1707 |
+
},
|
1708 |
+
"union-value": {
|
1709 |
+
"version": "1.0.1",
|
1710 |
+
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
|
1711 |
+
"integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
|
1712 |
+
"requires": {
|
1713 |
+
"arr-union": "^3.1.0",
|
1714 |
+
"get-value": "^2.0.6",
|
1715 |
+
"is-extendable": "^0.1.1",
|
1716 |
+
"set-value": "^2.0.1"
|
1717 |
+
}
|
1718 |
+
},
|
1719 |
+
"unset-value": {
|
1720 |
+
"version": "1.0.0",
|
1721 |
+
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
|
1722 |
+
"integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
|
1723 |
+
"requires": {
|
1724 |
+
"has-value": "^0.3.1",
|
1725 |
+
"isobject": "^3.0.0"
|
1726 |
+
},
|
1727 |
+
"dependencies": {
|
1728 |
+
"has-value": {
|
1729 |
+
"version": "0.3.1",
|
1730 |
+
"resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
|
1731 |
+
"integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
|
1732 |
+
"requires": {
|
1733 |
+
"get-value": "^2.0.3",
|
1734 |
+
"has-values": "^0.1.4",
|
1735 |
+
"isobject": "^2.0.0"
|
1736 |
+
},
|
1737 |
+
"dependencies": {
|
1738 |
+
"isobject": {
|
1739 |
+
"version": "2.1.0",
|
1740 |
+
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
|
1741 |
+
"integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
|
1742 |
+
"requires": {
|
1743 |
+
"isarray": "1.0.0"
|
1744 |
+
}
|
1745 |
+
}
|
1746 |
+
}
|
1747 |
+
},
|
1748 |
+
"has-values": {
|
1749 |
+
"version": "0.1.4",
|
1750 |
+
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
|
1751 |
+
"integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
|
1752 |
+
}
|
1753 |
+
}
|
1754 |
+
},
|
1755 |
+
"urix": {
|
1756 |
+
"version": "0.1.0",
|
1757 |
+
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
|
1758 |
+
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
|
1759 |
+
},
|
1760 |
+
"use": {
|
1761 |
+
"version": "3.1.1",
|
1762 |
+
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
|
1763 |
+
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
|
1764 |
+
},
|
1765 |
+
"v8flags": {
|
1766 |
+
"version": "3.1.3",
|
1767 |
+
"resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz",
|
1768 |
+
"integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==",
|
1769 |
+
"requires": {
|
1770 |
+
"homedir-polyfill": "^1.0.1"
|
1771 |
+
}
|
1772 |
+
},
|
1773 |
+
"which": {
|
1774 |
+
"version": "1.0.9",
|
1775 |
+
"resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz",
|
1776 |
+
"integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=",
|
1777 |
+
"dev": true
|
1778 |
+
},
|
1779 |
+
"window-size": {
|
1780 |
+
"version": "0.1.0",
|
1781 |
+
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
|
1782 |
+
"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
|
1783 |
+
"dev": true
|
1784 |
+
},
|
1785 |
+
"wordwrap": {
|
1786 |
+
"version": "0.0.2",
|
1787 |
+
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
|
1788 |
+
"integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
|
1789 |
+
"dev": true
|
1790 |
+
},
|
1791 |
+
"yargs": {
|
1792 |
+
"version": "3.5.4",
|
1793 |
+
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz",
|
1794 |
+
"integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=",
|
1795 |
+
"dev": true,
|
1796 |
+
"requires": {
|
1797 |
+
"camelcase": "^1.0.2",
|
1798 |
+
"decamelize": "^1.0.0",
|
1799 |
+
"window-size": "0.1.0",
|
1800 |
+
"wordwrap": "0.0.2"
|
1801 |
+
}
|
1802 |
+
},
|
1803 |
+
"zlib-browserify": {
|
1804 |
+
"version": "0.0.1",
|
1805 |
+
"resolved": "https://registry.npmjs.org/zlib-browserify/-/zlib-browserify-0.0.1.tgz",
|
1806 |
+
"integrity": "sha1-T6akXQDbwV8xikr6HZr8Aljhdsw=",
|
1807 |
+
"dev": true
|
1808 |
+
}
|
1809 |
+
}
|
1810 |
+
}
|
libs/factory/core/README.md
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
# Core Factory Framework
|
2 |
-
|
3 |
-
It performs the connection of system modules of the framework, is responsible for migrations, plugin updates, admin notifications, initialization of the plugin.
|
1 |
+
# Core Factory Framework
|
2 |
+
|
3 |
+
It performs the connection of system modules of the framework, is responsible for migrations, plugin updates, admin notifications, initialization of the plugin.
|
libs/factory/core/ajax/install-addons.php
CHANGED
@@ -1,228 +1,228 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Ajax plugin configuration
|
4 |
-
*
|
5 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
6 |
-
* @copyright (c) 2017 Webraftic Ltd
|
7 |
-
* @version 1.0
|
8 |
-
*/
|
9 |
-
|
10 |
-
// Exit if accessed directly
|
11 |
-
if( !defined('ABSPATH') ) {
|
12 |
-
exit;
|
13 |
-
}
|
14 |
-
|
15 |
-
/**
|
16 |
-
* This action allows you to process Ajax requests to activate external components Clearfy
|
17 |
-
*/
|
18 |
-
function
|
19 |
-
{
|
20 |
-
check_ajax_referer('updates');
|
21 |
-
|
22 |
-
$slug = $plugin_instance->request->post('plugin', null, true);
|
23 |
-
$action = $plugin_instance->request->post('plugin_action', null, true);
|
24 |
-
$storage = $plugin_instance->request->post('storage', null, true);
|
25 |
-
|
26 |
-
if( !current_user_can('update_plugins') ) {
|
27 |
-
wp_die(__('You don\'t have enough capability to edit this information.', '
|
28 |
-
}
|
29 |
-
|
30 |
-
if( empty($slug) || empty($action) ) {
|
31 |
-
wp_send_json_error(['error_message' => __('Required attributes are not passed or empty.', '
|
32 |
-
}
|
33 |
-
$success = false;
|
34 |
-
$send_data = [];
|
35 |
-
|
36 |
-
if( $storage == 'internal' ) {
|
37 |
-
if( $action == 'activate' ) {
|
38 |
-
if( $plugin_instance->activateComponent($slug) ) {
|
39 |
-
$success = true;
|
40 |
-
}
|
41 |
-
} else if( $action == 'deactivate' ) {
|
42 |
-
|
43 |
-
if( $plugin_instance->deactivateComponent($slug) ) {
|
44 |
-
$success = true;
|
45 |
-
}
|
46 |
-
} else {
|
47 |
-
wp_send_json_error(['error_message' => __('You are trying to perform an invalid action.', '
|
48 |
-
}
|
49 |
-
} else if( $storage == 'wordpress' || $storage == 'creativemotion' ) {
|
50 |
-
if( !empty($slug) ) {
|
51 |
-
$network_wide = $plugin_instance->isNetworkActive();
|
52 |
-
|
53 |
-
if( $action == 'activate' ) {
|
54 |
-
$result = activate_plugin($slug, '', $network_wide);
|
55 |
-
|
56 |
-
if( is_wp_error($result) ) {
|
57 |
-
wp_send_json_error(['error_message' => $result->get_error_message()]);
|
58 |
-
}
|
59 |
-
} else if( $action == 'deactivate' ) {
|
60 |
-
deactivate_plugins($slug, false, $network_wide);
|
61 |
-
}
|
62 |
-
|
63 |
-
$success = true;
|
64 |
-
}
|
65 |
-
}
|
66 |
-
|
67 |
-
if( $action == 'install' || $action == 'deactivate' ) {
|
68 |
-
try {
|
69 |
-
// Delete button
|
70 |
-
$delete_button = $plugin_instance->get_delete_component_button($storage, $slug);
|
71 |
-
$send_data['delete_button'] = $delete_button->get_button();
|
72 |
-
} catch( Exception $e ) {
|
73 |
-
wp_send_json_error(['error_message' => $e->getMessage()]);
|
74 |
-
}
|
75 |
-
}
|
76 |
-
|
77 |
-
// Если требуется обновить постоянные ссылки, даем сигнал, что пользователю, нужно показать
|
78 |
-
// всплывающее уведомление.
|
79 |
-
// todo: сделать более красивое решение с передачей текстовых сообщений
|
80 |
-
/*if ( $action == 'deactivate' ) {
|
81 |
-
$is_need_rewrite_rules = $plugin_instance->getPopulateOption( 'need_rewrite_rules' );
|
82 |
-
if ( $is_need_rewrite_rules ) {
|
83 |
-
$send_data['need_rewrite_rules'] = sprintf( '<span class="wbcr-clr-need-rewrite-rules-message">' . __( 'When you deactivate some components, permanent links may work incorrectly. If this happens, please, <a href="%s">update the permalinks</a>, so you could complete the deactivation.', '
|
84 |
-
}
|
85 |
-
}*/
|
86 |
-
|
87 |
-
if( $success ) {
|
88 |
-
// todo: для совместимости с плагином Clearfy
|
89 |
-
if( "wbcr_clearfy" === $plugin_instance->getPluginName() ) {
|
90 |
-
do_action('wbcr_clearfy_update_component', $slug, $action, $storage);
|
91 |
-
}
|
92 |
-
do_action("wfactory/updated_{$plugin_instance->getPluginName()}_component", $slug, $action, $storage);
|
93 |
-
|
94 |
-
wp_send_json_success($send_data);
|
95 |
-
}
|
96 |
-
|
97 |
-
wp_send_json_error(['error_message' => __('An unknown error occurred during the activation of the component.', '
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Ajax event that calls the wbcr/clearfy/activated_component action,
|
102 |
-
* to get the component to work. Usually this is a call to the installation functions,
|
103 |
-
* but in some cases, overwriting permanent references or compatibility checks.
|
104 |
-
*/
|
105 |
-
function
|
106 |
-
{
|
107 |
-
check_ajax_referer('updates');
|
108 |
-
|
109 |
-
$component_name = $plugin_instance->request->post('plugin', null, true);
|
110 |
-
|
111 |
-
if( !current_user_can('update_plugins') ) {
|
112 |
-
wp_send_json_error(['error_message' => __('You don\'t have enough capability to edit this information.', '
|
113 |
-
}
|
114 |
-
|
115 |
-
if( empty($component_name) ) {
|
116 |
-
wp_send_json_error(['error_message' => __('Required attribute [component_name] is empty.', '
|
117 |
-
}
|
118 |
-
// todo: для совместимости с плагином Clearfy
|
119 |
-
if( "wbcr_clearfy" === $plugin_instance->getPluginName() ) {
|
120 |
-
do_action('wbcr/clearfy/activated_component', $component_name);
|
121 |
-
}
|
122 |
-
do_action("wfactory/activated_{$plugin_instance->getPluginName()}_component", $component_name);
|
123 |
-
|
124 |
-
wp_send_json_success();
|
125 |
-
}
|
126 |
-
|
127 |
-
/**
|
128 |
-
* Ajax handler for installing a plugin.
|
129 |
-
*
|
130 |
-
* @since 4.6.0
|
131 |
-
*
|
132 |
-
* @see Plugin_Upgrader
|
133 |
-
*
|
134 |
-
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
|
135 |
-
*/
|
136 |
-
function
|
137 |
-
{
|
138 |
-
check_ajax_referer('updates');
|
139 |
-
|
140 |
-
if( empty($_POST['slug']) ) {
|
141 |
-
wp_send_json_error(array(
|
142 |
-
'slug' => '',
|
143 |
-
'errorCode' => 'no_plugin_specified',
|
144 |
-
'errorMessage' => __('No plugin specified.'),
|
145 |
-
));
|
146 |
-
}
|
147 |
-
|
148 |
-
$status = array(
|
149 |
-
'install' => 'plugin',
|
150 |
-
'slug' => sanitize_key(wp_unslash($_POST['slug'])),
|
151 |
-
);
|
152 |
-
|
153 |
-
if( !current_user_can('install_plugins') ) {
|
154 |
-
$status['errorMessage'] = __('Sorry, you are not allowed to install plugins on this site.');
|
155 |
-
wp_send_json_error($status);
|
156 |
-
}
|
157 |
-
|
158 |
-
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
159 |
-
include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
|
160 |
-
|
161 |
-
$api = plugins_api('plugin_information', array(
|
162 |
-
'slug' => sanitize_key(wp_unslash($_POST['slug'])),
|
163 |
-
'fields' => array(
|
164 |
-
'sections' => false,
|
165 |
-
),
|
166 |
-
));
|
167 |
-
|
168 |
-
if( is_wp_error($api) ) {
|
169 |
-
$status['errorMessage'] = $api->get_error_message();
|
170 |
-
wp_send_json_error($status);
|
171 |
-
}
|
172 |
-
|
173 |
-
$status['pluginName'] = $api->name;
|
174 |
-
|
175 |
-
$skin = new WP_Ajax_Upgrader_Skin();
|
176 |
-
$upgrader = new Plugin_Upgrader($skin);
|
177 |
-
//$result = $upgrader->install($api->download_link);
|
178 |
-
$result = $upgrader->install('https://clearfy.pro/components/download.php');
|
179 |
-
|
180 |
-
if( defined('WP_DEBUG') && WP_DEBUG ) {
|
181 |
-
$status['debug'] = $skin->get_upgrade_messages();
|
182 |
-
}
|
183 |
-
|
184 |
-
if( is_wp_error($result) ) {
|
185 |
-
$status['errorCode'] = $result->get_error_code();
|
186 |
-
$status['errorMessage'] = $result->get_error_message();
|
187 |
-
wp_send_json_error($status);
|
188 |
-
} elseif( is_wp_error($skin->result) ) {
|
189 |
-
$status['errorCode'] = $skin->result->get_error_code();
|
190 |
-
$status['errorMessage'] = $skin->result->get_error_message();
|
191 |
-
wp_send_json_error($status);
|
192 |
-
} elseif( $skin->get_errors()->has_errors() ) {
|
193 |
-
$status['errorMessage'] = $skin->get_error_messages();
|
194 |
-
wp_send_json_error($status);
|
195 |
-
} elseif( is_null($result) ) {
|
196 |
-
global $wp_filesystem;
|
197 |
-
|
198 |
-
$status['errorCode'] = 'unable_to_connect_to_filesystem';
|
199 |
-
$status['errorMessage'] = __('Unable to connect to the filesystem. Please confirm your credentials.');
|
200 |
-
|
201 |
-
// Pass through the error from WP_Filesystem if one was raised.
|
202 |
-
if( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->has_errors() ) {
|
203 |
-
$status['errorMessage'] = esc_html($wp_filesystem->errors->get_error_message());
|
204 |
-
}
|
205 |
-
|
206 |
-
wp_send_json_error($status);
|
207 |
-
}
|
208 |
-
|
209 |
-
$install_status = install_plugin_install_status($api);
|
210 |
-
$pagenow = isset($_POST['pagenow']) ? sanitize_key($_POST['pagenow']) : '';
|
211 |
-
|
212 |
-
// If installation request is coming from import page, do not return network activation link.
|
213 |
-
$plugins_url = ('import' === $pagenow) ? admin_url('plugins.php') : network_admin_url('plugins.php');
|
214 |
-
|
215 |
-
if( current_user_can('activate_plugin', $install_status['file']) && is_plugin_inactive($install_status['file']) ) {
|
216 |
-
$status['activateUrl'] = add_query_arg(array(
|
217 |
-
'_wpnonce' => wp_create_nonce('activate-plugin_' . $install_status['file']),
|
218 |
-
'action' => 'activate',
|
219 |
-
'plugin' => $install_status['file'],
|
220 |
-
), $plugins_url);
|
221 |
-
}
|
222 |
-
|
223 |
-
if( is_multisite() && current_user_can('manage_network_plugins') && 'import' !== $pagenow ) {
|
224 |
-
$status['activateUrl'] = add_query_arg(array('networkwide' => 1), $status['activateUrl']);
|
225 |
-
}
|
226 |
-
|
227 |
-
wp_send_json_success($status);
|
228 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Ajax plugin configuration
|
4 |
+
*
|
5 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
6 |
+
* @copyright (c) 2017 Webraftic Ltd
|
7 |
+
* @version 1.0
|
8 |
+
*/
|
9 |
+
|
10 |
+
// Exit if accessed directly
|
11 |
+
if( !defined('ABSPATH') ) {
|
12 |
+
exit;
|
13 |
+
}
|
14 |
+
|
15 |
+
/**
|
16 |
+
* This action allows you to process Ajax requests to activate external components Clearfy
|
17 |
+
*/
|
18 |
+
function wfactory_460_install_components($plugin_instance)
|
19 |
+
{
|
20 |
+
check_ajax_referer('updates');
|
21 |
+
|
22 |
+
$slug = $plugin_instance->request->post('plugin', null, true);
|
23 |
+
$action = $plugin_instance->request->post('plugin_action', null, true);
|
24 |
+
$storage = $plugin_instance->request->post('storage', null, true);
|
25 |
+
|
26 |
+
if( !current_user_can('update_plugins') ) {
|
27 |
+
wp_die(__('You don\'t have enough capability to edit this information.', 'wbcr_factory_460'), __('Something went wrong.'), 403);
|
28 |
+
}
|
29 |
+
|
30 |
+
if( empty($slug) || empty($action) ) {
|
31 |
+
wp_send_json_error(['error_message' => __('Required attributes are not passed or empty.', 'wbcr_factory_460')]);
|
32 |
+
}
|
33 |
+
$success = false;
|
34 |
+
$send_data = [];
|
35 |
+
|
36 |
+
if( $storage == 'internal' ) {
|
37 |
+
if( $action == 'activate' ) {
|
38 |
+
if( $plugin_instance->activateComponent($slug) ) {
|
39 |
+
$success = true;
|
40 |
+
}
|
41 |
+
} else if( $action == 'deactivate' ) {
|
42 |
+
|
43 |
+
if( $plugin_instance->deactivateComponent($slug) ) {
|
44 |
+
$success = true;
|
45 |
+
}
|
46 |
+
} else {
|
47 |
+
wp_send_json_error(['error_message' => __('You are trying to perform an invalid action.', 'wbcr_factory_460')]);
|
48 |
+
}
|
49 |
+
} else if( $storage == 'wordpress' || $storage == 'creativemotion' ) {
|
50 |
+
if( !empty($slug) ) {
|
51 |
+
$network_wide = $plugin_instance->isNetworkActive();
|
52 |
+
|
53 |
+
if( $action == 'activate' ) {
|
54 |
+
$result = activate_plugin($slug, '', $network_wide);
|
55 |
+
|
56 |
+
if( is_wp_error($result) ) {
|
57 |
+
wp_send_json_error(['error_message' => $result->get_error_message()]);
|
58 |
+
}
|
59 |
+
} else if( $action == 'deactivate' ) {
|
60 |
+
deactivate_plugins($slug, false, $network_wide);
|
61 |
+
}
|
62 |
+
|
63 |
+
$success = true;
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
if( $action == 'install' || $action == 'deactivate' ) {
|
68 |
+
try {
|
69 |
+
// Delete button
|
70 |
+
$delete_button = $plugin_instance->get_delete_component_button($storage, $slug);
|
71 |
+
$send_data['delete_button'] = $delete_button->get_button();
|
72 |
+
} catch( Exception $e ) {
|
73 |
+
wp_send_json_error(['error_message' => $e->getMessage()]);
|
74 |
+
}
|
75 |
+
}
|
76 |
+
|
77 |
+
// Если требуется обновить постоянные ссылки, даем сигнал, что пользователю, нужно показать
|
78 |
+
// всплывающее уведомление.
|
79 |
+
// todo: сделать более красивое решение с передачей текстовых сообщений
|
80 |
+
/*if ( $action == 'deactivate' ) {
|
81 |
+
$is_need_rewrite_rules = $plugin_instance->getPopulateOption( 'need_rewrite_rules' );
|
82 |
+
if ( $is_need_rewrite_rules ) {
|
83 |
+
$send_data['need_rewrite_rules'] = sprintf( '<span class="wbcr-clr-need-rewrite-rules-message">' . __( 'When you deactivate some components, permanent links may work incorrectly. If this happens, please, <a href="%s">update the permalinks</a>, so you could complete the deactivation.', 'wbcr_factory_460' ), admin_url( 'options-permalink.php' ) . '</span>' );
|
84 |
+
}
|
85 |
+
}*/
|
86 |
+
|
87 |
+
if( $success ) {
|
88 |
+
// todo: для совместимости с плагином Clearfy
|
89 |
+
if( "wbcr_clearfy" === $plugin_instance->getPluginName() ) {
|
90 |
+
do_action('wbcr_clearfy_update_component', $slug, $action, $storage);
|
91 |
+
}
|
92 |
+
do_action("wfactory/updated_{$plugin_instance->getPluginName()}_component", $slug, $action, $storage);
|
93 |
+
|
94 |
+
wp_send_json_success($send_data);
|
95 |
+
}
|
96 |
+
|
97 |
+
wp_send_json_error(['error_message' => __('An unknown error occurred during the activation of the component.', 'wbcr_factory_460')]);
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Ajax event that calls the wbcr/clearfy/activated_component action,
|
102 |
+
* to get the component to work. Usually this is a call to the installation functions,
|
103 |
+
* but in some cases, overwriting permanent references or compatibility checks.
|
104 |
+
*/
|
105 |
+
function wfactory_460_prepare_component($plugin_instance)
|
106 |
+
{
|
107 |
+
check_ajax_referer('updates');
|
108 |
+
|
109 |
+
$component_name = $plugin_instance->request->post('plugin', null, true);
|
110 |
+
|
111 |
+
if( !current_user_can('update_plugins') ) {
|
112 |
+
wp_send_json_error(['error_message' => __('You don\'t have enough capability to edit this information.', 'wbcr_factory_460')], 403);
|
113 |
+
}
|
114 |
+
|
115 |
+
if( empty($component_name) ) {
|
116 |
+
wp_send_json_error(['error_message' => __('Required attribute [component_name] is empty.', 'wbcr_factory_460')]);
|
117 |
+
}
|
118 |
+
// todo: для совместимости с плагином Clearfy
|
119 |
+
if( "wbcr_clearfy" === $plugin_instance->getPluginName() ) {
|
120 |
+
do_action('wbcr/clearfy/activated_component', $component_name);
|
121 |
+
}
|
122 |
+
do_action("wfactory/activated_{$plugin_instance->getPluginName()}_component", $component_name);
|
123 |
+
|
124 |
+
wp_send_json_success();
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Ajax handler for installing a plugin.
|
129 |
+
*
|
130 |
+
* @since 4.6.0
|
131 |
+
*
|
132 |
+
* @see Plugin_Upgrader
|
133 |
+
*
|
134 |
+
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
|
135 |
+
*/
|
136 |
+
function wfactory_460_creativemotion_install_plugin($plugin_instance)
|
137 |
+
{
|
138 |
+
check_ajax_referer('updates');
|
139 |
+
|
140 |
+
if( empty($_POST['slug']) ) {
|
141 |
+
wp_send_json_error(array(
|
142 |
+
'slug' => '',
|
143 |
+
'errorCode' => 'no_plugin_specified',
|
144 |
+
'errorMessage' => __('No plugin specified.'),
|
145 |
+
));
|
146 |
+
}
|
147 |
+
|
148 |
+
$status = array(
|
149 |
+
'install' => 'plugin',
|
150 |
+
'slug' => sanitize_key(wp_unslash($_POST['slug'])),
|
151 |
+
);
|
152 |
+
|
153 |
+
if( !current_user_can('install_plugins') ) {
|
154 |
+
$status['errorMessage'] = __('Sorry, you are not allowed to install plugins on this site.');
|
155 |
+
wp_send_json_error($status);
|
156 |
+
}
|
157 |
+
|
158 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
159 |
+
include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
|
160 |
+
|
161 |
+
$api = plugins_api('plugin_information', array(
|
162 |
+
'slug' => sanitize_key(wp_unslash($_POST['slug'])),
|
163 |
+
'fields' => array(
|
164 |
+
'sections' => false,
|
165 |
+
),
|
166 |
+
));
|
167 |
+
|
168 |
+
if( is_wp_error($api) ) {
|
169 |
+
$status['errorMessage'] = $api->get_error_message();
|
170 |
+
wp_send_json_error($status);
|
171 |
+
}
|
172 |
+
|
173 |
+
$status['pluginName'] = $api->name;
|
174 |
+
|
175 |
+
$skin = new WP_Ajax_Upgrader_Skin();
|
176 |
+
$upgrader = new Plugin_Upgrader($skin);
|
177 |
+
//$result = $upgrader->install($api->download_link);
|
178 |
+
$result = $upgrader->install('https://clearfy.pro/components/download.php');
|
179 |
+
|
180 |
+
if( defined('WP_DEBUG') && WP_DEBUG ) {
|
181 |
+
$status['debug'] = $skin->get_upgrade_messages();
|
182 |
+
}
|
183 |
+
|
184 |
+
if( is_wp_error($result) ) {
|
185 |
+
$status['errorCode'] = $result->get_error_code();
|
186 |
+
$status['errorMessage'] = $result->get_error_message();
|
187 |
+
wp_send_json_error($status);
|
188 |
+
} elseif( is_wp_error($skin->result) ) {
|
189 |
+
$status['errorCode'] = $skin->result->get_error_code();
|
190 |
+
$status['errorMessage'] = $skin->result->get_error_message();
|
191 |
+
wp_send_json_error($status);
|
192 |
+
} elseif( $skin->get_errors()->has_errors() ) {
|
193 |
+
$status['errorMessage'] = $skin->get_error_messages();
|
194 |
+
wp_send_json_error($status);
|
195 |
+
} elseif( is_null($result) ) {
|
196 |
+
global $wp_filesystem;
|
197 |
+
|
198 |
+
$status['errorCode'] = 'unable_to_connect_to_filesystem';
|
199 |
+
$status['errorMessage'] = __('Unable to connect to the filesystem. Please confirm your credentials.');
|
200 |
+
|
201 |
+
// Pass through the error from WP_Filesystem if one was raised.
|
202 |
+
if( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->has_errors() ) {
|
203 |
+
$status['errorMessage'] = esc_html($wp_filesystem->errors->get_error_message());
|
204 |
+
}
|
205 |
+
|
206 |
+
wp_send_json_error($status);
|
207 |
+
}
|
208 |
+
|
209 |
+
$install_status = install_plugin_install_status($api);
|
210 |
+
$pagenow = isset($_POST['pagenow']) ? sanitize_key($_POST['pagenow']) : '';
|
211 |
+
|
212 |
+
// If installation request is coming from import page, do not return network activation link.
|
213 |
+
$plugins_url = ('import' === $pagenow) ? admin_url('plugins.php') : network_admin_url('plugins.php');
|
214 |
+
|
215 |
+
if( current_user_can('activate_plugin', $install_status['file']) && is_plugin_inactive($install_status['file']) ) {
|
216 |
+
$status['activateUrl'] = add_query_arg(array(
|
217 |
+
'_wpnonce' => wp_create_nonce('activate-plugin_' . $install_status['file']),
|
218 |
+
'action' => 'activate',
|
219 |
+
'plugin' => $install_status['file'],
|
220 |
+
), $plugins_url);
|
221 |
+
}
|
222 |
+
|
223 |
+
if( is_multisite() && current_user_can('manage_network_plugins') && 'import' !== $pagenow ) {
|
224 |
+
$status['activateUrl'] = add_query_arg(array('networkwide' => 1), $status['activateUrl']);
|
225 |
+
}
|
226 |
+
|
227 |
+
wp_send_json_success($status);
|
228 |
}
|
libs/factory/core/assets/js/core-components.js
CHANGED
@@ -1,227 +1,227 @@
|
|
1 |
-
/**
|
2 |
-
* This code provides tools for downloading, installing external add-ons for the Clearfy plugin
|
3 |
-
*
|
4 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
5 |
-
* @copyright (c) 10.09.2017, Webcraftic
|
6 |
-
* @version 1.0
|
7 |
-
*/
|
8 |
-
|
9 |
-
(function($) {
|
10 |
-
'use strict';
|
11 |
-
|
12 |
-
var externalAddon = {
|
13 |
-
init: function() {
|
14 |
-
this.events();
|
15 |
-
},
|
16 |
-
events: function() {
|
17 |
-
var self = this;
|
18 |
-
|
19 |
-
/**
|
20 |
-
* This event is intended for installation, removal, activation, deactivation of external add-ons
|
21 |
-
*/
|
22 |
-
|
23 |
-
$(document).on('click', '.wfactory-
|
24 |
-
var $this = $(this),
|
25 |
-
button_i18n = $(this).data('i18n'),
|
26 |
-
plugin_slug = $(this).data('slug'),
|
27 |
-
plugin_action = $(this).data('plugin-action'),
|
28 |
-
plugin = $(this).data('plugin'),
|
29 |
-
storage = $(this).data('storage'),
|
30 |
-
wpnonce = $(this).data('wpnonce');
|
31 |
-
|
32 |
-
var action = ('creativemotion' === storage)
|
33 |
-
? 'wfactory-
|
34 |
-
: 'install-plugin';
|
35 |
-
|
36 |
-
if( storage === 'freemius' || ((storage === 'wordpress' || storage === 'creativemotion' || storage === 'internal') && (plugin_action === 'activate' || plugin_action === 'deactivate')) ) {
|
37 |
-
action = 'wfactory-
|
38 |
-
} else if( storage === 'wordpress' && plugin_action === 'delete' ) {
|
39 |
-
action = 'delete-plugin';
|
40 |
-
}
|
41 |
-
|
42 |
-
var data = {
|
43 |
-
action: action,
|
44 |
-
slug: plugin_slug,
|
45 |
-
storage: storage,
|
46 |
-
plugin: plugin,
|
47 |
-
plugin_action: plugin_action,
|
48 |
-
_wpnonce: wpnonce
|
49 |
-
};
|
50 |
-
|
51 |
-
if( plugin_action === 'install' ) {
|
52 |
-
$this.addClass('updating-message');
|
53 |
-
}
|
54 |
-
|
55 |
-
$this.addClass('disabled').text(button_i18n.loading);
|
56 |
-
|
57 |
-
$.
|
58 |
-
|
59 |
-
self.sendRequest(data, function(response) {
|
60 |
-
if( !response || !response.success ) {
|
61 |
-
$.
|
62 |
-
$this,
|
63 |
-
data,
|
64 |
-
response
|
65 |
-
]);
|
66 |
-
|
67 |
-
return;
|
68 |
-
}
|
69 |
-
|
70 |
-
if( response.success ) {
|
71 |
-
$this.removeClass('disabled').removeClass('updating-message');
|
72 |
-
|
73 |
-
if( plugin_action === 'install' ) {
|
74 |
-
|
75 |
-
plugin_action = 'activate';
|
76 |
-
$this.data('plugin-action', 'activate');
|
77 |
-
$this.attr('data-plugin-action', 'activate');
|
78 |
-
|
79 |
-
if( $this.hasClass('button') ) {
|
80 |
-
$this.removeClass('button-default').addClass('button-primary');
|
81 |
-
}
|
82 |
-
|
83 |
-
$.
|
84 |
-
$this,
|
85 |
-
data,
|
86 |
-
response
|
87 |
-
]);
|
88 |
-
|
89 |
-
} else if( plugin_action === 'activate' ) {
|
90 |
-
|
91 |
-
plugin_action = 'deactivate';
|
92 |
-
$this.data('plugin-action', 'deactivate');
|
93 |
-
$this.attr('data-plugin-action', 'deactivate');
|
94 |
-
|
95 |
-
if( $this.hasClass('button') ) {
|
96 |
-
$this.removeClass('button-primary').addClass('button-default');
|
97 |
-
}
|
98 |
-
|
99 |
-
$.
|
100 |
-
$this,
|
101 |
-
data,
|
102 |
-
response
|
103 |
-
]);
|
104 |
-
|
105 |
-
/**
|
106 |
-
* Send an additional request for activation of the component, during activation
|
107 |
-
* perform the action wbcr/clearfy/activated_component.
|
108 |
-
*
|
109 |
-
* Basically, this is necessary to prepare the plugin to work, write the necessary rows and
|
110 |
-
* tables in the database, rewriting permalinks, checking conflicts, etc.
|
111 |
-
*/
|
112 |
-
if( storage === 'freemius' || storage === 'internal' ) {
|
113 |
-
self.sendRequestToComponentActivationPrepare($this, data, button_i18n);
|
114 |
-
return;
|
115 |
-
}
|
116 |
-
|
117 |
-
} else if( plugin_action === 'deactivate' ) {
|
118 |
-
|
119 |
-
plugin_action = 'activate';
|
120 |
-
$this.data('plugin-action', 'activate');
|
121 |
-
$this.attr('data-plugin-action', 'activate');
|
122 |
-
|
123 |
-
if( $this.hasClass('button') ) {
|
124 |
-
$this.removeClass('button-default').addClass('button-primary');
|
125 |
-
}
|
126 |
-
|
127 |
-
$.
|
128 |
-
$this,
|
129 |
-
data,
|
130 |
-
response
|
131 |
-
]);
|
132 |
-
|
133 |
-
} else if( plugin_action === 'delete' ) {
|
134 |
-
|
135 |
-
plugin_action = 'install';
|
136 |
-
|
137 |
-
$.
|
138 |
-
}
|
139 |
-
} else {
|
140 |
-
if( plugin_action === 'install' ) {
|
141 |
-
$this.removeClass('updating-message');
|
142 |
-
}
|
143 |
-
}
|
144 |
-
|
145 |
-
$this.text(button_i18n[plugin_action]);
|
146 |
-
|
147 |
-
$.
|
148 |
-
});
|
149 |
-
|
150 |
-
return false;
|
151 |
-
});
|
152 |
-
},
|
153 |
-
|
154 |
-
/**
|
155 |
-
* Отправляет дополнительный запрос на активацию компонента, во время активации
|
156 |
-
* выполняет хук wbcr/clearfy/activated_component.
|
157 |
-
*
|
158 |
-
* В принципе, это необходимо для подготовки плагина к работе, записи необходимых строк и таблиц в
|
159 |
-
* базу данных, перепись постоянных ссылок, проверка конфликтов и т.д.
|
160 |
-
*
|
161 |
-
* @param {object} componentButton
|
162 |
-
* @param {object} sendData
|
163 |
-
* @param {object} button_i18n
|
164 |
-
*/
|
165 |
-
sendRequestToComponentActivationPrepare: function(componentButton, sendData, button_i18n) {
|
166 |
-
var self = this;
|
167 |
-
|
168 |
-
componentButton.addClass('button-primary')
|
169 |
-
.addClass('disabled')
|
170 |
-
.text(button_i18n.preparation);
|
171 |
-
|
172 |
-
sendData.action = 'wfactory-
|
173 |
-
|
174 |
-
this.sendRequest(sendData, function(response) {
|
175 |
-
componentButton.removeClass('disabled');
|
176 |
-
|
177 |
-
if( !response || !response.success ) {
|
178 |
-
componentButton.text(button_i18n['activate']);
|
179 |
-
|
180 |
-
$.
|
181 |
-
componentButton,
|
182 |
-
sendData,
|
183 |
-
response
|
184 |
-
]);
|
185 |
-
return;
|
186 |
-
}
|
187 |
-
|
188 |
-
componentButton.removeClass('button-primary').text(button_i18n['deactivate']);
|
189 |
-
|
190 |
-
$.
|
191 |
-
componentButton,
|
192 |
-
sendData,
|
193 |
-
response
|
194 |
-
]);
|
195 |
-
});
|
196 |
-
},
|
197 |
-
|
198 |
-
sendRequest: function(data, callback) {
|
199 |
-
var self = this;
|
200 |
-
|
201 |
-
$.ajax(ajaxurl, {
|
202 |
-
type: 'post',
|
203 |
-
dataType: 'json',
|
204 |
-
data: data,
|
205 |
-
success: function(data, textStatus, jqXHR) {
|
206 |
-
callback && callback(data);
|
207 |
-
},
|
208 |
-
error: function(xhr, ajaxOptions, thrownError) {
|
209 |
-
console.log(xhr.status);
|
210 |
-
console.log(xhr.responseText);
|
211 |
-
console.log(thrownError);
|
212 |
-
|
213 |
-
$.
|
214 |
-
xhr,
|
215 |
-
ajaxOptions,
|
216 |
-
thrownError
|
217 |
-
]);
|
218 |
-
}
|
219 |
-
});
|
220 |
-
}
|
221 |
-
};
|
222 |
-
|
223 |
-
$(document).ready(function() {
|
224 |
-
externalAddon.init();
|
225 |
-
});
|
226 |
-
|
227 |
-
})(jQuery);
|
1 |
+
/**
|
2 |
+
* This code provides tools for downloading, installing external add-ons for the Clearfy plugin
|
3 |
+
*
|
4 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
5 |
+
* @copyright (c) 10.09.2017, Webcraftic
|
6 |
+
* @version 1.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
(function($) {
|
10 |
+
'use strict';
|
11 |
+
|
12 |
+
var externalAddon = {
|
13 |
+
init: function() {
|
14 |
+
this.events();
|
15 |
+
},
|
16 |
+
events: function() {
|
17 |
+
var self = this;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* This event is intended for installation, removal, activation, deactivation of external add-ons
|
21 |
+
*/
|
22 |
+
|
23 |
+
$(document).on('click', '.wfactory-460-process-button', function() {
|
24 |
+
var $this = $(this),
|
25 |
+
button_i18n = $(this).data('i18n'),
|
26 |
+
plugin_slug = $(this).data('slug'),
|
27 |
+
plugin_action = $(this).data('plugin-action'),
|
28 |
+
plugin = $(this).data('plugin'),
|
29 |
+
storage = $(this).data('storage'),
|
30 |
+
wpnonce = $(this).data('wpnonce');
|
31 |
+
|
32 |
+
var action = ('creativemotion' === storage)
|
33 |
+
? 'wfactory-460-creativemotion-install-plugin'
|
34 |
+
: 'install-plugin';
|
35 |
+
|
36 |
+
if( storage === 'freemius' || ((storage === 'wordpress' || storage === 'creativemotion' || storage === 'internal') && (plugin_action === 'activate' || plugin_action === 'deactivate')) ) {
|
37 |
+
action = 'wfactory-460-intall-component';
|
38 |
+
} else if( storage === 'wordpress' && plugin_action === 'delete' ) {
|
39 |
+
action = 'delete-plugin';
|
40 |
+
}
|
41 |
+
|
42 |
+
var data = {
|
43 |
+
action: action,
|
44 |
+
slug: plugin_slug,
|
45 |
+
storage: storage,
|
46 |
+
plugin: plugin,
|
47 |
+
plugin_action: plugin_action,
|
48 |
+
_wpnonce: wpnonce
|
49 |
+
};
|
50 |
+
|
51 |
+
if( plugin_action === 'install' ) {
|
52 |
+
$this.addClass('updating-message');
|
53 |
+
}
|
54 |
+
|
55 |
+
$this.addClass('disabled').text(button_i18n.loading);
|
56 |
+
|
57 |
+
$.wfactory_460.hooks.run('core/components/pre_update', [$this, data]);
|
58 |
+
|
59 |
+
self.sendRequest(data, function(response) {
|
60 |
+
if( !response || !response.success ) {
|
61 |
+
$.wfactory_460.hooks.run('core/components/update_error', [
|
62 |
+
$this,
|
63 |
+
data,
|
64 |
+
response
|
65 |
+
]);
|
66 |
+
|
67 |
+
return;
|
68 |
+
}
|
69 |
+
|
70 |
+
if( response.success ) {
|
71 |
+
$this.removeClass('disabled').removeClass('updating-message');
|
72 |
+
|
73 |
+
if( plugin_action === 'install' ) {
|
74 |
+
|
75 |
+
plugin_action = 'activate';
|
76 |
+
$this.data('plugin-action', 'activate');
|
77 |
+
$this.attr('data-plugin-action', 'activate');
|
78 |
+
|
79 |
+
if( $this.hasClass('button') ) {
|
80 |
+
$this.removeClass('button-default').addClass('button-primary');
|
81 |
+
}
|
82 |
+
|
83 |
+
$.wfactory_460.hooks.run('core/components/installed', [
|
84 |
+
$this,
|
85 |
+
data,
|
86 |
+
response
|
87 |
+
]);
|
88 |
+
|
89 |
+
} else if( plugin_action === 'activate' ) {
|
90 |
+
|
91 |
+
plugin_action = 'deactivate';
|
92 |
+
$this.data('plugin-action', 'deactivate');
|
93 |
+
$this.attr('data-plugin-action', 'deactivate');
|
94 |
+
|
95 |
+
if( $this.hasClass('button') ) {
|
96 |
+
$this.removeClass('button-primary').addClass('button-default');
|
97 |
+
}
|
98 |
+
|
99 |
+
$.wfactory_460.hooks.run('core/components/pre_activate', [
|
100 |
+
$this,
|
101 |
+
data,
|
102 |
+
response
|
103 |
+
]);
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Send an additional request for activation of the component, during activation
|
107 |
+
* perform the action wbcr/clearfy/activated_component.
|
108 |
+
*
|
109 |
+
* Basically, this is necessary to prepare the plugin to work, write the necessary rows and
|
110 |
+
* tables in the database, rewriting permalinks, checking conflicts, etc.
|
111 |
+
*/
|
112 |
+
if( storage === 'freemius' || storage === 'internal' ) {
|
113 |
+
self.sendRequestToComponentActivationPrepare($this, data, button_i18n);
|
114 |
+
return;
|
115 |
+
}
|
116 |
+
|
117 |
+
} else if( plugin_action === 'deactivate' ) {
|
118 |
+
|
119 |
+
plugin_action = 'activate';
|
120 |
+
$this.data('plugin-action', 'activate');
|
121 |
+
$this.attr('data-plugin-action', 'activate');
|
122 |
+
|
123 |
+
if( $this.hasClass('button') ) {
|
124 |
+
$this.removeClass('button-default').addClass('button-primary');
|
125 |
+
}
|
126 |
+
|
127 |
+
$.wfactory_460.hooks.run('core/components/deactivated', [
|
128 |
+
$this,
|
129 |
+
data,
|
130 |
+
response
|
131 |
+
]);
|
132 |
+
|
133 |
+
} else if( plugin_action === 'delete' ) {
|
134 |
+
|
135 |
+
plugin_action = 'install';
|
136 |
+
|
137 |
+
$.wfactory_460.hooks.run('core/components/deleted', [$this, data, response]);
|
138 |
+
}
|
139 |
+
} else {
|
140 |
+
if( plugin_action === 'install' ) {
|
141 |
+
$this.removeClass('updating-message');
|
142 |
+
}
|
143 |
+
}
|
144 |
+
|
145 |
+
$this.text(button_i18n[plugin_action]);
|
146 |
+
|
147 |
+
$.wfactory_460.hooks.run('core/components/updated', [$this, data, response]);
|
148 |
+
});
|
149 |
+
|
150 |
+
return false;
|
151 |
+
});
|
152 |
+
},
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Отправляет дополнительный запрос на активацию компонента, во время активации
|
156 |
+
* выполняет хук wbcr/clearfy/activated_component.
|
157 |
+
*
|
158 |
+
* В принципе, это необходимо для подготовки плагина к работе, записи необходимых строк и таблиц в
|
159 |
+
* базу данных, перепись постоянных ссылок, проверка конфликтов и т.д.
|
160 |
+
*
|
161 |
+
* @param {object} componentButton
|
162 |
+
* @param {object} sendData
|
163 |
+
* @param {object} button_i18n
|
164 |
+
*/
|
165 |
+
sendRequestToComponentActivationPrepare: function(componentButton, sendData, button_i18n) {
|
166 |
+
var self = this;
|
167 |
+
|
168 |
+
componentButton.addClass('button-primary')
|
169 |
+
.addClass('disabled')
|
170 |
+
.text(button_i18n.preparation);
|
171 |
+
|
172 |
+
sendData.action = 'wfactory-460-prepare-component';
|
173 |
+
|
174 |
+
this.sendRequest(sendData, function(response) {
|
175 |
+
componentButton.removeClass('disabled');
|
176 |
+
|
177 |
+
if( !response || !response.success ) {
|
178 |
+
componentButton.text(button_i18n['activate']);
|
179 |
+
|
180 |
+
$.wfactory_460.hooks.run('core/components/activation_error', [
|
181 |
+
componentButton,
|
182 |
+
sendData,
|
183 |
+
response
|
184 |
+
]);
|
185 |
+
return;
|
186 |
+
}
|
187 |
+
|
188 |
+
componentButton.removeClass('button-primary').text(button_i18n['deactivate']);
|
189 |
+
|
190 |
+
$.wfactory_460.hooks.run('core/components/activated', [
|
191 |
+
componentButton,
|
192 |
+
sendData,
|
193 |
+
response
|
194 |
+
]);
|
195 |
+
});
|
196 |
+
},
|
197 |
+
|
198 |
+
sendRequest: function(data, callback) {
|
199 |
+
var self = this;
|
200 |
+
|
201 |
+
$.ajax(ajaxurl, {
|
202 |
+
type: 'post',
|
203 |
+
dataType: 'json',
|
204 |
+
data: data,
|
205 |
+
success: function(data, textStatus, jqXHR) {
|
206 |
+
callback && callback(data);
|
207 |
+
},
|
208 |
+
error: function(xhr, ajaxOptions, thrownError) {
|
209 |
+
console.log(xhr.status);
|
210 |
+
console.log(xhr.responseText);
|
211 |
+
console.log(thrownError);
|
212 |
+
|
213 |
+
$.wfactory_460.hooks.run('core/components/ajax_error', [
|
214 |
+
xhr,
|
215 |
+
ajaxOptions,
|
216 |
+
thrownError
|
217 |
+
]);
|
218 |
+
}
|
219 |
+
});
|
220 |
+
}
|
221 |
+
};
|
222 |
+
|
223 |
+
$(document).ready(function() {
|
224 |
+
externalAddon.init();
|
225 |
+
});
|
226 |
+
|
227 |
+
})(jQuery);
|
libs/factory/core/assets/js/core-general.js
CHANGED
@@ -1,99 +1,99 @@
|
|
1 |
-
/**
|
2 |
-
*
|
3 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>
|
4 |
-
* @copyright (c) 02.09.2020, Webcraftic
|
5 |
-
* @version 1.0
|
6 |
-
*/
|
7 |
-
|
8 |
-
(function($) {
|
9 |
-
'use strict';
|
10 |
-
|
11 |
-
if( !$.
|
12 |
-
$.
|
13 |
-
}
|
14 |
-
|
15 |
-
$.
|
16 |
-
|
17 |
-
/**
|
18 |
-
* A set of registered filters.
|
19 |
-
*/
|
20 |
-
_items: {},
|
21 |
-
|
22 |
-
/**
|
23 |
-
* A set of priorities of registered filters.
|
24 |
-
*/
|
25 |
-
_priorities: {},
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Applies filters to a given input value.
|
29 |
-
*/
|
30 |
-
run: function(filterName, args) {
|
31 |
-
var input = args && args.length > 0 ? args[0] : null;
|
32 |
-
if( !this._items[filterName] ) {
|
33 |
-
return input;
|
34 |
-
}
|
35 |
-
|
36 |
-
for( var i in this._priorities[filterName] ) {
|
37 |
-
if( !this._priorities[filterName].hasOwnProperty(i) ) {
|
38 |
-
continue;
|
39 |
-
}
|
40 |
-
|
41 |
-
var priority = this._priorities[filterName][i];
|
42 |
-
|
43 |
-
for( var k = 0; k < this._items[filterName][priority].length; k++ ) {
|
44 |
-
var f = this._items[filterName][priority][k];
|
45 |
-
input = f.apply(f, args);
|
46 |
-
}
|
47 |
-
}
|
48 |
-
|
49 |
-
return input;
|
50 |
-
},
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Registers a new filter.
|
54 |
-
*/
|
55 |
-
add: function(filterName, callback, priority) {
|
56 |
-
|
57 |
-
if( !priority ) {
|
58 |
-
priority = 10;
|
59 |
-
}
|
60 |
-
|
61 |
-
if( !this._items[filterName] ) {
|
62 |
-
this._items[filterName] = {};
|
63 |
-
}
|
64 |
-
if( !this._items[filterName][priority] ) {
|
65 |
-
this._items[filterName][priority] = [];
|
66 |
-
}
|
67 |
-
this._items[filterName][priority].push(callback);
|
68 |
-
|
69 |
-
if( !this._priorities[filterName] ) {
|
70 |
-
this._priorities[filterName] = [];
|
71 |
-
}
|
72 |
-
if( $.inArray(priority, this._priorities[filterName]) === -1 ) {
|
73 |
-
this._priorities[filterName].push(priority);
|
74 |
-
}
|
75 |
-
|
76 |
-
this._priorities[filterName].sort(function(a, b) {
|
77 |
-
return a - b;
|
78 |
-
});
|
79 |
-
}
|
80 |
-
};
|
81 |
-
|
82 |
-
$.
|
83 |
-
|
84 |
-
/**
|
85 |
-
* Applies filters to a given input value.
|
86 |
-
*/
|
87 |
-
run: function(filterName, args) {
|
88 |
-
$.
|
89 |
-
},
|
90 |
-
|
91 |
-
/**
|
92 |
-
* Registers a new filter.
|
93 |
-
*/
|
94 |
-
add: function(filterName, callback, priority) {
|
95 |
-
$.
|
96 |
-
}
|
97 |
-
};
|
98 |
-
|
99 |
-
})(jQuery);
|
1 |
+
/**
|
2 |
+
*
|
3 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>
|
4 |
+
* @copyright (c) 02.09.2020, Webcraftic
|
5 |
+
* @version 1.0
|
6 |
+
*/
|
7 |
+
|
8 |
+
(function($) {
|
9 |
+
'use strict';
|
10 |
+
|
11 |
+
if( !$.wfactory_460 ) {
|
12 |
+
$.wfactory_460 = {};
|
13 |
+
}
|
14 |
+
|
15 |
+
$.wfactory_460.filters = $.wfactory_460.filters || {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* A set of registered filters.
|
19 |
+
*/
|
20 |
+
_items: {},
|
21 |
+
|
22 |
+
/**
|
23 |
+
* A set of priorities of registered filters.
|
24 |
+
*/
|
25 |
+
_priorities: {},
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Applies filters to a given input value.
|
29 |
+
*/
|
30 |
+
run: function(filterName, args) {
|
31 |
+
var input = args && args.length > 0 ? args[0] : null;
|
32 |
+
if( !this._items[filterName] ) {
|
33 |
+
return input;
|
34 |
+
}
|
35 |
+
|
36 |
+
for( var i in this._priorities[filterName] ) {
|
37 |
+
if( !this._priorities[filterName].hasOwnProperty(i) ) {
|
38 |
+
continue;
|
39 |
+
}
|
40 |
+
|
41 |
+
var priority = this._priorities[filterName][i];
|
42 |
+
|
43 |
+
for( var k = 0; k < this._items[filterName][priority].length; k++ ) {
|
44 |
+
var f = this._items[filterName][priority][k];
|
45 |
+
input = f.apply(f, args);
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
return input;
|
50 |
+
},
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Registers a new filter.
|
54 |
+
*/
|
55 |
+
add: function(filterName, callback, priority) {
|
56 |
+
|
57 |
+
if( !priority ) {
|
58 |
+
priority = 10;
|
59 |
+
}
|
60 |
+
|
61 |
+
if( !this._items[filterName] ) {
|
62 |
+
this._items[filterName] = {};
|
63 |
+
}
|
64 |
+
if( !this._items[filterName][priority] ) {
|
65 |
+
this._items[filterName][priority] = [];
|
66 |
+
}
|
67 |
+
this._items[filterName][priority].push(callback);
|
68 |
+
|
69 |
+
if( !this._priorities[filterName] ) {
|
70 |
+
this._priorities[filterName] = [];
|
71 |
+
}
|
72 |
+
if( $.inArray(priority, this._priorities[filterName]) === -1 ) {
|
73 |
+
this._priorities[filterName].push(priority);
|
74 |
+
}
|
75 |
+
|
76 |
+
this._priorities[filterName].sort(function(a, b) {
|
77 |
+
return a - b;
|
78 |
+
});
|
79 |
+
}
|
80 |
+
};
|
81 |
+
|
82 |
+
$.wfactory_460.hooks = $.wfactory_460.hooks || {
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Applies filters to a given input value.
|
86 |
+
*/
|
87 |
+
run: function(filterName, args) {
|
88 |
+
$.wfactory_460.filters.run(filterName, args);
|
89 |
+
},
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Registers a new filter.
|
93 |
+
*/
|
94 |
+
add: function(filterName, callback, priority) {
|
95 |
+
$.wfactory_460.filters.add(filterName, callback, priority);
|
96 |
+
}
|
97 |
+
};
|
98 |
+
|
99 |
+
})(jQuery);
|
libs/factory/core/boot.php
CHANGED
@@ -1,73 +1,73 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Factory Plugin
|
4 |
-
*
|
5 |
-
* @author @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
-
* @since 1.0.0
|
7 |
-
* @package core
|
8 |
-
* @copyright (c) 2018, Webcraftic Ltd
|
9 |
-
*
|
10 |
-
*/
|
11 |
-
|
12 |
-
// Exit if accessed directly
|
13 |
-
if( !defined('ABSPATH') ) {
|
14 |
-
exit;
|
15 |
-
}
|
16 |
-
|
17 |
-
if( defined('
|
18 |
-
return;
|
19 |
-
}
|
20 |
-
|
21 |
-
define('
|
22 |
-
|
23 |
-
define('
|
24 |
-
|
25 |
-
define('
|
26 |
-
define('
|
27 |
-
|
28 |
-
load_plugin_textdomain('
|
29 |
-
|
30 |
-
#comp merge
|
31 |
-
require_once(
|
32 |
-
|
33 |
-
require_once(
|
34 |
-
require_once(
|
35 |
-
|
36 |
-
require_once(
|
37 |
-
require_once(
|
38 |
-
require_once(
|
39 |
-
require_once(
|
40 |
-
require_once(
|
41 |
-
|
42 |
-
// ASSETS
|
43 |
-
require_once(
|
44 |
-
require_once(
|
45 |
-
require_once(
|
46 |
-
|
47 |
-
// PREMIUM
|
48 |
-
require_once(
|
49 |
-
require_once(
|
50 |
-
require_once(
|
51 |
-
|
52 |
-
// UPDATES
|
53 |
-
require_once(
|
54 |
-
require_once(
|
55 |
-
require_once(
|
56 |
-
require_once(
|
57 |
-
require_once(
|
58 |
-
|
59 |
-
require_once(
|
60 |
-
|
61 |
-
require_once(
|
62 |
-
require_once(
|
63 |
-
#endcomp
|
64 |
-
|
65 |
-
add_action('admin_enqueue_scripts', function () {
|
66 |
-
wp_enqueue_script('wfactory-
|
67 |
-
'jquery'
|
68 |
-
],
|
69 |
-
wp_enqueue_script('wfactory-
|
70 |
-
'jquery',
|
71 |
-
'wfactory-
|
72 |
-
],
|
73 |
-
});
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Factory Plugin
|
4 |
+
*
|
5 |
+
* @author @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
+
* @since 1.0.0
|
7 |
+
* @package core
|
8 |
+
* @copyright (c) 2018, Webcraftic Ltd
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
|
12 |
+
// Exit if accessed directly
|
13 |
+
if( !defined('ABSPATH') ) {
|
14 |
+
exit;
|
15 |
+
}
|
16 |
+
|
17 |
+
if( defined('FACTORY_460_LOADED') ) {
|
18 |
+
return;
|
19 |
+
}
|
20 |
+
|
21 |
+
define('FACTORY_460_LOADED', true);
|
22 |
+
|
23 |
+
define('FACTORY_460_VERSION', '4.6.0');
|
24 |
+
|
25 |
+
define('FACTORY_460_DIR', dirname(__FILE__));
|
26 |
+
define('FACTORY_460_URL', plugins_url(null, __FILE__));
|
27 |
+
|
28 |
+
load_plugin_textdomain('wbcr_factory_460', false, dirname(plugin_basename(__FILE__)) . '/langs');
|
29 |
+
|
30 |
+
#comp merge
|
31 |
+
require_once(FACTORY_460_DIR . '/includes/functions.php');
|
32 |
+
|
33 |
+
require_once(FACTORY_460_DIR . '/includes/entities/class-factory-paths.php');
|
34 |
+
require_once(FACTORY_460_DIR . '/includes/entities/class-factory-support.php');
|
35 |
+
|
36 |
+
require_once(FACTORY_460_DIR . '/includes/class-factory-requests.php');
|
37 |
+
require_once(FACTORY_460_DIR . '/includes/class-factory-options.php');
|
38 |
+
require_once(FACTORY_460_DIR . '/includes/class-factory-plugin-base.php');
|
39 |
+
require_once(FACTORY_460_DIR . '/includes/class-factory-migrations.php');
|
40 |
+
require_once(FACTORY_460_DIR . '/includes/class-factory-notices.php');
|
41 |
+
|
42 |
+
// ASSETS
|
43 |
+
require_once(FACTORY_460_DIR . '/includes/assets-managment/class-factory-assets-list.php');
|
44 |
+
require_once(FACTORY_460_DIR . '/includes/assets-managment/class-factory-script-list.php');
|
45 |
+
require_once(FACTORY_460_DIR . '/includes/assets-managment/class-factory-style-list.php');
|
46 |
+
|
47 |
+
// PREMIUM
|
48 |
+
require_once(FACTORY_460_DIR . '/includes/premium/class-factory-license-interface.php');
|
49 |
+
require_once(FACTORY_460_DIR . '/includes/premium/class-factory-provider-abstract.php');
|
50 |
+
require_once(FACTORY_460_DIR . '/includes/premium/class-factory-manager.php');
|
51 |
+
|
52 |
+
// UPDATES
|
53 |
+
require_once(FACTORY_460_DIR . '/includes/updates/repositories/class-factory-repository-abstract.php');
|
54 |
+
require_once(FACTORY_460_DIR . '/includes/updates/repositories/class-factory-wordpress.php');
|
55 |
+
require_once(FACTORY_460_DIR . '/includes/updates/repositories/class-factory-github.php');
|
56 |
+
require_once(FACTORY_460_DIR . '/includes/updates/class-factory-upgrader.php');
|
57 |
+
require_once(FACTORY_460_DIR . '/includes/updates/class-factory-premium-upgrader.php');
|
58 |
+
|
59 |
+
require_once(FACTORY_460_DIR . '/includes/class-factory-plugin-abstract.php');
|
60 |
+
|
61 |
+
require_once(FACTORY_460_DIR . '/includes/activation/class-factory-activator.php');
|
62 |
+
require_once(FACTORY_460_DIR . '/includes/activation/class-factory-update.php');
|
63 |
+
#endcomp
|
64 |
+
|
65 |
+
add_action('admin_enqueue_scripts', function () {
|
66 |
+
wp_enqueue_script('wfactory-460-core-general', FACTORY_460_URL . '/assets/js/core-general.js', [
|
67 |
+
'jquery'
|
68 |
+
], FACTORY_460_VERSION);
|
69 |
+
wp_enqueue_script('wfactory-460-core-components', FACTORY_460_URL . '/assets/js/core-components.js', [
|
70 |
+
'jquery',
|
71 |
+
'wfactory-460-core-general'
|
72 |
+
], FACTORY_460_VERSION);
|
73 |
+
});
|
libs/factory/core/includes/activation/class-factory-activator.php
CHANGED
@@ -1,43 +1,43 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The file contains a base class for plugin activators.
|
4 |
-
*
|
5 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
7 |
-
*
|
8 |
-
* @package factory-core
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
// Exit if accessed directly
|
12 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
-
exit;
|
14 |
-
}
|
15 |
-
|
16 |
-
|
17 |
-
/**
|
18 |
-
* Plugin Activator
|
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 |
-
|
35 |
-
public function activate() {
|
36 |
-
}
|
37 |
-
|
38 |
-
public function deactivate() {
|
39 |
-
}
|
40 |
-
|
41 |
-
public function update() {
|
42 |
-
}
|
43 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The file contains a base class for plugin activators.
|
4 |
+
*
|
5 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
7 |
+
*
|
8 |
+
* @package factory-core
|
9 |
+
* @since 1.0.0
|
10 |
+
*/
|
11 |
+
// Exit if accessed directly
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Plugin Activator
|
19 |
+
*
|
20 |
+
* @since 1.0.0
|
21 |
+
*/
|
22 |
+
abstract class Wbcr_Factory460_Activator {
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Curent plugin.
|
26 |
+
*
|
27 |
+
* @var Wbcr_Factory460_Plugin
|
28 |
+
*/
|
29 |
+
public $plugin;
|
30 |
+
|
31 |
+
public function __construct( Wbcr_Factory460_Plugin $plugin ) {
|
32 |
+
$this->plugin = $plugin;
|
33 |
+
}
|
34 |
+
|
35 |
+
public function activate() {
|
36 |
+
}
|
37 |
+
|
38 |
+
public function deactivate() {
|
39 |
+
}
|
40 |
+
|
41 |
+
public function update() {
|
42 |
+
}
|
43 |
+
}
|
libs/factory/core/includes/activation/class-factory-update.php
CHANGED
@@ -1,39 +1,39 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The file contains a base class for update items of plugins.
|
4 |
-
*
|
5 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
7 |
-
*
|
8 |
-
* @package factory-core
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
// Exit if accessed directly
|
13 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
-
exit;
|
15 |
-
}
|
16 |
-
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Plugin Activator
|
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 |
-
|
36 |
-
abstract function install();
|
37 |
-
|
38 |
-
//abstract function rollback();
|
39 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The file contains a base class for update items of plugins.
|
4 |
+
*
|
5 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
7 |
+
*
|
8 |
+
* @package factory-core
|
9 |
+
* @since 1.0.0
|
10 |
+
*/
|
11 |
+
|
12 |
+
// Exit if accessed directly
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
+
exit;
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Plugin Activator
|
20 |
+
*
|
21 |
+
* @since 1.0.0
|
22 |
+
*/
|
23 |
+
abstract class Wbcr_Factory460_Update {
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Current plugin
|
27 |
+
*
|
28 |
+
* @var Wbcr_Factory460_Plugin
|
29 |
+
*/
|
30 |
+
var $plugin;
|
31 |
+
|
32 |
+
public function __construct( Wbcr_Factory460_Plugin $plugin ) {
|
33 |
+
$this->plugin = $plugin;
|
34 |
+
}
|
35 |
+
|
36 |
+
abstract function install();
|
37 |
+
|
38 |
+
//abstract function rollback();
|
39 |
+
}
|
libs/factory/core/includes/activation/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
// Silence is golden.
|
1 |
+
<?php
|
2 |
// Silence is golden.
|
libs/factory/core/includes/assets-managment/class-factory-assets-list.php
CHANGED
@@ -1,126 +1,126 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The class contains a base class for all lists of assets.
|
4 |
-
*
|
5 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
7 |
-
*
|
8 |
-
* @package factory-core
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
// Exit if accessed directly
|
13 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
-
exit;
|
15 |
-
}
|
16 |
-
|
17 |
-
/**
|
18 |
-
* Assets List
|
19 |
-
*
|
20 |
-
* @since 1.0.0
|
21 |
-
*/
|
22 |
-
class
|
23 |
-
|
24 |
-
protected $all = [];
|
25 |
-
public $header_place = [];
|
26 |
-
public $footer_place = [];
|
27 |
-
public $required = [];
|
28 |
-
|
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 ) {
|
44 |
-
$this->default_place = &$this->footer_place;
|
45 |
-
}
|
46 |
-
if ( ! $defaultIsFooter ) {
|
47 |
-
$this->default_place = &$this->header_place;
|
48 |
-
}
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Remove items from the collection
|
53 |
-
*
|
54 |
-
* @return $this
|
55 |
-
*/
|
56 |
-
public function deregister() {
|
57 |
-
foreach ( func_get_args() as $item ) {
|
58 |
-
|
59 |
-
if ( ! is_string( $item ) ) {
|
60 |
-
return $this;
|
61 |
-
}
|
62 |
-
|
63 |
-
$key_in_all = array_search( $item, $this->all );
|
64 |
-
$key_in_default_place = array_search( $item, $this->default_place );
|
65 |
-
$key_in_header_place = array_search( $item, $this->header_place );
|
66 |
-
$key_inFooterPlace = array_search( $item, $this->footer_place );
|
67 |
-
|
68 |
-
if ( $key_in_all ) {
|
69 |
-
unset( $this->all[ $key_in_all ] );
|
70 |
-
}
|
71 |
-
if ( $key_in_default_place ) {
|
72 |
-
unset( $this->default_place[ $key_in_default_place ] );
|
73 |
-
}
|
74 |
-
if ( $key_in_header_place ) {
|
75 |
-
unset( $this->header_place[ $key_in_header_place ] );
|
76 |
-
}
|
77 |
-
if ( $key_inFooterPlace ) {
|
78 |
-
unset( $this->footer_place[ $key_inFooterPlace ] );
|
79 |
-
}
|
80 |
-
}
|
81 |
-
|
82 |
-
return $this;
|
83 |
-
}
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Checks whether the collection is empty.
|
87 |
-
*
|
88 |
-
* @param string $source if the 'bootstrap' specified, checks only whether the bootstrap assets were required.
|
89 |
-
*
|
90 |
-
* @return boolean
|
91 |
-
*/
|
92 |
-
public function isEmpty( $source = 'wordpress' ) {
|
93 |
-
if ( 'bootstrap' === $source ) {
|
94 |
-
return empty( $this->required[ $source ] );
|
95 |
-
}
|
96 |
-
|
97 |
-
return empty( $this->all ) && empty( $this->required );
|
98 |
-
}
|
99 |
-
|
100 |
-
public function IsHeaderEmpty() {
|
101 |
-
return empty( $this->header_place );
|
102 |
-
}
|
103 |
-
|
104 |
-
public function IsFooterEmpty() {
|
105 |
-
return empty( $this->footer_place );
|
106 |
-
}
|
107 |
-
|
108 |
-
/**
|
109 |
-
* Adds new items to the requried collection.
|
110 |
-
*
|
111 |
-
* @param mixed
|
112 |
-
*/
|
113 |
-
public function request( $items, $source = 'wordpress' ) {
|
114 |
-
|
115 |
-
if ( is_array( $items ) ) {
|
116 |
-
foreach ( $items as $item ) {
|
117 |
-
$this->required[ $source ][] = $item;
|
118 |
-
}
|
119 |
-
} else {
|
120 |
-
$this->required[ $source ][] = $items;
|
121 |
-
}
|
122 |
-
|
123 |
-
return $this;
|
124 |
-
}
|
125 |
-
}
|
126 |
-
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The class contains a base class for all lists of assets.
|
4 |
+
*
|
5 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
7 |
+
*
|
8 |
+
* @package factory-core
|
9 |
+
* @since 1.0.0
|
10 |
+
*/
|
11 |
+
|
12 |
+
// Exit if accessed directly
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
+
exit;
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Assets List
|
19 |
+
*
|
20 |
+
* @since 1.0.0
|
21 |
+
*/
|
22 |
+
class Wbcr_Factory460_AssetsList {
|
23 |
+
|
24 |
+
protected $all = [];
|
25 |
+
public $header_place = [];
|
26 |
+
public $footer_place = [];
|
27 |
+
public $required = [];
|
28 |
+
|
29 |
+
protected $default_place;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @var Wbcr_Factory460_Plugin
|
33 |
+
*/
|
34 |
+
protected $plugin;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @param Wbcr_Factory460_Plugin $plugin
|
38 |
+
* @param bool $defaultIsFooter
|
39 |
+
*/
|
40 |
+
public function __construct( Wbcr_Factory460_Plugin $plugin, $defaultIsFooter = true ) {
|
41 |
+
$this->plugin = $plugin;
|
42 |
+
|
43 |
+
if ( $defaultIsFooter ) {
|
44 |
+
$this->default_place = &$this->footer_place;
|
45 |
+
}
|
46 |
+
if ( ! $defaultIsFooter ) {
|
47 |
+
$this->default_place = &$this->header_place;
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Remove items from the collection
|
53 |
+
*
|
54 |
+
* @return $this
|
55 |
+
*/
|
56 |
+
public function deregister() {
|
57 |
+
foreach ( func_get_args() as $item ) {
|
58 |
+
|
59 |
+
if ( ! is_string( $item ) ) {
|
60 |
+
return $this;
|
61 |
+
}
|
62 |
+
|
63 |
+
$key_in_all = array_search( $item, $this->all );
|
64 |
+
$key_in_default_place = array_search( $item, $this->default_place );
|
65 |
+
$key_in_header_place = array_search( $item, $this->header_place );
|
66 |
+
$key_inFooterPlace = array_search( $item, $this->footer_place );
|
67 |
+
|
68 |
+
if ( $key_in_all ) {
|
69 |
+
unset( $this->all[ $key_in_all ] );
|
70 |
+
}
|
71 |
+
if ( $key_in_default_place ) {
|
72 |
+
unset( $this->default_place[ $key_in_default_place ] );
|
73 |
+
}
|
74 |
+
if ( $key_in_header_place ) {
|
75 |
+
unset( $this->header_place[ $key_in_header_place ] );
|
76 |
+
}
|
77 |
+
if ( $key_inFooterPlace ) {
|
78 |
+
unset( $this->footer_place[ $key_inFooterPlace ] );
|
79 |
+
}
|
80 |
+
}
|
81 |
+
|
82 |
+
return $this;
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Checks whether the collection is empty.
|
87 |
+
*
|
88 |
+
* @param string $source if the 'bootstrap' specified, checks only whether the bootstrap assets were required.
|
89 |
+
*
|
90 |
+
* @return boolean
|
91 |
+
*/
|
92 |
+
public function isEmpty( $source = 'wordpress' ) {
|
93 |
+
if ( 'bootstrap' === $source ) {
|
94 |
+
return empty( $this->required[ $source ] );
|
95 |
+
}
|
96 |
+
|
97 |
+
return empty( $this->all ) && empty( $this->required );
|
98 |
+
}
|
99 |
+
|
100 |
+
public function IsHeaderEmpty() {
|
101 |
+
return empty( $this->header_place );
|
102 |
+
}
|
103 |
+
|
104 |
+
public function IsFooterEmpty() {
|
105 |
+
return empty( $this->footer_place );
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Adds new items to the requried collection.
|
110 |
+
*
|
111 |
+
* @param mixed
|
112 |
+
*/
|
113 |
+
public function request( $items, $source = 'wordpress' ) {
|
114 |
+
|
115 |
+
if ( is_array( $items ) ) {
|
116 |
+
foreach ( $items as $item ) {
|
117 |
+
$this->required[ $source ][] = $item;
|
118 |
+
}
|
119 |
+
} else {
|
120 |
+
$this->required[ $source ][] = $items;
|
121 |
+
}
|
122 |
+
|
123 |
+
return $this;
|
124 |
+
}
|
125 |
+
}
|
126 |
+
|
libs/factory/core/includes/assets-managment/class-factory-script-list.php
CHANGED
@@ -1,167 +1,167 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The file contains a class to manage script assets.
|
4 |
-
*
|
5 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
7 |
-
*
|
8 |
-
* @package factory-core
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
// Exit if accessed directly
|
13 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
-
exit;
|
15 |
-
}
|
16 |
-
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Script List
|
20 |
-
*
|
21 |
-
* @since 1.0.0
|
22 |
-
*/
|
23 |
-
class
|
24 |
-
|
25 |
-
public $localize_data = [];
|
26 |
-
public $use_ajax = false;
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Adds new items to the collection (default place).
|
30 |
-
*
|
31 |
-
* @param mixed
|
32 |
-
*
|
33 |
-
* @version 2.0
|
34 |
-
*/
|
35 |
-
public function add( $file_url, $deps = [ 'jquery' ], $handle = null, $version = false, $place = 'default' ) {
|
36 |
-
|
37 |
-
if ( empty( $file_url ) ) {
|
38 |
-
return $this;
|
39 |
-
}
|
40 |
-
|
41 |
-
$resource = [];
|
42 |
-
$resource['file_url'] = $file_url;
|
43 |
-
$resource['deps'] = $deps;
|
44 |
-
$resource['handle'] = $handle;
|
45 |
-
$resource['version'] = $version;
|
46 |
-
|
47 |
-
$this->all[] = $resource;
|
48 |
-
|
49 |
-
switch ( $place ) {
|
50 |
-
case 'header':
|
51 |
-
$this->header_place[] = $resource;
|
52 |
-
break;
|
53 |
-
case 'footer':
|
54 |
-
$this->footer_place[] = $resource;
|
55 |
-
break;
|
56 |
-
default:
|
57 |
-
$this->default_place[] = $resource;
|
58 |
-
break;
|
59 |
-
}
|
60 |
-
|
61 |
-
return $this;
|
62 |
-
}
|
63 |
-
|
64 |
-
/**
|
65 |
-
* Adds new items to the collection (header).
|
66 |
-
*
|
67 |
-
* @param mixed
|
68 |
-
*/
|
69 |
-
public function addToHeader( $file_url, $deps = [ 'jquery' ], $handle = null ) {
|
70 |
-
return $this->add( $file_url, $deps, $handle, 'header' );
|
71 |
-
}
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Adds new items to the collection (footer).
|
75 |
-
*
|
76 |
-
* @param mixed
|
77 |
-
*/
|
78 |
-
public function addToFooter( $file_url, $deps = [ 'jquery' ], $handle = null ) {
|
79 |
-
return $this->add( $file_url, $deps, $handle, 'footer' );
|
80 |
-
}
|
81 |
-
|
82 |
-
/**
|
83 |
-
* Осуществляет подключение всех зарегистрированных скриптов
|
84 |
-
*
|
85 |
-
* @param string $source
|
86 |
-
*/
|
87 |
-
public function connect( $source = 'wordpress' ) {
|
88 |
-
|
89 |
-
// register all global required scripts
|
90 |
-
if ( ! empty( $this->required[ $source ] ) ) {
|
91 |
-
foreach ( $this->required[ $source ] as $script ) {
|
92 |
-
if ( 'wordpress' === $source ) {
|
93 |
-
wp_enqueue_script( $script );
|
94 |
-
} else if ( 'bootstrap' === $source ) {
|
95 |
-
$this->plugin->bootstrap->enqueueScript( $script );
|
96 |
-
}
|
97 |
-
}
|
98 |
-
}
|
99 |
-
|
100 |
-
if ( $source == 'bootstrap' ) {
|
101 |
-
return;
|
102 |
-
}
|
103 |
-
|
104 |
-
$is_first_script = true;
|
105 |
-
$is_footer = false;
|
106 |
-
|
107 |
-
// register all other scripts
|
108 |
-
foreach ( [ $this->header_place, $this->footer_place ] as $script_place ) {
|
109 |
-
foreach ( $script_place as $script ) {
|
110 |
-
|
111 |
-
if ( empty( $script['file_url'] ) ) {
|
112 |
-
continue;
|
113 |
-
}
|
114 |
-
|
115 |
-
$handle = ! empty( $script['handle'] ) ? $script['handle'] : $script['file_url'];
|
116 |
-
$deps = ! is_array( $script['deps'] ) ? [] : $script['deps'];
|
117 |
-
$version = ! empty( $script['version'] ) ? $script['version'] : $this->plugin->getPluginVersion();
|
118 |
-
|
119 |
-
wp_register_script( $handle, $script['file_url'], $deps, $version, $is_footer );
|
120 |
-
|
121 |
-
if ( $is_first_script && $this->use_ajax ) {
|
122 |
-
wp_localize_script( $handle, 'factory', [ 'ajaxurl' => admin_url( 'admin-ajax.php' ) ] );
|
123 |
-
}
|
124 |
-
|
125 |
-
if ( ! empty( $this->localize_data[ $handle ] ) ) {
|
126 |
-
wp_localize_script( $handle, $this->localize_data[ $handle ][0], $this->localize_data[ $handle ][1] );
|
127 |
-
}
|
128 |
-
|
129 |
-
wp_enqueue_script( $handle );
|
130 |
-
|
131 |
-
$is_first_script = false;
|
132 |
-
}
|
133 |
-
|
134 |
-
$is_footer = true;
|
135 |
-
}
|
136 |
-
}
|
137 |
-
|
138 |
-
/**
|
139 |
-
* Если вызвать этот метод, на странице будет обязательно добавлена
|
140 |
-
* глобальная JS переменная с ссылкой на ajax обработчик
|
141 |
-
*/
|
142 |
-
public function useAjax() {
|
143 |
-
$this->use_ajax = true;
|
144 |
-
}
|
145 |
-
|
146 |
-
/**
|
147 |
-
* Регистрирует глобальную JS переменную с пользовательскими данными
|
148 |
-
*
|
149 |
-
* @param string $varname
|
150 |
-
* @param array $data
|
151 |
-
*
|
152 |
-
* @return
|
153 |
-
*/
|
154 |
-
public function localize( $varname, $data ) {
|
155 |
-
$bindTo = count( $this->all ) == 0 ? null : end( $this->all );
|
156 |
-
|
157 |
-
if ( ! $bindTo ) {
|
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 |
-
}
|
166 |
-
}
|
167 |
-
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The file contains a class to manage script assets.
|
4 |
+
*
|
5 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
7 |
+
*
|
8 |
+
* @package factory-core
|
9 |
+
* @since 1.0.0
|
10 |
+
*/
|
11 |
+
|
12 |
+
// Exit if accessed directly
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
+
exit;
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Script List
|
20 |
+
*
|
21 |
+
* @since 1.0.0
|
22 |
+
*/
|
23 |
+
class Wbcr_Factory460_ScriptList extends Wbcr_Factory460_AssetsList {
|
24 |
+
|
25 |
+
public $localize_data = [];
|
26 |
+
public $use_ajax = false;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Adds new items to the collection (default place).
|
30 |
+
*
|
31 |
+
* @param mixed
|
32 |
+
*
|
33 |
+
* @version 2.0
|
34 |
+
*/
|
35 |
+
public function add( $file_url, $deps = [ 'jquery' ], $handle = null, $version = false, $place = 'default' ) {
|
36 |
+
|
37 |
+
if ( empty( $file_url ) ) {
|
38 |
+
return $this;
|
39 |
+
}
|
40 |
+
|
41 |
+
$resource = [];
|
42 |
+
$resource['file_url'] = $file_url;
|
43 |
+
$resource['deps'] = $deps;
|
44 |
+
$resource['handle'] = $handle;
|
45 |
+
$resource['version'] = $version;
|
46 |
+
|
47 |
+
$this->all[] = $resource;
|
48 |
+
|
49 |
+
switch ( $place ) {
|
50 |
+
case 'header':
|
51 |
+
$this->header_place[] = $resource;
|
52 |
+
break;
|
53 |
+
case 'footer':
|
54 |
+
$this->footer_place[] = $resource;
|
55 |
+
break;
|
56 |
+
default:
|
57 |
+
$this->default_place[] = $resource;
|
58 |
+
break;
|
59 |
+
}
|
60 |
+
|
61 |
+
return $this;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Adds new items to the collection (header).
|
66 |
+
*
|
67 |
+
* @param mixed
|
68 |
+
*/
|
69 |
+
public function addToHeader( $file_url, $deps = [ 'jquery' ], $handle = null ) {
|
70 |
+
return $this->add( $file_url, $deps, $handle, 'header' );
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Adds new items to the collection (footer).
|
75 |
+
*
|
76 |
+
* @param mixed
|
77 |
+
*/
|
78 |
+
public function addToFooter( $file_url, $deps = [ 'jquery' ], $handle = null ) {
|
79 |
+
return $this->add( $file_url, $deps, $handle, 'footer' );
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Осуществляет подключение всех зарегистрированных скриптов
|
84 |
+
*
|
85 |
+
* @param string $source
|
86 |
+
*/
|
87 |
+
public function connect( $source = 'wordpress' ) {
|
88 |
+
|
89 |
+
// register all global required scripts
|
90 |
+
if ( ! empty( $this->required[ $source ] ) ) {
|
91 |
+
foreach ( $this->required[ $source ] as $script ) {
|
92 |
+
if ( 'wordpress' === $source ) {
|
93 |
+
wp_enqueue_script( $script );
|
94 |
+
} else if ( 'bootstrap' === $source ) {
|
95 |
+
$this->plugin->bootstrap->enqueueScript( $script );
|
96 |
+
}
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
if ( $source == 'bootstrap' ) {
|
101 |
+
return;
|
102 |
+
}
|
103 |
+
|
104 |
+
$is_first_script = true;
|
105 |
+
$is_footer = false;
|
106 |
+
|
107 |
+
// register all other scripts
|
108 |
+
foreach ( [ $this->header_place, $this->footer_place ] as $script_place ) {
|
109 |
+
foreach ( $script_place as $script ) {
|
110 |
+
|
111 |
+
if ( empty( $script['file_url'] ) ) {
|
112 |
+
continue;
|
113 |
+
}
|
114 |
+
|
115 |
+
$handle = ! empty( $script['handle'] ) ? $script['handle'] : $script['file_url'];
|
116 |
+
$deps = ! is_array( $script['deps'] ) ? [] : $script['deps'];
|
117 |
+
$version = ! empty( $script['version'] ) ? $script['version'] : $this->plugin->getPluginVersion();
|
118 |
+
|
119 |
+
wp_register_script( $handle, $script['file_url'], $deps, $version, $is_footer );
|
120 |
+
|
121 |
+
if ( $is_first_script && $this->use_ajax ) {
|
122 |
+
wp_localize_script( $handle, 'factory', [ 'ajaxurl' => admin_url( 'admin-ajax.php' ) ] );
|
123 |
+
}
|
124 |
+
|
125 |
+
if ( ! empty( $this->localize_data[ $handle ] ) ) {
|
126 |
+
wp_localize_script( $handle, $this->localize_data[ $handle ][0], $this->localize_data[ $handle ][1] );
|
127 |
+
}
|
128 |
+
|
129 |
+
wp_enqueue_script( $handle );
|
130 |
+
|
131 |
+
$is_first_script = false;
|
132 |
+
}
|
133 |
+
|
134 |
+
$is_footer = true;
|
135 |
+
}
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Если вызвать этот метод, на странице будет обязательно добавлена
|
140 |
+
* глобальная JS переменная с ссылкой на ajax обработчик
|
141 |
+
*/
|
142 |
+
public function useAjax() {
|
143 |
+
$this->use_ajax = true;
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Регистрирует глобальную JS переменную с пользовательскими данными
|
148 |
+
*
|
149 |
+
* @param string $varname
|
150 |
+
* @param array $data
|
151 |
+
*
|
152 |
+
* @return Wbcr_Factory460_ScriptList $this
|
153 |
+
*/
|
154 |
+
public function localize( $varname, $data ) {
|
155 |
+
$bindTo = count( $this->all ) == 0 ? null : end( $this->all );
|
156 |
+
|
157 |
+
if ( ! $bindTo ) {
|
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 |
+
}
|
166 |
+
}
|
167 |
+
|
libs/factory/core/includes/assets-managment/class-factory-style-list.php
CHANGED
@@ -1,86 +1,86 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The file contains a class to manage style assets.
|
4 |
-
*
|
5 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
7 |
-
*
|
8 |
-
* @package factory-core
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
// Exit if accessed directly
|
13 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
-
exit;
|
15 |
-
}
|
16 |
-
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Style List
|
20 |
-
*
|
21 |
-
* @since 1.0.0
|
22 |
-
*/
|
23 |
-
class
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Adds new items to the collection (default place).
|
27 |
-
*
|
28 |
-
* @param mixed
|
29 |
-
*
|
30 |
-
* @version 2.0
|
31 |
-
*/
|
32 |
-
public function add( $file_url, $deps = [], $handle = null, $version = false, $media = 'all' ) {
|
33 |
-
|
34 |
-
if ( empty( $file_url ) ) {
|
35 |
-
return $this;
|
36 |
-
}
|
37 |
-
|
38 |
-
$resource = [];
|
39 |
-
$resource['file_url'] = $file_url;
|
40 |
-
$resource['deps'] = $deps;
|
41 |
-
$resource['handle'] = $handle;
|
42 |
-
$resource['version'] = $version;
|
43 |
-
$resource['media'] = $media;
|
44 |
-
|
45 |
-
$this->all[] = $resource;
|
46 |
-
|
47 |
-
return $this;
|
48 |
-
}
|
49 |
-
|
50 |
-
public function connect( $source = 'wordpress' ) {
|
51 |
-
// register all global required scripts
|
52 |
-
if ( ! empty( $this->required[ $source ] ) ) {
|
53 |
-
|
54 |
-
foreach ( $this->required[ $source ] as $style ) {
|
55 |
-
if ( 'wordpress' === $source ) {
|
56 |
-
wp_enqueue_style( $style );
|
57 |
-
} else if ( 'bootstrap' === $source ) {
|
58 |
-
$this->plugin->bootstrap->enqueueStyle( $style );
|
59 |
-
}
|
60 |
-
}
|
61 |
-
}
|
62 |
-
|
63 |
-
if ( $source == 'bootstrap' ) {
|
64 |
-
return;
|
65 |
-
}
|
66 |
-
|
67 |
-
if ( empty( $this->all ) ) {
|
68 |
-
return;
|
69 |
-
}
|
70 |
-
|
71 |
-
// register all other styles
|
72 |
-
foreach ( $this->all as $style ) {
|
73 |
-
|
74 |
-
if ( empty( $style['file_url'] ) ) {
|
75 |
-
continue;
|
76 |
-
}
|
77 |
-
|
78 |
-
$handle = ! empty( $style['handle'] ) ? $style['handle'] : md5( $style['file_url'] );
|
79 |
-
$deps = ! is_array( $style['deps'] ) ? [] : $style['deps'];
|
80 |
-
$version = ! empty( $style['version'] ) ? $style['version'] : $this->plugin->getPluginVersion();
|
81 |
-
|
82 |
-
wp_enqueue_style( $handle, $style['file_url'], $deps, $version );
|
83 |
-
}
|
84 |
-
}
|
85 |
-
}
|
86 |
-
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The file contains a class to manage style assets.
|
4 |
+
*
|
5 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
6 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
7 |
+
*
|
8 |
+
* @package factory-core
|
9 |
+
* @since 1.0.0
|
10 |
+
*/
|
11 |
+
|
12 |
+
// Exit if accessed directly
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
+
exit;
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Style List
|
20 |
+
*
|
21 |
+
* @since 1.0.0
|
22 |
+
*/
|
23 |
+
class Wbcr_Factory460_StyleList extends Wbcr_Factory460_AssetsList {
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Adds new items to the collection (default place).
|
27 |
+
*
|
28 |
+
* @param mixed
|
29 |
+
*
|
30 |
+
* @version 2.0
|
31 |
+
*/
|
32 |
+
public function add( $file_url, $deps = [], $handle = null, $version = false, $media = 'all' ) {
|
33 |
+
|
34 |
+
if ( empty( $file_url ) ) {
|
35 |
+
return $this;
|
36 |
+
}
|
37 |
+
|
38 |
+
$resource = [];
|
39 |
+
$resource['file_url'] = $file_url;
|
40 |
+
$resource['deps'] = $deps;
|
41 |
+
$resource['handle'] = $handle;
|
42 |
+
$resource['version'] = $version;
|
43 |
+
$resource['media'] = $media;
|
44 |
+
|
45 |
+
$this->all[] = $resource;
|
46 |
+
|
47 |
+
return $this;
|
48 |
+
}
|
49 |
+
|
50 |
+
public function connect( $source = 'wordpress' ) {
|
51 |
+
// register all global required scripts
|
52 |
+
if ( ! empty( $this->required[ $source ] ) ) {
|
53 |
+
|
54 |
+
foreach ( $this->required[ $source ] as $style ) {
|
55 |
+
if ( 'wordpress' === $source ) {
|
56 |
+
wp_enqueue_style( $style );
|
57 |
+
} else if ( 'bootstrap' === $source ) {
|
58 |
+
$this->plugin->bootstrap->enqueueStyle( $style );
|
59 |
+
}
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
if ( $source == 'bootstrap' ) {
|
64 |
+
return;
|
65 |
+
}
|
66 |
+
|
67 |
+
if ( empty( $this->all ) ) {
|
68 |
+
return;
|
69 |
+
}
|
70 |
+
|
71 |
+
// register all other styles
|
72 |
+
foreach ( $this->all as $style ) {
|
73 |
+
|
74 |
+
if ( empty( $style['file_url'] ) ) {
|
75 |
+
continue;
|
76 |
+
}
|
77 |
+
|
78 |
+
$handle = ! empty( $style['handle'] ) ? $style['handle'] : md5( $style['file_url'] );
|
79 |
+
$deps = ! is_array( $style['deps'] ) ? [] : $style['deps'];
|
80 |
+
$version = ! empty( $style['version'] ) ? $style['version'] : $this->plugin->getPluginVersion();
|
81 |
+
|
82 |
+
wp_enqueue_style( $handle, $style['file_url'], $deps, $version );
|
83 |
+
}
|
84 |
+
}
|
85 |
+
}
|
86 |
+
|
libs/factory/core/includes/assets-managment/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
// Silence is golden.
|
1 |
+
<?php
|
2 |
// Silence is golden.
|
libs/factory/core/includes/class-check-compatibility.php
CHANGED
@@ -1,122 +1,122 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Проверяет совместимость с плагинами Webcraftic, с версиями php, с версиями Wordpress
|
5 |
-
*
|
6 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
7 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
8 |
-
*
|
9 |
-
* @version 1.0.0
|
10 |
-
* @since 4.0.8
|
11 |
-
*/
|
12 |
-
|
13 |
-
if ( ! class_exists( 'Wbcr_Factory_Compatibility' ) ) {
|
14 |
-
class Wbcr_Factory_Compatibility {
|
15 |
-
|
16 |
-
protected $plugin_prefix;
|
17 |
-
protected $plugin_class_prefix;
|
18 |
-
protected $plugin_name;
|
19 |
-
protected $plugin_title = "(no title)";
|
20 |
-
protected $required_php_version = '5.3';
|
21 |
-
protected $required_wp_version = '4.2.0';
|
22 |
-
|
23 |
-
function __construct( array $plugin_info ) {
|
24 |
-
foreach ( (array) $plugin_info as $property => $value ) {
|
25 |
-
$this->$property = $value;
|
26 |
-
}
|
27 |
-
|
28 |
-
add_action( 'admin_init', [ $this, 'registerNotices' ] );
|
29 |
-
}
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Метод проверяет совместимость плагина с php и wordpress версией
|
33 |
-
*
|
34 |
-
* @return bool
|
35 |
-
*/
|
36 |
-
public function check() {
|
37 |
-
if ( ! $this->isPhpCompatibility() ) {
|
38 |
-
return false;
|
39 |
-
}
|
40 |
-
|
41 |
-
if ( ! $this->isWpCompatibility() ) {
|
42 |
-
return false;
|
43 |
-
}
|
44 |
-
|
45 |
-
return true;
|
46 |
-
}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Метод проверяет совместимость плагина с php версией сервера
|
50 |
-
*
|
51 |
-
* @return mixed
|
52 |
-
*/
|
53 |
-
public function isPhpCompatibility() {
|
54 |
-
return version_compare( PHP_VERSION, $this->required_php_version, '>=' );
|
55 |
-
}
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Метод проверяет совместимость плагина с Wordpress версией сайта
|
59 |
-
*
|
60 |
-
* @return mixed
|
61 |
-
*/
|
62 |
-
public function isWpCompatibility() {
|
63 |
-
// Get the WP Version global.
|
64 |
-
global $wp_version;
|
65 |
-
|
66 |
-
return version_compare( $wp_version, $this->required_wp_version, '>=' );
|
67 |
-
}
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Метод возвращает текст уведомления
|
71 |
-
*
|
72 |
-
* @return string
|
73 |
-
*/
|
74 |
-
public function getNoticeText() {
|
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 ) {
|
94 |
-
$notice_text = $notice_default_text . $notice_text;
|
95 |
-
}
|
96 |
-
|
97 |
-
return $notice_text;
|
98 |
-
}
|
99 |
-
|
100 |
-
public function registerNotices() {
|
101 |
-
if ( current_user_can( 'activate_plugins' ) && current_user_can( 'edit_plugins' ) && current_user_can( 'install_plugins' ) ) {
|
102 |
-
if ( is_multisite() ) {
|
103 |
-
add_action( 'network_admin_notices', [ $this, 'showNotice' ] );
|
104 |
-
}
|
105 |
-
|
106 |
-
add_action( 'admin_notices', [ $this, 'showNotice' ] );
|
107 |
-
}
|
108 |
-
}
|
109 |
-
|
110 |
-
public function showNotice() {
|
111 |
-
$notice_text = $this->getNoticeText();
|
112 |
-
|
113 |
-
if ( empty( $notice_text ) ) {
|
114 |
-
return;
|
115 |
-
}
|
116 |
-
|
117 |
-
$notice_text = '<p>' . $this->getNoticeText() . '</p>';
|
118 |
-
|
119 |
-
echo '<div class="notice notice-error">' . apply_filters( 'wbcr/factory/check_compatibility/notice_text', $notice_text, $this->plugin_name ) . '</div>';
|
120 |
-
}
|
121 |
-
}
|
122 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Проверяет совместимость с плагинами Webcraftic, с версиями php, с версиями Wordpress
|
5 |
+
*
|
6 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
7 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
8 |
+
*
|
9 |
+
* @version 1.0.0
|
10 |
+
* @since 4.0.8
|
11 |
+
*/
|
12 |
+
|
13 |
+
if ( ! class_exists( 'Wbcr_Factory_Compatibility' ) ) {
|
14 |
+
class Wbcr_Factory_Compatibility {
|
15 |
+
|
16 |
+
protected $plugin_prefix;
|
17 |
+
protected $plugin_class_prefix;
|
18 |
+
protected $plugin_name;
|
19 |
+
protected $plugin_title = "(no title)";
|
20 |
+
protected $required_php_version = '5.3';
|
21 |
+
protected $required_wp_version = '4.2.0';
|
22 |
+
|
23 |
+
function __construct( array $plugin_info ) {
|
24 |
+
foreach ( (array) $plugin_info as $property => $value ) {
|
25 |
+
$this->$property = $value;
|
26 |
+
}
|
27 |
+
|
28 |
+
add_action( 'admin_init', [ $this, 'registerNotices' ] );
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Метод проверяет совместимость плагина с php и wordpress версией
|
33 |
+
*
|
34 |
+
* @return bool
|
35 |
+
*/
|
36 |
+
public function check() {
|
37 |
+
if ( ! $this->isPhpCompatibility() ) {
|
38 |
+
return false;
|
39 |
+
}
|
40 |
+
|
41 |
+
if ( ! $this->isWpCompatibility() ) {
|
42 |
+
return false;
|
43 |
+
}
|
44 |
+
|
45 |
+
return true;
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Метод проверяет совместимость плагина с php версией сервера
|
50 |
+
*
|
51 |
+
* @return mixed
|
52 |
+
*/
|
53 |
+
public function isPhpCompatibility() {
|
54 |
+
return version_compare( PHP_VERSION, $this->required_php_version, '>=' );
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Метод проверяет совместимость плагина с Wordpress версией сайта
|
59 |
+
*
|
60 |
+
* @return mixed
|
61 |
+
*/
|
62 |
+
public function isWpCompatibility() {
|
63 |
+
// Get the WP Version global.
|
64 |
+
global $wp_version;
|
65 |
+
|
66 |
+
return version_compare( $wp_version, $this->required_wp_version, '>=' );
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Метод возвращает текст уведомления
|
71 |
+
*
|
72 |
+
* @return string
|
73 |
+
*/
|
74 |
+
public function getNoticeText() {
|
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_templates_112' ), $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_460' ), $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_460' ), $this->required_wp_version ) . '<br>';
|
91 |
+
}
|
92 |
+
|
93 |
+
if ( $has_one ) {
|
94 |
+
$notice_text = $notice_default_text . $notice_text;
|
95 |
+
}
|
96 |
+
|
97 |
+
return $notice_text;
|
98 |
+
}
|
99 |
+
|
100 |
+
public function registerNotices() {
|
101 |
+
if ( current_user_can( 'activate_plugins' ) && current_user_can( 'edit_plugins' ) && current_user_can( 'install_plugins' ) ) {
|
102 |
+
if ( is_multisite() ) {
|
103 |
+
add_action( 'network_admin_notices', [ $this, 'showNotice' ] );
|
104 |
+
}
|
105 |
+
|
106 |
+
add_action( 'admin_notices', [ $this, 'showNotice' ] );
|
107 |
+
}
|
108 |
+
}
|
109 |
+
|
110 |
+
public function showNotice() {
|
111 |
+
$notice_text = $this->getNoticeText();
|
112 |
+
|
113 |
+
if ( empty( $notice_text ) ) {
|
114 |
+
return;
|
115 |
+
}
|
116 |
+
|
117 |
+
$notice_text = '<p>' . $this->getNoticeText() . '</p>';
|
118 |
+
|
119 |
+
echo '<div class="notice notice-error">' . esc_html(apply_filters( 'wbcr/factory/check_compatibility/notice_text', $notice_text, $this->plugin_name )) . '</div>';
|
120 |
+
}
|
121 |
+
}
|
122 |
}
|
libs/factory/core/includes/class-factory-migrations.php
CHANGED
@@ -1,541 +1,541 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace WBCR\
|
4 |
-
|
5 |
-
use Exception;
|
6 |
-
use
|
7 |
-
|
8 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
-
exit;
|
10 |
-
}
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Often when updating plugins, you need to make some changes to the database.
|
14 |
-
* This class automatically checks for plugin migrations and executes them when
|
15 |
-
* updating.
|
16 |
-
*
|
17 |
-
* The class has a debug mode, to enable the debug mode add constants to your plugin:
|
18 |
-
* define ('FACTORY_MIGRATIONS_DEBUG', true) - enables/disables debugging mode
|
19 |
-
* define ('FACTORY_MIGRATIONS_FORCE_OLD_VERSION', '1.1.9') - sets previous version
|
20 |
-
* for the plugin, if constant isn't set, then the previous version is taken from
|
21 |
-
* the database.
|
22 |
-
*
|
23 |
-
* todo: get_option and get_site_option are used because some caching plugins caching options, which causes problems
|
24 |
-
*
|
25 |
-
*
|
26 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
27 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
28 |
-
*
|
29 |
-
* @since 4.1.1
|
30 |
-
*/
|
31 |
-
class Migrations {
|
32 |
-
|
33 |
-
protected $plugin;
|
34 |
-
|
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();
|
46 |
-
|
47 |
-
if ( ! file_exists( $this->plugin->get_paths()->migrations ) ) {
|
48 |
-
throw new Exception( 'Starting with version 4.1.1 of the Core for Factory framework module, you must create a "migrations" folder in the root of your plugin to store the migration of the plugin.' );
|
49 |
-
}
|
50 |
-
|
51 |
-
if ( is_admin() ) {
|
52 |
-
add_action( "admin_init", [ $this, "check_migrations" ] );
|
53 |
-
|
54 |
-
add_action( "wbcr/factory/plugin_{$plugin_name}_activated", [ $this, 'activation_hook' ] );
|
55 |
-
add_action( "wbcr/factory/admin_notices", [ $this, "debug_bar_notice" ], 10, 2 );
|
56 |
-
add_action( "wbcr/factory/admin_notices", [ $this, "migration_error_notice" ], 10, 2 );
|
57 |
-
}
|
58 |
-
}
|
59 |
-
|
60 |
-
/**
|
61 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
62 |
-
* @since 4.1.1
|
63 |
-
* @return mixed|void
|
64 |
-
*/
|
65 |
-
public function get_plugin_activated_time() {
|
66 |
-
if ( $this->plugin->isNetworkActive() ) {
|
67 |
-
return get_site_option( $this->plugin->getOptionName( 'plugin_activated' ), 0 );
|
68 |
-
}
|
69 |
-
|
70 |
-
return get_option( $this->plugin->getOptionName( 'plugin_activated' ), 0 );
|
71 |
-
}
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Check if migration is necessary for plugin and if there are errors from previous migrations.
|
75 |
-
* In debug mode, migrations are not performed automatically.
|
76 |
-
*/
|
77 |
-
public function check_migrations() {
|
78 |
-
if ( $this->is_migration_error() && isset( $_GET['wbcr_factory_fix_migration_error'] ) ) {
|
79 |
-
$this->fix_migration_error();
|
80 |
-
|
81 |
-
die();
|
82 |
-
}
|
83 |
-
|
84 |
-
if ( $this->is_debug() && isset( $_GET['wbcr_factory_test_migration'] ) ) {
|
85 |
-
$this->make_migration();
|
86 |
-
|
87 |
-
die();
|
88 |
-
}
|
89 |
-
|
90 |
-
if ( $this->need_migration() && ! $this->is_debug() ) {
|
91 |
-
$this->make_migration();
|
92 |
-
}
|
93 |
-
}
|
94 |
-
|
95 |
-
/**
|
96 |
-
* Notification displays the errors of outstanding migrations to fix errors
|
97 |
-
* you need to follow the instructions in the notification and click
|
98 |
-
* "I fixed, confirm migration".
|
99 |
-
*
|
100 |
-
* What is it for. Migrations are performed in background and on some sites,
|
101 |
-
* due to php errors or for some other reason, migration may be
|
102 |
-
* interrupted, because of what plugin will work incorrectly, you may lose settings.
|
103 |
-
*
|
104 |
-
* When creating new migrations, developer will add error handlers,
|
105 |
-
* and framework will intercept them safely for user and display them
|
106 |
-
* in this notice.
|
107 |
-
*
|
108 |
-
* @param array $notices
|
109 |
-
* @param static $plugin_name
|
110 |
-
*
|
111 |
-
* @return array
|
112 |
-
*/
|
113 |
-
public function migration_error_notice( $notices, $plugin_name ) {
|
114 |
-
|
115 |
-
if ( $this->plugin->getPluginName() !== $plugin_name ) {
|
116 |
-
return $notices;
|
117 |
-
}
|
118 |
-
|
119 |
-
if ( ! $this->is_migration_error() || ! current_user_can( 'update_plugins' ) ) {
|
120 |
-
return $notices;
|
121 |
-
}
|
122 |
-
|
123 |
-
if ( $this->plugin->isNetworkActive() ) {
|
124 |
-
$migration_error_text = get_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ), '' );
|
125 |
-
} else {
|
126 |
-
$migration_error_text = get_option( $this->plugin->getOptionName( 'plugin_migration_error' ), '' );
|
127 |
-
}
|
128 |
-
|
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;
|
143 |
-
}
|
144 |
-
|
145 |
-
/**
|
146 |
-
* Debug panel, display some information from the database. Also allows
|
147 |
-
* perform manual migrations to test new migrations.
|
148 |
-
*
|
149 |
-
* @param array $notices
|
150 |
-
* @param string $plugin_name
|
151 |
-
*
|
152 |
-
* @return array
|
153 |
-
*/
|
154 |
-
public function debug_bar_notice( $notices, $plugin_name ) {
|
155 |
-
|
156 |
-
if ( $this->plugin->getPluginName() !== $plugin_name ) {
|
157 |
-
return $notices;
|
158 |
-
}
|
159 |
-
if ( ! $this->is_debug() || ! current_user_can( 'update_plugins' ) ) {
|
160 |
-
return $notices;
|
161 |
-
}
|
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;
|
181 |
-
}
|
182 |
-
|
183 |
-
/**
|
184 |
-
* Runs when plugin is activated. Checks if you need to migrate
|
185 |
-
* and if necessary it does it. Also adds a option when the plugin
|
186 |
-
* was activated for the first time.
|
187 |
-
*/
|
188 |
-
public function activation_hook() {
|
189 |
-
/*if ( $this->need_migration() && ! $this->is_debug() ) {
|
190 |
-
$this->make_migration();
|
191 |
-
}*/
|
192 |
-
|
193 |
-
// just time to know when the plugin was activated the first time
|
194 |
-
$activated = $this->get_plugin_activated_time();
|
195 |
-
|
196 |
-
if ( ! $activated ) {
|
197 |
-
if ( $this->plugin->isNetworkActive() ) {
|
198 |
-
update_site_option( $this->plugin->getOptionName( 'plugin_activated' ), time() );
|
199 |
-
update_site_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
|
200 |
-
} else {
|
201 |
-
update_option( $this->plugin->getOptionName( 'plugin_activated' ), time() );
|
202 |
-
update_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
|
203 |
-
}
|
204 |
-
}
|
205 |
-
}
|
206 |
-
|
207 |
-
/**
|
208 |
-
* Checks if debug mode of migrations from version x.x.x to x.x.y is enabled.
|
209 |
-
*
|
210 |
-
* @return bool
|
211 |
-
*/
|
212 |
-
protected function is_debug() {
|
213 |
-
return defined( 'FACTORY_MIGRATIONS_DEBUG' ) && FACTORY_MIGRATIONS_DEBUG;
|
214 |
-
}
|
215 |
-
|
216 |
-
/**
|
217 |
-
* Gets previous version of plugin that plugin had before updating to the new version.
|
218 |
-
*
|
219 |
-
* @return string|null
|
220 |
-
*/
|
221 |
-
protected function get_old_plugin_version() {
|
222 |
-
|
223 |
-
if ( $this->is_debug() && defined( 'FACTORY_MIGRATIONS_FORCE_OLD_VERSION' ) ) {
|
224 |
-
return FACTORY_MIGRATIONS_FORCE_OLD_VERSION;
|
225 |
-
}
|
226 |
-
|
227 |
-
if ( $this->plugin->isNetworkActive() ) {
|
228 |
-
$plugin_version = get_site_option( $this->plugin->getOptionName( 'plugin_version' ), null );
|
229 |
-
} else {
|
230 |
-
$plugin_version = get_option( $this->plugin->getOptionName( 'plugin_version' ), null );
|
231 |
-
}
|
232 |
-
|
233 |
-
if ( ! empty( $plugin_version ) ) {
|
234 |
-
return $plugin_version;
|
235 |
-
}
|
236 |
-
|
237 |
-
# TODO: Remove after few releases
|
238 |
-
# This block for compatibility code with old version of framework < 4.1.1
|
239 |
-
#-------------------------------------------
|
240 |
-
if ( $this->plugin->isNetworkActive() ) {
|
241 |
-
$plugin_versions = get_site_option( 'factory_plugin_versions', [] );
|
242 |
-
} else {
|
243 |
-
$plugin_versions = get_option( 'factory_plugin_versions', [] );
|
244 |
-
}
|
245 |
-
|
246 |
-
$plugin_version = isset( $plugin_versions[ $this->plugin->getPluginName() ] ) ? $plugin_versions[ $this->plugin->getPluginName() ] : null;
|
247 |
-
|
248 |
-
if ( ! empty( $plugin_version ) ) {
|
249 |
-
$plugin_version = str_replace( [ 'free-', 'premium-', 'offline-' ], '', $plugin_version );
|
250 |
-
}
|
251 |
-
|
252 |
-
#-------------------------------------------
|
253 |
-
|
254 |
-
return $plugin_version;
|
255 |
-
}
|
256 |
-
|
257 |
-
/**
|
258 |
-
* Gets the current version of plugin.
|
259 |
-
*
|
260 |
-
* @return string
|
261 |
-
*/
|
262 |
-
protected function get_current_plugin_version() {
|
263 |
-
return $this->plugin->getPluginVersion();
|
264 |
-
}
|
265 |
-
|
266 |
-
/**
|
267 |
-
* Do I need migration for plugin? If previous migration was with a error, then
|
268 |
-
* method will always return false to prevent looping.
|
269 |
-
*
|
270 |
-
* @return mixed
|
271 |
-
*/
|
272 |
-
protected function need_migration() {
|
273 |
-
if ( $this->is_migration_error() ) {
|
274 |
-
return false;
|
275 |
-
}
|
276 |
-
|
277 |
-
return version_compare( $this->get_old_plugin_version(), $this->get_current_plugin_version(), '<' );
|
278 |
-
}
|
279 |
-
|
280 |
-
/**
|
281 |
-
* Are there errors from previous migrations?
|
282 |
-
*
|
283 |
-
* @return bool
|
284 |
-
*/
|
285 |
-
protected function is_migration_error() {
|
286 |
-
if ( $this->plugin->isNetworkActive() ) {
|
287 |
-
$error = get_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ), false );
|
288 |
-
} else {
|
289 |
-
$error = get_option( $this->plugin->getOptionName( 'plugin_migration_error' ), false );
|
290 |
-
}
|
291 |
-
|
292 |
-
return $error !== false;
|
293 |
-
}
|
294 |
-
|
295 |
-
/**
|
296 |
-
* Remove an option in database, thereby fix errors of the previous migration.
|
297 |
-
*/
|
298 |
-
protected function fix_migration_error() {
|
299 |
-
if ( $this->plugin->isNetworkActive() ) {
|
300 |
-
delete_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ) );
|
301 |
-
|
302 |
-
return;
|
303 |
-
}
|
304 |
-
|
305 |
-
delete_option( $this->plugin->getOptionName( 'plugin_migration_error' ) );
|
306 |
-
}
|
307 |
-
|
308 |
-
/**
|
309 |
-
* Migrates the plugin from version x.x.x to x.x.y. Automatically searches for files
|
310 |
-
* migrations to the plugin's root directory and executes them. Default files
|
311 |
-
* migrations are stored in wp-content/plugins/plugin-name/migrations and have names
|
312 |
-
* 0x0x0x.php, which corresponds to the version x.x.x. Method executes those migration files
|
313 |
-
* versions of which are between the previous version of plugin and current one.
|
314 |
-
*
|
315 |
-
*/
|
316 |
-
protected function make_migration() {
|
317 |
-
|
318 |
-
if ( ! current_user_can( 'update_plugins' ) ) {
|
319 |
-
return;
|
320 |
-
}
|
321 |
-
|
322 |
-
$old_plugin_version = $this->get_old_plugin_version();
|
323 |
-
$new_plugin_version = $this->get_current_plugin_version();
|
324 |
-
|
325 |
-
if ( empty( $old_plugin_version ) ) {
|
326 |
-
$this->update_plugin_version_in_db();
|
327 |
-
}
|
328 |
-
|
329 |
-
// converts versions like 0.0.0 to 000000
|
330 |
-
$old_number = $this->get_version_number( $old_plugin_version );
|
331 |
-
$new_number = $this->get_version_number( $new_plugin_version );
|
332 |
-
|
333 |
-
try {
|
334 |
-
|
335 |
-
$update_files = $this->plugin->get_paths()->migrations;
|
336 |
-
$files = $this->find_files( $update_files );
|
337 |
-
|
338 |
-
if ( empty( $files ) ) {
|
339 |
-
$this->update_plugin_version_in_db();
|
340 |
-
|
341 |
-
return;
|
342 |
-
}
|
343 |
-
|
344 |
-
// finds updates that has intermediate version
|
345 |
-
foreach ( (array) $files as $item ) {
|
346 |
-
if ( ! preg_match( '/^\d+$/', $item['name'] ) ) {
|
347 |
-
continue;
|
348 |
-
}
|
349 |
-
|
350 |
-
$item_number = intval( $item['name'] );
|
351 |
-
|
352 |
-
if ( $item_number > $old_number && $item_number <= $new_number ) {
|
353 |
-
$classes = $this->get_classes( $item['path'] );
|
354 |
-
|
355 |
-
if ( count( $classes ) == 0 ) {
|
356 |
-
continue;
|
357 |
-
}
|
358 |
-
|
359 |
-
foreach ( $classes as $path => $class_data ) {
|
360 |
-
include_once( $path );
|
361 |
-
$update_class = $class_data['name'];
|
362 |
-
|
363 |
-
$update = new $update_class( $this->plugin );
|
364 |
-
$update->install();
|
365 |
-
}
|
366 |
-
}
|
367 |
-
}
|
368 |
-
|
369 |
-
$this->update_plugin_version_in_db();
|
370 |
-
} catch( Exception $e ) {
|
371 |
-
if ( $this->plugin->isNetworkActive() ) {
|
372 |
-
update_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ), $e->getMessage() );
|
373 |
-
|
374 |
-
return;
|
375 |
-
}
|
376 |
-
update_option( $this->plugin->getOptionName( 'plugin_migration_error' ), $e->getMessage() );
|
377 |
-
}
|
378 |
-
}
|
379 |
-
|
380 |
-
/**
|
381 |
-
* Updates version of plugin in database. So that we can track which
|
382 |
-
* previous version of plugin was at the user, before he updated
|
383 |
-
* plugin.
|
384 |
-
*/
|
385 |
-
protected function update_plugin_version_in_db() {
|
386 |
-
|
387 |
-
# TODO: Delete after few releases
|
388 |
-
# This block for compatibility code with the old version of framework.
|
389 |
-
# Cleans up old data, after the transition to new version of framework.
|
390 |
-
#-------------------------------------------
|
391 |
-
if ( $this->plugin->isNetworkActive() ) {
|
392 |
-
$plugin_versions = get_site_option( 'factory_plugin_versions', [] );
|
393 |
-
} else {
|
394 |
-
$plugin_versions = get_option( 'factory_plugin_versions', [] );
|
395 |
-
}
|
396 |
-
|
397 |
-
if ( isset( $plugin_versions[ $this->plugin->getPluginName() ] ) ) {
|
398 |
-
unset( $plugin_versions[ $this->plugin->getPluginName() ] );
|
399 |
-
}
|
400 |
-
|
401 |
-
if ( $this->plugin->isNetworkActive() ) {
|
402 |
-
if ( empty( $plugin_versions ) ) {
|
403 |
-
delete_site_option( 'factory_plugin_versions' );
|
404 |
-
}
|
405 |
-
update_site_option( 'factory_plugin_versions', $plugin_versions );
|
406 |
-
update_site_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
|
407 |
-
|
408 |
-
return;
|
409 |
-
}
|
410 |
-
|
411 |
-
if ( empty( $plugin_versions ) ) {
|
412 |
-
delete_option( 'factory_plugin_versions' );
|
413 |
-
}
|
414 |
-
|
415 |
-
update_option( 'factory_plugin_versions', $plugin_versions );
|
416 |
-
update_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
|
417 |
-
}
|
418 |
-
|
419 |
-
/**
|
420 |
-
* Converts string representation of the version to the numeric.
|
421 |
-
*
|
422 |
-
* @since 1.0.0
|
423 |
-
*
|
424 |
-
* @param string $version A string version to convert.
|
425 |
-
*
|
426 |
-
* @return integer
|
427 |
-
*/
|
428 |
-
protected function get_version_number( $version ) {
|
429 |
-
preg_match( '/(\d+)\.(\d+)\.(\d+)/', $version, $matches );
|
430 |
-
if ( count( $matches ) == 0 ) {
|
431 |
-
return false;
|
432 |
-
}
|
433 |
-
|
434 |
-
$number = '';
|
435 |
-
$number .= ( strlen( $matches[1] ) == 1 ) ? '0' . $matches[1] : $matches[1];
|
436 |
-
$number .= ( strlen( $matches[2] ) == 1 ) ? '0' . $matches[2] : $matches[2];
|
437 |
-
$number .= ( strlen( $matches[3] ) == 1 ) ? '0' . $matches[3] : $matches[3];
|
438 |
-
|
439 |
-
return intval( $number );
|
440 |
-
}
|
441 |
-
|
442 |
-
/**
|
443 |
-
* Returns a list of files at a given path.
|
444 |
-
*
|
445 |
-
* @param string $path path for search
|
446 |
-
*/
|
447 |
-
private function find_files( $path ) {
|
448 |
-
return $this->find_file_or_folders( $path, true );
|
449 |
-
}
|
450 |
-
|
451 |
-
/**
|
452 |
-
* Returns a list of folders at a given path.
|
453 |
-
*
|
454 |
-
* @param string $path path for search
|
455 |
-
*/
|
456 |
-
/*private function find_folders( $path ) {
|
457 |
-
return $this->find_file_or_folders( $path, false );
|
458 |
-
}*/
|
459 |
-
|
460 |
-
/**
|
461 |
-
* Returns a list of files or folders at a given path.
|
462 |
-
*
|
463 |
-
* @param string $path path for search
|
464 |
-
* @param bool $files files or folders?
|
465 |
-
*/
|
466 |
-
private function find_file_or_folders( $path, $areFiles = true ) {
|
467 |
-
if ( ! is_dir( $path ) ) {
|
468 |
-
return [];
|
469 |
-
}
|
470 |
-
|
471 |
-
$entries = scandir( $path );
|
472 |
-
if ( empty( $entries ) ) {
|
473 |
-
return [];
|
474 |
-
}
|
475 |
-
|
476 |
-
$files = [];
|
477 |
-
foreach ( $entries as $entryName ) {
|
478 |
-
if ( $entryName == '.' || $entryName == '..' ) {
|
479 |
-
continue;
|
480 |
-
}
|
481 |
-
|
482 |
-
$filename = $path . '/' . $entryName;
|
483 |
-
if ( ( $areFiles && is_file( $filename ) ) || ( ! $areFiles && is_dir( $filename ) ) ) {
|
484 |
-
$files[] = [
|
485 |
-
'path' => str_replace( "\\", "/", $filename ),
|
486 |
-
'name' => $areFiles ? str_replace( '.php', '', $entryName ) : $entryName
|
487 |
-
];
|
488 |
-
}
|
489 |
-
}
|
490 |
-
|
491 |
-
return $files;
|
492 |
-
}
|
493 |
-
|
494 |
-
/**
|
495 |
-
* Gets php classes defined in a specified file.
|
496 |
-
*
|
497 |
-
* @param string $path
|
498 |
-
*
|
499 |
-
* @throws Exception
|
500 |
-
*/
|
501 |
-
private function get_classes( $path ) {
|
502 |
-
|
503 |
-
$phpCode = file_get_contents( $path );
|
504 |
-
|
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 );
|
512 |
-
|
513 |
-
$count = count( $tokens );
|
514 |
-
for ( $i = 2; $i < $count; $i ++ ) {
|
515 |
-
if ( is_array( $tokens ) && $tokens[ $i - 2 ][0] == T_CLASS && $tokens[ $i - 1 ][0] == T_WHITESPACE && $tokens[ $i ][0] == T_STRING ) {
|
516 |
-
|
517 |
-
$extends = null;
|
518 |
-
if ( $tokens[ $i + 2 ][0] == T_EXTENDS && $tokens[ $i + 4 ][0] == T_STRING ) {
|
519 |
-
$extends = $tokens[ $i + 4 ][1];
|
520 |
-
}
|
521 |
-
|
522 |
-
$class_name = $tokens[ $i ][1];
|
523 |
-
$classes[ $path ] = [
|
524 |
-
'name' => $class_name,
|
525 |
-
'extends' => $extends
|
526 |
-
];
|
527 |
-
}
|
528 |
-
}
|
529 |
-
|
530 |
-
/**
|
531 |
-
* result example:
|
532 |
-
*
|
533 |
-
* $classes['/plugin/items/filename.php'] = array(
|
534 |
-
* 'name' => 'PluginNameItem',
|
535 |
-
* 'extendes' => 'PluginNameItemBase'
|
536 |
-
* )
|
537 |
-
*/
|
538 |
-
|
539 |
-
return $classes;
|
540 |
-
}
|
541 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WBCR\Factory_460;
|
4 |
+
|
5 |
+
use Exception;
|
6 |
+
use Wbcr_Factory460_Plugin;
|
7 |
+
|
8 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
+
exit;
|
10 |
+
}
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Often when updating plugins, you need to make some changes to the database.
|
14 |
+
* This class automatically checks for plugin migrations and executes them when
|
15 |
+
* updating.
|
16 |
+
*
|
17 |
+
* The class has a debug mode, to enable the debug mode add constants to your plugin:
|
18 |
+
* define ('FACTORY_MIGRATIONS_DEBUG', true) - enables/disables debugging mode
|
19 |
+
* define ('FACTORY_MIGRATIONS_FORCE_OLD_VERSION', '1.1.9') - sets previous version
|
20 |
+
* for the plugin, if constant isn't set, then the previous version is taken from
|
21 |
+
* the database.
|
22 |
+
*
|
23 |
+
* todo: get_option and get_site_option are used because some caching plugins caching options, which causes problems
|
24 |
+
*
|
25 |
+
*
|
26 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
27 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
28 |
+
*
|
29 |
+
* @since 4.1.1
|
30 |
+
*/
|
31 |
+
class Migrations {
|
32 |
+
|
33 |
+
protected $plugin;
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Migrations constructor.
|
37 |
+
*
|
38 |
+
* @param Wbcr_Factory460_Plugin $plugin
|
39 |
+
*
|
40 |
+
* @throws Exception
|
41 |
+
*/
|
42 |
+
public function __construct( Wbcr_Factory460_Plugin $plugin ) {
|
43 |
+
|
44 |
+
$this->plugin = $plugin;
|
45 |
+
$plugin_name = $plugin->getPluginName();
|
46 |
+
|
47 |
+
if ( ! file_exists( $this->plugin->get_paths()->migrations ) ) {
|
48 |
+
throw new Exception( 'Starting with version 4.1.1 of the Core for Factory framework module, you must create a "migrations" folder in the root of your plugin to store the migration of the plugin.' );
|
49 |
+
}
|
50 |
+
|
51 |
+
if ( is_admin() ) {
|
52 |
+
add_action( "admin_init", [ $this, "check_migrations" ] );
|
53 |
+
|
54 |
+
add_action( "wbcr/factory/plugin_{$plugin_name}_activated", [ $this, 'activation_hook' ] );
|
55 |
+
add_action( "wbcr/factory/admin_notices", [ $this, "debug_bar_notice" ], 10, 2 );
|
56 |
+
add_action( "wbcr/factory/admin_notices", [ $this, "migration_error_notice" ], 10, 2 );
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
62 |
+
* @since 4.1.1
|
63 |
+
* @return mixed|void
|
64 |
+
*/
|
65 |
+
public function get_plugin_activated_time() {
|
66 |
+
if ( $this->plugin->isNetworkActive() ) {
|
67 |
+
return get_site_option( $this->plugin->getOptionName( 'plugin_activated' ), 0 );
|
68 |
+
}
|
69 |
+
|
70 |
+
return get_option( $this->plugin->getOptionName( 'plugin_activated' ), 0 );
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Check if migration is necessary for plugin and if there are errors from previous migrations.
|
75 |
+
* In debug mode, migrations are not performed automatically.
|
76 |
+
*/
|
77 |
+
public function check_migrations() {
|
78 |
+
if ( $this->is_migration_error() && isset( $_GET['wbcr_factory_fix_migration_error'] ) ) {
|
79 |
+
$this->fix_migration_error();
|
80 |
+
wp_safe_redirect( esc_url_raw(remove_query_arg( 'wbcr_factory_fix_migration_error' )) );
|
81 |
+
die();
|
82 |
+
}
|
83 |
+
|
84 |
+
if ( $this->is_debug() && isset( $_GET['wbcr_factory_test_migration'] ) ) {
|
85 |
+
$this->make_migration();
|
86 |
+
wp_safe_redirect( esc_url_raw(remove_query_arg( 'wbcr_factory_test_migration' )) );
|
87 |
+
die();
|
88 |
+
}
|
89 |
+
|
90 |
+
if ( $this->need_migration() && ! $this->is_debug() ) {
|
91 |
+
$this->make_migration();
|
92 |
+
}
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Notification displays the errors of outstanding migrations to fix errors
|
97 |
+
* you need to follow the instructions in the notification and click
|
98 |
+
* "I fixed, confirm migration".
|
99 |
+
*
|
100 |
+
* What is it for. Migrations are performed in background and on some sites,
|
101 |
+
* due to php errors or for some other reason, migration may be
|
102 |
+
* interrupted, because of what plugin will work incorrectly, you may lose settings.
|
103 |
+
*
|
104 |
+
* When creating new migrations, developer will add error handlers,
|
105 |
+
* and framework will intercept them safely for user and display them
|
106 |
+
* in this notice.
|
107 |
+
*
|
108 |
+
* @param array $notices
|
109 |
+
* @param static $plugin_name
|
110 |
+
*
|
111 |
+
* @return array
|
112 |
+
*/
|
113 |
+
public function migration_error_notice( $notices, $plugin_name ) {
|
114 |
+
|
115 |
+
if ( $this->plugin->getPluginName() !== $plugin_name ) {
|
116 |
+
return $notices;
|
117 |
+
}
|
118 |
+
|
119 |
+
if ( ! $this->is_migration_error() || ! current_user_can( 'update_plugins' ) ) {
|
120 |
+
return $notices;
|
121 |
+
}
|
122 |
+
|
123 |
+
if ( $this->plugin->isNetworkActive() ) {
|
124 |
+
$migration_error_text = get_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ), '' );
|
125 |
+
} else {
|
126 |
+
$migration_error_text = get_option( $this->plugin->getOptionName( 'plugin_migration_error' ), '' );
|
127 |
+
}
|
128 |
+
|
129 |
+
$fix_migration_error_url = esc_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_460' ) . "</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_460' ) . '</b><br>' . $notice_text . '</p>'
|
140 |
+
];
|
141 |
+
|
142 |
+
return $notices;
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Debug panel, display some information from the database. Also allows
|
147 |
+
* perform manual migrations to test new migrations.
|
148 |
+
*
|
149 |
+
* @param array $notices
|
150 |
+
* @param string $plugin_name
|
151 |
+
*
|
152 |
+
* @return array
|
153 |
+
*/
|
154 |
+
public function debug_bar_notice( $notices, $plugin_name ) {
|
155 |
+
|
156 |
+
if ( $this->plugin->getPluginName() !== $plugin_name ) {
|
157 |
+
return $notices;
|
158 |
+
}
|
159 |
+
if ( ! $this->is_debug() || ! current_user_can( 'update_plugins' ) ) {
|
160 |
+
return $notices;
|
161 |
+
}
|
162 |
+
|
163 |
+
$migrate_url = esc_url(add_query_arg( 'wbcr_factory_test_migration', 1 ));
|
164 |
+
|
165 |
+
$notice_text = __( "Plugin activated:", "wbcr_factory_460" ) . ' ' . date( "Y-m-d H:i:s", $this->get_plugin_activated_time() ) . "<br>";
|
166 |
+
|
167 |
+
$notice_text .= __( "Old plugin version (debug):", "wbcr_factory_460" ) . ' ' . $this->get_old_plugin_version() . "<br>";
|
168 |
+
$notice_text .= __( "Current plugin version:", "wbcr_factory_460" ) . ' ' . $this->get_current_plugin_version() . "<br>";
|
169 |
+
$notice_text .= __( "Need migration:", "wbcr_factory_460" ) . ' ' . ( $this->need_migration() ? "true" : "false" ) . "<br><br>";
|
170 |
+
$notice_text .= "<a href='{$migrate_url}' class='button button-default'>" . __( "Migrate now", "wbcr_factory_460" ) . "</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_460' ) . '</b><br>' . $notice_text . '</p>'
|
178 |
+
];
|
179 |
+
|
180 |
+
return $notices;
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Runs when plugin is activated. Checks if you need to migrate
|
185 |
+
* and if necessary it does it. Also adds a option when the plugin
|
186 |
+
* was activated for the first time.
|
187 |
+
*/
|
188 |
+
public function activation_hook() {
|
189 |
+
/*if ( $this->need_migration() && ! $this->is_debug() ) {
|
190 |
+
$this->make_migration();
|
191 |
+
}*/
|
192 |
+
|
193 |
+
// just time to know when the plugin was activated the first time
|
194 |
+
$activated = $this->get_plugin_activated_time();
|
195 |
+
|
196 |
+
if ( ! $activated ) {
|
197 |
+
if ( $this->plugin->isNetworkActive() ) {
|
198 |
+
update_site_option( $this->plugin->getOptionName( 'plugin_activated' ), time() );
|
199 |
+
update_site_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
|
200 |
+
} else {
|
201 |
+
update_option( $this->plugin->getOptionName( 'plugin_activated' ), time() );
|
202 |
+
update_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
|
203 |
+
}
|
204 |
+
}
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Checks if debug mode of migrations from version x.x.x to x.x.y is enabled.
|
209 |
+
*
|
210 |
+
* @return bool
|
211 |
+
*/
|
212 |
+
protected function is_debug() {
|
213 |
+
return defined( 'FACTORY_MIGRATIONS_DEBUG' ) && FACTORY_MIGRATIONS_DEBUG;
|
214 |
+
}
|
215 |
+
|
216 |
+
/**
|
217 |
+
* Gets previous version of plugin that plugin had before updating to the new version.
|
218 |
+
*
|
219 |
+
* @return string|null
|
220 |
+
*/
|
221 |
+
protected function get_old_plugin_version() {
|
222 |
+
|
223 |
+
if ( $this->is_debug() && defined( 'FACTORY_MIGRATIONS_FORCE_OLD_VERSION' ) ) {
|
224 |
+
return FACTORY_MIGRATIONS_FORCE_OLD_VERSION;
|
225 |
+
}
|
226 |
+
|
227 |
+
if ( $this->plugin->isNetworkActive() ) {
|
228 |
+
$plugin_version = get_site_option( $this->plugin->getOptionName( 'plugin_version' ), null );
|
229 |
+
} else {
|
230 |
+
$plugin_version = get_option( $this->plugin->getOptionName( 'plugin_version' ), null );
|
231 |
+
}
|
232 |
+
|
233 |
+
if ( ! empty( $plugin_version ) ) {
|
234 |
+
return $plugin_version;
|
235 |
+
}
|
236 |
+
|
237 |
+
# TODO: Remove after few releases
|
238 |
+
# This block for compatibility code with old version of framework < 4.1.1
|
239 |
+
#-------------------------------------------
|
240 |
+
if ( $this->plugin->isNetworkActive() ) {
|
241 |
+
$plugin_versions = get_site_option( 'factory_plugin_versions', [] );
|
242 |
+
} else {
|
243 |
+
$plugin_versions = get_option( 'factory_plugin_versions', [] );
|
244 |
+
}
|
245 |
+
|
246 |
+
$plugin_version = isset( $plugin_versions[ $this->plugin->getPluginName() ] ) ? $plugin_versions[ $this->plugin->getPluginName() ] : null;
|
247 |
+
|
248 |
+
if ( ! empty( $plugin_version ) ) {
|
249 |
+
$plugin_version = str_replace( [ 'free-', 'premium-', 'offline-' ], '', $plugin_version );
|
250 |
+
}
|
251 |
+
|
252 |
+
#-------------------------------------------
|
253 |
+
|
254 |
+
return $plugin_version;
|
255 |
+
}
|
256 |
+
|
257 |
+
/**
|
258 |
+
* Gets the current version of plugin.
|
259 |
+
*
|
260 |
+
* @return string
|
261 |
+
*/
|
262 |
+
protected function get_current_plugin_version() {
|
263 |
+
return $this->plugin->getPluginVersion();
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Do I need migration for plugin? If previous migration was with a error, then
|
268 |
+
* method will always return false to prevent looping.
|
269 |
+
*
|
270 |
+
* @return mixed
|
271 |
+
*/
|
272 |
+
protected function need_migration() {
|
273 |
+
if ( $this->is_migration_error() ) {
|
274 |
+
return false;
|
275 |
+
}
|
276 |
+
|
277 |
+
return version_compare( $this->get_old_plugin_version(), $this->get_current_plugin_version(), '<' );
|
278 |
+
}
|
279 |
+
|
280 |
+
/**
|
281 |
+
* Are there errors from previous migrations?
|
282 |
+
*
|
283 |
+
* @return bool
|
284 |
+
*/
|
285 |
+
protected function is_migration_error() {
|
286 |
+
if ( $this->plugin->isNetworkActive() ) {
|
287 |
+
$error = get_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ), false );
|
288 |
+
} else {
|
289 |
+
$error = get_option( $this->plugin->getOptionName( 'plugin_migration_error' ), false );
|
290 |
+
}
|
291 |
+
|
292 |
+
return $error !== false;
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Remove an option in database, thereby fix errors of the previous migration.
|
297 |
+
*/
|
298 |
+
protected function fix_migration_error() {
|
299 |
+
if ( $this->plugin->isNetworkActive() ) {
|
300 |
+
delete_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ) );
|
301 |
+
|
302 |
+
return;
|
303 |
+
}
|
304 |
+
|
305 |
+
delete_option( $this->plugin->getOptionName( 'plugin_migration_error' ) );
|
306 |
+
}
|
307 |
+
|
308 |
+
/**
|
309 |
+
* Migrates the plugin from version x.x.x to x.x.y. Automatically searches for files
|
310 |
+
* migrations to the plugin's root directory and executes them. Default files
|
311 |
+
* migrations are stored in wp-content/plugins/plugin-name/migrations and have names
|
312 |
+
* 0x0x0x.php, which corresponds to the version x.x.x. Method executes those migration files
|
313 |
+
* versions of which are between the previous version of plugin and current one.
|
314 |
+
*
|
315 |
+
*/
|
316 |
+
protected function make_migration() {
|
317 |
+
|
318 |
+
if ( ! current_user_can( 'update_plugins' ) ) {
|
319 |
+
return;
|
320 |
+
}
|
321 |
+
|
322 |
+
$old_plugin_version = $this->get_old_plugin_version();
|
323 |
+
$new_plugin_version = $this->get_current_plugin_version();
|
324 |
+
|
325 |
+
if ( empty( $old_plugin_version ) ) {
|
326 |
+
$this->update_plugin_version_in_db();
|
327 |
+
}
|
328 |
+
|
329 |
+
// converts versions like 0.0.0 to 000000
|
330 |
+
$old_number = $this->get_version_number( $old_plugin_version );
|
331 |
+
$new_number = $this->get_version_number( $new_plugin_version );
|
332 |
+
|
333 |
+
try {
|
334 |
+
|
335 |
+
$update_files = $this->plugin->get_paths()->migrations;
|
336 |
+
$files = $this->find_files( $update_files );
|
337 |
+
|
338 |
+
if ( empty( $files ) ) {
|
339 |
+
$this->update_plugin_version_in_db();
|
340 |
+
|
341 |
+
return;
|
342 |
+
}
|
343 |
+
|
344 |
+
// finds updates that has intermediate version
|
345 |
+
foreach ( (array) $files as $item ) {
|
346 |
+
if ( ! preg_match( '/^\d+$/', $item['name'] ) ) {
|
347 |
+
continue;
|
348 |
+
}
|
349 |
+
|
350 |
+
$item_number = intval( $item['name'] );
|
351 |
+
|
352 |
+
if ( $item_number > $old_number && $item_number <= $new_number ) {
|
353 |
+
$classes = $this->get_classes( $item['path'] );
|
354 |
+
|
355 |
+
if ( count( $classes ) == 0 ) {
|
356 |
+
continue;
|
357 |
+
}
|
358 |
+
|
359 |
+
foreach ( $classes as $path => $class_data ) {
|
360 |
+
include_once( $path );
|
361 |
+
$update_class = $class_data['name'];
|
362 |
+
|
363 |
+
$update = new $update_class( $this->plugin );
|
364 |
+
$update->install();
|
365 |
+
}
|
366 |
+
}
|
367 |
+
}
|
368 |
+
|
369 |
+
$this->update_plugin_version_in_db();
|
370 |
+
} catch( Exception $e ) {
|
371 |
+
if ( $this->plugin->isNetworkActive() ) {
|
372 |
+
update_site_option( $this->plugin->getOptionName( 'plugin_migration_error' ), $e->getMessage() );
|
373 |
+
|
374 |
+
return;
|
375 |
+
}
|
376 |
+
update_option( $this->plugin->getOptionName( 'plugin_migration_error' ), $e->getMessage() );
|
377 |
+
}
|
378 |
+
}
|
379 |
+
|
380 |
+
/**
|
381 |
+
* Updates version of plugin in database. So that we can track which
|
382 |
+
* previous version of plugin was at the user, before he updated
|
383 |
+
* plugin.
|
384 |
+
*/
|
385 |
+
protected function update_plugin_version_in_db() {
|
386 |
+
|
387 |
+
# TODO: Delete after few releases
|
388 |
+
# This block for compatibility code with the old version of framework.
|
389 |
+
# Cleans up old data, after the transition to new version of framework.
|
390 |
+
#-------------------------------------------
|
391 |
+
if ( $this->plugin->isNetworkActive() ) {
|
392 |
+
$plugin_versions = get_site_option( 'factory_plugin_versions', [] );
|
393 |
+
} else {
|
394 |
+
$plugin_versions = get_option( 'factory_plugin_versions', [] );
|
395 |
+
}
|
396 |
+
|
397 |
+
if ( isset( $plugin_versions[ $this->plugin->getPluginName() ] ) ) {
|
398 |
+
unset( $plugin_versions[ $this->plugin->getPluginName() ] );
|
399 |
+
}
|
400 |
+
|
401 |
+
if ( $this->plugin->isNetworkActive() ) {
|
402 |
+
if ( empty( $plugin_versions ) ) {
|
403 |
+
delete_site_option( 'factory_plugin_versions' );
|
404 |
+
}
|
405 |
+
update_site_option( 'factory_plugin_versions', $plugin_versions );
|
406 |
+
update_site_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
|
407 |
+
|
408 |
+
return;
|
409 |
+
}
|
410 |
+
|
411 |
+
if ( empty( $plugin_versions ) ) {
|
412 |
+
delete_option( 'factory_plugin_versions' );
|
413 |
+
}
|
414 |
+
|
415 |
+
update_option( 'factory_plugin_versions', $plugin_versions );
|
416 |
+
update_option( $this->plugin->getOptionName( 'plugin_version' ), $this->get_current_plugin_version() );
|
417 |
+
}
|
418 |
+
|
419 |
+
/**
|
420 |
+
* Converts string representation of the version to the numeric.
|
421 |
+
*
|
422 |
+
* @since 1.0.0
|
423 |
+
*
|
424 |
+
* @param string $version A string version to convert.
|
425 |
+
*
|
426 |
+
* @return integer
|
427 |
+
*/
|
428 |
+
protected function get_version_number( $version ) {
|
429 |
+
preg_match( '/(\d+)\.(\d+)\.(\d+)/', $version, $matches );
|
430 |
+
if ( count( $matches ) == 0 ) {
|
431 |
+
return false;
|
432 |
+
}
|
433 |
+
|
434 |
+
$number = '';
|
435 |
+
$number .= ( strlen( $matches[1] ) == 1 ) ? '0' . $matches[1] : $matches[1];
|
436 |
+
$number .= ( strlen( $matches[2] ) == 1 ) ? '0' . $matches[2] : $matches[2];
|
437 |
+
$number .= ( strlen( $matches[3] ) == 1 ) ? '0' . $matches[3] : $matches[3];
|
438 |
+
|
439 |
+
return intval( $number );
|
440 |
+
}
|
441 |
+
|
442 |
+
/**
|
443 |
+
* Returns a list of files at a given path.
|
444 |
+
*
|
445 |
+
* @param string $path path for search
|
446 |
+
*/
|
447 |
+
private function find_files( $path ) {
|
448 |
+
return $this->find_file_or_folders( $path, true );
|
449 |
+
}
|
450 |
+
|
451 |
+
/**
|
452 |
+
* Returns a list of folders at a given path.
|
453 |
+
*
|
454 |
+
* @param string $path path for search
|
455 |
+
*/
|
456 |
+
/*private function find_folders( $path ) {
|
457 |
+
return $this->find_file_or_folders( $path, false );
|
458 |
+
}*/
|
459 |
+
|
460 |
+
/**
|
461 |
+
* Returns a list of files or folders at a given path.
|
462 |
+
*
|
463 |
+
* @param string $path path for search
|
464 |
+
* @param bool $files files or folders?
|
465 |
+
*/
|
466 |
+
private function find_file_or_folders( $path, $areFiles = true ) {
|
467 |
+
if ( ! is_dir( $path ) ) {
|
468 |
+
return [];
|
469 |
+
}
|
470 |
+
|
471 |
+
$entries = scandir( $path );
|
472 |
+
if ( empty( $entries ) ) {
|
473 |
+
return [];
|
474 |
+
}
|
475 |
+
|
476 |
+
$files = [];
|
477 |
+
foreach ( $entries as $entryName ) {
|
478 |
+
if ( $entryName == '.' || $entryName == '..' ) {
|
479 |
+
continue;
|
480 |
+
}
|
481 |
+
|
482 |
+
$filename = $path . '/' . $entryName;
|
483 |
+
if ( ( $areFiles && is_file( $filename ) ) || ( ! $areFiles && is_dir( $filename ) ) ) {
|
484 |
+
$files[] = [
|
485 |
+
'path' => str_replace( "\\", "/", $filename ),
|
486 |
+
'name' => $areFiles ? str_replace( '.php', '', $entryName ) : $entryName
|
487 |
+
];
|
488 |
+
}
|
489 |
+
}
|
490 |
+
|
491 |
+
return $files;
|
492 |
+
}
|
493 |
+
|
494 |
+
/**
|
495 |
+
* Gets php classes defined in a specified file.
|
496 |
+
*
|
497 |
+
* @param string $path
|
498 |
+
*
|
499 |
+
* @throws Exception
|
500 |
+
*/
|
501 |
+
private function get_classes( $path ) {
|
502 |
+
|
503 |
+
$phpCode = file_get_contents( $path );
|
504 |
+
|
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_460' ) );
|
509 |
+
}
|
510 |
+
|
511 |
+
$tokens = token_get_all( $phpCode );
|
512 |
+
|
513 |
+
$count = count( $tokens );
|
514 |
+
for ( $i = 2; $i < $count; $i ++ ) {
|
515 |
+
if ( is_array( $tokens ) && $tokens[ $i - 2 ][0] == T_CLASS && $tokens[ $i - 1 ][0] == T_WHITESPACE && $tokens[ $i ][0] == T_STRING ) {
|
516 |
+
|
517 |
+
$extends = null;
|
518 |
+
if ( $tokens[ $i + 2 ][0] == T_EXTENDS && $tokens[ $i + 4 ][0] == T_STRING ) {
|
519 |
+
$extends = $tokens[ $i + 4 ][1];
|
520 |
+
}
|
521 |
+
|
522 |
+
$class_name = $tokens[ $i ][1];
|
523 |
+
$classes[ $path ] = [
|
524 |
+
'name' => $class_name,
|
525 |
+
'extends' => $extends
|
526 |
+
];
|
527 |
+
}
|
528 |
+
}
|
529 |
+
|
530 |
+
/**
|
531 |
+
* result example:
|
532 |
+
*
|
533 |
+
* $classes['/plugin/items/filename.php'] = array(
|
534 |
+
* 'name' => 'PluginNameItem',
|
535 |
+
* 'extendes' => 'PluginNameItemBase'
|
536 |
+
* )
|
537 |
+
*/
|
538 |
+
|
539 |
+
return $classes;
|
540 |
+
}
|
541 |
+
}
|
libs/factory/core/includes/class-factory-notices.php
CHANGED
@@ -1,296 +1,296 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace WBCR\
|
4 |
-
|
5 |
-
use
|
6 |
-
|
7 |
-
// Exit if accessed directly
|
8 |
-
if( !defined('ABSPATH') ) {
|
9 |
-
exit;
|
10 |
-
}
|
11 |
-
|
12 |
-
/**
|
13 |
-
* A class to manage notices.
|
14 |
-
*
|
15 |
-
* @since 1.0.0
|
16 |
-
*/
|
17 |
-
|
18 |
-
/**
|
19 |
-
* A group of classes and methods to create and manage notices.
|
20 |
-
*
|
21 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
22 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
23 |
-
*
|
24 |
-
* @package factory-notices
|
25 |
-
* @since 1.0.0
|
26 |
-
*/
|
27 |
-
class Notices {
|
28 |
-
|
29 |
-
/**
|
30 |
-
* @var
|
31 |
-
*/
|
32 |
-
protected $plugin;
|
33 |
-
/**
|
34 |
-
* @var array
|
35 |
-
*/
|
36 |
-
protected $notices = [];
|
37 |
-
|
38 |
-
/**
|
39 |
-
* @var array
|
40 |
-
*/
|
41 |
-
protected $default_where = [
|
42 |
-
'plugins',
|
43 |
-
'themes',
|
44 |
-
'dashboard',
|
45 |
-
'edit',
|
46 |
-
'settings',
|
47 |
-
'dashboard-network',
|
48 |
-
'plugins-network',
|
49 |
-
'themes-network',
|
50 |
-
'settings-network',
|
51 |
-
];
|
52 |
-
|
53 |
-
/**
|
54 |
-
* @var array
|
55 |
-
*/
|
56 |
-
private $dissmised_notices;
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Инициализируем уведомлений сразу после загрузки модуля уведомлений
|
60 |
-
*
|
61 |
-
* @param
|
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 |
-
|
81 |
-
/**
|
82 |
-
* Регистрирует экшены для работы с уведомлениями на текущем экране странице.
|
83 |
-
* Уведомления собираются через фильтр wbcr_factory_admin_notices, если в массиве уведомлений,
|
84 |
-
* хотя бы одно, соответствует условиям в параметре $notice['where'], то метод печает вспомогательные скрипты и уведомления.
|
85 |
-
*/
|
86 |
-
public function currentScreenAction()
|
87 |
-
{
|
88 |
-
/**
|
89 |
-
* @since 2.1.2 - Добавлен, модуль factory_notices_000 был удален. Поэтому в этому хуке мы заменили префикс на
|
90 |
-
*/
|
91 |
-
$this->notices = apply_filters('wbcr/factory/admin_notices', $this->notices, $this->plugin->getPluginName());
|
92 |
-
|
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 |
-
|
120 |
-
/**
|
121 |
-
* Показывает все зарегистрированные уведомления для текущего плагина.
|
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 |
-
}
|
163 |
-
|
164 |
-
/**
|
165 |
-
* Показывает уведомление, по переданным параметрам
|
166 |
-
*
|
167 |
-
* @param array $data - Параметры уведомления
|
168 |
-
* $data['id'] - Индентификатор уведомления
|
169 |
-
* $data['type'] - Тип уведомления (error, warning, success)
|
170 |
-
* $notice['where'] - На каких страницах показывать уведомление ('plugins', 'dashboard', 'edit')
|
171 |
-
* $data['text'] - Текст уведомления
|
172 |
-
* $data['dismissible'] - Если true, уведомление будет с кнопкой закрыть
|
173 |
-
* $data['dismiss_expires'] - Когда снова показать уведомление, нужно указывать время в unix timestamp.
|
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="<?php echo 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 |
-
<?php echo $data['text'] ?>
|
207 |
-
</div>
|
208 |
-
<?php
|
209 |
-
}
|
210 |
-
|
211 |
-
/**
|
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 |
-
}
|
250 |
-
|
251 |
-
/**
|
252 |
-
* Javascript code
|
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() {
|
265 |
-
$.post(ajaxurl, {
|
266 |
-
'action': '<?php echo $this->plugin->getPluginName(); ?>_dismiss_notice',
|
267 |
-
'name': $(this).parent().data('name'),
|
268 |
-
'expires': $(this).parent().data('expires'),
|
269 |
-
'nonce': $(this).parent().attr('data-nonce')
|
270 |
-
});
|
271 |
-
});
|
272 |
-
|
273 |
-
});
|
274 |
-
</script>
|
275 |
-
<?php
|
276 |
-
}
|
277 |
-
|
278 |
-
|
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 |
-
}
|
293 |
-
|
294 |
-
return false;
|
295 |
-
}
|
296 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WBCR\Factory_460;
|
4 |
+
|
5 |
+
use Wbcr_Factory460_Plugin;
|
6 |
+
|
7 |
+
// Exit if accessed directly
|
8 |
+
if( !defined('ABSPATH') ) {
|
9 |
+
exit;
|
10 |
+
}
|
11 |
+
|
12 |
+
/**
|
13 |
+
* A class to manage notices.
|
14 |
+
*
|
15 |
+
* @since 1.0.0
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* A group of classes and methods to create and manage notices.
|
20 |
+
*
|
21 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
22 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
23 |
+
*
|
24 |
+
* @package factory-notices
|
25 |
+
* @since 1.0.0
|
26 |
+
*/
|
27 |
+
class Notices {
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @var Wbcr_Factory460_Plugin
|
31 |
+
*/
|
32 |
+
protected $plugin;
|
33 |
+
/**
|
34 |
+
* @var array
|
35 |
+
*/
|
36 |
+
protected $notices = [];
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @var array
|
40 |
+
*/
|
41 |
+
protected $default_where = [
|
42 |
+
'plugins',
|
43 |
+
'themes',
|
44 |
+
'dashboard',
|
45 |
+
'edit',
|
46 |
+
'settings',
|
47 |
+
'dashboard-network',
|
48 |
+
'plugins-network',
|
49 |
+
'themes-network',
|
50 |
+
'settings-network',
|
51 |
+
];
|
52 |
+
|
53 |
+
/**
|
54 |
+
* @var array
|
55 |
+
*/
|
56 |
+
private $dissmised_notices;
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Инициализируем уведомлений сразу после загрузки модуля уведомлений
|
60 |
+
*
|
61 |
+
* @param Wbcr_Factory460_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 |
+
|
81 |
+
/**
|
82 |
+
* Регистрирует экшены для работы с уведомлениями на текущем экране странице.
|
83 |
+
* Уведомления собираются через фильтр wbcr_factory_admin_notices, если в массиве уведомлений,
|
84 |
+
* хотя бы одно, соответствует условиям в параметре $notice['where'], то метод печает вспомогательные скрипты и уведомления.
|
85 |
+
*/
|
86 |
+
public function currentScreenAction()
|
87 |
+
{
|
88 |
+
/**
|
89 |
+
* @since 2.1.2 - Добавлен, модуль factory_notices_000 был удален. Поэтому в этому хуке мы заменили префикс на factory_460
|
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 |
+
|
120 |
+
/**
|
121 |
+
* Показывает все зарегистрированные уведомления для текущего плагина.
|
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 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Показывает уведомление, по переданным параметрам
|
166 |
+
*
|
167 |
+
* @param array $data - Параметры уведомления
|
168 |
+
* $data['id'] - Индентификатор уведомления
|
169 |
+
* $data['type'] - Тип уведомления (error, warning, success)
|
170 |
+
* $notice['where'] - На каких страницах показывать уведомление ('plugins', 'dashboard', 'edit')
|
171 |
+
* $data['text'] - Текст уведомления
|
172 |
+
* $data['dismissible'] - Если true, уведомление будет с кнопкой закрыть
|
173 |
+
* $data['dismiss_expires'] - Когда снова показать уведомление, нужно указывать время в unix timestamp.
|
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="<?php echo 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 |
+
<?php echo $data['text'] ?>
|
207 |
+
</div>
|
208 |
+
<?php
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
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 |
+
}
|
250 |
+
|
251 |
+
/**
|
252 |
+
* Javascript code
|
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() {
|
265 |
+
$.post(ajaxurl, {
|
266 |
+
'action': '<?php echo $this->plugin->getPluginName(); ?>_dismiss_notice',
|
267 |
+
'name': $(this).parent().data('name'),
|
268 |
+
'expires': $(this).parent().data('expires'),
|
269 |
+
'nonce': $(this).parent().attr('data-nonce')
|
270 |
+
});
|
271 |
+
});
|
272 |
+
|
273 |
+
});
|
274 |
+
</script>
|
275 |
+
<?php
|
276 |
+
}
|
277 |
+
|
278 |
+
|
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 |
+
}
|
293 |
+
|
294 |
+
return false;
|
295 |
+
}
|
296 |
+
}
|
libs/factory/core/includes/class-factory-options.php
CHANGED
@@ -1,432 +1,432 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace WBCR\
|
4 |
-
|
5 |
-
// Exit if accessed directly
|
6 |
-
use Exception;
|
7 |
-
|
8 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
-
exit;
|
10 |
-
}
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Трейт используется для расширения базового класса плагина
|
14 |
-
*
|
15 |
-
* Этот трейт является оберткой для Wordpress функций get_option, get_site_option, update_option, update_site_option,
|
16 |
-
* delete_option, delete_site_option. Основная задача была получать, обновлять, удалять опции без использования префиксов,
|
17 |
-
* чтобы класс выполнял эту работу за программиста. В дополнение, трейт содержит методы для полной выгрузки всех опций
|
18 |
-
* плагина, что позволяет при инициализации плагина автоматически выгрузить все существующие опции плагина в объектный
|
19 |
-
* кеш. Все опции, с которыми работает плагин, могут быть отфильтрованы.
|
20 |
-
*
|
21 |
-
* Документация по трейту: https://webcraftic.atlassian.net/wiki/spaces/FFD/pages/393805831/
|
22 |
-
* Документация по созданию плагина: https://webcraftic.atlassian.net/wiki/spaces/CNCFC/pages/327828
|
23 |
-
* Репозиторий: https://github.com/alexkovalevv
|
24 |
-
*
|
25 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
26 |
-
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
27 |
-
*
|
28 |
-
* @since 4.0.8 - Добавлен
|
29 |
-
* @package factory-core
|
30 |
-
*/
|
31 |
-
trait Options {
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Абстрактный метод, должен быть реализован в классе использующем этот трейт. Метод позволяет получить префикс
|
35 |
-
* плагина для формирования имен опций в базе данных Wordpress. У опций должно быть свое пространство имен,
|
36 |
-
* иначе может быть конфликт с другими плагинами или с сами ядром Wordpress.
|
37 |
-
*
|
38 |
-
* @since 4.0.8 - Добавлен
|
39 |
-
* @return string Возвращает префикс плагина. Пример: wbcr_clearfy_
|
40 |
-
*/
|
41 |
-
abstract public function getPrefix();
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Выгружает все опции плагина в объектный кеш. Плагин может получить любую свою опцию без запроса к базе данных.
|
45 |
-
* Метод ускоряет работу плагина, если опций очень много.
|
46 |
-
*
|
47 |
-
* Используется только один раз при инициализации плагина.
|
48 |
-
*
|
49 |
-
* @since 4.0.8 - Добавлен
|
50 |
-
*/
|
51 |
-
public function loadAllOptions() {
|
52 |
-
global $wpdb;
|
53 |
-
|
54 |
-
$is_option_loaded = wp_cache_get( $this->getPrefix() . 'all_options_loaded', $this->getPrefix() . 'options' );
|
55 |
-
|
56 |
-
if ( false === $is_option_loaded ) {
|
57 |
-
$result = $wpdb->get_results( "SELECT option_name, option_value FROM {$wpdb->options} WHERE option_name LIKE '{$this->getPrefix()}%'" );
|
58 |
-
|
59 |
-
$options = [];
|
60 |
-
|
61 |
-
if ( ! empty( $result ) ) {
|
62 |
-
wp_cache_add( $this->getPrefix() . 'all_options_loaded', 1, $this->getPrefix() . 'options' );
|
63 |
-
|
64 |
-
foreach ( $result as $option ) {
|
65 |
-
$value = maybe_unserialize( $option->option_value );
|
66 |
-
$value = $this->normalizeValue( $value );
|
67 |
-
|
68 |
-
wp_cache_add( $option->option_name, $value, $this->getPrefix() . 'options' );
|
69 |
-
$options[ $option->option_name ] = $value;
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Действие, которое будет выполнено,
|
74 |
-
*
|
75 |
-
* @since 4.0.9 - Добавлен
|
76 |
-
*
|
77 |
-
* @param string $plugin_name Имя плагина
|
78 |
-
* @param array $options Ассоциативный массив опций плагина
|
79 |
-
*/
|
80 |
-
do_action( 'wbcr/factory/all_options_loaded', $options, $this->plugin_name );
|
81 |
-
}
|
82 |
-
}
|
83 |
-
}
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Выгружает все сетевые опции плагина в объектный кеш. Плагин может получить любую свою опцию без запроса к базе
|
87 |
-
* данных. Метод ускоряет работу плагина, если опций очень много.
|
88 |
-
*
|
89 |
-
* Используется и работает только в режиме мультисайтов, один раз при инициализации плагина.!
|
90 |
-
*
|
91 |
-
* @since 4.0.8 - Добавлен
|
92 |
-
* @return void
|
93 |
-
*/
|
94 |
-
public function loadAllNetworkOptions() {
|
95 |
-
global $wpdb;
|
96 |
-
|
97 |
-
$network_id = (int) get_current_network_id();
|
98 |
-
|
99 |
-
$is_option_loaded = wp_cache_get( $network_id . ":" . $this->getPrefix() . 'all_options_loaded', $this->getPrefix() . 'network_options' );
|
100 |
-
|
101 |
-
if ( false === $is_option_loaded ) {
|
102 |
-
wp_cache_add_global_groups( [ $this->getPrefix() . 'network_options' ] );
|
103 |
-
|
104 |
-
$result = $wpdb->get_results( "SELECT meta_key, meta_value FROM {$wpdb->sitemeta} WHERE site_id='{$network_id}' AND meta_key LIKE '{$this->getPrefix()}%'" );
|
105 |
-
|
106 |
-
$options = [];
|
107 |
-
if ( ! empty( $result ) ) {
|
108 |
-
wp_cache_add( $network_id . ":" . $this->getPrefix() . 'all_options_loaded', 1, $this->getPrefix() . 'network_options' );
|
109 |
-
|
110 |
-
foreach ( $result as $option ) {
|
111 |
-
$value = maybe_unserialize( $option->meta_value );
|
112 |
-
$value = $this->normalizeValue( $value );
|
113 |
-
|
114 |
-
$cache_key = $network_id . ":" . $option->meta_key;
|
115 |
-
wp_cache_add( $cache_key, $value, $this->getPrefix() . 'network_options' );
|
116 |
-
$options[ $option->meta_key ] = $value;
|
117 |
-
}
|
118 |
-
|
119 |
-
/**
|
120 |
-
*
|
121 |
-
* Действие, которое будет выполнено, когда все сетевые опции плагина будут выгружены.
|
122 |
-
*
|
123 |
-
* @since 4.0.9 - Добавлен
|
124 |
-
*
|
125 |
-
* @param array $options Ассоциативный массив опций плагина
|
126 |
-
* @param string $plugin_name Имя плагина
|
127 |
-
*/
|
128 |
-
do_action( 'wbcr/factory/all_network_options_loaded', $options, $this->plugin_name );
|
129 |
-
}
|
130 |
-
}
|
131 |
-
}
|
132 |
-
|
133 |
-
/**
|
134 |
-
* Позволяет получить популярную опцию. В случае если плагин установлен для сети (в режиме мультисайтов),
|
135 |
-
* то метод возвращает опции только для сети, иначе метод возвращает опцию для текущего сайта. Работает
|
136 |
-
* на основе self::getOption и self::getNetworkOption, смотрите полную реализацию в этих методах.
|
137 |
-
*
|
138 |
-
* @since 4.0.8 - Добавлен
|
139 |
-
*
|
140 |
-
* @param string $option_name Имя опции без префикса.
|
141 |
-
* @param mixed $default Значение по умолчанию. Если опции нет в базе данных, будет возвращено это значение. По умолчанию false
|
142 |
-
*
|
143 |
-
* @return mixed Возвращает значение опции, если это сериализованная строка, то автоматически распаковывает ее.
|
144 |
-
*/
|
145 |
-
public function getPopulateOption( $option_name, $default = false ) {
|
146 |
-
if ( $this->isNetworkActive() ) {
|
147 |
-
$option_value = $this->getNetworkOption( $option_name, $default );
|
148 |
-
} else {
|
149 |
-
$option_value = $this->getOption( $option_name, $default );
|
150 |
-
}
|
151 |
-
|
152 |
-
/**
|
153 |
-
* Фильтр позволяет отфильтровать возвращаемое значение популярной опции.
|
154 |
-
*
|
155 |
-
* @since 4.0.9 - Добавлен
|
156 |
-
*
|
157 |
-
* @param mixed $option_value Значение опции
|
158 |
-
* @param string $option_name Имя опции
|
159 |
-
* @param mixed $default Значение опции по умолчанию
|
160 |
-
*/
|
161 |
-
return apply_filters( "wbcr/factory/populate_option_{$option_name}", $option_value, $option_name, $default );
|
162 |
-
}
|
163 |
-
|
164 |
-
/**
|
165 |
-
* Позволяет получить сетевые опции. Если плагин установлен для сети (в режиме мультисайтов), то
|
166 |
-
* метод возвращает опции только для сети, иначе метод возвращает опцию для текущего сайта.
|
167 |
-
*
|
168 |
-
* Опция вытаскивается из объектного кеша, после выполнения метода self:loadAllNetworkOptions,
|
169 |
-
* а не напрямую из базы данных, из-за чего при работе с некоторыми кеширующими плагинами,
|
170 |
-
* может быть странное поведение в работе плагина.
|
171 |
-
*
|
172 |
-
* @since 4.0.8 - Добавлен
|
173 |
-
*
|
174 |
-
* @param string $option_name Имя опции без префикса.
|
175 |
-
* @param mixed $default Значение по умолчанию. Если опции нет в базе данных, будет возвращено это значение. По умолчанию false
|
176 |
-
*
|
177 |
-
* @return mixed Возвращает значение опции, если это сериализованная строка, то автоматически распаковывает ее.
|
178 |
-
*/
|
179 |
-
public function getNetworkOption( $option_name, $default = false ) {
|
180 |
-
if ( empty( $option_name ) || ! is_string( $option_name ) ) {
|
181 |
-
throw new Exception( 'Option name must be a string and must not be empty.' );
|
182 |
-
}
|
183 |
-
|
184 |
-
if ( ! is_multisite() ) {
|
185 |
-
return $this->getOption( $option_name, $default );
|
186 |
-
}
|
187 |
-
|
188 |
-
$this->loadAllNetworkOptions();
|
189 |
-
|
190 |
-
$network_id = (int) get_current_network_id();
|
191 |
-
$cache_key = $network_id . ':' . $this->getPrefix() . $option_name;
|
192 |
-
$option_value = wp_cache_get( $cache_key, $this->getPrefix() . 'network_options' );
|
193 |
-
|
194 |
-
if ( false === $option_value ) {
|
195 |
-
$option_value = $default;
|
196 |
-
}
|
197 |
-
|
198 |
-
/**
|
199 |
-
* Фильтр позволяет отфильтровать возвращаемое значение сетевой опции.
|
200 |
-
*
|
201 |
-
* @since 4.0.9 - Добавлен
|
202 |
-
*
|
203 |
-
* @param mixed $option_value Значение опции
|
204 |
-
* @param string $option_name Имя опции
|
205 |
-
* @param mixed $default Значение опции по умолчанию
|
206 |
-
* @param int $network_id ID сети
|
207 |
-
*/
|
208 |
-
|
209 |
-
return apply_filters( "wbcr/factory/network_option_{$option_name}", $option_value, $option_name, $default, $network_id );
|
210 |
-
}
|
211 |
-
|
212 |
-
/**
|
213 |
-
* Метод позволяет получить опцию для текущего сайта. Опция вытаскивается из объектного кеша, после выполнения метода
|
214 |
-
* self:loadAllOptions, а не напрямую из базы данных, из-за чего при работе с некоторыми кеширующими плагинами,
|
215 |
-
* может быть странное поведение в работе плагина.
|
216 |
-
*
|
217 |
-
* @since 4.0.0 - Добавлен
|
218 |
-
* @since 4.0.8 - Полностью переделан
|
219 |
-
*
|
220 |
-
* @param string $option_name Имя опции без префикса.
|
221 |
-
* @param mixed $default Значение по умолчанию. Если опции нет в базе данных, будет возвращено это значение. По умолчанию false
|
222 |
-
*
|
223 |
-
* @return mixed
|
224 |
-
*/
|
225 |
-
public function getOption( $option_name, $default = false ) {
|
226 |
-
if ( empty( $option_name ) || ! is_string( $option_name ) ) {
|
227 |
-
throw new Exception( 'Option name must be a string and must not be empty.' );
|
228 |
-
}
|
229 |
-
|
230 |
-
$this->loadAllOptions();
|
231 |
-
|
232 |
-
$option_value = wp_cache_get( $this->getPrefix() . $option_name, $this->getPrefix() . 'options' );
|
233 |
-
|
234 |
-
if ( false === $option_value ) {
|
235 |
-
$option_value = $default;
|
236 |
-
}
|
237 |
-
|
238 |
-
/**
|
239 |
-
* Фильтр позволяет отфильтровать возвращаемое значение опции сайта.
|
240 |
-
*
|
241 |
-
* @since 4.0.9 - Добавлен
|
242 |
-
*
|
243 |
-
* @param mixed $option_value Значение опции
|
244 |
-
* @param string $option_name Имя опции
|
245 |
-
* @param mixed $default Значение опции по умолчанию
|
246 |
-
*/
|
247 |
-
|
248 |
-
return apply_filters( "wbcr/factory/option_{$option_name}", $option_value, $option_name, $default );
|
249 |
-
}
|
250 |
-
|
251 |
-
/**
|
252 |
-
* Позволяет обновить популярную опцию в базе данных. Если плагин установлен для сети (в режиме мультисайтов), то метод обновляет опцию
|
253 |
-
* только в таблице sitemeta, иначе в таблице options для текущего сайта.
|
254 |
-
*
|
255 |
-
* @param string $option_name Имя опции без префикса.
|
256 |
-
* @param mixed $option_value Значение опции. Может принимать массив или объект.
|
257 |
-
*/
|
258 |
-
public function updatePopulateOption( $option_name, $option_value ) {
|
259 |
-
if ( $this->isNetworkActive() ) {
|
260 |
-
$this->updateNetworkOption( $option_name, $option_value );
|
261 |
-
} else {
|
262 |
-
$this->updateOption( $option_name, $option_value );
|
263 |
-
}
|
264 |
-
}
|
265 |
-
|
266 |
-
/**
|
267 |
-
* Обновляет сетевую опцию в БД таблица sitemeta. После успешного обновления опции в базе данных, метод добавляет опцию в объектный кеш,
|
268 |
-
* чтобы плагин мог приступить к работе с этой опцией незамедлительно.
|
269 |
-
*
|
270 |
-
* @since 4.0.8 - Добавлен
|
271 |
-
*
|
272 |
-
* @param string $option_name Имя опции без префикса.
|
273 |
-
* @param mixed $option_value Значение опции. Может принимать массив или объект.
|
274 |
-
*/
|
275 |
-
public function updateNetworkOption( $option_name, $option_value ) {
|
276 |
-
$network_id = (int) get_current_network_id();
|
277 |
-
$cache_key = $network_id . ':' . $this->getPrefix() . $option_name;
|
278 |
-
wp_cache_set( $cache_key, $option_value, $this->getPrefix() . 'network_options' );
|
279 |
-
|
280 |
-
update_site_option( $this->getPrefix() . $option_name, $option_value );
|
281 |
-
|
282 |
-
/**
|
283 |
-
* Действие будет выполнено, когда сетевая опция будет обновлена.
|
284 |
-
*
|
285 |
-
* @since 4.0.8 - Добавлен
|
286 |
-
*
|
287 |
-
* @param string $option_name Имя опции без префикса.
|
288 |
-
* @param mixed $option_value Значение опции. Может принимать массив или объект.
|
289 |
-
*/
|
290 |
-
do_action( "wbcr/factory/update_network_option", $option_name, $option_value );
|
291 |
-
}
|
292 |
-
|
293 |
-
/**
|
294 |
-
* Обновляет опцию сайта в БД таблица options. После успешного обновления опции в базе данных, метод добавляет опцию в объектный кеш,
|
295 |
-
* чтобы плагин мог приступить к работе с этой опцией незамедлительно.
|
296 |
-
*
|
297 |
-
* @since 4.0.0 - Добавлен
|
298 |
-
* @since 4.0.8 - Полностью переделан
|
299 |
-
*
|
300 |
-
* @param string $option_name Имя опции без префикса.
|
301 |
-
* @param mixed $option_value Значение опции. Может принимать массив или объект.
|
302 |
-
*
|
303 |
-
* @return bool
|
304 |
-
*/
|
305 |
-
public function updateOption( $option_name, $option_value ) {
|
306 |
-
wp_cache_set( $this->getPrefix() . $option_name, $option_value, $this->getPrefix() . 'options' );
|
307 |
-
$result = update_option( $this->getPrefix() . $option_name, $option_value );
|
308 |
-
|
309 |
-
/**
|
310 |
-
* @since 4.0.8
|
311 |
-
*
|
312 |
-
* @param string $option_name
|
313 |
-
*
|
314 |
-
* @param mixed $option_value
|
315 |
-
*/
|
316 |
-
do_action( "wbcr/factory/update_option", $option_name, $option_value );
|
317 |
-
|
318 |
-
return $result;
|
319 |
-
}
|
320 |
-
|
321 |
-
/**
|
322 |
-
* Позволяет удалять популярную опцию в базе данных. Если плагин установлен для сети (в режиме мультисайтов), то метод удаляет опцию
|
323 |
-
* только в таблице sitemeta, иначе в таблице options для текущего сайта.
|
324 |
-
*
|
325 |
-
* @since 4.0.0 - Добавлен
|
326 |
-
*
|
327 |
-
* @param string $option_name Имя опции без префикса.
|
328 |
-
*/
|
329 |
-
public function deletePopulateOption( $option_name ) {
|
330 |
-
if ( $this->isNetworkActive() ) {
|
331 |
-
$this->deleteNetworkOption( $option_name );
|
332 |
-
} else {
|
333 |
-
$this->deleteOption( $option_name );
|
334 |
-
}
|
335 |
-
}
|
336 |
-
|
337 |
-
/**
|
338 |
-
* Удаляет сетевую.опцию в БД таблица sitemeta, а если опция есть в кеше, индивидуально удаляет опцию из кеша.
|
339 |
-
*
|
340 |
-
* @since 4.0.0 - Добавлен
|
341 |
-
*
|
342 |
-
* @param string $option_name Имя опции без префикса.
|
343 |
-
*
|
344 |
-
* @return bool Возвращает true, если опция удалена успешно, false в случае ошибки.
|
345 |
-
*/
|
346 |
-
public function deleteNetworkOption( $option_name ) {
|
347 |
-
$network_id = (int) get_current_network_id();
|
348 |
-
$cache_key = $network_id . ':' . $this->getPrefix() . $option_name;
|
349 |
-
$delete_cache = wp_cache_delete( $cache_key, $this->getPrefix() . 'network_options' );
|
350 |
-
|
351 |
-
$delete_opt1 = delete_site_option( $this->getPrefix() . $option_name );
|
352 |
-
|
353 |
-
return $delete_cache && $delete_opt1;
|
354 |
-
}
|
355 |
-
|
356 |
-
/**
|
357 |
-
* Удаляет опцию сайта в БД таблица options, а если опция есть в кеше, индивидуально удаляет опцию из кеша.
|
358 |
-
*
|
359 |
-
* @since 4.0.0 - Добавлен
|
360 |
-
*
|
361 |
-
* @param string $option_name Имя опции без префикса.
|
362 |
-
*
|
363 |
-
* @return bool Возвращает true, если опция удалена успешно, false в случае ошибки.
|
364 |
-
*/
|
365 |
-
public function deleteOption( $option_name ) {
|
366 |
-
$delete_cache = wp_cache_delete( $this->getPrefix() . $option_name, $this->getPrefix() . 'options' );
|
367 |
-
|
368 |
-
// todo: удалить, когда большая часть пользователей обновятся до современных релизов
|
369 |
-
$delete_opt1 = delete_option( $this->getPrefix() . $option_name . '_is_active' );
|
370 |
-
$delete_opt2 = delete_option( $this->getPrefix() . $option_name );
|
371 |
-
|
372 |
-
return $delete_cache && $delete_opt1 && $delete_opt2;
|
373 |
-
}
|
374 |
-
|
375 |
-
/**
|
376 |
-
* Сбрасывает объектный кеш. Может использоваться для перезагрузки опций плагина и Wordpress в целом.
|
377 |
-
*
|
378 |
-
* @since 4.0.0 - Добавлен
|
379 |
-
* @return bool Возвращает true, если кеш сброшен успешно, false в случае ошибки.
|
380 |
-
*/
|
381 |
-
public function flushOptionsCache() {
|
382 |
-
return wp_cache_flush();
|
383 |
-
}
|
384 |
-
|
385 |
-
/**
|
386 |
-
* Позволяет получить полное имя опции с префиксом. Может быть использовано в тех случаях, где нужно получить
|
387 |
-
* полное имя опции.
|
388 |
-
*
|
389 |
-
* @since 4.0.0 - Добавлен
|
390 |
-
*
|
391 |
-
* @param string $option_name Имя опции без префикса.
|
392 |
-
*
|
393 |
-
* @return null|string Возвращает имя опции с префиксом. Например wbcr_clearfy_{options_name}
|
394 |
-
*/
|
395 |
-
public function getOptionName( $option_name ) {
|
396 |
-
$option_name = trim( rtrim( $option_name ) );
|
397 |
-
if ( empty( $option_name ) || ! is_string( $option_name ) ) {
|
398 |
-
return null;
|
399 |
-
}
|
400 |
-
|
401 |
-
return $this->getPrefix() . $option_name;
|
402 |
-
}
|
403 |
-
|
404 |
-
/**
|
405 |
-
* Позволяет нормализовать данные. В некоторых методах этого трейта, ожидаются данные определенного типа, чтобы
|
406 |
-
* выполнить различные логические операции. Как раз в этом случае этот метод можно использовать, чтобы привести
|
407 |
-
* все сырые данные в строгий тип. Такое решение позволит избежать ошибок в работе программиста.
|
408 |
-
*
|
409 |
-
* @since 4.0.0 - Добавлен
|
410 |
-
*
|
411 |
-
* @param mixed $data Данные, которые нужно нормализовать.
|
412 |
-
*
|
413 |
-
* @return mixed Возвращает нормализованное значение.
|
414 |
-
* - Если передана строка "true" или "false" вернет булево значение.
|
415 |
-
* - Если передана строка "1" или "0" вернет число.
|
416 |
-
*/
|
417 |
-
public function normalizeValue( $data ) {
|
418 |
-
if ( is_string( $data ) ) {
|
419 |
-
$check_string = rtrim( trim( $data ) );
|
420 |
-
|
421 |
-
if ( $check_string == "1" || $check_string == "0" ) {
|
422 |
-
return intval( $data );
|
423 |
-
} else if ( $check_string === 'false' ) {
|
424 |
-
return false;
|
425 |
-
} else if ( $check_string === 'true' ) {
|
426 |
-
return true;
|
427 |
-
}
|
428 |
-
}
|
429 |
-
|
430 |
-
return $data;
|
431 |
-
}
|
432 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WBCR\Factory_460;
|
4 |
+
|
5 |
+
// Exit if accessed directly
|
6 |
+
use Exception;
|
7 |
+
|
8 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
+
exit;
|
10 |
+
}
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Трейт используется для расширения базового класса плагина Wbcr_Factory460_Base, позволяя работать с опциями плагина.
|
14 |
+
*
|
15 |
+
* Этот трейт является оберткой для Wordpress функций get_option, get_site_option, update_option, update_site_option,
|
16 |
+
* delete_option, delete_site_option. Основная задача была получать, обновлять, удалять опции без использования префиксов,
|
17 |
+
* чтобы класс выполнял эту работу за программиста. В дополнение, трейт содержит методы для полной выгрузки всех опций
|
18 |
+
* плагина, что позволяет при инициализации плагина автоматически выгрузить все существующие опции плагина в объектный
|
19 |
+
* кеш. Все опции, с которыми работает плагин, могут быть отфильтрованы.
|
20 |
+
*
|
21 |
+
* Документация по трейту: https://webcraftic.atlassian.net/wiki/spaces/FFD/pages/393805831/
|
22 |
+
* Документация по созданию плагина: https://webcraftic.atlassian.net/wiki/spaces/CNCFC/pages/327828
|
23 |
+
* Репозиторий: https://github.com/alexkovalevv
|
24 |
+
*
|
25 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, repo: https://github.com/alexkovalevv
|
26 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>, site: https://webcraftic.com
|
27 |
+
*
|
28 |
+
* @since 4.0.8 - Добавлен
|
29 |
+
* @package factory-core
|
30 |
+
*/
|
31 |
+
trait Options {
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Абстрактный метод, должен быть реализован в классе использующем этот трейт. Метод позволяет получить префикс
|
35 |
+
* плагина для формирования имен опций в базе данных Wordpress. У опций должно быть свое пространство имен,
|
36 |
+
* иначе может быть конфликт с другими плагинами или с сами ядром Wordpress.
|
37 |
+
*
|
38 |
+
* @since 4.0.8 - Добавлен
|
39 |
+
* @return string Возвращает префикс плагина. Пример: wbcr_clearfy_
|
40 |
+
*/
|
41 |
+
abstract public function getPrefix();
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Выгружает все опции плагина в объектный кеш. Плагин может получить любую свою опцию без запроса к базе данных.
|
45 |
+
* Метод ускоряет работу плагина, если опций очень много.
|
46 |
+
*
|
47 |
+
* Используется только один раз при инициализации плагина.
|
48 |
+
*
|
49 |
+
* @since 4.0.8 - Добавлен
|
50 |
+
*/
|
51 |
+
public function loadAllOptions() {
|
52 |
+
global $wpdb;
|
53 |
+
|
54 |
+
$is_option_loaded = wp_cache_get( $this->getPrefix() . 'all_options_loaded', $this->getPrefix() . 'options' );
|
55 |
+
|
56 |
+
if ( false === $is_option_loaded ) {
|
57 |
+
$result = $wpdb->get_results( "SELECT option_name, option_value FROM {$wpdb->options} WHERE option_name LIKE '{$this->getPrefix()}%'" );
|
58 |
+
|
59 |
+
$options = [];
|
60 |
+
|
61 |
+
if ( ! empty( $result ) ) {
|
62 |
+
wp_cache_add( $this->getPrefix() . 'all_options_loaded', 1, $this->getPrefix() . 'options' );
|
63 |
+
|
64 |
+
foreach ( $result as $option ) {
|
65 |
+
$value = maybe_unserialize( $option->option_value );
|
66 |
+
$value = $this->normalizeValue( $value );
|
67 |
+
|
68 |
+
wp_cache_add( $option->option_name, $value, $this->getPrefix() . 'options' );
|
69 |
+
$options[ $option->option_name ] = $value;
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Действие, которое будет выполнено, ко
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|