Disable admin notices individually - Version 1.3.0

Version Description

(27.05.2022) = * Added: Compatibility with Wordpress 6.0

Download this release

Release Info

Developer webtemyk
Plugin Icon 128x128 Disable admin notices individually
Version 1.3.0
Comparing to
See all releases

Code changes from version 1.2.9 to 1.3.0

Files changed (88) hide show
  1. admin/ajax/hide-notice.php +63 -63
  2. admin/ajax/restore-notice.php +49 -49
  3. admin/assets/css/general.css +50 -50
  4. admin/assets/css/general.css.map +0 -1
  5. admin/assets/css/notifications-panel.css +76 -76
  6. admin/assets/css/notifications-panel.css.map +0 -1
  7. admin/assets/css/notifications-panel.less +96 -96
  8. admin/assets/css/page.css +8 -8
  9. admin/assets/css/page.css.map +0 -1
  10. admin/assets/css/page.less +8 -8
  11. admin/assets/css/settings.css +219 -219
  12. admin/assets/css/settings.css.map +0 -1
  13. admin/assets/css/settings.less +266 -266
  14. admin/assets/img/hide-icon-white.svg +25 -25
  15. admin/assets/img/hide-icon.svg +25 -25
  16. admin/assets/js/notifications-panel.js +59 -59
  17. admin/assets/js/settings.js +69 -69
  18. admin/boot.php +115 -115
  19. admin/class-page-basic.php +42 -42
  20. admin/options.php +269 -269
  21. admin/pages/class-pages-edit-admin-bar.php +147 -147
  22. admin/pages/class-pages-edit-redirects.php +164 -164
  23. admin/pages/class-pages-license.php +102 -102
  24. admin/pages/class-pages-notices.php +91 -91
  25. admin/pages/class-pages-settings.php +148 -148
  26. admin/pages/index.php +1 -1
  27. clearfy.php +56 -56
  28. disable-admin-notices.php +39 -39
  29. includes/3rd-party/class-clearfy-plugin.php +78 -78
  30. includes/class-plugin.php +15 -19
  31. includes/classes/class-configurate-notices.php +380 -380
  32. includes/functions.php +121 -121
  33. languages/disable-admin-notices-es_ES.po +181 -181
  34. languages/disable-admin-notices-nl_BE.po +172 -172
  35. languages/disable-admin-notices-pt_BR.po +180 -180
  36. languages/disable-admin-notices-ru_RU.po +256 -256
  37. languages/disable-admin-notices.pot +223 -223
  38. libs/factory/adverts/boot.php +50 -50
  39. libs/factory/adverts/includes/class-base.php +319 -319
  40. libs/factory/adverts/includes/class-dashboard-widget.php +125 -125
  41. libs/factory/adverts/includes/class-rest-request.php +217 -217
  42. libs/factory/adverts/includes/index.php +2 -2
  43. libs/factory/adverts/index.php +2 -2
  44. libs/factory/adverts/langs/{wbcr_factory_adverts_131-ru_RU.mo → wbcr_factory_adverts_137-ru_RU.mo} +0 -0
  45. libs/factory/adverts/langs/{wbcr_factory_adverts_131-ru_RU.po → wbcr_factory_adverts_137-ru_RU.po} +83 -83
  46. libs/factory/bootstrap/assets/css-min/bootstrap.accordion.min.css +11 -11
  47. libs/factory/bootstrap/assets/css-min/bootstrap.blue.min.css +11 -11
  48. libs/factory/bootstrap/assets/css-min/bootstrap.coffee.min.css +11 -11
  49. libs/factory/bootstrap/assets/css-min/bootstrap.core.min.css +11 -11
  50. libs/factory/bootstrap/assets/css-min/bootstrap.datepicker.min.css +10 -10
  51. libs/factory/bootstrap/assets/css-min/bootstrap.ectoplasm.min.css +11 -11
  52. libs/factory/bootstrap/assets/css-min/bootstrap.form-group.min.css +11 -11
  53. libs/factory/bootstrap/assets/css-min/bootstrap.light.min.css +11 -11
  54. libs/factory/bootstrap/assets/css-min/bootstrap.midnight.min.css +11 -11
  55. libs/factory/bootstrap/assets/css-min/bootstrap.ocean.min.css +11 -11
  56. libs/factory/bootstrap/assets/css-min/bootstrap.separator.min.css +11 -11
  57. libs/factory/bootstrap/assets/css-min/bootstrap.sunrise.min.css +11 -11
  58. libs/factory/bootstrap/assets/css-min/control.checkbox.min.css +11 -11
  59. libs/factory/bootstrap/assets/css-min/control.dropdown.min.css +11 -11
  60. libs/factory/bootstrap/assets/css-min/control.multiple-textbox.min.css +11 -11
  61. libs/factory/bootstrap/assets/css-min/holder.more-link.min.css +11 -11
  62. libs/factory/bootstrap/assets/js-min/bootstrap.dropdown.min.js +10 -10
  63. libs/factory/bootstrap/assets/js-min/bootstrap.tooltip.min.js +9 -9
  64. libs/factory/bootstrap/assets/js-min/control.checkbox.min.js +10 -10
  65. libs/factory/bootstrap/assets/js-min/control.dropdown.min.js +10 -10
  66. libs/factory/bootstrap/assets/js-min/control.list.min.js +10 -10
  67. libs/factory/bootstrap/assets/js-min/control.multiple-textbox.min.js +10 -10
  68. libs/factory/bootstrap/boot.php +46 -46
  69. libs/factory/bootstrap/includes/functions.php +242 -242
  70. libs/factory/bootstrap/includes/index.php +1 -1
  71. libs/factory/bootstrap/index.php +1 -1
  72. libs/factory/bootstrap/package-lock.json +1810 -1810
  73. libs/factory/core/README.md +3 -3
  74. libs/factory/core/ajax/install-addons.php +227 -227
  75. libs/factory/core/assets/js/core-components.js +227 -227
  76. libs/factory/core/assets/js/core-general.js +99 -99
  77. libs/factory/core/boot.php +73 -73
  78. libs/factory/core/includes/activation/class-factory-activator.php +43 -43
  79. libs/factory/core/includes/activation/class-factory-update.php +39 -39
  80. libs/factory/core/includes/activation/index.php +1 -1
  81. libs/factory/core/includes/assets-managment/class-factory-assets-list.php +126 -126
  82. libs/factory/core/includes/assets-managment/class-factory-script-list.php +167 -167
  83. libs/factory/core/includes/assets-managment/class-factory-style-list.php +86 -86
  84. libs/factory/core/includes/assets-managment/index.php +1 -1
  85. libs/factory/core/includes/class-check-compatibility.php +121 -121
  86. libs/factory/core/includes/class-factory-migrations.php +541 -541
  87. libs/factory/core/includes/class-factory-notices.php +296 -296
  88. 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( 'wbcr_factory_pages_453_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 );
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\Factory_Templates_107\Pages\PageBase {
23
-
24
- /**
25
- * Requests assets (js and css) for the page.
26
- *
27
- * @param Wbcr_Factory454_ScriptList $scripts
28
- * @param Wbcr_Factory454_StyleList $styles
29
- *
30
- * @return void
31
- * @see Wbcr_FactoryPages453_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'>&nbsp;</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'>&nbsp;</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 Wbcr_FactoryPages453_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_FactoryForms451_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
-
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 Wbcr_Factory454_ScriptList $scripts
67
- * @param Wbcr_Factory454_StyleList $styles
68
- *
69
- * @return void
70
- * @see Wbcr_FactoryPages453_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
- }
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 Wbcr_Factory454_ScriptList $scripts
65
- * @param Wbcr_Factory454_StyleList $styles
66
- *
67
- * @return void
68
- * @see Wbcr_FactoryPages453_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
- }
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\Factory_Templates_107\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_Factory454_Plugin $plugin
40
- *
41
- * @author Alexander Kovalev <alex.kovalevv@gmail.com>
42
- *
43
- */
44
- public function __construct( Wbcr_Factory454_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
  }
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 Wbcr_Factory454_ScriptList $scripts
63
- * @param Wbcr_Factory454_StyleList $styles
64
- *
65
- * @return void
66
- * @see Wbcr_FactoryPages453_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
- }
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 Wbcr_Factory454_Plugin $plugin
70
- */
71
- public function __construct( Wbcr_Factory454_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_Factory454_ScriptList $scripts
92
- * @param Wbcr_Factory454_StyleList $styles
93
- *
94
- * @return void
95
- * @see Wbcr_FactoryPages453_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_453')
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.2.9' );
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.2.9
8
  * Text Domain: disable-admin-notices
9
  * Domain Path: /languages/
10
  * Author URI: https://webcraftic.com
11
- * Framework Version: FACTORY_454_VERSION
12
  */
13
 
14
  /**
@@ -45,39 +45,39 @@ if ( ! defined( 'ABSPATH' ) ) {
45
  * -----------------------------------------------------------------------------
46
  */
47
 
48
- require_once( dirname( __FILE__ ) . '/libs/factory/core/includes/class-factory-requirements.php' );
49
 
50
  // @formatter:off
51
- $wdan_plugin_info = array(
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' => array(
58
  'url' => 'https://clearfy.pro/',
59
- 'pages_map' => array(
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' => array(
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' => array(
75
  'maybe_rollback' => true,
76
- 'rollback_settings' => array(
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' => array(
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' => array(
96
- array( 'libs/factory/bootstrap', 'factory_bootstrap_455', 'admin' ),
97
- array( 'libs/factory/forms', 'factory_forms_451', 'admin' ),
98
- array( 'libs/factory/pages', 'factory_pages_453', 'admin' ),
99
- array( 'libs/factory/templates', 'factory_templates_107', 'all' ),
100
- array( 'libs/factory/freemius', 'factory_freemius_141', 'all' ),
101
- array( 'libs/factory/adverts', 'factory_adverts_131', 'admin' ),
102
- //array('libs/factory/logger', 'factory_logger_119', 'all')
103
- )
104
- );
105
-
106
- $wdan_compatibility = new Wbcr_Factory454_Requirements( __FILE__, array_merge( $wdan_plugin_info, array(
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( 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, array(
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
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\Factory_Adverts_131\Base;
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit;
16
  }
17
 
18
- class WDN_Plugin extends Wbcr_Factory454_Plugin {
19
 
20
  /**
21
- * @var Wbcr_Factory454_Plugin
22
  */
23
  private static $app;
24
- private $plugin_data;
25
 
26
 
27
  /**
@@ -44,7 +44,7 @@ class WDN_Plugin extends Wbcr_Factory454_Plugin {
44
  }
45
 
46
  /**
47
- * @return Wbcr_Factory454_Plugin
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( 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,7 +83,7 @@ class WDN_Plugin extends Wbcr_Factory454_Plugin {
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,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\Factory_Templates_107\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
  }
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\Factory_Adverts_131\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_131_LOADED') || (defined('FACTORY_ADVERTS_BLOCK') && FACTORY_ADVERTS_BLOCK) ) {
24
- return;
25
- }
26
-
27
- # Устанавливаем константу, что модуль уже загружен
28
- define('FACTORY_ADVERTS_131_LOADED', true);
29
-
30
- # Устанавливаем версию модуля
31
- define('FACTORY_ADVERTS_131_VERSION', '1.3.1');
32
-
33
- # Регистрируем тектовый домен, для интернализации интерфейса модуля
34
- load_plugin_textdomain('wbcr_factory_adverts_131', false, dirname(plugin_basename(__FILE__)) . '/langs');
35
-
36
- # Устанавливаем директорию модуля
37
- define('FACTORY_ADVERTS_131_DIR', dirname(__FILE__));
38
-
39
- # Устанавливаем url модуля
40
- define('FACTORY_ADVERTS_131_URL', plugins_url(null, __FILE__));
41
-
42
- require_once(FACTORY_ADVERTS_131_DIR . '/includes/class-rest-request.php');
43
- require_once(FACTORY_ADVERTS_131_DIR . '/includes/class-base.php');
44
-
45
- /**
46
- * @param Wbcr_Factory454_Plugin $plugin
47
- */
48
- add_action('wbcr_factory_adverts_131_plugin_created', function ($plugin) {
49
- $plugin->set_adverts_manager("WBCR\Factory_Adverts_131\Base");
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\Factory_Adverts_131;
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_Factory454_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_131\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_Factory454_Plugin $plugin
86
- */
87
- public function __construct( \Wbcr_Factory454_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_131_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
- }
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\Factory_Adverts_131;
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_Factory454_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_Factory454_Plugin $plugin
50
- * @param string $content
51
- */
52
- public function __construct( \Wbcr_Factory454_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
- }
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\Factory_Adverts_131;
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_Factory454_Plugin
69
- */
70
- private $plugin;
71
-
72
-
73
- /**
74
- * Request constructor.
75
- *
76
- * Variable initialization.
77
- *
78
- * @param \Wbcr_Factory454_Plugin $plugin_name
79
- * @since 1.0.0 Added
80
- *
81
- */
82
- public function __construct(\Wbcr_Factory454_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
- }
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-455 .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-455 .factory-accordion>h3{border-bottom:1px solid #DDD;cursor:pointer;padding:8px 15px;margin:0}.factory-bootstrap-455 .factory-accordion>div{display:none;margin:0;border-bottom:1px solid #DDD}.factory-bootstrap-455 .factory-accordion-item{display:none}.factory-bootstrap-455 .inner-factory-accordion-item{padding:10px 0}.factory-bootstrap-455 .factory-accordion>h3.active:hover{cursor:default}
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-455 .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-455 .btn-primary:focus,.factory-bootstrap-455 .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-455 .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-455 .btn-primary:disabled,.factory-bootstrap-455 .btn-primary[disabled]{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.factory-bootstrap-455 .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-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{background-color:#e1a948;border-color:#d39323}
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-455 .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-455 .btn-primary:focus,.factory-bootstrap-455 .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-455 .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-455 .btn-primary:disabled,.factory-bootstrap-455 .btn-primary[disabled]{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.factory-bootstrap-455 .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-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{background-color:#c7a589;border-color:#b78a66}
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-455 .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-455 .btn-primary:focus,.factory-bootstrap-455 .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-455 .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-455 .btn-primary:disabled,.factory-bootstrap-455 .btn-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.factory-bootstrap-455 .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-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{background-color:#a3b745;border-color:#839237}
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-455 .factory-form-group .factory-legend{padding:9px 12px;background-color:#f9f9f9}.factory-bootstrap-455 .factory-form-group .factory-title{font-weight:700;font-size:14px;line-height:14px;color:#555;margin:0}.factory-bootstrap-455 .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-455 .factory-form-group .factory-hint-icon.factory-hint-icon-green{background:#8bc34a}.factory-bootstrap-455 .factory-form-group .factory-hint-icon.factory-hint-icon-grey{background:#9e9e9e}.factory-bootstrap-455 .factory-form-group .factory-hint-icon.factory-hint-icon-red{background:#E91E63}.factory-bootstrap-455 .factory-form-group .factory-hint{margin:0;font-size:12px;line-height:16px;margin-top:6px}.factory-bootstrap-455 .factory-form-group+.factory-form-group{margin-top:30px}.factory-bootstrap-455 .factory-form-group legend+.control-group{margin-top:0}
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-455 .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-455 .btn-primary:focus,.factory-bootstrap-455 .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-455 .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-455 .btn-primary:disabled,.factory-bootstrap-455 .btn-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.factory-bootstrap-455 .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-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{background-color:#04a4cc;border-color:#037c9a}
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-455 .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-455 .btn-primary:focus,.factory-bootstrap-455 .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-455 .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-455 .btn-primary:disabled,.factory-bootstrap-455 .btn-primary[disabled]{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.factory-bootstrap-455 .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-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{background-color:#e14d43;border-color:#d02a21}
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-455 .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-455 .btn-primary:focus,.factory-bootstrap-455 .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-455 .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-455 .btn-primary:disabled,.factory-bootstrap-455 .btn-primary[disabled]{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.factory-bootstrap-455 .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-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{background-color:#9ebaa0;border-color:#80a583}
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-455 .factory-separator{border-bottom:1px solid #f9f9f9;border-top:1px solid #d1d1d1;margin-bottom:25px}
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-455 .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-455 .btn-primary:focus,.factory-bootstrap-455 .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-455 .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-455 .btn-primary:disabled,.factory-bootstrap-455 .btn-primary[disabled]{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.factory-bootstrap-455 .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-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{background-color:#dd823b;border-color:#c36822}
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-455 .factory-buttons-way{float:right;position:relative;top:-25px;left:5px;border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-455 .factory-checkbox-disabled button,.factory-bootstrap-455 .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-455 .factory-buttons-way{border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-455 .factory-buttons-way button{padding-left:10px;padding-right:10px}.factory-bootstrap-455 .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-455 .factory-checkbox-tumbler-hint{margin-top:5px}.factory-bootstrap-455 .factory-checkbox-tumbler-hint .factory-tumbler-content{display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-455 .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-455 .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-455 .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-455 .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-455 .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-455 .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-455 .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}
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-455 .factory-dropdown.factory-buttons-way .fa{margin-right:6px;position:relative}.factory-bootstrap-455 .factory-dropdown.factory-buttons-way{border:0;border-radius:0}.factory-bootstrap-455 .factory-hints .factory-hint{margin-top:5px;display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-455 .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-455 .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-455 .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-455 .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-455 .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-455 .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-455 .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-455 .factory-dropdown.factory-ddslick-way .dd-select{background-color:#fff!important}.factory-bootstrap-455 .factory-dropdown.factory-ddslick-way label{margin-bottom:1px}.factory-bootstrap-455 .factory-dropdown.factory-ddslick-way .dd-option,.factory-bootstrap-455 .factory-dropdown.factory-ddslick-way .dd-selected{padding:8px 12px 8px 11px!important}
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-455 .factory-mtextbox-item{position:relative;margin-bottom:5px}.factory-bootstrap-455 .factory-mtextbox-item input,.factory-mtextbox-remove-item{display:inline-block}.factory-bootstrap-455 .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-455 .factory-mtextbox-item .factory-mtextbox-remove-item:focus,.factory-bootstrap-455 .factory-mtextbox-item .factory-mtextbox-remove-item:hover{box-shadow:none;outline:0}.factory-bootstrap-455 .factory-mtextbox-add-item{display:block;margin-top:10px}
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-455 .factory-more-link-content{border-top:1px dashed #DDD;padding-top:25px;width:100%;padding-right:20px;position:relative}.factory-bootstrap-455 .factory-tab .factory-more-link-show{display:inline-block;text-decoration:none;border-bottom:1px dotted #21759b;position:relative}.factory-bootstrap-455 .factory-tab .factory-more-link-show:hover{border-color:#d54e21}.factory-bootstrap-455 .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-455 .factory-tab .factory-more-link-hide:hover{color:#999}
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.factoryBootstrap455_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.factoryBootstrap455_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);
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.factoryBootstrap455_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.factoryBootstrap455_checkboxControl.Constructor=b,a(function(){a(".factory-bootstrap-455 .factory-checkbox.factory-buttons-way").factoryBootstrap455_checkboxControl(),a(".factory-bootstrap-455 .factory-checkbox").not(".factory-buttons-way").click(function(){a(this).prop("checked")?a(this).val(1):a(this).val(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){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.factoryBootstrap455_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.factoryBootstrap455_dropdownControl.Constructor=b,a(function(){a(".factory-bootstrap-455 .factory-dropdown").factoryBootstrap455_dropdownControl()})}(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){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.factoryBootstrap455_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.factoryBootstrap455_listControl.Constructor=b,a(function(){a(".factory-bootstrap-455 .factory-list").factoryBootstrap455_listControl()})}(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){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.factoryBootstrap455_MultipleTextboxControl=function(){return this.each(function(){new b(this)})},a(function(){a(".factory-bootstrap-455 .factory-multiple-textbox-group").factoryBootstrap455_MultipleTextboxControl()})}(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(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('FACTORY_BOOTSTRAP_455_LOADED') ) {
23
- return;
24
- }
25
-
26
- define('FACTORY_BOOTSTRAP_455_VERSION', '4.5.5');
27
- define('FACTORY_BOOTSTRAP_455_LOADED', true);
28
-
29
- if( !defined('FACTORY_FLAT_ADMIN') ) {
30
- define('FACTORY_FLAT_ADMIN', true);
31
- }
32
-
33
- define('FACTORY_BOOTSTRAP_455_DIR', dirname(__FILE__));
34
- define('FACTORY_BOOTSTRAP_455_URL', plugins_url(null, __FILE__));
35
-
36
- require_once(FACTORY_BOOTSTRAP_455_DIR . '/includes/functions.php');
37
-
38
- /**
39
- * @param Wbcr_Factory454_Plugin $plugin
40
- */
41
- add_action('wbcr_factory_bootstrap_455_plugin_created', function ($plugin) {
42
- $manager = new Wbcr_FactoryBootstrap455_Manager($plugin);
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 Wbcr_FactoryBootstrap455_Manager {
24
-
25
- /**
26
- * A plugin for which the manager was created.
27
- *
28
- * @since 3.2.0
29
- * @var Wbcr_Factory454_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_Factory454_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_454_bootstrap_enqueue_scripts', $hook);
119
- do_action('wbcr_factory_454_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_455_DIR . '/assets/cache/';
165
- $cache_dir_url = FACTORY_BOOTSTRAP_455_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_455_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_455_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_455_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
- }
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 wfactory_454_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_454'), __('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_454')]);
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_454')]);
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_454' ), 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_454')]);
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_454_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_454')], 403);
113
- }
114
-
115
- if( empty($component_name) ) {
116
- wp_send_json_error(['error_message' => __('Required attribute [component_name] is empty.', 'wbcr_factory_454')]);
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_454_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
  }
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-454-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-454-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-454-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_454.hooks.run('core/components/pre_update', [$this, data]);
58
-
59
- self.sendRequest(data, function(response) {
60
- if( !response || !response.success ) {
61
- $.wfactory_454.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_454.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_454.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_454.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_454.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_454.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-454-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_454.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_454.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_454.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);
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( !$.wfactory_454 ) {
12
- $.wfactory_454 = {};
13
- }
14
-
15
- $.wfactory_454.filters = $.wfactory_454.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_454.hooks = $.wfactory_454.hooks || {
83
-
84
- /**
85
- * Applies filters to a given input value.
86
- */
87
- run: function(filterName, args) {
88
- $.wfactory_454.filters.run(filterName, args);
89
- },
90
-
91
- /**
92
- * Registers a new filter.
93
- */
94
- add: function(filterName, callback, priority) {
95
- $.wfactory_454.filters.add(filterName, callback, priority);
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('FACTORY_454_LOADED') ) {
18
- return;
19
- }
20
-
21
- define('FACTORY_454_LOADED', true);
22
-
23
- define('FACTORY_454_VERSION', '4.5.4');
24
-
25
- define('FACTORY_454_DIR', dirname(__FILE__));
26
- define('FACTORY_454_URL', plugins_url(null, __FILE__));
27
-
28
- load_plugin_textdomain('wbcr_factory_454', false, dirname(plugin_basename(__FILE__)) . '/langs');
29
-
30
- #comp merge
31
- require_once(FACTORY_454_DIR . '/includes/functions.php');
32
-
33
- require_once(FACTORY_454_DIR . '/includes/entities/class-factory-paths.php');
34
- require_once(FACTORY_454_DIR . '/includes/entities/class-factory-support.php');
35
-
36
- require_once(FACTORY_454_DIR . '/includes/class-factory-requests.php');
37
- require_once(FACTORY_454_DIR . '/includes/class-factory-options.php');
38
- require_once(FACTORY_454_DIR . '/includes/class-factory-plugin-base.php');
39
- require_once(FACTORY_454_DIR . '/includes/class-factory-migrations.php');
40
- require_once(FACTORY_454_DIR . '/includes/class-factory-notices.php');
41
-
42
- // ASSETS
43
- require_once(FACTORY_454_DIR . '/includes/assets-managment/class-factory-assets-list.php');
44
- require_once(FACTORY_454_DIR . '/includes/assets-managment/class-factory-script-list.php');
45
- require_once(FACTORY_454_DIR . '/includes/assets-managment/class-factory-style-list.php');
46
-
47
- // PREMIUM
48
- require_once(FACTORY_454_DIR . '/includes/premium/class-factory-license-interface.php');
49
- require_once(FACTORY_454_DIR . '/includes/premium/class-factory-provider-abstract.php');
50
- require_once(FACTORY_454_DIR . '/includes/premium/class-factory-manager.php');
51
-
52
- // UPDATES
53
- require_once(FACTORY_454_DIR . '/includes/updates/repositories/class-factory-repository-abstract.php');
54
- require_once(FACTORY_454_DIR . '/includes/updates/repositories/class-factory-wordpress.php');
55
- require_once(FACTORY_454_DIR . '/includes/updates/repositories/class-factory-github.php');
56
- require_once(FACTORY_454_DIR . '/includes/updates/class-factory-upgrader.php');
57
- require_once(FACTORY_454_DIR . '/includes/updates/class-factory-premium-upgrader.php');
58
-
59
- require_once(FACTORY_454_DIR . '/includes/class-factory-plugin-abstract.php');
60
-
61
- require_once(FACTORY_454_DIR . '/includes/activation/class-factory-activator.php');
62
- require_once(FACTORY_454_DIR . '/includes/activation/class-factory-update.php');
63
- #endcomp
64
-
65
- add_action('admin_enqueue_scripts', function () {
66
- wp_enqueue_script('wfactory-454-core-general', FACTORY_454_URL . '/assets/js/core-general.js', [
67
- 'jquery'
68
- ], FACTORY_454_VERSION);
69
- wp_enqueue_script('wfactory-454-core-components', FACTORY_454_URL . '/assets/js/core-components.js', [
70
- 'jquery',
71
- 'wfactory-454-core-general'
72
- ], FACTORY_454_VERSION);
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 Wbcr_Factory454_Activator {
23
-
24
- /**
25
- * Curent plugin.
26
- *
27
- * @var Wbcr_Factory454_Plugin
28
- */
29
- public $plugin;
30
-
31
- public function __construct( Wbcr_Factory454_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
- }
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 Wbcr_Factory454_Update {
24
-
25
- /**
26
- * Current plugin
27
- *
28
- * @var Wbcr_Factory454_Plugin
29
- */
30
- var $plugin;
31
-
32
- public function __construct( Wbcr_Factory454_Plugin $plugin ) {
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 Wbcr_Factory454_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_Factory454_Plugin
33
- */
34
- protected $plugin;
35
-
36
- /**
37
- * @param Wbcr_Factory454_Plugin $plugin
38
- * @param bool $defaultIsFooter
39
- */
40
- public function __construct( Wbcr_Factory454_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
-
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 Wbcr_Factory454_ScriptList extends Wbcr_Factory454_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_Factory454_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
-
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 Wbcr_Factory454_StyleList extends Wbcr_Factory454_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
-
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.', 'wbcr_factory_templates_107' ), $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_454' ), $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_454' ), $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">' . 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\Factory_454;
4
-
5
- use Exception;
6
- use Wbcr_Factory454_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_Factory454_Plugin $plugin
39
- *
40
- * @throws Exception
41
- */
42
- public function __construct( Wbcr_Factory454_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_redirect( 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_redirect( 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 = 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_454' ) . "</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_454' ) . '</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 = add_query_arg( 'wbcr_factory_test_migration', 1 );
164
-
165
- $notice_text = __( "Plugin activated:", "wbcr_factory_454" ) . ' ' . date( "Y-m-d H:i:s", $this->get_plugin_activated_time() ) . "<br>";
166
-
167
- $notice_text .= __( "Old plugin version (debug):", "wbcr_factory_454" ) . ' ' . $this->get_old_plugin_version() . "<br>";
168
- $notice_text .= __( "Current plugin version:", "wbcr_factory_454" ) . ' ' . $this->get_current_plugin_version() . "<br>";
169
- $notice_text .= __( "Need migration:", "wbcr_factory_454" ) . ' ' . ( $this->need_migration() ? "true" : "false" ) . "<br><br>";
170
- $notice_text .= "<a href='{$migrate_url}' class='button button-default'>" . __( "Migrate now", "wbcr_factory_454" ) . "</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_454' ) . '</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_454' ) );
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\Factory_454;
4
-
5
- use Wbcr_Factory454_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_Factory454_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_Factory454_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_454
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\Factory_454;
4
-
5
- // Exit if accessed directly
6
- use Exception;
7
-
8
- if ( ! defined( 'ABSPATH' ) ) {
9
- exit;
10
- }
11
-
12
- /**
13
- * Трейт используется для расширения базового класса плагина Wbcr_Factory454_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
- * Действие, которое будет выполнено, когда все опции плагина будут выгружены.
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
+ * Действие, которое будет выполнено, ко