Disable admin notices individually - Version 1.0.5

Version Description

  • Fixed: Prefix bug
Download this release

Release Info

Developer webcraftic
Plugin Icon 128x128 Disable admin notices individually
Version 1.0.5
Comparing to
See all releases

Code changes from version 1.0.2 to 1.0.5

Files changed (122) hide show
  1. admin/ajax/hide-notice.php +12 -13
  2. admin/ajax/index.php +0 -0
  3. admin/ajax/restore-notice.php +44 -0
  4. admin/assets/css/index.php +0 -0
  5. admin/assets/css/notifications-panel.css +17 -1
  6. admin/assets/css/notifications-panel.less +20 -2
  7. admin/assets/index.php +0 -0
  8. admin/assets/js/general.js +0 -203
  9. admin/assets/js/index.php +0 -0
  10. admin/assets/js/notifications-panel.js +44 -0
  11. admin/boot.php +8 -13
  12. admin/options.php +15 -14
  13. admin/pages/index.php +0 -0
  14. admin/pages/more-features.php +6 -2
  15. admin/pages/notices.php +22 -21
  16. disable-admin-notices.php +25 -52
  17. includes/class.plugin.php +135 -0
  18. includes/classes/class.configurate-notices.php +102 -34
  19. includes/classes/index.php +0 -0
  20. includes/index.php +0 -0
  21. languages/disable-admin-notices-ru_RU.mo +0 -0
  22. languages/disable-admin-notices-ru_RU.po +422 -419
  23. languages/index.php +0 -0
  24. libs/factory/bootstrap/assets/css-min/bootstrap.accordion.min.css +11 -0
  25. libs/factory/bootstrap/assets/css-min/bootstrap.blue.min.css +11 -0
  26. libs/factory/bootstrap/assets/css-min/bootstrap.coffee.min.css +11 -0
  27. libs/factory/bootstrap/assets/css-min/bootstrap.core.min.css +25 -0
  28. libs/factory/bootstrap/assets/css-min/bootstrap.datepicker.min.css +17 -0
  29. libs/factory/bootstrap/assets/css-min/bootstrap.ectoplasm.min.css +11 -0
  30. libs/factory/bootstrap/assets/css-min/bootstrap.form-group.min.css +11 -0
  31. libs/factory/bootstrap/assets/css-min/bootstrap.light.min.css +11 -0
  32. libs/factory/bootstrap/assets/css-min/bootstrap.midnight.min.css +11 -0
  33. libs/factory/bootstrap/assets/css-min/bootstrap.ocean.min.css +11 -0
  34. libs/factory/bootstrap/assets/css-min/bootstrap.separator.min.css +11 -0
  35. libs/factory/bootstrap/assets/css-min/bootstrap.sunrise.min.css +11 -0
  36. libs/factory/bootstrap/assets/css-min/control.checkbox.min.css +11 -0
  37. libs/factory/bootstrap/assets/css-min/control.dropdown.min.css +11 -0
  38. libs/factory/bootstrap/assets/css-min/control.multiple-textbox.min.css +11 -0
  39. libs/factory/bootstrap/assets/css-min/holder.more-link.min.css +11 -0
  40. libs/factory/bootstrap/assets/flat/css/bootstrap.core.css +0 -7810
  41. libs/factory/bootstrap/assets/flat/css/bootstrap.datetimepicker.css +0 -432
  42. libs/factory/bootstrap/assets/flat/css/bootstrap.form-group.css +0 -59
  43. libs/factory/bootstrap/assets/flat/css/bootstrap.light.css +0 -48
  44. libs/factory/bootstrap/assets/flat/css/bootstrap.separator.css +0 -8
  45. libs/factory/bootstrap/assets/flat/css/control.checkbox.css +0 -102
  46. libs/factory/bootstrap/assets/flat/css/control.dropdown.css +0 -92
  47. libs/factory/bootstrap/assets/flat/css/control.multiple-textbox.css +0 -37
  48. libs/factory/bootstrap/assets/flat/css/holder.more-link.css +0 -32
  49. libs/factory/bootstrap/assets/js-min/bootstrap.dropdown.min.js +10 -0
  50. libs/factory/bootstrap/assets/js-min/bootstrap.tooltip.min.js +10 -0
  51. libs/factory/bootstrap/assets/js-min/control.checkbox.min.js +10 -0
  52. libs/factory/bootstrap/assets/js-min/control.dropdown.min.js +10 -0
  53. libs/factory/bootstrap/assets/js-min/control.list.min.js +10 -0
  54. libs/factory/bootstrap/assets/js-min/control.multiple-textbox.min.js +10 -0
  55. libs/factory/bootstrap/assets/js/bootstrap.datetimepicker.js +0 -2746
  56. libs/factory/bootstrap/assets/js/bootstrap.dropdown.js +0 -143
  57. libs/factory/bootstrap/assets/js/bootstrap.tooltip.js +0 -455
  58. libs/factory/bootstrap/assets/js/control.checkbox.js +0 -290
  59. libs/factory/bootstrap/assets/js/control.dropdown.js +0 -355
  60. libs/factory/bootstrap/assets/js/control.list.js +0 -141
  61. libs/factory/bootstrap/assets/js/control.multiple-textbox.js +0 -43
  62. libs/factory/bootstrap/boot.php +14 -8
  63. libs/factory/bootstrap/includes/functions.php +248 -254
  64. libs/factory/bootstrap/includes/load-scripts.php +0 -91
  65. libs/factory/bootstrap/includes/load-styles.php +0 -90
  66. libs/factory/clearfy/boot.php +17 -12
  67. libs/factory/clearfy/includes/class.configurate.php +60 -26
  68. libs/factory/clearfy/includes/class.helpers.php +163 -0
  69. libs/factory/clearfy/includes/functions.php +0 -69
  70. libs/factory/clearfy/langs/{factory_clearfy_102-fr-FR.mo → wbcr_factory_clearfy_200-fr-FR.mo} +0 -0
  71. libs/factory/clearfy/langs/{factory_clearfy_102-fr-FR.po → wbcr_factory_clearfy_200-fr-FR.po} +0 -0
  72. libs/factory/clearfy/langs/{factory_clearfy_102-ru_RU.mo → wbcr_factory_clearfy_200-ru_RU.mo} +0 -0
  73. libs/factory/clearfy/langs/{factory_clearfy_102-ru_RU.po → wbcr_factory_clearfy_200-ru_RU.po} +0 -0
  74. libs/factory/clearfy/pages/more-features.php +95 -92
  75. libs/factory/core/boot.php +23 -15
  76. libs/factory/core/includes/activation/activator.class.php +186 -148
  77. libs/factory/core/includes/activation/update.class.php +36 -28
  78. libs/factory/core/includes/assets-managment/assets-list.class.php +138 -122
  79. libs/factory/core/includes/assets-managment/script-list.class.php +67 -54
  80. libs/factory/core/includes/assets-managment/style-list.class.php +32 -24
  81. libs/factory/core/includes/base.class.php +378 -0
  82. libs/factory/core/includes/functions.php +56 -283
  83. libs/factory/core/includes/plugin.class.php +725 -626
  84. libs/factory/core/includes/request.class.php +126 -0
  85. libs/factory/forms/boot.php +105 -105
  86. libs/factory/forms/controls/checkbox.php +136 -127
  87. libs/factory/forms/controls/color-and-opacity.php +86 -65
  88. libs/factory/forms/controls/color.php +46 -34
  89. libs/factory/forms/controls/customs/html.php +29 -21
  90. libs/factory/forms/controls/customs/separator.php +33 -25
  91. libs/factory/forms/controls/datepicker-range.php +72 -62
  92. libs/factory/forms/controls/dropdown-and-colors.php +70 -61
  93. libs/factory/forms/controls/dropdown.php +313 -304
  94. libs/factory/forms/controls/font.php +229 -214
  95. libs/factory/forms/controls/google-font.php +151 -122
  96. libs/factory/forms/controls/gradient.php +68 -60
  97. libs/factory/forms/controls/hidden.php +34 -25
  98. libs/factory/forms/controls/holders/accordion-item.php +61 -51
  99. libs/factory/forms/controls/holders/accordion.php +56 -48
  100. libs/factory/forms/controls/holders/columns.php +98 -84
  101. libs/factory/forms/controls/holders/control-group-item.php +74 -62
  102. libs/factory/forms/controls/holders/control-group.php +96 -79
  103. libs/factory/forms/controls/holders/div.php +63 -50
  104. libs/factory/forms/controls/holders/form-group.php +68 -59
  105. libs/factory/forms/controls/holders/more-link.php +74 -61
  106. libs/factory/forms/controls/holders/tab-item.php +67 -56
  107. libs/factory/forms/controls/holders/tab.php +138 -111
  108. libs/factory/forms/controls/integer.php +119 -106
  109. libs/factory/forms/controls/list.php +221 -202
  110. libs/factory/forms/controls/multiple-textbox.php +94 -82
  111. libs/factory/forms/controls/paddings-editor.php +67 -49
  112. libs/factory/forms/controls/pattern.php +138 -123
  113. libs/factory/forms/controls/radio-colors.php +73 -68
  114. libs/factory/forms/controls/radio.php +61 -56
  115. libs/factory/forms/controls/textarea.php +58 -47
  116. libs/factory/forms/controls/textbox.php +60 -51
  117. libs/factory/forms/controls/url.php +27 -17
  118. libs/factory/forms/controls/wp-editor.php +68 -56
  119. libs/factory/forms/helpers.php +0 -101
  120. libs/factory/forms/includes/complex-control.class.php +131 -115
  121. libs/factory/forms/includes/control-holder.class.php +172 -151
  122. libs/factory/forms/includes/control.class.php +143 -203
admin/ajax/hide-notice.php CHANGED
@@ -6,13 +6,16 @@
6
  * @version 1.0
7
  */
8
 
9
- function wbcr_clearfy_ajax_hide_notices()
10
- {
11
- global $wbcr_dan_plugin;
 
12
 
13
- check_ajax_referer($wbcr_dan_plugin->pluginName . '_ajax_hide_notices_nonce', 'security');
 
 
14
 
15
- if( !current_user_can('manage_options') ) {
16
  echo json_encode(array('error' => __('You don\'t have enough capability to edit this information.', 'disable-admin-notices')));
17
  exit;
18
  }
@@ -22,11 +25,7 @@
22
  : null;
23
 
24
  $notice_html = isset($_POST['notice_html'])
25
- ? wp_kses($_POST['notice_html'], array(
26
- 'a' => array(
27
- 'href' => array()
28
- )
29
- ))
30
  : null;
31
 
32
  if( empty($notice_id) ) {
@@ -34,7 +33,7 @@
34
  exit;
35
  }
36
 
37
- $get_hidden_notices = get_option($wbcr_dan_plugin->pluginName . '_hidden_notices');
38
 
39
  if( !is_array($get_hidden_notices) ) {
40
  $get_hidden_notices = array();
@@ -42,10 +41,10 @@
42
 
43
  $get_hidden_notices[$notice_id] = rtrim(trim($notice_html));
44
 
45
- update_option($wbcr_dan_plugin->pluginName . '_hidden_notices', $get_hidden_notices);
46
 
47
  echo json_encode(array('success' => __('Success', 'disable-admin-notices')));
48
  exit;
49
  }
50
 
51
- add_action('wp_ajax_wbcr_clearfy_hide_notices', 'wbcr_clearfy_ajax_hide_notices');
6
  * @version 1.0
7
  */
8
 
9
+ // Exit if accessed directly
10
+ if( !defined('ABSPATH') ) {
11
+ exit;
12
+ }
13
 
14
+ function wbcr_dan_ajax_hide_notices()
15
+ {
16
+ check_ajax_referer(WDN_Plugin::app()->getPluginName() . '_ajax_hide_notices_nonce', 'security');
17
 
18
+ if( !current_user_can('update_plugins') ) {
19
  echo json_encode(array('error' => __('You don\'t have enough capability to edit this information.', 'disable-admin-notices')));
20
  exit;
21
  }
25
  : null;
26
 
27
  $notice_html = isset($_POST['notice_html'])
28
+ ? wp_kses($_POST['notice_html'], array())
 
 
 
 
29
  : null;
30
 
31
  if( empty($notice_id) ) {
33
  exit;
34
  }
35
 
36
+ $get_hidden_notices = WDN_Plugin::app()->getOption('hidden_notices');
37
 
38
  if( !is_array($get_hidden_notices) ) {
39
  $get_hidden_notices = array();
41
 
42
  $get_hidden_notices[$notice_id] = rtrim(trim($notice_html));
43
 
44
+ WDN_Plugin::app()->updateOption('hidden_notices', $get_hidden_notices);
45
 
46
  echo json_encode(array('success' => __('Success', 'disable-admin-notices')));
47
  exit;
48
  }
49
 
50
+ add_action('wp_ajax_wbcr_dan_hide_notices', 'wbcr_dan_ajax_hide_notices');
admin/ajax/index.php ADDED
File without changes
admin/ajax/restore-notice.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Restore notice
4
+ * @author Webcraftic <wordpress.webraftic@gmail.com>
5
+ * @copyright (c) 12.01.2018, Webcraftic
6
+ * @version 1.0
7
+ */
8
+
9
+ // Exit if accessed directly
10
+ if( !defined('ABSPATH') ) {
11
+ exit;
12
+ }
13
+
14
+ function wbcr_dan_ajax_restore_notice()
15
+ {
16
+ check_ajax_referer(WDN_Plugin::app()->getPluginName() . '_ajax_restore_notice_nonce', 'security');
17
+
18
+ if( !current_user_can('update_plugins') ) {
19
+ echo json_encode(array('error' => __('You don\'t have enough capability to edit this information.', 'disable-admin-notices')));
20
+ exit;
21
+ }
22
+
23
+ $notice_id = isset($_POST['notice_id'])
24
+ ? sanitize_text_field($_POST['notice_id'])
25
+ : null;
26
+
27
+ if( empty($notice_id) ) {
28
+ echo json_encode(array('error' => __('Undefinded notice id.', 'disable-admin-notices')));
29
+ exit;
30
+ }
31
+
32
+ $get_hidden_notices = WDN_Plugin::app()->getOption('hidden_notices');
33
+
34
+ if( !empty($get_hidden_notices) && isset($get_hidden_notices[$notice_id]) ) {
35
+ unset($get_hidden_notices[$notice_id]);
36
+ }
37
+
38
+ WDN_Plugin::app()->updateOption('hidden_notices', $get_hidden_notices);
39
+
40
+ echo json_encode(array('success' => __('Success', 'disable-admin-notices')));
41
+ exit;
42
+ }
43
+
44
+ add_action('wp_ajax_wbcr_dan_restore_notice', 'wbcr_dan_ajax_restore_notice');
admin/assets/css/index.php ADDED
File without changes
admin/assets/css/notifications-panel.css CHANGED
@@ -21,7 +21,7 @@
21
  padding: 0;
22
  }
23
  #wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li {
24
- border-left: 4px solid #32373c;
25
  padding: 0;
26
  }
27
  #wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li.wpnc-updated {
@@ -33,11 +33,23 @@
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 .ab-item {
37
  height: 100% !important;
38
  white-space: normal !important;
39
  padding: .5em 1em;
40
  border-bottom: 1px solid #4a4f55;
 
41
  line-height: .5em;
42
  }
43
  #wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .ab-item a {
@@ -46,4 +58,8 @@
46
  margin: 0;
47
  text-decoration: underline;
48
  line-height: .5em;
 
 
 
 
49
  }
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 {
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: .5em 1em;
51
  border-bottom: 1px solid #4a4f55;
52
+ color: #949494;
53
  line-height: .5em;
54
  }
55
  #wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu > li .ab-item a {
58
  margin: 0;
59
  text-decoration: underline;
60
  line-height: .5em;
61
+ color: #949494;
62
+ }
63
+ #wp-admin-bar-wbcr-han-notify-panel .ab-sub-wrapper ul.ab-submenu li:nth-child(2n) {
64
+ background: #26292b;
65
  }
admin/assets/css/notifications-panel.less CHANGED
@@ -5,6 +5,7 @@
5
  */
6
 
7
  #wp-admin-bar-wbcr-han-notify-panel {
 
8
  .wbcr-han-adminbar-counter {
9
  background-color: #0073aa;
10
  border-radius: 50%;
@@ -25,24 +26,37 @@
25
  padding: 0;
26
 
27
  & > li {
28
- border-left: 4px solid #32373c;
29
  padding: 0;
30
 
31
  &.wpnc-updated {
32
  border-left-color: #7ad03a;
33
  }
34
  &.wpnc-update-nag {
35
- border-left-color: #ffba00;;
36
  }
37
  &.wpnc-error {
38
  border-left-color: #dd3d36;
39
  }
40
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  .ab-item {
42
  height: 100% !important;
43
  white-space: normal !important;
44
  padding: .5em 1em;
45
  border-bottom: 1px solid #4a4f55;
 
46
  line-height: .5em;
47
  a {
48
  display: inline;
@@ -50,9 +64,13 @@
50
  margin: 0;
51
  text-decoration: underline;
52
  line-height: .5em;
 
53
  }
54
  }
 
55
 
 
 
56
  }
57
  }
58
  }
5
  */
6
 
7
  #wp-admin-bar-wbcr-han-notify-panel {
8
+
9
  .wbcr-han-adminbar-counter {
10
  background-color: #0073aa;
11
  border-radius: 50%;
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
  &.wpnc-update-nag {
36
+ border-left-color: #ffba00;
37
  }
38
  &.wpnc-error {
39
  border-left-color: #dd3d36;
40
  }
41
 
42
+ .wbcr-han-panel-restore-notify-line {
43
+ text-align: right;
44
+ a {
45
+ color: #ffba00 !important;
46
+ text-decoration: none !important;
47
+ &:hover {
48
+ text-decoration: underline !important;
49
+ color: lighten(#ffba00, 5%) !important;
50
+ }
51
+ }
52
+ }
53
+
54
  .ab-item {
55
  height: 100% !important;
56
  white-space: normal !important;
57
  padding: .5em 1em;
58
  border-bottom: 1px solid #4a4f55;
59
+ color: #949494;
60
  line-height: .5em;
61
  a {
62
  display: inline;
64
  margin: 0;
65
  text-decoration: underline;
66
  line-height: .5em;
67
+ color: #949494;
68
  }
69
  }
70
+ }
71
 
72
+ li:nth-child(2n) {
73
+ background: #26292b;
74
  }
75
  }
76
  }
admin/assets/index.php ADDED
File without changes
admin/assets/js/general.js DELETED
@@ -1,203 +0,0 @@
1
- /**
2
- * General
3
- * @author Webcraftic <wordpress.webraftic@gmail.com>
4
- * @copyright (c) 10.09.2017, Webcraftic
5
- * @version 1.0
6
- */
7
-
8
-
9
- (function($) {
10
- 'use strict';
11
-
12
- var general = {
13
- init: function() {
14
- this.qickStartAssistent();
15
- this.importOptions();
16
- },
17
- qickStartAssistent: function() {
18
- var self = this;
19
-
20
- $('.wbcr-clearfy-switch').click(function() {
21
-
22
- var modeName = $(this).data('mode'),
23
- modeOptions = $(this).data('mode-options');
24
-
25
- self.showConfirmationPopup(modeName, modeOptions);
26
- return false;
27
- });
28
-
29
- $('.wbcr-clearfy-popup-button-cancel').click(function() {
30
- self.hideConfirmationPopup();
31
- });
32
-
33
- $('.wbcr-clearfy-cancel-mode').click(function() {
34
- var $this = $(this), modeName = $(this).closest('.wbcr-clearfy-switch').data('mode'),
35
- switcher = $(this).closest('.wbcr-clearfy-switch');
36
-
37
- switcher.addClass('wbcr-clearfy-loading');
38
-
39
- self.sendRequest({
40
- action: 'wbcr_clearfy_configurate',
41
- mode: modeName,
42
- cancel_mode: true
43
- }, function(data) {
44
- switcher.removeClass('wbcr-clearfy-loading');
45
-
46
- if( data && data.export_options ) {
47
- $('#wbcr-clearfy-import-export').html(data.export_options);
48
- }
49
- },
50
- function() {
51
- if( modeName != 'reset' ) {
52
- switcher.removeClass('wbcr-clearfy-active');
53
- }
54
- });
55
- return false;
56
- });
57
-
58
- $('.wbcr-clearfy-popup-button-ok').click(function() {
59
- var $this = $(this), modeName = $(this).closest('.wbcr-clearfy-confirm-popup').data('mode'),
60
- switcher = $('div[data-mode="' + modeName + '"]', '#wbcr-clearfy-quick-mode-board');
61
-
62
- self.hideConfirmationPopup();
63
- switcher.addClass('wbcr-clearfy-loading');
64
-
65
- self.sendRequest({
66
- action: 'wbcr_clearfy_configurate',
67
- mode: modeName
68
- }, function(data) {
69
- switcher.removeClass('wbcr-clearfy-loading');
70
-
71
- if( data && data.export_options ) {
72
- $('#wbcr-clearfy-import-export').html(data.export_options);
73
- }
74
- },
75
- function() {
76
- if( modeName != 'reset' ) {
77
- switcher.addClass('wbcr-clearfy-active');
78
- return;
79
- }
80
-
81
- $('.wbcr-clearfy-switch').removeClass('wbcr-clearfy-active');
82
- });
83
-
84
- return false;
85
- });
86
- },
87
-
88
- showConfirmationPopup: function(modeName, options) {
89
- var self = this;
90
-
91
- $('.wbcr-clearfy-layer').fadeIn();
92
-
93
- var popupElem = $('.wbcr-clearfy-confirm-popup');
94
- popupElem.data('mode', modeName);
95
- popupElem.fadeIn();
96
-
97
- if( modeName != 'reset' ) {
98
- var printOptTitles = '';
99
-
100
- if( options ) {
101
- for( var opt in options ) {
102
- if( !options.hasOwnProperty(opt) ) {
103
- continue;
104
- }
105
- printOptTitles += '<li>' + options[opt] + '</li>';
106
-
107
- }
108
- $('.wbcr-clearfy-list-options').html(printOptTitles);
109
- popupElem.addClass('wbcr-clearfy-default-warning-options');
110
- }
111
- return;
112
- }
113
-
114
- popupElem.addClass('wbcr-clearfy-reset-warning-options');
115
- },
116
-
117
- hideConfirmationPopup: function() {
118
- $('.wbcr-clearfy-layer').fadeOut(100);
119
- var popupElem = $('.wbcr-clearfy-confirm-popup');
120
-
121
- popupElem.fadeOut(100, function() {
122
- popupElem.removeClass('wbcr-clearfy-default-warning-options');
123
- popupElem.removeClass('wbcr-clearfy-reset-warning-options');
124
- });
125
-
126
- },
127
-
128
- importOptions: function() {
129
- var self = this;
130
-
131
- $('.wbcr-clearfy-import-options-button').click(function() {
132
- var settings = $('#wbcr-clearfy-import-export').val(),
133
- $this = $(this);
134
-
135
- if( !settings ) {
136
- return;
137
- }
138
-
139
- $(this).prop('disabled', true);
140
-
141
- self.sendRequest({
142
- action: 'wbcr_clearfy_import_settings',
143
- settings: settings
144
- }, function(data) {
145
- //console.log(data);
146
- $this.prop('disabled', false);
147
- });
148
-
149
- return false;
150
- });
151
- },
152
- sendRequest: function(data, beforeValidateCallback, successCallback) {
153
-
154
- var errorContanier = $('.wbcr-clearfy-switch-error-message'),
155
- defaultErrorMessage = errorContanier.text();
156
-
157
- if( wbcr_clearfy_ajax === undefined ) {
158
- console.log('Undefinded wbcr_clearfy_ajax object.');
159
- return;
160
- }
161
-
162
- var ajaxUrl = wbcr_clearfy_ajax ? wbcr_clearfy_ajax.ajaxurl : ajaxurl;
163
-
164
- if( typeof data === 'object' ) {
165
- data.security = wbcr_clearfy_ajax.ajax_nonce;
166
- }
167
-
168
- $.ajax(ajaxurl, {
169
- type: 'post',
170
- dataType: 'json',
171
- data: data,
172
- success: function(data, textStatus, jqXHR) {
173
-
174
- beforeValidateCallback && beforeValidateCallback(data);
175
-
176
- if( !data || data.error ) {
177
- if( data ) {
178
- console.log(data.error);
179
- if( !errorContanier.is(':visible') ) {
180
- errorContanier.html(defaultErrorMessage + '<br>' + data.error);
181
- }
182
- }
183
-
184
- if( !errorContanier.is(':visible') ) {
185
- errorContanier.fadeIn(600).delay(10000).fadeOut(600);
186
- }
187
- return;
188
- }
189
-
190
- successCallback && successCallback();
191
-
192
- $('.wbcr-clearfy-switch-success-message').fadeIn(600).delay(3000).fadeOut(600);
193
-
194
- }
195
- });
196
- }
197
- };
198
-
199
- $(document).ready(function() {
200
- general.init();
201
- });
202
-
203
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/assets/js/index.php ADDED
File without changes
admin/assets/js/notifications-panel.js ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ var self = $(this),
14
+ noticeID = $(this).data('notice-id'),
15
+ counterEl = $('.wbcr-han-adminbar-counter');
16
+
17
+ if( !noticeID ) {
18
+ alert('Undefinded error. Please report the bug to our support forum.');
19
+ }
20
+
21
+ self.closest('li').hide();
22
+
23
+ $.ajax(ajaxurl, {
24
+ type: 'post',
25
+ dataType: 'json',
26
+ data: {
27
+ action: 'wbcr_dan_restore_notice',
28
+ security: wbcr_dan_ajax_restore_nonce,
29
+ notice_id: noticeID
30
+ },
31
+ success: function(data, textStatus, jqXHR) {
32
+ if( data == 'error' && data.error ) {
33
+ alert(data.error);
34
+ self.closest('li').show();
35
+ return;
36
+ }
37
+
38
+ counterEl.text(counterEl.text() - 1);
39
+ self.closest('li').remove();
40
+ }
41
+ });
42
+ });
43
+ });
44
+ })(jQuery);
admin/boot.php CHANGED
@@ -6,20 +6,14 @@
6
  * @version 1.0
7
  */
8
 
9
- require(WBCR_DAN_PLUGIN_DIR . '/admin/options.php');
10
-
11
- if( !defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON') ) {
12
- require(WBCR_DAN_PLUGIN_DIR . '/admin/pages/more-features.php');
13
- require(WBCR_DAN_PLUGIN_DIR . '/admin/pages/notices.php');
14
- }
15
-
16
- if( isset($_REQUEST['action']) && $_REQUEST['action'] == 'wbcr_clearfy_hide_notices' ) {
17
- require(WBCR_DAN_PLUGIN_DIR . '/admin/ajax/hide-notice.php');
18
  }
19
 
20
  function wbcr_dan_rating_widget_url($page_url, $plugin_name)
21
  {
22
- if( $plugin_name == 'wbcr_dan' ) {
23
  return 'https://goo.gl/68ucHp';
24
  }
25
 
@@ -41,18 +35,19 @@
41
  'title' => __('Enable hidden notices in adminbar', 'disable-admin-notices'),
42
  'tags' => array()
43
  );
44
- $options[] = array(
 
45
  'name' => 'hidden_notices',
46
  'title' => __('Hidden notices', 'disable-admin-notices'),
47
  'tags' => array()
48
- );
49
 
50
  return $options;
51
  }
52
 
53
  function wbcr_dan_set_plugin_meta($links, $file)
54
  {
55
- if( $file == WBCR_DAN_PLUGIN_BASE ) {
56
  $links[] = '<a href="https://goo.gl/TcMcS4" style="color: #FF5722;font-weight: bold;" target="_blank">' . __('Get ultimate plugin free', 'disable-admin-notices') . '</a>';
57
  }
58
 
6
  * @version 1.0
7
  */
8
 
9
+ // Exit if accessed directly
10
+ if( !defined('ABSPATH') ) {
11
+ exit;
 
 
 
 
 
 
12
  }
13
 
14
  function wbcr_dan_rating_widget_url($page_url, $plugin_name)
15
  {
16
+ if( $plugin_name == WDN_Plugin::app()->getPluginName() ) {
17
  return 'https://goo.gl/68ucHp';
18
  }
19
 
35
  'title' => __('Enable hidden notices in adminbar', 'disable-admin-notices'),
36
  'tags' => array()
37
  );
38
+
39
+ /*$options[] = array(
40
  'name' => 'hidden_notices',
41
  'title' => __('Hidden notices', 'disable-admin-notices'),
42
  'tags' => array()
43
+ );*/
44
 
45
  return $options;
46
  }
47
 
48
  function wbcr_dan_set_plugin_meta($links, $file)
49
  {
50
+ if( $file == WDN_PLUGIN_BASE ) {
51
  $links[] = '<a href="https://goo.gl/TcMcS4" style="color: #FF5722;font-weight: bold;" target="_blank">' . __('Get ultimate plugin free', 'disable-admin-notices') . '</a>';
52
  }
53
 
admin/options.php CHANGED
@@ -6,6 +6,11 @@
6
  * @version 1.0
7
  */
8
 
 
 
 
 
 
9
  /**
10
  * @return array
11
  */
@@ -13,12 +18,10 @@
13
  {
14
  $options = array();
15
 
16
- if( defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON') ) {
17
- $options[] = array(
18
- 'type' => 'html',
19
- 'html' => '<div class="wbcr-clearfy-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>'
20
- );
21
- }
22
 
23
  $options[] = array(
24
  'type' => 'dropdown',
@@ -42,7 +45,7 @@
42
  __('Do not hide notices and do not show “Hide notification forever” link for admin.', 'disable-admin-notices')
43
  )
44
  ),
45
- 'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
46
  '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'),
47
  'default' => 'only_selected',
48
  'events' => array(
@@ -65,7 +68,7 @@
65
  'way' => 'buttons',
66
  'name' => 'show_notices_in_adminbar',
67
  'title' => __('Enable hidden notices in adminbar', 'disable-admin-notices'),
68
- 'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
69
  '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'),
70
  'default' => false
71
  );
@@ -84,7 +87,7 @@
84
 
85
  /**
86
  * @param $form
87
- * @param $page FactoryPages324_ImpressiveThemplate
88
  * @return mixed
89
  */
90
  function wbcr_dan_additionally_form_options($form, $page)
@@ -105,25 +108,23 @@
105
  add_filter('wbcr_clr_additionally_form_options', 'wbcr_dan_additionally_form_options', 10, 2);
106
 
107
  /**
108
- * @param $html_builder FactoryForms329_Html
109
  */
110
  function wbcr_dan_reset_notices_button($html_builder)
111
  {
112
- global $wbcr_dan_plugin;
113
-
114
  $form_name = $html_builder->getFormName();
115
  $reseted = false;
116
 
117
  if( isset($_POST['wbcr_dan_reset_action']) ) {
118
  check_admin_referer($form_name, 'wbcr_dan_reset_nonce');
119
 
120
- delete_option($wbcr_dan_plugin->pluginName . '_hidden_notices');
121
 
122
  $reseted = true;
123
  }
124
 
125
  $count_hidden_notices = 0;
126
- $hidden_notices = get_option($wbcr_dan_plugin->pluginName . '_hidden_notices');
127
 
128
  if( !empty($hidden_notices) ) {
129
  $count_hidden_notices = sizeof($hidden_notices);
6
  * @version 1.0
7
  */
8
 
9
+ // Exit if accessed directly
10
+ if( !defined('ABSPATH') ) {
11
+ exit;
12
+ }
13
+
14
  /**
15
  * @return array
16
  */
18
  {
19
  $options = array();
20
 
21
+ $options[] = array(
22
+ 'type' => 'html',
23
+ '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>'
24
+ );
 
 
25
 
26
  $options[] = array(
27
  'type' => 'dropdown',
45
  __('Do not hide notices and do not show “Hide notification forever” link for admin.', 'disable-admin-notices')
46
  )
47
  ),
48
+ 'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'green'),
49
  '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'),
50
  'default' => 'only_selected',
51
  'events' => array(
68
  'way' => 'buttons',
69
  'name' => 'show_notices_in_adminbar',
70
  'title' => __('Enable hidden notices in adminbar', 'disable-admin-notices'),
71
+ 'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'green'),
72
  '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'),
73
  'default' => false
74
  );
87
 
88
  /**
89
  * @param $form
90
+ * @param $page FactoryPages400_ImpressiveThemplate
91
  * @return mixed
92
  */
93
  function wbcr_dan_additionally_form_options($form, $page)
108
  add_filter('wbcr_clr_additionally_form_options', 'wbcr_dan_additionally_form_options', 10, 2);
109
 
110
  /**
111
+ * @param $html_builder FactoryForms400_Html
112
  */
113
  function wbcr_dan_reset_notices_button($html_builder)
114
  {
 
 
115
  $form_name = $html_builder->getFormName();
116
  $reseted = false;
117
 
118
  if( isset($_POST['wbcr_dan_reset_action']) ) {
119
  check_admin_referer($form_name, 'wbcr_dan_reset_nonce');
120
 
121
+ WDN_Plugin::app()->deleteOption('hidden_notices');
122
 
123
  $reseted = true;
124
  }
125
 
126
  $count_hidden_notices = 0;
127
+ $hidden_notices = WDN_Plugin::app()->getOption('hidden_notices');
128
 
129
  if( !empty($hidden_notices) ) {
130
  $count_hidden_notices = sizeof($hidden_notices);
admin/pages/index.php ADDED
File without changes
admin/pages/more-features.php CHANGED
@@ -5,8 +5,12 @@
5
  *
6
  * @since 1.0.0
7
  */
8
- class WbcrHan_MoreFeaturesPage extends FactoryClearfy102_MoreFeaturesPage {
9
 
 
 
 
10
  }
11
 
12
- FactoryPages324::register($wbcr_dan_plugin, 'WbcrHan_MoreFeaturesPage');
 
 
5
  *
6
  * @since 1.0.0
7
  */
 
8
 
9
+ // Exit if accessed directly
10
+ if( !defined('ABSPATH') ) {
11
+ exit;
12
  }
13
 
14
+ class WDN_MoreFeaturesPage extends Wbcr_FactoryClearfy200_MoreFeaturesPage {
15
+
16
+ }
admin/pages/notices.php CHANGED
@@ -5,13 +5,19 @@
5
  *
6
  * @since 1.0.0
7
  */
8
- class WbcrHan_NoticesPage extends FactoryPages324_ImpressiveThemplate {
 
 
 
 
 
 
9
 
10
  /**
11
  * The id of the page in the admin menu.
12
  *
13
  * Mainly used to navigate between pages.
14
- * @see FactoryPages324_AdminPage
15
  *
16
  * @since 1.0.0
17
  * @var string
@@ -19,19 +25,22 @@
19
  public $id = "notices";
20
  public $page_menu_dashicon = 'dashicons-testimonial';
21
 
22
- public function __construct(Factory326_Plugin $plugin)
 
 
 
23
  {
24
- $this->menuTitle = __('Hide admin notices', 'disable-admin-notices');
25
 
26
  if( !defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON') ) {
27
  $this->internal = false;
28
- $this->menuTarget = 'options-general.php';
29
- $this->addLinkToPluginActions = true;
30
  }
31
 
32
- add_filter('wbcr_factory_imppage_actions_notice', array($this, 'actionsNotice'), 10, 2);
33
-
34
  parent::__construct($plugin);
 
 
35
  }
36
 
37
  public function getMenuTitle()
@@ -44,18 +53,12 @@
44
 
45
  /**
46
  * We register notifications for some actions
47
- * @param $notices
48
- * @param $plugin
49
  * @return array
50
  */
51
- public function actionsNotice($notices, $plugin)
52
  {
53
- global $wbcr_dan_plugin;
54
-
55
- if( $wbcr_dan_plugin->pluginName != $plugin->pluginName ) {
56
- return $notices;
57
- }
58
-
59
  $notices[] = array(
60
  'conditions' => array(
61
  'wbcr_dan_reseted_notices' => 1
@@ -70,7 +73,7 @@
70
  'wbcr_dan_code' => 'interal_error'
71
  ),
72
  'type' => 'danger',
73
- 'message' => __('An error occurred while trying to delete comments. Internal error occured. Please try again later.', 'factory_pages_324')
74
  );*/
75
 
76
  return $notices;
@@ -96,6 +99,4 @@
96
 
97
  return apply_filters('wbcr_dan_notices_form_options', $formOptions, $this);
98
  }
99
- }
100
-
101
- FactoryPages324::register($wbcr_dan_plugin, 'WbcrHan_NoticesPage');
5
  *
6
  * @since 1.0.0
7
  */
8
+
9
+ // Exit if accessed directly
10
+ if( !defined('ABSPATH') ) {
11
+ exit;
12
+ }
13
+
14
+ class WDN_NoticesPage extends Wbcr_FactoryPages400_ImpressiveThemplate {
15
 
16
  /**
17
  * The id of the page in the admin menu.
18
  *
19
  * Mainly used to navigate between pages.
20
+ * @see FactoryPages400_AdminPage
21
  *
22
  * @since 1.0.0
23
  * @var string
25
  public $id = "notices";
26
  public $page_menu_dashicon = 'dashicons-testimonial';
27
 
28
+ /**
29
+ * @param Wbcr_Factory400_Plugin $plugin
30
+ */
31
+ public function __construct(Wbcr_Factory400_Plugin $plugin)
32
  {
33
+ $this->menu_title = __('Hide admin notices', 'disable-admin-notices');
34
 
35
  if( !defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON') ) {
36
  $this->internal = false;
37
+ $this->menu_target = 'options-general.php';
38
+ $this->add_link_to_plugin_actions = true;
39
  }
40
 
 
 
41
  parent::__construct($plugin);
42
+
43
+ $this->plugin = $plugin;
44
  }
45
 
46
  public function getMenuTitle()
53
 
54
  /**
55
  * We register notifications for some actions
56
+ * @param array $notices
57
+ * @param Wbcr_Factory400_Plugin $plugin
58
  * @return array
59
  */
60
+ public function actionsNotice($notices)
61
  {
 
 
 
 
 
 
62
  $notices[] = array(
63
  'conditions' => array(
64
  'wbcr_dan_reseted_notices' => 1
73
  'wbcr_dan_code' => 'interal_error'
74
  ),
75
  'type' => 'danger',
76
+ 'message' => __('An error occurred while trying to delete comments. Internal error occured. Please try again later.', 'factory_pages_400')
77
  );*/
78
 
79
  return $notices;
99
 
100
  return apply_filters('wbcr_dan_notices_form_options', $formOptions, $this);
101
  }
102
+ }
 
 
disable-admin-notices.php CHANGED
@@ -4,12 +4,17 @@
4
  * Plugin URI: https://wordpress.org/plugins/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: Webcraftic <wordpress.webraftic@gmail.com>
7
- * Version: 1.0.2
8
  * Text Domain: disable-admin-notices
9
  * Domain Path: /languages/
10
  */
11
 
12
- if( defined('WBCR_DAN_PLUGIN_ACTIVE') || (defined('WBCR_CLEARFY_PLUGIN_ACTIVE') && !defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON')) ) {
 
 
 
 
 
13
  function wbcr_dan_admin_notice_error()
14
  {
15
  ?>
@@ -24,62 +29,30 @@
24
  return;
25
  } else {
26
 
27
- define('WBCR_DAN_PLUGIN_ACTIVE', true);
28
-
29
- define('WBCR_DAN_PLUGIN_DIR', dirname(__FILE__));
30
- define('WBCR_DAN_PLUGIN_BASE', plugin_basename(__FILE__));
31
- define('WBCR_DAN_PLUGIN_URL', plugins_url(null, __FILE__));
32
 
33
 
34
-
35
  if( !defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON') ) {
36
- require_once(WBCR_DAN_PLUGIN_DIR . '/libs/factory/core/boot.php');
37
  }
38
 
39
- function wbcr_dan_plugin_init()
40
- {
41
- global $wbcr_dan_plugin;
42
-
43
- // Localization plugin
44
- load_plugin_textdomain('disable-admin-notices', false, dirname(WBCR_DAN_PLUGIN_BASE) . '/languages/');
45
 
46
- if( defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON') ) {
47
- //return;
48
- global $wbcr_clearfy_plugin;
49
- $wbcr_dan_plugin = $wbcr_clearfy_plugin;
50
- } else {
51
-
52
- $wbcr_dan_plugin = new Factory326_Plugin(__FILE__, array(
53
- 'name' => 'wbcr_dan',
54
- 'title' => __('Webcraftic disable admin notices', 'disable-admin-notices'),
55
- 'version' => '1.0.2',
56
- 'host' => 'wordpress.org',
57
- 'url' => 'https://wordpress.org/plugins/disable-admin-notices/',
58
- 'assembly' => 'free',
59
- 'updates' => WBCR_DAN_PLUGIN_DIR . '/updates/'
60
- ));
61
-
62
- // requires factory modules
63
- $wbcr_dan_plugin->load(array(
64
- array('libs/factory/bootstrap', 'factory_bootstrap_330', 'admin'),
65
- array('libs/factory/forms', 'factory_forms_329', 'admin'),
66
- array('libs/factory/pages', 'factory_pages_324', 'admin'),
67
- array('libs/factory/clearfy', 'factory_clearfy_102', 'all')
68
- ));
69
- }
70
-
71
- // loading other files
72
- if( is_admin() ) {
73
- require(WBCR_DAN_PLUGIN_DIR . '/admin/boot.php');
74
- }
75
-
76
- require(WBCR_DAN_PLUGIN_DIR . '/includes/classes/class.configurate-notices.php');
77
- new WbcrHan_ConfigHideNotices($wbcr_dan_plugin);
78
- }
79
 
80
- if( defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON') ) {
81
- wbcr_dan_plugin_init();
82
- } else {
83
- add_action('plugins_loaded', 'wbcr_dan_plugin_init');
 
 
 
 
 
 
84
  }
85
  }
4
  * Plugin URI: https://wordpress.org/plugins/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: Webcraftic <wordpress.webraftic@gmail.com>
7
+ * Version: 1.0.5
8
  * Text Domain: disable-admin-notices
9
  * Domain Path: /languages/
10
  */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( defined('WDN_PLUGIN_ACTIVE') || (defined('WCL_PLUGIN_ACTIVE') && !defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON')) ) {
18
  function wbcr_dan_admin_notice_error()
19
  {
20
  ?>
29
  return;
30
  } else {
31
 
32
+ define('WDN_PLUGIN_ACTIVE', true);
33
+ define('WDN_PLUGIN_DIR', dirname(__FILE__));
34
+ define('WDN_PLUGIN_BASE', plugin_basename(__FILE__));
35
+ define('WDN_PLUGIN_URL', plugins_url(null, __FILE__));
 
36
 
37
 
38
+
39
  if( !defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON') ) {
40
+ require_once(WDN_PLUGIN_DIR . '/libs/factory/core/boot.php');
41
  }
42
 
43
+ require_once(WDN_PLUGIN_DIR . '/includes/class.plugin.php');
 
 
 
 
 
44
 
45
+ if( !defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON') ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
47
+ new WDN_Plugin(__FILE__, array(
48
+ 'prefix' => 'wbcr_dan_',
49
+ 'plugin_name' => 'wbcr_dan',
50
+ 'plugin_title' => __('Webcraftic disable admin notices', 'disable-admin-notices'),
51
+ 'plugin_version' => '1.0.5',
52
+ 'required_php_version' => '5.2',
53
+ 'required_wp_version' => '4.2',
54
+ 'plugin_build' => 'free',
55
+ 'updates' => WDN_PLUGIN_DIR . '/updates/'
56
+ ));
57
  }
58
  }
includes/class.plugin.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Hide my wp core class
4
+ * @author Webcraftic <wordpress.webraftic@gmail.com>
5
+ * @copyright (c) 19.02.2018, Webcraftic
6
+ * @version 1.0
7
+ */
8
+
9
+ // Exit if accessed directly
10
+ if( !defined('ABSPATH') ) {
11
+ exit;
12
+ }
13
+
14
+ if( !class_exists('WDN_Plugin') ) {
15
+
16
+ if( !class_exists('WDN_PluginFactory') ) {
17
+ if( defined('LOADING_CYRLITERA_AS_ADDON') ) {
18
+ class WDN_PluginFactory {
19
+
20
+ }
21
+ } else {
22
+ class WDN_PluginFactory extends Wbcr_Factory400_Plugin {
23
+
24
+ }
25
+ }
26
+ }
27
+
28
+ class WDN_Plugin extends WDN_PluginFactory {
29
+
30
+ /**
31
+ * @var Wbcr_Factory400_Plugin
32
+ */
33
+ private static $app;
34
+
35
+ /**
36
+ * @var bool
37
+ */
38
+ private $as_addon;
39
+
40
+ /**
41
+ * @param string $plugin_path
42
+ * @param array $data
43
+ * @throws Exception
44
+ */
45
+ public function __construct($plugin_path, $data)
46
+ {
47
+ $this->as_addon = isset($data['as_addon']);
48
+
49
+ if( $this->as_addon ) {
50
+ $plugin_parent = isset($data['plugin_parent'])
51
+ ? $data['plugin_parent']
52
+ : null;
53
+
54
+ if( !($plugin_parent instanceof Wbcr_Factory400_Plugin) ) {
55
+ throw new Exception('An invalid instance of the class was passed.');
56
+ }
57
+
58
+ self::$app = $plugin_parent;
59
+ } else {
60
+ self::$app = $this;
61
+ }
62
+
63
+ if( !$this->as_addon ) {
64
+ parent::__construct($plugin_path, $data);
65
+ }
66
+
67
+ $this->setTextDomain();
68
+ $this->setModules();
69
+
70
+ $this->globalScripts();
71
+
72
+ if( is_admin() ) {
73
+ $this->adminScripts();
74
+ }
75
+ }
76
+
77
+ /**
78
+ * @return Wbcr_Factory400_Plugin
79
+ */
80
+ public static function app()
81
+ {
82
+ return self::$app;
83
+ }
84
+
85
+ protected function setTextDomain()
86
+ {
87
+ // Localization plugin
88
+ load_plugin_textdomain('disable-admin-notices', false, dirname(WDN_PLUGIN_BASE) . '/languages/');
89
+ }
90
+
91
+ protected function setModules()
92
+ {
93
+ if( !$this->as_addon ) {
94
+ self::app()->load(array(
95
+ array('libs/factory/bootstrap', 'factory_bootstrap_400', 'admin'),
96
+ array('libs/factory/forms', 'factory_forms_400', 'admin'),
97
+ array('libs/factory/pages', 'factory_pages_400', 'admin'),
98
+ array('libs/factory/clearfy', 'factory_clearfy_200', 'all')
99
+ ));
100
+ }
101
+ }
102
+
103
+ private function registerPages()
104
+ {
105
+ if( $this->as_addon ) {
106
+ return;
107
+ }
108
+ self::app()->registerPage('WDN_NoticesPage', WDN_PLUGIN_DIR . '/admin/pages/notices.php');
109
+ self::app()->registerPage('WDN_MoreFeaturesPage', WDN_PLUGIN_DIR . '/admin/pages/more-features.php');
110
+ }
111
+
112
+ private function adminScripts()
113
+ {
114
+ require(WDN_PLUGIN_DIR . '/admin/options.php');
115
+
116
+ if( defined('DOING_AJAX') && DOING_AJAX && isset($_REQUEST['action']) && $_REQUEST['action'] == 'wbcr_dan_hide_notices' ) {
117
+ require(WDN_PLUGIN_DIR . '/admin/ajax/hide-notice.php');
118
+ }
119
+
120
+ if( defined('DOING_AJAX') && DOING_AJAX && isset($_REQUEST['action']) && $_REQUEST['action'] == 'wbcr_dan_restore_notice' ) {
121
+ require(WDN_PLUGIN_DIR . '/admin/ajax/restore-notice.php');
122
+ }
123
+
124
+ require(WDN_PLUGIN_DIR . '/admin/boot.php');
125
+
126
+ $this->registerPages();
127
+ }
128
+
129
+ private function globalScripts()
130
+ {
131
+ require(WDN_PLUGIN_DIR . '/includes/classes/class.configurate-notices.php');
132
+ new WDN_ConfigHideNotices(self::$app);
133
+ }
134
+ }
135
+ }
includes/classes/class.configurate-notices.php CHANGED
@@ -6,7 +6,13 @@
6
  * @copyright (c) 2017 Webraftic Ltd
7
  * @version 1.0
8
  */
9
- class WbcrHan_ConfigHideNotices extends WbcrFactoryClearfy_Configurate {
 
 
 
 
 
 
10
 
11
  public function registerActionsAndFilters()
12
  {
@@ -23,19 +29,40 @@
23
  add_action('admin_bar_menu', array($this, 'notificationsPanel'), 999);
24
  add_action('admin_enqueue_scripts', array($this, 'notificationsPanelStyles'));
25
  }
 
 
26
  }
27
  }
28
  }
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  public function notificationsPanelStyles()
31
  {
32
- global $wbcr_dan_plugin;
33
- wp_enqueue_style('wpcm_admin', WBCR_DAN_PLUGIN_URL . '/admin/assets/css/notifications-panel.css', array(), $wbcr_dan_plugin->version);
34
  }
35
 
36
  public function notificationsPanel(&$wp_admin_bar)
37
  {
38
- global $wbcr_dan_plugin;
 
 
39
 
40
  $notifications = $this->getOption('hidden_notices');
41
 
@@ -56,11 +83,14 @@
56
  // loop
57
  if( !empty($notifications) ) {
58
  $i = 0;
59
- foreach($notifications as $notification) {
 
 
 
60
  $wp_admin_bar->add_menu(array(
61
  'id' => 'wbcr-han-notify-panel-item-' . $i,
62
  'parent' => 'wbcr-han-notify-panel',
63
- 'title' => $notification,
64
  'href' => false,
65
  'meta' => array(
66
  'class' => ''
@@ -72,11 +102,6 @@
72
  }
73
  }
74
 
75
- public function printNotices()
76
- {
77
- add_action('admin_notices', array($this, 'noticesCollection'));
78
- }
79
-
80
  public function noticesCollection()
81
  {
82
  global $wbcr_dan_plugin_all_notices;
@@ -85,18 +110,19 @@
85
  return;
86
  }
87
  ?>
 
88
  <style>
89
- .wbcr-clearfy-hide-notices {
90
  position: relative;
91
  padding: 5px 5px 0;
92
  background: #fff;
93
  }
94
 
95
- .wbcr-clearfy-hide-notices > div {
96
  margin: 0 !important;
97
  }
98
 
99
- .wbcr-clearfy-hide-notice-link {
100
  display: block;
101
  text-align: right;
102
  margin: 5px 0 5px 5px;
@@ -104,47 +130,51 @@
104
  color: #F44336;
105
  }
106
 
107
- .is-dismissible .wbcr-clearfy-hide-notice-link {
108
  margin-right: -30px;
109
  }
110
 
111
- .wbcr-clearfy-hide-notice-link:active, .wbcr-clearfy-hide-notice-link:focus {
112
  box-shadow: none;
113
  outline: none;
114
  }
115
  </style>
116
- <script>
117
- var wbcr_clearfy_ajax_nonce = "<?=wp_create_nonce($this->plugin->pluginName . '_ajax_hide_notices_nonce')?>";
118
- var wbcr_clearfy_ajax_url = "<?=admin_url('admin-ajax.php')?>";
119
 
120
- jQuery(function() {
121
- jQuery(document).on('click', '.wbcr-clearfy-hide-notice-link', function() {
122
- var self = jQuery(this),
123
- noticeID = jQuery(this).data('notice-id'),
124
- noticeHtml = jQuery(this).closest('.wbcr-clearfy-hide-notices').clone();
 
 
 
125
 
126
- noticeHtml.find('.wbcr-clearfy-hide-notice-link').remove();
127
 
128
  if( !noticeID ) {
129
  alert('Undefinded error. Please report the bug to our support forum.');
130
  }
131
 
132
- jQuery.ajax(wbcr_clearfy_ajax_url, {
 
 
133
  type: 'post',
134
  dataType: 'json',
135
  data: {
136
- action: 'wbcr_clearfy_hide_notices',
137
- security: wbcr_clearfy_ajax_nonce,
138
  notice_id: noticeID,
139
  notice_html: noticeHtml.html()
140
  },
141
  success: function(data, textStatus, jqXHR) {
142
  if( data == 'error' && data.error ) {
143
  alert(data.error);
 
 
144
  return;
145
  }
146
 
147
- self.closest('.wbcr-clearfy-hide-notices').parent().hide();
148
  }
149
  });
150
  });
@@ -166,7 +196,7 @@
166
  $get_hidden_notices = $this->getOption('hidden_notices');
167
 
168
  $content = array();
169
- foreach($wp_filter['admin_notices']->callbacks as $filters) {
170
  foreach($filters as $callback_name => $callback) {
171
 
172
  if( 'usof_hide_admin_notices_start' == $callback_name || 'usof_hide_admin_notices_end' == $callback_name ) {
@@ -174,7 +204,22 @@
174
  }
175
 
176
  ob_start();
177
- call_user_func_array($callback['function'], array());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  $cont = ob_get_clean();
179
 
180
  if( empty($cont) ) {
@@ -192,7 +237,8 @@
192
  $uniq_id2 = md5($class_name . ':' . $method_name);
193
  }
194
  }
195
-
 
196
  if( !empty($get_hidden_notices) ) {
197
 
198
  $skip_notice = true;
@@ -214,11 +260,11 @@
214
  }
215
  }
216
 
217
- $hide_link = '<a href="#" data-notice-id="' . $uniq_id1 . '_' . $uniq_id2 . '" class="wbcr-clearfy-hide-notice-link">[' . __('Hide notification forever', 'disable-admin-notices') . ']</a>';
218
 
219
  $cont = preg_replace('/<(script|style)([^>]+)?>(.*?)<\/(script|style)>/is', '', $cont);
220
  $cont = rtrim(trim($cont));
221
- $cont = preg_replace('/^(<div[^>]+>)(.*?)(<\/div>)$/is', '$1<div class="wbcr-clearfy-hide-notices">$2' . $hide_link . '</div>$3', $cont);
222
 
223
  if( empty($cont) ) {
224
  continue;
@@ -241,4 +287,26 @@
241
  unset($wp_filter['all_admin_notices']);
242
  }
243
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  }
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
+ class WDN_ConfigHideNotices extends Wbcr_FactoryClearfy200_Configurate {
16
 
17
  public function registerActionsAndFilters()
18
  {
29
  add_action('admin_bar_menu', array($this, 'notificationsPanel'), 999);
30
  add_action('admin_enqueue_scripts', array($this, 'notificationsPanelStyles'));
31
  }
32
+
33
+ add_action('admin_head', array($this, 'printNonce'), 999);
34
  }
35
  }
36
  }
37
 
38
+ public function printNotices()
39
+ {
40
+ add_action('admin_notices', array($this, 'noticesCollection'));
41
+ }
42
+
43
+ public function printNonce()
44
+ {
45
+ ?>
46
+ <!-- Disable admin notices plugin (Clearfy tools) -->
47
+ <script>
48
+ var wbcr_dan_ajax_restore_nonce = "<?=wp_create_nonce($this->plugin->getPluginName() . '_ajax_restore_notice_nonce')?>";
49
+ var wbcr_dan_ajax_hide_notice_nonce = "<?=wp_create_nonce($this->plugin->getPluginName() . '_ajax_hide_notices_nonce')?>";
50
+ </script>
51
+ <?php
52
+ }
53
+
54
+
55
  public function notificationsPanelStyles()
56
  {
57
+ wp_enqueue_style('wbcr-notification-panel-styles', WDN_PLUGIN_URL . '/admin/assets/css/notifications-panel.css', array(), $this->plugin->getPluginVersion());
58
+ wp_enqueue_script('wbcr-notification-panel-scripts', WDN_PLUGIN_URL . '/admin/assets/js/notifications-panel.js', array(), $this->plugin->getPluginVersion());
59
  }
60
 
61
  public function notificationsPanel(&$wp_admin_bar)
62
  {
63
+ if( !current_user_can('administrator') ) {
64
+ return;
65
+ }
66
 
67
  $notifications = $this->getOption('hidden_notices');
68
 
83
  // loop
84
  if( !empty($notifications) ) {
85
  $i = 0;
86
+ foreach($notifications as $notice_id => $message) {
87
+ $message = $this->getExcerpt(stripslashes($message), 0, 350);
88
+ $message .= '<div class="wbcr-han-panel-restore-notify-line"><a href="#" data-notice-id="' . esc_attr($notice_id) . '" class="wbcr-han-panel-restore-notify-link">' . __('Restore notice', 'clearfy') . '</a></div>';
89
+
90
  $wp_admin_bar->add_menu(array(
91
  'id' => 'wbcr-han-notify-panel-item-' . $i,
92
  'parent' => 'wbcr-han-notify-panel',
93
+ 'title' => $message,
94
  'href' => false,
95
  'meta' => array(
96
  'class' => ''
102
  }
103
  }
104
 
 
 
 
 
 
105
  public function noticesCollection()
106
  {
107
  global $wbcr_dan_plugin_all_notices;
110
  return;
111
  }
112
  ?>
113
+ <!-- Disable admin notices plugin (Clearfy tools) -->
114
  <style>
115
+ .wbcr-dan-hide-notices {
116
  position: relative;
117
  padding: 5px 5px 0;
118
  background: #fff;
119
  }
120
 
121
+ .wbcr-dan-hide-notices > div {
122
  margin: 0 !important;
123
  }
124
 
125
+ .wbcr-dan-hide-notice-link {
126
  display: block;
127
  text-align: right;
128
  margin: 5px 0 5px 5px;
130
  color: #F44336;
131
  }
132
 
133
+ .is-dismissible .wbcr-dan-hide-notice-link {
134
  margin-right: -30px;
135
  }
136
 
137
+ .wbcr-dan-hide-notice-link:active, .wbcr-dan-hide-notice-link:focus {
138
  box-shadow: none;
139
  outline: none;
140
  }
141
  </style>
 
 
 
142
 
143
+ <!-- Disable admin notices plugin (Clearfy tools) -->
144
+ <script>
145
+ jQuery(document).ready(function($) {
146
+ $(document).on('click', '.wbcr-dan-hide-notice-link', function() {
147
+ var self = $(this),
148
+ noticeID = self.data('notice-id'),
149
+ noticeHtml = self.closest('.wbcr-dan-hide-notices').clone(),
150
+ contanierEl = self.closest('.wbcr-dan-hide-notices').parent();
151
 
152
+ noticeHtml.find('.wbcr-dan-hide-notice-link').remove();
153
 
154
  if( !noticeID ) {
155
  alert('Undefinded error. Please report the bug to our support forum.');
156
  }
157
 
158
+ contanierEl.hide();
159
+
160
+ $.ajax(ajaxurl, {
161
  type: 'post',
162
  dataType: 'json',
163
  data: {
164
+ action: 'wbcr_dan_hide_notices',
165
+ security: wbcr_dan_ajax_hide_notice_nonce,
166
  notice_id: noticeID,
167
  notice_html: noticeHtml.html()
168
  },
169
  success: function(data, textStatus, jqXHR) {
170
  if( data == 'error' && data.error ) {
171
  alert(data.error);
172
+
173
+ contanierEl.show();
174
  return;
175
  }
176
 
177
+ contanierEl.remove();
178
  }
179
  });
180
  });
196
  $get_hidden_notices = $this->getOption('hidden_notices');
197
 
198
  $content = array();
199
+ foreach((array)$wp_filter['admin_notices']->callbacks as $filters) {
200
  foreach($filters as $callback_name => $callback) {
201
 
202
  if( 'usof_hide_admin_notices_start' == $callback_name || 'usof_hide_admin_notices_end' == $callback_name ) {
204
  }
205
 
206
  ob_start();
207
+
208
+ // #CLRF-140 fix bug for php7
209
+ // when the developers forgot to delete the argument in the function of implementing the notification.
210
+ $args = array();
211
+ $accepted_args = isset($callback['accepted_args']) && !empty($callback['accepted_args'])
212
+ ? $callback['accepted_args']
213
+ : 0;
214
+
215
+ if( $accepted_args > 0 ) {
216
+ for($i = 0; $i < (int)$accepted_args; $i++) {
217
+ $args[] = null;
218
+ }
219
+ }
220
+ //===========
221
+
222
+ call_user_func_array($callback['function'], $args);
223
  $cont = ob_get_clean();
224
 
225
  if( empty($cont) ) {
237
  $uniq_id2 = md5($class_name . ':' . $method_name);
238
  }
239
  }
240
+ //838339d1a188e17fec838c2df3058603
241
+ //838339d1a188e17fec838c2df3058603
242
  if( !empty($get_hidden_notices) ) {
243
 
244
  $skip_notice = true;
260
  }
261
  }
262
 
263
+ $hide_link = '<a href="#" data-notice-id="' . $uniq_id1 . '_' . $uniq_id2 . '" class="wbcr-dan-hide-notice-link">[' . __('Hide notification forever', 'disable-admin-notices') . ']</a>';
264
 
265
  $cont = preg_replace('/<(script|style)([^>]+)?>(.*?)<\/(script|style)>/is', '', $cont);
266
  $cont = rtrim(trim($cont));
267
+ $cont = preg_replace('/^(<div[^>]+>)(.*?)(<\/div>)$/is', '$1<div class="wbcr-dan-hide-notices">$2' . $hide_link . '</div>$3', $cont);
268
 
269
  if( empty($cont) ) {
270
  continue;
287
  unset($wp_filter['all_admin_notices']);
288
  }
289
  }
290
+
291
+ /**
292
+ * Get excerpt from string
293
+ *
294
+ * @param String $str String to get an excerpt from
295
+ * @param Integer $startPos Position int string to start excerpt from
296
+ * @param Integer $maxLength Maximum length the excerpt may be
297
+ * @return String excerpt
298
+ */
299
+ function getExcerpt($str, $startPos = 0, $maxLength = 100)
300
+ {
301
+ if( strlen($str) > $maxLength ) {
302
+ $excerpt = substr($str, $startPos, $maxLength - 3);
303
+ $lastSpace = strrpos($excerpt, ' ');
304
+ $excerpt = substr($excerpt, 0, $lastSpace);
305
+ $excerpt .= '...';
306
+ } else {
307
+ $excerpt = $str;
308
+ }
309
+
310
+ return $excerpt;
311
+ }
312
  }
includes/classes/index.php ADDED
File without changes
includes/index.php ADDED
File without changes
languages/disable-admin-notices-ru_RU.mo CHANGED
Binary file
languages/disable-admin-notices-ru_RU.po CHANGED
@@ -1,419 +1,422 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: clearfy\n"
4
- "POT-Creation-Date: 2018-01-21 23:48+0300\n"
5
- "PO-Revision-Date: 2018-01-21 23:55+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: 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 1.8.8\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
-
21
- #: admin/ajax/hide-notice.php:16
22
- msgid "You don't have enough capability to edit this information."
23
- msgstr "Вы не имеете разрешения на редактирование этого!"
24
-
25
- #: admin/ajax/hide-notice.php:33
26
- msgid "Undefinded notice id."
27
- msgstr "Не передан notice id."
28
-
29
- #: admin/ajax/hide-notice.php:47
30
- msgid "Success"
31
- msgstr "Успешно"
32
-
33
- #: admin/boot.php:37 admin/options.php:27 admin/pages/notices.php:24
34
- msgid "Hide admin notices"
35
- msgstr "Скрыть уведомления"
36
-
37
- #: admin/boot.php:43 admin/options.php:67
38
- msgid "Enable hidden notices in adminbar"
39
- msgstr "Включить уведомления в админбаре"
40
-
41
- #: admin/boot.php:48
42
- msgid "Hidden notices"
43
- msgstr "Скрытые уведомления"
44
-
45
- #: admin/boot.php:58
46
- msgid "Get ultimate plugin free"
47
- msgstr "Получите полную версию плагина бесплатно"
48
-
49
- #: admin/options.php:19
50
- msgid "Admin notifications, Update nags"
51
- msgstr "Уведомления администратора, уведомления об обновлении Wordpress"
52
-
53
- #: admin/options.php:19
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 "
57
- "these notices every now and again but they newly appears and interfere your "
58
- "work with WordPress. Even worse, some plugin’s authors delete “close” button "
59
- "from notices and they shows in your admin panel forever."
60
- msgstr ""
61
- "Вам знакома ситуация, когда какой-то плагин просит вас обновиться до премиум-"
62
- "версии, получить права на сбор данных о вашем сайте и создает много "
63
- "раздражающих уведомлений? Вы закрываете эти уведомления раз за разом, но они "
64
- "вновь появляются и мешают вашей работе с WordPress. Хуже того, некоторые "
65
- "авторы и вовсе удаляют кнопку “закрыть” из уведомлений, и они висят в шапке "
66
- "вашей панели администратора целую вечность."
67
-
68
- #: admin/options.php:31
69
- msgid "All notices"
70
- msgstr "Все уведомления"
71
-
72
- #: admin/options.php:32
73
- msgid "Hide all notices globally."
74
- msgstr "Скрыть все уведомления глобально."
75
-
76
- #: admin/options.php:36
77
- msgid "Only selected"
78
- msgstr "Только выбранные"
79
-
80
- #: admin/options.php:37
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
- "Скрывать только выбранные уведомления. В каждом уведомлении вы увидите "
86
- "ссылку \"Скрыть уведомление навсегда\". Нажмите на неё и уведомление будет "
87
- "скрыто навсегда и перестанет вас беспокоить."
88
-
89
- #: admin/options.php:41
90
- msgid "Don't nide"
91
- msgstr "Не скрывать"
92
-
93
- #: admin/options.php:42
94
- msgid ""
95
- "Do not hide notices and do not show “Hide notification forever” link for "
96
- "admin."
97
- msgstr ""
98
- "Не скрывать уведомления и не показывать ссылку \"Скрыть уведомление навсегда"
99
- "\" в уведомлениях администратора."
100
-
101
- #: admin/options.php:46
102
- msgid ""
103
- "Some plugins shows notifications about premium version, data collecting or "
104
- "promote their services. Even if you push close button (that sometimes are "
105
- "impossible), notices are shows again in some time. This option allows you to "
106
- "control notices. Hide them all or each individually. Some plugins shows "
107
- "notifications about premium version, data collecting or promote their "
108
- "services. Even if you push close button (that sometimes are impossible), "
109
- "notices are shows again in some time. This option allows you to control "
110
- "notices. Hide them all or each individually."
111
- msgstr ""
112
- "Зачастую, плагины отображают уведомления о возможности перехода на премиум "
113
- "версию, просят разрешение на сбор данных, рекламируют свои услуги. Даже если "
114
- "вы нажмете кнопку закрыть (что не всегда возможно), уведомления всё равно "
115
- "отобразятся через какое-то время. С помощью этой настройки, вы можете "
116
- "контролировать эти уведомления. Скройте их все сразу или каждое по "
117
- "отдельности."
118
-
119
- #: admin/options.php:69
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
- "По умолчанию, плагин полностью скрывает отключенные вами уведомления. Если "
127
- "включить эту опцию, то плагин будет собирать все скрытые вами уведомления и "
128
- "выводить в верхней панели администратора. Это не будет вас раздражать, но и "
129
- "позволит просматривать уведомления, когда вам это удобно."
130
-
131
- #: admin/options.php:135
132
- msgid "Push reset hidden notices if you need to show hidden notices again."
133
- msgstr "Нажмите кнопку \\\"Сбросить скрытые уведомления\\\""
134
-
135
- #: admin/options.php:144
136
- #, php-format
137
- msgid "Reset hidden notices (%s)"
138
- msgstr "Сбросить скрытые уведомления (%s)"
139
-
140
- #: admin/options.php:146 admin/pages/notices.php:64
141
- msgid "Hidden notices are successfully reset, now you can see them again!"
142
- msgstr ""
143
- "Скрытые уведомления успешно восстановлены, теперь вы можете снова видеть их!"
144
-
145
- #: admin/pages/notices.php:40
146
- msgid "Notices"
147
- msgstr "Уведомления"
148
-
149
- #: admin/pages/notices.php:41
150
- msgid "General"
151
- msgstr "Основные"
152
-
153
- #: disable-admin-notices.php:17
154
- msgid ""
155
- "We found that you have the \"Clearfy - disable unused features\" plugin "
156
- "installed, this plugin already has disable comments functions, so you can "
157
- "deactivate plugin \"Disable admin notices\"!"
158
- msgstr ""
159
- "Мы обнаружили, что у вас установлен плагин «Clearfy - отключить "
160
- "неиспользуемые функции», этот плагин уже имеет функции отключения "
161
- "комментариев, поэтому вы можете отключить плагин «Скрыть уведомления "
162
- "администратора»!"
163
-
164
- #: disable-admin-notices.php:82
165
- msgid "Webcraftic disable admin notices"
166
- msgstr "Webcraftic отключить уведомления администратора"
167
-
168
- #: includes/classes/class.configurate-notices.php:52
169
- #, php-format
170
- msgid "Notifications %s"
171
- msgstr "Уведомления %s"
172
-
173
- #: includes/classes/class.configurate-notices.php:217
174
- msgid "Hide notification forever"
175
- msgstr "Скрыть уведомление навсегда"
176
-
177
- #~ msgid "Disable comments on the entire site"
178
- #~ msgstr "Отключить комментарии на всем сайте"
179
-
180
- #~ msgid "Select post types"
181
- #~ msgstr "Выбрать тип записи"
182
-
183
- #~ msgid "Replace external links in comments on the JavaScript code"
184
- #~ msgstr "Заменить внешние ссылки в комментариях на JavaScript код"
185
-
186
- #~ msgid "Replace external links from comment authors on the JavaScript code"
187
- #~ msgstr "Заменить внешние ссылки от авторов комментариев на код JavaScript"
188
-
189
- #~ msgid "Disable X-Pingback"
190
- #~ msgstr "Убрать ссылку на X-Pingback и возможность спамить pingback-ами"
191
-
192
- #~ msgid "Remove field \"site\" in comment form"
193
- #~ msgstr "Удаляет поле \"Сайт\" в форме комментариев"
194
-
195
- #~ msgid "Disable all comments"
196
- #~ msgstr "Отключить все комментарии"
197
-
198
- #~ msgid "Comments"
199
- #~ msgstr "Комментарии"
200
-
201
- #~ msgid ""
202
- #~ "Hide selected notices only. You will see the link \"Hide notification "
203
- #~ "forever\" in each notice. Push it and they will not bother you anymore. "
204
- #~ "Push <a href=\"%s\">reset hidden notices (%d)</a> if you need to show "
205
- #~ "hidden notices again."
206
- #~ msgstr ""
207
- #~ "Скрывать только выбранные уведомления. В каждом уведомлении вы увидите "
208
- #~ "ссылку \"Скрыть уведомление навсегда\". Нажмите на неё и уведомление "
209
- #~ "будет скрыто навсегда и перестанет вас беспокоить. Нажмите <a href=\"%s"
210
- #~ "\">сбросить скрытые уведомления (%d)</a>, если вам нужно восстановить "
211
- #~ "показ скрытых ранее уведомлений."
212
-
213
- #~ msgid "Webcraftic hide admin notices"
214
- #~ msgstr "Webcraftic скрыть уведомления администратора"
215
-
216
- #~ msgid "Comments tweaks"
217
- #~ msgstr "Инструменты комментариев"
218
-
219
- #~ msgid "All comments have been deleted."
220
- #~ msgstr "Все комментарии были удалены."
221
-
222
- #~ msgid ""
223
- #~ "An error occurred while trying to delete comments. Internal error "
224
- #~ "occured. Please try again later."
225
- #~ msgstr ""
226
- #~ "При попытке удалить комментарии произошла ошибка. Пожалуйста, повторите "
227
- #~ "попытку позже."
228
-
229
- #~ msgid "You are not allowed to view this page."
230
- #~ msgstr "Вам не разрешено просматривать эту страницу."
231
-
232
- #~ msgid "You do not have the selected post types!"
233
- #~ msgstr "Вы не выбрали еще ни одного типа записей!"
234
-
235
- #~ msgid "No comments available for deletion."
236
- #~ msgstr "Нет комментариев для удаления."
237
-
238
- #~ msgid ""
239
- #~ "Are you sure that you desire to delete all comments from the database?"
240
- #~ msgstr "Вы уверены, что хотите удалить все комментарии из базы данных?"
241
-
242
- #~ msgid ""
243
- #~ "Deleting comments will remove existing comment entries in the database "
244
- #~ "and cannot be reverted without a database backup."
245
- #~ msgstr ""
246
- #~ "При удалении комментариев удаляются существующие записи комментариев в "
247
- #~ "базе данных, они не могут быть восстановлены без резервного копирования "
248
- #~ "базы данных."
249
-
250
- #~ msgid "You have %s comments"
251
- #~ msgstr "У вас есть %s комментариев"
252
-
253
- #~ msgid "Yes, I'm sure"
254
- #~ msgstr "Да, я уверен"
255
-
256
- #~ msgid "No, return back"
257
- #~ msgstr "Нет, вернуться"
258
-
259
- #~ msgid ""
260
- #~ "Are you sure that you desire to delete all comments from the database for "
261
- #~ "the selected post types (%s)?"
262
- #~ msgstr ""
263
- #~ "Вы уверены, что хотите удалить все комментарии из базы данных для "
264
- #~ "выбранных типов записей (%s)?"
265
-
266
- #~ msgid "Disable comments"
267
- #~ msgstr "Отключить комментарии"
268
-
269
- #~ msgid "Not disable"
270
- #~ msgstr "Не отключать"
271
-
272
- #~ msgid "Everywhere"
273
- #~ msgstr "Повсюду"
274
-
275
- #~ msgid ""
276
- #~ "You can delete all comments in the database by clicking on this link (<a "
277
- #~ "href=\"%s\">cleaning comments in database</a>)."
278
- #~ msgstr ""
279
- #~ "Вы можете удалить все комментарии в базе данных, нажав на эту ссылку ( <a "
280
- #~ "href=\"%s\">очистка комментариев в базе данных</a> )."
281
-
282
- #~ msgid "On certain post types"
283
- #~ msgstr "Только выбранные типы записей"
284
-
285
- #~ msgid ""
286
- #~ "You can delete all comments for the selected post types. Select the post "
287
- #~ "types below and save the settings. After that, click the link (<a href="
288
- #~ "\"%s\">delete all comments for the selected post types in database</a>)."
289
- #~ msgstr ""
290
- #~ "Вы можете удалить все комментарии для выбранных типов записей. Выберите "
291
- #~ "типы записей ниже и сохраните настройки. После этого нажмите ссылку ( <a "
292
- #~ "href=\"%s\">удалите все комментарии для выбранных типов записей в базе "
293
- #~ "данных</a> )."
294
-
295
- #~ msgid ""
296
- #~ "Everywhere - Warning: This option is global and will affect your entire "
297
- #~ "site. Use it only if you want to disable comments everywhere. A complete "
298
- #~ "description of what this option does is available here"
299
- #~ msgstr ""
300
- #~ "Повсюду - предупреждение: этот параметр является глобальным и повлияет на "
301
- #~ "весь ваш сайт. Используйте его только в том случае, если вы хотите "
302
- #~ "отключить комментарии повсюду. "
303
-
304
- #~ msgid ""
305
- #~ "On certain post types - Disabling comments will also disable trackbacks "
306
- #~ "and pingbacks. All comment-related fields will also be hidden from the "
307
- #~ "edit/quick-edit screens of the affected posts. These settings cannot be "
308
- #~ "overridden for individual posts."
309
- #~ msgstr ""
310
- #~ "В некоторых типах сообщений - отключение комментариев также отключает "
311
- #~ "трекбэки и pingback. Все поля, связанные с комментариями, также будут "
312
- #~ "скрыты от экранов редактирования / быстрого редактирования затронутых "
313
- #~ "сообщений. Эти настройки нельзя переопределять для отдельных сообщений."
314
-
315
- #~ msgid "Select the post types for which comments will be disabled"
316
- #~ msgstr "Выберите типы записей, для которых комментарии будут отключены."
317
-
318
- #~ msgid ""
319
- #~ "Tired of spam in the comments? Do visitors leave \"blank\" comments for "
320
- #~ "the sake of a link to their site?"
321
- #~ msgstr ""
322
- #~ "Надоел спам в комментариях? Посетители оставляют «пустые» комментарии "
323
- #~ "ради ссылки на свой сайт?"
324
-
325
- #~ msgid "Removes the \"Site\" field from the comment form."
326
- #~ msgstr "Убирает поле «Сайт» из формы комментирования."
327
-
328
- #~ msgid ""
329
- #~ "Works with the standard comment form, if the form is manually written in "
330
- #~ "your theme-it probably will not work!"
331
- #~ msgstr ""
332
- #~ "Работает со стандартной формой комментирования, если в Вашей теме форма "
333
- #~ "прописана вручную - скорей всего не сработает!"
334
-
335
- #~ msgid "Recommended"
336
- #~ msgstr "Рекомендовано"
337
-
338
- #~ msgid ""
339
- #~ "Superfluous external links from comments, which can be typed from a dozen "
340
- #~ "and more for one article, do not bring anything good for promotion."
341
- #~ msgstr ""
342
- #~ "Внешние ссылки в комментариях, которых может быть десятки или больше на "
343
- #~ "одной странице, могут ухудшить продвижение вашего сайта."
344
-
345
- #~ msgid "Replaces the links of this kind of %s, on links of this kind %s"
346
- #~ msgstr ""
347
- #~ "Заменяет ссылки %s, на span тег и устанавливает переход с помощью "
348
- #~ "JavaScript %s"
349
-
350
- #~ msgid ""
351
- #~ "Up to 90 percent of comments in the blog can be left for the sake of an "
352
- #~ "external link. Even nofollow from page weight loss here does not help."
353
- #~ msgstr ""
354
- #~ "До 90 процентов комментариев в блоге оставляют ради внешней ссылки. Не "
355
- #~ "поможет даже nofollow от потери веса страницы."
356
-
357
- #~ msgid ""
358
- #~ "Replaces the links of the authors of comments on the JavaScript code, it "
359
- #~ "is impossible to distinguish it from usual links."
360
- #~ msgstr ""
361
- #~ "Заменяет ссылки авторов комментариев на JavaScript код, его невозможно "
362
- #~ "отличить от обычной ссылки."
363
-
364
- #~ msgid "In some Wordpress topics this may not work."
365
- #~ msgstr "В некоторых темах Wordpress это может не сработать."
366
-
367
- #~ msgid "Disable XML-RPC"
368
- #~ msgstr "Отключить XML-RPC"
369
-
370
- #~ msgid ""
371
- #~ "A pingback is basically an automated comment that gets created when "
372
- #~ "another blog links to you. A self-pingback is created when you link to an "
373
- #~ "article within your own blog. Pingbacks are essentially nothing more than "
374
- #~ "spam and simply waste resources."
375
- #~ msgstr ""
376
- #~ "Pingback по-существу автоматизированных комментарий, который создается, "
377
- #~ "когда другой блог ссылается на вас. Self-pingback создается, когда вы "
378
- #~ "оставили ссылку на статью в своем блоге. Pingbacks по существу являются "
379
- #~ "не более чем спам и пустая трата ресурсов вашего сайта."
380
-
381
- #~ msgid "Removes the server responses a reference to the xmlrpc file."
382
- #~ msgstr "Удаляет ссылку на xmlrpc-файл и ответ сервера."
383
-
384
- #~ msgid ""
385
- #~ "We found that you have the \"Clearfy - disable unused features\" plugin "
386
- #~ "installed, this plugin already has disable comments functions, so you can "
387
- #~ "deactivate plugin \"Comments tweaks\"!"
388
- #~ msgstr ""
389
- #~ "Мы обнаружили, что у вас установлен плагин «Clearfy - отключить "
390
- #~ "неиспользуемые функции», этот плагин уже имеет функции отключения "
391
- #~ "комментариев, поэтому вы можете отключить плагин «Инструменты "
392
- #~ "комментариев»!"
393
-
394
- #~ msgid "Webcraftic comments tweaks"
395
- #~ msgstr "Webcraftic инструменты комментариев"
396
-
397
- #~ msgid "Comments are closed."
398
- #~ msgstr "Комментарии Закрыты."
399
-
400
- #~ msgid ""
401
- #~ "Note: The <em>%s</em> plugin is currently active, and comments are "
402
- #~ "completely disabled on: %s. Many of the settings below will not be "
403
- #~ "applicable for those post types."
404
- #~ msgstr ""
405
- #~ "Примечание. Плагин <em>%s</em> в настоящий момент активен, и комментарии "
406
- #~ "полностью отключены: %s. Многие из приведенных ниже настроек не будут "
407
- #~ "применяться для этих типов сообщений."
408
-
409
- #~ msgid ""
410
- #~ "We found that you have the \"Clearfy - disable unused features\" plugin "
411
- #~ "installed, this plugin already has disable comments functions, so you can "
412
- #~ "deactivate plugin \"Disable comments\"!"
413
- #~ msgstr ""
414
- #~ "Мы обнаружили, что у вас установлен плагин «Clearfy - отключить "
415
- #~ "неиспользуемые функции», этот плагин уже имеет функции отключения "
416
- #~ "комментариев, поэтому вы можете отключить плагин «Отключить комментарии»!"
417
-
418
- #~ msgid "Webcraftic Disable comments"
419
- #~ msgstr "Webcraftic отключить комментарии"
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: clearfy\n"
4
+ "POT-Creation-Date: 2018-03-14 17:34+0300\n"
5
+ "PO-Revision-Date: 2018-03-14 17:34+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: 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 1.8.8\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
+
21
+ #: admin/ajax/hide-notice.php:19 admin/ajax/restore-notice.php:19
22
+ msgid "You don't have enough capability to edit this information."
23
+ msgstr "Вы не имеете разрешения на редактирование этого!"
24
+
25
+ #: admin/ajax/hide-notice.php:32 admin/ajax/restore-notice.php:28
26
+ msgid "Undefinded notice id."
27
+ msgstr "Не передан notice id."
28
+
29
+ #: admin/ajax/hide-notice.php:46 admin/ajax/restore-notice.php:40
30
+ msgid "Success"
31
+ msgstr "Успешно"
32
+
33
+ #: admin/boot.php:29 admin/options.php:32 admin/pages/notices.php:33
34
+ msgid "Hide admin notices"
35
+ msgstr "Скрыть уведомления"
36
+
37
+ #: admin/boot.php:35 admin/options.php:72
38
+ msgid "Enable hidden notices in adminbar"
39
+ msgstr "Включить уведомления в админбаре"
40
+
41
+ #: admin/boot.php:51
42
+ msgid "Get ultimate plugin free"
43
+ msgstr "Получите полную версию плагина бесплатно"
44
+
45
+ #: admin/options.php:24
46
+ msgid "Admin notifications, Update nags"
47
+ msgstr "Уведомления администратора, уведомления об обновлении Wordpress"
48
+
49
+ #: admin/options.php:24
50
+ msgid ""
51
+ "Do you know the situation, when some plugin offers you to update to premium, "
52
+ "to collect technical data and shows many annoying notices? You are close "
53
+ "these notices every now and again but they newly appears and interfere your "
54
+ "work with WordPress. Even worse, some plugin’s authors delete “close” button "
55
+ "from notices and they shows in your admin panel forever."
56
+ msgstr ""
57
+ "Вам знакома ситуация, когда какой-то плагин просит вас обновиться до премиум-"
58
+ "версии, получить права на сбор данных о вашем сайте и создает много "
59
+ "раздражающих уведомлений? Вы закрываете эти уведомления раз за разом, но они "
60
+ "вновь появляются и мешают вашей работе с WordPress. Хуже того, некоторые "
61
+ "авторы и вовсе удаляют кнопку “закрыть” из уведомлений, и они висят в шапке "
62
+ "вашей панели администратора целую вечность."
63
+
64
+ #: admin/options.php:36
65
+ msgid "All notices"
66
+ msgstr "Все уведомления"
67
+
68
+ #: admin/options.php:37
69
+ msgid "Hide all notices globally."
70
+ msgstr "Скрыть все уведомления глобально."
71
+
72
+ #: admin/options.php:41
73
+ msgid "Only selected"
74
+ msgstr "Только выбранные"
75
+
76
+ #: admin/options.php:42
77
+ msgid ""
78
+ "Hide selected notices only. You will see the link \"Hide notification forever"
79
+ "\" in each notice. Push it and they will not bother you anymore."
80
+ msgstr ""
81
+ "Скрывать только выбранные уведомления. В каждом уведомлении вы увидите "
82
+ "ссылку \"Скрыть уведомление навсегда\". Нажмите на неё и уведомление будет "
83
+ "скрыто навсегда и перестанет вас беспокоить."
84
+
85
+ #: admin/options.php:46
86
+ msgid "Don't nide"
87
+ msgstr "Не скрывать"
88
+
89
+ #: admin/options.php:47
90
+ msgid ""
91
+ "Do not hide notices and do not show “Hide notification forever” link for "
92
+ "admin."
93
+ msgstr ""
94
+ "Не скрывать уведомления и не показывать ссылку \"Скрыть уведомление навсегда"
95
+ "\" в уведомлениях администратора."
96
+
97
+ #: admin/options.php:51
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
+ "версию, просят разрешение на сбор данных, рекламируют свои услуги. Даже если "
110
+ "вы нажмете кнопку закрыть (что не всегда возможно), уведомления всё равно "
111
+ "отобразятся через какое-то время. С помощью этой настройки, вы можете "
112
+ "контролировать эти уведомления. Скройте их все сразу или каждое по "
113
+ "отдельности."
114
+
115
+ #: admin/options.php:74
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
+ "По умолчанию, плагин полностью скрывает отключенные вами уведомления. Если "
123
+ "включить эту опцию, то плагин будет собирать все скрытые вами уведомления и "
124
+ "выводить в верхней панели администратора. Это не будет вас раздражать, но и "
125
+ "позволит просматривать уведомления, когда вам это удобно."
126
+
127
+ #: admin/options.php:138
128
+ msgid "Push reset hidden notices if you need to show hidden notices again."
129
+ msgstr "Нажмите кнопку \\\"Сбросить скрытые уведомления\\\""
130
+
131
+ #: admin/options.php:147
132
+ #, php-format
133
+ msgid "Reset hidden notices (%s)"
134
+ msgstr "Сбросить скрытые уведомления (%s)"
135
+
136
+ #: admin/options.php:149 admin/pages/notices.php:67
137
+ msgid "Hidden notices are successfully reset, now you can see them again!"
138
+ msgstr ""
139
+ "Скрытые уведомления успешно восстановлены, теперь вы можете снова видеть их!"
140
+
141
+ #: admin/pages/notices.php:49
142
+ msgid "Notices"
143
+ msgstr "Уведомления"
144
+
145
+ #: admin/pages/notices.php:50
146
+ msgid "General"
147
+ msgstr "Основные"
148
+
149
+ #: disable-admin-notices.php:22
150
+ msgid ""
151
+ "We found that you have the \"Clearfy - disable unused features\" plugin "
152
+ "installed, this plugin already has disable comments functions, so you can "
153
+ "deactivate plugin \"Disable admin notices\"!"
154
+ msgstr ""
155
+ "Мы обнаружили, что у вас установлен плагин «Clearfy - отключить "
156
+ "неиспользуемые функции», этот плагин уже имеет функции отключения "
157
+ "комментариев, поэтому вы можете отключить плагин «Скрыть уведомления "
158
+ "администратора»!"
159
+
160
+ #: disable-admin-notices.php:79
161
+ msgid "Webcraftic disable admin notices"
162
+ msgstr "Webcraftic отключить уведомления администратора"
163
+
164
+ #: includes/classes/class.configurate-notices.php:79
165
+ #, php-format
166
+ msgid "Notifications %s"
167
+ msgstr "Уведомления %s"
168
+
169
+ #: includes/classes/class.configurate-notices.php:88
170
+ msgid "Restore notice"
171
+ msgstr "Восстановить уведомление"
172
+
173
+ #: includes/classes/class.configurate-notices.php:263
174
+ msgid "Hide notification forever"
175
+ msgstr "Скрыть уведомление навсегда"
176
+
177
+ #~ msgid "Hidden notices"
178
+ #~ msgstr "Скрытые уведомления"
179
+
180
+ #~ msgid "Disable comments on the entire site"
181
+ #~ msgstr "Отключить комментарии на всем сайте"
182
+
183
+ #~ msgid "Select post types"
184
+ #~ msgstr "Выбрать тип записи"
185
+
186
+ #~ msgid "Replace external links in comments on the JavaScript code"
187
+ #~ msgstr "Заменить внешние ссылки в комментариях на JavaScript код"
188
+
189
+ #~ msgid "Replace external links from comment authors on the JavaScript code"
190
+ #~ msgstr "Заменить внешние ссылки от авторов комментариев на код JavaScript"
191
+
192
+ #~ msgid "Disable X-Pingback"
193
+ #~ msgstr "Убрать ссылку на X-Pingback и возможность спамить pingback-ами"
194
+
195
+ #~ msgid "Remove field \"site\" in comment form"
196
+ #~ msgstr "Удаляет поле \"Сайт\" в форме комментариев"
197
+
198
+ #~ msgid "Disable all comments"
199
+ #~ msgstr "Отключить все комментарии"
200
+
201
+ #~ msgid "Comments"
202
+ #~ msgstr "Комментарии"
203
+
204
+ #~ msgid ""
205
+ #~ "Hide selected notices only. You will see the link \"Hide notification "
206
+ #~ "forever\" in each notice. Push it and they will not bother you anymore. "
207
+ #~ "Push <a href=\"%s\">reset hidden notices (%d)</a> if you need to show "
208
+ #~ "hidden notices again."
209
+ #~ msgstr ""
210
+ #~ "Скрывать только выбранные уведомления. В каждом уведомлении вы увидите "
211
+ #~ "ссылку \"Скрыть уведомление навсегда\". Нажмите на неё и уведомление "
212
+ #~ "будет скрыто навсегда и перестанет вас беспокоить. Нажмите <a href=\"%s"
213
+ #~ "\">сбросить скрытые уведомления (%d)</a>, если вам нужно восстановить "
214
+ #~ "показ скрытых ранее уведомлений."
215
+
216
+ #~ msgid "Webcraftic hide admin notices"
217
+ #~ msgstr "Webcraftic скрыть уведомления администратора"
218
+
219
+ #~ msgid "Comments tweaks"
220
+ #~ msgstr "Инструменты комментариев"
221
+
222
+ #~ msgid "All comments have been deleted."
223
+ #~ msgstr "Все комментарии были удалены."
224
+
225
+ #~ msgid ""
226
+ #~ "An error occurred while trying to delete comments. Internal error "
227
+ #~ "occured. Please try again later."
228
+ #~ msgstr ""
229
+ #~ "При попытке удалить комментарии произошла ошибка. Пожалуйста, повторите "
230
+ #~ "попытку позже."
231
+
232
+ #~ msgid "You are not allowed to view this page."
233
+ #~ msgstr "Вам не разрешено просматривать эту страницу."
234
+
235
+ #~ msgid "You do not have the selected post types!"
236
+ #~ msgstr "Вы не выбрали еще ни одного типа записей!"
237
+
238
+ #~ msgid "No comments available for deletion."
239
+ #~ msgstr "Нет комментариев для удаления."
240
+
241
+ #~ msgid ""
242
+ #~ "Are you sure that you desire to delete all comments from the database?"
243
+ #~ msgstr "Вы уверены, что хотите удалить все комментарии из базы данных?"
244
+
245
+ #~ msgid ""
246
+ #~ "Deleting comments will remove existing comment entries in the database "
247
+ #~ "and cannot be reverted without a database backup."
248
+ #~ msgstr ""
249
+ #~ "При удалении комментариев удаляются существующие записи комментариев в "
250
+ #~ "базе данных, они не могут быть восстановлены без резервного копирования "
251
+ #~ "базы данных."
252
+
253
+ #~ msgid "You have %s comments"
254
+ #~ msgstr "У вас есть %s комментариев"
255
+
256
+ #~ msgid "Yes, I'm sure"
257
+ #~ msgstr "Да, я уверен"
258
+
259
+ #~ msgid "No, return back"
260
+ #~ msgstr "Нет, вернуться"
261
+
262
+ #~ msgid ""
263
+ #~ "Are you sure that you desire to delete all comments from the database for "
264
+ #~ "the selected post types (%s)?"
265
+ #~ msgstr ""
266
+ #~ "Вы уверены, что хотите удалить все комментарии из базы данных для "
267
+ #~ "выбранных типов записей (%s)?"
268
+
269
+ #~ msgid "Disable comments"
270
+ #~ msgstr "Отключить комментарии"
271
+
272
+ #~ msgid "Not disable"
273
+ #~ msgstr "Не отключать"
274
+
275
+ #~ msgid "Everywhere"
276
+ #~ msgstr "Повсюду"
277
+
278
+ #~ msgid ""
279
+ #~ "You can delete all comments in the database by clicking on this link (<a "
280
+ #~ "href=\"%s\">cleaning comments in database</a>)."
281
+ #~ msgstr ""
282
+ #~ "Вы можете удалить все комментарии в базе данных, нажав на эту ссылку ( <a "
283
+ #~ "href=\"%s\">очистка комментариев в базе данных</a> )."
284
+
285
+ #~ msgid "On certain post types"
286
+ #~ msgstr "Только выбранные типы записей"
287
+
288
+ #~ msgid ""
289
+ #~ "You can delete all comments for the selected post types. Select the post "
290
+ #~ "types below and save the settings. After that, click the link (<a href="
291
+ #~ "\"%s\">delete all comments for the selected post types in database</a>)."
292
+ #~ msgstr ""
293
+ #~ "Вы можете удалить все комментарии для выбранных типов записей. Выберите "
294
+ #~ "типы записей ниже и сохраните настройки. После этого нажмите ссылку ( <a "
295
+ #~ "href=\"%s\">удалите все комментарии для выбранных типов записей в базе "
296
+ #~ "данных</a> )."
297
+
298
+ #~ msgid ""
299
+ #~ "Everywhere - Warning: This option is global and will affect your entire "
300
+ #~ "site. Use it only if you want to disable comments everywhere. A complete "
301
+ #~ "description of what this option does is available here"
302
+ #~ msgstr ""
303
+ #~ "Повсюду - предупреждение: этот параметр является глобальным и повлияет на "
304
+ #~ "весь ваш сайт. Используйте его только в том случае, если вы хотите "
305
+ #~ "отключить комментарии повсюду. "
306
+
307
+ #~ msgid ""
308
+ #~ "On certain post types - Disabling comments will also disable trackbacks "
309
+ #~ "and pingbacks. All comment-related fields will also be hidden from the "
310
+ #~ "edit/quick-edit screens of the affected posts. These settings cannot be "
311
+ #~ "overridden for individual posts."
312
+ #~ msgstr ""
313
+ #~ "В некоторых типах сообщений - отключение комментариев также отключает "
314
+ #~ "трекбэки и pingback. Все поля, связанные с комментариями, также будут "
315
+ #~ "скрыты от экранов редактирования / быстрого редактирования затронутых "
316
+ #~ "сообщений. Эти настройки нельзя переопределять для отдельных сообщений."
317
+
318
+ #~ msgid "Select the post types for which comments will be disabled"
319
+ #~ msgstr "Выберите типы записей, для которых комментарии будут отключены."
320
+
321
+ #~ msgid ""
322
+ #~ "Tired of spam in the comments? Do visitors leave \"blank\" comments for "
323
+ #~ "the sake of a link to their site?"
324
+ #~ msgstr ""
325
+ #~ "Надоел спам в комментариях? Посетители оставляют «пустые» комментарии "
326
+ #~ "ради ссылки на свой сайт?"
327
+
328
+ #~ msgid "Removes the \"Site\" field from the comment form."
329
+ #~ msgstr "Убирает поле «Сайт» из формы комментирования."
330
+
331
+ #~ msgid ""
332
+ #~ "Works with the standard comment form, if the form is manually written in "
333
+ #~ "your theme-it probably will not work!"
334
+ #~ msgstr ""
335
+ #~ "Работает со стандартной формой комментирования, если в Вашей теме форма "
336
+ #~ "прописана вручную - скорей всего не сработает!"
337
+
338
+ #~ msgid "Recommended"
339
+ #~ msgstr "Рекомендовано"
340
+
341
+ #~ msgid ""
342
+ #~ "Superfluous external links from comments, which can be typed from a dozen "
343
+ #~ "and more for one article, do not bring anything good for promotion."
344
+ #~ msgstr ""
345
+ #~ "Внешние ссылки в комментариях, которых может быть десятки или больше на "
346
+ #~ "одной странице, могут ухудшить продвижение вашего сайта."
347
+
348
+ #~ msgid "Replaces the links of this kind of %s, on links of this kind %s"
349
+ #~ msgstr ""
350
+ #~ "Заменяет ссылки %s, на span тег и устанавливает переход с помощью "
351
+ #~ "JavaScript %s"
352
+
353
+ #~ msgid ""
354
+ #~ "Up to 90 percent of comments in the blog can be left for the sake of an "
355
+ #~ "external link. Even nofollow from page weight loss here does not help."
356
+ #~ msgstr ""
357
+ #~ "До 90 процентов комментариев в блоге оставляют ради внешней ссылки. Не "
358
+ #~ "поможет даже nofollow от потери веса страницы."
359
+
360
+ #~ msgid ""
361
+ #~ "Replaces the links of the authors of comments on the JavaScript code, it "
362
+ #~ "is impossible to distinguish it from usual links."
363
+ #~ msgstr ""
364
+ #~ "Заменяет ссылки авторов комментариев на JavaScript код, его невозможно "
365
+ #~ "отличить от обычной ссылки."
366
+
367
+ #~ msgid "In some Wordpress topics this may not work."
368
+ #~ msgstr "В некоторых темах Wordpress это может не сработать."
369
+
370
+ #~ msgid "Disable XML-RPC"
371
+ #~ msgstr "Отключить XML-RPC"
372
+
373
+ #~ msgid ""
374
+ #~ "A pingback is basically an automated comment that gets created when "
375
+ #~ "another blog links to you. A self-pingback is created when you link to an "
376
+ #~ "article within your own blog. Pingbacks are essentially nothing more than "
377
+ #~ "spam and simply waste resources."
378
+ #~ msgstr ""
379
+ #~ "Pingback по-существу автоматизированных комментарий, который создается, "
380
+ #~ "когда другой блог ссылается на вас. Self-pingback создается, когда вы "
381
+ #~ "оставили ссылку на статью в своем блоге. Pingbacks по существу являются "
382
+ #~ "не более чем спам и пустая трата ресурсов вашего сайта."
383
+
384
+ #~ msgid "Removes the server responses a reference to the xmlrpc file."
385
+ #~ msgstr "Удаляет ссылку на xmlrpc-файл и ответ сервера."
386
+
387
+ #~ msgid ""
388
+ #~ "We found that you have the \"Clearfy - disable unused features\" plugin "
389
+ #~ "installed, this plugin already has disable comments functions, so you can "
390
+ #~ "deactivate plugin \"Comments tweaks\"!"
391
+ #~ msgstr ""
392
+ #~ "Мы обнаружили, что у вас установлен плагин «Clearfy - отключить "
393
+ #~ "неиспользуемые функции», этот плагин уже имеет функции отключения "
394
+ #~ "комментариев, поэтому вы можете отключить плагин «Инструменты "
395
+ #~ "комментариев»!"
396
+
397
+ #~ msgid "Webcraftic comments tweaks"
398
+ #~ msgstr "Webcraftic инструменты комментариев"
399
+
400
+ #~ msgid "Comments are closed."
401
+ #~ msgstr "Комментарии Закрыты."
402
+
403
+ #~ msgid ""
404
+ #~ "Note: The <em>%s</em> plugin is currently active, and comments are "
405
+ #~ "completely disabled on: %s. Many of the settings below will not be "
406
+ #~ "applicable for those post types."
407
+ #~ msgstr ""
408
+ #~ "Примечание. Плагин <em>%s</em> в настоящий момент активен, и комментарии "
409
+ #~ "полностью отключены: %s. Многие из приведенных ниже настроек не будут "
410
+ #~ "применяться для этих типов сообщений."
411
+
412
+ #~ msgid ""
413
+ #~ "We found that you have the \"Clearfy - disable unused features\" plugin "
414
+ #~ "installed, this plugin already has disable comments functions, so you can "
415
+ #~ "deactivate plugin \"Disable comments\"!"
416
+ #~ msgstr ""
417
+ #~ "Мы обнаружили, что у вас установлен плагин «Clearfy - отключить "
418
+ #~ "неиспользуемые функции», этот плагин уже имеет функции отключения "
419
+ #~ "комментариев, поэтому вы можете отключить плагин «Отключить комментарии»!"
420
+
421
+ #~ msgid "Webcraftic Disable comments"
422
+ #~ msgstr "Webcraftic отключить комментарии"
languages/index.php ADDED
File without changes
libs/factory/bootstrap/assets/css-min/bootstrap.accordion.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .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-400 .factory-accordion>h3{border-bottom:1px solid #DDD;cursor:pointer;padding:8px 15px;margin:0}.factory-bootstrap-400 .factory-accordion>div{display:none;margin:0;border-bottom:1px solid #DDD}.factory-bootstrap-400 .factory-accordion-item{display:none}.factory-bootstrap-400 .inner-factory-accordion-item{padding:10px 0}.factory-bootstrap-400 .factory-accordion>h3.active:hover{cursor:default}
libs/factory/bootstrap/assets/css-min/bootstrap.blue.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .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-400 .btn-primary:focus,.factory-bootstrap-400 .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-400 .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-400 .btn-primary:disabled,.factory-bootstrap-400 .btn-primary[disabled]{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.factory-bootstrap-400 .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-400 .pagination>.active>a,.factory-bootstrap-400 .pagination>.active>a:focus,.factory-bootstrap-400 .pagination>.active>a:hover,.factory-bootstrap-400 .pagination>.active>span,.factory-bootstrap-400 .pagination>.active>span:focus,.factory-bootstrap-400 .pagination>.active>span:hover{background-color:#e1a948;border-color:#d39323}
libs/factory/bootstrap/assets/css-min/bootstrap.coffee.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .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-400 .btn-primary:focus,.factory-bootstrap-400 .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-400 .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-400 .btn-primary:disabled,.factory-bootstrap-400 .btn-primary[disabled]{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.factory-bootstrap-400 .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-400 .pagination>.active>a,.factory-bootstrap-400 .pagination>.active>a:focus,.factory-bootstrap-400 .pagination>.active>a:hover,.factory-bootstrap-400 .pagination>.active>span,.factory-bootstrap-400 .pagination>.active>span:focus,.factory-bootstrap-400 .pagination>.active>span:hover{background-color:#c7a589;border-color:#b78a66}
libs/factory/bootstrap/assets/css-min/bootstrap.core.min.css ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 article,.factory-bootstrap-400 aside,.factory-bootstrap-400 details,.factory-bootstrap-400 figcaption,.factory-bootstrap-400 figure,.factory-bootstrap-400 footer,.factory-bootstrap-400 header,.factory-bootstrap-400 hgroup,.factory-bootstrap-400 main,.factory-bootstrap-400 nav,.factory-bootstrap-400 section,.factory-bootstrap-400 summary{display:block}.factory-bootstrap-400 audio,.factory-bootstrap-400 canvas,.factory-bootstrap-400 video{display:inline-block}.factory-bootstrap-400 audio:not([controls]){display:none;height:0}.factory-bootstrap-400 [hidden],.factory-bootstrap-400 template{display:none}.factory-bootstrap-400 body{margin:0}.factory-bootstrap-400 a{background:0 0}.factory-bootstrap-400 a:focus{outline:thin dotted}.factory-bootstrap-400 a:active,.factory-bootstrap-400 a:hover{outline:0}.factory-bootstrap-400 h1{margin:.67em 0}.factory-bootstrap-400 b,.factory-bootstrap-400 strong{font-weight:700}.factory-bootstrap-400 dfn{font-style:italic}.factory-bootstrap-400 hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-400 mark{color:#000;background:#ff0}.factory-bootstrap-400 code,.factory-bootstrap-400 kbd,.factory-bootstrap-400 pre,.factory-bootstrap-400 samp{font-size:1em}.factory-bootstrap-400 pre{white-space:pre-wrap}.factory-bootstrap-400 q{quotes:"\201C" "\201D" "\2018" "\2019"}.factory-bootstrap-400 sub,.factory-bootstrap-400 sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.factory-bootstrap-400 sup{top:-.5em}.factory-bootstrap-400 sub{bottom:-.25em}.factory-bootstrap-400 img{border:0}.factory-bootstrap-400 svg:not(:root){overflow:hidden}.factory-bootstrap-400 figure{margin:0}.factory-bootstrap-400 button,.factory-bootstrap-400 input,.factory-bootstrap-400 select,.factory-bootstrap-400 textarea{margin:0}.factory-bootstrap-400 button,.factory-bootstrap-400 select{text-transform:none}.factory-bootstrap-400 select{padding-right:4px!important}.factory-bootstrap-400 button,.factory-bootstrap-400 input[type=reset],.factory-bootstrap-400 input[type=submit],html .factory-bootstrap-400 input[type=button]{cursor:pointer;-webkit-appearance:button}.factory-bootstrap-400 button[disabled],html .factory-bootstrap-400 input[disabled]{cursor:default}.factory-bootstrap-400 input[type=checkbox],.factory-bootstrap-400 input[type=radio]{padding:0;box-sizing:border-box}.factory-bootstrap-400 input[type=search]{-webkit-appearance:textfield}.factory-bootstrap-400 input[type=search]::-webkit-search-cancel-button,.factory-bootstrap-400 input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.factory-bootstrap-400 button::-moz-focus-inner,.factory-bootstrap-400 input::-moz-focus-inner{padding:0;border:0}.factory-bootstrap-400 textarea{overflow:auto;vertical-align:top}.factory-bootstrap-400 table{border-collapse:collapse;border-spacing:0}@media print{.factory-bootstrap-400 *{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}.factory-bootstrap-400 a,.factory-bootstrap-400 a:visited{text-decoration:underline}.factory-bootstrap-400 a[href]:after{content:" (" attr(href) ")"}.factory-bootstrap-400 abbr[title]:after{content:" (" attr(title) ")"}.factory-bootstrap-400 a[href^="javascript:"]:after,.factory-bootstrap-400 a[href^="#"]:after{content:""}.factory-bootstrap-400 blockquote,.factory-bootstrap-400 pre{border:1px solid #999;page-break-inside:avoid}.factory-bootstrap-400 thead{display:table-header-group}.factory-bootstrap-400 img,.factory-bootstrap-400 tr{page-break-inside:avoid}.factory-bootstrap-400 img{max-width:100%!important}@page{margin:2cm .5cm}.factory-bootstrap-400 h2,.factory-bootstrap-400 h3,.factory-bootstrap-400 p{orphans:3;widows:3}.factory-bootstrap-400 h2,.factory-bootstrap-400 h3{page-break-after:avoid}.factory-bootstrap-400 select{background:#fff!important}.factory-bootstrap-400 .navbar{display:none}.factory-bootstrap-400 .table td,.factory-bootstrap-400 .table th{background-color:#fff!important}.factory-bootstrap-400 .btn>.caret,.factory-bootstrap-400 .dropup>.btn>.caret{border-top-color:#000!important}.factory-bootstrap-400 .label{border:1px solid #000}.factory-bootstrap-400 .table{border-collapse:collapse!important}.factory-bootstrap-400 .table-bordered td,.factory-bootstrap-400 .table-bordered th{border:1px solid #ddd!important}}.factory-bootstrap-400 *,.factory-bootstrap-400 :after,.factory-bootstrap-400 :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html .factory-bootstrap-400{-webkit-tap-highlight-color:rgba(0,0,0,0)}.factory-bootstrap-400 body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}.factory-bootstrap-400 button,.factory-bootstrap-400 input,.factory-bootstrap-400 select,.factory-bootstrap-400 textarea{font-family:inherit;font-size:inherit;line-height:inherit}.factory-bootstrap-400 img{vertical-align:middle}.factory-bootstrap-400 .img-responsive{display:block;height:auto;max-width:100%}.factory-bootstrap-400 .img-rounded{border-radius:6px}.factory-bootstrap-400 .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-400 .img-circle{border-radius:50%}.factory-bootstrap-400 hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.factory-bootstrap-400 .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.factory-bootstrap-400 .h1,.factory-bootstrap-400 .h2,.factory-bootstrap-400 .h3,.factory-bootstrap-400 .h4,.factory-bootstrap-400 .h5,.factory-bootstrap-400 .h6,.factory-bootstrap-400 h1,.factory-bootstrap-400 h2,.factory-bootstrap-400 h3,.factory-bootstrap-400 h4,.factory-bootstrap-400 h5,.factory-bootstrap-400 h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.factory-bootstrap-400 .h1 .small,.factory-bootstrap-400 .h1 small,.factory-bootstrap-400 .h2 .small,.factory-bootstrap-400 .h2 small,.factory-bootstrap-400 .h3 .small,.factory-bootstrap-400 .h3 small,.factory-bootstrap-400 .h4 .small,.factory-bootstrap-400 .h4 small,.factory-bootstrap-400 .h5 .small,.factory-bootstrap-400 .h5 small,.factory-bootstrap-400 .h6 .small,.factory-bootstrap-400 .h6 small,.factory-bootstrap-400 h1 .small,.factory-bootstrap-400 h1 small,.factory-bootstrap-400 h2 .small,.factory-bootstrap-400 h2 small,.factory-bootstrap-400 h3 .small,.factory-bootstrap-400 h3 small,.factory-bootstrap-400 h4 .small,.factory-bootstrap-400 h4 small,.factory-bootstrap-400 h5 .small,.factory-bootstrap-400 h5 small,.factory-bootstrap-400 h6 .small,.factory-bootstrap-400 h6 small{font-weight:400;line-height:1;color:#999}.factory-bootstrap-400 h1,.factory-bootstrap-400 h2,.factory-bootstrap-400 h3{margin-top:20px;margin-bottom:10px}.factory-bootstrap-400 h1 .small,.factory-bootstrap-400 h1 small,.factory-bootstrap-400 h2 .small,.factory-bootstrap-400 h2 small,.factory-bootstrap-400 h3 .small,.factory-bootstrap-400 h3 small{font-size:65%}.factory-bootstrap-400 h4,.factory-bootstrap-400 h5,.factory-bootstrap-400 h6{margin-top:10px;margin-bottom:10px}.factory-bootstrap-400 h4 .small,.factory-bootstrap-400 h4 small,.factory-bootstrap-400 h5 .small,.factory-bootstrap-400 h5 small,.factory-bootstrap-400 h6 .small,.factory-bootstrap-400 h6 small{font-size:75%}.factory-bootstrap-400 .h1,.factory-bootstrap-400 h1{font-size:36px}.factory-bootstrap-400 .h2,.factory-bootstrap-400 h2{font-size:30px}.factory-bootstrap-400 .h3,.factory-bootstrap-400 h3{font-size:24px}.factory-bootstrap-400 .h4,.factory-bootstrap-400 h4{font-size:18px}.factory-bootstrap-400 .h5,.factory-bootstrap-400 h5{font-size:14px}.factory-bootstrap-400 .h6,.factory-bootstrap-400 h6{font-size:12px}.factory-bootstrap-400 p{margin:0 0 10px}.factory-bootstrap-400 .lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.factory-bootstrap-400 .small,.factory-bootstrap-400 small{font-size:85%}.factory-bootstrap-400 cite{font-style:normal}.factory-bootstrap-400 .text-muted{color:#999}.factory-bootstrap-400 .text-primary{color:#428bca}.factory-bootstrap-400 .text-primary:hover{color:#3071a9}.factory-bootstrap-400 .text-warning{color:#8a6d3b}.factory-bootstrap-400 .text-warning:hover{color:#66512c}.factory-bootstrap-400 .text-danger{color:#a94442}.factory-bootstrap-400 .text-danger:hover{color:#843534}.factory-bootstrap-400 .text-success{color:#3c763d}.factory-bootstrap-400 .text-success:hover{color:#2b542c}.factory-bootstrap-400 .text-info{color:#31708f}.factory-bootstrap-400 .text-info:hover{color:#245269}.factory-bootstrap-400 .text-left{text-align:left}.factory-bootstrap-400 .text-right{text-align:right}.factory-bootstrap-400 .text-center{text-align:center}.factory-bootstrap-400 .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}.factory-bootstrap-400 ol,.factory-bootstrap-400 ul{margin-top:0;margin-bottom:10px}.factory-bootstrap-400 ol ol,.factory-bootstrap-400 ol ul,.factory-bootstrap-400 ul ol,.factory-bootstrap-400 ul ul{margin-bottom:0}.factory-bootstrap-400 .list-inline,.factory-bootstrap-400 .list-unstyled{padding-left:0;list-style:none}.factory-bootstrap-400 .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.factory-bootstrap-400 .list-inline>li:first-child{padding-left:0}.factory-bootstrap-400 dl{margin-top:0;margin-bottom:20px}.factory-bootstrap-400 dd,.factory-bootstrap-400 dt{line-height:1.428571429}.factory-bootstrap-400 dt{font-weight:700}.factory-bootstrap-400 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-400 abbr[data-original-title],.factory-bootstrap-400 abbr[title]{cursor:help;border-bottom:1px dotted #999}.factory-bootstrap-400 .initialism{font-size:90%;text-transform:uppercase}.factory-bootstrap-400 blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}.factory-bootstrap-400 blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}.factory-bootstrap-400 blockquote p:last-child{margin-bottom:0}.factory-bootstrap-400 blockquote .small,.factory-bootstrap-400 blockquote small{display:block;line-height:1.428571429;color:#999}.factory-bootstrap-400 blockquote .small:before,.factory-bootstrap-400 blockquote small:before{content:'\2014 \00A0'}.factory-bootstrap-400 blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}.factory-bootstrap-400 blockquote.pull-right .small,.factory-bootstrap-400 blockquote.pull-right p,.factory-bootstrap-400 blockquote.pull-right small{text-align:right}.factory-bootstrap-400 blockquote.pull-right .small:before,.factory-bootstrap-400 blockquote.pull-right small:before{content:''}.factory-bootstrap-400 blockquote.pull-right .small:after,.factory-bootstrap-400 blockquote.pull-right small:after{content:'\00A0 \2014'}.factory-bootstrap-400 blockquote:after,.factory-bootstrap-400 blockquote:before{content:""}.factory-bootstrap-400 address{margin-bottom:20px;font-style:normal;line-height:1.428571429}.factory-bootstrap-400 code,.factory-bootstrap-400 kbd,.factory-bootstrap-400 pre,.factory-bootstrap-400 samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.factory-bootstrap-400 code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}.factory-bootstrap-400 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-400 pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.factory-bootstrap-400 .pre-scrollable{max-height:340px;overflow-y:scroll}.factory-bootstrap-400 .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.factory-bootstrap-400 .container:after,.factory-bootstrap-400 .container:before{display:table;content:" "}.factory-bootstrap-400 .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-400 .row{margin-right:-15px;margin-left:-15px}.factory-bootstrap-400 .row:after,.factory-bootstrap-400 .row:before{display:table;content:" "}.factory-bootstrap-400 .row:after{clear:both}.factory-bootstrap-400 .col-lg-1,.factory-bootstrap-400 .col-lg-10,.factory-bootstrap-400 .col-lg-11,.factory-bootstrap-400 .col-lg-12,.factory-bootstrap-400 .col-lg-2,.factory-bootstrap-400 .col-lg-3,.factory-bootstrap-400 .col-lg-4,.factory-bootstrap-400 .col-lg-5,.factory-bootstrap-400 .col-lg-6,.factory-bootstrap-400 .col-lg-7,.factory-bootstrap-400 .col-lg-8,.factory-bootstrap-400 .col-lg-9,.factory-bootstrap-400 .col-md-1,.factory-bootstrap-400 .col-md-10,.factory-bootstrap-400 .col-md-11,.factory-bootstrap-400 .col-md-12,.factory-bootstrap-400 .col-md-2,.factory-bootstrap-400 .col-md-3,.factory-bootstrap-400 .col-md-4,.factory-bootstrap-400 .col-md-5,.factory-bootstrap-400 .col-md-6,.factory-bootstrap-400 .col-md-7,.factory-bootstrap-400 .col-md-8,.factory-bootstrap-400 .col-md-9,.factory-bootstrap-400 .col-sm-1,.factory-bootstrap-400 .col-sm-10,.factory-bootstrap-400 .col-sm-11,.factory-bootstrap-400 .col-sm-12,.factory-bootstrap-400 .col-sm-2,.factory-bootstrap-400 .col-sm-3,.factory-bootstrap-400 .col-sm-4,.factory-bootstrap-400 .col-sm-5,.factory-bootstrap-400 .col-sm-6,.factory-bootstrap-400 .col-sm-7,.factory-bootstrap-400 .col-sm-8,.factory-bootstrap-400 .col-sm-9,.factory-bootstrap-400 .col-xs-1,.factory-bootstrap-400 .col-xs-10,.factory-bootstrap-400 .col-xs-11,.factory-bootstrap-400 .col-xs-12,.factory-bootstrap-400 .col-xs-2,.factory-bootstrap-400 .col-xs-3,.factory-bootstrap-400 .col-xs-4,.factory-bootstrap-400 .col-xs-5,.factory-bootstrap-400 .col-xs-6,.factory-bootstrap-400 .col-xs-7,.factory-bootstrap-400 .col-xs-8,.factory-bootstrap-400 .col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.factory-bootstrap-400 .col-xs-1,.factory-bootstrap-400 .col-xs-10,.factory-bootstrap-400 .col-xs-11,.factory-bootstrap-400 .col-xs-12,.factory-bootstrap-400 .col-xs-2,.factory-bootstrap-400 .col-xs-3,.factory-bootstrap-400 .col-xs-4,.factory-bootstrap-400 .col-xs-5,.factory-bootstrap-400 .col-xs-6,.factory-bootstrap-400 .col-xs-7,.factory-bootstrap-400 .col-xs-8,.factory-bootstrap-400 .col-xs-9{float:left}.factory-bootstrap-400 .col-xs-12{width:100%}.factory-bootstrap-400 .col-xs-11{width:91.66666666666666%}.factory-bootstrap-400 .col-xs-10{width:83.33333333333334%}.factory-bootstrap-400 .col-xs-9{width:75%}.factory-bootstrap-400 .col-xs-8{width:66.66666666666666%}.factory-bootstrap-400 .col-xs-7{width:58.333333333333336%}.factory-bootstrap-400 .col-xs-6{width:50%}.factory-bootstrap-400 .col-xs-5{width:41.66666666666667%}.factory-bootstrap-400 .col-xs-4{width:33.33333333333333%}.factory-bootstrap-400 .col-xs-3{width:25%}.factory-bootstrap-400 .col-xs-2{width:16.666666666666664%}.factory-bootstrap-400 .col-xs-1{width:8.333333333333332%}.factory-bootstrap-400 .col-xs-pull-12{right:100%}.factory-bootstrap-400 .col-xs-pull-11{right:91.66666666666666%}.factory-bootstrap-400 .col-xs-pull-10{right:83.33333333333334%}.factory-bootstrap-400 .col-xs-pull-9{right:75%}.factory-bootstrap-400 .col-xs-pull-8{right:66.66666666666666%}.factory-bootstrap-400 .col-xs-pull-7{right:58.333333333333336%}.factory-bootstrap-400 .col-xs-pull-6{right:50%}.factory-bootstrap-400 .col-xs-pull-5{right:41.66666666666667%}.factory-bootstrap-400 .col-xs-pull-4{right:33.33333333333333%}.factory-bootstrap-400 .col-xs-pull-3{right:25%}.factory-bootstrap-400 .col-xs-pull-2{right:16.666666666666664%}.factory-bootstrap-400 .col-xs-pull-1{right:8.333333333333332%}.factory-bootstrap-400 .col-xs-pull-0{right:0}.factory-bootstrap-400 .col-xs-push-12{left:100%}.factory-bootstrap-400 .col-xs-push-11{left:91.66666666666666%}.factory-bootstrap-400 .col-xs-push-10{left:83.33333333333334%}.factory-bootstrap-400 .col-xs-push-9{left:75%}.factory-bootstrap-400 .col-xs-push-8{left:66.66666666666666%}.factory-bootstrap-400 .col-xs-push-7{left:58.333333333333336%}.factory-bootstrap-400 .col-xs-push-6{left:50%}.factory-bootstrap-400 .col-xs-push-5{left:41.66666666666667%}.factory-bootstrap-400 .col-xs-push-4{left:33.33333333333333%}.factory-bootstrap-400 .col-xs-push-3{left:25%}.factory-bootstrap-400 .col-xs-push-2{left:16.666666666666664%}.factory-bootstrap-400 .col-xs-push-1{left:8.333333333333332%}.factory-bootstrap-400 .col-xs-push-0{left:0}.factory-bootstrap-400 .col-xs-offset-12{margin-left:100%}.factory-bootstrap-400 .col-xs-offset-11{margin-left:91.66666666666666%}.factory-bootstrap-400 .col-xs-offset-10{margin-left:83.33333333333334%}.factory-bootstrap-400 .col-xs-offset-9{margin-left:75%}.factory-bootstrap-400 .col-xs-offset-8{margin-left:66.66666666666666%}.factory-bootstrap-400 .col-xs-offset-7{margin-left:58.333333333333336%}.factory-bootstrap-400 .col-xs-offset-6{margin-left:50%}.factory-bootstrap-400 .col-xs-offset-5{margin-left:41.66666666666667%}.factory-bootstrap-400 .col-xs-offset-4{margin-left:33.33333333333333%}.factory-bootstrap-400 .col-xs-offset-3{margin-left:25%}.factory-bootstrap-400 .col-xs-offset-2{margin-left:16.666666666666664%}.factory-bootstrap-400 .col-xs-offset-1{margin-left:8.333333333333332%}.factory-bootstrap-400 .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-400 table{max-width:100%;background-color:transparent}.factory-bootstrap-400 th{text-align:left}.factory-bootstrap-400 .table{width:100%;margin-bottom:20px}.factory-bootstrap-400 .table>tbody>tr>td,.factory-bootstrap-400 .table>tbody>tr>th,.factory-bootstrap-400 .table>tfoot>tr>td,.factory-bootstrap-400 .table>tfoot>tr>th,.factory-bootstrap-400 .table>thead>tr>td,.factory-bootstrap-400 .table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.factory-bootstrap-400 .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.factory-bootstrap-400 .table>caption+thead>tr:first-child>td,.factory-bootstrap-400 .table>caption+thead>tr:first-child>th,.factory-bootstrap-400 .table>colgroup+thead>tr:first-child>td,.factory-bootstrap-400 .table>colgroup+thead>tr:first-child>th,.factory-bootstrap-400 .table>thead:first-child>tr:first-child>td,.factory-bootstrap-400 .table>thead:first-child>tr:first-child>th{border-top:0}.factory-bootstrap-400 .table>tbody+tbody{border-top:2px solid #ddd}.factory-bootstrap-400 .table .table{background-color:#fff}.factory-bootstrap-400 .table-condensed>tbody>tr>td,.factory-bootstrap-400 .table-condensed>tbody>tr>th,.factory-bootstrap-400 .table-condensed>tfoot>tr>td,.factory-bootstrap-400 .table-condensed>tfoot>tr>th,.factory-bootstrap-400 .table-condensed>thead>tr>td,.factory-bootstrap-400 .table-condensed>thead>tr>th{padding:5px}.factory-bootstrap-400 .table-bordered,.factory-bootstrap-400 .table-bordered>tbody>tr>td,.factory-bootstrap-400 .table-bordered>tbody>tr>th,.factory-bootstrap-400 .table-bordered>tfoot>tr>td,.factory-bootstrap-400 .table-bordered>tfoot>tr>th,.factory-bootstrap-400 .table-bordered>thead>tr>td,.factory-bootstrap-400 .table-bordered>thead>tr>th{border:1px solid #ddd}.factory-bootstrap-400 .table-bordered>thead>tr>td,.factory-bootstrap-400 .table-bordered>thead>tr>th{border-bottom-width:2px}.factory-bootstrap-400 .table-striped>tbody>tr:nth-child(odd)>td,.factory-bootstrap-400 .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.factory-bootstrap-400 .table-hover>tbody>tr:hover>td,.factory-bootstrap-400 .table-hover>tbody>tr:hover>th{background-color:#f5f5f5}.factory-bootstrap-400 table col[class*=col-]{position:static;display:table-column;float:none}.factory-bootstrap-400 table td[class*=col-],.factory-bootstrap-400 table th[class*=col-]{display:table-cell;float:none}.factory-bootstrap-400 .table>tbody>.active>td,.factory-bootstrap-400 .table>tbody>.active>th,.factory-bootstrap-400 .table>tbody>tr>.active,.factory-bootstrap-400 .table>tfoot>.active>td,.factory-bootstrap-400 .table>tfoot>.active>th,.factory-bootstrap-400 .table>tfoot>tr>.active,.factory-bootstrap-400 .table>thead>.active>td,.factory-bootstrap-400 .table>thead>.active>th,.factory-bootstrap-400 .table>thead>tr>.active{background-color:#f5f5f5}.factory-bootstrap-400 .table-hover>tbody>.active:hover>td,.factory-bootstrap-400 .table-hover>tbody>.active:hover>th,.factory-bootstrap-400 .table-hover>tbody>tr>.active:hover{background-color:#e8e8e8}.factory-bootstrap-400 .table>tbody>.success>td,.factory-bootstrap-400 .table>tbody>.success>th,.factory-bootstrap-400 .table>tbody>tr>.success,.factory-bootstrap-400 .table>tfoot>.success>td,.factory-bootstrap-400 .table>tfoot>.success>th,.factory-bootstrap-400 .table>tfoot>tr>.success,.factory-bootstrap-400 .table>thead>.success>td,.factory-bootstrap-400 .table>thead>.success>th,.factory-bootstrap-400 .table>thead>tr>.success{background-color:#dff0d8}.factory-bootstrap-400 .table-hover>tbody>.success:hover>td,.factory-bootstrap-400 .table-hover>tbody>.success:hover>th,.factory-bootstrap-400 .table-hover>tbody>tr>.success:hover{background-color:#d0e9c6}.factory-bootstrap-400 .table>tbody>.danger>td,.factory-bootstrap-400 .table>tbody>.danger>th,.factory-bootstrap-400 .table>tbody>tr>.danger,.factory-bootstrap-400 .table>tfoot>.danger>td,.factory-bootstrap-400 .table>tfoot>.danger>th,.factory-bootstrap-400 .table>tfoot>tr>.danger,.factory-bootstrap-400 .table>thead>.danger>td,.factory-bootstrap-400 .table>thead>.danger>th,.factory-bootstrap-400 .table>thead>tr>.danger{background-color:#f2dede}.factory-bootstrap-400 .table-hover>tbody>.danger:hover>td,.factory-bootstrap-400 .table-hover>tbody>.danger:hover>th,.factory-bootstrap-400 .table-hover>tbody>tr>.danger:hover{background-color:#ebcccc}.factory-bootstrap-400 .table>tbody>.warning>td,.factory-bootstrap-400 .table>tbody>.warning>th,.factory-bootstrap-400 .table>tbody>tr>.warning,.factory-bootstrap-400 .table>tfoot>.warning>td,.factory-bootstrap-400 .table>tfoot>.warning>th,.factory-bootstrap-400 .table>tfoot>tr>.warning,.factory-bootstrap-400 .table>thead>.warning>td,.factory-bootstrap-400 .table>thead>.warning>th,.factory-bootstrap-400 .table>thead>tr>.warning{background-color:#fcf8e3}.factory-bootstrap-400 .table-hover>tbody>.warning:hover>td,.factory-bootstrap-400 .table-hover>tbody>.warning:hover>th,.factory-bootstrap-400 .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-400 fieldset{padding:0;margin:0;border:0}.factory-bootstrap-400 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-400 label{display:inline-block;margin-bottom:5px;font-weight:700}.factory-bootstrap-400 input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-400 input[type=checkbox],.factory-bootstrap-400 input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}.factory-bootstrap-400 input[type=file]{display:block}.factory-bootstrap-400 select[multiple],.factory-bootstrap-400 select[size]{height:auto}.factory-bootstrap-400 select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}.factory-bootstrap-400 input[type=checkbox]:focus,.factory-bootstrap-400 input[type=file]:focus,.factory-bootstrap-400 input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-400 input[type=number]::-webkit-inner-spin-button,.factory-bootstrap-400 input[type=number]::-webkit-outer-spin-button{height:auto}.factory-bootstrap-400 output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.factory-bootstrap-400 .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-400 .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-400 .form-control:-moz-placeholder{color:#999}.factory-bootstrap-400 .form-control::-moz-placeholder{color:#999;opacity:1}.factory-bootstrap-400 .form-control:-ms-input-placeholder{color:#999}.factory-bootstrap-400 .form-control::-webkit-input-placeholder{color:#999}.factory-bootstrap-400 .form-control[disabled],.factory-bootstrap-400 .form-control[readonly],.factory-bootstrap-400 fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}.factory-bootstrap-400 textarea.form-control{height:auto}.factory-bootstrap-400 .form-group{margin-bottom:15px}.factory-bootstrap-400 .checkbox,.factory-bootstrap-400 .radio{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.factory-bootstrap-400 .checkbox label,.factory-bootstrap-400 .radio label{display:inline;margin-bottom:0;font-weight:400;cursor:pointer}.factory-bootstrap-400 .checkbox input[type=checkbox],.factory-bootstrap-400 .checkbox-inline input[type=checkbox],.factory-bootstrap-400 .radio input[type=radio],.factory-bootstrap-400 .radio-inline input[type=radio]{float:left;margin-left:-20px}.factory-bootstrap-400 .checkbox+.checkbox,.factory-bootstrap-400 .radio+.radio{margin-top:-5px}.factory-bootstrap-400 .checkbox-inline,.factory-bootstrap-400 .radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.factory-bootstrap-400 .checkbox-inline+.checkbox-inline,.factory-bootstrap-400 .radio-inline+.radio-inline{margin-top:0;margin-left:10px}.factory-bootstrap-400 .checkbox-inline[disabled],.factory-bootstrap-400 .checkbox[disabled],.factory-bootstrap-400 .radio-inline[disabled],.factory-bootstrap-400 .radio[disabled],.factory-bootstrap-400 fieldset[disabled] .checkbox,.factory-bootstrap-400 fieldset[disabled] .checkbox-inline,.factory-bootstrap-400 fieldset[disabled] .radio,.factory-bootstrap-400 fieldset[disabled] .radio-inline,.factory-bootstrap-400 fieldset[disabled] input[type=checkbox],.factory-bootstrap-400 fieldset[disabled] input[type=radio],.factory-bootstrap-400 input[type=checkbox][disabled],.factory-bootstrap-400 input[type=radio][disabled]{cursor:not-allowed}.factory-bootstrap-400 .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-400 select.input-sm{height:30px;line-height:30px}.factory-bootstrap-400 textarea.input-sm{height:auto}.factory-bootstrap-400 .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-400 select.input-lg{height:46px;line-height:46px}.factory-bootstrap-400 textarea.input-lg{height:auto}.factory-bootstrap-400 .has-warning .checkbox,.factory-bootstrap-400 .has-warning .checkbox-inline,.factory-bootstrap-400 .has-warning .control-label,.factory-bootstrap-400 .has-warning .help-block,.factory-bootstrap-400 .has-warning .radio,.factory-bootstrap-400 .has-warning .radio-inline{color:#8a6d3b}.factory-bootstrap-400 .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-400 .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-400 .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.factory-bootstrap-400 .has-error .checkbox,.factory-bootstrap-400 .has-error .checkbox-inline,.factory-bootstrap-400 .has-error .control-label,.factory-bootstrap-400 .has-error .help-block,.factory-bootstrap-400 .has-error .radio,.factory-bootstrap-400 .has-error .radio-inline{color:#a94442}.factory-bootstrap-400 .controls{display:block}.factory-bootstrap-400 .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-400 .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-400 .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.factory-bootstrap-400 .has-success .checkbox,.factory-bootstrap-400 .has-success .checkbox-inline,.factory-bootstrap-400 .has-success .control-label,.factory-bootstrap-400 .has-success .help-block,.factory-bootstrap-400 .has-success .radio,.factory-bootstrap-400 .has-success .radio-inline{color:#3c763d}.factory-bootstrap-400 .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-400 .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-400 .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.factory-bootstrap-400 .form-control-static{margin-bottom:0}.factory-bootstrap-400 .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-400 .form-horizontal .checkbox,.factory-bootstrap-400 .form-horizontal .checkbox-inline,.factory-bootstrap-400 .form-horizontal .control-label,.factory-bootstrap-400 .form-horizontal .radio,.factory-bootstrap-400 .form-horizontal .radio-inline{position:relative;padding-top:7px;margin-top:0;margin-bottom:0}.factory-bootstrap-400 .form-horizontal .control-label{max-width:200px}.factory-bootstrap-400 .form-horizontal .checkbox,.factory-bootstrap-400 .form-horizontal .radio{min-height:27px}.factory-bootstrap-400 .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.factory-bootstrap-400 .form-horizontal .form-group:after,.factory-bootstrap-400 .form-horizontal .form-group:before{display:table;content:" "}.factory-bootstrap-400 .form-horizontal .form-group:after{clear:both}.factory-bootstrap-400 .form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.factory-bootstrap-400 .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-400 .btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-400 .btn{text-decoration:none}.factory-bootstrap-400 .btn:focus,.factory-bootstrap-400 .btn:hover{color:#333;text-decoration:none}.factory-bootstrap-400 .btn.disabled,.factory-bootstrap-400 .btn[disabled],.factory-bootstrap-400 fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-400 .btn-default.active,.factory-bootstrap-400 .btn-default:active,.factory-bootstrap-400 .btn-default:focus,.factory-bootstrap-400 .btn-default:hover,.factory-bootstrap-400 .open .dropdown-toggle.btn-default{background:#fafafa;border-color:#999;color:#222}.factory-bootstrap-400 .btn-default.active,.factory-bootstrap-400 .btn-default:active,.factory-bootstrap-400 .open .dropdown-toggle.btn-default{background-image:none}.factory-bootstrap-400 .btn-default.disabled,.factory-bootstrap-400 .btn-default.disabled.active,.factory-bootstrap-400 .btn-default.disabled:active,.factory-bootstrap-400 .btn-default.disabled:focus,.factory-bootstrap-400 .btn-default.disabled:hover,.factory-bootstrap-400 .btn-default[disabled],.factory-bootstrap-400 .btn-default[disabled].active,.factory-bootstrap-400 .btn-default[disabled]:active,.factory-bootstrap-400 .btn-default[disabled]:focus,.factory-bootstrap-400 .btn-default[disabled]:hover,.factory-bootstrap-400 fieldset[disabled] .btn-default,.factory-bootstrap-400 fieldset[disabled] .btn-default.active,.factory-bootstrap-400 fieldset[disabled] .btn-default:active,.factory-bootstrap-400 fieldset[disabled] .btn-default:focus,.factory-bootstrap-400 fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.factory-bootstrap-400 .btn-default .badge{color:#fff;background-color:#fff}.factory-bootstrap-400 .btn-primary.active,.factory-bootstrap-400 .btn-primary:active,.factory-bootstrap-400 .btn-primary:focus,.factory-bootstrap-400 .btn-primary:hover,.factory-bootstrap-400 .open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.factory-bootstrap-400 .btn-primary.active,.factory-bootstrap-400 .btn-primary:active,.factory-bootstrap-400 .open .dropdown-toggle.btn-primary{background-image:none}.factory-bootstrap-400 .btn-primary.disabled,.factory-bootstrap-400 .btn-primary.disabled.active,.factory-bootstrap-400 .btn-primary.disabled:active,.factory-bootstrap-400 .btn-primary.disabled:focus,.factory-bootstrap-400 .btn-primary.disabled:hover,.factory-bootstrap-400 .btn-primary[disabled],.factory-bootstrap-400 .btn-primary[disabled].active,.factory-bootstrap-400 .btn-primary[disabled]:active,.factory-bootstrap-400 .btn-primary[disabled]:focus,.factory-bootstrap-400 .btn-primary[disabled]:hover,.factory-bootstrap-400 fieldset[disabled] .btn-primary,.factory-bootstrap-400 fieldset[disabled] .btn-primary.active,.factory-bootstrap-400 fieldset[disabled] .btn-primary:active,.factory-bootstrap-400 fieldset[disabled] .btn-primary:focus,.factory-bootstrap-400 fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.factory-bootstrap-400 .btn-primary .badge{color:#428bca;background-color:#fff}.factory-bootstrap-400 .btn-warning{color:#fff;background-color:#f0ad4e}.factory-bootstrap-400 .btn-warning.active,.factory-bootstrap-400 .btn-warning:active,.factory-bootstrap-400 .btn-warning:focus,.factory-bootstrap-400 .btn-warning:hover,.factory-bootstrap-400 .open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.factory-bootstrap-400 .btn-warning.active,.factory-bootstrap-400 .btn-warning:active,.factory-bootstrap-400 .open .dropdown-toggle.btn-warning{background-image:none}.factory-bootstrap-400 .btn-warning.disabled,.factory-bootstrap-400 .btn-warning.disabled.active,.factory-bootstrap-400 .btn-warning.disabled:active,.factory-bootstrap-400 .btn-warning.disabled:focus,.factory-bootstrap-400 .btn-warning.disabled:hover,.factory-bootstrap-400 .btn-warning[disabled],.factory-bootstrap-400 .btn-warning[disabled].active,.factory-bootstrap-400 .btn-warning[disabled]:active,.factory-bootstrap-400 .btn-warning[disabled]:focus,.factory-bootstrap-400 .btn-warning[disabled]:hover,.factory-bootstrap-400 fieldset[disabled] .btn-warning,.factory-bootstrap-400 fieldset[disabled] .btn-warning.active,.factory-bootstrap-400 fieldset[disabled] .btn-warning:active,.factory-bootstrap-400 fieldset[disabled] .btn-warning:focus,.factory-bootstrap-400 fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.factory-bootstrap-400 .btn-warning .badge{color:#f0ad4e;background-color:#fff}.factory-bootstrap-400 .btn-success{color:#fff;background-color:#5cb85c}.factory-bootstrap-400 .btn-success.active,.factory-bootstrap-400 .btn-success:active,.factory-bootstrap-400 .btn-success:focus,.factory-bootstrap-400 .btn-success:hover,.factory-bootstrap-400 .open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.factory-bootstrap-400 .btn-success.active,.factory-bootstrap-400 .btn-success:active,.factory-bootstrap-400 .open .dropdown-toggle.btn-success{background-image:none}.factory-bootstrap-400 .btn-success.disabled,.factory-bootstrap-400 .btn-success.disabled.active,.factory-bootstrap-400 .btn-success.disabled:active,.factory-bootstrap-400 .btn-success.disabled:focus,.factory-bootstrap-400 .btn-success.disabled:hover,.factory-bootstrap-400 .btn-success[disabled],.factory-bootstrap-400 .btn-success[disabled].active,.factory-bootstrap-400 .btn-success[disabled]:active,.factory-bootstrap-400 .btn-success[disabled]:focus,.factory-bootstrap-400 .btn-success[disabled]:hover,.factory-bootstrap-400 fieldset[disabled] .btn-success,.factory-bootstrap-400 fieldset[disabled] .btn-success.active,.factory-bootstrap-400 fieldset[disabled] .btn-success:active,.factory-bootstrap-400 fieldset[disabled] .btn-success:focus,.factory-bootstrap-400 fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.factory-bootstrap-400 .btn-success .badge{color:#5cb85c;background-color:#fff}.factory-bootstrap-400 .btn-info{color:#fff;background-color:#5bc0de}.factory-bootstrap-400 .btn-info.active,.factory-bootstrap-400 .btn-info:active,.factory-bootstrap-400 .btn-info:focus,.factory-bootstrap-400 .btn-info:hover,.factory-bootstrap-400 .open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.factory-bootstrap-400 .btn-info.active,.factory-bootstrap-400 .btn-info:active,.factory-bootstrap-400 .open .dropdown-toggle.btn-info{background-image:none}.factory-bootstrap-400 .btn-info.disabled,.factory-bootstrap-400 .btn-info.disabled.active,.factory-bootstrap-400 .btn-info.disabled:active,.factory-bootstrap-400 .btn-info.disabled:focus,.factory-bootstrap-400 .btn-info.disabled:hover,.factory-bootstrap-400 .btn-info[disabled],.factory-bootstrap-400 .btn-info[disabled].active,.factory-bootstrap-400 .btn-info[disabled]:active,.factory-bootstrap-400 .btn-info[disabled]:focus,.factory-bootstrap-400 .btn-info[disabled]:hover,.factory-bootstrap-400 fieldset[disabled] .btn-info,.factory-bootstrap-400 fieldset[disabled] .btn-info.active,.factory-bootstrap-400 fieldset[disabled] .btn-info:active,.factory-bootstrap-400 fieldset[disabled] .btn-info:focus,.factory-bootstrap-400 fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.factory-bootstrap-400 .btn-info .badge{color:#5bc0de;background-color:#fff}.factory-bootstrap-400 .btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.factory-bootstrap-400 .btn-link,.factory-bootstrap-400 .btn-link:active,.factory-bootstrap-400 .btn-link[disabled],.factory-bootstrap-400 fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-400 .btn-link,.factory-bootstrap-400 .btn-link:active,.factory-bootstrap-400 .btn-link:focus,.factory-bootstrap-400 .btn-link:hover{border-color:transparent}.factory-bootstrap-400 .btn-link:focus,.factory-bootstrap-400 .btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.factory-bootstrap-400 .btn-link[disabled]:focus,.factory-bootstrap-400 .btn-link[disabled]:hover,.factory-bootstrap-400 fieldset[disabled] .btn-link:focus,.factory-bootstrap-400 fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.factory-bootstrap-400 .btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-400 .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-400 .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-400 .btn-block{display:block;width:100%;padding-right:0;padding-left:0}.factory-bootstrap-400 .btn-block+.btn-block{margin-top:5px}.factory-bootstrap-400 input[type=button].btn-block,.factory-bootstrap-400 input[type=reset].btn-block,.factory-bootstrap-400 input[type=submit].btn-block{width:100%}.factory-bootstrap-400 .fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.factory-bootstrap-400 .fade.in{opacity:1}.factory-bootstrap-400 .collapse{display:none}.factory-bootstrap-400 .collapse.in{display:block}.factory-bootstrap-400 .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-400 .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-400 .glyphicon:empty{width:1em}.factory-bootstrap-400 .glyphicon-asterisk:before{content:"\2a"}.factory-bootstrap-400 .glyphicon-plus:before{content:"\2b"}.factory-bootstrap-400 .glyphicon-euro:before{content:"\20ac"}.factory-bootstrap-400 .glyphicon-minus:before{content:"\2212"}.factory-bootstrap-400 .glyphicon-cloud:before{content:"\2601"}.factory-bootstrap-400 .glyphicon-envelope:before{content:"\2709"}.factory-bootstrap-400 .glyphicon-pencil:before{content:"\270f"}.factory-bootstrap-400 .glyphicon-glass:before{content:"\e001"}.factory-bootstrap-400 .glyphicon-music:before{content:"\e002"}.factory-bootstrap-400 .glyphicon-search:before{content:"\e003"}.factory-bootstrap-400 .glyphicon-heart:before{content:"\e005"}.factory-bootstrap-400 .glyphicon-star:before{content:"\e006"}.factory-bootstrap-400 .glyphicon-star-empty:before{content:"\e007"}.factory-bootstrap-400 .glyphicon-user:before{content:"\e008"}.factory-bootstrap-400 .glyphicon-film:before{content:"\e009"}.factory-bootstrap-400 .glyphicon-th-large:before{content:"\e010"}.factory-bootstrap-400 .glyphicon-th:before{content:"\e011"}.factory-bootstrap-400 .glyphicon-th-list:before{content:"\e012"}.factory-bootstrap-400 .glyphicon-ok:before{content:"\e013"}.factory-bootstrap-400 .glyphicon-remove:before{content:"\e014"}.factory-bootstrap-400 .glyphicon-zoom-in:before{content:"\e015"}.factory-bootstrap-400 .glyphicon-zoom-out:before{content:"\e016"}.factory-bootstrap-400 .glyphicon-off:before{content:"\e017"}.factory-bootstrap-400 .glyphicon-signal:before{content:"\e018"}.factory-bootstrap-400 .glyphicon-cog:before{content:"\e019"}.factory-bootstrap-400 .glyphicon-trash:before{content:"\e020"}.factory-bootstrap-400 .glyphicon-home:before{content:"\e021"}.factory-bootstrap-400 .glyphicon-file:before{content:"\e022"}.factory-bootstrap-400 .glyphicon-time:before{content:"\e023"}.factory-bootstrap-400 .glyphicon-road:before{content:"\e024"}.factory-bootstrap-400 .glyphicon-download-alt:before{content:"\e025"}.factory-bootstrap-400 .glyphicon-download:before{content:"\e026"}.factory-bootstrap-400 .glyphicon-upload:before{content:"\e027"}.factory-bootstrap-400 .glyphicon-inbox:before{content:"\e028"}.factory-bootstrap-400 .glyphicon-play-circle:before{content:"\e029"}.factory-bootstrap-400 .glyphicon-repeat:before{content:"\e030"}.factory-bootstrap-400 .glyphicon-refresh:before{content:"\e031"}.factory-bootstrap-400 .glyphicon-list-alt:before{content:"\e032"}.factory-bootstrap-400 .glyphicon-lock:before{content:"\e033"}.factory-bootstrap-400 .glyphicon-flag:before{content:"\e034"}.factory-bootstrap-400 .glyphicon-headphones:before{content:"\e035"}.factory-bootstrap-400 .glyphicon-volume-off:before{content:"\e036"}.factory-bootstrap-400 .glyphicon-volume-down:before{content:"\e037"}.factory-bootstrap-400 .glyphicon-volume-up:before{content:"\e038"}.factory-bootstrap-400 .glyphicon-qrcode:before{content:"\e039"}.factory-bootstrap-400 .glyphicon-barcode:before{content:"\e040"}.factory-bootstrap-400 .glyphicon-tag:before{content:"\e041"}.factory-bootstrap-400 .glyphicon-tags:before{content:"\e042"}.factory-bootstrap-400 .glyphicon-book:before{content:"\e043"}.factory-bootstrap-400 .glyphicon-bookmark:before{content:"\e044"}.factory-bootstrap-400 .glyphicon-print:before{content:"\e045"}.factory-bootstrap-400 .glyphicon-camera:before{content:"\e046"}.factory-bootstrap-400 .glyphicon-font:before{content:"\e047"}.factory-bootstrap-400 .glyphicon-bold:before{content:"\e048"}.factory-bootstrap-400 .glyphicon-italic:before{content:"\e049"}.factory-bootstrap-400 .glyphicon-text-height:before{content:"\e050"}.factory-bootstrap-400 .glyphicon-text-width:before{content:"\e051"}.factory-bootstrap-400 .glyphicon-align-left:before{content:"\e052"}.factory-bootstrap-400 .glyphicon-align-center:before{content:"\e053"}.factory-bootstrap-400 .glyphicon-align-right:before{content:"\e054"}.factory-bootstrap-400 .glyphicon-align-justify:before{content:"\e055"}.factory-bootstrap-400 .glyphicon-list:before{content:"\e056"}.factory-bootstrap-400 .glyphicon-indent-left:before{content:"\e057"}.factory-bootstrap-400 .glyphicon-indent-right:before{content:"\e058"}.factory-bootstrap-400 .glyphicon-facetime-video:before{content:"\e059"}.factory-bootstrap-400 .glyphicon-picture:before{content:"\e060"}.factory-bootstrap-400 .glyphicon-map-marker:before{content:"\e062"}.factory-bootstrap-400 .glyphicon-adjust:before{content:"\e063"}.factory-bootstrap-400 .glyphicon-tint:before{content:"\e064"}.factory-bootstrap-400 .glyphicon-edit:before{content:"\e065"}.factory-bootstrap-400 .glyphicon-share:before{content:"\e066"}.factory-bootstrap-400 .glyphicon-check:before{content:"\e067"}.factory-bootstrap-400 .glyphicon-move:before{content:"\e068"}.factory-bootstrap-400 .glyphicon-step-backward:before{content:"\e069"}.factory-bootstrap-400 .glyphicon-fast-backward:before{content:"\e070"}.factory-bootstrap-400 .glyphicon-backward:before{content:"\e071"}.factory-bootstrap-400 .glyphicon-play:before{content:"\e072"}.factory-bootstrap-400 .glyphicon-pause:before{content:"\e073"}.factory-bootstrap-400 .glyphicon-stop:before{content:"\e074"}.factory-bootstrap-400 .glyphicon-forward:before{content:"\e075"}.factory-bootstrap-400 .glyphicon-fast-forward:before{content:"\e076"}.factory-bootstrap-400 .glyphicon-step-forward:before{content:"\e077"}.factory-bootstrap-400 .glyphicon-eject:before{content:"\e078"}.factory-bootstrap-400 .glyphicon-chevron-left:before{content:"\e079"}.factory-bootstrap-400 .glyphicon-chevron-right:before{content:"\e080"}.factory-bootstrap-400 .glyphicon-plus-sign:before{content:"\e081"}.factory-bootstrap-400 .glyphicon-minus-sign:before{content:"\e082"}.factory-bootstrap-400 .glyphicon-remove-sign:before{content:"\e083"}.factory-bootstrap-400 .glyphicon-ok-sign:before{content:"\e084"}.factory-bootstrap-400 .glyphicon-question-sign:before{content:"\e085"}.factory-bootstrap-400 .glyphicon-info-sign:before{content:"\e086"}.factory-bootstrap-400 .glyphicon-screenshot:before{content:"\e087"}.factory-bootstrap-400 .glyphicon-remove-circle:before{content:"\e088"}.factory-bootstrap-400 .glyphicon-ok-circle:before{content:"\e089"}.factory-bootstrap-400 .glyphicon-ban-circle:before{content:"\e090"}.factory-bootstrap-400 .glyphicon-arrow-left:before{content:"\e091"}.factory-bootstrap-400 .glyphicon-arrow-right:before{content:"\e092"}.factory-bootstrap-400 .glyphicon-arrow-up:before{content:"\e093"}.factory-bootstrap-400 .glyphicon-arrow-down:before{content:"\e094"}.factory-bootstrap-400 .glyphicon-share-alt:before{content:"\e095"}.factory-bootstrap-400 .glyphicon-resize-full:before{content:"\e096"}.factory-bootstrap-400 .glyphicon-resize-small:before{content:"\e097"}.factory-bootstrap-400 .glyphicon-exclamation-sign:before{content:"\e101"}.factory-bootstrap-400 .glyphicon-gift:before{content:"\e102"}.factory-bootstrap-400 .glyphicon-leaf:before{content:"\e103"}.factory-bootstrap-400 .glyphicon-fire:before{content:"\e104"}.factory-bootstrap-400 .glyphicon-eye-open:before{content:"\e105"}.factory-bootstrap-400 .glyphicon-eye-close:before{content:"\e106"}.factory-bootstrap-400 .glyphicon-warning-sign:before{content:"\e107"}.factory-bootstrap-400 .glyphicon-plane:before{content:"\e108"}.factory-bootstrap-400 .glyphicon-calendar:before{content:"\e109"}.factory-bootstrap-400 .glyphicon-random:before{content:"\e110"}.factory-bootstrap-400 .glyphicon-comment:before{content:"\e111"}.factory-bootstrap-400 .glyphicon-magnet:before{content:"\e112"}.factory-bootstrap-400 .glyphicon-chevron-up:before{content:"\e113"}.factory-bootstrap-400 .glyphicon-chevron-down:before{content:"\e114"}.factory-bootstrap-400 .glyphicon-retweet:before{content:"\e115"}.factory-bootstrap-400 .glyphicon-shopping-cart:before{content:"\e116"}.factory-bootstrap-400 .glyphicon-folder-close:before{content:"\e117"}.factory-bootstrap-400 .glyphicon-folder-open:before{content:"\e118"}.factory-bootstrap-400 .glyphicon-resize-vertical:before{content:"\e119"}.factory-bootstrap-400 .glyphicon-resize-horizontal:before{content:"\e120"}.factory-bootstrap-400 .glyphicon-hdd:before{content:"\e121"}.factory-bootstrap-400 .glyphicon-bullhorn:before{content:"\e122"}.factory-bootstrap-400 .glyphicon-bell:before{content:"\e123"}.factory-bootstrap-400 .glyphicon-certificate:before{content:"\e124"}.factory-bootstrap-400 .glyphicon-thumbs-up:before{content:"\e125"}.factory-bootstrap-400 .glyphicon-thumbs-down:before{content:"\e126"}.factory-bootstrap-400 .glyphicon-hand-right:before{content:"\e127"}.factory-bootstrap-400 .glyphicon-hand-left:before{content:"\e128"}.factory-bootstrap-400 .glyphicon-hand-up:before{content:"\e129"}.factory-bootstrap-400 .glyphicon-hand-down:before{content:"\e130"}.factory-bootstrap-400 .glyphicon-circle-arrow-right:before{content:"\e131"}.factory-bootstrap-400 .glyphicon-circle-arrow-left:before{content:"\e132"}.factory-bootstrap-400 .glyphicon-circle-arrow-up:before{content:"\e133"}.factory-bootstrap-400 .glyphicon-circle-arrow-down:before{content:"\e134"}.factory-bootstrap-400 .glyphicon-globe:before{content:"\e135"}.factory-bootstrap-400 .glyphicon-wrench:before{content:"\e136"}.factory-bootstrap-400 .glyphicon-tasks:before{content:"\e137"}.factory-bootstrap-400 .glyphicon-filter:before{content:"\e138"}.factory-bootstrap-400 .glyphicon-briefcase:before{content:"\e139"}.factory-bootstrap-400 .glyphicon-fullscreen:before{content:"\e140"}.factory-bootstrap-400 .glyphicon-dashboard:before{content:"\e141"}.factory-bootstrap-400 .glyphicon-paperclip:before{content:"\e142"}.factory-bootstrap-400 .glyphicon-heart-empty:before{content:"\e143"}.factory-bootstrap-400 .glyphicon-link:before{content:"\e144"}.factory-bootstrap-400 .glyphicon-phone:before{content:"\e145"}.factory-bootstrap-400 .glyphicon-pushpin:before{content:"\e146"}.factory-bootstrap-400 .glyphicon-usd:before{content:"\e148"}.factory-bootstrap-400 .glyphicon-gbp:before{content:"\e149"}.factory-bootstrap-400 .glyphicon-sort:before{content:"\e150"}.factory-bootstrap-400 .glyphicon-sort-by-alphabet:before{content:"\e151"}.factory-bootstrap-400 .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.factory-bootstrap-400 .glyphicon-sort-by-order:before{content:"\e153"}.factory-bootstrap-400 .glyphicon-sort-by-order-alt:before{content:"\e154"}.factory-bootstrap-400 .glyphicon-sort-by-attributes:before{content:"\e155"}.factory-bootstrap-400 .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.factory-bootstrap-400 .glyphicon-unchecked:before{content:"\e157"}.factory-bootstrap-400 .glyphicon-expand:before{content:"\e158"}.factory-bootstrap-400 .glyphicon-collapse-down:before{content:"\e159"}.factory-bootstrap-400 .glyphicon-collapse-up:before{content:"\e160"}.factory-bootstrap-400 .glyphicon-log-in:before{content:"\e161"}.factory-bootstrap-400 .glyphicon-flash:before{content:"\e162"}.factory-bootstrap-400 .glyphicon-log-out:before{content:"\e163"}.factory-bootstrap-400 .glyphicon-new-window:before{content:"\e164"}.factory-bootstrap-400 .glyphicon-record:before{content:"\e165"}.factory-bootstrap-400 .glyphicon-save:before{content:"\e166"}.factory-bootstrap-400 .glyphicon-open:before{content:"\e167"}.factory-bootstrap-400 .glyphicon-saved:before{content:"\e168"}.factory-bootstrap-400 .glyphicon-import:before{content:"\e169"}.factory-bootstrap-400 .glyphicon-export:before{content:"\e170"}.factory-bootstrap-400 .glyphicon-send:before{content:"\e171"}.factory-bootstrap-400 .glyphicon-floppy-disk:before{content:"\e172"}.factory-bootstrap-400 .glyphicon-floppy-saved:before{content:"\e173"}.factory-bootstrap-400 .glyphicon-floppy-remove:before{content:"\e174"}.factory-bootstrap-400 .glyphicon-floppy-save:before{content:"\e175"}.factory-bootstrap-400 .glyphicon-floppy-open:before{content:"\e176"}.factory-bootstrap-400 .glyphicon-credit-card:before{content:"\e177"}.factory-bootstrap-400 .glyphicon-transfer:before{content:"\e178"}.factory-bootstrap-400 .glyphicon-cutlery:before{content:"\e179"}.factory-bootstrap-400 .glyphicon-header:before{content:"\e180"}.factory-bootstrap-400 .glyphicon-compressed:before{content:"\e181"}.factory-bootstrap-400 .glyphicon-earphone:before{content:"\e182"}.factory-bootstrap-400 .glyphicon-phone-alt:before{content:"\e183"}.factory-bootstrap-400 .glyphicon-tower:before{content:"\e184"}.factory-bootstrap-400 .glyphicon-stats:before{content:"\e185"}.factory-bootstrap-400 .glyphicon-sd-video:before{content:"\e186"}.factory-bootstrap-400 .glyphicon-hd-video:before{content:"\e187"}.factory-bootstrap-400 .glyphicon-subtitles:before{content:"\e188"}.factory-bootstrap-400 .glyphicon-sound-stereo:before{content:"\e189"}.factory-bootstrap-400 .glyphicon-sound-dolby:before{content:"\e190"}.factory-bootstrap-400 .glyphicon-sound-5-1:before{content:"\e191"}.factory-bootstrap-400 .glyphicon-sound-6-1:before{content:"\e192"}.factory-bootstrap-400 .glyphicon-sound-7-1:before{content:"\e193"}.factory-bootstrap-400 .glyphicon-copyright-mark:before{content:"\e194"}.factory-bootstrap-400 .glyphicon-registration-mark:before{content:"\e195"}.factory-bootstrap-400 .glyphicon-cloud-download:before{content:"\e197"}.factory-bootstrap-400 .glyphicon-cloud-upload:before{content:"\e198"}.factory-bootstrap-400 .glyphicon-tree-conifer:before{content:"\e199"}.factory-bootstrap-400 .glyphicon-tree-deciduous:before{content:"\e200"}.factory-bootstrap-400 .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-400 .dropdown{position:relative}.factory-bootstrap-400 .dropdown-toggle:focus{outline:0}.factory-bootstrap-400 .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-400 .dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-400 .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-400 .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-400 .dropdown-menu>li>a:focus,.factory-bootstrap-400 .dropdown-menu>li>a:hover{color:#262626;text-decoration:none}.factory-bootstrap-400 .dropdown-menu>.active>a,.factory-bootstrap-400 .dropdown-menu>.active>a:focus,.factory-bootstrap-400 .dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0}.factory-bootstrap-400 .dropdown-menu>.disabled>a,.factory-bootstrap-400 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-400 .dropdown-menu>.disabled>a:hover{color:#999}.factory-bootstrap-400 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-400 .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-400 .open>.dropdown-menu{display:block}.factory-bootstrap-400 .open>a{outline:0}.factory-bootstrap-400 .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.factory-bootstrap-400 .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.factory-bootstrap-400 .pull-right>.dropdown-menu{right:0;left:auto}.factory-bootstrap-400 .dropup .caret,.factory-bootstrap-400 .navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.factory-bootstrap-400 .dropup .dropdown-menu,.factory-bootstrap-400 .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-400 .btn-group,.factory-bootstrap-400 .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.factory-bootstrap-400 .btn-group-vertical>.btn,.factory-bootstrap-400 .btn-group>.btn{position:relative;float:left}.factory-bootstrap-400 .btn-group-vertical>.btn.active,.factory-bootstrap-400 .btn-group-vertical>.btn:active,.factory-bootstrap-400 .btn-group-vertical>.btn:focus,.factory-bootstrap-400 .btn-group-vertical>.btn:hover,.factory-bootstrap-400 .btn-group>.btn.active,.factory-bootstrap-400 .btn-group>.btn:active,.factory-bootstrap-400 .btn-group>.btn:focus,.factory-bootstrap-400 .btn-group>.btn:hover{z-index:2}.factory-bootstrap-400 .btn-group-vertical>.btn:focus,.factory-bootstrap-400 .btn-group>.btn:focus{outline:0}.factory-bootstrap-400 .btn-group .btn+.btn,.factory-bootstrap-400 .btn-group .btn+.btn-group,.factory-bootstrap-400 .btn-group .btn-group+.btn,.factory-bootstrap-400 .btn-group .btn-group+.btn-group{margin-left:-1px}.factory-bootstrap-400 .btn-toolbar:after,.factory-bootstrap-400 .btn-toolbar:before{display:table;content:" "}.factory-bootstrap-400 .btn-toolbar:after{clear:both}.factory-bootstrap-400 .btn-toolbar .btn-group{float:left}.factory-bootstrap-400 .btn-toolbar>.btn+.btn,.factory-bootstrap-400 .btn-toolbar>.btn+.btn-group,.factory-bootstrap-400 .btn-toolbar>.btn-group+.btn,.factory-bootstrap-400 .btn-toolbar>.btn-group+.btn-group{margin-left:5px}.factory-bootstrap-400 .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.factory-bootstrap-400 .btn-group>.btn:first-child{margin-left:0}.factory-bootstrap-400 .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-400 .btn-group>.btn:last-child:not(:first-child),.factory-bootstrap-400 .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-400 .btn-group>.btn-group{float:left}.factory-bootstrap-400 .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-400 .btn-group>.btn-group:first-child>.btn:last-child,.factory-bootstrap-400 .btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-400 .btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-400 .btn-group .dropdown-toggle:active,.factory-bootstrap-400 .btn-group.open .dropdown-toggle{outline:0}.factory-bootstrap-400 .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-400 .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-400 .btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-400 .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.factory-bootstrap-400 .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.factory-bootstrap-400 .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-400 .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-400 .btn-group{border:4px solid #f9f9f9;border-radius:4px}.factory-bootstrap-400 .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-400 .btn .caret{margin-left:0}.factory-bootstrap-400 .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.factory-bootstrap-400 .dropup .btn-lg .caret{border-width:0 5px 5px}.factory-bootstrap-400 .btn-group-vertical>.btn,.factory-bootstrap-400 .btn-group-vertical>.btn-group,.factory-bootstrap-400 .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.factory-bootstrap-400 .btn-group-vertical>.btn-group:after,.factory-bootstrap-400 .btn-group-vertical>.btn-group:before{display:table;content:" "}.factory-bootstrap-400 .btn-group-vertical>.btn-group:after{clear:both}.factory-bootstrap-400 .btn-group-vertical>.btn-group>.btn{float:none}.factory-bootstrap-400 .btn-group-vertical>.btn+.btn,.factory-bootstrap-400 .btn-group-vertical>.btn+.btn-group,.factory-bootstrap-400 .btn-group-vertical>.btn-group+.btn,.factory-bootstrap-400 .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.factory-bootstrap-400 .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-400 .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-400 .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-400 .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-400 .btn-group-vertical>.btn-group:first-child>.btn:last-child,.factory-bootstrap-400 .btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-400 .btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-400 .btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.factory-bootstrap-400 .btn-group-justified>.btn,.factory-bootstrap-400 .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.factory-bootstrap-400 .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-400 .input-group{position:relative;display:table;border-collapse:separate}.factory-bootstrap-400 .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.factory-bootstrap-400 .input-group .form-control{width:100%;margin-bottom:0}.factory-bootstrap-400 .input-group-lg>.form-control,.factory-bootstrap-400 .input-group-lg>.input-group-addon,.factory-bootstrap-400 .input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-400 select.input-group-lg>.form-control,.factory-bootstrap-400 select.input-group-lg>.input-group-addon,.factory-bootstrap-400 select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.factory-bootstrap-400 textarea.input-group-lg>.form-control,.factory-bootstrap-400 textarea.input-group-lg>.input-group-addon,.factory-bootstrap-400 textarea.input-group-lg>.input-group-btn>.btn{height:auto}.factory-bootstrap-400 .input-group-sm>.form-control,.factory-bootstrap-400 .input-group-sm>.input-group-addon,.factory-bootstrap-400 .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-400 select.input-group-sm>.form-control,.factory-bootstrap-400 select.input-group-sm>.input-group-addon,.factory-bootstrap-400 select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.factory-bootstrap-400 textarea.input-group-sm>.form-control,.factory-bootstrap-400 textarea.input-group-sm>.input-group-addon,.factory-bootstrap-400 textarea.input-group-sm>.input-group-btn>.btn{height:auto}.factory-bootstrap-400 .input-group .form-control,.factory-bootstrap-400 .input-group-addon,.factory-bootstrap-400 .input-group-btn{display:table-cell}.factory-bootstrap-400 .input-group .form-control:not(:first-child):not(:last-child),.factory-bootstrap-400 .input-group-addon:not(:first-child):not(:last-child),.factory-bootstrap-400 .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-400 .input-group-addon,.factory-bootstrap-400 .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.factory-bootstrap-400 .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-400 .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.factory-bootstrap-400 .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.factory-bootstrap-400 .input-group-addon input[type=checkbox],.factory-bootstrap-400 .input-group-addon input[type=radio]{margin-top:0}.factory-bootstrap-400 .input-group .form-control:first-child,.factory-bootstrap-400 .input-group-addon:first-child,.factory-bootstrap-400 .input-group-btn:first-child>.btn,.factory-bootstrap-400 .input-group-btn:first-child>.dropdown-toggle,.factory-bootstrap-400 .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-400 .input-group-addon:first-child{border-right:0}.factory-bootstrap-400 .input-group .form-control:last-child,.factory-bootstrap-400 .input-group-addon:last-child,.factory-bootstrap-400 .input-group-btn:first-child>.btn:not(:first-child),.factory-bootstrap-400 .input-group-btn:last-child>.btn,.factory-bootstrap-400 .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-400 .input-group-addon:last-child{border-left:0}.factory-bootstrap-400 .input-group-btn{position:relative;white-space:nowrap}.factory-bootstrap-400 .input-group-btn:first-child>.btn{margin-right:-1px}.factory-bootstrap-400 .input-group-btn:last-child>.btn{margin-left:-1px}.factory-bootstrap-400 .input-group-btn>.btn{position:relative}.factory-bootstrap-400 .input-group-btn>.btn+.btn{margin-left:-4px}.factory-bootstrap-400 .input-group-btn>.btn:active,.factory-bootstrap-400 .input-group-btn>.btn:hover{z-index:2}.factory-bootstrap-400 .nav{padding-left:0;margin-bottom:0;list-style:none}.factory-bootstrap-400 .nav:after,.factory-bootstrap-400 .nav:before{display:table;content:" "}.factory-bootstrap-400 .nav:after{clear:both}.factory-bootstrap-400 .nav>li{position:relative;display:block}.factory-bootstrap-400 .nav>li>a{position:relative;display:block;padding:10px 15px}.factory-bootstrap-400 .nav>li>a:focus,.factory-bootstrap-400 .nav>li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-400 .nav>li.disabled>a{color:#999}.factory-bootstrap-400 .nav>li.disabled>a:focus,.factory-bootstrap-400 .nav>li.disabled>a:hover{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.factory-bootstrap-400 .nav .open>a,.factory-bootstrap-400 .nav .open>a:focus,.factory-bootstrap-400 .nav .open>a:hover{background-color:#eee;border-color:#428bca}.factory-bootstrap-400 .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-400 .nav>li>a>img{max-width:none}.factory-bootstrap-400 .nav-tabs{border-bottom:1px solid #ddd}.factory-bootstrap-400 .nav-tabs>li{float:left;margin-bottom:-1px}.factory-bootstrap-400 .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.factory-bootstrap-400 .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.factory-bootstrap-400 .nav-tabs>li.active>a,.factory-bootstrap-400 .nav-tabs>li.active>a:focus,.factory-bootstrap-400 .nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.factory-bootstrap-400 .nav-tabs.nav-justified{width:100%;border-bottom:0}.factory-bootstrap-400 .nav-tabs.nav-justified>li{float:none}.factory-bootstrap-400 .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-400 .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-400 .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-400 .nav-tabs.nav-justified>.active>a,.factory-bootstrap-400 .nav-tabs.nav-justified>.active>a:focus,.factory-bootstrap-400 .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-400 .nav-pills>li{float:left}.factory-bootstrap-400 .nav-pills>li>a{border-radius:4px}.factory-bootstrap-400 .nav-pills>li+li{margin-left:2px}.factory-bootstrap-400 .nav-pills>li.active>a,.factory-bootstrap-400 .nav-pills>li.active>a:focus,.factory-bootstrap-400 .nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.factory-bootstrap-400 .nav-stacked>li{float:none}.factory-bootstrap-400 .nav-stacked>li+li{margin-top:2px;margin-left:0}.factory-bootstrap-400 .nav-justified{width:100%}.factory-bootstrap-400 .nav-justified>li{float:none}.factory-bootstrap-400 .nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-400 .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-400 .nav-tabs-justified{border-bottom:0}.factory-bootstrap-400 .nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-400 .nav-tabs-justified>.active>a,.factory-bootstrap-400 .nav-tabs-justified>.active>a:focus,.factory-bootstrap-400 .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-400 .tab-content>.tab-pane{display:none}.factory-bootstrap-400 .tab-content>.active{display:block}.factory-bootstrap-400 .nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-400 .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.factory-bootstrap-400 .navbar:after,.factory-bootstrap-400 .navbar:before{display:table;content:" "}.factory-bootstrap-400 .navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.factory-bootstrap-400 .navbar-header:after,.factory-bootstrap-400 .navbar-header:before{display:table;content:" "}.factory-bootstrap-400 .navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.factory-bootstrap-400 .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-400 .navbar-collapse:after,.factory-bootstrap-400 .navbar-collapse:before{display:table;content:" "}.factory-bootstrap-400 .navbar-collapse:after{clear:both}.factory-bootstrap-400 .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-400 .container>.navbar-collapse,.factory-bootstrap-400 .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-400 .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.factory-bootstrap-400 .navbar-fixed-bottom,.factory-bootstrap-400 .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-400 .navbar-fixed-top{top:0;border-width:0 0 1px}.factory-bootstrap-400 .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.factory-bootstrap-400 .navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px}.factory-bootstrap-400 .navbar-brand:focus,.factory-bootstrap-400 .navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.factory-bootstrap-400 .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-400 .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.factory-bootstrap-400 .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.factory-bootstrap-400 .navbar-nav{margin:7.5px -15px}.factory-bootstrap-400 .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-400 .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-400 .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-400 .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-400 .navbar-nav.pull-right>li>.dropdown-menu,.factory-bootstrap-400 .navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-400 .navbar-btn{margin-top:8px;margin-bottom:8px}.factory-bootstrap-400 .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.factory-bootstrap-400 .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.factory-bootstrap-400 .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-400 .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.factory-bootstrap-400 .navbar-default .navbar-brand{color:#777}.factory-bootstrap-400 .navbar-default .navbar-brand:focus,.factory-bootstrap-400 .navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.factory-bootstrap-400 .navbar-default .navbar-nav>li>a,.factory-bootstrap-400 .navbar-default .navbar-text{color:#777}.factory-bootstrap-400 .navbar-default .navbar-nav>li>a:focus,.factory-bootstrap-400 .navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.factory-bootstrap-400 .navbar-default .navbar-nav>.active>a,.factory-bootstrap-400 .navbar-default .navbar-nav>.active>a:focus,.factory-bootstrap-400 .navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.factory-bootstrap-400 .navbar-default .navbar-nav>.disabled>a,.factory-bootstrap-400 .navbar-default .navbar-nav>.disabled>a:focus,.factory-bootstrap-400 .navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.factory-bootstrap-400 .navbar-default .navbar-toggle{border-color:#ddd}.factory-bootstrap-400 .navbar-default .navbar-toggle:focus,.factory-bootstrap-400 .navbar-default .navbar-toggle:hover{background-color:#ddd}.factory-bootstrap-400 .navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.factory-bootstrap-400 .navbar-default .navbar-collapse,.factory-bootstrap-400 .navbar-default .navbar-form{border-color:#e7e7e7}.factory-bootstrap-400 .navbar-default .navbar-nav>.open>a,.factory-bootstrap-400 .navbar-default .navbar-nav>.open>a:focus,.factory-bootstrap-400 .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-400 .navbar-default .navbar-link{color:#777}.factory-bootstrap-400 .navbar-default .navbar-link:hover{color:#333}.factory-bootstrap-400 .navbar-inverse{background-color:#222;border-color:#080808}.factory-bootstrap-400 .navbar-inverse .navbar-brand{color:#999}.factory-bootstrap-400 .navbar-inverse .navbar-brand:focus,.factory-bootstrap-400 .navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.factory-bootstrap-400 .navbar-inverse .navbar-nav>li>a,.factory-bootstrap-400 .navbar-inverse .navbar-text{color:#999}.factory-bootstrap-400 .navbar-inverse .navbar-nav>li>a:focus,.factory-bootstrap-400 .navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.factory-bootstrap-400 .navbar-inverse .navbar-nav>.active>a,.factory-bootstrap-400 .navbar-inverse .navbar-nav>.active>a:focus,.factory-bootstrap-400 .navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.factory-bootstrap-400 .navbar-inverse .navbar-nav>.disabled>a,.factory-bootstrap-400 .navbar-inverse .navbar-nav>.disabled>a:focus,.factory-bootstrap-400 .navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.factory-bootstrap-400 .navbar-inverse .navbar-toggle{border-color:#333}.factory-bootstrap-400 .navbar-inverse .navbar-toggle:focus,.factory-bootstrap-400 .navbar-inverse .navbar-toggle:hover{background-color:#333}.factory-bootstrap-400 .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.factory-bootstrap-400 .navbar-inverse .navbar-collapse,.factory-bootstrap-400 .navbar-inverse .navbar-form{border-color:#101010}.factory-bootstrap-400 .navbar-inverse .navbar-nav>.open>a,.factory-bootstrap-400 .navbar-inverse .navbar-nav>.open>a:focus,.factory-bootstrap-400 .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-400 .navbar-inverse .navbar-link{color:#999}.factory-bootstrap-400 .navbar-inverse .navbar-link:hover{color:#fff}.factory-bootstrap-400 .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.factory-bootstrap-400 .breadcrumb>li{display:inline-block}.factory-bootstrap-400 .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.factory-bootstrap-400 .breadcrumb>.active{color:#999}.factory-bootstrap-400 .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.factory-bootstrap-400 .pagination>li{display:inline}.factory-bootstrap-400 .pagination>li>a,.factory-bootstrap-400 .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-400 .pagination>li:first-child>a,.factory-bootstrap-400 .pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.factory-bootstrap-400 .pagination>li:last-child>a,.factory-bootstrap-400 .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.factory-bootstrap-400 .pagination>li>a:focus,.factory-bootstrap-400 .pagination>li>a:hover,.factory-bootstrap-400 .pagination>li>span:focus,.factory-bootstrap-400 .pagination>li>span:hover{background-color:#eee}.factory-bootstrap-400 .pagination>.active>a,.factory-bootstrap-400 .pagination>.active>a:focus,.factory-bootstrap-400 .pagination>.active>a:hover,.factory-bootstrap-400 .pagination>.active>span,.factory-bootstrap-400 .pagination>.active>span:focus,.factory-bootstrap-400 .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#1e8cbe;border-color:#0074a2}.factory-bootstrap-400 .pagination>.disabled>a,.factory-bootstrap-400 .pagination>.disabled>a:focus,.factory-bootstrap-400 .pagination>.disabled>a:hover,.factory-bootstrap-400 .pagination>.disabled>span,.factory-bootstrap-400 .pagination>.disabled>span:focus,.factory-bootstrap-400 .pagination>.disabled>span:hover{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.factory-bootstrap-400 .pagination-lg>li>a,.factory-bootstrap-400 .pagination-lg>li>span{padding:10px 16px;font-size:18px}.factory-bootstrap-400 .pagination-lg>li:first-child>a,.factory-bootstrap-400 .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.factory-bootstrap-400 .pagination-lg>li:last-child>a,.factory-bootstrap-400 .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.factory-bootstrap-400 .pagination-sm>li>a,.factory-bootstrap-400 .pagination-sm>li>span{padding:5px 10px;font-size:12px}.factory-bootstrap-400 .pagination-sm>li:first-child>a,.factory-bootstrap-400 .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.factory-bootstrap-400 .pagination-sm>li:last-child>a,.factory-bootstrap-400 .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.factory-bootstrap-400 .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.factory-bootstrap-400 .pager:after,.factory-bootstrap-400 .pager:before{display:table;content:" "}.factory-bootstrap-400 .pager:after{clear:both}.factory-bootstrap-400 .pager li{display:inline}.factory-bootstrap-400 .pager li>a,.factory-bootstrap-400 .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.factory-bootstrap-400 .pager li>a:focus,.factory-bootstrap-400 .pager li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-400 .pager .next>a,.factory-bootstrap-400 .pager .next>span{float:right}.factory-bootstrap-400 .pager .previous>a,.factory-bootstrap-400 .pager .previous>span{float:left}.factory-bootstrap-400 .pager .disabled>a,.factory-bootstrap-400 .pager .disabled>a:focus,.factory-bootstrap-400 .pager .disabled>a:hover,.factory-bootstrap-400 .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.factory-bootstrap-400 .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-400 .label[href]:focus,.factory-bootstrap-400 .label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-400 .label:empty{display:none}.factory-bootstrap-400 .btn .label{position:relative;top:-1px}.factory-bootstrap-400 .label-default{background-color:#999}.factory-bootstrap-400 .label-default[href]:focus,.factory-bootstrap-400 .label-default[href]:hover{background-color:gray}.factory-bootstrap-400 .label-primary{background-color:#428bca}.factory-bootstrap-400 .label-primary[href]:focus,.factory-bootstrap-400 .label-primary[href]:hover{background-color:#3071a9}.factory-bootstrap-400 .label-success{background-color:#5cb85c}.factory-bootstrap-400 .label-success[href]:focus,.factory-bootstrap-400 .label-success[href]:hover{background-color:#449d44}.factory-bootstrap-400 .label-info{background-color:#5bc0de}.factory-bootstrap-400 .label-info[href]:focus,.factory-bootstrap-400 .label-info[href]:hover{background-color:#31b0d5}.factory-bootstrap-400 .label-warning{background-color:#f0ad4e}.factory-bootstrap-400 .label-warning[href]:focus,.factory-bootstrap-400 .label-warning[href]:hover{background-color:#ec971f}.factory-bootstrap-400 .label-danger{background-color:#d9534f}.factory-bootstrap-400 .label-danger[href]:focus,.factory-bootstrap-400 .label-danger[href]:hover{background-color:#c9302c}.factory-bootstrap-400 .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-400 .badge:empty{display:none}.factory-bootstrap-400 .btn .badge{position:relative;top:-1px}.factory-bootstrap-400 a.badge:focus,.factory-bootstrap-400 a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-400 .nav-pills>.active>a>.badge,.factory-bootstrap-400 a.list-group-item.active>.badge{color:#428bca;background-color:#fff}.factory-bootstrap-400 .nav-pills>li>a>.badge{margin-left:3px}.factory-bootstrap-400 .jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.factory-bootstrap-400 .jumbotron .h1,.factory-bootstrap-400 .jumbotron h1{line-height:1;color:inherit}.factory-bootstrap-400 .jumbotron p{line-height:1.4}.factory-bootstrap-400 .container .jumbotron{border-radius:6px}.factory-bootstrap-400 .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-400 .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-400 .thumbnail a>img,.factory-bootstrap-400 .thumbnail>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}.factory-bootstrap-400 a.thumbnail.active,.factory-bootstrap-400 a.thumbnail:focus,.factory-bootstrap-400 a.thumbnail:hover{border-color:#428bca}.factory-bootstrap-400 .thumbnail .caption{padding:9px;color:#333}.factory-bootstrap-400 .alert{border:1px solid transparent;border-radius:4px}.factory-bootstrap-400 .alert h4{margin-top:0;color:inherit}.factory-bootstrap-400 .alert .alert-link{font-weight:700}.factory-bootstrap-400 .alert>p,.factory-bootstrap-400 .alert>ul{margin-bottom:0}.factory-bootstrap-400 .alert>p+p{margin-top:5px}.factory-bootstrap-400 .alert-dismissable{padding-right:35px}.factory-bootstrap-400 .alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.factory-bootstrap-400 .alert-info{color:#31708f;background-color:#d9edf7}.factory-bootstrap-400 .alert-info hr{border-top-color:#a6e1ec}.factory-bootstrap-400 .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-400 .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-400 .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-400 .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-400 .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.factory-bootstrap-400 .progress-bar-success{background-color:#5cb85c}.factory-bootstrap-400 .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-400 .progress-bar-info{background-color:#5bc0de}.factory-bootstrap-400 .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-400 .progress-bar-warning{background-color:#f0ad4e}.factory-bootstrap-400 .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-400 .progress-bar-danger{background-color:#d9534f}.factory-bootstrap-400 .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-400 .media,.factory-bootstrap-400 .media-body{overflow:hidden;zoom:1}.factory-bootstrap-400 .media,.factory-bootstrap-400 .media .media{margin-top:15px}.factory-bootstrap-400 .media:first-child{margin-top:0}.factory-bootstrap-400 .media-object{display:block}.factory-bootstrap-400 .media-heading{margin:0 0 5px}.factory-bootstrap-400 .media>.pull-left{margin-right:10px}.factory-bootstrap-400 .media>.pull-right{margin-left:10px}.factory-bootstrap-400 .media-list{padding-left:0;list-style:none}.factory-bootstrap-400 .list-group{padding-left:0;margin-bottom:20px}.factory-bootstrap-400 .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-400 .list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.factory-bootstrap-400 .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.factory-bootstrap-400 .list-group-item>.badge{float:right}.factory-bootstrap-400 .list-group-item>.badge+.badge{margin-right:5px}.factory-bootstrap-400 a.list-group-item{color:#555}.factory-bootstrap-400 a.list-group-item .list-group-item-heading{color:#333}.factory-bootstrap-400 a.list-group-item:focus,.factory-bootstrap-400 a.list-group-item:hover{text-decoration:none;background-color:#f5f5f5}.factory-bootstrap-400 a.list-group-item.active,.factory-bootstrap-400 a.list-group-item.active:focus,.factory-bootstrap-400 a.list-group-item.active:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-400 a.list-group-item.active .list-group-item-heading,.factory-bootstrap-400 a.list-group-item.active:focus .list-group-item-heading,.factory-bootstrap-400 a.list-group-item.active:hover .list-group-item-heading{color:inherit}.factory-bootstrap-400 a.list-group-item.active .list-group-item-text,.factory-bootstrap-400 a.list-group-item.active:focus .list-group-item-text,.factory-bootstrap-400 a.list-group-item.active:hover .list-group-item-text{color:#e1edf7}.factory-bootstrap-400 .list-group-item-heading{margin-top:0;margin-bottom:5px}.factory-bootstrap-400 .list-group-item-text{margin-bottom:0;line-height:1.3}.factory-bootstrap-400 .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px}.factory-bootstrap-400 .panel-body{padding:15px}.factory-bootstrap-400 .panel-body:after,.factory-bootstrap-400 .panel-body:before{display:table;content:" "}.factory-bootstrap-400 .panel-body:after{clear:both}.factory-bootstrap-400 .panel>.list-group{margin-bottom:0}.factory-bootstrap-400 .panel>.list-group .list-group-item{border-width:1px 0}.factory-bootstrap-400 .panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-400 .panel>.list-group .list-group-item:last-child{border-bottom:0}.factory-bootstrap-400 .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.factory-bootstrap-400 .panel>.table,.factory-bootstrap-400 .panel>.table-responsive>.table{margin-bottom:0}.factory-bootstrap-400 .panel>.panel-body+.table,.factory-bootstrap-400 .panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.factory-bootstrap-400 .panel>.table>tbody:first-child td,.factory-bootstrap-400 .panel>.table>tbody:first-child th{border-top:0}.factory-bootstrap-400 .panel>.table-bordered,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered{border:0}.factory-bootstrap-400 .panel>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-400 .panel>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-400 .panel>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-400 .panel>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-400 .panel>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-400 .panel>.table-bordered>thead>tr>th:first-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.factory-bootstrap-400 .panel>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-400 .panel>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-400 .panel>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-400 .panel>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-400 .panel>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-400 .panel>.table-bordered>thead>tr>th:last-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.factory-bootstrap-400 .panel>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-400 .panel>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-400 .panel>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-400 .panel>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-400 .panel>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-400 .panel>.table-bordered>thead>tr:last-child>th,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-400 .panel>.table-responsive>.table-bordered>thead>tr:last-child>th{border-bottom:0}.factory-bootstrap-400 .panel>.table-responsive{margin-bottom:0;border:0}.factory-bootstrap-400 .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.factory-bootstrap-400 .panel-heading>.dropdown .dropdown-toggle{color:inherit}.factory-bootstrap-400 .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.factory-bootstrap-400 .panel-title>a{color:inherit}.factory-bootstrap-400 .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-400 .panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.factory-bootstrap-400 .panel-group .panel+.panel{margin-top:5px}.factory-bootstrap-400 .panel-group .panel-heading{border-bottom:0}.factory-bootstrap-400 .panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.factory-bootstrap-400 .panel-group .panel-footer{border-top:0}.factory-bootstrap-400 .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.factory-bootstrap-400 .panel-default{border-color:#ddd}.factory-bootstrap-400 .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.factory-bootstrap-400 .panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.factory-bootstrap-400 .panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.factory-bootstrap-400 .panel-primary{border-color:#428bca}.factory-bootstrap-400 .panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-400 .panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.factory-bootstrap-400 .panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.factory-bootstrap-400 .panel-success{border-color:#d6e9c6}.factory-bootstrap-400 .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.factory-bootstrap-400 .panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.factory-bootstrap-400 .panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.factory-bootstrap-400 .panel-warning{border-color:#faebcc}.factory-bootstrap-400 .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.factory-bootstrap-400 .panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.factory-bootstrap-400 .panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.factory-bootstrap-400 .panel-danger{border-color:#ebccd1}.factory-bootstrap-400 .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.factory-bootstrap-400 .panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.factory-bootstrap-400 .panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.factory-bootstrap-400 .panel-info{border-color:#bce8f1}.factory-bootstrap-400 .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.factory-bootstrap-400 .panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.factory-bootstrap-400 .panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.factory-bootstrap-400 .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px}.factory-bootstrap-400 .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.factory-bootstrap-400 .well-lg{padding:24px;border-radius:6px}.factory-bootstrap-400 .well-sm{padding:9px;border-radius:3px}.factory-bootstrap-400 .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-400 .alert .close{position:relative;top:-8px;right:-7px}.factory-bootstrap-400 .close:focus,.factory-bootstrap-400 .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-400 button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.factory-bootstrap-400 .modal-open{overflow:hidden}.factory-bootstrap-400 .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-400 .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-400 .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.factory-bootstrap-400 .modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.factory-bootstrap-400 .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-400 .modal-backdrop,.factory-bootstrap-400-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.factory-bootstrap-400 .modal-backdrop.fade,.factory-bootstrap-400-modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.factory-bootstrap-400 .modal-backdrop.in,.factory-bootstrap-400-modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-400 .modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.factory-bootstrap-400 .modal-header .close{margin-top:-2px}.factory-bootstrap-400 .modal-title{margin:0;line-height:1.428571429}.factory-bootstrap-400 .modal-body{position:relative;padding:20px;max-height:none}.factory-bootstrap-400 .modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.factory-bootstrap-400 .modal-footer:after,.factory-bootstrap-400 .modal-footer:before{display:table;content:" "}.factory-bootstrap-400 .modal-footer:after{clear:both}.factory-bootstrap-400 .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.factory-bootstrap-400 .modal-footer .btn-group .btn+.btn{margin-left:-1px}.factory-bootstrap-400 .modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.factory-bootstrap-400 .modal-dialog{width:600px;margin:30px auto}.factory-bootstrap-400 .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-400 .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-400 .tooltip.in{opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-400 .tooltip.top{padding:5px 0;margin-top:-3px}.factory-bootstrap-400 .tooltip.right{padding:0 5px;margin-left:3px}.factory-bootstrap-400 .tooltip.bottom{padding:5px 0;margin-top:3px}.factory-bootstrap-400 .tooltip.left{padding:0 5px;margin-left:-3px}.factory-bootstrap-400 .tooltip-inner{width:400px;padding:15px 20px;color:#fff;text-align:left;text-decoration:none;background-color:#673ab7;border-radius:3px}.factory-bootstrap-400 .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-400 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-400 .tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-400 .tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-400 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#673ab7;border-width:5px 5px 5px 0}.factory-bootstrap-400 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#673ab7;border-width:5px 0 5px 5px}.factory-bootstrap-400 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-400 .tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-400 .tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-400 .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-400 .popover.top{margin-top:-10px}.factory-bootstrap-400 .popover.right{margin-left:10px}.factory-bootstrap-400 .popover.bottom{margin-top:10px}.factory-bootstrap-400 .popover.left{margin-left:-10px}.factory-bootstrap-400 .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-400 .popover-content{padding:9px 14px}.factory-bootstrap-400 .popover .arrow,.factory-bootstrap-400 .popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-400 .popover .arrow{border-width:11px}.factory-bootstrap-400 .popover .arrow:after{border-width:10px;content:""}.factory-bootstrap-400 .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-400 .popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.factory-bootstrap-400 .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-400 .popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.factory-bootstrap-400 .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-400 .popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.factory-bootstrap-400 .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-400 .popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.factory-bootstrap-400 .carousel{position:relative}.factory-bootstrap-400 .carousel-inner{position:relative;width:100%;overflow:hidden}.factory-bootstrap-400 .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.factory-bootstrap-400 .carousel-inner>.item>a>img,.factory-bootstrap-400 .carousel-inner>.item>img{display:block;height:auto;max-width:100%;line-height:1}.factory-bootstrap-400 .carousel-inner>.active,.factory-bootstrap-400 .carousel-inner>.next,.factory-bootstrap-400 .carousel-inner>.prev{display:block}.factory-bootstrap-400 .carousel-inner>.active{left:0}.factory-bootstrap-400 .carousel-inner>.next,.factory-bootstrap-400 .carousel-inner>.prev{position:absolute;top:0;width:100%}.factory-bootstrap-400 .carousel-inner>.next{left:100%}.factory-bootstrap-400 .carousel-inner>.prev{left:-100%}.factory-bootstrap-400 .carousel-inner>.next.left,.factory-bootstrap-400 .carousel-inner>.prev.right{left:0}.factory-bootstrap-400 .carousel-inner>.active.left{left:-100%}.factory-bootstrap-400 .carousel-inner>.active.right{left:100%}.factory-bootstrap-400 .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-400 .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-400 .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-400 .carousel-control:focus,.factory-bootstrap-400 .carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-400 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-400 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-400 .carousel-control .icon-next,.factory-bootstrap-400 .carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.factory-bootstrap-400 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-400 .carousel-control .icon-prev{left:50%}.factory-bootstrap-400 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-400 .carousel-control .icon-next{right:50%}.factory-bootstrap-400 .carousel-control .icon-next,.factory-bootstrap-400 .carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.factory-bootstrap-400 .carousel-control .icon-prev:before{content:'\2039'}.factory-bootstrap-400 .carousel-control .icon-next:before{content:'\203a'}.factory-bootstrap-400 .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-400 .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-400 .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.factory-bootstrap-400 .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-400 .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-400 .clearfix:after,.factory-bootstrap-400 .clearfix:before{display:table;content:" "}.factory-bootstrap-400 .clearfix:after{clear:both}.factory-bootstrap-400 .center-block{display:block;margin-right:auto;margin-left:auto}.factory-bootstrap-400 .pull-right{float:right!important}.factory-bootstrap-400 .pull-left{float:left!important}.factory-bootstrap-400 .hide{display:none!important}.factory-bootstrap-400 .show{display:block!important}.factory-bootstrap-400 .invisible{visibility:hidden}.factory-bootstrap-400 .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.factory-bootstrap-400 .hidden{display:none!important;visibility:hidden!important}.factory-bootstrap-400 .affix{position:fixed}@-ms-viewport{width:device-width}.factory-bootstrap-400 .visible-lg,.factory-bootstrap-400 .visible-md,.factory-bootstrap-400 .visible-sm,.factory-bootstrap-400 .visible-xs,.factory-bootstrap-400 td.visible-lg,.factory-bootstrap-400 td.visible-md,.factory-bootstrap-400 td.visible-sm,.factory-bootstrap-400 td.visible-xs,.factory-bootstrap-400 th.visible-lg,.factory-bootstrap-400 th.visible-md,.factory-bootstrap-400 th.visible-sm,.factory-bootstrap-400 th.visible-xs,.factory-bootstrap-400 tr.visible-lg,.factory-bootstrap-400 tr.visible-md,.factory-bootstrap-400 tr.visible-sm,.factory-bootstrap-400 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-400 .hidden-xs{display:block!important}.factory-bootstrap-400 table.hidden-xs{display:table}.factory-bootstrap-400 tr.hidden-xs{display:table-row!important}.factory-bootstrap-400 td.hidden-xs,.factory-bootstrap-400 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-400 .hidden-sm{display:block!important}.factory-bootstrap-400 table.hidden-sm{display:table}.factory-bootstrap-400 tr.hidden-sm{display:table-row!important}.factory-bootstrap-400 td.hidden-sm,.factory-bootstrap-400 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-400 .hidden-md{display:block!important}.factory-bootstrap-400 table.hidden-md{display:table}.factory-bootstrap-400 tr.hidden-md{display:table-row!important}.factory-bootstrap-400 td.hidden-md,.factory-bootstrap-400 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-400 .hidden-lg{display:block!important}.factory-bootstrap-400 table.hidden-lg{display:table}.factory-bootstrap-400 tr.hidden-lg{display:table-row!important}.factory-bootstrap-400 td.hidden-lg,.factory-bootstrap-400 th.hidden-lg{display:table-cell!important}@media (max-width:767px){.factory-bootstrap-400 .hidden-lg.hidden-xs,.factory-bootstrap-400 td.hidden-lg.hidden-xs,.factory-bootstrap-400 th.hidden-lg.hidden-xs,.factory-bootstrap-400 tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.factory-bootstrap-400 .hidden-lg.hidden-sm,.factory-bootstrap-400 td.hidden-lg.hidden-sm,.factory-bootstrap-400 th.hidden-lg.hidden-sm,.factory-bootstrap-400 tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.factory-bootstrap-400 .hidden-lg.hidden-md,.factory-bootstrap-400 td.hidden-lg.hidden-md,.factory-bootstrap-400 th.hidden-lg.hidden-md,.factory-bootstrap-400 tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1200px){.factory-bootstrap-400 .hidden-lg,.factory-bootstrap-400 td.hidden-lg,.factory-bootstrap-400 th.hidden-lg,.factory-bootstrap-400 tr.hidden-lg{display:none!important}}.factory-bootstrap-400 .visible-print,.factory-bootstrap-400 td.visible-print,.factory-bootstrap-400 th.visible-print,.factory-bootstrap-400 tr.visible-print{display:none!important}@media print{.factory-bootstrap-400 .visible-print{display:block!important}.factory-bootstrap-400 table.visible-print{display:table}.factory-bootstrap-400 tr.visible-print{display:table-row!important}.factory-bootstrap-400 td.visible-print,.factory-bootstrap-400 th.visible-print{display:table-cell!important}.factory-bootstrap-400 .hidden-print,.factory-bootstrap-400 td.hidden-print,.factory-bootstrap-400 th.hidden-print,.factory-bootstrap-400 tr.hidden-print{display:none!important}}/*!
12
+ * Factory Default Bootstrap Theme
13
+ *
14
+ * The code is based on Bootstrap v2.1.1
15
+ *
16
+ * Bootstrap v3.0.3 (http://getbootstrap.com)
17
+ * Copyright 2013 Twitter, Inc.
18
+ * Licensed under http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * @author Paul Kashtanoff <paul@byonepress.com>
21
+ * @copyright (c) 2013, OnePress Ltd
22
+ *
23
+ * @package factory-bootstrap
24
+ * @since 1.0.0
25
+ */.factory-bootstrap-400 .btn-danger,.factory-bootstrap-400 .btn-default,.factory-bootstrap-400 .btn-info,.factory-bootstrap-400 .btn-primary,.factory-bootstrap-400 .btn-success,.factory-bootstrap-400 .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-400 .btn-danger.active,.factory-bootstrap-400 .btn-danger:active,.factory-bootstrap-400 .btn-default.active,.factory-bootstrap-400 .btn-default:active,.factory-bootstrap-400 .btn-info.active,.factory-bootstrap-400 .btn-info:active,.factory-bootstrap-400 .btn-primary.active,.factory-bootstrap-400 .btn-primary:active,.factory-bootstrap-400 .btn-success.active,.factory-bootstrap-400 .btn-success:active,.factory-bootstrap-400 .btn-warning.active,.factory-bootstrap-400 .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-400 .btn.active,.factory-bootstrap-400 .btn:active{background-image:none}.factory-bootstrap-400 .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-400 .btn-default.active,.factory-bootstrap-400 .btn-default:active{background-color:#fff;border-color:#dbdbdb}.factory-bootstrap-400 .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-400 .btn-gold:focus,.factory-bootstrap-400 .btn-gold:hover{background:#fef0a1}.factory-bootstrap-400 .btn-gold.active,.factory-bootstrap-400 .btn-gold:active{background:#fef0a1;-webkit-box-shadow:inset 0 3px 8px 0 #f8ba36;box-shadow:inset 0 3px 8px 0 #f8ba36}.factory-bootstrap-400 .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-400 .btn-primary:focus,.factory-bootstrap-400 .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-400 .btn-primary.active,.factory-bootstrap-400 .btn-primary:active{background-color:#2d6ca2;border-color:#2b669a}.factory-bootstrap-400 .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-400 .btn-success:focus,.factory-bootstrap-400 .btn-success:hover{background-color:#419641;background-position:0 -15px}.factory-bootstrap-400 .btn-success.active,.factory-bootstrap-400 .btn-success:active{background-color:#419641;border-color:#3e8f3e}.factory-bootstrap-400 .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-400 .btn-warning:focus,.factory-bootstrap-400 .btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.factory-bootstrap-400 .btn-warning.active,.factory-bootstrap-400 .btn-warning:active{background-color:#eb9316;border-color:#e38d13}.factory-bootstrap-400 .btn-danger{color:#fff;background:#d9534f;border-color:#d43f3a}.factory-bootstrap-400 .btn-danger.active,.factory-bootstrap-400 .btn-danger:active,.factory-bootstrap-400 .btn-danger:focus,.factory-bootstrap-400 .btn-danger:hover,.factory-bootstrap-400 .open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.factory-bootstrap-400 .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-400 .btn-info:focus,.factory-bootstrap-400 .btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.factory-bootstrap-400 .btn-info.active,.factory-bootstrap-400 .btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.factory-bootstrap-400 .img-thumbnail,.factory-bootstrap-400 .thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-400 .dropdown-menu>li>a:focus,.factory-bootstrap-400 .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-400 .dropdown-menu>.active>a,.factory-bootstrap-400 .dropdown-menu>.active>a:focus,.factory-bootstrap-400 .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-400 .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-400 .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-400 .navbar-brand,.factory-bootstrap-400 .navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.factory-bootstrap-400 .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-400 .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-400 .navbar-inverse .navbar-brand,.factory-bootstrap-400 .navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-400 .navbar-fixed-bottom,.factory-bootstrap-400 .navbar-fixed-top,.factory-bootstrap-400 .navbar-static-top{border-radius:0}.factory-bootstrap-400 .alert{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-400 .alert .actions{padding-top:10px}.factory-bootstrap-400 .alert-success{color:#3c763d;background-color:#dff0d8;border-bottom:2px solid #c8e5bc}.factory-bootstrap-400 .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-400 .alert{text-shadow:none;box-shadow:none;margin:0;margin-top:10px;margin-bottom:10px;padding:10px}.factory-bootstrap-400 .alert-normal,.factory-bootstrap-400 .alert-warning{background:#fcf8e3;color:#8a6d3b;border:1px solid #b8823b}.factory-bootstrap-400 .alert-danger{background:#cf4944;color:#fff;border-bottom:2px solid #b23e3a}.factory-bootstrap-400 .alert-danger a:not(.btn),.factory-bootstrap-400 .alert-error a:not(.btn){color:#fff}.factory-bootstrap-400 .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-400 .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-400 .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-400 .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-400 .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-400 .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-400 .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-400 .list-group-item.active,.factory-bootstrap-400 .list-group-item.active:focus,.factory-bootstrap-400 .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-400 .panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-400 .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-400 .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-400 .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-400 .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-400 .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-400 .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-400 .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-400 .factory-after{margin-left:7px;display:inline-block}.factory-bootstrap-400 .factory-hidden{display:none}.factory-bootstrap-400 .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 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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
+ /*!
12
+ * Datepicker for Bootstrap v1.5.0-dev (https://github.com/eternicode/bootstrap-datepicker)
13
+ *
14
+ * Copyright 2012 Stefan Petre
15
+ * Improvements by Andrew Rowls
16
+ * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
17
+ */.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 ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .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-400 .btn-primary:focus,.factory-bootstrap-400 .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-400 .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-400 .btn-primary:disabled,.factory-bootstrap-400 .btn-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.factory-bootstrap-400 .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-400 .pagination>.active>a,.factory-bootstrap-400 .pagination>.active>a:focus,.factory-bootstrap-400 .pagination>.active>a:hover,.factory-bootstrap-400 .pagination>.active>span,.factory-bootstrap-400 .pagination>.active>span:focus,.factory-bootstrap-400 .pagination>.active>span:hover{background-color:#a3b745;border-color:#839237}
libs/factory/bootstrap/assets/css-min/bootstrap.form-group.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .factory-form-group .factory-legend{padding:9px 12px;background-color:#f9f9f9}.factory-bootstrap-400 .factory-form-group .factory-title{font-weight:700;font-size:14px;line-height:14px;color:#555;margin:0}.factory-bootstrap-400 .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-400 .factory-form-group .factory-hint-icon.factory-hint-icon-green{background:#8bc34a}.factory-bootstrap-400 .factory-form-group .factory-hint-icon.factory-hint-icon-grey{background:#9e9e9e}.factory-bootstrap-400 .factory-form-group .factory-hint-icon.factory-hint-icon-red{background:#E91E63}.factory-bootstrap-400 .factory-form-group .factory-hint{margin:0;font-size:12px;line-height:16px;margin-top:6px}.factory-bootstrap-400 .factory-form-group+.factory-form-group{margin-top:30px}.factory-bootstrap-400 .factory-form-group legend+.control-group{margin-top:0}
libs/factory/bootstrap/assets/css-min/bootstrap.light.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .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-400 .btn-primary:focus,.factory-bootstrap-400 .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-400 .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-400 .btn-primary:disabled,.factory-bootstrap-400 .btn-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.factory-bootstrap-400 .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-400 .pagination>.active>a,.factory-bootstrap-400 .pagination>.active>a:focus,.factory-bootstrap-400 .pagination>.active>a:hover,.factory-bootstrap-400 .pagination>.active>span,.factory-bootstrap-400 .pagination>.active>span:focus,.factory-bootstrap-400 .pagination>.active>span:hover{background-color:#04a4cc;border-color:#037c9a}
libs/factory/bootstrap/assets/css-min/bootstrap.midnight.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .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-400 .btn-primary:focus,.factory-bootstrap-400 .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-400 .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-400 .btn-primary:disabled,.factory-bootstrap-400 .btn-primary[disabled]{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.factory-bootstrap-400 .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-400 .pagination>.active>a,.factory-bootstrap-400 .pagination>.active>a:focus,.factory-bootstrap-400 .pagination>.active>a:hover,.factory-bootstrap-400 .pagination>.active>span,.factory-bootstrap-400 .pagination>.active>span:focus,.factory-bootstrap-400 .pagination>.active>span:hover{background-color:#e14d43;border-color:#d02a21}
libs/factory/bootstrap/assets/css-min/bootstrap.ocean.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .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-400 .btn-primary:focus,.factory-bootstrap-400 .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-400 .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-400 .btn-primary:disabled,.factory-bootstrap-400 .btn-primary[disabled]{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.factory-bootstrap-400 .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-400 .pagination>.active>a,.factory-bootstrap-400 .pagination>.active>a:focus,.factory-bootstrap-400 .pagination>.active>a:hover,.factory-bootstrap-400 .pagination>.active>span,.factory-bootstrap-400 .pagination>.active>span:focus,.factory-bootstrap-400 .pagination>.active>span:hover{background-color:#9ebaa0;border-color:#80a583}
libs/factory/bootstrap/assets/css-min/bootstrap.separator.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .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 ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .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-400 .btn-primary:focus,.factory-bootstrap-400 .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-400 .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-400 .btn-primary:disabled,.factory-bootstrap-400 .btn-primary[disabled]{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.factory-bootstrap-400 .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-400 .pagination>.active>a,.factory-bootstrap-400 .pagination>.active>a:focus,.factory-bootstrap-400 .pagination>.active>a:hover,.factory-bootstrap-400 .pagination>.active>span,.factory-bootstrap-400 .pagination>.active>span:focus,.factory-bootstrap-400 .pagination>.active>span:hover{background-color:#dd823b;border-color:#c36822}
libs/factory/bootstrap/assets/css-min/control.checkbox.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .factory-buttons-way{float:right;position:relative;top:-25px;left:5px;border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-400 .factory-buttons-way{border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-400 .factory-buttons-way button{padding-left:10px;padding-right:10px}.factory-bootstrap-400 .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-400 .factory-checkbox-tumbler-hint{margin-top:5px}.factory-bootstrap-400 .factory-checkbox-tumbler-hint .factory-tumbler-content{display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-400 .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-400 .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-400 .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-400 .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-400 .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-400 .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-400 .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 ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .factory-dropdown.factory-buttons-way .fa{margin-right:6px;position:relative}.factory-bootstrap-400 .factory-dropdown.factory-buttons-way{border:0;border-radius:0}.factory-bootstrap-400 .factory-hints .factory-hint{margin-top:5px;display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-400 .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-400 .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-400 .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-400 .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-400 .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-400 .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-400 .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-400 .factory-dropdown.factory-ddslick-way .dd-select{background-color:#fff!important}.factory-bootstrap-400 .factory-dropdown.factory-ddslick-way label{margin-bottom:1px}.factory-bootstrap-400 .factory-dropdown.factory-ddslick-way .dd-option,.factory-bootstrap-400 .factory-dropdown.factory-ddslick-way .dd-selected{padding:8px 12px 8px 11px!important}
libs/factory/bootstrap/assets/css-min/control.multiple-textbox.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .factory-mtextbox-item{position:relative;margin-bottom:5px}.factory-bootstrap-400 .factory-mtextbox-item input,.factory-mtextbox-remove-item{display:inline-block}.factory-bootstrap-400 .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-400 .factory-mtextbox-item .factory-mtextbox-remove-item:focus,.factory-bootstrap-400 .factory-mtextbox-item .factory-mtextbox-remove-item:hover{box-shadow:none;outline:0}.factory-bootstrap-400 .factory-mtextbox-add-item{display:block;margin-top:10px}
libs/factory/bootstrap/assets/css-min/holder.more-link.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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-400 .factory-more-link-content{border-top:1px dashed #DDD;padding-top:25px;width:100%;padding-right:20px;position:relative}.factory-bootstrap-400 .factory-tab .factory-more-link-show{display:inline-block;text-decoration:none;border-bottom:1px dotted #21759b;position:relative}.factory-bootstrap-400 .factory-tab .factory-more-link-show:hover{border-color:#d54e21}.factory-bootstrap-400 .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-400 .factory-tab .factory-more-link-hide:hover{color:#999}
libs/factory/bootstrap/assets/flat/css/bootstrap.core.css DELETED
@@ -1,7810 +0,0 @@
1
- /*
2
- * Factory Bootstrap CSS
3
- *
4
- * The code is based on Bootstrap v2.1.1
5
- *
6
- * Bootstrap v3.0.3 (http://getbootstrap.com)
7
- * Copyright 2013 Twitter, Inc.
8
- * Licensed under http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * @author Paul Kashtanoff <paul@byonepress.com>
11
- * @copyright (c) 2013, OnePress Ltd
12
- *
13
- * @package factory-bootstrap
14
- * @since 1.0.0
15
- */
16
-
17
- .factory-bootstrap-330 article,
18
- .factory-bootstrap-330 aside,
19
- .factory-bootstrap-330 details,
20
- .factory-bootstrap-330 figcaption,
21
- .factory-bootstrap-330 figure,
22
- .factory-bootstrap-330 footer,
23
- .factory-bootstrap-330 header,
24
- .factory-bootstrap-330 hgroup,
25
- .factory-bootstrap-330 main,
26
- .factory-bootstrap-330 nav,
27
- .factory-bootstrap-330 section,
28
- .factory-bootstrap-330 summary {
29
- display: block;
30
- }
31
-
32
- .factory-bootstrap-330 audio,
33
- .factory-bootstrap-330 canvas,
34
- .factory-bootstrap-330 video {
35
- display: inline-block;
36
- }
37
-
38
- .factory-bootstrap-330 audio:not([controls]) {
39
- display: none;
40
- height: 0;
41
- }
42
-
43
- .factory-bootstrap-330 [hidden],
44
- .factory-bootstrap-330 template {
45
- display: none;
46
- }
47
-
48
- .factory-bootstrap-330 body {
49
- margin: 0;
50
- }
51
-
52
- .factory-bootstrap-330 a {
53
- background: transparent;
54
- }
55
-
56
- .factory-bootstrap-330 a:focus {
57
- outline: thin dotted;
58
- }
59
-
60
- .factory-bootstrap-330 a:active,
61
- .factory-bootstrap-330 a:hover {
62
- outline: 0;
63
- }
64
-
65
- .factory-bootstrap-330 h1 {
66
- margin: 0.67em 0;
67
- font-size: 2em;
68
- }
69
-
70
- .factory-bootstrap-330 abbr[title] {
71
- border-bottom: 1px dotted;
72
- }
73
-
74
- .factory-bootstrap-330 b,
75
- .factory-bootstrap-330 strong {
76
- font-weight: bold;
77
- }
78
-
79
- .factory-bootstrap-330 dfn {
80
- font-style: italic;
81
- }
82
-
83
- .factory-bootstrap-330 hr {
84
- height: 0;
85
- -moz-box-sizing: content-box;
86
- box-sizing: content-box;
87
- }
88
-
89
- .factory-bootstrap-330 mark {
90
- color: #000;
91
- background: #ff0;
92
- }
93
-
94
- .factory-bootstrap-330 code,
95
- .factory-bootstrap-330 kbd,
96
- .factory-bootstrap-330 pre,
97
- .factory-bootstrap-330 samp {
98
- font-family: monospace, serif;
99
- font-size: 1em;
100
- }
101
-
102
- .factory-bootstrap-330 pre {
103
- white-space: pre-wrap;
104
- }
105
-
106
- .factory-bootstrap-330 q {
107
- quotes: "\201C" "\201D" "\2018" "\2019";
108
- }
109
-
110
- .factory-bootstrap-330 small {
111
- font-size: 80%;
112
- }
113
-
114
- .factory-bootstrap-330 sub,
115
- .factory-bootstrap-330 sup {
116
- position: relative;
117
- font-size: 75%;
118
- line-height: 0;
119
- vertical-align: baseline;
120
- }
121
-
122
- .factory-bootstrap-330 sup {
123
- top: -0.5em;
124
- }
125
-
126
- .factory-bootstrap-330 sub {
127
- bottom: -0.25em;
128
- }
129
-
130
- .factory-bootstrap-330 img {
131
- border: 0;
132
- }
133
-
134
- .factory-bootstrap-330 svg:not(:root) {
135
- overflow: hidden;
136
- }
137
-
138
- .factory-bootstrap-330 figure {
139
- margin: 0;
140
- }
141
-
142
- .factory-bootstrap-330 fieldset {
143
- padding: 0.35em 0.625em 0.75em;
144
- margin: 0 2px;
145
- border: 1px solid #c0c0c0;
146
- }
147
-
148
- .factory-bootstrap-330 legend {
149
- padding: 0;
150
- border: 0;
151
- }
152
-
153
- .factory-bootstrap-330 button,
154
- .factory-bootstrap-330 input,
155
- .factory-bootstrap-330 select,
156
- .factory-bootstrap-330 textarea {
157
- margin: 0;
158
- font-family: inherit;
159
- font-size: 100%;
160
- }
161
-
162
- .factory-bootstrap-330 button,
163
- .factory-bootstrap-330 input {
164
- line-height: normal;
165
- }
166
-
167
- .factory-bootstrap-330 button,
168
- .factory-bootstrap-330 select {
169
- text-transform: none;
170
- }
171
-
172
- .factory-bootstrap-330 select {
173
- padding-right: 4px !important;
174
- }
175
-
176
- .factory-bootstrap-330 button,
177
- html .factory-bootstrap-330 input[type="button"],
178
- .factory-bootstrap-330 input[type="reset"],
179
- .factory-bootstrap-330 input[type="submit"] {
180
- cursor: pointer;
181
- -webkit-appearance: button;
182
- }
183
-
184
- .factory-bootstrap-330 button[disabled],
185
- html .factory-bootstrap-330 input[disabled] {
186
- cursor: default;
187
- }
188
-
189
- .factory-bootstrap-330 input[type="checkbox"],
190
- .factory-bootstrap-330 input[type="radio"] {
191
- padding: 0;
192
- box-sizing: border-box;
193
- }
194
-
195
- .factory-bootstrap-330 input[type="search"] {
196
- -webkit-box-sizing: content-box;
197
- -moz-box-sizing: content-box;
198
- box-sizing: content-box;
199
- -webkit-appearance: textfield;
200
- }
201
-
202
- .factory-bootstrap-330 input[type="search"]::-webkit-search-cancel-button,
203
- .factory-bootstrap-330 input[type="search"]::-webkit-search-decoration {
204
- -webkit-appearance: none;
205
- }
206
-
207
- .factory-bootstrap-330 button::-moz-focus-inner,
208
- .factory-bootstrap-330 input::-moz-focus-inner {
209
- padding: 0;
210
- border: 0;
211
- }
212
-
213
- .factory-bootstrap-330 textarea {
214
- overflow: auto;
215
- vertical-align: top;
216
- }
217
-
218
- .factory-bootstrap-330 table {
219
- border-collapse: collapse;
220
- border-spacing: 0;
221
- }
222
-
223
- @media print {
224
- .factory-bootstrap-330 * {
225
- color: #000 !important;
226
- text-shadow: none !important;
227
- background: transparent !important;
228
- box-shadow: none !important;
229
- }
230
-
231
- .factory-bootstrap-330 a,
232
- .factory-bootstrap-330 a:visited {
233
- text-decoration: underline;
234
- }
235
-
236
- .factory-bootstrap-330 a[href]:after {
237
- content: " (" attr(href) ")";
238
- }
239
-
240
- .factory-bootstrap-330 abbr[title]:after {
241
- content: " (" attr(title) ")";
242
- }
243
-
244
- .factory-bootstrap-330 a[href^="javascript:"]:after,
245
- .factory-bootstrap-330 a[href^="#"]:after {
246
- content: "";
247
- }
248
-
249
- .factory-bootstrap-330 pre,
250
- .factory-bootstrap-330 blockquote {
251
- border: 1px solid #999;
252
- page-break-inside: avoid;
253
- }
254
-
255
- .factory-bootstrap-330 thead {
256
- display: table-header-group;
257
- }
258
-
259
- .factory-bootstrap-330 tr,
260
- .factory-bootstrap-330 img {
261
- page-break-inside: avoid;
262
- }
263
-
264
- .factory-bootstrap-330 img {
265
- max-width: 100% !important;
266
- }
267
-
268
- @page {
269
- margin: 2cm .5cm;
270
- }
271
-
272
- .factory-bootstrap-330 p,
273
- .factory-bootstrap-330 h2,
274
- .factory-bootstrap-330 h3 {
275
- orphans: 3;
276
- widows: 3;
277
- }
278
-
279
- .factory-bootstrap-330 h2,
280
- .factory-bootstrap-330 h3 {
281
- page-break-after: avoid;
282
- }
283
-
284
- .factory-bootstrap-330 select {
285
- background: #fff !important;
286
- }
287
-
288
- .factory-bootstrap-330 .navbar {
289
- display: none;
290
- }
291
-
292
- .factory-bootstrap-330 .table td,
293
- .factory-bootstrap-330 .table th {
294
- background-color: #fff !important;
295
- }
296
-
297
- .factory-bootstrap-330 .btn > .caret,
298
- .factory-bootstrap-330 .dropup > .btn > .caret {
299
- border-top-color: #000 !important;
300
- }
301
-
302
- .factory-bootstrap-330 .label {
303
- border: 1px solid #000;
304
- }
305
-
306
- .factory-bootstrap-330 .table {
307
- border-collapse: collapse !important;
308
- }
309
-
310
- .factory-bootstrap-330 .table-bordered th,
311
- .factory-bootstrap-330 .table-bordered td {
312
- border: 1px solid #ddd !important;
313
- }
314
- }
315
-
316
- .factory-bootstrap-330 *,
317
- .factory-bootstrap-330 *:before,
318
- .factory-bootstrap-330 *:after {
319
- -webkit-box-sizing: border-box;
320
- -moz-box-sizing: border-box;
321
- box-sizing: border-box;
322
- }
323
-
324
- html .factory-bootstrap-330 {
325
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
326
- }
327
-
328
- .factory-bootstrap-330 body {
329
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
330
- font-size: 14px;
331
- line-height: 1.428571429;
332
- color: #333333;
333
- background-color: #ffffff;
334
- }
335
-
336
- .factory-bootstrap-330 input,
337
- .factory-bootstrap-330 button,
338
- .factory-bootstrap-330 select,
339
- .factory-bootstrap-330 textarea {
340
- font-family: inherit;
341
- font-size: inherit;
342
- line-height: inherit;
343
- }
344
-
345
- .factory-bootstrap-330 img {
346
- vertical-align: middle;
347
- }
348
-
349
- .factory-bootstrap-330 .img-responsive {
350
- display: block;
351
- height: auto;
352
- max-width: 100%;
353
- }
354
-
355
- .factory-bootstrap-330 .img-rounded {
356
- border-radius: 6px;
357
- }
358
-
359
- .factory-bootstrap-330 .img-thumbnail {
360
- display: inline-block;
361
- height: auto;
362
- max-width: 100%;
363
- padding: 4px;
364
- line-height: 1.428571429;
365
- background-color: #ffffff;
366
- border: 1px solid #dddddd;
367
- border-radius: 4px;
368
- -webkit-transition: all 0.2s ease-in-out;
369
- transition: all 0.2s ease-in-out;
370
- }
371
-
372
- .factory-bootstrap-330 .img-circle {
373
- border-radius: 50%;
374
- }
375
-
376
- .factory-bootstrap-330 hr {
377
- margin-top: 20px;
378
- margin-bottom: 20px;
379
- border: 0;
380
- border-top: 1px solid #eeeeee;
381
- }
382
-
383
- .factory-bootstrap-330 .sr-only {
384
- position: absolute;
385
- width: 1px;
386
- height: 1px;
387
- padding: 0;
388
- margin: -1px;
389
- overflow: hidden;
390
- clip: rect(0, 0, 0, 0);
391
- border: 0;
392
- }
393
-
394
- .factory-bootstrap-330 h1,
395
- .factory-bootstrap-330 h2,
396
- .factory-bootstrap-330 h3,
397
- .factory-bootstrap-330 h4,
398
- .factory-bootstrap-330 h5,
399
- .factory-bootstrap-330 h6,
400
- .factory-bootstrap-330 .h1,
401
- .factory-bootstrap-330 .h2,
402
- .factory-bootstrap-330 .h3,
403
- .factory-bootstrap-330 .h4,
404
- .factory-bootstrap-330 .h5,
405
- .factory-bootstrap-330 .h6 {
406
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
407
- font-weight: 500;
408
- line-height: 1.1;
409
- color: inherit;
410
- }
411
-
412
- .factory-bootstrap-330 h1 small,
413
- .factory-bootstrap-330 h2 small,
414
- .factory-bootstrap-330 h3 small,
415
- .factory-bootstrap-330 h4 small,
416
- .factory-bootstrap-330 h5 small,
417
- .factory-bootstrap-330 h6 small,
418
- .factory-bootstrap-330 .h1 small,
419
- .factory-bootstrap-330 .h2 small,
420
- .factory-bootstrap-330 .h3 small,
421
- .factory-bootstrap-330 .h4 small,
422
- .factory-bootstrap-330 .h5 small,
423
- .factory-bootstrap-330 .h6 small,
424
- .factory-bootstrap-330 h1 .small,
425
- .factory-bootstrap-330 h2 .small,
426
- .factory-bootstrap-330 h3 .small,
427
- .factory-bootstrap-330 h4 .small,
428
- .factory-bootstrap-330 h5 .small,
429
- .factory-bootstrap-330 h6 .small,
430
- .factory-bootstrap-330 .h1 .small,
431
- .factory-bootstrap-330 .h2 .small,
432
- .factory-bootstrap-330 .h3 .small,
433
- .factory-bootstrap-330 .h4 .small,
434
- .factory-bootstrap-330 .h5 .small,
435
- .factory-bootstrap-330 .h6 .small {
436
- font-weight: normal;
437
- line-height: 1;
438
- color: #999999;
439
- }
440
-
441
- .factory-bootstrap-330 h1,
442
- .factory-bootstrap-330 h2,
443
- .factory-bootstrap-330 h3 {
444
- margin-top: 20px;
445
- margin-bottom: 10px;
446
- }
447
-
448
- .factory-bootstrap-330 h1 small,
449
- .factory-bootstrap-330 h2 small,
450
- .factory-bootstrap-330 h3 small,
451
- .factory-bootstrap-330 h1 .small,
452
- .factory-bootstrap-330 h2 .small,
453
- .factory-bootstrap-330 h3 .small {
454
- font-size: 65%;
455
- }
456
-
457
- .factory-bootstrap-330 h4,
458
- .factory-bootstrap-330 h5,
459
- .factory-bootstrap-330 h6 {
460
- margin-top: 10px;
461
- margin-bottom: 10px;
462
- }
463
-
464
- .factory-bootstrap-330 h4 small,
465
- .factory-bootstrap-330 h5 small,
466
- .factory-bootstrap-330 h6 small,
467
- .factory-bootstrap-330 h4 .small,
468
- .factory-bootstrap-330 h5 .small,
469
- .factory-bootstrap-330 h6 .small {
470
- font-size: 75%;
471
- }
472
-
473
- .factory-bootstrap-330 h1,
474
- .factory-bootstrap-330 .h1 {
475
- font-size: 36px;
476
- }
477
-
478
- .factory-bootstrap-330 h2,
479
- .factory-bootstrap-330 .h2 {
480
- font-size: 30px;
481
- }
482
-
483
- .factory-bootstrap-330 h3,
484
- .factory-bootstrap-330 .h3 {
485
- font-size: 24px;
486
- }
487
-
488
- .factory-bootstrap-330 h4,
489
- .factory-bootstrap-330 .h4 {
490
- font-size: 18px;
491
- }
492
-
493
- .factory-bootstrap-330 h5,
494
- .factory-bootstrap-330 .h5 {
495
- font-size: 14px;
496
- }
497
-
498
- .factory-bootstrap-330 h6,
499
- .factory-bootstrap-330 .h6 {
500
- font-size: 12px;
501
- }
502
-
503
- .factory-bootstrap-330 p {
504
- margin: 0 0 10px;
505
- }
506
-
507
- .factory-bootstrap-330 .lead {
508
- margin-bottom: 20px;
509
- font-size: 16px;
510
- font-weight: 200;
511
- line-height: 1.4;
512
- }
513
-
514
- @media (min-width: 768px) {
515
- .lead {
516
- font-size: 21px;
517
- }
518
- }
519
-
520
- .factory-bootstrap-330 small,
521
- .factory-bootstrap-330 .small {
522
- font-size: 85%;
523
- }
524
-
525
- .factory-bootstrap-330 cite {
526
- font-style: normal;
527
- }
528
-
529
- .factory-bootstrap-330 .text-muted {
530
- color: #999999;
531
- }
532
-
533
- .factory-bootstrap-330 .text-primary {
534
- color: #428bca;
535
- }
536
-
537
- .factory-bootstrap-330 .text-primary:hover {
538
- color: #3071a9;
539
- }
540
-
541
- .factory-bootstrap-330 .text-warning {
542
- color: #8a6d3b;
543
- }
544
-
545
- .factory-bootstrap-330 .text-warning:hover {
546
- color: #66512c;
547
- }
548
-
549
- .factory-bootstrap-330 .text-danger {
550
- color: #a94442;
551
- }
552
-
553
- .factory-bootstrap-330 .text-danger:hover {
554
- color: #843534;
555
- }
556
-
557
- .factory-bootstrap-330 .text-success {
558
- color: #3c763d;
559
- }
560
-
561
- .factory-bootstrap-330 .text-success:hover {
562
- color: #2b542c;
563
- }
564
-
565
- .factory-bootstrap-330 .text-info {
566
- color: #31708f;
567
- }
568
-
569
- .factory-bootstrap-330 .text-info:hover {
570
- color: #245269;
571
- }
572
-
573
- .factory-bootstrap-330 .text-left {
574
- text-align: left;
575
- }
576
-
577
- .factory-bootstrap-330 .text-right {
578
- text-align: right;
579
- }
580
-
581
- .factory-bootstrap-330 .text-center {
582
- text-align: center;
583
- }
584
-
585
- .factory-bootstrap-330 .page-header {
586
- padding-bottom: 9px;
587
- margin: 40px 0 20px;
588
- border-bottom: 1px solid #eeeeee;
589
- }
590
-
591
- .factory-bootstrap-330 ul,
592
- .factory-bootstrap-330 ol {
593
- margin-top: 0;
594
- margin-bottom: 10px;
595
- }
596
-
597
- .factory-bootstrap-330 ul ul,
598
- .factory-bootstrap-330 ol ul,
599
- .factory-bootstrap-330 ul ol,
600
- .factory-bootstrap-330 ol ol {
601
- margin-bottom: 0;
602
- }
603
-
604
- .factory-bootstrap-330 .list-unstyled {
605
- padding-left: 0;
606
- list-style: none;
607
- }
608
-
609
- .factory-bootstrap-330 .list-inline {
610
- padding-left: 0;
611
- list-style: none;
612
- }
613
-
614
- .factory-bootstrap-330 .list-inline > li {
615
- display: inline-block;
616
- padding-right: 5px;
617
- padding-left: 5px;
618
- }
619
-
620
- .factory-bootstrap-330 .list-inline > li:first-child {
621
- padding-left: 0;
622
- }
623
-
624
- .factory-bootstrap-330 dl {
625
- margin-top: 0;
626
- margin-bottom: 20px;
627
- }
628
-
629
- .factory-bootstrap-330 dt,
630
- .factory-bootstrap-330 dd {
631
- line-height: 1.428571429;
632
- }
633
-
634
- .factory-bootstrap-330 dt {
635
- font-weight: bold;
636
- }
637
-
638
- .factory-bootstrap-330 dd {
639
- margin-left: 0;
640
- }
641
-
642
- @media (min-width: 768px) {
643
- .dl-horizontal dt {
644
- float: left;
645
- width: 160px;
646
- overflow: hidden;
647
- clear: left;
648
- text-align: right;
649
- text-overflow: ellipsis;
650
- white-space: nowrap;
651
- }
652
-
653
- .dl-horizontal dd {
654
- margin-left: 180px;
655
- }
656
-
657
- .dl-horizontal dd:before,
658
- .dl-horizontal dd:after {
659
- display: table;
660
- content: " ";
661
- }
662
-
663
- .dl-horizontal dd:after {
664
- clear: both;
665
- }
666
-
667
- .dl-horizontal dd:before,
668
- .dl-horizontal dd:after {
669
- display: table;
670
- content: " ";
671
- }
672
-
673
- .dl-horizontal dd:after {
674
- clear: both;
675
- }
676
- }
677
-
678
- .factory-bootstrap-330 abbr[title],
679
- .factory-bootstrap-330 abbr[data-original-title] {
680
- cursor: help;
681
- border-bottom: 1px dotted #999999;
682
- }
683
-
684
- .factory-bootstrap-330 .initialism {
685
- font-size: 90%;
686
- text-transform: uppercase;
687
- }
688
-
689
- .factory-bootstrap-330 blockquote {
690
- padding: 10px 20px;
691
- margin: 0 0 20px;
692
- border-left: 5px solid #eeeeee;
693
- }
694
-
695
- .factory-bootstrap-330 blockquote p {
696
- font-size: 17.5px;
697
- font-weight: 300;
698
- line-height: 1.25;
699
- }
700
-
701
- .factory-bootstrap-330 blockquote p:last-child {
702
- margin-bottom: 0;
703
- }
704
-
705
- .factory-bootstrap-330 blockquote small,
706
- .factory-bootstrap-330 blockquote .small {
707
- display: block;
708
- line-height: 1.428571429;
709
- color: #999999;
710
- }
711
-
712
- .factory-bootstrap-330 blockquote small:before,
713
- .factory-bootstrap-330 blockquote .small:before {
714
- content: '\2014 \00A0';
715
- }
716
-
717
- .factory-bootstrap-330 blockquote.pull-right {
718
- padding-right: 15px;
719
- padding-left: 0;
720
- border-right: 5px solid #eeeeee;
721
- border-left: 0;
722
- }
723
-
724
- .factory-bootstrap-330 blockquote.pull-right p,
725
- .factory-bootstrap-330 blockquote.pull-right small,
726
- .factory-bootstrap-330 blockquote.pull-right .small {
727
- text-align: right;
728
- }
729
-
730
- .factory-bootstrap-330 blockquote.pull-right small:before,
731
- .factory-bootstrap-330 blockquote.pull-right .small:before {
732
- content: '';
733
- }
734
-
735
- .factory-bootstrap-330 blockquote.pull-right small:after,
736
- .factory-bootstrap-330 blockquote.pull-right .small:after {
737
- content: '\00A0 \2014';
738
- }
739
-
740
- .factory-bootstrap-330 blockquote:before,
741
- .factory-bootstrap-330 blockquote:after {
742
- content: "";
743
- }
744
-
745
- .factory-bootstrap-330 address {
746
- margin-bottom: 20px;
747
- font-style: normal;
748
- line-height: 1.428571429;
749
- }
750
-
751
- .factory-bootstrap-330 code,
752
- .factory-bootstrap-330 kbd,
753
- .factory-bootstrap-330 pre,
754
- .factory-bootstrap-330 samp {
755
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
756
- }
757
-
758
- .factory-bootstrap-330 code {
759
- padding: 2px 4px;
760
- font-size: 90%;
761
- color: #c7254e;
762
- white-space: nowrap;
763
- background-color: #f9f2f4;
764
- border-radius: 4px;
765
- }
766
-
767
- .factory-bootstrap-330 pre {
768
- display: block;
769
- padding: 9.5px;
770
- margin: 0 0 10px;
771
- font-size: 13px;
772
- line-height: 1.428571429;
773
- color: #333333;
774
- word-break: break-all;
775
- word-wrap: break-word;
776
- background-color: #f5f5f5;
777
- border: 1px solid #cccccc;
778
- border-radius: 4px;
779
- }
780
-
781
- .factory-bootstrap-330 pre code {
782
- padding: 0;
783
- font-size: inherit;
784
- color: inherit;
785
- white-space: pre-wrap;
786
- background-color: transparent;
787
- border-radius: 0;
788
- }
789
-
790
- .factory-bootstrap-330 .pre-scrollable {
791
- max-height: 340px;
792
- overflow-y: scroll;
793
- }
794
-
795
- .factory-bootstrap-330 .container {
796
- padding-right: 15px;
797
- padding-left: 15px;
798
- margin-right: auto;
799
- margin-left: auto;
800
- }
801
-
802
- .factory-bootstrap-330 .container:before,
803
- .factory-bootstrap-330 .container:after {
804
- display: table;
805
- content: " ";
806
- }
807
-
808
- .factory-bootstrap-330 .container:after {
809
- clear: both;
810
- }
811
-
812
- .factory-bootstrap-330 .container:before,
813
- .factory-bootstrap-330 .container:after {
814
- display: table;
815
- content: " ";
816
- }
817
-
818
- .factory-bootstrap-330 .container:after {
819
- clear: both;
820
- }
821
-
822
- @media (min-width: 768px) {
823
- .container {
824
- width: 750px;
825
- }
826
- }
827
-
828
- @media (min-width: 992px) {
829
- .container {
830
- width: 970px;
831
- }
832
- }
833
-
834
- @media (min-width: 1200px) {
835
- .container {
836
- width: 1170px;
837
- }
838
- }
839
-
840
- .factory-bootstrap-330 .row {
841
- margin-right: -15px;
842
- margin-left: -15px;
843
- }
844
-
845
- .factory-bootstrap-330 .row:before,
846
- .factory-bootstrap-330 .row:after {
847
- display: table;
848
- content: " ";
849
- }
850
-
851
- .factory-bootstrap-330 .row:after {
852
- clear: both;
853
- }
854
-
855
- .factory-bootstrap-330 .row:before,
856
- .factory-bootstrap-330 .row:after {
857
- display: table;
858
- content: " ";
859
- }
860
-
861
- .factory-bootstrap-330 .row:after {
862
- clear: both;
863
- }
864
-
865
- .factory-bootstrap-330 .col-xs-1,
866
- .factory-bootstrap-330 .col-sm-1,
867
- .factory-bootstrap-330 .col-md-1,
868
- .factory-bootstrap-330 .col-lg-1,
869
- .factory-bootstrap-330 .col-xs-2,
870
- .factory-bootstrap-330 .col-sm-2,
871
- .factory-bootstrap-330 .col-md-2,
872
- .factory-bootstrap-330 .col-lg-2,
873
- .factory-bootstrap-330 .col-xs-3,
874
- .factory-bootstrap-330 .col-sm-3,
875
- .factory-bootstrap-330 .col-md-3,
876
- .factory-bootstrap-330 .col-lg-3,
877
- .factory-bootstrap-330 .col-xs-4,
878
- .factory-bootstrap-330 .col-sm-4,
879
- .factory-bootstrap-330 .col-md-4,
880
- .factory-bootstrap-330 .col-lg-4,
881
- .factory-bootstrap-330 .col-xs-5,
882
- .factory-bootstrap-330 .col-sm-5,
883
- .factory-bootstrap-330 .col-md-5,
884
- .factory-bootstrap-330 .col-lg-5,
885
- .factory-bootstrap-330 .col-xs-6,
886
- .factory-bootstrap-330 .col-sm-6,
887
- .factory-bootstrap-330 .col-md-6,
888
- .factory-bootstrap-330 .col-lg-6,
889
- .factory-bootstrap-330 .col-xs-7,
890
- .factory-bootstrap-330 .col-sm-7,
891
- .factory-bootstrap-330 .col-md-7,
892
- .factory-bootstrap-330 .col-lg-7,
893
- .factory-bootstrap-330 .col-xs-8,
894
- .factory-bootstrap-330 .col-sm-8,
895
- .factory-bootstrap-330 .col-md-8,
896
- .factory-bootstrap-330 .col-lg-8,
897
- .factory-bootstrap-330 .col-xs-9,
898
- .factory-bootstrap-330 .col-sm-9,
899
- .factory-bootstrap-330 .col-md-9,
900
- .factory-bootstrap-330 .col-lg-9,
901
- .factory-bootstrap-330 .col-xs-10,
902
- .factory-bootstrap-330 .col-sm-10,
903
- .factory-bootstrap-330 .col-md-10,
904
- .factory-bootstrap-330 .col-lg-10,
905
- .factory-bootstrap-330 .col-xs-11,
906
- .factory-bootstrap-330 .col-sm-11,
907
- .factory-bootstrap-330 .col-md-11,
908
- .factory-bootstrap-330 .col-lg-11,
909
- .factory-bootstrap-330 .col-xs-12,
910
- .factory-bootstrap-330 .col-sm-12,
911
- .factory-bootstrap-330 .col-md-12,
912
- .factory-bootstrap-330 .col-lg-12 {
913
- position: relative;
914
- min-height: 1px;
915
- padding-right: 15px;
916
- padding-left: 15px;
917
- }
918
-
919
- .factory-bootstrap-330 .col-xs-1,
920
- .factory-bootstrap-330 .col-xs-2,
921
- .factory-bootstrap-330 .col-xs-3,
922
- .factory-bootstrap-330 .col-xs-4,
923
- .factory-bootstrap-330 .col-xs-5,
924
- .factory-bootstrap-330 .col-xs-6,
925
- .factory-bootstrap-330 .col-xs-7,
926
- .factory-bootstrap-330 .col-xs-8,
927
- .factory-bootstrap-330 .col-xs-9,
928
- .factory-bootstrap-330 .col-xs-10,
929
- .factory-bootstrap-330 .col-xs-11,
930
- .factory-bootstrap-330 .col-xs-12 {
931
- float: left;
932
- }
933
-
934
- .factory-bootstrap-330 .col-xs-12 {
935
- width: 100%;
936
- }
937
-
938
- .factory-bootstrap-330 .col-xs-11 {
939
- width: 91.66666666666666%;
940
- }
941
-
942
- .factory-bootstrap-330 .col-xs-10 {
943
- width: 83.33333333333334%;
944
- }
945
-
946
- .factory-bootstrap-330 .col-xs-9 {
947
- width: 75%;
948
- }
949
-
950
- .factory-bootstrap-330 .col-xs-8 {
951
- width: 66.66666666666666%;
952
- }
953
-
954
- .factory-bootstrap-330 .col-xs-7 {
955
- width: 58.333333333333336%;
956
- }
957
-
958
- .factory-bootstrap-330 .col-xs-6 {
959
- width: 50%;
960
- }
961
-
962
- .factory-bootstrap-330 .col-xs-5 {
963
- width: 41.66666666666667%;
964
- }
965
-
966
- .factory-bootstrap-330 .col-xs-4 {
967
- width: 33.33333333333333%;
968
- }
969
-
970
- .factory-bootstrap-330 .col-xs-3 {
971
- width: 25%;
972
- }
973
-
974
- .factory-bootstrap-330 .col-xs-2 {
975
- width: 16.666666666666664%;
976
- }
977
-
978
- .factory-bootstrap-330 .col-xs-1 {
979
- width: 8.333333333333332%;
980
- }
981
-
982
- .factory-bootstrap-330 .col-xs-pull-12 {
983
- right: 100%;
984
- }
985
-
986
- .factory-bootstrap-330 .col-xs-pull-11 {
987
- right: 91.66666666666666%;
988
- }
989
-
990
- .factory-bootstrap-330 .col-xs-pull-10 {
991
- right: 83.33333333333334%;
992
- }
993
-
994
- .factory-bootstrap-330 .col-xs-pull-9 {
995
- right: 75%;
996
- }
997
-
998
- .factory-bootstrap-330 .col-xs-pull-8 {
999
- right: 66.66666666666666%;
1000
- }
1001
-
1002
- .factory-bootstrap-330 .col-xs-pull-7 {
1003
- right: 58.333333333333336%;
1004
- }
1005
-
1006
- .factory-bootstrap-330 .col-xs-pull-6 {
1007
- right: 50%;
1008
- }
1009
-
1010
- .factory-bootstrap-330 .col-xs-pull-5 {
1011
- right: 41.66666666666667%;
1012
- }
1013
-
1014
- .factory-bootstrap-330 .col-xs-pull-4 {
1015
- right: 33.33333333333333%;
1016
- }
1017
-
1018
- .factory-bootstrap-330 .col-xs-pull-3 {
1019
- right: 25%;
1020
- }
1021
-
1022
- .factory-bootstrap-330 .col-xs-pull-2 {
1023
- right: 16.666666666666664%;
1024
- }
1025
-
1026
- .factory-bootstrap-330 .col-xs-pull-1 {
1027
- right: 8.333333333333332%;
1028
- }
1029
-
1030
- .factory-bootstrap-330 .col-xs-pull-0 {
1031
- right: 0;
1032
- }
1033
-
1034
- .factory-bootstrap-330 .col-xs-push-12 {
1035
- left: 100%;
1036
- }
1037
-
1038
- .factory-bootstrap-330 .col-xs-push-11 {
1039
- left: 91.66666666666666%;
1040
- }
1041
-
1042
- .factory-bootstrap-330 .col-xs-push-10 {
1043
- left: 83.33333333333334%;
1044
- }
1045
-
1046
- .factory-bootstrap-330 .col-xs-push-9 {
1047
- left: 75%;
1048
- }
1049
-
1050
- .factory-bootstrap-330 .col-xs-push-8 {
1051
- left: 66.66666666666666%;
1052
- }
1053
-
1054
- .factory-bootstrap-330 .col-xs-push-7 {
1055
- left: 58.333333333333336%;
1056
- }
1057
-
1058
- .factory-bootstrap-330 .col-xs-push-6 {
1059
- left: 50%;
1060
- }
1061
-
1062
- .factory-bootstrap-330 .col-xs-push-5 {
1063
- left: 41.66666666666667%;
1064
- }
1065
-
1066
- .factory-bootstrap-330 .col-xs-push-4 {
1067
- left: 33.33333333333333%;
1068
- }
1069
-
1070
- .factory-bootstrap-330 .col-xs-push-3 {
1071
- left: 25%;
1072
- }
1073
-
1074
- .factory-bootstrap-330 .col-xs-push-2 {
1075
- left: 16.666666666666664%;
1076
- }
1077
-
1078
- .factory-bootstrap-330 .col-xs-push-1 {
1079
- left: 8.333333333333332%;
1080
- }
1081
-
1082
- .factory-bootstrap-330 .col-xs-push-0 {
1083
- left: 0;
1084
- }
1085
-
1086
- .factory-bootstrap-330 .col-xs-offset-12 {
1087
- margin-left: 100%;
1088
- }
1089
-
1090
- .factory-bootstrap-330 .col-xs-offset-11 {
1091
- margin-left: 91.66666666666666%;
1092
- }
1093
-
1094
- .factory-bootstrap-330 .col-xs-offset-10 {
1095
- margin-left: 83.33333333333334%;
1096
- }
1097
-
1098
- .factory-bootstrap-330 .col-xs-offset-9 {
1099
- margin-left: 75%;
1100
- }
1101
-
1102
- .factory-bootstrap-330 .col-xs-offset-8 {
1103
- margin-left: 66.66666666666666%;
1104
- }
1105
-
1106
- .factory-bootstrap-330 .col-xs-offset-7 {
1107
- margin-left: 58.333333333333336%;
1108
- }
1109
-
1110
- .factory-bootstrap-330 .col-xs-offset-6 {
1111
- margin-left: 50%;
1112
- }
1113
-
1114
- .factory-bootstrap-330 .col-xs-offset-5 {
1115
- margin-left: 41.66666666666667%;
1116
- }
1117
-
1118
- .factory-bootstrap-330 .col-xs-offset-4 {
1119
- margin-left: 33.33333333333333%;
1120
- }
1121
-
1122
- .factory-bootstrap-330 .col-xs-offset-3 {
1123
- margin-left: 25%;
1124
- }
1125
-
1126
- .factory-bootstrap-330 .col-xs-offset-2 {
1127
- margin-left: 16.666666666666664%;
1128
- }
1129
-
1130
- .factory-bootstrap-330 .col-xs-offset-1 {
1131
- margin-left: 8.333333333333332%;
1132
- }
1133
-
1134
- .factory-bootstrap-330 .col-xs-offset-0 {
1135
- margin-left: 0;
1136
- }
1137
-
1138
- @media (min-width: 768px) {
1139
- .col-sm-1,
1140
- .col-sm-2,
1141
- .col-sm-3,
1142
- .col-sm-4,
1143
- .col-sm-5,
1144
- .col-sm-6,
1145
- .col-sm-7,
1146
- .col-sm-8,
1147
- .col-sm-9,
1148
- .col-sm-10,
1149
- .col-sm-11,
1150
- .col-sm-12 {
1151
- float: left;
1152
- }
1153
-
1154
- .col-sm-12 {
1155
- width: 100%;
1156
- }
1157
-
1158
- .col-sm-11 {
1159
- width: 91.66666666666666%;
1160
- }
1161
-
1162
- .col-sm-10 {
1163
- width: 83.33333333333334%;
1164
- }
1165
-
1166
- .col-sm-9 {
1167
- width: 75%;
1168
- }
1169
-
1170
- .col-sm-8 {
1171
- width: 66.66666666666666%;
1172
- }
1173
-
1174
- .col-sm-7 {
1175
- width: 58.333333333333336%;
1176
- }
1177
-
1178
- .col-sm-6 {
1179
- width: 50%;
1180
- }
1181
-
1182
- .col-sm-5 {
1183
- width: 41.66666666666667%;
1184
- }
1185
-
1186
- .col-sm-4 {
1187
- width: 33.33333333333333%;
1188
- }
1189
-
1190
- .col-sm-3 {
1191
- width: 25%;
1192
- }
1193
-
1194
- .col-sm-2 {
1195
- width: 16.666666666666664%;
1196
- }
1197
-
1198
- .col-sm-1 {
1199
- width: 8.333333333333332%;
1200
- }
1201
-
1202
- .col-sm-pull-12 {
1203
- right: 100%;
1204
- }
1205
-
1206
- .col-sm-pull-11 {
1207
- right: 91.66666666666666%;
1208
- }
1209
-
1210
- .col-sm-pull-10 {
1211
- right: 83.33333333333334%;
1212
- }
1213
-
1214
- .col-sm-pull-9 {
1215
- right: 75%;
1216
- }
1217
-
1218
- .col-sm-pull-8 {
1219
- right: 66.66666666666666%;
1220
- }
1221
-
1222
- .col-sm-pull-7 {
1223
- right: 58.333333333333336%;
1224
- }
1225
-
1226
- .col-sm-pull-6 {
1227
- right: 50%;
1228
- }
1229
-
1230
- .col-sm-pull-5 {
1231
- right: 41.66666666666667%;
1232
- }
1233
-
1234
- .col-sm-pull-4 {
1235
- right: 33.33333333333333%;
1236
- }
1237
-
1238
- .col-sm-pull-3 {
1239
- right: 25%;
1240
- }
1241
-
1242
- .col-sm-pull-2 {
1243
- right: 16.666666666666664%;
1244
- }
1245
-
1246
- .col-sm-pull-1 {
1247
- right: 8.333333333333332%;
1248
- }
1249
-
1250
- .col-sm-pull-0 {
1251
- right: 0;
1252
- }
1253
-
1254
- .col-sm-push-12 {
1255
- left: 100%;
1256
- }
1257
-
1258
- .col-sm-push-11 {
1259
- left: 91.66666666666666%;
1260
- }
1261
-
1262
- .col-sm-push-10 {
1263
- left: 83.33333333333334%;
1264
- }
1265
-
1266
- .col-sm-push-9 {
1267
- left: 75%;
1268
- }
1269
-
1270
- .col-sm-push-8 {
1271
- left: 66.66666666666666%;
1272
- }
1273
-
1274
- .col-sm-push-7 {
1275
- left: 58.333333333333336%;
1276
- }
1277
-
1278
- .col-sm-push-6 {
1279
- left: 50%;
1280
- }
1281
-
1282
- .col-sm-push-5 {
1283
- left: 41.66666666666667%;
1284
- }
1285
-
1286
- .col-sm-push-4 {
1287
- left: 33.33333333333333%;
1288
- }
1289
-
1290
- .col-sm-push-3 {
1291
- left: 25%;
1292
- }
1293
-
1294
- .col-sm-push-2 {
1295
- left: 16.666666666666664%;
1296
- }
1297
-
1298
- .col-sm-push-1 {
1299
- left: 8.333333333333332%;
1300
- }
1301
-
1302
- .col-sm-push-0 {
1303
- left: 0;
1304
- }
1305
-
1306
- .col-sm-offset-12 {
1307
- margin-left: 100%;
1308
- }
1309
-
1310
- .col-sm-offset-11 {
1311
- margin-left: 91.66666666666666%;
1312
- }
1313
-
1314
- .col-sm-offset-10 {
1315
- margin-left: 83.33333333333334%;
1316
- }
1317
-
1318
- .col-sm-offset-9 {
1319
- margin-left: 75%;
1320
- }
1321
-
1322
- .col-sm-offset-8 {
1323
- margin-left: 66.66666666666666%;
1324
- }
1325
-
1326
- .col-sm-offset-7 {
1327
- margin-left: 58.333333333333336%;
1328
- }
1329
-
1330
- .col-sm-offset-6 {
1331
- margin-left: 50%;
1332
- }
1333
-
1334
- .col-sm-offset-5 {
1335
- margin-left: 41.66666666666667%;
1336
- }
1337
-
1338
- .col-sm-offset-4 {
1339
- margin-left: 33.33333333333333%;
1340
- }
1341
-
1342
- .col-sm-offset-3 {
1343
- margin-left: 25%;
1344
- }
1345
-
1346
- .col-sm-offset-2 {
1347
- margin-left: 16.666666666666664%;
1348
- }
1349
-
1350
- .col-sm-offset-1 {
1351
- margin-left: 8.333333333333332%;
1352
- }
1353
-
1354
- .col-sm-offset-0 {
1355
- margin-left: 0;
1356
- }
1357
- }
1358
-
1359
- @media (min-width: 992px) {
1360
- .col-md-1,
1361
- .col-md-2,
1362
- .col-md-3,
1363
- .col-md-4,
1364
- .col-md-5,
1365
- .col-md-6,
1366
- .col-md-7,
1367
- .col-md-8,
1368
- .col-md-9,
1369
- .col-md-10,
1370
- .col-md-11,
1371
- .col-md-12 {
1372
- float: left;
1373
- }
1374
-
1375
- .col-md-12 {
1376
- width: 100%;
1377
- }
1378
-
1379
- .col-md-11 {
1380
- width: 91.66666666666666%;
1381
- }
1382
-
1383
- .col-md-10 {
1384
- width: 83.33333333333334%;
1385
- }
1386
-
1387
- .col-md-9 {
1388
- width: 75%;
1389
- }
1390
-
1391
- .col-md-8 {
1392
- width: 66.66666666666666%;
1393
- }
1394
-
1395
- .col-md-7 {
1396
- width: 58.333333333333336%;
1397
- }
1398
-
1399
- .col-md-6 {
1400
- width: 50%;
1401
- }
1402
-
1403
- .col-md-5 {
1404
- width: 41.66666666666667%;
1405
- }
1406
-
1407
- .col-md-4 {
1408
- width: 33.33333333333333%;
1409
- }
1410
-
1411
- .col-md-3 {
1412
- width: 25%;
1413
- }
1414
-
1415
- .col-md-2 {
1416
- width: 16.666666666666664%;
1417
- }
1418
-
1419
- .col-md-1 {
1420
- width: 8.333333333333332%;
1421
- }
1422
-
1423
- .col-md-pull-12 {
1424
- right: 100%;
1425
- }
1426
-
1427
- .col-md-pull-11 {
1428
- right: 91.66666666666666%;
1429
- }
1430
-
1431
- .col-md-pull-10 {
1432
- right: 83.33333333333334%;
1433
- }
1434
-
1435
- .col-md-pull-9 {
1436
- right: 75%;
1437
- }
1438
-
1439
- .col-md-pull-8 {
1440
- right: 66.66666666666666%;
1441
- }
1442
-
1443
- .col-md-pull-7 {
1444
- right: 58.333333333333336%;
1445
- }
1446
-
1447
- .col-md-pull-6 {
1448
- right: 50%;
1449
- }
1450
-
1451
- .col-md-pull-5 {
1452
- right: 41.66666666666667%;
1453
- }
1454
-
1455
- .col-md-pull-4 {
1456
- right: 33.33333333333333%;
1457
- }
1458
-
1459
- .col-md-pull-3 {
1460
- right: 25%;
1461
- }
1462
-
1463
- .col-md-pull-2 {
1464
- right: 16.666666666666664%;
1465
- }
1466
-
1467
- .col-md-pull-1 {
1468
- right: 8.333333333333332%;
1469
- }
1470
-
1471
- .col-md-pull-0 {
1472
- right: 0;
1473
- }
1474
-
1475
- .col-md-push-12 {
1476
- left: 100%;
1477
- }
1478
-
1479
- .col-md-push-11 {
1480
- left: 91.66666666666666%;
1481
- }
1482
-
1483
- .col-md-push-10 {
1484
- left: 83.33333333333334%;
1485
- }
1486
-
1487
- .col-md-push-9 {
1488
- left: 75%;
1489
- }
1490
-
1491
- .col-md-push-8 {
1492
- left: 66.66666666666666%;
1493
- }
1494
-
1495
- .col-md-push-7 {
1496
- left: 58.333333333333336%;
1497
- }
1498
-
1499
- .col-md-push-6 {
1500
- left: 50%;
1501
- }
1502
-
1503
- .col-md-push-5 {
1504
- left: 41.66666666666667%;
1505
- }
1506
-
1507
- .col-md-push-4 {
1508
- left: 33.33333333333333%;
1509
- }
1510
-
1511
- .col-md-push-3 {
1512
- left: 25%;
1513
- }
1514
-
1515
- .col-md-push-2 {
1516
- left: 16.666666666666664%;
1517
- }
1518
-
1519
- .col-md-push-1 {
1520
- left: 8.333333333333332%;
1521
- }
1522
-
1523
- .col-md-push-0 {
1524
- left: 0;
1525
- }
1526
-
1527
- .col-md-offset-12 {
1528
- margin-left: 100%;
1529
- }
1530
-
1531
- .col-md-offset-11 {
1532
- margin-left: 91.66666666666666%;
1533
- }
1534
-
1535
- .col-md-offset-10 {
1536
- margin-left: 83.33333333333334%;
1537
- }
1538
-
1539
- .col-md-offset-9 {
1540
- margin-left: 75%;
1541
- }
1542
-
1543
- .col-md-offset-8 {
1544
- margin-left: 66.66666666666666%;
1545
- }
1546
-
1547
- .col-md-offset-7 {
1548
- margin-left: 58.333333333333336%;
1549
- }
1550
-
1551
- .col-md-offset-6 {
1552
- margin-left: 50%;
1553
- }
1554
-
1555
- .col-md-offset-5 {
1556
- margin-left: 41.66666666666667%;
1557
- }
1558
-
1559
- .col-md-offset-4 {
1560
- margin-left: 33.33333333333333%;
1561
- }
1562
-
1563
- .col-md-offset-3 {
1564
- margin-left: 25%;
1565
- }
1566
-
1567
- .col-md-offset-2 {
1568
- margin-left: 16.666666666666664%;
1569
- }
1570
-
1571
- .col-md-offset-1 {
1572
- margin-left: 8.333333333333332%;
1573
- }
1574
-
1575
- .col-md-offset-0 {
1576
- margin-left: 0;
1577
- }
1578
- }
1579
-
1580
- @media (min-width: 1200px) {
1581
- .col-lg-1,
1582
- .col-lg-2,
1583
- .col-lg-3,
1584
- .col-lg-4,
1585
- .col-lg-5,
1586
- .col-lg-6,
1587
- .col-lg-7,
1588
- .col-lg-8,
1589
- .col-lg-9,
1590
- .col-lg-10,
1591
- .col-lg-11,
1592
- .col-lg-12 {
1593
- float: left;
1594
- }
1595
-
1596
- .col-lg-12 {
1597
- width: 100%;
1598
- }
1599
-
1600
- .col-lg-11 {
1601
- width: 91.66666666666666%;
1602
- }
1603
-
1604
- .col-lg-10 {
1605
- width: 83.33333333333334%;
1606
- }
1607
-
1608
- .col-lg-9 {
1609
- width: 75%;
1610
- }
1611
-
1612
- .col-lg-8 {
1613
- width: 66.66666666666666%;
1614
- }
1615
-
1616
- .col-lg-7 {
1617
- width: 58.333333333333336%;
1618
- }
1619
-
1620
- .col-lg-6 {
1621
- width: 50%;
1622
- }
1623
-
1624
- .col-lg-5 {
1625
- width: 41.66666666666667%;
1626
- }
1627
-
1628
- .col-lg-4 {
1629
- width: 33.33333333333333%;
1630
- }
1631
-
1632
- .col-lg-3 {
1633
- width: 25%;
1634
- }
1635
-
1636
- .col-lg-2 {
1637
- width: 16.666666666666664%;
1638
- }
1639
-
1640
- .col-lg-1 {
1641
- width: 8.333333333333332%;
1642
- }
1643
-
1644
- .col-lg-pull-12 {
1645
- right: 100%;
1646
- }
1647
-
1648
- .col-lg-pull-11 {
1649
- right: 91.66666666666666%;
1650
- }
1651
-
1652
- .col-lg-pull-10 {
1653
- right: 83.33333333333334%;
1654
- }
1655
-
1656
- .col-lg-pull-9 {
1657
- right: 75%;
1658
- }
1659
-
1660
- .col-lg-pull-8 {
1661
- right: 66.66666666666666%;
1662
- }
1663
-
1664
- .col-lg-pull-7 {
1665
- right: 58.333333333333336%;
1666
- }
1667
-
1668
- .col-lg-pull-6 {
1669
- right: 50%;
1670
- }
1671
-
1672
- .col-lg-pull-5 {
1673
- right: 41.66666666666667%;
1674
- }
1675
-
1676
- .col-lg-pull-4 {
1677
- right: 33.33333333333333%;
1678
- }
1679
-
1680
- .col-lg-pull-3 {
1681
- right: 25%;
1682
- }
1683
-
1684
- .col-lg-pull-2 {
1685
- right: 16.666666666666664%;
1686
- }
1687
-
1688
- .col-lg-pull-1 {
1689
- right: 8.333333333333332%;
1690
- }
1691
-
1692
- .col-lg-pull-0 {
1693
- right: 0;
1694
- }
1695
-
1696
- .col-lg-push-12 {
1697
- left: 100%;
1698
- }
1699
-
1700
- .col-lg-push-11 {
1701
- left: 91.66666666666666%;
1702
- }
1703
-
1704
- .col-lg-push-10 {
1705
- left: 83.33333333333334%;
1706
- }
1707
-
1708
- .col-lg-push-9 {
1709
- left: 75%;
1710
- }
1711
-
1712
- .col-lg-push-8 {
1713
- left: 66.66666666666666%;
1714
- }
1715
-
1716
- .col-lg-push-7 {
1717
- left: 58.333333333333336%;
1718
- }
1719
-
1720
- .col-lg-push-6 {
1721
- left: 50%;
1722
- }
1723
-
1724
- .col-lg-push-5 {
1725
- left: 41.66666666666667%;
1726
- }
1727
-
1728
- .col-lg-push-4 {
1729
- left: 33.33333333333333%;
1730
- }
1731
-
1732
- .col-lg-push-3 {
1733
- left: 25%;
1734
- }
1735
-
1736
- .col-lg-push-2 {
1737
- left: 16.666666666666664%;
1738
- }
1739
-
1740
- .col-lg-push-1 {
1741
- left: 8.333333333333332%;
1742
- }
1743
-
1744
- .col-lg-push-0 {
1745
- left: 0;
1746
- }
1747
-
1748
- .col-lg-offset-12 {
1749
- margin-left: 100%;
1750
- }
1751
-
1752
- .col-lg-offset-11 {
1753
- margin-left: 91.66666666666666%;
1754
- }
1755
-
1756
- .col-lg-offset-10 {
1757
- margin-left: 83.33333333333334%;
1758
- }
1759
-
1760
- .col-lg-offset-9 {
1761
- margin-left: 75%;
1762
- }
1763
-
1764
- .col-lg-offset-8 {
1765
- margin-left: 66.66666666666666%;
1766
- }
1767
-
1768
- .col-lg-offset-7 {
1769
- margin-left: 58.333333333333336%;
1770
- }
1771
-
1772
- .col-lg-offset-6 {
1773
- margin-left: 50%;
1774
- }
1775
-
1776
- .col-lg-offset-5 {
1777
- margin-left: 41.66666666666667%;
1778
- }
1779
-
1780
- .col-lg-offset-4 {
1781
- margin-left: 33.33333333333333%;
1782
- }
1783
-
1784
- .col-lg-offset-3 {
1785
- margin-left: 25%;
1786
- }
1787
-
1788
- .col-lg-offset-2 {
1789
- margin-left: 16.666666666666664%;
1790
- }
1791
-
1792
- .col-lg-offset-1 {
1793
- margin-left: 8.333333333333332%;
1794
- }
1795
-
1796
- .col-lg-offset-0 {
1797
- margin-left: 0;
1798
- }
1799
- }
1800
-
1801
- .factory-bootstrap-330 table {
1802
- max-width: 100%;
1803
- background-color: transparent;
1804
- }
1805
-
1806
- .factory-bootstrap-330 th {
1807
- text-align: left;
1808
- }
1809
-
1810
- .factory-bootstrap-330 .table {
1811
- width: 100%;
1812
- margin-bottom: 20px;
1813
- }
1814
-
1815
- .factory-bootstrap-330 .table > thead > tr > th,
1816
- .factory-bootstrap-330 .table > tbody > tr > th,
1817
- .factory-bootstrap-330 .table > tfoot > tr > th,
1818
- .factory-bootstrap-330 .table > thead > tr > td,
1819
- .factory-bootstrap-330 .table > tbody > tr > td,
1820
- .factory-bootstrap-330 .table > tfoot > tr > td {
1821
- padding: 8px;
1822
- line-height: 1.428571429;
1823
- vertical-align: top;
1824
- border-top: 1px solid #dddddd;
1825
- }
1826
-
1827
- .factory-bootstrap-330 .table > thead > tr > th {
1828
- vertical-align: bottom;
1829
- border-bottom: 2px solid #dddddd;
1830
- }
1831
-
1832
- .factory-bootstrap-330 .table > caption + thead > tr:first-child > th,
1833
- .factory-bootstrap-330 .table > colgroup + thead > tr:first-child > th,
1834
- .factory-bootstrap-330 .table > thead:first-child > tr:first-child > th,
1835
- .factory-bootstrap-330 .table > caption + thead > tr:first-child > td,
1836
- .factory-bootstrap-330 .table > colgroup + thead > tr:first-child > td,
1837
- .factory-bootstrap-330 .table > thead:first-child > tr:first-child > td {
1838
- border-top: 0;
1839
- }
1840
-
1841
- .factory-bootstrap-330 .table > tbody + tbody {
1842
- border-top: 2px solid #dddddd;
1843
- }
1844
-
1845
- .factory-bootstrap-330 .table .table {
1846
- background-color: #ffffff;
1847
- }
1848
-
1849
- .factory-bootstrap-330 .table-condensed > thead > tr > th,
1850
- .factory-bootstrap-330 .table-condensed > tbody > tr > th,
1851
- .factory-bootstrap-330 .table-condensed > tfoot > tr > th,
1852
- .factory-bootstrap-330 .table-condensed > thead > tr > td,
1853
- .factory-bootstrap-330 .table-condensed > tbody > tr > td,
1854
- .factory-bootstrap-330 .table-condensed > tfoot > tr > td {
1855
- padding: 5px;
1856
- }
1857
-
1858
- .factory-bootstrap-330 .table-bordered {
1859
- border: 1px solid #dddddd;
1860
- }
1861
-
1862
- .factory-bootstrap-330 .table-bordered > thead > tr > th,
1863
- .factory-bootstrap-330 .table-bordered > tbody > tr > th,
1864
- .factory-bootstrap-330 .table-bordered > tfoot > tr > th,
1865
- .factory-bootstrap-330 .table-bordered > thead > tr > td,
1866
- .factory-bootstrap-330 .table-bordered > tbody > tr > td,
1867
- .factory-bootstrap-330 .table-bordered > tfoot > tr > td {
1868
- border: 1px solid #dddddd;
1869
- }
1870
-
1871
- .factory-bootstrap-330 .table-bordered > thead > tr > th,
1872
- .factory-bootstrap-330 .table-bordered > thead > tr > td {
1873
- border-bottom-width: 2px;
1874
- }
1875
-
1876
- .factory-bootstrap-330 .table-striped > tbody > tr:nth-child(odd) > td,
1877
- .factory-bootstrap-330 .table-striped > tbody > tr:nth-child(odd) > th {
1878
- background-color: #f9f9f9;
1879
- }
1880
-
1881
- .factory-bootstrap-330 .table-hover > tbody > tr:hover > td,
1882
- .factory-bootstrap-330 .table-hover > tbody > tr:hover > th {
1883
- background-color: #f5f5f5;
1884
- }
1885
-
1886
- .factory-bootstrap-330 table col[class*="col-"] {
1887
- position: static;
1888
- display: table-column;
1889
- float: none;
1890
- }
1891
-
1892
- .factory-bootstrap-330 table td[class*="col-"],
1893
- .factory-bootstrap-330 table th[class*="col-"] {
1894
- display: table-cell;
1895
- float: none;
1896
- }
1897
-
1898
- .factory-bootstrap-330 .table > thead > tr > .active,
1899
- .factory-bootstrap-330 .table > tbody > tr > .active,
1900
- .factory-bootstrap-330 .table > tfoot > tr > .active,
1901
- .factory-bootstrap-330 .table > thead > .active > td,
1902
- .factory-bootstrap-330 .table > tbody > .active > td,
1903
- .factory-bootstrap-330 .table > tfoot > .active > td,
1904
- .factory-bootstrap-330 .table > thead > .active > th,
1905
- .factory-bootstrap-330 .table > tbody > .active > th,
1906
- .factory-bootstrap-330 .table > tfoot > .active > th {
1907
- background-color: #f5f5f5;
1908
- }
1909
-
1910
- .factory-bootstrap-330 .table-hover > tbody > tr > .active:hover,
1911
- .factory-bootstrap-330 .table-hover > tbody > .active:hover > td,
1912
- .factory-bootstrap-330 .table-hover > tbody > .active:hover > th {
1913
- background-color: #e8e8e8;
1914
- }
1915
-
1916
- .factory-bootstrap-330 .table > thead > tr > .success,
1917
- .factory-bootstrap-330 .table > tbody > tr > .success,
1918
- .factory-bootstrap-330 .table > tfoot > tr > .success,
1919
- .factory-bootstrap-330 .table > thead > .success > td,
1920
- .factory-bootstrap-330 .table > tbody > .success > td,
1921
- .factory-bootstrap-330 .table > tfoot > .success > td,
1922
- .factory-bootstrap-330 .table > thead > .success > th,
1923
- .factory-bootstrap-330 .table > tbody > .success > th,
1924
- .factory-bootstrap-330 .table > tfoot > .success > th {
1925
- background-color: #dff0d8;
1926
- }
1927
-
1928
- .factory-bootstrap-330 .table-hover > tbody > tr > .success:hover,
1929
- .factory-bootstrap-330 .table-hover > tbody > .success:hover > td,
1930
- .factory-bootstrap-330 .table-hover > tbody > .success:hover > th {
1931
- background-color: #d0e9c6;
1932
- }
1933
-
1934
- .factory-bootstrap-330 .table > thead > tr > .danger,
1935
- .factory-bootstrap-330 .table > tbody > tr > .danger,
1936
- .factory-bootstrap-330 .table > tfoot > tr > .danger,
1937
- .factory-bootstrap-330 .table > thead > .danger > td,
1938
- .factory-bootstrap-330 .table > tbody > .danger > td,
1939
- .factory-bootstrap-330 .table > tfoot > .danger > td,
1940
- .factory-bootstrap-330 .table > thead > .danger > th,
1941
- .factory-bootstrap-330 .table > tbody > .danger > th,
1942
- .factory-bootstrap-330 .table > tfoot > .danger > th {
1943
- background-color: #f2dede;
1944
- }
1945
-
1946
- .factory-bootstrap-330 .table-hover > tbody > tr > .danger:hover,
1947
- .factory-bootstrap-330 .table-hover > tbody > .danger:hover > td,
1948
- .factory-bootstrap-330 .table-hover > tbody > .danger:hover > th {
1949
- background-color: #ebcccc;
1950
- }
1951
-
1952
- .factory-bootstrap-330 .table > thead > tr > .warning,
1953
- .factory-bootstrap-330 .table > tbody > tr > .warning,
1954
- .factory-bootstrap-330 .table > tfoot > tr > .warning,
1955
- .factory-bootstrap-330 .table > thead > .warning > td,
1956
- .factory-bootstrap-330 .table > tbody > .warning > td,
1957
- .factory-bootstrap-330 .table > tfoot > .warning > td,
1958
- .factory-bootstrap-330 .table > thead > .warning > th,
1959
- .factory-bootstrap-330 .table > tbody > .warning > th,
1960
- .factory-bootstrap-330 .table > tfoot > .warning > th {
1961
- background-color: #fcf8e3;
1962
- }
1963
-
1964
- .factory-bootstrap-330 .table-hover > tbody > tr > .warning:hover,
1965
- .factory-bootstrap-330 .table-hover > tbody > .warning:hover > td,
1966
- .factory-bootstrap-330 .table-hover > tbody > .warning:hover > th {
1967
- background-color: #faf2cc;
1968
- }
1969
-
1970
- @media (max-width: 767px) {
1971
- .table-responsive {
1972
- width: 100%;
1973
- margin-bottom: 15px;
1974
- overflow-x: scroll;
1975
- overflow-y: hidden;
1976
- border: 1px solid #dddddd;
1977
- -ms-overflow-style: -ms-autohiding-scrollbar;
1978
- -webkit-overflow-scrolling: touch;
1979
- }
1980
-
1981
- .table-responsive > .table {
1982
- margin-bottom: 0;
1983
- }
1984
-
1985
- .table-responsive > .table > thead > tr > th,
1986
- .table-responsive > .table > tbody > tr > th,
1987
- .table-responsive > .table > tfoot > tr > th,
1988
- .table-responsive > .table > thead > tr > td,
1989
- .table-responsive > .table > tbody > tr > td,
1990
- .table-responsive > .table > tfoot > tr > td {
1991
- white-space: nowrap;
1992
- }
1993
-
1994
- .table-responsive > .table-bordered {
1995
- border: 0;
1996
- }
1997
-
1998
- .table-responsive > .table-bordered > thead > tr > th:first-child,
1999
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
2000
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
2001
- .table-responsive > .table-bordered > thead > tr > td:first-child,
2002
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
2003
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
2004
- border-left: 0;
2005
- }
2006
-
2007
- .table-responsive > .table-bordered > thead > tr > th:last-child,
2008
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
2009
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
2010
- .table-responsive > .table-bordered > thead > tr > td:last-child,
2011
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
2012
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
2013
- border-right: 0;
2014
- }
2015
-
2016
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
2017
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
2018
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
2019
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
2020
- border-bottom: 0;
2021
- }
2022
- }
2023
-
2024
- .factory-bootstrap-330 fieldset {
2025
- padding: 0;
2026
- margin: 0;
2027
- border: 0;
2028
- }
2029
-
2030
- .factory-bootstrap-330 legend {
2031
- display: block;
2032
- width: 100%;
2033
- padding: 0;
2034
- margin-bottom: 20px;
2035
- font-size: 21px;
2036
- line-height: inherit;
2037
- color: #333333;
2038
- border: 0;
2039
- border-bottom: 1px solid #e5e5e5;
2040
- -moz-box-sizing: content-box;
2041
- box-sizing: content-box;
2042
- }
2043
-
2044
- .factory-bootstrap-330 label {
2045
- display: inline-block;
2046
- margin-bottom: 5px;
2047
- font-weight: bold;
2048
- }
2049
-
2050
- .factory-bootstrap-330 input[type="search"] {
2051
- -webkit-box-sizing: border-box;
2052
- -moz-box-sizing: border-box;
2053
- box-sizing: border-box;
2054
- }
2055
-
2056
- .factory-bootstrap-330 input[type="radio"],
2057
- .factory-bootstrap-330 input[type="checkbox"] {
2058
- margin: 4px 0 0;
2059
- margin-top: 1px \9;
2060
- /* IE8-9 */
2061
-
2062
- line-height: normal;
2063
- }
2064
-
2065
- .factory-bootstrap-330 input[type="file"] {
2066
- display: block;
2067
- }
2068
-
2069
- .factory-bootstrap-330 select[multiple],
2070
- .factory-bootstrap-330 select[size] {
2071
- height: auto;
2072
- }
2073
-
2074
- .factory-bootstrap-330 select optgroup {
2075
- font-family: inherit;
2076
- font-size: inherit;
2077
- font-style: inherit;
2078
- }
2079
-
2080
- .factory-bootstrap-330 input[type="file"]:focus,
2081
- .factory-bootstrap-330 input[type="radio"]:focus,
2082
- .factory-bootstrap-330 input[type="checkbox"]:focus {
2083
- outline: thin dotted;
2084
- outline: 5px auto -webkit-focus-ring-color;
2085
- outline-offset: -2px;
2086
- }
2087
-
2088
- .factory-bootstrap-330 input[type="number"]::-webkit-outer-spin-button,
2089
- .factory-bootstrap-330 input[type="number"]::-webkit-inner-spin-button {
2090
- height: auto;
2091
- }
2092
-
2093
- .factory-bootstrap-330 output {
2094
- display: block;
2095
- padding-top: 7px;
2096
- font-size: 14px;
2097
- line-height: 1.428571429;
2098
- color: #555555;
2099
- vertical-align: middle;
2100
- }
2101
-
2102
- .factory-bootstrap-330 .form-control {
2103
- display: block;
2104
- width: 100%;
2105
- height: 34px;
2106
- padding: 6px 12px;
2107
- font-size: 14px;
2108
- line-height: 1.428571429;
2109
- color: #555555;
2110
- vertical-align: middle;
2111
- background-color: #ffffff;
2112
- background-image: none;
2113
- border: 1px solid #cccccc;
2114
- border-radius: 3px;
2115
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2116
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2117
- -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
2118
- transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
2119
- }
2120
-
2121
- .factory-bootstrap-330 .form-control:focus {
2122
- border-color: #66afe9;
2123
- outline: 0;
2124
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2125
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2126
- }
2127
-
2128
- .factory-bootstrap-330 .form-control:-moz-placeholder {
2129
- color: #999999;
2130
- }
2131
-
2132
- .factory-bootstrap-330 .form-control::-moz-placeholder {
2133
- color: #999999;
2134
- opacity: 1;
2135
- }
2136
-
2137
- .factory-bootstrap-330 .form-control:-ms-input-placeholder {
2138
- color: #999999;
2139
- }
2140
-
2141
- .factory-bootstrap-330 .form-control::-webkit-input-placeholder {
2142
- color: #999999;
2143
- }
2144
-
2145
- .factory-bootstrap-330 .form-control[disabled],
2146
- .factory-bootstrap-330 .form-control[readonly],
2147
- .factory-bootstrap-330 fieldset[disabled] .form-control {
2148
- cursor: not-allowed;
2149
- background-color: #eeeeee;
2150
- }
2151
-
2152
- .factory-bootstrap-330 textarea.form-control {
2153
- height: auto;
2154
- }
2155
-
2156
- .factory-bootstrap-330 .form-group {
2157
- margin-bottom: 15px;
2158
- }
2159
-
2160
- .factory-bootstrap-330 .radio,
2161
- .factory-bootstrap-330 .checkbox {
2162
- display: block;
2163
- min-height: 20px;
2164
- padding-left: 20px;
2165
- margin-top: 10px;
2166
- margin-bottom: 10px;
2167
- vertical-align: middle;
2168
- }
2169
-
2170
- .factory-bootstrap-330 .radio label,
2171
- .factory-bootstrap-330 .checkbox label {
2172
- display: inline;
2173
- margin-bottom: 0;
2174
- font-weight: normal;
2175
- cursor: pointer;
2176
- }
2177
-
2178
- .factory-bootstrap-330 .radio input[type="radio"],
2179
- .factory-bootstrap-330 .radio-inline input[type="radio"],
2180
- .factory-bootstrap-330 .checkbox input[type="checkbox"],
2181
- .factory-bootstrap-330 .checkbox-inline input[type="checkbox"] {
2182
- float: left;
2183
- margin-left: -20px;
2184
- }
2185
-
2186
- .factory-bootstrap-330 .radio + .radio,
2187
- .factory-bootstrap-330 .checkbox + .checkbox {
2188
- margin-top: -5px;
2189
- }
2190
-
2191
- .factory-bootstrap-330 .radio-inline,
2192
- .factory-bootstrap-330 .checkbox-inline {
2193
- display: inline-block;
2194
- padding-left: 20px;
2195
- margin-bottom: 0;
2196
- font-weight: normal;
2197
- vertical-align: middle;
2198
- cursor: pointer;
2199
- }
2200
-
2201
- .factory-bootstrap-330 .radio-inline + .radio-inline,
2202
- .factory-bootstrap-330 .checkbox-inline + .checkbox-inline {
2203
- margin-top: 0;
2204
- margin-left: 10px;
2205
- }
2206
-
2207
- .factory-bootstrap-330 input[type="radio"][disabled],
2208
- .factory-bootstrap-330 input[type="checkbox"][disabled],
2209
- .factory-bootstrap-330 .radio[disabled],
2210
- .factory-bootstrap-330 .radio-inline[disabled],
2211
- .factory-bootstrap-330 .checkbox[disabled],
2212
- .factory-bootstrap-330 .checkbox-inline[disabled],
2213
- .factory-bootstrap-330 fieldset[disabled] input[type="radio"],
2214
- .factory-bootstrap-330 fieldset[disabled] input[type="checkbox"],
2215
- .factory-bootstrap-330 fieldset[disabled] .radio,
2216
- .factory-bootstrap-330 fieldset[disabled] .radio-inline,
2217
- .factory-bootstrap-330 fieldset[disabled] .checkbox,
2218
- .factory-bootstrap-330 fieldset[disabled] .checkbox-inline {
2219
- cursor: not-allowed;
2220
- }
2221
-
2222
- .factory-bootstrap-330 .input-sm {
2223
- height: 30px;
2224
- padding: 5px 10px;
2225
- font-size: 12px;
2226
- line-height: 1.5;
2227
- border-radius: 3px;
2228
- }
2229
-
2230
- .factory-bootstrap-330 select.input-sm {
2231
- height: 30px;
2232
- line-height: 30px;
2233
- }
2234
-
2235
- .factory-bootstrap-330 textarea.input-sm {
2236
- height: auto;
2237
- }
2238
-
2239
- .factory-bootstrap-330 .input-lg {
2240
- height: 46px;
2241
- padding: 10px 16px;
2242
- font-size: 18px;
2243
- line-height: 1.33;
2244
- border-radius: 6px;
2245
- }
2246
-
2247
- .factory-bootstrap-330 select.input-lg {
2248
- height: 46px;
2249
- line-height: 46px;
2250
- }
2251
-
2252
- .factory-bootstrap-330 textarea.input-lg {
2253
- height: auto;
2254
- }
2255
-
2256
- .factory-bootstrap-330 .has-warning .help-block,
2257
- .factory-bootstrap-330 .has-warning .control-label,
2258
- .factory-bootstrap-330 .has-warning .radio,
2259
- .factory-bootstrap-330 .has-warning .checkbox,
2260
- .factory-bootstrap-330 .has-warning .radio-inline,
2261
- .factory-bootstrap-330 .has-warning .checkbox-inline {
2262
- color: #8a6d3b;
2263
- }
2264
-
2265
- .factory-bootstrap-330 .has-warning .form-control {
2266
- border-color: #8a6d3b;
2267
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2268
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2269
- }
2270
-
2271
- .factory-bootstrap-330 .has-warning .form-control:focus {
2272
- border-color: #66512c;
2273
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
2274
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
2275
- }
2276
-
2277
- .factory-bootstrap-330 .has-warning .input-group-addon {
2278
- color: #8a6d3b;
2279
- background-color: #fcf8e3;
2280
- border-color: #8a6d3b;
2281
- }
2282
-
2283
- .factory-bootstrap-330 .has-error .help-block,
2284
- .factory-bootstrap-330 .has-error .control-label,
2285
- .factory-bootstrap-330 .has-error .radio,
2286
- .factory-bootstrap-330 .has-error .checkbox,
2287
- .factory-bootstrap-330 .has-error .radio-inline,
2288
- .factory-bootstrap-330 .has-error .checkbox-inline {
2289
- color: #a94442;
2290
- }
2291
-
2292
- .factory-bootstrap-330 .controls {
2293
- display: block;
2294
- }
2295
-
2296
- .factory-bootstrap-330 .has-error .form-control {
2297
- border-color: #a94442;
2298
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2299
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2300
- }
2301
-
2302
- .factory-bootstrap-330 .has-error .form-control:focus {
2303
- border-color: #843534;
2304
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
2305
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
2306
- }
2307
-
2308
- .factory-bootstrap-330 .has-error .input-group-addon {
2309
- color: #a94442;
2310
- background-color: #f2dede;
2311
- border-color: #a94442;
2312
- }
2313
-
2314
- .factory-bootstrap-330 .has-success .help-block,
2315
- .factory-bootstrap-330 .has-success .control-label,
2316
- .factory-bootstrap-330 .has-success .radio,
2317
- .factory-bootstrap-330 .has-success .checkbox,
2318
- .factory-bootstrap-330 .has-success .radio-inline,
2319
- .factory-bootstrap-330 .has-success .checkbox-inline {
2320
- color: #3c763d;
2321
- }
2322
-
2323
- .factory-bootstrap-330 .has-success .form-control {
2324
- border-color: #3c763d;
2325
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2326
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2327
- }
2328
-
2329
- .factory-bootstrap-330 .has-success .form-control:focus {
2330
- border-color: #2b542c;
2331
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
2332
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
2333
- }
2334
-
2335
- .factory-bootstrap-330 .has-success .input-group-addon {
2336
- color: #3c763d;
2337
- background-color: #dff0d8;
2338
- border-color: #3c763d;
2339
- }
2340
-
2341
- .factory-bootstrap-330 .form-control-static {
2342
- margin-bottom: 0;
2343
- }
2344
-
2345
- .factory-bootstrap-330 .help-block {
2346
- display: block;
2347
- margin-top: 5px;
2348
- margin-bottom: 10px;
2349
- color: #737373;
2350
- font-weight: normal;
2351
- }
2352
-
2353
- @media (min-width: 768px) {
2354
- .form-inline .form-group {
2355
- display: inline-block;
2356
- margin-bottom: 0;
2357
- vertical-align: middle;
2358
- }
2359
-
2360
- .form-inline .form-control {
2361
- display: inline-block;
2362
- }
2363
-
2364
- .form-inline select.form-control {
2365
- width: auto;
2366
- }
2367
-
2368
- .form-inline .radio,
2369
- .form-inline .checkbox {
2370
- display: inline-block;
2371
- padding-left: 0;
2372
- margin-top: 0;
2373
- margin-bottom: 0;
2374
- }
2375
-
2376
- .form-inline .radio input[type="radio"],
2377
- .form-inline .checkbox input[type="checkbox"] {
2378
- float: none;
2379
- margin-left: 0;
2380
- }
2381
- }
2382
-
2383
- .factory-bootstrap-330 .form-horizontal .control-label,
2384
- .factory-bootstrap-330 .form-horizontal .radio,
2385
- .factory-bootstrap-330 .form-horizontal .checkbox,
2386
- .factory-bootstrap-330 .form-horizontal .radio-inline,
2387
- .factory-bootstrap-330 .form-horizontal .checkbox-inline {
2388
- position: relative;
2389
- padding-top: 7px;
2390
- margin-top: 0;
2391
- margin-bottom: 0;
2392
- }
2393
-
2394
- .factory-bootstrap-330 .form-horizontal .control-label {
2395
- max-width: 200px;
2396
- }
2397
-
2398
- .factory-bootstrap-330 .form-horizontal .radio,
2399
- .factory-bootstrap-330 .form-horizontal .checkbox {
2400
- min-height: 27px;
2401
- }
2402
-
2403
- .factory-bootstrap-330 .form-horizontal .form-group {
2404
- margin-right: -15px;
2405
- margin-left: -15px;
2406
- }
2407
-
2408
- .factory-bootstrap-330 .form-horizontal .form-group:before,
2409
- .factory-bootstrap-330 .form-horizontal .form-group:after {
2410
- display: table;
2411
- content: " ";
2412
- }
2413
-
2414
- .factory-bootstrap-330 .form-horizontal .form-group:after {
2415
- clear: both;
2416
- }
2417
-
2418
- .factory-bootstrap-330 .form-horizontal .form-group:before,
2419
- .factory-bootstrap-330 .form-horizontal .form-group:after {
2420
- display: table;
2421
- content: " ";
2422
- }
2423
-
2424
- .factory-bootstrap-330 .form-horizontal .form-group:after {
2425
- clear: both;
2426
- }
2427
-
2428
- .factory-bootstrap-330 .form-horizontal .form-control-static {
2429
- padding-top: 7px;
2430
- }
2431
-
2432
- @media (min-width: 768px) {
2433
- .form-horizontal .control-label {
2434
- text-align: right;
2435
- }
2436
- }
2437
-
2438
- .factory-bootstrap-330 .btn {
2439
- display: inline-block;
2440
- padding: 5px 12px 5px 12px;
2441
- margin-bottom: 0;
2442
- font-size: 13px;
2443
- font-weight: normal;
2444
- line-height: 1.428571429;
2445
- text-align: center;
2446
- white-space: nowrap;
2447
- vertical-align: middle;
2448
- cursor: pointer;
2449
- background-image: none;
2450
- border: 1px solid transparent;
2451
- border-radius: 3px;
2452
- -webkit-user-select: none;
2453
- -moz-user-select: none;
2454
- -ms-user-select: none;
2455
- -o-user-select: none;
2456
- user-select: none;
2457
- }
2458
-
2459
- .factory-bootstrap-330 .btn:focus {
2460
- outline: thin dotted;
2461
- outline: 5px auto -webkit-focus-ring-color;
2462
- outline-offset: -2px;
2463
- }
2464
-
2465
- .factory-bootstrap-330 .btn {
2466
- text-decoration: none;
2467
- }
2468
-
2469
- .factory-bootstrap-330 .btn:hover,
2470
- .factory-bootstrap-330 .btn:focus {
2471
- color: #333333;
2472
- text-decoration: none;
2473
- }
2474
-
2475
- .factory-bootstrap-330 .btn.disabled,
2476
- .factory-bootstrap-330 .btn[disabled],
2477
- .factory-bootstrap-330 fieldset[disabled] .btn {
2478
- pointer-events: none;
2479
- cursor: not-allowed;
2480
- opacity: 0.65;
2481
- filter: alpha(opacity=65);
2482
- -webkit-box-shadow: none;
2483
- box-shadow: none;
2484
- }
2485
-
2486
- .factory-bootstrap-330 .btn-default {
2487
- color: #333333;
2488
- background-color: #ffffff;
2489
- border-color: #cccccc;
2490
- }
2491
-
2492
- .factory-bootstrap-330 .btn-default:hover,
2493
- .factory-bootstrap-330 .btn-default:focus,
2494
- .factory-bootstrap-330 .btn-default:active,
2495
- .factory-bootstrap-330 .btn-default.active,
2496
- .factory-bootstrap-330 .open .dropdown-toggle.btn-default {
2497
- background: #fafafa;
2498
- border-color: #999;
2499
- color: #222;
2500
- }
2501
-
2502
- .factory-bootstrap-330 .btn-default:active,
2503
- .factory-bootstrap-330 .btn-default.active,
2504
- .factory-bootstrap-330 .open .dropdown-toggle.btn-default {
2505
- background-image: none;
2506
- }
2507
-
2508
- .factory-bootstrap-330 .btn-default.disabled,
2509
- .factory-bootstrap-330 .btn-default[disabled],
2510
- .factory-bootstrap-330 fieldset[disabled] .btn-default,
2511
- .factory-bootstrap-330 .btn-default.disabled:hover,
2512
- .factory-bootstrap-330 .btn-default[disabled]:hover,
2513
- .factory-bootstrap-330 fieldset[disabled] .btn-default:hover,
2514
- .factory-bootstrap-330 .btn-default.disabled:focus,
2515
- .factory-bootstrap-330 .btn-default[disabled]:focus,
2516
- .factory-bootstrap-330 fieldset[disabled] .btn-default:focus,
2517
- .factory-bootstrap-330 .btn-default.disabled:active,
2518
- .factory-bootstrap-330 .btn-default[disabled]:active,
2519
- .factory-bootstrap-330 fieldset[disabled] .btn-default:active,
2520
- .factory-bootstrap-330 .btn-default.disabled.active,
2521
- .factory-bootstrap-330 .btn-default[disabled].active,
2522
- .factory-bootstrap-330 fieldset[disabled] .btn-default.active {
2523
- background-color: #ffffff;
2524
- border-color: #cccccc;
2525
- }
2526
-
2527
- .factory-bootstrap-330 .btn-default .badge {
2528
- color: #ffffff;
2529
- background-color: #fff;
2530
- }
2531
-
2532
- .factory-bootstrap-330 .btn-primary {
2533
- color: #ffffff;
2534
- background-color: #428bca;
2535
- border-color: #357ebd;
2536
- }
2537
-
2538
- .factory-bootstrap-330 .btn-primary:hover,
2539
- .factory-bootstrap-330 .btn-primary:focus,
2540
- .factory-bootstrap-330 .btn-primary:active,
2541
- .factory-bootstrap-330 .btn-primary.active,
2542
- .factory-bootstrap-330 .open .dropdown-toggle.btn-primary {
2543
- color: #ffffff;
2544
- background-color: #3276b1;
2545
- border-color: #285e8e;
2546
- }
2547
-
2548
- .factory-bootstrap-330 .btn-primary:active,
2549
- .factory-bootstrap-330 .btn-primary.active,
2550
- .factory-bootstrap-330 .open .dropdown-toggle.btn-primary {
2551
- background-image: none;
2552
- }
2553
-
2554
- .factory-bootstrap-330 .btn-primary.disabled,
2555
- .factory-bootstrap-330 .btn-primary[disabled],
2556
- .factory-bootstrap-330 fieldset[disabled] .btn-primary,
2557
- .factory-bootstrap-330 .btn-primary.disabled:hover,
2558
- .factory-bootstrap-330 .btn-primary[disabled]:hover,
2559
- .factory-bootstrap-330 fieldset[disabled] .btn-primary:hover,
2560
- .factory-bootstrap-330 .btn-primary.disabled:focus,
2561
- .factory-bootstrap-330 .btn-primary[disabled]:focus,
2562
- .factory-bootstrap-330 fieldset[disabled] .btn-primary:focus,
2563
- .factory-bootstrap-330 .btn-primary.disabled:active,
2564
- .factory-bootstrap-330 .btn-primary[disabled]:active,
2565
- .factory-bootstrap-330 fieldset[disabled] .btn-primary:active,
2566
- .factory-bootstrap-330 .btn-primary.disabled.active,
2567
- .factory-bootstrap-330 .btn-primary[disabled].active,
2568
- .factory-bootstrap-330 fieldset[disabled] .btn-primary.active {
2569
- background-color: #428bca;
2570
- border-color: #357ebd;
2571
- }
2572
-
2573
- .factory-bootstrap-330 .btn-primary .badge {
2574
- color: #428bca;
2575
- background-color: #fff;
2576
- }
2577
-
2578
- .factory-bootstrap-330 .btn-warning {
2579
- color: #ffffff;
2580
- background-color: #f0ad4e;
2581
- border-color: #eea236;
2582
- }
2583
-
2584
- .factory-bootstrap-330 .btn-warning:hover,
2585
- .factory-bootstrap-330 .btn-warning:focus,
2586
- .factory-bootstrap-330 .btn-warning:active,
2587
- .factory-bootstrap-330 .btn-warning.active,
2588
- .factory-bootstrap-330 .open .dropdown-toggle.btn-warning {
2589
- color: #ffffff;
2590
- background-color: #ed9c28;
2591
- border-color: #d58512;
2592
- }
2593
-
2594
- .factory-bootstrap-330 .btn-warning:active,
2595
- .factory-bootstrap-330 .btn-warning.active,
2596
- .factory-bootstrap-330 .open .dropdown-toggle.btn-warning {
2597
- background-image: none;
2598
- }
2599
-
2600
- .factory-bootstrap-330 .btn-warning.disabled,
2601
- .factory-bootstrap-330 .btn-warning[disabled],
2602
- .factory-bootstrap-330 fieldset[disabled] .btn-warning,
2603
- .factory-bootstrap-330 .btn-warning.disabled:hover,
2604
- .factory-bootstrap-330 .btn-warning[disabled]:hover,
2605
- .factory-bootstrap-330 fieldset[disabled] .btn-warning:hover,
2606
- .factory-bootstrap-330 .btn-warning.disabled:focus,
2607
- .factory-bootstrap-330 .btn-warning[disabled]:focus,
2608
- .factory-bootstrap-330 fieldset[disabled] .btn-warning:focus,
2609
- .factory-bootstrap-330 .btn-warning.disabled:active,
2610
- .factory-bootstrap-330 .btn-warning[disabled]:active,
2611
- .factory-bootstrap-330 fieldset[disabled] .btn-warning:active,
2612
- .factory-bootstrap-330 .btn-warning.disabled.active,
2613
- .factory-bootstrap-330 .btn-warning[disabled].active,
2614
- .factory-bootstrap-330 fieldset[disabled] .btn-warning.active {
2615
- background-color: #f0ad4e;
2616
- border-color: #eea236;
2617
- }
2618
-
2619
- .factory-bootstrap-330 .btn-warning .badge {
2620
- color: #f0ad4e;
2621
- background-color: #fff;
2622
- }
2623
-
2624
- .factory-bootstrap-330 .btn-success {
2625
- color: #ffffff;
2626
- background-color: #5cb85c;
2627
- border-color: #4cae4c;
2628
- }
2629
-
2630
- .factory-bootstrap-330 .btn-success:hover,
2631
- .factory-bootstrap-330 .btn-success:focus,
2632
- .factory-bootstrap-330 .btn-success:active,
2633
- .factory-bootstrap-330 .btn-success.active,
2634
- .factory-bootstrap-330 .open .dropdown-toggle.btn-success {
2635
- color: #ffffff;
2636
- background-color: #47a447;
2637
- border-color: #398439;
2638
- }
2639
-
2640
- .factory-bootstrap-330 .btn-success:active,
2641
- .factory-bootstrap-330 .btn-success.active,
2642
- .factory-bootstrap-330 .open .dropdown-toggle.btn-success {
2643
- background-image: none;
2644
- }
2645
-
2646
- .factory-bootstrap-330 .btn-success.disabled,
2647
- .factory-bootstrap-330 .btn-success[disabled],
2648
- .factory-bootstrap-330 fieldset[disabled] .btn-success,
2649
- .factory-bootstrap-330 .btn-success.disabled:hover,
2650
- .factory-bootstrap-330 .btn-success[disabled]:hover,
2651
- .factory-bootstrap-330 fieldset[disabled] .btn-success:hover,
2652
- .factory-bootstrap-330 .btn-success.disabled:focus,
2653
- .factory-bootstrap-330 .btn-success[disabled]:focus,
2654
- .factory-bootstrap-330 fieldset[disabled] .btn-success:focus,
2655
- .factory-bootstrap-330 .btn-success.disabled:active,
2656
- .factory-bootstrap-330 .btn-success[disabled]:active,
2657
- .factory-bootstrap-330 fieldset[disabled] .btn-success:active,
2658
- .factory-bootstrap-330 .btn-success.disabled.active,
2659
- .factory-bootstrap-330 .btn-success[disabled].active,
2660
- .factory-bootstrap-330 fieldset[disabled] .btn-success.active {
2661
- background-color: #5cb85c;
2662
- border-color: #4cae4c;
2663
- }
2664
-
2665
- .factory-bootstrap-330 .btn-success .badge {
2666
- color: #5cb85c;
2667
- background-color: #fff;
2668
- }
2669
-
2670
- .factory-bootstrap-330 .btn-info {
2671
- color: #ffffff;
2672
- background-color: #5bc0de;
2673
- border-color: #46b8da;
2674
- }
2675
-
2676
- .factory-bootstrap-330 .btn-info:hover,
2677
- .factory-bootstrap-330 .btn-info:focus,
2678
- .factory-bootstrap-330 .btn-info:active,
2679
- .factory-bootstrap-330 .btn-info.active,
2680
- .factory-bootstrap-330 .open .dropdown-toggle.btn-info {
2681
- color: #ffffff;
2682
- background-color: #39b3d7;
2683
- border-color: #269abc;
2684
- }
2685
-
2686
- .factory-bootstrap-330 .btn-info:active,
2687
- .factory-bootstrap-330 .btn-info.active,
2688
- .factory-bootstrap-330 .open .dropdown-toggle.btn-info {
2689
- background-image: none;
2690
- }
2691
-
2692
- .factory-bootstrap-330 .btn-info.disabled,
2693
- .factory-bootstrap-330 .btn-info[disabled],
2694
- .factory-bootstrap-330 fieldset[disabled] .btn-info,
2695
- .factory-bootstrap-330 .btn-info.disabled:hover,
2696
- .factory-bootstrap-330 .btn-info[disabled]:hover,
2697
- .factory-bootstrap-330 fieldset[disabled] .btn-info:hover,
2698
- .factory-bootstrap-330 .btn-info.disabled:focus,
2699
- .factory-bootstrap-330 .btn-info[disabled]:focus,
2700
- .factory-bootstrap-330 fieldset[disabled] .btn-info:focus,
2701
- .factory-bootstrap-330 .btn-info.disabled:active,
2702
- .factory-bootstrap-330 .btn-info[disabled]:active,
2703
- .factory-bootstrap-330 fieldset[disabled] .btn-info:active,
2704
- .factory-bootstrap-330 .btn-info.disabled.active,
2705
- .factory-bootstrap-330 .btn-info[disabled].active,
2706
- .factory-bootstrap-330 fieldset[disabled] .btn-info.active {
2707
- background-color: #5bc0de;
2708
- border-color: #46b8da;
2709
- }
2710
-
2711
- .factory-bootstrap-330 .btn-info .badge {
2712
- color: #5bc0de;
2713
- background-color: #fff;
2714
- }
2715
-
2716
- .factory-bootstrap-330 .btn-link {
2717
- font-weight: normal;
2718
- color: #428bca;
2719
- cursor: pointer;
2720
- border-radius: 0;
2721
- }
2722
-
2723
- .factory-bootstrap-330 .btn-link,
2724
- .factory-bootstrap-330 .btn-link:active,
2725
- .factory-bootstrap-330 .btn-link[disabled],
2726
- .factory-bootstrap-330 fieldset[disabled] .btn-link {
2727
- background-color: transparent;
2728
- -webkit-box-shadow: none;
2729
- box-shadow: none;
2730
- }
2731
-
2732
- .factory-bootstrap-330 .btn-link,
2733
- .factory-bootstrap-330 .btn-link:hover,
2734
- .factory-bootstrap-330 .btn-link:focus,
2735
- .factory-bootstrap-330 .btn-link:active {
2736
- border-color: transparent;
2737
- }
2738
-
2739
- .factory-bootstrap-330 .btn-link:hover,
2740
- .factory-bootstrap-330 .btn-link:focus {
2741
- color: #2a6496;
2742
- text-decoration: underline;
2743
- background-color: transparent;
2744
- }
2745
-
2746
- .factory-bootstrap-330 .btn-link[disabled]:hover,
2747
- .factory-bootstrap-330 fieldset[disabled] .btn-link:hover,
2748
- .factory-bootstrap-330 .btn-link[disabled]:focus,
2749
- .factory-bootstrap-330 fieldset[disabled] .btn-link:focus {
2750
- color: #999999;
2751
- text-decoration: none;
2752
- }
2753
-
2754
- .factory-bootstrap-330 .btn-lg {
2755
- padding: 10px 16px;
2756
- font-size: 18px;
2757
- line-height: 1.33;
2758
- border-radius: 6px;
2759
- }
2760
-
2761
- .factory-bootstrap-330 .btn-sm {
2762
- padding: 5px 10px;
2763
- font-size: 12px;
2764
- line-height: 1.5;
2765
- border-radius: 3px;
2766
- }
2767
-
2768
- .factory-bootstrap-330 .btn-xs {
2769
- padding: 1px 5px;
2770
- font-size: 12px;
2771
- line-height: 1.5;
2772
- border-radius: 3px;
2773
- }
2774
-
2775
- .factory-bootstrap-330 .btn-block {
2776
- display: block;
2777
- width: 100%;
2778
- padding-right: 0;
2779
- padding-left: 0;
2780
- }
2781
-
2782
- .factory-bootstrap-330 .btn-block + .btn-block {
2783
- margin-top: 5px;
2784
- }
2785
-
2786
- .factory-bootstrap-330 input[type="submit"].btn-block,
2787
- .factory-bootstrap-330 input[type="reset"].btn-block,
2788
- .factory-bootstrap-330 input[type="button"].btn-block {
2789
- width: 100%;
2790
- }
2791
-
2792
- .factory-bootstrap-330 .fade {
2793
- opacity: 0;
2794
- -webkit-transition: opacity 0.15s linear;
2795
- transition: opacity 0.15s linear;
2796
- }
2797
-
2798
- .factory-bootstrap-330 .fade.in {
2799
- opacity: 1;
2800
- }
2801
-
2802
- .factory-bootstrap-330 .collapse {
2803
- display: none;
2804
- }
2805
-
2806
- .factory-bootstrap-330 .collapse.in {
2807
- display: block;
2808
- }
2809
-
2810
- .factory-bootstrap-330 .collapsing {
2811
- position: relative;
2812
- height: 0;
2813
- overflow: hidden;
2814
- -webkit-transition: height 0.35s ease;
2815
- transition: height 0.35s ease;
2816
- }
2817
-
2818
- @font-face {
2819
- font-family: 'Glyphicons Halflings';
2820
- src: url('../fonts/glyphicons-halflings-regular.eot');
2821
- 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');
2822
- }
2823
-
2824
- .factory-bootstrap-330 .glyphicon {
2825
- position: relative;
2826
- top: 1px;
2827
- display: inline-block;
2828
- font-family: 'Glyphicons Halflings';
2829
- -webkit-font-smoothing: antialiased;
2830
- font-style: normal;
2831
- font-weight: normal;
2832
- line-height: 1;
2833
- -moz-osx-font-smoothing: grayscale;
2834
- }
2835
-
2836
- .factory-bootstrap-330 .glyphicon:empty {
2837
- width: 1em;
2838
- }
2839
-
2840
- .factory-bootstrap-330 .glyphicon-asterisk:before {
2841
- content: "\2a";
2842
- }
2843
-
2844
- .factory-bootstrap-330 .glyphicon-plus:before {
2845
- content: "\2b";
2846
- }
2847
-
2848
- .factory-bootstrap-330 .glyphicon-euro:before {
2849
- content: "\20ac";
2850
- }
2851
-
2852
- .factory-bootstrap-330 .glyphicon-minus:before {
2853
- content: "\2212";
2854
- }
2855
-
2856
- .factory-bootstrap-330 .glyphicon-cloud:before {
2857
- content: "\2601";
2858
- }
2859
-
2860
- .factory-bootstrap-330 .glyphicon-envelope:before {
2861
- content: "\2709";
2862
- }
2863
-
2864
- .factory-bootstrap-330 .glyphicon-pencil:before {
2865
- content: "\270f";
2866
- }
2867
-
2868
- .factory-bootstrap-330 .glyphicon-glass:before {
2869
- content: "\e001";
2870
- }
2871
-
2872
- .factory-bootstrap-330 .glyphicon-music:before {
2873
- content: "\e002";
2874
- }
2875
-
2876
- .factory-bootstrap-330 .glyphicon-search:before {
2877
- content: "\e003";
2878
- }
2879
-
2880
- .factory-bootstrap-330 .glyphicon-heart:before {
2881
- content: "\e005";
2882
- }
2883
-
2884
- .factory-bootstrap-330 .glyphicon-star:before {
2885
- content: "\e006";
2886
- }
2887
-
2888
- .factory-bootstrap-330 .glyphicon-star-empty:before {
2889
- content: "\e007";
2890
- }
2891
-
2892
- .factory-bootstrap-330 .glyphicon-user:before {
2893
- content: "\e008";
2894
- }
2895
-
2896
- .factory-bootstrap-330 .glyphicon-film:before {
2897
- content: "\e009";
2898
- }
2899
-
2900
- .factory-bootstrap-330 .glyphicon-th-large:before {
2901
- content: "\e010";
2902
- }
2903
-
2904
- .factory-bootstrap-330 .glyphicon-th:before {
2905
- content: "\e011";
2906
- }
2907
-
2908
- .factory-bootstrap-330 .glyphicon-th-list:before {
2909
- content: "\e012";
2910
- }
2911
-
2912
- .factory-bootstrap-330 .glyphicon-ok:before {
2913
- content: "\e013";
2914
- }
2915
-
2916
- .factory-bootstrap-330 .glyphicon-remove:before {
2917
- content: "\e014";
2918
- }
2919
-
2920
- .factory-bootstrap-330 .glyphicon-zoom-in:before {
2921
- content: "\e015";
2922
- }
2923
-
2924
- .factory-bootstrap-330 .glyphicon-zoom-out:before {
2925
- content: "\e016";
2926
- }
2927
-
2928
- .factory-bootstrap-330 .glyphicon-off:before {
2929
- content: "\e017";
2930
- }
2931
-
2932
- .factory-bootstrap-330 .glyphicon-signal:before {
2933
- content: "\e018";
2934
- }
2935
-
2936
- .factory-bootstrap-330 .glyphicon-cog:before {
2937
- content: "\e019";
2938
- }
2939
-
2940
- .factory-bootstrap-330 .glyphicon-trash:before {
2941
- content: "\e020";
2942
- }
2943
-
2944
- .factory-bootstrap-330 .glyphicon-home:before {
2945
- content: "\e021";
2946
- }
2947
-
2948
- .factory-bootstrap-330 .glyphicon-file:before {
2949
- content: "\e022";
2950
- }
2951
-
2952
- .factory-bootstrap-330 .glyphicon-time:before {
2953
- content: "\e023";
2954
- }
2955
-
2956
- .factory-bootstrap-330 .glyphicon-road:before {
2957
- content: "\e024";
2958
- }
2959
-
2960
- .factory-bootstrap-330 .glyphicon-download-alt:before {
2961
- content: "\e025";
2962
- }
2963
-
2964
- .factory-bootstrap-330 .glyphicon-download:before {
2965
- content: "\e026";
2966
- }
2967
-
2968
- .factory-bootstrap-330 .glyphicon-upload:before {
2969
- content: "\e027";
2970
- }
2971
-
2972
- .factory-bootstrap-330 .glyphicon-inbox:before {
2973
- content: "\e028";
2974
- }
2975
-
2976
- .factory-bootstrap-330 .glyphicon-play-circle:before {
2977
- content: "\e029";
2978
- }
2979
-
2980
- .factory-bootstrap-330 .glyphicon-repeat:before {
2981
- content: "\e030";
2982
- }
2983
-
2984
- .factory-bootstrap-330 .glyphicon-refresh:before {
2985
- content: "\e031";
2986
- }
2987
-
2988
- .factory-bootstrap-330 .glyphicon-list-alt:before {
2989
- content: "\e032";
2990
- }
2991
-
2992
- .factory-bootstrap-330 .glyphicon-lock:before {
2993
- content: "\e033";
2994
- }
2995
-
2996
- .factory-bootstrap-330 .glyphicon-flag:before {
2997
- content: "\e034";
2998
- }
2999
-
3000
- .factory-bootstrap-330 .glyphicon-headphones:before {
3001
- content: "\e035";
3002
- }
3003
-
3004
- .factory-bootstrap-330 .glyphicon-volume-off:before {
3005
- content: "\e036";
3006
- }
3007
-
3008
- .factory-bootstrap-330 .glyphicon-volume-down:before {
3009
- content: "\e037";
3010
- }
3011
-
3012
- .factory-bootstrap-330 .glyphicon-volume-up:before {
3013
- content: "\e038";
3014
- }
3015
-
3016
- .factory-bootstrap-330 .glyphicon-qrcode:before {
3017
- content: "\e039";
3018
- }
3019
-
3020
- .factory-bootstrap-330 .glyphicon-barcode:before {
3021
- content: "\e040";
3022
- }
3023
-
3024
- .factory-bootstrap-330 .glyphicon-tag:before {
3025
- content: "\e041";
3026
- }
3027
-
3028
- .factory-bootstrap-330 .glyphicon-tags:before {
3029
- content: "\e042";
3030
- }
3031
-
3032
- .factory-bootstrap-330 .glyphicon-book:before {
3033
- content: "\e043";
3034
- }
3035
-
3036
- .factory-bootstrap-330 .glyphicon-bookmark:before {
3037
- content: "\e044";
3038
- }
3039
-
3040
- .factory-bootstrap-330 .glyphicon-print:before {
3041
- content: "\e045";
3042
- }
3043
-
3044
- .factory-bootstrap-330 .glyphicon-camera:before {
3045
- content: "\e046";
3046
- }
3047
-
3048
- .factory-bootstrap-330 .glyphicon-font:before {
3049
- content: "\e047";
3050
- }
3051
-
3052
- .factory-bootstrap-330 .glyphicon-bold:before {
3053
- content: "\e048";
3054
- }
3055
-
3056
- .factory-bootstrap-330 .glyphicon-italic:before {
3057
- content: "\e049";
3058
- }
3059
-
3060
- .factory-bootstrap-330 .glyphicon-text-height:before {
3061
- content: "\e050";
3062
- }
3063
-
3064
- .factory-bootstrap-330 .glyphicon-text-width:before {
3065
- content: "\e051";
3066
- }
3067
-
3068
- .factory-bootstrap-330 .glyphicon-align-left:before {
3069
- content: "\e052";
3070
- }
3071
-
3072
- .factory-bootstrap-330 .glyphicon-align-center:before {
3073
- content: "\e053";
3074
- }
3075
-
3076
- .factory-bootstrap-330 .glyphicon-align-right:before {
3077
- content: "\e054";
3078
- }
3079
-
3080
- .factory-bootstrap-330 .glyphicon-align-justify:before {
3081
- content: "\e055";
3082
- }
3083
-
3084
- .factory-bootstrap-330 .glyphicon-list:before {
3085
- content: "\e056";
3086
- }
3087
-
3088
- .factory-bootstrap-330 .glyphicon-indent-left:before {
3089
- content: "\e057";
3090
- }
3091
-
3092
- .factory-bootstrap-330 .glyphicon-indent-right:before {
3093
- content: "\e058";
3094
- }
3095
-
3096
- .factory-bootstrap-330 .glyphicon-facetime-video:before {
3097
- content: "\e059";
3098
- }
3099
-
3100
- .factory-bootstrap-330 .glyphicon-picture:before {
3101
- content: "\e060";
3102
- }
3103
-
3104
- .factory-bootstrap-330 .glyphicon-map-marker:before {
3105
- content: "\e062";
3106
- }
3107
-
3108
- .factory-bootstrap-330 .glyphicon-adjust:before {
3109
- content: "\e063";
3110
- }
3111
-
3112
- .factory-bootstrap-330 .glyphicon-tint:before {
3113
- content: "\e064";
3114
- }
3115
-
3116
- .factory-bootstrap-330 .glyphicon-edit:before {
3117
- content: "\e065";
3118
- }
3119
-
3120
- .factory-bootstrap-330 .glyphicon-share:before {
3121
- content: "\e066";
3122
- }
3123
-
3124
- .factory-bootstrap-330 .glyphicon-check:before {
3125
- content: "\e067";
3126
- }
3127
-
3128
- .factory-bootstrap-330 .glyphicon-move:before {
3129
- content: "\e068";
3130
- }
3131
-
3132
- .factory-bootstrap-330 .glyphicon-step-backward:before {
3133
- content: "\e069";
3134
- }
3135
-
3136
- .factory-bootstrap-330 .glyphicon-fast-backward:before {
3137
- content: "\e070";
3138
- }
3139
-
3140
- .factory-bootstrap-330 .glyphicon-backward:before {
3141
- content: "\e071";
3142
- }
3143
-
3144
- .factory-bootstrap-330 .glyphicon-play:before {
3145
- content: "\e072";
3146
- }
3147
-
3148
- .factory-bootstrap-330 .glyphicon-pause:before {
3149
- content: "\e073";
3150
- }
3151
-
3152
- .factory-bootstrap-330 .glyphicon-stop:before {
3153
- content: "\e074";
3154
- }
3155
-
3156
- .factory-bootstrap-330 .glyphicon-forward:before {
3157
- content: "\e075";
3158
- }
3159
-
3160
- .factory-bootstrap-330 .glyphicon-fast-forward:before {
3161
- content: "\e076";
3162
- }
3163
-
3164
- .factory-bootstrap-330 .glyphicon-step-forward:before {
3165
- content: "\e077";
3166
- }
3167
-
3168
- .factory-bootstrap-330 .glyphicon-eject:before {
3169
- content: "\e078";
3170
- }
3171
-
3172
- .factory-bootstrap-330 .glyphicon-chevron-left:before {
3173
- content: "\e079";
3174
- }
3175
-
3176
- .factory-bootstrap-330 .glyphicon-chevron-right:before {
3177
- content: "\e080";
3178
- }
3179
-
3180
- .factory-bootstrap-330 .glyphicon-plus-sign:before {
3181
- content: "\e081";
3182
- }
3183
-
3184
- .factory-bootstrap-330 .glyphicon-minus-sign:before {
3185
- content: "\e082";
3186
- }
3187
-
3188
- .factory-bootstrap-330 .glyphicon-remove-sign:before {
3189
- content: "\e083";
3190
- }
3191
-
3192
- .factory-bootstrap-330 .glyphicon-ok-sign:before {
3193
- content: "\e084";
3194
- }
3195
-
3196
- .factory-bootstrap-330 .glyphicon-question-sign:before {
3197
- content: "\e085";
3198
- }
3199
-
3200
- .factory-bootstrap-330 .glyphicon-info-sign:before {
3201
- content: "\e086";
3202
- }
3203
-
3204
- .factory-bootstrap-330 .glyphicon-screenshot:before {
3205
- content: "\e087";
3206
- }
3207
-
3208
- .factory-bootstrap-330 .glyphicon-remove-circle:before {
3209
- content: "\e088";
3210
- }
3211
-
3212
- .factory-bootstrap-330 .glyphicon-ok-circle:before {
3213
- content: "\e089";
3214
- }
3215
-
3216
- .factory-bootstrap-330 .glyphicon-ban-circle:before {
3217
- content: "\e090";
3218
- }
3219
-
3220
- .factory-bootstrap-330 .glyphicon-arrow-left:before {
3221
- content: "\e091";
3222
- }
3223
-
3224
- .factory-bootstrap-330 .glyphicon-arrow-right:before {
3225
- content: "\e092";
3226
- }
3227
-
3228
- .factory-bootstrap-330 .glyphicon-arrow-up:before {
3229
- content: "\e093";
3230
- }
3231
-
3232
- .factory-bootstrap-330 .glyphicon-arrow-down:before {
3233
- content: "\e094";
3234
- }
3235
-
3236
- .factory-bootstrap-330 .glyphicon-share-alt:before {
3237
- content: "\e095";
3238
- }
3239
-
3240
- .factory-bootstrap-330 .glyphicon-resize-full:before {
3241
- content: "\e096";
3242
- }
3243
-
3244
- .factory-bootstrap-330 .glyphicon-resize-small:before {
3245
- content: "\e097";
3246
- }
3247
-
3248
- .factory-bootstrap-330 .glyphicon-exclamation-sign:before {
3249
- content: "\e101";
3250
- }
3251
-
3252
- .factory-bootstrap-330 .glyphicon-gift:before {
3253
- content: "\e102";
3254
- }
3255
-
3256
- .factory-bootstrap-330 .glyphicon-leaf:before {
3257
- content: "\e103";
3258
- }
3259
-
3260
- .factory-bootstrap-330 .glyphicon-fire:before {
3261
- content: "\e104";
3262
- }
3263
-
3264
- .factory-bootstrap-330 .glyphicon-eye-open:before {
3265
- content: "\e105";
3266
- }
3267
-
3268
- .factory-bootstrap-330 .glyphicon-eye-close:before {
3269
- content: "\e106";
3270
- }
3271
-
3272
- .factory-bootstrap-330 .glyphicon-warning-sign:before {
3273
- content: "\e107";
3274
- }
3275
-
3276
- .factory-bootstrap-330 .glyphicon-plane:before {
3277
- content: "\e108";
3278
- }
3279
-
3280
- .factory-bootstrap-330 .glyphicon-calendar:before {
3281
- content: "\e109";
3282
- }
3283
-
3284
- .factory-bootstrap-330 .glyphicon-random:before {
3285
- content: "\e110";
3286
- }
3287
-
3288
- .factory-bootstrap-330 .glyphicon-comment:before {
3289
- content: "\e111";
3290
- }
3291
-
3292
- .factory-bootstrap-330 .glyphicon-magnet:before {
3293
- content: "\e112";
3294
- }
3295
-
3296
- .factory-bootstrap-330 .glyphicon-chevron-up:before {
3297
- content: "\e113";
3298
- }
3299
-
3300
- .factory-bootstrap-330 .glyphicon-chevron-down:before {
3301
- content: "\e114";
3302
- }
3303
-
3304
- .factory-bootstrap-330 .glyphicon-retweet:before {
3305
- content: "\e115";
3306
- }
3307
-
3308
- .factory-bootstrap-330 .glyphicon-shopping-cart:before {
3309
- content: "\e116";
3310
- }
3311
-
3312
- .factory-bootstrap-330 .glyphicon-folder-close:before {
3313
- content: "\e117";
3314
- }
3315
-
3316
- .factory-bootstrap-330 .glyphicon-folder-open:before {
3317
- content: "\e118";
3318
- }
3319
-
3320
- .factory-bootstrap-330 .glyphicon-resize-vertical:before {
3321
- content: "\e119";
3322
- }
3323
-
3324
- .factory-bootstrap-330 .glyphicon-resize-horizontal:before {
3325
- content: "\e120";
3326
- }
3327
-
3328
- .factory-bootstrap-330 .glyphicon-hdd:before {
3329
- content: "\e121";
3330
- }
3331
-
3332
- .factory-bootstrap-330 .glyphicon-bullhorn:before {
3333
- content: "\e122";
3334
- }
3335
-
3336
- .factory-bootstrap-330 .glyphicon-bell:before {
3337
- content: "\e123";
3338
- }
3339
-
3340
- .factory-bootstrap-330 .glyphicon-certificate:before {
3341
- content: "\e124";
3342
- }
3343
-
3344
- .factory-bootstrap-330 .glyphicon-thumbs-up:before {
3345
- content: "\e125";
3346
- }
3347
-
3348
- .factory-bootstrap-330 .glyphicon-thumbs-down:before {
3349
- content: "\e126";
3350
- }
3351
-
3352
- .factory-bootstrap-330 .glyphicon-hand-right:before {
3353
- content: "\e127";
3354
- }
3355
-
3356
- .factory-bootstrap-330 .glyphicon-hand-left:before {
3357
- content: "\e128";
3358
- }
3359
-
3360
- .factory-bootstrap-330 .glyphicon-hand-up:before {
3361
- content: "\e129";
3362
- }
3363
-
3364
- .factory-bootstrap-330 .glyphicon-hand-down:before {
3365
- content: "\e130";
3366
- }
3367
-
3368
- .factory-bootstrap-330 .glyphicon-circle-arrow-right:before {
3369
- content: "\e131";
3370
- }
3371
-
3372
- .factory-bootstrap-330 .glyphicon-circle-arrow-left:before {
3373
- content: "\e132";
3374
- }
3375
-
3376
- .factory-bootstrap-330 .glyphicon-circle-arrow-up:before {
3377
- content: "\e133";
3378
- }
3379
-
3380
- .factory-bootstrap-330 .glyphicon-circle-arrow-down:before {
3381
- content: "\e134";
3382
- }
3383
-
3384
- .factory-bootstrap-330 .glyphicon-globe:before {
3385
- content: "\e135";
3386
- }
3387
-
3388
- .factory-bootstrap-330 .glyphicon-wrench:before {
3389
- content: "\e136";
3390
- }
3391
-
3392
- .factory-bootstrap-330 .glyphicon-tasks:before {
3393
- content: "\e137";
3394
- }
3395
-
3396
- .factory-bootstrap-330 .glyphicon-filter:before {
3397
- content: "\e138";
3398
- }
3399
-
3400
- .factory-bootstrap-330 .glyphicon-briefcase:before {
3401
- content: "\e139";
3402
- }
3403
-
3404
- .factory-bootstrap-330 .glyphicon-fullscreen:before {
3405
- content: "\e140";
3406
- }
3407
-
3408
- .factory-bootstrap-330 .glyphicon-dashboard:before {
3409
- content: "\e141";
3410
- }
3411
-
3412
- .factory-bootstrap-330 .glyphicon-paperclip:before {
3413
- content: "\e142";
3414
- }
3415
-
3416
- .factory-bootstrap-330 .glyphicon-heart-empty:before {
3417
- content: "\e143";
3418
- }
3419
-
3420
- .factory-bootstrap-330 .glyphicon-link:before {
3421
- content: "\e144";
3422
- }
3423
-
3424
- .factory-bootstrap-330 .glyphicon-phone:before {
3425
- content: "\e145";
3426
- }
3427
-
3428
- .factory-bootstrap-330 .glyphicon-pushpin:before {
3429
- content: "\e146";
3430
- }
3431
-
3432
- .factory-bootstrap-330 .glyphicon-usd:before {
3433
- content: "\e148";
3434
- }
3435
-
3436
- .factory-bootstrap-330 .glyphicon-gbp:before {
3437
- content: "\e149";
3438
- }
3439
-
3440
- .factory-bootstrap-330 .glyphicon-sort:before {
3441
- content: "\e150";
3442
- }
3443
-
3444
- .factory-bootstrap-330 .glyphicon-sort-by-alphabet:before {
3445
- content: "\e151";
3446
- }
3447
-
3448
- .factory-bootstrap-330 .glyphicon-sort-by-alphabet-alt:before {
3449
- content: "\e152";
3450
- }
3451
-
3452
- .factory-bootstrap-330 .glyphicon-sort-by-order:before {
3453
- content: "\e153";
3454
- }
3455
-
3456
- .factory-bootstrap-330 .glyphicon-sort-by-order-alt:before {
3457
- content: "\e154";
3458
- }
3459
-
3460
- .factory-bootstrap-330 .glyphicon-sort-by-attributes:before {
3461
- content: "\e155";
3462
- }
3463
-
3464
- .factory-bootstrap-330 .glyphicon-sort-by-attributes-alt:before {
3465
- content: "\e156";
3466
- }
3467
-
3468
- .factory-bootstrap-330 .glyphicon-unchecked:before {
3469
- content: "\e157";
3470
- }
3471
-
3472
- .factory-bootstrap-330 .glyphicon-expand:before {
3473
- content: "\e158";
3474
- }
3475
-
3476
- .factory-bootstrap-330 .glyphicon-collapse-down:before {
3477
- content: "\e159";
3478
- }
3479
-
3480
- .factory-bootstrap-330 .glyphicon-collapse-up:before {
3481
- content: "\e160";
3482
- }
3483
-
3484
- .factory-bootstrap-330 .glyphicon-log-in:before {
3485
- content: "\e161";
3486
- }
3487
-
3488
- .factory-bootstrap-330 .glyphicon-flash:before {
3489
- content: "\e162";
3490
- }
3491
-
3492
- .factory-bootstrap-330 .glyphicon-log-out:before {
3493
- content: "\e163";
3494
- }
3495
-
3496
- .factory-bootstrap-330 .glyphicon-new-window:before {
3497
- content: "\e164";
3498
- }
3499
-
3500
- .factory-bootstrap-330 .glyphicon-record:before {
3501
- content: "\e165";
3502
- }
3503
-
3504
- .factory-bootstrap-330 .glyphicon-save:before {
3505
- content: "\e166";
3506
- }
3507
-
3508
- .factory-bootstrap-330 .glyphicon-open:before {
3509
- content: "\e167";
3510
- }
3511
-
3512
- .factory-bootstrap-330 .glyphicon-saved:before {
3513
- content: "\e168";
3514
- }
3515
-
3516
- .factory-bootstrap-330 .glyphicon-import:before {
3517
- content: "\e169";
3518
- }
3519
-
3520
- .factory-bootstrap-330 .glyphicon-export:before {
3521
- content: "\e170";
3522
- }
3523
-
3524
- .factory-bootstrap-330 .glyphicon-send:before {
3525
- content: "\e171";
3526
- }
3527
-
3528
- .factory-bootstrap-330 .glyphicon-floppy-disk:before {
3529
- content: "\e172";
3530
- }
3531
-
3532
- .factory-bootstrap-330 .glyphicon-floppy-saved:before {
3533
- content: "\e173";
3534
- }
3535
-
3536
- .factory-bootstrap-330 .glyphicon-floppy-remove:before {
3537
- content: "\e174";
3538
- }
3539
-
3540
- .factory-bootstrap-330 .glyphicon-floppy-save:before {
3541
- content: "\e175";
3542
- }
3543
-
3544
- .factory-bootstrap-330 .glyphicon-floppy-open:before {
3545
- content: "\e176";
3546
- }
3547
-
3548
- .factory-bootstrap-330 .glyphicon-credit-card:before {
3549
- content: "\e177";
3550
- }
3551
-
3552
- .factory-bootstrap-330 .glyphicon-transfer:before {
3553
- content: "\e178";
3554
- }
3555
-
3556
- .factory-bootstrap-330 .glyphicon-cutlery:before {
3557
- content: "\e179";
3558
- }
3559
-
3560
- .factory-bootstrap-330 .glyphicon-header:before {
3561
- content: "\e180";
3562
- }
3563
-
3564
- .factory-bootstrap-330 .glyphicon-compressed:before {
3565
- content: "\e181";
3566
- }
3567
-
3568
- .factory-bootstrap-330 .glyphicon-earphone:before {
3569
- content: "\e182";
3570
- }
3571
-
3572
- .factory-bootstrap-330 .glyphicon-phone-alt:before {
3573
- content: "\e183";
3574
- }
3575
-
3576
- .factory-bootstrap-330 .glyphicon-tower:before {
3577
- content: "\e184";
3578
- }
3579
-
3580
- .factory-bootstrap-330 .glyphicon-stats:before {
3581
- content: "\e185";
3582
- }
3583
-
3584
- .factory-bootstrap-330 .glyphicon-sd-video:before {
3585
- content: "\e186";
3586
- }
3587
-
3588
- .factory-bootstrap-330 .glyphicon-hd-video:before {
3589
- content: "\e187";
3590
- }
3591
-
3592
- .factory-bootstrap-330 .glyphicon-subtitles:before {
3593
- content: "\e188";
3594
- }
3595
-
3596
- .factory-bootstrap-330 .glyphicon-sound-stereo:before {
3597
- content: "\e189";
3598
- }
3599
-
3600
- .factory-bootstrap-330 .glyphicon-sound-dolby:before {
3601
- content: "\e190";
3602
- }
3603
-
3604
- .factory-bootstrap-330 .glyphicon-sound-5-1:before {
3605
- content: "\e191";
3606
- }
3607
-
3608
- .factory-bootstrap-330 .glyphicon-sound-6-1:before {
3609
- content: "\e192";
3610
- }
3611
-
3612
- .factory-bootstrap-330 .glyphicon-sound-7-1:before {
3613
- content: "\e193";
3614
- }
3615
-
3616
- .factory-bootstrap-330 .glyphicon-copyright-mark:before {
3617
- content: "\e194";
3618
- }
3619
-
3620
- .factory-bootstrap-330 .glyphicon-registration-mark:before {
3621
- content: "\e195";
3622
- }
3623
-
3624
- .factory-bootstrap-330 .glyphicon-cloud-download:before {
3625
- content: "\e197";
3626
- }
3627
-
3628
- .factory-bootstrap-330 .glyphicon-cloud-upload:before {
3629
- content: "\e198";
3630
- }
3631
-
3632
- .factory-bootstrap-330 .glyphicon-tree-conifer:before {
3633
- content: "\e199";
3634
- }
3635
-
3636
- .factory-bootstrap-330 .glyphicon-tree-deciduous:before {
3637
- content: "\e200";
3638
- }
3639
-
3640
- .factory-bootstrap-330 .caret {
3641
- display: inline-block;
3642
- width: 0;
3643
- height: 0;
3644
- margin-left: 2px;
3645
- vertical-align: middle;
3646
- border-top: 4px solid;
3647
- border-right: 4px solid transparent;
3648
- border-left: 4px solid transparent;
3649
- }
3650
-
3651
- .factory-bootstrap-330 .dropdown {
3652
- position: relative;
3653
- }
3654
-
3655
- .factory-bootstrap-330 .dropdown-toggle:focus {
3656
- outline: 0;
3657
- }
3658
-
3659
- .factory-bootstrap-330 .dropdown-menu {
3660
- position: absolute;
3661
- top: 100%;
3662
- left: 0;
3663
- z-index: 1000;
3664
- display: none;
3665
- float: left;
3666
- min-width: 160px;
3667
- padding: 5px 0;
3668
- margin: 2px 0 0;
3669
- font-size: 14px;
3670
- list-style: none;
3671
- background-color: #ffffff;
3672
- border: 1px solid #cccccc;
3673
- border: 1px solid rgba(0, 0, 0, 0.15);
3674
- border-radius: 4px;
3675
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3676
- box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3677
- background-clip: padding-box;
3678
- }
3679
-
3680
- .factory-bootstrap-330 .dropdown-menu.pull-right {
3681
- right: 0;
3682
- left: auto;
3683
- }
3684
-
3685
- .factory-bootstrap-330 .dropdown-menu .divider {
3686
- height: 1px;
3687
- margin: 9px 0;
3688
- overflow: hidden;
3689
- background-color: #e5e5e5;
3690
- }
3691
-
3692
- .factory-bootstrap-330 .dropdown-menu > li > a {
3693
- display: block;
3694
- padding: 3px 20px;
3695
- clear: both;
3696
- font-weight: normal;
3697
- line-height: 1.428571429;
3698
- color: #333333;
3699
- white-space: nowrap;
3700
- }
3701
-
3702
- .factory-bootstrap-330 .dropdown-menu > li > a:hover,
3703
- .factory-bootstrap-330 .dropdown-menu > li > a:focus {
3704
- color: #262626;
3705
- text-decoration: none;
3706
- background-color: #f5f5f5;
3707
- }
3708
-
3709
- .factory-bootstrap-330 .dropdown-menu > .active > a,
3710
- .factory-bootstrap-330 .dropdown-menu > .active > a:hover,
3711
- .factory-bootstrap-330 .dropdown-menu > .active > a:focus {
3712
- color: #ffffff;
3713
- text-decoration: none;
3714
- background-color: #428bca;
3715
- outline: 0;
3716
- }
3717
-
3718
- .factory-bootstrap-330 .dropdown-menu > .disabled > a,
3719
- .factory-bootstrap-330 .dropdown-menu > .disabled > a:hover,
3720
- .factory-bootstrap-330 .dropdown-menu > .disabled > a:focus {
3721
- color: #999999;
3722
- }
3723
-
3724
- .factory-bootstrap-330 .dropdown-menu > .disabled > a:hover,
3725
- .factory-bootstrap-330 .dropdown-menu > .disabled > a:focus {
3726
- text-decoration: none;
3727
- cursor: not-allowed;
3728
- background-color: transparent;
3729
- background-image: none;
3730
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
3731
- }
3732
-
3733
- .factory-bootstrap-330 .open > .dropdown-menu {
3734
- display: block;
3735
- }
3736
-
3737
- .factory-bootstrap-330 .open > a {
3738
- outline: 0;
3739
- }
3740
-
3741
- .factory-bootstrap-330 .dropdown-header {
3742
- display: block;
3743
- padding: 3px 20px;
3744
- font-size: 12px;
3745
- line-height: 1.428571429;
3746
- color: #999999;
3747
- }
3748
-
3749
- .factory-bootstrap-330 .dropdown-backdrop {
3750
- position: fixed;
3751
- top: 0;
3752
- right: 0;
3753
- bottom: 0;
3754
- left: 0;
3755
- z-index: 990;
3756
- }
3757
-
3758
- .factory-bootstrap-330 .pull-right > .dropdown-menu {
3759
- right: 0;
3760
- left: auto;
3761
- }
3762
-
3763
- .factory-bootstrap-330 .dropup .caret,
3764
- .factory-bootstrap-330 .navbar-fixed-bottom .dropdown .caret {
3765
- border-top: 0;
3766
- border-bottom: 4px solid;
3767
- content: "";
3768
- }
3769
-
3770
- .factory-bootstrap-330 .dropup .dropdown-menu,
3771
- .factory-bootstrap-330 .navbar-fixed-bottom .dropdown .dropdown-menu {
3772
- top: auto;
3773
- bottom: 100%;
3774
- margin-bottom: 1px;
3775
- }
3776
-
3777
- @media (min-width: 768px) {
3778
- .navbar-right .dropdown-menu {
3779
- right: 0;
3780
- left: auto;
3781
- }
3782
- }
3783
-
3784
- .factory-bootstrap-330 .btn-group,
3785
- .factory-bootstrap-330 .btn-group-vertical {
3786
- position: relative;
3787
- display: inline-block;
3788
- vertical-align: middle;
3789
- }
3790
-
3791
- .factory-bootstrap-330 .btn-group > .btn,
3792
- .factory-bootstrap-330 .btn-group-vertical > .btn {
3793
- position: relative;
3794
- float: left;
3795
- }
3796
-
3797
- .factory-bootstrap-330 .btn-group > .btn:hover,
3798
- .factory-bootstrap-330 .btn-group-vertical > .btn:hover,
3799
- .factory-bootstrap-330 .btn-group > .btn:focus,
3800
- .factory-bootstrap-330 .btn-group-vertical > .btn:focus,
3801
- .factory-bootstrap-330 .btn-group > .btn:active,
3802
- .factory-bootstrap-330 .btn-group-vertical > .btn:active,
3803
- .factory-bootstrap-330 .btn-group > .btn.active,
3804
- .factory-bootstrap-330 .btn-group-vertical > .btn.active {
3805
- z-index: 2;
3806
- }
3807
-
3808
- .factory-bootstrap-330 .btn-group > .btn:focus,
3809
- .factory-bootstrap-330 .btn-group-vertical > .btn:focus {
3810
- outline: none;
3811
- }
3812
-
3813
- .factory-bootstrap-330 .btn-group .btn + .btn,
3814
- .factory-bootstrap-330 .btn-group .btn + .btn-group,
3815
- .factory-bootstrap-330 .btn-group .btn-group + .btn,
3816
- .factory-bootstrap-330 .btn-group .btn-group + .btn-group {
3817
- margin-left: -1px;
3818
- }
3819
-
3820
- .factory-bootstrap-330 .btn-toolbar:before,
3821
- .factory-bootstrap-330 .btn-toolbar:after {
3822
- display: table;
3823
- content: " ";
3824
- }
3825
-
3826
- .factory-bootstrap-330 .btn-toolbar:after {
3827
- clear: both;
3828
- }
3829
-
3830
- .factory-bootstrap-330 .btn-toolbar:before,
3831
- .factory-bootstrap-330 .btn-toolbar:after {
3832
- display: table;
3833
- content: " ";
3834
- }
3835
-
3836
- .factory-bootstrap-330 .btn-toolbar:after {
3837
- clear: both;
3838
- }
3839
-
3840
- .factory-bootstrap-330 .btn-toolbar .btn-group {
3841
- float: left;
3842
- }
3843
-
3844
- .factory-bootstrap-330 .btn-toolbar > .btn + .btn,
3845
- .factory-bootstrap-330 .btn-toolbar > .btn-group + .btn,
3846
- .factory-bootstrap-330 .btn-toolbar > .btn + .btn-group,
3847
- .factory-bootstrap-330 .btn-toolbar > .btn-group + .btn-group {
3848
- margin-left: 5px;
3849
- }
3850
-
3851
- .factory-bootstrap-330 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3852
- border-radius: 0;
3853
- }
3854
-
3855
- .factory-bootstrap-330 .btn-group > .btn:first-child {
3856
- margin-left: 0;
3857
- }
3858
-
3859
- .factory-bootstrap-330 .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3860
- border-top-right-radius: 0;
3861
- border-bottom-right-radius: 0;
3862
- }
3863
-
3864
- .factory-bootstrap-330 .btn-group > .btn:last-child:not(:first-child),
3865
- .factory-bootstrap-330 .btn-group > .dropdown-toggle:not(:first-child) {
3866
- border-bottom-left-radius: 0;
3867
- border-top-left-radius: 0;
3868
- }
3869
-
3870
- .factory-bootstrap-330 .btn-group > .btn-group {
3871
- float: left;
3872
- }
3873
-
3874
- .factory-bootstrap-330 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3875
- border-radius: 0;
3876
- }
3877
-
3878
- .factory-bootstrap-330 .btn-group > .btn-group:first-child > .btn:last-child,
3879
- .factory-bootstrap-330 .btn-group > .btn-group:first-child > .dropdown-toggle {
3880
- border-top-right-radius: 0;
3881
- border-bottom-right-radius: 0;
3882
- }
3883
-
3884
- .factory-bootstrap-330 .btn-group > .btn-group:last-child > .btn:first-child {
3885
- border-bottom-left-radius: 0;
3886
- border-top-left-radius: 0;
3887
- }
3888
-
3889
- .factory-bootstrap-330 .btn-group .dropdown-toggle:active,
3890
- .factory-bootstrap-330 .btn-group.open .dropdown-toggle {
3891
- outline: 0;
3892
- }
3893
-
3894
- .factory-bootstrap-330 .btn-group-xs > .btn {
3895
- padding: 1px 5px;
3896
- font-size: 12px;
3897
- line-height: 1.5;
3898
- border-radius: 3px;
3899
- }
3900
-
3901
- .factory-bootstrap-330 .btn-group-sm > .btn {
3902
- padding: 5px 10px;
3903
- font-size: 12px;
3904
- line-height: 1.5;
3905
- border-radius: 3px;
3906
- }
3907
-
3908
- .factory-bootstrap-330 .btn-group-lg > .btn {
3909
- padding: 10px 16px;
3910
- font-size: 18px;
3911
- line-height: 1.33;
3912
- border-radius: 6px;
3913
- }
3914
-
3915
- .factory-bootstrap-330 .btn-group > .btn + .dropdown-toggle {
3916
- padding-right: 8px;
3917
- padding-left: 8px;
3918
- }
3919
-
3920
- .factory-bootstrap-330 .btn-group > .btn-lg + .dropdown-toggle {
3921
- padding-right: 12px;
3922
- padding-left: 12px;
3923
- }
3924
-
3925
- .factory-bootstrap-330 .btn-group.open .dropdown-toggle {
3926
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3927
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3928
- }
3929
-
3930
- .factory-bootstrap-330 .btn-group.open .dropdown-toggle.btn-link {
3931
- -webkit-box-shadow: none;
3932
- box-shadow: none;
3933
- }
3934
-
3935
- .factory-bootstrap-330 .btn-group {
3936
- border: 4px solid #f9f9f9;
3937
- border-radius: 4px;
3938
- }
3939
-
3940
- .factory-bootstrap-330 .btn-group .btn.active.value {
3941
- text-shadow: none;
3942
- color: #fff;
3943
- background-color: #33aad5;
3944
- -webkit-box-shadow: inset 0 1px 1px #0074a2;
3945
- box-shadow: inset 0 1px 3px #0074a2;
3946
- border-top: 1px solid #0074a2;
3947
- border-bottom: 1px solid #0074a2;
3948
- border-left: 1px solid #0074a2;
3949
- }
3950
-
3951
- .factory-bootstrap-330 .btn .caret {
3952
- margin-left: 0;
3953
- }
3954
-
3955
- .factory-bootstrap-330 .btn-lg .caret {
3956
- border-width: 5px 5px 0;
3957
- border-bottom-width: 0;
3958
- }
3959
-
3960
- .factory-bootstrap-330 .dropup .btn-lg .caret {
3961
- border-width: 0 5px 5px;
3962
- }
3963
-
3964
- .factory-bootstrap-330 .btn-group-vertical > .btn,
3965
- .factory-bootstrap-330 .btn-group-vertical > .btn-group,
3966
- .factory-bootstrap-330 .btn-group-vertical > .btn-group > .btn {
3967
- display: block;
3968
- float: none;
3969
- width: 100%;
3970
- max-width: 100%;
3971
- }
3972
-
3973
- .factory-bootstrap-330 .btn-group-vertical > .btn-group:before,
3974
- .factory-bootstrap-330 .btn-group-vertical > .btn-group:after {
3975
- display: table;
3976
- content: " ";
3977
- }
3978
-
3979
- .factory-bootstrap-330 .btn-group-vertical > .btn-group:after {
3980
- clear: both;
3981
- }
3982
-
3983
- .factory-bootstrap-330 .btn-group-vertical > .btn-group:before,
3984
- .factory-bootstrap-330 .btn-group-vertical > .btn-group:after {
3985
- display: table;
3986
- content: " ";
3987
- }
3988
-
3989
- .factory-bootstrap-330 .btn-group-vertical > .btn-group:after {
3990
- clear: both;
3991
- }
3992
-
3993
- .factory-bootstrap-330 .btn-group-vertical > .btn-group > .btn {
3994
- float: none;
3995
- }
3996
-
3997
- .factory-bootstrap-330 .btn-group-vertical > .btn + .btn,
3998
- .factory-bootstrap-330 .btn-group-vertical > .btn + .btn-group,
3999
- .factory-bootstrap-330 .btn-group-vertical > .btn-group + .btn,
4000
- .factory-bootstrap-330 .btn-group-vertical > .btn-group + .btn-group {
4001
- margin-top: -1px;
4002
- margin-left: 0;
4003
- }
4004
-
4005
- .factory-bootstrap-330 .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
4006
- border-radius: 0;
4007
- }
4008
-
4009
- .factory-bootstrap-330 .btn-group-vertical > .btn:first-child:not(:last-child) {
4010
- border-top-right-radius: 4px;
4011
- border-bottom-right-radius: 0;
4012
- border-bottom-left-radius: 0;
4013
- }
4014
-
4015
- .factory-bootstrap-330 .btn-group-vertical > .btn:last-child:not(:first-child) {
4016
- border-top-right-radius: 0;
4017
- border-bottom-left-radius: 4px;
4018
- border-top-left-radius: 0;
4019
- }
4020
-
4021
- .factory-bootstrap-330 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
4022
- border-radius: 0;
4023
- }
4024
-
4025
- .factory-bootstrap-330 .btn-group-vertical > .btn-group:first-child > .btn:last-child,
4026
- .factory-bootstrap-330 .btn-group-vertical > .btn-group:first-child > .dropdown-toggle {
4027
- border-bottom-right-radius: 0;
4028
- border-bottom-left-radius: 0;
4029
- }
4030
-
4031
- .factory-bootstrap-330 .btn-group-vertical > .btn-group:last-child > .btn:first-child {
4032
- border-top-right-radius: 0;
4033
- border-top-left-radius: 0;
4034
- }
4035
-
4036
- .factory-bootstrap-330 .btn-group-justified {
4037
- display: table;
4038
- width: 100%;
4039
- border-collapse: separate;
4040
- table-layout: fixed;
4041
- }
4042
-
4043
- .factory-bootstrap-330 .btn-group-justified > .btn,
4044
- .factory-bootstrap-330 .btn-group-justified > .btn-group {
4045
- display: table-cell;
4046
- float: none;
4047
- width: 1%;
4048
- }
4049
-
4050
- .factory-bootstrap-330 .btn-group-justified > .btn-group .btn {
4051
- width: 100%;
4052
- }
4053
-
4054
- [data-toggle="buttons"] > .btn > input[type="radio"],
4055
- [data-toggle="buttons"] > .btn > input[type="checkbox"] {
4056
- display: none;
4057
- }
4058
-
4059
- .factory-bootstrap-330 .input-group {
4060
- position: relative;
4061
- display: table;
4062
- border-collapse: separate;
4063
- }
4064
-
4065
- .factory-bootstrap-330 .input-group[class*="col-"] {
4066
- float: none;
4067
- padding-right: 0;
4068
- padding-left: 0;
4069
- }
4070
-
4071
- .factory-bootstrap-330 .input-group .form-control {
4072
- width: 100%;
4073
- margin-bottom: 0;
4074
- }
4075
-
4076
- .factory-bootstrap-330 .input-group-lg > .form-control,
4077
- .factory-bootstrap-330 .input-group-lg > .input-group-addon,
4078
- .factory-bootstrap-330 .input-group-lg > .input-group-btn > .btn {
4079
- height: 46px;
4080
- padding: 10px 16px;
4081
- font-size: 18px;
4082
- line-height: 1.33;
4083
- border-radius: 6px;
4084
- }
4085
-
4086
- .factory-bootstrap-330 select.input-group-lg > .form-control,
4087
- .factory-bootstrap-330 select.input-group-lg > .input-group-addon,
4088
- .factory-bootstrap-330 select.input-group-lg > .input-group-btn > .btn {
4089
- height: 46px;
4090
- line-height: 46px;
4091
- }
4092
-
4093
- .factory-bootstrap-330 textarea.input-group-lg > .form-control,
4094
- .factory-bootstrap-330 textarea.input-group-lg > .input-group-addon,
4095
- .factory-bootstrap-330 textarea.input-group-lg > .input-group-btn > .btn {
4096
- height: auto;
4097
- }
4098
-
4099
- .factory-bootstrap-330 .input-group-sm > .form-control,
4100
- .factory-bootstrap-330 .input-group-sm > .input-group-addon,
4101
- .factory-bootstrap-330 .input-group-sm > .input-group-btn > .btn {
4102
- height: 30px;
4103
- padding: 5px 10px;
4104
- font-size: 12px;
4105
- line-height: 1.5;
4106
- border-radius: 3px;
4107
- }
4108
-
4109
- .factory-bootstrap-330 select.input-group-sm > .form-control,
4110
- .factory-bootstrap-330 select.input-group-sm > .input-group-addon,
4111
- .factory-bootstrap-330 select.input-group-sm > .input-group-btn > .btn {
4112
- height: 30px;
4113
- line-height: 30px;
4114
- }
4115
-
4116
- .factory-bootstrap-330 textarea.input-group-sm > .form-control,
4117
- .factory-bootstrap-330 textarea.input-group-sm > .input-group-addon,
4118
- .factory-bootstrap-330 textarea.input-group-sm > .input-group-btn > .btn {
4119
- height: auto;
4120
- }
4121
-
4122
- .factory-bootstrap-330 .input-group-addon,
4123
- .factory-bootstrap-330 .input-group-btn,
4124
- .factory-bootstrap-330 .input-group .form-control {
4125
- display: table-cell;
4126
- }
4127
-
4128
- .factory-bootstrap-330 .input-group-addon:not(:first-child):not(:last-child),
4129
- .factory-bootstrap-330 .input-group-btn:not(:first-child):not(:last-child),
4130
- .factory-bootstrap-330 .input-group .form-control:not(:first-child):not(:last-child) {
4131
- border-radius: 0;
4132
- }
4133
-
4134
- .factory-bootstrap-330 .input-group-addon,
4135
- .factory-bootstrap-330 .input-group-btn {
4136
- width: 1%;
4137
- white-space: nowrap;
4138
- vertical-align: middle;
4139
- }
4140
-
4141
- .factory-bootstrap-330 .input-group-addon {
4142
- padding: 6px 12px;
4143
- font-size: 14px;
4144
- font-weight: normal;
4145
- line-height: 1;
4146
- color: #555555;
4147
- text-align: center;
4148
- background-color: #eeeeee;
4149
- border: 1px solid #cccccc;
4150
- border-radius: 4px;
4151
- }
4152
-
4153
- .factory-bootstrap-330 .input-group-addon.input-sm {
4154
- padding: 5px 10px;
4155
- font-size: 12px;
4156
- border-radius: 3px;
4157
- }
4158
-
4159
- .factory-bootstrap-330 .input-group-addon.input-lg {
4160
- padding: 10px 16px;
4161
- font-size: 18px;
4162
- border-radius: 6px;
4163
- }
4164
-
4165
- .factory-bootstrap-330 .input-group-addon input[type="radio"],
4166
- .factory-bootstrap-330 .input-group-addon input[type="checkbox"] {
4167
- margin-top: 0;
4168
- }
4169
-
4170
- .factory-bootstrap-330 .input-group .form-control:first-child,
4171
- .factory-bootstrap-330 .input-group-addon:first-child,
4172
- .factory-bootstrap-330 .input-group-btn:first-child > .btn,
4173
- .factory-bootstrap-330 .input-group-btn:first-child > .dropdown-toggle,
4174
- .factory-bootstrap-330 .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
4175
- border-top-right-radius: 0;
4176
- border-bottom-right-radius: 0;
4177
- }
4178
-
4179
- .factory-bootstrap-330 .input-group-addon:first-child {
4180
- border-right: 0;
4181
- }
4182
-
4183
- .factory-bootstrap-330 .input-group .form-control:last-child,
4184
- .factory-bootstrap-330 .input-group-addon:last-child,
4185
- .factory-bootstrap-330 .input-group-btn:last-child > .btn,
4186
- .factory-bootstrap-330 .input-group-btn:last-child > .dropdown-toggle,
4187
- .factory-bootstrap-330 .input-group-btn:first-child > .btn:not(:first-child) {
4188
- border-bottom-left-radius: 0;
4189
- border-top-left-radius: 0;
4190
- }
4191
-
4192
- .factory-bootstrap-330 .input-group-addon:last-child {
4193
- border-left: 0;
4194
- }
4195
-
4196
- .factory-bootstrap-330 .input-group-btn {
4197
- position: relative;
4198
- white-space: nowrap;
4199
- }
4200
-
4201
- .factory-bootstrap-330 .input-group-btn:first-child > .btn {
4202
- margin-right: -1px;
4203
- }
4204
-
4205
- .factory-bootstrap-330 .input-group-btn:last-child > .btn {
4206
- margin-left: -1px;
4207
- }
4208
-
4209
- .factory-bootstrap-330 .input-group-btn > .btn {
4210
- position: relative;
4211
- }
4212
-
4213
- .factory-bootstrap-330 .input-group-btn > .btn + .btn {
4214
- margin-left: -4px;
4215
- }
4216
-
4217
- .factory-bootstrap-330 .input-group-btn > .btn:hover,
4218
- .factory-bootstrap-330 .input-group-btn > .btn:active {
4219
- z-index: 2;
4220
- }
4221
-
4222
- .factory-bootstrap-330 .nav {
4223
- padding-left: 0;
4224
- margin-bottom: 0;
4225
- list-style: none;
4226
- }
4227
-
4228
- .factory-bootstrap-330 .nav:before,
4229
- .factory-bootstrap-330 .nav:after {
4230
- display: table;
4231
- content: " ";
4232
- }
4233
-
4234
- .factory-bootstrap-330 .nav:after {
4235
- clear: both;
4236
- }
4237
-
4238
- .factory-bootstrap-330 .nav:before,
4239
- .factory-bootstrap-330 .nav:after {
4240
- display: table;
4241
- content: " ";
4242
- }
4243
-
4244
- .factory-bootstrap-330 .nav:after {
4245
- clear: both;
4246
- }
4247
-
4248
- .factory-bootstrap-330 .nav > li {
4249
- position: relative;
4250
- display: block;
4251
- }
4252
-
4253
- .factory-bootstrap-330 .nav > li > a {
4254
- position: relative;
4255
- display: block;
4256
- padding: 10px 15px;
4257
- }
4258
-
4259
- .factory-bootstrap-330 .nav > li > a:hover,
4260
- .factory-bootstrap-330 .nav > li > a:focus {
4261
- text-decoration: none;
4262
- background-color: #eeeeee;
4263
- }
4264
-
4265
- .factory-bootstrap-330 .nav > li.disabled > a {
4266
- color: #999999;
4267
- }
4268
-
4269
- .factory-bootstrap-330 .nav > li.disabled > a:hover,
4270
- .factory-bootstrap-330 .nav > li.disabled > a:focus {
4271
- color: #999999;
4272
- text-decoration: none;
4273
- cursor: not-allowed;
4274
- background-color: transparent;
4275
- }
4276
-
4277
- .factory-bootstrap-330 .nav .open > a,
4278
- .factory-bootstrap-330 .nav .open > a:hover,
4279
- .factory-bootstrap-330 .nav .open > a:focus {
4280
- background-color: #eeeeee;
4281
- border-color: #428bca;
4282
- }
4283
-
4284
- .factory-bootstrap-330 .nav .nav-divider {
4285
- height: 1px;
4286
- margin: 9px 0;
4287
- overflow: hidden;
4288
- background-color: #e5e5e5;
4289
- }
4290
-
4291
- .factory-bootstrap-330 .nav > li > a > img {
4292
- max-width: none;
4293
- }
4294
-
4295
- .factory-bootstrap-330 .nav-tabs {
4296
- border-bottom: 1px solid #dddddd;
4297
- }
4298
-
4299
- .factory-bootstrap-330 .nav-tabs > li {
4300
- float: left;
4301
- margin-bottom: -1px;
4302
- }
4303
-
4304
- .factory-bootstrap-330 .nav-tabs > li > a {
4305
- margin-right: 2px;
4306
- line-height: 1.428571429;
4307
- border: 1px solid transparent;
4308
- border-radius: 4px 4px 0 0;
4309
- }
4310
-
4311
- .factory-bootstrap-330 .nav-tabs > li > a:hover {
4312
- border-color: #eeeeee #eeeeee #dddddd;
4313
- }
4314
-
4315
- .factory-bootstrap-330 .nav-tabs > li.active > a,
4316
- .factory-bootstrap-330 .nav-tabs > li.active > a:hover,
4317
- .factory-bootstrap-330 .nav-tabs > li.active > a:focus {
4318
- color: #555555;
4319
- cursor: default;
4320
- background-color: #ffffff;
4321
- border: 1px solid #dddddd;
4322
- border-bottom-color: transparent;
4323
- }
4324
-
4325
- .factory-bootstrap-330 .nav-tabs.nav-justified {
4326
- width: 100%;
4327
- border-bottom: 0;
4328
- }
4329
-
4330
- .factory-bootstrap-330 .nav-tabs.nav-justified > li {
4331
- float: none;
4332
- }
4333
-
4334
- .factory-bootstrap-330 .nav-tabs.nav-justified > li > a {
4335
- margin-bottom: 5px;
4336
- text-align: center;
4337
- }
4338
-
4339
- .factory-bootstrap-330 .nav-tabs.nav-justified > .dropdown .dropdown-menu {
4340
- top: auto;
4341
- left: auto;
4342
- }
4343
-
4344
- @media (min-width: 768px) {
4345
- .nav-tabs.nav-justified > li {
4346
- display: table-cell;
4347
- width: 1%;
4348
- }
4349
-
4350
- .nav-tabs.nav-justified > li > a {
4351
- margin-bottom: 0;
4352
- }
4353
- }
4354
-
4355
- .factory-bootstrap-330 .nav-tabs.nav-justified > li > a {
4356
- margin-right: 0;
4357
- border-radius: 4px;
4358
- }
4359
-
4360
- .factory-bootstrap-330 .nav-tabs.nav-justified > .active > a,
4361
- .factory-bootstrap-330 .nav-tabs.nav-justified > .active > a:hover,
4362
- .factory-bootstrap-330 .nav-tabs.nav-justified > .active > a:focus {
4363
- border: 1px solid #dddddd;
4364
- }
4365
-
4366
- @media (min-width: 768px) {
4367
- .nav-tabs.nav-justified > li > a {
4368
- border-bottom: 1px solid #dddddd;
4369
- border-radius: 4px 4px 0 0;
4370
- }
4371
-
4372
- .nav-tabs.nav-justified > .active > a,
4373
- .nav-tabs.nav-justified > .active > a:hover,
4374
- .nav-tabs.nav-justified > .active > a:focus {
4375
- border-bottom-color: #ffffff;
4376
- }
4377
- }
4378
-
4379
- .factory-bootstrap-330 .nav-pills > li {
4380
- float: left;
4381
- }
4382
-
4383
- .factory-bootstrap-330 .nav-pills > li > a {
4384
- border-radius: 4px;
4385
- }
4386
-
4387
- .factory-bootstrap-330 .nav-pills > li + li {
4388
- margin-left: 2px;
4389
- }
4390
-
4391
- .factory-bootstrap-330 .nav-pills > li.active > a,
4392
- .factory-bootstrap-330 .nav-pills > li.active > a:hover,
4393
- .factory-bootstrap-330 .nav-pills > li.active > a:focus {
4394
- color: #ffffff;
4395
- background-color: #428bca;
4396
- }
4397
-
4398
- .factory-bootstrap-330 .nav-stacked > li {
4399
- float: none;
4400
- }
4401
-
4402
- .factory-bootstrap-330 .nav-stacked > li + li {
4403
- margin-top: 2px;
4404
- margin-left: 0;
4405
- }
4406
-
4407
- .factory-bootstrap-330 .nav-justified {
4408
- width: 100%;
4409
- }
4410
-
4411
- .factory-bootstrap-330 .nav-justified > li {
4412
- float: none;
4413
- }
4414
-
4415
- .factory-bootstrap-330 .nav-justified > li > a {
4416
- margin-bottom: 5px;
4417
- text-align: center;
4418
- }
4419
-
4420
- .factory-bootstrap-330 .nav-justified > .dropdown .dropdown-menu {
4421
- top: auto;
4422
- left: auto;
4423
- }
4424
-
4425
- @media (min-width: 768px) {
4426
- .nav-justified > li {
4427
- display: table-cell;
4428
- width: 1%;
4429
- }
4430
-
4431
- .nav-justified > li > a {
4432
- margin-bottom: 0;
4433
- }
4434
- }
4435
-
4436
- .factory-bootstrap-330 .nav-tabs-justified {
4437
- border-bottom: 0;
4438
- }
4439
-
4440
- .factory-bootstrap-330 .nav-tabs-justified > li > a {
4441
- margin-right: 0;
4442
- border-radius: 4px;
4443
- }
4444
-
4445
- .factory-bootstrap-330 .nav-tabs-justified > .active > a,
4446
- .factory-bootstrap-330 .nav-tabs-justified > .active > a:hover,
4447
- .factory-bootstrap-330 .nav-tabs-justified > .active > a:focus {
4448
- border: 1px solid #dddddd;
4449
- }
4450
-
4451
- @media (min-width: 768px) {
4452
- .nav-tabs-justified > li > a {
4453
- border-bottom: 1px solid #dddddd;
4454
- border-radius: 4px 4px 0 0;
4455
- }
4456
-
4457
- .nav-tabs-justified > .active > a,
4458
- .nav-tabs-justified > .active > a:hover,
4459
- .nav-tabs-justified > .active > a:focus {
4460
- border-bottom-color: #ffffff;
4461
- }
4462
- }
4463
-
4464
- .factory-bootstrap-330 .tab-content > .tab-pane {
4465
- display: none;
4466
- }
4467
-
4468
- .factory-bootstrap-330 .tab-content > .active {
4469
- display: block;
4470
- }
4471
-
4472
- .factory-bootstrap-330 .nav-tabs .dropdown-menu {
4473
- margin-top: -1px;
4474
- border-top-right-radius: 0;
4475
- border-top-left-radius: 0;
4476
- }
4477
-
4478
- .factory-bootstrap-330 .navbar {
4479
- position: relative;
4480
- min-height: 50px;
4481
- margin-bottom: 20px;
4482
- border: 1px solid transparent;
4483
- }
4484
-
4485
- .factory-bootstrap-330 .navbar:before,
4486
- .factory-bootstrap-330 .navbar:after {
4487
- display: table;
4488
- content: " ";
4489
- }
4490
-
4491
- .factory-bootstrap-330 .navbar:after {
4492
- clear: both;
4493
- }
4494
-
4495
- .factory-bootstrap-330 .navbar:before,
4496
- .factory-bootstrap-330 .navbar:after {
4497
- display: table;
4498
- content: " ";
4499
- }
4500
-
4501
- .factory-bootstrap-330 .navbar:after {
4502
- clear: both;
4503
- }
4504
-
4505
- @media (min-width: 768px) {
4506
- .navbar {
4507
- border-radius: 4px;
4508
- }
4509
- }
4510
-
4511
- .factory-bootstrap-330 .navbar-header:before,
4512
- .factory-bootstrap-330 .navbar-header:after {
4513
- display: table;
4514
- content: " ";
4515
- }
4516
-
4517
- .factory-bootstrap-330 .navbar-header:after {
4518
- clear: both;
4519
- }
4520
-
4521
- .factory-bootstrap-330 .navbar-header:before,
4522
- .factory-bootstrap-330 .navbar-header:after {
4523
- display: table;
4524
- content: " ";
4525
- }
4526
-
4527
- .factory-bootstrap-330 .navbar-header:after {
4528
- clear: both;
4529
- }
4530
-
4531
- @media (min-width: 768px) {
4532
- .navbar-header {
4533
- float: left;
4534
- }
4535
- }
4536
-
4537
- .factory-bootstrap-330 .navbar-collapse {
4538
- max-height: 340px;
4539
- padding-right: 15px;
4540
- padding-left: 15px;
4541
- overflow-x: visible;
4542
- border-top: 1px solid transparent;
4543
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
4544
- -webkit-overflow-scrolling: touch;
4545
- }
4546
-
4547
- .factory-bootstrap-330 .navbar-collapse:before,
4548
- .factory-bootstrap-330 .navbar-collapse:after {
4549
- display: table;
4550
- content: " ";
4551
- }
4552
-
4553
- .factory-bootstrap-330 .navbar-collapse:after {
4554
- clear: both;
4555
- }
4556
-
4557
- .factory-bootstrap-330 .navbar-collapse:before,
4558
- .factory-bootstrap-330 .navbar-collapse:after {
4559
- display: table;
4560
- content: " ";
4561
- }
4562
-
4563
- .factory-bootstrap-330 .navbar-collapse:after {
4564
- clear: both;
4565
- }
4566
-
4567
- .factory-bootstrap-330 .navbar-collapse.in {
4568
- overflow-y: auto;
4569
- }
4570
-
4571
- @media (min-width: 768px) {
4572
- .navbar-collapse {
4573
- width: auto;
4574
- border-top: 0;
4575
- box-shadow: none;
4576
- }
4577
-
4578
- .navbar-collapse.collapse {
4579
- display: block !important;
4580
- height: auto !important;
4581
- padding-bottom: 0;
4582
- overflow: visible !important;
4583
- }
4584
-
4585
- .navbar-collapse.in {
4586
- overflow-y: visible;
4587
- }
4588
-
4589
- .navbar-fixed-top .navbar-collapse,
4590
- .navbar-static-top .navbar-collapse,
4591
- .navbar-fixed-bottom .navbar-collapse {
4592
- padding-right: 0;
4593
- padding-left: 0;
4594
- }
4595
- }
4596
-
4597
- .factory-bootstrap-330 .container > .navbar-header,
4598
- .factory-bootstrap-330 .container > .navbar-collapse {
4599
- margin-right: -15px;
4600
- margin-left: -15px;
4601
- }
4602
-
4603
- @media (min-width: 768px) {
4604
- .container > .navbar-header,
4605
- .container > .navbar-collapse {
4606
- margin-right: 0;
4607
- margin-left: 0;
4608
- }
4609
- }
4610
-
4611
- .factory-bootstrap-330 .navbar-static-top {
4612
- z-index: 1000;
4613
- border-width: 0 0 1px;
4614
- }
4615
-
4616
- @media (min-width: 768px) {
4617
- .navbar-static-top {
4618
- border-radius: 0;
4619
- }
4620
- }
4621
-
4622
- .factory-bootstrap-330 .navbar-fixed-top,
4623
- .factory-bootstrap-330 .navbar-fixed-bottom {
4624
- position: fixed;
4625
- right: 0;
4626
- left: 0;
4627
- z-index: 1030;
4628
- }
4629
-
4630
- @media (min-width: 768px) {
4631
- .navbar-fixed-top,
4632
- .navbar-fixed-bottom {
4633
- border-radius: 0;
4634
- }
4635
- }
4636
-
4637
- .factory-bootstrap-330 .navbar-fixed-top {
4638
- top: 0;
4639
- border-width: 0 0 1px;
4640
- }
4641
-
4642
- .factory-bootstrap-330 .navbar-fixed-bottom {
4643
- bottom: 0;
4644
- margin-bottom: 0;
4645
- border-width: 1px 0 0;
4646
- }
4647
-
4648
- .factory-bootstrap-330 .navbar-brand {
4649
- float: left;
4650
- padding: 15px 15px;
4651
- font-size: 18px;
4652
- line-height: 20px;
4653
- }
4654
-
4655
- .factory-bootstrap-330 .navbar-brand:hover,
4656
- .factory-bootstrap-330 .navbar-brand:focus {
4657
- text-decoration: none;
4658
- }
4659
-
4660
- @media (min-width: 768px) {
4661
- .navbar > .container .navbar-brand {
4662
- margin-left: -15px;
4663
- }
4664
- }
4665
-
4666
- .factory-bootstrap-330 .navbar-toggle {
4667
- position: relative;
4668
- float: right;
4669
- padding: 9px 10px;
4670
- margin-top: 8px;
4671
- margin-right: 15px;
4672
- margin-bottom: 8px;
4673
- background-color: transparent;
4674
- background-image: none;
4675
- border: 1px solid transparent;
4676
- border-radius: 4px;
4677
- }
4678
-
4679
- .factory-bootstrap-330 .navbar-toggle .icon-bar {
4680
- display: block;
4681
- width: 22px;
4682
- height: 2px;
4683
- border-radius: 1px;
4684
- }
4685
-
4686
- .factory-bootstrap-330 .navbar-toggle .icon-bar + .icon-bar {
4687
- margin-top: 4px;
4688
- }
4689
-
4690
- @media (min-width: 768px) {
4691
- .navbar-toggle {
4692
- display: none;
4693
- }
4694
- }
4695
-
4696
- .factory-bootstrap-330 .navbar-nav {
4697
- margin: 7.5px -15px;
4698
- }
4699
-
4700
- .factory-bootstrap-330 .navbar-nav > li > a {
4701
- padding-top: 10px;
4702
- padding-bottom: 10px;
4703
- line-height: 20px;
4704
- }
4705
-
4706
- @media (max-width: 767px) {
4707
- .navbar-nav .open .dropdown-menu {
4708
- position: static;
4709
- float: none;
4710
- width: auto;
4711
- margin-top: 0;
4712
- background-color: transparent;
4713
- border: 0;
4714
- box-shadow: none;
4715
- }
4716
-
4717
- .navbar-nav .open .dropdown-menu > li > a,
4718
- .navbar-nav .open .dropdown-menu .dropdown-header {
4719
- padding: 5px 15px 5px 25px;
4720
- }
4721
-
4722
- .navbar-nav .open .dropdown-menu > li > a {
4723
- line-height: 20px;
4724
- }
4725
-
4726
- .navbar-nav .open .dropdown-menu > li > a:hover,
4727
- .navbar-nav .open .dropdown-menu > li > a:focus {
4728
- background-image: none;
4729
- }
4730
- }
4731
-
4732
- @media (min-width: 768px) {
4733
- .navbar-nav {
4734
- float: left;
4735
- margin: 0;
4736
- }
4737
-
4738
- .navbar-nav > li {
4739
- float: left;
4740
- }
4741
-
4742
- .navbar-nav > li > a {
4743
- padding-top: 15px;
4744
- padding-bottom: 15px;
4745
- }
4746
-
4747
- .navbar-nav.navbar-right:last-child {
4748
- margin-right: -15px;
4749
- }
4750
- }
4751
-
4752
- @media (min-width: 768px) {
4753
- .navbar-left {
4754
- float: left !important;
4755
- }
4756
-
4757
- .navbar-right {
4758
- float: right !important;
4759
- }
4760
- }
4761
-
4762
- .factory-bootstrap-330 .navbar-form {
4763
- padding: 10px 15px;
4764
- margin-top: 8px;
4765
- margin-right: -15px;
4766
- margin-bottom: 8px;
4767
- margin-left: -15px;
4768
- border-top: 1px solid transparent;
4769
- border-bottom: 1px solid transparent;
4770
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4771
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4772
- }
4773
-
4774
- @media (min-width: 768px) {
4775
- .navbar-form .form-group {
4776
- display: inline-block;
4777
- margin-bottom: 0;
4778
- vertical-align: middle;
4779
- }
4780
-
4781
- .navbar-form .form-control {
4782
- display: inline-block;
4783
- }
4784
-
4785
- .navbar-form select.form-control {
4786
- width: auto;
4787
- }
4788
-
4789
- .navbar-form .radio,
4790
- .navbar-form .checkbox {
4791
- display: inline-block;
4792
- padding-left: 0;
4793
- margin-top: 0;
4794
- margin-bottom: 0;
4795
- }
4796
-
4797
- .navbar-form .radio input[type="radio"],
4798
- .navbar-form .checkbox input[type="checkbox"] {
4799
- float: none;
4800
- margin-left: 0;
4801
- }
4802
- }
4803
-
4804
- @media (max-width: 767px) {
4805
- .navbar-form .form-group {
4806
- margin-bottom: 5px;
4807
- }
4808
- }
4809
-
4810
- @media (min-width: 768px) {
4811
- .navbar-form {
4812
- width: auto;
4813
- padding-top: 0;
4814
- padding-bottom: 0;
4815
- margin-right: 0;
4816
- margin-left: 0;
4817
- border: 0;
4818
- -webkit-box-shadow: none;
4819
- box-shadow: none;
4820
- }
4821
-
4822
- .navbar-form.navbar-right:last-child {
4823
- margin-right: -15px;
4824
- }
4825
- }
4826
-
4827
- .factory-bootstrap-330 .navbar-nav > li > .dropdown-menu {
4828
- margin-top: 0;
4829
- border-top-right-radius: 0;
4830
- border-top-left-radius: 0;
4831
- }
4832
-
4833
- .factory-bootstrap-330 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4834
- border-bottom-right-radius: 0;
4835
- border-bottom-left-radius: 0;
4836
- }
4837
-
4838
- .factory-bootstrap-330 .navbar-nav.pull-right > li > .dropdown-menu,
4839
- .factory-bootstrap-330 .navbar-nav > li > .dropdown-menu.pull-right {
4840
- right: 0;
4841
- left: auto;
4842
- }
4843
-
4844
- .factory-bootstrap-330 .navbar-btn {
4845
- margin-top: 8px;
4846
- margin-bottom: 8px;
4847
- }
4848
-
4849
- .factory-bootstrap-330 .navbar-btn.btn-sm {
4850
- margin-top: 10px;
4851
- margin-bottom: 10px;
4852
- }
4853
-
4854
- .factory-bootstrap-330 .navbar-btn.btn-xs {
4855
- margin-top: 14px;
4856
- margin-bottom: 14px;
4857
- }
4858
-
4859
- .factory-bootstrap-330 .navbar-text {
4860
- margin-top: 15px;
4861
- margin-bottom: 15px;
4862
- }
4863
-
4864
- @media (min-width: 768px) {
4865
- .navbar-text {
4866
- float: left;
4867
- margin-right: 15px;
4868
- margin-left: 15px;
4869
- }
4870
-
4871
- .navbar-text.navbar-right:last-child {
4872
- margin-right: 0;
4873
- }
4874
- }
4875
-
4876
- .factory-bootstrap-330 .navbar-default {
4877
- background-color: #f8f8f8;
4878
- border-color: #e7e7e7;
4879
- }
4880
-
4881
- .factory-bootstrap-330 .navbar-default .navbar-brand {
4882
- color: #777777;
4883
- }
4884
-
4885
- .factory-bootstrap-330 .navbar-default .navbar-brand:hover,
4886
- .factory-bootstrap-330 .navbar-default .navbar-brand:focus {
4887
- color: #5e5e5e;
4888
- background-color: transparent;
4889
- }
4890
-
4891
- .factory-bootstrap-330 .navbar-default .navbar-text {
4892
- color: #777777;
4893
- }
4894
-
4895
- .factory-bootstrap-330 .navbar-default .navbar-nav > li > a {
4896
- color: #777777;
4897
- }
4898
-
4899
- .factory-bootstrap-330 .navbar-default .navbar-nav > li > a:hover,
4900
- .factory-bootstrap-330 .navbar-default .navbar-nav > li > a:focus {
4901
- color: #333333;
4902
- background-color: transparent;
4903
- }
4904
-
4905
- .factory-bootstrap-330 .navbar-default .navbar-nav > .active > a,
4906
- .factory-bootstrap-330 .navbar-default .navbar-nav > .active > a:hover,
4907
- .factory-bootstrap-330 .navbar-default .navbar-nav > .active > a:focus {
4908
- color: #555555;
4909
- background-color: #e7e7e7;
4910
- }
4911
-
4912
- .factory-bootstrap-330 .navbar-default .navbar-nav > .disabled > a,
4913
- .factory-bootstrap-330 .navbar-default .navbar-nav > .disabled > a:hover,
4914
- .factory-bootstrap-330 .navbar-default .navbar-nav > .disabled > a:focus {
4915
- color: #cccccc;
4916
- background-color: transparent;
4917
- }
4918
-
4919
- .factory-bootstrap-330 .navbar-default .navbar-toggle {
4920
- border-color: #dddddd;
4921
- }
4922
-
4923
- .factory-bootstrap-330 .navbar-default .navbar-toggle:hover,
4924
- .factory-bootstrap-330 .navbar-default .navbar-toggle:focus {
4925
- background-color: #dddddd;
4926
- }
4927
-
4928
- .factory-bootstrap-330 .navbar-default .navbar-toggle .icon-bar {
4929
- background-color: #cccccc;
4930
- }
4931
-
4932
- .factory-bootstrap-330 .navbar-default .navbar-collapse,
4933
- .factory-bootstrap-330 .navbar-default .navbar-form {
4934
- border-color: #e7e7e7;
4935
- }
4936
-
4937
- .factory-bootstrap-330 .navbar-default .navbar-nav > .open > a,
4938
- .factory-bootstrap-330 .navbar-default .navbar-nav > .open > a:hover,
4939
- .factory-bootstrap-330 .navbar-default .navbar-nav > .open > a:focus {
4940
- color: #555555;
4941
- background-color: #e7e7e7;
4942
- }
4943
-
4944
- @media (max-width: 767px) {
4945
- .navbar-default .navbar-nav .open .dropdown-menu > li > a {
4946
- color: #777777;
4947
- }
4948
-
4949
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
4950
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
4951
- color: #333333;
4952
- background-color: transparent;
4953
- }
4954
-
4955
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4956
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4957
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4958
- color: #555555;
4959
- background-color: #e7e7e7;
4960
- }
4961
-
4962
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4963
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4964
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4965
- color: #cccccc;
4966
- background-color: transparent;
4967
- }
4968
- }
4969
-
4970
- .factory-bootstrap-330 .navbar-default .navbar-link {
4971
- color: #777777;
4972
- }
4973
-
4974
- .factory-bootstrap-330 .navbar-default .navbar-link:hover {
4975
- color: #333333;
4976
- }
4977
-
4978
- .factory-bootstrap-330 .navbar-inverse {
4979
- background-color: #222222;
4980
- border-color: #080808;
4981
- }
4982
-
4983
- .factory-bootstrap-330 .navbar-inverse .navbar-brand {
4984
- color: #999999;
4985
- }
4986
-
4987
- .factory-bootstrap-330 .navbar-inverse .navbar-brand:hover,
4988
- .factory-bootstrap-330 .navbar-inverse .navbar-brand:focus {
4989
- color: #ffffff;
4990
- background-color: transparent;
4991
- }
4992
-
4993
- .factory-bootstrap-330 .navbar-inverse .navbar-text {
4994
- color: #999999;
4995
- }
4996
-
4997
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > li > a {
4998
- color: #999999;
4999
- }
5000
-
5001
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > li > a:hover,
5002
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > li > a:focus {
5003
- color: #ffffff;
5004
- background-color: transparent;
5005
- }
5006
-
5007
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > .active > a,
5008
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > .active > a:hover,
5009
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > .active > a:focus {
5010
- color: #ffffff;
5011
- background-color: #080808;
5012
- }
5013
-
5014
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > .disabled > a,
5015
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > .disabled > a:hover,
5016
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > .disabled > a:focus {
5017
- color: #444444;
5018
- background-color: transparent;
5019
- }
5020
-
5021
- .factory-bootstrap-330 .navbar-inverse .navbar-toggle {
5022
- border-color: #333333;
5023
- }
5024
-
5025
- .factory-bootstrap-330 .navbar-inverse .navbar-toggle:hover,
5026
- .factory-bootstrap-330 .navbar-inverse .navbar-toggle:focus {
5027
- background-color: #333333;
5028
- }
5029
-
5030
- .factory-bootstrap-330 .navbar-inverse .navbar-toggle .icon-bar {
5031
- background-color: #ffffff;
5032
- }
5033
-
5034
- .factory-bootstrap-330 .navbar-inverse .navbar-collapse,
5035
- .factory-bootstrap-330 .navbar-inverse .navbar-form {
5036
- border-color: #101010;
5037
- }
5038
-
5039
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > .open > a,
5040
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > .open > a:hover,
5041
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > .open > a:focus {
5042
- color: #ffffff;
5043
- background-color: #080808;
5044
- }
5045
-
5046
- @media (max-width: 767px) {
5047
- .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
5048
- border-color: #080808;
5049
- }
5050
-
5051
- .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
5052
- background-color: #080808;
5053
- }
5054
-
5055
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
5056
- color: #999999;
5057
- }
5058
-
5059
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
5060
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
5061
- color: #ffffff;
5062
- background-color: transparent;
5063
- }
5064
-
5065
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
5066
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
5067
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
5068
- color: #ffffff;
5069
- background-color: #080808;
5070
- }
5071
-
5072
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
5073
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
5074
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
5075
- color: #444444;
5076
- background-color: transparent;
5077
- }
5078
- }
5079
-
5080
- .factory-bootstrap-330 .navbar-inverse .navbar-link {
5081
- color: #999999;
5082
- }
5083
-
5084
- .factory-bootstrap-330 .navbar-inverse .navbar-link:hover {
5085
- color: #ffffff;
5086
- }
5087
-
5088
- .factory-bootstrap-330 .breadcrumb {
5089
- padding: 8px 15px;
5090
- margin-bottom: 20px;
5091
- list-style: none;
5092
- background-color: #f5f5f5;
5093
- border-radius: 4px;
5094
- }
5095
-
5096
- .factory-bootstrap-330 .breadcrumb > li {
5097
- display: inline-block;
5098
- }
5099
-
5100
- .factory-bootstrap-330 .breadcrumb > li + li:before {
5101
- padding: 0 5px;
5102
- color: #cccccc;
5103
- content: "/\00a0";
5104
- }
5105
-
5106
- .factory-bootstrap-330 .breadcrumb > .active {
5107
- color: #999999;
5108
- }
5109
-
5110
- .factory-bootstrap-330 .pagination {
5111
- display: inline-block;
5112
- padding-left: 0;
5113
- margin: 20px 0;
5114
- border-radius: 4px;
5115
- }
5116
-
5117
- .factory-bootstrap-330 .pagination > li {
5118
- display: inline;
5119
- }
5120
-
5121
- .factory-bootstrap-330 .pagination > li > a,
5122
- .factory-bootstrap-330 .pagination > li > span {
5123
- position: relative;
5124
- float: left;
5125
- padding: 6px 12px;
5126
- margin-left: -1px;
5127
- line-height: 1.428571429;
5128
- text-decoration: none;
5129
- background-color: #ffffff;
5130
- border: 1px solid #dddddd;
5131
- }
5132
-
5133
- .factory-bootstrap-330 .pagination > li:first-child > a,
5134
- .factory-bootstrap-330 .pagination > li:first-child > span {
5135
- margin-left: 0;
5136
- border-bottom-left-radius: 4px;
5137
- border-top-left-radius: 4px;
5138
- }
5139
-
5140
- .factory-bootstrap-330 .pagination > li:last-child > a,
5141
- .factory-bootstrap-330 .pagination > li:last-child > span {
5142
- border-top-right-radius: 4px;
5143
- border-bottom-right-radius: 4px;
5144
- }
5145
-
5146
- .factory-bootstrap-330 .pagination > li > a:hover,
5147
- .factory-bootstrap-330 .pagination > li > span:hover,
5148
- .factory-bootstrap-330 .pagination > li > a:focus,
5149
- .factory-bootstrap-330 .pagination > li > span:focus {
5150
- background-color: #eeeeee;
5151
- }
5152
-
5153
- .factory-bootstrap-330 .pagination > .active > a,
5154
- .factory-bootstrap-330 .pagination > .active > span,
5155
- .factory-bootstrap-330 .pagination > .active > a:hover,
5156
- .factory-bootstrap-330 .pagination > .active > span:hover,
5157
- .factory-bootstrap-330 .pagination > .active > a:focus,
5158
- .factory-bootstrap-330 .pagination > .active > span:focus {
5159
- z-index: 2;
5160
- color: #ffffff;
5161
- cursor: default;
5162
- background-color: #1e8cbe;
5163
- border-color: #0074a2;
5164
- }
5165
-
5166
- .factory-bootstrap-330 .pagination > .disabled > span,
5167
- .factory-bootstrap-330 .pagination > .disabled > span:hover,
5168
- .factory-bootstrap-330 .pagination > .disabled > span:focus,
5169
- .factory-bootstrap-330 .pagination > .disabled > a,
5170
- .factory-bootstrap-330 .pagination > .disabled > a:hover,
5171
- .factory-bootstrap-330 .pagination > .disabled > a:focus {
5172
- color: #999999;
5173
- cursor: not-allowed;
5174
- background-color: #ffffff;
5175
- border-color: #dddddd;
5176
- }
5177
-
5178
- .factory-bootstrap-330 .pagination-lg > li > a,
5179
- .factory-bootstrap-330 .pagination-lg > li > span {
5180
- padding: 10px 16px;
5181
- font-size: 18px;
5182
- }
5183
-
5184
- .factory-bootstrap-330 .pagination-lg > li:first-child > a,
5185
- .factory-bootstrap-330 .pagination-lg > li:first-child > span {
5186
- border-bottom-left-radius: 6px;
5187
- border-top-left-radius: 6px;
5188
- }
5189
-
5190
- .factory-bootstrap-330 .pagination-lg > li:last-child > a,
5191
- .factory-bootstrap-330 .pagination-lg > li:last-child > span {
5192
- border-top-right-radius: 6px;
5193
- border-bottom-right-radius: 6px;
5194
- }
5195
-
5196
- .factory-bootstrap-330 .pagination-sm > li > a,
5197
- .factory-bootstrap-330 .pagination-sm > li > span {
5198
- padding: 5px 10px;
5199
- font-size: 12px;
5200
- }
5201
-
5202
- .factory-bootstrap-330 .pagination-sm > li:first-child > a,
5203
- .factory-bootstrap-330 .pagination-sm > li:first-child > span {
5204
- border-bottom-left-radius: 3px;
5205
- border-top-left-radius: 3px;
5206
- }
5207
-
5208
- .factory-bootstrap-330 .pagination-sm > li:last-child > a,
5209
- .factory-bootstrap-330 .pagination-sm > li:last-child > span {
5210
- border-top-right-radius: 3px;
5211
- border-bottom-right-radius: 3px;
5212
- }
5213
-
5214
- .factory-bootstrap-330 .pager {
5215
- padding-left: 0;
5216
- margin: 20px 0;
5217
- text-align: center;
5218
- list-style: none;
5219
- }
5220
-
5221
- .factory-bootstrap-330 .pager:before,
5222
- .factory-bootstrap-330 .pager:after {
5223
- display: table;
5224
- content: " ";
5225
- }
5226
-
5227
- .factory-bootstrap-330 .pager:after {
5228
- clear: both;
5229
- }
5230
-
5231
- .factory-bootstrap-330 .pager:before,
5232
- .factory-bootstrap-330 .pager:after {
5233
- display: table;
5234
- content: " ";
5235
- }
5236
-
5237
- .factory-bootstrap-330 .pager:after {
5238
- clear: both;
5239
- }
5240
-
5241
- .factory-bootstrap-330 .pager li {
5242
- display: inline;
5243
- }
5244
-
5245
- .factory-bootstrap-330 .pager li > a,
5246
- .factory-bootstrap-330 .pager li > span {
5247
- display: inline-block;
5248
- padding: 5px 14px;
5249
- background-color: #ffffff;
5250
- border: 1px solid #dddddd;
5251
- border-radius: 15px;
5252
- }
5253
-
5254
- .factory-bootstrap-330 .pager li > a:hover,
5255
- .factory-bootstrap-330 .pager li > a:focus {
5256
- text-decoration: none;
5257
- background-color: #eeeeee;
5258
- }
5259
-
5260
- .factory-bootstrap-330 .pager .next > a,
5261
- .factory-bootstrap-330 .pager .next > span {
5262
- float: right;
5263
- }
5264
-
5265
- .factory-bootstrap-330 .pager .previous > a,
5266
- .factory-bootstrap-330 .pager .previous > span {
5267
- float: left;
5268
- }
5269
-
5270
- .factory-bootstrap-330 .pager .disabled > a,
5271
- .factory-bootstrap-330 .pager .disabled > a:hover,
5272
- .factory-bootstrap-330 .pager .disabled > a:focus,
5273
- .factory-bootstrap-330 .pager .disabled > span {
5274
- color: #999999;
5275
- cursor: not-allowed;
5276
- background-color: #ffffff;
5277
- }
5278
-
5279
- .factory-bootstrap-330 .label {
5280
- display: inline;
5281
- padding: .2em .6em .3em;
5282
- font-size: 75%;
5283
- font-weight: bold;
5284
- line-height: 1;
5285
- color: #ffffff;
5286
- text-align: center;
5287
- white-space: nowrap;
5288
- vertical-align: baseline;
5289
- border-radius: .25em;
5290
- }
5291
-
5292
- .factory-bootstrap-330 .label[href]:hover,
5293
- .factory-bootstrap-330 .label[href]:focus {
5294
- color: #ffffff;
5295
- text-decoration: none;
5296
- cursor: pointer;
5297
- }
5298
-
5299
- .factory-bootstrap-330 .label:empty {
5300
- display: none;
5301
- }
5302
-
5303
- .factory-bootstrap-330 .btn .label {
5304
- position: relative;
5305
- top: -1px;
5306
- }
5307
-
5308
- .factory-bootstrap-330 .label-default {
5309
- background-color: #999999;
5310
- }
5311
-
5312
- .factory-bootstrap-330 .label-default[href]:hover,
5313
- .factory-bootstrap-330 .label-default[href]:focus {
5314
- background-color: #808080;
5315
- }
5316
-
5317
- .factory-bootstrap-330 .label-primary {
5318
- background-color: #428bca;
5319
- }
5320
-
5321
- .factory-bootstrap-330 .label-primary[href]:hover,
5322
- .factory-bootstrap-330 .label-primary[href]:focus {
5323
- background-color: #3071a9;
5324
- }
5325
-
5326
- .factory-bootstrap-330 .label-success {
5327
- background-color: #5cb85c;
5328
- }
5329
-
5330
- .factory-bootstrap-330 .label-success[href]:hover,
5331
- .factory-bootstrap-330 .label-success[href]:focus {
5332
- background-color: #449d44;
5333
- }
5334
-
5335
- .factory-bootstrap-330 .label-info {
5336
- background-color: #5bc0de;
5337
- }
5338
-
5339
- .factory-bootstrap-330 .label-info[href]:hover,
5340
- .factory-bootstrap-330 .label-info[href]:focus {
5341
- background-color: #31b0d5;
5342
- }
5343
-
5344
- .factory-bootstrap-330 .label-warning {
5345
- background-color: #f0ad4e;
5346
- }
5347
-
5348
- .factory-bootstrap-330 .label-warning[href]:hover,
5349
- .factory-bootstrap-330 .label-warning[href]:focus {
5350
- background-color: #ec971f;
5351
- }
5352
-
5353
- .factory-bootstrap-330 .label-danger {
5354
- background-color: #d9534f;
5355
- }
5356
-
5357
- .factory-bootstrap-330 .label-danger[href]:hover,
5358
- .factory-bootstrap-330 .label-danger[href]:focus {
5359
- background-color: #c9302c;
5360
- }
5361
-
5362
- .factory-bootstrap-330 .badge {
5363
- display: inline-block;
5364
- min-width: 10px;
5365
- padding: 3px 7px;
5366
- font-size: 12px;
5367
- font-weight: bold;
5368
- line-height: 1;
5369
- color: #ffffff;
5370
- text-align: center;
5371
- white-space: nowrap;
5372
- vertical-align: baseline;
5373
- background-color: #999999;
5374
- border-radius: 10px;
5375
- }
5376
-
5377
- .factory-bootstrap-330 .badge:empty {
5378
- display: none;
5379
- }
5380
-
5381
- .factory-bootstrap-330 .btn .badge {
5382
- position: relative;
5383
- top: -1px;
5384
- }
5385
-
5386
- .factory-bootstrap-330 a.badge:hover,
5387
- .factory-bootstrap-330 a.badge:focus {
5388
- color: #ffffff;
5389
- text-decoration: none;
5390
- cursor: pointer;
5391
- }
5392
-
5393
- .factory-bootstrap-330 a.list-group-item.active > .badge,
5394
- .factory-bootstrap-330 .nav-pills > .active > a > .badge {
5395
- color: #428bca;
5396
- background-color: #ffffff;
5397
- }
5398
-
5399
- .factory-bootstrap-330 .nav-pills > li > a > .badge {
5400
- margin-left: 3px;
5401
- }
5402
-
5403
- .factory-bootstrap-330 .jumbotron {
5404
- padding: 30px;
5405
- margin-bottom: 30px;
5406
- font-size: 21px;
5407
- font-weight: 200;
5408
- line-height: 2.1428571435;
5409
- color: inherit;
5410
- background-color: #eeeeee;
5411
- }
5412
-
5413
- .factory-bootstrap-330 .jumbotron h1,
5414
- .factory-bootstrap-330 .jumbotron .h1 {
5415
- line-height: 1;
5416
- color: inherit;
5417
- }
5418
-
5419
- .factory-bootstrap-330 .jumbotron p {
5420
- line-height: 1.4;
5421
- }
5422
-
5423
- .factory-bootstrap-330 .container .jumbotron {
5424
- border-radius: 6px;
5425
- }
5426
-
5427
- .factory-bootstrap-330 .jumbotron .container {
5428
- max-width: 100%;
5429
- }
5430
-
5431
- @media screen and (min-width: 768px) {
5432
- .jumbotron {
5433
- padding-top: 48px;
5434
- padding-bottom: 48px;
5435
- }
5436
-
5437
- .container .jumbotron {
5438
- padding-right: 60px;
5439
- padding-left: 60px;
5440
- }
5441
-
5442
- .jumbotron h1,
5443
- .jumbotron .h1 {
5444
- font-size: 63px;
5445
- }
5446
- }
5447
-
5448
- .factory-bootstrap-330 .thumbnail {
5449
- display: block;
5450
- padding: 4px;
5451
- margin-bottom: 20px;
5452
- line-height: 1.428571429;
5453
- background-color: #ffffff;
5454
- border: 1px solid #dddddd;
5455
- border-radius: 4px;
5456
- -webkit-transition: all 0.2s ease-in-out;
5457
- transition: all 0.2s ease-in-out;
5458
- }
5459
-
5460
- .factory-bootstrap-330 .thumbnail > img,
5461
- .factory-bootstrap-330 .thumbnail a > img {
5462
- display: block;
5463
- height: auto;
5464
- max-width: 100%;
5465
- margin-right: auto;
5466
- margin-left: auto;
5467
- }
5468
-
5469
- .factory-bootstrap-330 a.thumbnail:hover,
5470
- .factory-bootstrap-330 a.thumbnail:focus,
5471
- .factory-bootstrap-330 a.thumbnail.active {
5472
- border-color: #428bca;
5473
- }
5474
-
5475
- .factory-bootstrap-330 .thumbnail .caption {
5476
- padding: 9px;
5477
- color: #333333;
5478
- }
5479
-
5480
- .factory-bootstrap-330 .alert {
5481
- padding: 15px;
5482
- margin-bottom: 20px;
5483
- border: 1px solid transparent;
5484
- border-radius: 4px;
5485
- }
5486
-
5487
- .factory-bootstrap-330 .alert h4 {
5488
- margin-top: 0;
5489
- color: inherit;
5490
- }
5491
-
5492
- .factory-bootstrap-330 .alert .alert-link {
5493
- font-weight: bold;
5494
- }
5495
-
5496
- .factory-bootstrap-330 .alert > p,
5497
- .factory-bootstrap-330 .alert > ul {
5498
- margin-bottom: 0;
5499
- }
5500
-
5501
- .factory-bootstrap-330 .alert > p + p {
5502
- margin-top: 5px;
5503
- }
5504
-
5505
- .factory-bootstrap-330 .alert-dismissable {
5506
- padding-right: 35px;
5507
- }
5508
-
5509
- .factory-bootstrap-330 .alert-dismissable .close {
5510
- position: relative;
5511
- top: -2px;
5512
- right: -21px;
5513
- color: inherit;
5514
- }
5515
-
5516
- .factory-bootstrap-330 .alert-info {
5517
- color: #31708f;
5518
- background-color: #d9edf7;
5519
- border-color: #bce8f1;
5520
- }
5521
-
5522
- .factory-bootstrap-330 .alert-info hr {
5523
- border-top-color: #a6e1ec;
5524
- }
5525
-
5526
- .factory-bootstrap-330 .alert-info .alert-link {
5527
- color: #245269;
5528
- }
5529
-
5530
- @-webkit-keyframes progress-bar-stripes {
5531
- from {
5532
- background-position: 40px 0;
5533
- }
5534
- to {
5535
- background-position: 0 0;
5536
- }
5537
- }
5538
-
5539
- @keyframes progress-bar-stripes {
5540
- from {
5541
- background-position: 40px 0;
5542
- }
5543
- to {
5544
- background-position: 0 0;
5545
- }
5546
- }
5547
-
5548
- .factory-bootstrap-330 .progress {
5549
- height: 20px;
5550
- margin-bottom: 20px;
5551
- overflow: hidden;
5552
- background-color: #f5f5f5;
5553
- border-radius: 4px;
5554
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5555
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5556
- }
5557
-
5558
- .factory-bootstrap-330 .progress-bar {
5559
- float: left;
5560
- width: 0;
5561
- height: 100%;
5562
- font-size: 12px;
5563
- line-height: 20px;
5564
- color: #ffffff;
5565
- text-align: center;
5566
- background-color: #2ea2cc;
5567
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5568
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5569
- -webkit-transition: width 0.6s ease;
5570
- transition: width 0.6s ease;
5571
- }
5572
-
5573
- .factory-bootstrap-330 .progress-striped .progress-bar {
5574
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5575
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5576
- background-size: 40px 40px;
5577
- }
5578
-
5579
- .factory-bootstrap-330 .progress.active .progress-bar {
5580
- -webkit-animation: progress-bar-stripes 2s linear infinite;
5581
- animation: progress-bar-stripes 2s linear infinite;
5582
- }
5583
-
5584
- .factory-bootstrap-330 .progress-bar-success {
5585
- background-color: #5cb85c;
5586
- }
5587
-
5588
- .factory-bootstrap-330 .progress-striped .progress-bar-success {
5589
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5590
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5591
- }
5592
-
5593
- .factory-bootstrap-330 .progress-bar-info {
5594
- background-color: #5bc0de;
5595
- }
5596
-
5597
- .factory-bootstrap-330 .progress-striped .progress-bar-info {
5598
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5599
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5600
- }
5601
-
5602
- .factory-bootstrap-330 .progress-bar-warning {
5603
- background-color: #f0ad4e;
5604
- }
5605
-
5606
- .factory-bootstrap-330 .progress-striped .progress-bar-warning {
5607
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5608
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5609
- }
5610
-
5611
- .factory-bootstrap-330 .progress-bar-danger {
5612
- background-color: #d9534f;
5613
- }
5614
-
5615
- .factory-bootstrap-330 .progress-striped .progress-bar-danger {
5616
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5617
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5618
- }
5619
-
5620
- .factory-bootstrap-330 .media,
5621
- .factory-bootstrap-330 .media-body {
5622
- overflow: hidden;
5623
- zoom: 1;
5624
- }
5625
-
5626
- .factory-bootstrap-330 .media,
5627
- .factory-bootstrap-330 .media .media {
5628
- margin-top: 15px;
5629
- }
5630
-
5631
- .factory-bootstrap-330 .media:first-child {
5632
- margin-top: 0;
5633
- }
5634
-
5635
- .factory-bootstrap-330 .media-object {
5636
- display: block;
5637
- }
5638
-
5639
- .factory-bootstrap-330 .media-heading {
5640
- margin: 0 0 5px;
5641
- }
5642
-
5643
- .factory-bootstrap-330 .media > .pull-left {
5644
- margin-right: 10px;
5645
- }
5646
-
5647
- .factory-bootstrap-330 .media > .pull-right {
5648
- margin-left: 10px;
5649
- }
5650
-
5651
- .factory-bootstrap-330 .media-list {
5652
- padding-left: 0;
5653
- list-style: none;
5654
- }
5655
-
5656
- .factory-bootstrap-330 .list-group {
5657
- padding-left: 0;
5658
- margin-bottom: 20px;
5659
- }
5660
-
5661
- .factory-bootstrap-330 .list-group-item {
5662
- position: relative;
5663
- display: block;
5664
- padding: 10px 15px;
5665
- margin-bottom: -1px;
5666
- background-color: #ffffff;
5667
- border: 1px solid #dddddd;
5668
- }
5669
-
5670
- .factory-bootstrap-330 .list-group-item:first-child {
5671
- border-top-right-radius: 4px;
5672
- border-top-left-radius: 4px;
5673
- }
5674
-
5675
- .factory-bootstrap-330 .list-group-item:last-child {
5676
- margin-bottom: 0;
5677
- border-bottom-right-radius: 4px;
5678
- border-bottom-left-radius: 4px;
5679
- }
5680
-
5681
- .factory-bootstrap-330 .list-group-item > .badge {
5682
- float: right;
5683
- }
5684
-
5685
- .factory-bootstrap-330 .list-group-item > .badge + .badge {
5686
- margin-right: 5px;
5687
- }
5688
-
5689
- .factory-bootstrap-330 a.list-group-item {
5690
- color: #555555;
5691
- }
5692
-
5693
- .factory-bootstrap-330 a.list-group-item .list-group-item-heading {
5694
- color: #333333;
5695
- }
5696
-
5697
- .factory-bootstrap-330 a.list-group-item:hover,
5698
- .factory-bootstrap-330 a.list-group-item:focus {
5699
- text-decoration: none;
5700
- background-color: #f5f5f5;
5701
- }
5702
-
5703
- .factory-bootstrap-330 a.list-group-item.active,
5704
- .factory-bootstrap-330 a.list-group-item.active:hover,
5705
- .factory-bootstrap-330 a.list-group-item.active:focus {
5706
- z-index: 2;
5707
- color: #ffffff;
5708
- background-color: #428bca;
5709
- border-color: #428bca;
5710
- }
5711
-
5712
- .factory-bootstrap-330 a.list-group-item.active .list-group-item-heading,
5713
- .factory-bootstrap-330 a.list-group-item.active:hover .list-group-item-heading,
5714
- .factory-bootstrap-330 a.list-group-item.active:focus .list-group-item-heading {
5715
- color: inherit;
5716
- }
5717
-
5718
- .factory-bootstrap-330 a.list-group-item.active .list-group-item-text,
5719
- .factory-bootstrap-330 a.list-group-item.active:hover .list-group-item-text,
5720
- .factory-bootstrap-330 a.list-group-item.active:focus .list-group-item-text {
5721
- color: #e1edf7;
5722
- }
5723
-
5724
- .factory-bootstrap-330 .list-group-item-heading {
5725
- margin-top: 0;
5726
- margin-bottom: 5px;
5727
- }
5728
-
5729
- .factory-bootstrap-330 .list-group-item-text {
5730
- margin-bottom: 0;
5731
- line-height: 1.3;
5732
- }
5733
-
5734
- .factory-bootstrap-330 .panel {
5735
- margin-bottom: 20px;
5736
- background-color: #ffffff;
5737
- border: 1px solid transparent;
5738
- border-radius: 4px;
5739
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5740
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5741
- }
5742
-
5743
- .factory-bootstrap-330 .panel-body {
5744
- padding: 15px;
5745
- }
5746
-
5747
- .factory-bootstrap-330 .panel-body:before,
5748
- .factory-bootstrap-330 .panel-body:after {
5749
- display: table;
5750
- content: " ";
5751
- }
5752
-
5753
- .factory-bootstrap-330 .panel-body:after {
5754
- clear: both;
5755
- }
5756
-
5757
- .factory-bootstrap-330 .panel-body:before,
5758
- .factory-bootstrap-330 .panel-body:after {
5759
- display: table;
5760
- content: " ";
5761
- }
5762
-
5763
- .factory-bootstrap-330 .panel-body:after {
5764
- clear: both;
5765
- }
5766
-
5767
- .factory-bootstrap-330 .panel > .list-group {
5768
- margin-bottom: 0;
5769
- }
5770
-
5771
- .factory-bootstrap-330 .panel > .list-group .list-group-item {
5772
- border-width: 1px 0;
5773
- }
5774
-
5775
- .factory-bootstrap-330 .panel > .list-group .list-group-item:first-child {
5776
- border-top-right-radius: 0;
5777
- border-top-left-radius: 0;
5778
- }
5779
-
5780
- .factory-bootstrap-330 .panel > .list-group .list-group-item:last-child {
5781
- border-bottom: 0;
5782
- }
5783
-
5784
- .factory-bootstrap-330 .panel-heading + .list-group .list-group-item:first-child {
5785
- border-top-width: 0;
5786
- }
5787
-
5788
- .factory-bootstrap-330 .panel > .table,
5789
- .factory-bootstrap-330 .panel > .table-responsive > .table {
5790
- margin-bottom: 0;
5791
- }
5792
-
5793
- .factory-bootstrap-330 .panel > .panel-body + .table,
5794
- .factory-bootstrap-330 .panel > .panel-body + .table-responsive {
5795
- border-top: 1px solid #dddddd;
5796
- }
5797
-
5798
- .factory-bootstrap-330 .panel > .table > tbody:first-child th,
5799
- .factory-bootstrap-330 .panel > .table > tbody:first-child td {
5800
- border-top: 0;
5801
- }
5802
-
5803
- .factory-bootstrap-330 .panel > .table-bordered,
5804
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered {
5805
- border: 0;
5806
- }
5807
-
5808
- .factory-bootstrap-330 .panel > .table-bordered > thead > tr > th:first-child,
5809
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
5810
- .factory-bootstrap-330 .panel > .table-bordered > tbody > tr > th:first-child,
5811
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
5812
- .factory-bootstrap-330 .panel > .table-bordered > tfoot > tr > th:first-child,
5813
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
5814
- .factory-bootstrap-330 .panel > .table-bordered > thead > tr > td:first-child,
5815
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
5816
- .factory-bootstrap-330 .panel > .table-bordered > tbody > tr > td:first-child,
5817
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
5818
- .factory-bootstrap-330 .panel > .table-bordered > tfoot > tr > td:first-child,
5819
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
5820
- border-left: 0;
5821
- }
5822
-
5823
- .factory-bootstrap-330 .panel > .table-bordered > thead > tr > th:last-child,
5824
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
5825
- .factory-bootstrap-330 .panel > .table-bordered > tbody > tr > th:last-child,
5826
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
5827
- .factory-bootstrap-330 .panel > .table-bordered > tfoot > tr > th:last-child,
5828
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
5829
- .factory-bootstrap-330 .panel > .table-bordered > thead > tr > td:last-child,
5830
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
5831
- .factory-bootstrap-330 .panel > .table-bordered > tbody > tr > td:last-child,
5832
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
5833
- .factory-bootstrap-330 .panel > .table-bordered > tfoot > tr > td:last-child,
5834
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
5835
- border-right: 0;
5836
- }
5837
-
5838
- .factory-bootstrap-330 .panel > .table-bordered > thead > tr:last-child > th,
5839
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > thead > tr:last-child > th,
5840
- .factory-bootstrap-330 .panel > .table-bordered > tbody > tr:last-child > th,
5841
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5842
- .factory-bootstrap-330 .panel > .table-bordered > tfoot > tr:last-child > th,
5843
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th,
5844
- .factory-bootstrap-330 .panel > .table-bordered > thead > tr:last-child > td,
5845
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > thead > tr:last-child > td,
5846
- .factory-bootstrap-330 .panel > .table-bordered > tbody > tr:last-child > td,
5847
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
5848
- .factory-bootstrap-330 .panel > .table-bordered > tfoot > tr:last-child > td,
5849
- .factory-bootstrap-330 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td {
5850
- border-bottom: 0;
5851
- }
5852
-
5853
- .factory-bootstrap-330 .panel > .table-responsive {
5854
- margin-bottom: 0;
5855
- border: 0;
5856
- }
5857
-
5858
- .factory-bootstrap-330 .panel-heading {
5859
- padding: 10px 15px;
5860
- border-bottom: 1px solid transparent;
5861
- border-top-right-radius: 3px;
5862
- border-top-left-radius: 3px;
5863
- }
5864
-
5865
- .factory-bootstrap-330 .panel-heading > .dropdown .dropdown-toggle {
5866
- color: inherit;
5867
- }
5868
-
5869
- .factory-bootstrap-330 .panel-title {
5870
- margin-top: 0;
5871
- margin-bottom: 0;
5872
- font-size: 16px;
5873
- color: inherit;
5874
- }
5875
-
5876
- .factory-bootstrap-330 .panel-title > a {
5877
- color: inherit;
5878
- }
5879
-
5880
- .factory-bootstrap-330 .panel-footer {
5881
- padding: 10px 15px;
5882
- background-color: #f5f5f5;
5883
- border-top: 1px solid #dddddd;
5884
- border-bottom-right-radius: 3px;
5885
- border-bottom-left-radius: 3px;
5886
- }
5887
-
5888
- .factory-bootstrap-330 .panel-group .panel {
5889
- margin-bottom: 0;
5890
- overflow: hidden;
5891
- border-radius: 4px;
5892
- }
5893
-
5894
- .factory-bootstrap-330 .panel-group .panel + .panel {
5895
- margin-top: 5px;
5896
- }
5897
-
5898
- .factory-bootstrap-330 .panel-group .panel-heading {
5899
- border-bottom: 0;
5900
- }
5901
-
5902
- .factory-bootstrap-330 .panel-group .panel-heading + .panel-collapse .panel-body {
5903
- border-top: 1px solid #dddddd;
5904
- }
5905
-
5906
- .factory-bootstrap-330 .panel-group .panel-footer {
5907
- border-top: 0;
5908
- }
5909
-
5910
- .factory-bootstrap-330 .panel-group .panel-footer + .panel-collapse .panel-body {
5911
- border-bottom: 1px solid #dddddd;
5912
- }
5913
-
5914
- .factory-bootstrap-330 .panel-default {
5915
- border-color: #dddddd;
5916
- }
5917
-
5918
- .factory-bootstrap-330 .panel-default > .panel-heading {
5919
- color: #333333;
5920
- background-color: #f5f5f5;
5921
- border-color: #dddddd;
5922
- }
5923
-
5924
- .factory-bootstrap-330 .panel-default > .panel-heading + .panel-collapse .panel-body {
5925
- border-top-color: #dddddd;
5926
- }
5927
-
5928
- .factory-bootstrap-330 .panel-default > .panel-footer + .panel-collapse .panel-body {
5929
- border-bottom-color: #dddddd;
5930
- }
5931
-
5932
- .factory-bootstrap-330 .panel-primary {
5933
- border-color: #428bca;
5934
- }
5935
-
5936
- .factory-bootstrap-330 .panel-primary > .panel-heading {
5937
- color: #ffffff;
5938
- background-color: #428bca;
5939
- border-color: #428bca;
5940
- }
5941
-
5942
- .factory-bootstrap-330 .panel-primary > .panel-heading + .panel-collapse .panel-body {
5943
- border-top-color: #428bca;
5944
- }
5945
-
5946
- .factory-bootstrap-330 .panel-primary > .panel-footer + .panel-collapse .panel-body {
5947
- border-bottom-color: #428bca;
5948
- }
5949
-
5950
- .factory-bootstrap-330 .panel-success {
5951
- border-color: #d6e9c6;
5952
- }
5953
-
5954
- .factory-bootstrap-330 .panel-success > .panel-heading {
5955
- color: #3c763d;
5956
- background-color: #dff0d8;
5957
- border-color: #d6e9c6;
5958
- }
5959
-
5960
- .factory-bootstrap-330 .panel-success > .panel-heading + .panel-collapse .panel-body {
5961
- border-top-color: #d6e9c6;
5962
- }
5963
-
5964
- .factory-bootstrap-330 .panel-success > .panel-footer + .panel-collapse .panel-body {
5965
- border-bottom-color: #d6e9c6;
5966
- }
5967
-
5968
- .factory-bootstrap-330 .panel-warning {
5969
- border-color: #faebcc;
5970
- }
5971
-
5972
- .factory-bootstrap-330 .panel-warning > .panel-heading {
5973
- color: #8a6d3b;
5974
- background-color: #fcf8e3;
5975
- border-color: #faebcc;
5976
- }
5977
-
5978
- .factory-bootstrap-330 .panel-warning > .panel-heading + .panel-collapse .panel-body {
5979
- border-top-color: #faebcc;
5980
- }
5981
-
5982
- .factory-bootstrap-330 .panel-warning > .panel-footer + .panel-collapse .panel-body {
5983
- border-bottom-color: #faebcc;
5984
- }
5985
-
5986
- .factory-bootstrap-330 .panel-danger {
5987
- border-color: #ebccd1;
5988
- }
5989
-
5990
- .factory-bootstrap-330 .panel-danger > .panel-heading {
5991
- color: #a94442;
5992
- background-color: #f2dede;
5993
- border-color: #ebccd1;
5994
- }
5995
-
5996
- .factory-bootstrap-330 .panel-danger > .panel-heading + .panel-collapse .panel-body {
5997
- border-top-color: #ebccd1;
5998
- }
5999
-
6000
- .factory-bootstrap-330 .panel-danger > .panel-footer + .panel-collapse .panel-body {
6001
- border-bottom-color: #ebccd1;
6002
- }
6003
-
6004
- .factory-bootstrap-330 .panel-info {
6005
- border-color: #bce8f1;
6006
- }
6007
-
6008
- .factory-bootstrap-330 .panel-info > .panel-heading {
6009
- color: #31708f;
6010
- background-color: #d9edf7;
6011
- border-color: #bce8f1;
6012
- }
6013
-
6014
- .factory-bootstrap-330 .panel-info > .panel-heading + .panel-collapse .panel-body {
6015
- border-top-color: #bce8f1;
6016
- }
6017
-
6018
- .factory-bootstrap-330 .panel-info > .panel-footer + .panel-collapse .panel-body {
6019
- border-bottom-color: #bce8f1;
6020
- }
6021
-
6022
- .factory-bootstrap-330 .well {
6023
- min-height: 20px;
6024
- padding: 19px;
6025
- margin-bottom: 20px;
6026
- background-color: #f5f5f5;
6027
- border: 1px solid #e3e3e3;
6028
- border-radius: 4px;
6029
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
6030
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
6031
- }
6032
-
6033
- .factory-bootstrap-330 .well blockquote {
6034
- border-color: #ddd;
6035
- border-color: rgba(0, 0, 0, 0.15);
6036
- }
6037
-
6038
- .factory-bootstrap-330 .well-lg {
6039
- padding: 24px;
6040
- border-radius: 6px;
6041
- }
6042
-
6043
- .factory-bootstrap-330 .well-sm {
6044
- padding: 9px;
6045
- border-radius: 3px;
6046
- }
6047
-
6048
- .factory-bootstrap-330 .close {
6049
- float: right;
6050
- font-size: 14px;
6051
- font-weight: bold;
6052
- line-height: 1;
6053
- color: #000000;
6054
- text-shadow: 0 1px 0 #ffffff;
6055
- opacity: 0.3;
6056
- filter: alpha(opacity=30);
6057
- }
6058
-
6059
- .factory-bootstrap-330 .alert .close {
6060
- position: relative;
6061
- top: -8px;
6062
- right: -7px;
6063
- }
6064
-
6065
- .factory-bootstrap-330 .close:hover,
6066
- .factory-bootstrap-330 .close:focus {
6067
- color: #000000;
6068
- text-decoration: none;
6069
- cursor: pointer;
6070
- opacity: 0.5;
6071
- filter: alpha(opacity=50);
6072
- }
6073
-
6074
- .factory-bootstrap-330 button.close {
6075
- padding: 0;
6076
- cursor: pointer;
6077
- background: transparent;
6078
- border: 0;
6079
- -webkit-appearance: none;
6080
- }
6081
-
6082
- .factory-bootstrap-330 .modal-open {
6083
- overflow: hidden;
6084
- }
6085
-
6086
- .factory-bootstrap-330 .modal {
6087
- position: fixed;
6088
- top: 0;
6089
- right: 0;
6090
- bottom: 0;
6091
- left: 0;
6092
- z-index: 1040;
6093
- display: none;
6094
- overflow: auto;
6095
- overflow-y: scroll;
6096
- width: auto;
6097
- margin-left: 0px;
6098
- background-color: transparent;
6099
- border: 0px;
6100
- }
6101
-
6102
- .factory-bootstrap-330 .modal.fade .modal-dialog {
6103
- -webkit-transform: translate(0, -25%);
6104
- -ms-transform: translate(0, -25%);
6105
- transform: translate(0, -25%);
6106
- -webkit-transition: -webkit-transform 0.3s ease-out;
6107
- -moz-transition: -moz-transform 0.3s ease-out;
6108
- -o-transition: -o-transform 0.3s ease-out;
6109
- transition: transform 0.3s ease-out;
6110
- }
6111
-
6112
- .factory-bootstrap-330 .modal.in .modal-dialog {
6113
- -webkit-transform: translate(0, 0);
6114
- -ms-transform: translate(0, 0);
6115
- transform: translate(0, 0);
6116
- }
6117
-
6118
- .factory-bootstrap-330 .modal-dialog {
6119
- position: relative;
6120
- z-index: 1050;
6121
- width: auto;
6122
- margin: 10px;
6123
- }
6124
-
6125
- .factory-bootstrap-330 .modal-content {
6126
- position: relative;
6127
- background-color: #ffffff;
6128
- border: 1px solid #999999;
6129
- border: 1px solid rgba(0, 0, 0, 0.2);
6130
- border-radius: 6px;
6131
- outline: none;
6132
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
6133
- box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
6134
- background-clip: padding-box;
6135
- }
6136
-
6137
- .factory-bootstrap-330 .modal-backdrop,
6138
- .factory-bootstrap-330-modal-backdrop {
6139
- position: fixed;
6140
- top: 0;
6141
- right: 0;
6142
- bottom: 0;
6143
- left: 0;
6144
- z-index: 1030;
6145
- background-color: #000000;
6146
- }
6147
-
6148
- .factory-bootstrap-330 .modal-backdrop.fade,
6149
- .factory-bootstrap-330-modal-backdrop.fade {
6150
- opacity: 0;
6151
- filter: alpha(opacity=0);
6152
- }
6153
-
6154
- .factory-bootstrap-330 .modal-backdrop.in,
6155
- .factory-bootstrap-330-modal-backdrop.in {
6156
- opacity: 0.5;
6157
- filter: alpha(opacity=50);
6158
- }
6159
-
6160
- .factory-bootstrap-330 .modal-header {
6161
- min-height: 16.428571429px;
6162
- padding: 15px;
6163
- border-bottom: 1px solid #e5e5e5;
6164
- }
6165
-
6166
- .factory-bootstrap-330 .modal-header .close {
6167
- margin-top: -2px;
6168
- }
6169
-
6170
- .factory-bootstrap-330 .modal-title {
6171
- margin: 0;
6172
- line-height: 1.428571429;
6173
- }
6174
-
6175
- .factory-bootstrap-330 .modal-body {
6176
- position: relative;
6177
- padding: 20px;
6178
- max-height: none;
6179
- }
6180
-
6181
- .factory-bootstrap-330 .modal-footer {
6182
- padding: 19px 20px 20px;
6183
- margin-top: 15px;
6184
- text-align: right;
6185
- border-top: 1px solid #e5e5e5;
6186
- }
6187
-
6188
- .factory-bootstrap-330 .modal-footer:before,
6189
- .factory-bootstrap-330 .modal-footer:after {
6190
- display: table;
6191
- content: " ";
6192
- }
6193
-
6194
- .factory-bootstrap-330 .modal-footer:after {
6195
- clear: both;
6196
- }
6197
-
6198
- .factory-bootstrap-330 .modal-footer:before,
6199
- .factory-bootstrap-330 .modal-footer:after {
6200
- display: table;
6201
- content: " ";
6202
- }
6203
-
6204
- .factory-bootstrap-330 .modal-footer:after {
6205
- clear: both;
6206
- }
6207
-
6208
- .factory-bootstrap-330 .modal-footer .btn + .btn {
6209
- margin-bottom: 0;
6210
- margin-left: 5px;
6211
- }
6212
-
6213
- .factory-bootstrap-330 .modal-footer .btn-group .btn + .btn {
6214
- margin-left: -1px;
6215
- }
6216
-
6217
- .factory-bootstrap-330 .modal-footer .btn-block + .btn-block {
6218
- margin-left: 0;
6219
- }
6220
-
6221
- @media screen and (min-width: 768px) {
6222
- .factory-bootstrap-330 .modal-dialog {
6223
- width: 600px;
6224
- margin: 30px auto;
6225
- }
6226
-
6227
- .factory-bootstrap-330 .modal-content {
6228
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
6229
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
6230
- }
6231
- }
6232
-
6233
- .factory-bootstrap-330 .tooltip {
6234
- position: absolute;
6235
- z-index: 1030;
6236
- display: block;
6237
- font-size: 12px;
6238
- line-height: 1.4;
6239
- opacity: 0;
6240
- filter: alpha(opacity=0);
6241
- visibility: visible;
6242
- }
6243
-
6244
- .factory-bootstrap-330 .tooltip.in {
6245
- opacity: 0.9;
6246
- filter: alpha(opacity=90);
6247
- }
6248
-
6249
- .factory-bootstrap-330 .tooltip.top {
6250
- padding: 5px 0;
6251
- margin-top: -3px;
6252
- }
6253
-
6254
- .factory-bootstrap-330 .tooltip.right {
6255
- padding: 0 5px;
6256
- margin-left: 3px;
6257
- }
6258
-
6259
- .factory-bootstrap-330 .tooltip.bottom {
6260
- padding: 5px 0;
6261
- margin-top: 3px;
6262
- }
6263
-
6264
- .factory-bootstrap-330 .tooltip.left {
6265
- padding: 0 5px;
6266
- margin-left: -3px;
6267
- }
6268
-
6269
- .factory-bootstrap-330 .tooltip-inner {
6270
- width: 400px;
6271
- padding: 15px 20px;
6272
- color: #ffffff;
6273
- text-align: left;
6274
- text-decoration: none;
6275
- background-color: #673ab7;
6276
- border-radius: 3px;
6277
- }
6278
-
6279
- .factory-bootstrap-330 .tooltip-arrow {
6280
- position: absolute;
6281
- width: 0;
6282
- height: 0;
6283
- border-color: transparent;
6284
- border-style: solid;
6285
- }
6286
-
6287
- .factory-bootstrap-330 .tooltip.top .tooltip-arrow {
6288
- bottom: 0;
6289
- left: 50%;
6290
- margin-left: -5px;
6291
- border-top-color: #673ab7;
6292
- border-width: 5px 5px 0;
6293
- }
6294
-
6295
- .factory-bootstrap-330 .tooltip.top-left .tooltip-arrow {
6296
- bottom: 0;
6297
- left: 5px;
6298
- border-top-color: #673ab7;
6299
- border-width: 5px 5px 0;
6300
- }
6301
-
6302
- .factory-bootstrap-330 .tooltip.top-right .tooltip-arrow {
6303
- right: 5px;
6304
- bottom: 0;
6305
- border-top-color: #673ab7;
6306
- border-width: 5px 5px 0;
6307
- }
6308
-
6309
- .factory-bootstrap-330 .tooltip.right .tooltip-arrow {
6310
- top: 50%;
6311
- left: 0;
6312
- margin-top: -5px;
6313
- border-right-color: #673ab7;
6314
- border-width: 5px 5px 5px 0;
6315
- }
6316
-
6317
- .factory-bootstrap-330 .tooltip.left .tooltip-arrow {
6318
- top: 50%;
6319
- right: 0;
6320
- margin-top: -5px;
6321
- border-left-color: #673ab7;
6322
- border-width: 5px 0 5px 5px;
6323
- }
6324
-
6325
- .factory-bootstrap-330 .tooltip.bottom .tooltip-arrow {
6326
- top: 0;
6327
- left: 50%;
6328
- margin-left: -5px;
6329
- border-bottom-color: #673ab7;
6330
- border-width: 0 5px 5px;
6331
- }
6332
-
6333
- .factory-bootstrap-330 .tooltip.bottom-left .tooltip-arrow {
6334
- top: 0;
6335
- left: 5px;
6336
- border-bottom-color: #673ab7;
6337
- border-width: 0 5px 5px;
6338
- }
6339
-
6340
- .factory-bootstrap-330 .tooltip.bottom-right .tooltip-arrow {
6341
- top: 0;
6342
- right: 5px;
6343
- border-bottom-color: #673ab7;
6344
- border-width: 0 5px 5px;
6345
- }
6346
-
6347
- .factory-bootstrap-330 .popover {
6348
- position: absolute;
6349
- top: 0;
6350
- left: 0;
6351
- z-index: 1010;
6352
- display: none;
6353
- max-width: 276px;
6354
- padding: 1px;
6355
- text-align: left;
6356
- white-space: normal;
6357
- background-color: #ffffff;
6358
- border: 1px solid #cccccc;
6359
- border: 1px solid rgba(0, 0, 0, 0.2);
6360
- border-radius: 6px;
6361
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6362
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6363
- background-clip: padding-box;
6364
- }
6365
-
6366
- .factory-bootstrap-330 .popover.top {
6367
- margin-top: -10px;
6368
- }
6369
-
6370
- .factory-bootstrap-330 .popover.right {
6371
- margin-left: 10px;
6372
- }
6373
-
6374
- .factory-bootstrap-330 .popover.bottom {
6375
- margin-top: 10px;
6376
- }
6377
-
6378
- .factory-bootstrap-330 .popover.left {
6379
- margin-left: -10px;
6380
- }
6381
-
6382
- .factory-bootstrap-330 .popover-title {
6383
- padding: 8px 14px;
6384
- margin: 0;
6385
- font-size: 14px;
6386
- font-weight: normal;
6387
- line-height: 18px;
6388
- background-color: #f7f7f7;
6389
- border-bottom: 1px solid #ebebeb;
6390
- border-radius: 5px 5px 0 0;
6391
- }
6392
-
6393
- .factory-bootstrap-330 .popover-content {
6394
- padding: 9px 14px;
6395
- }
6396
-
6397
- .factory-bootstrap-330 .popover .arrow,
6398
- .factory-bootstrap-330 .popover .arrow:after {
6399
- position: absolute;
6400
- display: block;
6401
- width: 0;
6402
- height: 0;
6403
- border-color: transparent;
6404
- border-style: solid;
6405
- }
6406
-
6407
- .factory-bootstrap-330 .popover .arrow {
6408
- border-width: 11px;
6409
- }
6410
-
6411
- .factory-bootstrap-330 .popover .arrow:after {
6412
- border-width: 10px;
6413
- content: "";
6414
- }
6415
-
6416
- .factory-bootstrap-330 .popover.top .arrow {
6417
- bottom: -11px;
6418
- left: 50%;
6419
- margin-left: -11px;
6420
- border-top-color: #999999;
6421
- border-top-color: rgba(0, 0, 0, 0.25);
6422
- border-bottom-width: 0;
6423
- }
6424
-
6425
- .factory-bootstrap-330 .popover.top .arrow:after {
6426
- bottom: 1px;
6427
- margin-left: -10px;
6428
- border-top-color: #ffffff;
6429
- border-bottom-width: 0;
6430
- content: " ";
6431
- }
6432
-
6433
- .factory-bootstrap-330 .popover.right .arrow {
6434
- top: 50%;
6435
- left: -11px;
6436
- margin-top: -11px;
6437
- border-right-color: #999999;
6438
- border-right-color: rgba(0, 0, 0, 0.25);
6439
- border-left-width: 0;
6440
- }
6441
-
6442
- .factory-bootstrap-330 .popover.right .arrow:after {
6443
- bottom: -10px;
6444
- left: 1px;
6445
- border-right-color: #ffffff;
6446
- border-left-width: 0;
6447
- content: " ";
6448
- }
6449
-
6450
- .factory-bootstrap-330 .popover.bottom .arrow {
6451
- top: -11px;
6452
- left: 50%;
6453
- margin-left: -11px;
6454
- border-bottom-color: #999999;
6455
- border-bottom-color: rgba(0, 0, 0, 0.25);
6456
- border-top-width: 0;
6457
- }
6458
-
6459
- .factory-bootstrap-330 .popover.bottom .arrow:after {
6460
- top: 1px;
6461
- margin-left: -10px;
6462
- border-bottom-color: #ffffff;
6463
- border-top-width: 0;
6464
- content: " ";
6465
- }
6466
-
6467
- .factory-bootstrap-330 .popover.left .arrow {
6468
- top: 50%;
6469
- right: -11px;
6470
- margin-top: -11px;
6471
- border-left-color: #999999;
6472
- border-left-color: rgba(0, 0, 0, 0.25);
6473
- border-right-width: 0;
6474
- }
6475
-
6476
- .factory-bootstrap-330 .popover.left .arrow:after {
6477
- right: 1px;
6478
- bottom: -10px;
6479
- border-left-color: #ffffff;
6480
- border-right-width: 0;
6481
- content: " ";
6482
- }
6483
-
6484
- .factory-bootstrap-330 .carousel {
6485
- position: relative;
6486
- }
6487
-
6488
- .factory-bootstrap-330 .carousel-inner {
6489
- position: relative;
6490
- width: 100%;
6491
- overflow: hidden;
6492
- }
6493
-
6494
- .factory-bootstrap-330 .carousel-inner > .item {
6495
- position: relative;
6496
- display: none;
6497
- -webkit-transition: 0.6s ease-in-out left;
6498
- transition: 0.6s ease-in-out left;
6499
- }
6500
-
6501
- .factory-bootstrap-330 .carousel-inner > .item > img,
6502
- .factory-bootstrap-330 .carousel-inner > .item > a > img {
6503
- display: block;
6504
- height: auto;
6505
- max-width: 100%;
6506
- line-height: 1;
6507
- }
6508
-
6509
- .factory-bootstrap-330 .carousel-inner > .active,
6510
- .factory-bootstrap-330 .carousel-inner > .next,
6511
- .factory-bootstrap-330 .carousel-inner > .prev {
6512
- display: block;
6513
- }
6514
-
6515
- .factory-bootstrap-330 .carousel-inner > .active {
6516
- left: 0;
6517
- }
6518
-
6519
- .factory-bootstrap-330 .carousel-inner > .next,
6520
- .factory-bootstrap-330 .carousel-inner > .prev {
6521
- position: absolute;
6522
- top: 0;
6523
- width: 100%;
6524
- }
6525
-
6526
- .factory-bootstrap-330 .carousel-inner > .next {
6527
- left: 100%;
6528
- }
6529
-
6530
- .factory-bootstrap-330 .carousel-inner > .prev {
6531
- left: -100%;
6532
- }
6533
-
6534
- .factory-bootstrap-330 .carousel-inner > .next.left,
6535
- .factory-bootstrap-330 .carousel-inner > .prev.right {
6536
- left: 0;
6537
- }
6538
-
6539
- .factory-bootstrap-330 .carousel-inner > .active.left {
6540
- left: -100%;
6541
- }
6542
-
6543
- .factory-bootstrap-330 .carousel-inner > .active.right {
6544
- left: 100%;
6545
- }
6546
-
6547
- .factory-bootstrap-330 .carousel-control {
6548
- position: absolute;
6549
- top: 0;
6550
- bottom: 0;
6551
- left: 0;
6552
- width: 15%;
6553
- font-size: 20px;
6554
- color: #ffffff;
6555
- text-align: center;
6556
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6557
- opacity: 0.5;
6558
- filter: alpha(opacity=50);
6559
- }
6560
-
6561
- .factory-bootstrap-330 .carousel-control.left {
6562
- background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%));
6563
- background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);
6564
- background-repeat: repeat-x;
6565
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
6566
- }
6567
-
6568
- .factory-bootstrap-330 .carousel-control.right {
6569
- right: 0;
6570
- left: auto;
6571
- background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%));
6572
- background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);
6573
- background-repeat: repeat-x;
6574
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
6575
- }
6576
-
6577
- .factory-bootstrap-330 .carousel-control:hover,
6578
- .factory-bootstrap-330 .carousel-control:focus {
6579
- color: #ffffff;
6580
- text-decoration: none;
6581
- outline: none;
6582
- opacity: 0.9;
6583
- filter: alpha(opacity=90);
6584
- }
6585
-
6586
- .factory-bootstrap-330 .carousel-control .icon-prev,
6587
- .factory-bootstrap-330 .carousel-control .icon-next,
6588
- .factory-bootstrap-330 .carousel-control .glyphicon-chevron-left,
6589
- .factory-bootstrap-330 .carousel-control .glyphicon-chevron-right {
6590
- position: absolute;
6591
- top: 50%;
6592
- z-index: 5;
6593
- display: inline-block;
6594
- }
6595
-
6596
- .factory-bootstrap-330 .carousel-control .icon-prev,
6597
- .factory-bootstrap-330 .carousel-control .glyphicon-chevron-left {
6598
- left: 50%;
6599
- }
6600
-
6601
- .factory-bootstrap-330 .carousel-control .icon-next,
6602
- .factory-bootstrap-330 .carousel-control .glyphicon-chevron-right {
6603
- right: 50%;
6604
- }
6605
-
6606
- .factory-bootstrap-330 .carousel-control .icon-prev,
6607
- .factory-bootstrap-330 .carousel-control .icon-next {
6608
- width: 20px;
6609
- height: 20px;
6610
- margin-top: -10px;
6611
- margin-left: -10px;
6612
- font-family: serif;
6613
- }
6614
-
6615
- .factory-bootstrap-330 .carousel-control .icon-prev:before {
6616
- content: '\2039';
6617
- }
6618
-
6619
- .factory-bootstrap-330 .carousel-control .icon-next:before {
6620
- content: '\203a';
6621
- }
6622
-
6623
- .factory-bootstrap-330 .carousel-indicators {
6624
- position: absolute;
6625
- bottom: 10px;
6626
- left: 50%;
6627
- z-index: 15;
6628
- width: 60%;
6629
- padding-left: 0;
6630
- margin-left: -30%;
6631
- text-align: center;
6632
- list-style: none;
6633
- }
6634
-
6635
- .factory-bootstrap-330 .carousel-indicators li {
6636
- display: inline-block;
6637
- width: 10px;
6638
- height: 10px;
6639
- margin: 1px;
6640
- text-indent: -999px;
6641
- cursor: pointer;
6642
- background-color: #000 \9;
6643
- background-color: rgba(0, 0, 0, 0);
6644
- border: 1px solid #ffffff;
6645
- border-radius: 10px;
6646
- }
6647
-
6648
- .factory-bootstrap-330 .carousel-indicators .active {
6649
- width: 12px;
6650
- height: 12px;
6651
- margin: 0;
6652
- background-color: #ffffff;
6653
- }
6654
-
6655
- .factory-bootstrap-330 .carousel-caption {
6656
- position: absolute;
6657
- right: 15%;
6658
- bottom: 20px;
6659
- left: 15%;
6660
- z-index: 10;
6661
- padding-top: 20px;
6662
- padding-bottom: 20px;
6663
- color: #ffffff;
6664
- text-align: center;
6665
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6666
- }
6667
-
6668
- .factory-bootstrap-330 .carousel-caption .btn {
6669
- text-shadow: none;
6670
- }
6671
-
6672
- @media screen and (min-width: 768px) {
6673
- .carousel-control .glyphicons-chevron-left,
6674
- .carousel-control .glyphicons-chevron-right,
6675
- .carousel-control .icon-prev,
6676
- .carousel-control .icon-next {
6677
- width: 30px;
6678
- height: 30px;
6679
- margin-top: -15px;
6680
- margin-left: -15px;
6681
- font-size: 30px;
6682
- }
6683
-
6684
- .carousel-caption {
6685
- right: 20%;
6686
- left: 20%;
6687
- padding-bottom: 30px;
6688
- }
6689
-
6690
- .carousel-indicators {
6691
- bottom: 20px;
6692
- }
6693
- }
6694
-
6695
- .factory-bootstrap-330 .clearfix:before,
6696
- .factory-bootstrap-330 .clearfix:after {
6697
- display: table;
6698
- content: " ";
6699
- }
6700
-
6701
- .factory-bootstrap-330 .clearfix:after {
6702
- clear: both;
6703
- }
6704
-
6705
- .factory-bootstrap-330 .center-block {
6706
- display: block;
6707
- margin-right: auto;
6708
- margin-left: auto;
6709
- }
6710
-
6711
- .factory-bootstrap-330 .pull-right {
6712
- float: right !important;
6713
- }
6714
-
6715
- .factory-bootstrap-330 .pull-left {
6716
- float: left !important;
6717
- }
6718
-
6719
- .factory-bootstrap-330 .hide {
6720
- display: none !important;
6721
- }
6722
-
6723
- .factory-bootstrap-330 .show {
6724
- display: block !important;
6725
- }
6726
-
6727
- .factory-bootstrap-330 .invisible {
6728
- visibility: hidden;
6729
- }
6730
-
6731
- .factory-bootstrap-330 .text-hide {
6732
- font: 0/0 a;
6733
- color: transparent;
6734
- text-shadow: none;
6735
- background-color: transparent;
6736
- border: 0;
6737
- }
6738
-
6739
- .factory-bootstrap-330 .hidden {
6740
- display: none !important;
6741
- visibility: hidden !important;
6742
- }
6743
-
6744
- .factory-bootstrap-330 .affix {
6745
- position: fixed;
6746
- }
6747
-
6748
- @-ms-viewport {
6749
- width: device-width;
6750
- }
6751
-
6752
- .factory-bootstrap-330 .visible-xs,
6753
- .factory-bootstrap-330 tr.visible-xs,
6754
- .factory-bootstrap-330 th.visible-xs,
6755
- .factory-bootstrap-330 td.visible-xs {
6756
- display: none !important;
6757
- }
6758
-
6759
- @media (max-width: 767px) {
6760
- .visible-xs {
6761
- display: block !important;
6762
- }
6763
-
6764
- table.visible-xs {
6765
- display: table;
6766
- }
6767
-
6768
- tr.visible-xs {
6769
- display: table-row !important;
6770
- }
6771
-
6772
- th.visible-xs,
6773
- td.visible-xs {
6774
- display: table-cell !important;
6775
- }
6776
- }
6777
-
6778
- @media (min-width: 768px) and (max-width: 991px) {
6779
- .visible-xs.visible-sm {
6780
- display: block !important;
6781
- }
6782
-
6783
- table.visible-xs.visible-sm {
6784
- display: table;
6785
- }
6786
-
6787
- tr.visible-xs.visible-sm {
6788
- display: table-row !important;
6789
- }
6790
-
6791
- th.visible-xs.visible-sm,
6792
- td.visible-xs.visible-sm {
6793
- display: table-cell !important;
6794
- }
6795
- }
6796
-
6797
- @media (min-width: 992px) and (max-width: 1199px) {
6798
- .visible-xs.visible-md {
6799
- display: block !important;
6800
- }
6801
-
6802
- table.visible-xs.visible-md {
6803
- display: table;
6804
- }
6805
-
6806
- tr.visible-xs.visible-md {
6807
- display: table-row !important;
6808
- }
6809
-
6810
- th.visible-xs.visible-md,
6811
- td.visible-xs.visible-md {
6812
- display: table-cell !important;
6813
- }
6814
- }
6815
-
6816
- @media (min-width: 1200px) {
6817
- .visible-xs.visible-lg {
6818
- display: block !important;
6819
- }
6820
-
6821
- table.visible-xs.visible-lg {
6822
- display: table;
6823
- }
6824
-
6825
- tr.visible-xs.visible-lg {
6826
- display: table-row !important;
6827
- }
6828
-
6829
- th.visible-xs.visible-lg,
6830
- td.visible-xs.visible-lg {
6831
- display: table-cell !important;
6832
- }
6833
- }
6834
-
6835
- .factory-bootstrap-330 .visible-sm,
6836
- .factory-bootstrap-330 tr.visible-sm,
6837
- .factory-bootstrap-330 th.visible-sm,
6838
- .factory-bootstrap-330 td.visible-sm {
6839
- display: none !important;
6840
- }
6841
-
6842
- @media (max-width: 767px) {
6843
- .visible-sm.visible-xs {
6844
- display: block !important;
6845
- }
6846
-
6847
- table.visible-sm.visible-xs {
6848
- display: table;
6849
- }
6850
-
6851
- tr.visible-sm.visible-xs {
6852
- display: table-row !important;
6853
- }
6854
-
6855
- th.visible-sm.visible-xs,
6856
- td.visible-sm.visible-xs {
6857
- display: table-cell !important;
6858
- }
6859
- }
6860
-
6861
- @media (min-width: 768px) and (max-width: 991px) {
6862
- .visible-sm {
6863
- display: block !important;
6864
- }
6865
-
6866
- table.visible-sm {
6867
- display: table;
6868
- }
6869
-
6870
- tr.visible-sm {
6871
- display: table-row !important;
6872
- }
6873
-
6874
- th.visible-sm,
6875
- td.visible-sm {
6876
- display: table-cell !important;
6877
- }
6878
- }
6879
-
6880
- @media (min-width: 992px) and (max-width: 1199px) {
6881
- .visible-sm.visible-md {
6882
- display: block !important;
6883
- }
6884
-
6885
- table.visible-sm.visible-md {
6886
- display: table;
6887
- }
6888
-
6889
- tr.visible-sm.visible-md {
6890
- display: table-row !important;
6891
- }
6892
-
6893
- th.visible-sm.visible-md,
6894
- td.visible-sm.visible-md {
6895
- display: table-cell !important;
6896
- }
6897
- }
6898
-
6899
- @media (min-width: 1200px) {
6900
- .visible-sm.visible-lg {
6901
- display: block !important;
6902
- }
6903
-
6904
- table.visible-sm.visible-lg {
6905
- display: table;
6906
- }
6907
-
6908
- tr.visible-sm.visible-lg {
6909
- display: table-row !important;
6910
- }
6911
-
6912
- th.visible-sm.visible-lg,
6913
- td.visible-sm.visible-lg {
6914
- display: table-cell !important;
6915
- }
6916
- }
6917
-
6918
- .factory-bootstrap-330 .visible-md,
6919
- .factory-bootstrap-330 tr.visible-md,
6920
- .factory-bootstrap-330 th.visible-md,
6921
- .factory-bootstrap-330 td.visible-md {
6922
- display: none !important;
6923
- }
6924
-
6925
- @media (max-width: 767px) {
6926
- .visible-md.visible-xs {
6927
- display: block !important;
6928
- }
6929
-
6930
- table.visible-md.visible-xs {
6931
- display: table;
6932
- }
6933
-
6934
- tr.visible-md.visible-xs {
6935
- display: table-row !important;
6936
- }
6937
-
6938
- th.visible-md.visible-xs,
6939
- td.visible-md.visible-xs {
6940
- display: table-cell !important;
6941
- }
6942
- }
6943
-
6944
- @media (min-width: 768px) and (max-width: 991px) {
6945
- .visible-md.visible-sm {
6946
- display: block !important;
6947
- }
6948
-
6949
- table.visible-md.visible-sm {
6950
- display: table;
6951
- }
6952
-
6953
- tr.visible-md.visible-sm {
6954
- display: table-row !important;
6955
- }
6956
-
6957
- th.visible-md.visible-sm,
6958
- td.visible-md.visible-sm {
6959
- display: table-cell !important;
6960
- }
6961
- }
6962
-
6963
- @media (min-width: 992px) and (max-width: 1199px) {
6964
- .visible-md {
6965
- display: block !important;
6966
- }
6967
-
6968
- table.visible-md {
6969
- display: table;
6970
- }
6971
-
6972
- tr.visible-md {
6973
- display: table-row !important;
6974
- }
6975
-
6976
- th.visible-md,
6977
- td.visible-md {
6978
- display: table-cell !important;
6979
- }
6980
- }
6981
-
6982
- @media (min-width: 1200px) {
6983
- .visible-md.visible-lg {
6984
- display: block !important;
6985
- }
6986
-
6987
- table.visible-md.visible-lg {
6988
- display: table;
6989
- }
6990
-
6991
- tr.visible-md.visible-lg {
6992
- display: table-row !important;
6993
- }
6994
-
6995
- th.visible-md.visible-lg,
6996
- td.visible-md.visible-lg {
6997
- display: table-cell !important;
6998
- }
6999
- }
7000
-
7001
- .factory-bootstrap-330 .visible-lg,
7002
- .factory-bootstrap-330 tr.visible-lg,
7003
- .factory-bootstrap-330 th.visible-lg,
7004
- .factory-bootstrap-330 td.visible-lg {
7005
- display: none !important;
7006
- }
7007
-
7008
- @media (max-width: 767px) {
7009
- .visible-lg.visible-xs {
7010
- display: block !important;
7011
- }
7012
-
7013
- table.visible-lg.visible-xs {
7014
- display: table;
7015
- }
7016
-
7017
- tr.visible-lg.visible-xs {
7018
- display: table-row !important;
7019
- }
7020
-
7021
- th.visible-lg.visible-xs,
7022
- td.visible-lg.visible-xs {
7023
- display: table-cell !important;
7024
- }
7025
- }
7026
-
7027
- @media (min-width: 768px) and (max-width: 991px) {
7028
- .visible-lg.visible-sm {
7029
- display: block !important;
7030
- }
7031
-
7032
- table.visible-lg.visible-sm {
7033
- display: table;
7034
- }
7035
-
7036
- tr.visible-lg.visible-sm {
7037
- display: table-row !important;
7038
- }
7039
-
7040
- th.visible-lg.visible-sm,
7041
- td.visible-lg.visible-sm {
7042
- display: table-cell !important;
7043
- }
7044
- }
7045
-
7046
- @media (min-width: 992px) and (max-width: 1199px) {
7047
- .visible-lg.visible-md {
7048
- display: block !important;
7049
- }
7050
-
7051
- table.visible-lg.visible-md {
7052
- display: table;
7053
- }
7054
-
7055
- tr.visible-lg.visible-md {
7056
- display: table-row !important;
7057
- }
7058
-
7059
- th.visible-lg.visible-md,
7060
- td.visible-lg.visible-md {
7061
- display: table-cell !important;
7062
- }
7063
- }
7064
-
7065
- @media (min-width: 1200px) {
7066
- .visible-lg {
7067
- display: block !important;
7068
- }
7069
-
7070
- table.visible-lg {
7071
- display: table;
7072
- }
7073
-
7074
- tr.visible-lg {
7075
- display: table-row !important;
7076
- }
7077
-
7078
- th.visible-lg,
7079
- td.visible-lg {
7080
- display: table-cell !important;
7081
- }
7082
- }
7083
-
7084
- .factory-bootstrap-330 .hidden-xs {
7085
- display: block !important;
7086
- }
7087
-
7088
- .factory-bootstrap-330 table.hidden-xs {
7089
- display: table;
7090
- }
7091
-
7092
- .factory-bootstrap-330 tr.hidden-xs {
7093
- display: table-row !important;
7094
- }
7095
-
7096
- .factory-bootstrap-330 th.hidden-xs,
7097
- .factory-bootstrap-330 td.hidden-xs {
7098
- display: table-cell !important;
7099
- }
7100
-
7101
- @media (max-width: 767px) {
7102
- .hidden-xs,
7103
- tr.hidden-xs,
7104
- th.hidden-xs,
7105
- td.hidden-xs {
7106
- display: none !important;
7107
- }
7108
- }
7109
-
7110
- @media (min-width: 768px) and (max-width: 991px) {
7111
- .hidden-xs.hidden-sm,
7112
- tr.hidden-xs.hidden-sm,
7113
- th.hidden-xs.hidden-sm,
7114
- td.hidden-xs.hidden-sm {
7115
- display: none !important;
7116
- }
7117
- }
7118
-
7119
- @media (min-width: 992px) and (max-width: 1199px) {
7120
- .hidden-xs.hidden-md,
7121
- tr.hidden-xs.hidden-md,
7122
- th.hidden-xs.hidden-md,
7123
- td.hidden-xs.hidden-md {
7124
- display: none !important;
7125
- }
7126
- }
7127
-
7128
- @media (min-width: 1200px) {
7129
- .hidden-xs.hidden-lg,
7130
- tr.hidden-xs.hidden-lg,
7131
- th.hidden-xs.hidden-lg,
7132
- td.hidden-xs.hidden-lg {
7133
- display: none !important;
7134
- }
7135
- }
7136
-
7137
- .factory-bootstrap-330 .hidden-sm {
7138
- display: block !important;
7139
- }
7140
-
7141
- .factory-bootstrap-330 table.hidden-sm {
7142
- display: table;
7143
- }
7144
-
7145
- .factory-bootstrap-330 tr.hidden-sm {
7146
- display: table-row !important;
7147
- }
7148
-
7149
- .factory-bootstrap-330 th.hidden-sm,
7150
- .factory-bootstrap-330 td.hidden-sm {
7151
- display: table-cell !important;
7152
- }
7153
-
7154
- @media (max-width: 767px) {
7155
- .hidden-sm.hidden-xs,
7156
- tr.hidden-sm.hidden-xs,
7157
- th.hidden-sm.hidden-xs,
7158
- td.hidden-sm.hidden-xs {
7159
- display: none !important;
7160
- }
7161
- }
7162
-
7163
- @media (min-width: 768px) and (max-width: 991px) {
7164
- .hidden-sm,
7165
- tr.hidden-sm,
7166
- th.hidden-sm,
7167
- td.hidden-sm {
7168
- display: none !important;
7169
- }
7170
- }
7171
-
7172
- @media (min-width: 992px) and (max-width: 1199px) {
7173
- .hidden-sm.hidden-md,
7174
- tr.hidden-sm.hidden-md,
7175
- th.hidden-sm.hidden-md,
7176
- td.hidden-sm.hidden-md {
7177
- display: none !important;
7178
- }
7179
- }
7180
-
7181
- @media (min-width: 1200px) {
7182
- .hidden-sm.hidden-lg,
7183
- tr.hidden-sm.hidden-lg,
7184
- th.hidden-sm.hidden-lg,
7185
- td.hidden-sm.hidden-lg {
7186
- display: none !important;
7187
- }
7188
- }
7189
-
7190
- .factory-bootstrap-330 .hidden-md {
7191
- display: block !important;
7192
- }
7193
-
7194
- .factory-bootstrap-330 table.hidden-md {
7195
- display: table;
7196
- }
7197
-
7198
- .factory-bootstrap-330 tr.hidden-md {
7199
- display: table-row !important;
7200
- }
7201
-
7202
- .factory-bootstrap-330 th.hidden-md,
7203
- .factory-bootstrap-330 td.hidden-md {
7204
- display: table-cell !important;
7205
- }
7206
-
7207
- @media (max-width: 767px) {
7208
- .hidden-md.hidden-xs,
7209
- tr.hidden-md.hidden-xs,
7210
- th.hidden-md.hidden-xs,
7211
- td.hidden-md.hidden-xs {
7212
- display: none !important;
7213
- }
7214
- }
7215
-
7216
- @media (min-width: 768px) and (max-width: 991px) {
7217
- .hidden-md.hidden-sm,
7218
- tr.hidden-md.hidden-sm,
7219
- th.hidden-md.hidden-sm,
7220
- td.hidden-md.hidden-sm {
7221
- display: none !important;
7222
- }
7223
- }
7224
-
7225
- @media (min-width: 992px) and (max-width: 1199px) {
7226
- .hidden-md,
7227
- tr.hidden-md,
7228
- th.hidden-md,
7229
- td.hidden-md {
7230
- display: none !important;
7231
- }
7232
- }
7233
-
7234
- @media (min-width: 1200px) {
7235
- .hidden-md.hidden-lg,
7236
- tr.hidden-md.hidden-lg,
7237
- th.hidden-md.hidden-lg,
7238
- td.hidden-md.hidden-lg {
7239
- display: none !important;
7240
- }
7241
- }
7242
-
7243
- .factory-bootstrap-330 .hidden-lg {
7244
- display: block !important;
7245
- }
7246
-
7247
- .factory-bootstrap-330 table.hidden-lg {
7248
- display: table;
7249
- }
7250
-
7251
- .factory-bootstrap-330 tr.hidden-lg {
7252
- display: table-row !important;
7253
- }
7254
-
7255
- .factory-bootstrap-330 th.hidden-lg,
7256
- .factory-bootstrap-330 td.hidden-lg {
7257
- display: table-cell !important;
7258
- }
7259
-
7260
- @media (max-width: 767px) {
7261
- .factory-bootstrap-330 .hidden-lg.hidden-xs,
7262
- .factory-bootstrap-330 tr.hidden-lg.hidden-xs,
7263
- .factory-bootstrap-330 th.hidden-lg.hidden-xs,
7264
- .factory-bootstrap-330 td.hidden-lg.hidden-xs {
7265
- display: none !important;
7266
- }
7267
- }
7268
-
7269
- @media (min-width: 768px) and (max-width: 991px) {
7270
- .factory-bootstrap-330 .hidden-lg.hidden-sm,
7271
- .factory-bootstrap-330 tr.hidden-lg.hidden-sm,
7272
- .factory-bootstrap-330 th.hidden-lg.hidden-sm,
7273
- .factory-bootstrap-330 td.hidden-lg.hidden-sm {
7274
- display: none !important;
7275
- }
7276
- }
7277
-
7278
- @media (min-width: 992px) and (max-width: 1199px) {
7279
- .factory-bootstrap-330 .hidden-lg.hidden-md,
7280
- .factory-bootstrap-330 tr.hidden-lg.hidden-md,
7281
- .factory-bootstrap-330 th.hidden-lg.hidden-md,
7282
- .factory-bootstrap-330 td.hidden-lg.hidden-md {
7283
- display: none !important;
7284
- }
7285
- }
7286
-
7287
- @media (min-width: 1200px) {
7288
- .factory-bootstrap-330 .hidden-lg,
7289
- .factory-bootstrap-330 tr.hidden-lg,
7290
- .factory-bootstrap-330 th.hidden-lg,
7291
- .factory-bootstrap-330 td.hidden-lg {
7292
- display: none !important;
7293
- }
7294
- }
7295
-
7296
- .factory-bootstrap-330 .visible-print,
7297
- .factory-bootstrap-330 tr.visible-print,
7298
- .factory-bootstrap-330 th.visible-print,
7299
- .factory-bootstrap-330 td.visible-print {
7300
- display: none !important;
7301
- }
7302
-
7303
- @media print {
7304
- .factory-bootstrap-330 .visible-print {
7305
- display: block !important;
7306
- }
7307
-
7308
- .factory-bootstrap-330 table.visible-print {
7309
- display: table;
7310
- }
7311
-
7312
- .factory-bootstrap-330 tr.visible-print {
7313
- display: table-row !important;
7314
- }
7315
-
7316
- .factory-bootstrap-330 th.visible-print,
7317
- .factory-bootstrap-330 td.visible-print {
7318
- display: table-cell !important;
7319
- }
7320
-
7321
- .factory-bootstrap-330 .hidden-print,
7322
- .factory-bootstrap-330 tr.hidden-print,
7323
- .factory-bootstrap-330 th.hidden-print,
7324
- .factory-bootstrap-330 td.hidden-print {
7325
- display: none !important;
7326
- }
7327
- }
7328
-
7329
- /*!
7330
- * Factory Default Bootstrap Theme
7331
- *
7332
- * The code is based on Bootstrap v2.1.1
7333
- *
7334
- * Bootstrap v3.0.3 (http://getbootstrap.com)
7335
- * Copyright 2013 Twitter, Inc.
7336
- * Licensed under http://www.apache.org/licenses/LICENSE-2.0
7337
- *
7338
- * @author Paul Kashtanoff <paul@byonepress.com>
7339
- * @copyright (c) 2013, OnePress Ltd
7340
- *
7341
- * @package factory-bootstrap
7342
- * @since 1.0.0
7343
- */
7344
-
7345
- .factory-bootstrap-330 .btn-default,
7346
- .factory-bootstrap-330 .btn-primary,
7347
- .factory-bootstrap-330 .btn-success,
7348
- .factory-bootstrap-330 .btn-info,
7349
- .factory-bootstrap-330 .btn-warning,
7350
- .factory-bootstrap-330 .btn-danger {
7351
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
7352
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
7353
- }
7354
-
7355
- .factory-bootstrap-330 .btn-default:active,
7356
- .factory-bootstrap-330 .btn-primary:active,
7357
- .factory-bootstrap-330 .btn-success:active,
7358
- .factory-bootstrap-330 .btn-info:active,
7359
- .factory-bootstrap-330 .btn-warning:active,
7360
- .factory-bootstrap-330 .btn-danger:active,
7361
- .factory-bootstrap-330 .btn-default.active,
7362
- .factory-bootstrap-330 .btn-primary.active,
7363
- .factory-bootstrap-330 .btn-success.active,
7364
- .factory-bootstrap-330 .btn-info.active,
7365
- .factory-bootstrap-330 .btn-warning.active,
7366
- .factory-bootstrap-330 .btn-danger.active {
7367
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
7368
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
7369
- }
7370
-
7371
- .factory-bootstrap-330 .btn:active,
7372
- .factory-bootstrap-330 .btn.active {
7373
- background-image: none;
7374
- }
7375
-
7376
- .factory-bootstrap-330 .btn-default {
7377
- background: #fafafa;
7378
- color: #555;
7379
- border-color: #ccc;
7380
- background: #f7f7f7;
7381
- -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0, 0, 0, .08);
7382
- box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0, 0, 0, .08);
7383
- vertical-align: top;
7384
- }
7385
-
7386
- .factory-bootstrap-330 .btn-default:active,
7387
- .factory-bootstrap-330 .btn-default.active {
7388
- background-color: #fff;
7389
- border-color: #dbdbdb;
7390
- }
7391
-
7392
- .factory-bootstrap-330 .btn-gold {
7393
- font-weight: bold;
7394
- padding: 7px 12px;
7395
- cursor: pointer;
7396
- line-height: 16px;
7397
- display: inline-block;
7398
- border-radius: 2px;
7399
- -moz-border-radius: 2px; /*gecko - mozilla*/
7400
- -webkit-border-radius: 2px; /*new webkit - Chrome and Safari*/
7401
- box-shadow: #e3e3e3 0 1px 1px;
7402
- -moz-box-shadow: 0px 1px 1px rgba(000, 000, 000, 0.1), inset 0px 1px 1px rgba(255, 255, 255, 0.7);
7403
- -webkit-box-shadow: 0px 1px 1px rgba(000, 000, 000, 0.1), inset 0px 1px 1px rgba(255, 255, 255, 0.7);
7404
- text-shadow: 1px 1px 0px #ffe8b2;
7405
- color: #7c5d1b;
7406
- border: 1px solid #d6a437;
7407
- background: #feeb80; /*fallback for non-CSS3 browsers*/
7408
- }
7409
-
7410
- .factory-bootstrap-330 .btn-gold:hover,
7411
- .factory-bootstrap-330 .btn-gold:focus {
7412
- background: #fef0a1;
7413
- }
7414
-
7415
- .factory-bootstrap-330 .btn-gold:active,
7416
- .factory-bootstrap-330 .btn-gold.active {
7417
- background: #fef0a1;
7418
- -webkit-box-shadow: inset 0 3px 8px 0 #f8ba36;
7419
- box-shadow: inset 0 3px 8px 0 #f8ba36;
7420
- }
7421
-
7422
- .factory-bootstrap-330 .btn-primary {
7423
- background: #2ea2cc;
7424
- border-color: #0074a2;
7425
- -webkit-box-shadow: inset 0 1px 0 rgba(120, 200, 230, .5), 0 1px 0 rgba(0, 0, 0, .15);
7426
- box-shadow: inset 0 1px 0 rgba(120, 200, 230, .5), 0 1px 0 rgba(0, 0, 0, .15);
7427
- color: #fff;
7428
- text-decoration: none;
7429
- }
7430
-
7431
- .factory-bootstrap-330 .btn-primary:hover,
7432
- .factory-bootstrap-330 .btn-primary:focus {
7433
- background: #1e8cbe;
7434
- border-color: #0074a2;
7435
- -webkit-box-shadow: inset 0 1px 0 rgba(120, 200, 230, .6);
7436
- box-shadow: inset 0 1px 0 rgba(120, 200, 230, .6);
7437
- color: #fff;
7438
- }
7439
-
7440
- .factory-bootstrap-330 .btn-primary:active,
7441
- .factory-bootstrap-330 .btn-primary.active {
7442
- background-color: #2d6ca2;
7443
- border-color: #2b669a;
7444
- }
7445
-
7446
- .factory-bootstrap-330 .btn-success {
7447
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
7448
- background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
7449
- background-repeat: repeat-x;
7450
- border-color: #3e8f3e;
7451
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
7452
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
7453
- }
7454
-
7455
- .factory-bootstrap-330 .btn-success:hover,
7456
- .factory-bootstrap-330 .btn-success:focus {
7457
- background-color: #419641;
7458
- background-position: 0 -15px;
7459
- }
7460
-
7461
- .factory-bootstrap-330 .btn-success:active,
7462
- .factory-bootstrap-330 .btn-success.active {
7463
- background-color: #419641;
7464
- border-color: #3e8f3e;
7465
- }
7466
-
7467
- .factory-bootstrap-330 .btn-warning {
7468
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
7469
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
7470
- background-repeat: repeat-x;
7471
- border-color: #e38d13;
7472
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
7473
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
7474
- }
7475
-
7476
- .factory-bootstrap-330 .btn-warning:hover,
7477
- .factory-bootstrap-330 .btn-warning:focus {
7478
- background-color: #eb9316;
7479
- background-position: 0 -15px;
7480
- }
7481
-
7482
- .factory-bootstrap-330 .btn-warning:active,
7483
- .factory-bootstrap-330 .btn-warning.active {
7484
- background-color: #eb9316;
7485
- border-color: #e38d13;
7486
- }
7487
-
7488
- .factory-bootstrap-330 .btn-danger {
7489
- color: #ffffff;
7490
- background: #d9534f;
7491
- border-color: #d43f3a;
7492
- }
7493
-
7494
- .factory-bootstrap-330 .btn-danger:hover,
7495
- .factory-bootstrap-330 .btn-danger:focus,
7496
- .factory-bootstrap-330 .btn-danger:active,
7497
- .factory-bootstrap-330 .btn-danger.active,
7498
- .factory-bootstrap-330 .open .dropdown-toggle.btn-danger {
7499
- color: #ffffff;
7500
- background-color: #d2322d;
7501
- border-color: #ac2925;
7502
- }
7503
-
7504
- .factory-bootstrap-330 .btn-info {
7505
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
7506
- background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
7507
- background-repeat: repeat-x;
7508
- border-color: #28a4c9;
7509
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
7510
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
7511
- }
7512
-
7513
- .factory-bootstrap-330 .btn-info:hover,
7514
- .factory-bootstrap-330 .btn-info:focus {
7515
- background-color: #2aabd2;
7516
- background-position: 0 -15px;
7517
- }
7518
-
7519
- .factory-bootstrap-330 .btn-info:active,
7520
- .factory-bootstrap-330 .btn-info.active {
7521
- background-color: #2aabd2;
7522
- border-color: #28a4c9;
7523
- }
7524
-
7525
- .factory-bootstrap-330 .thumbnail,
7526
- .factory-bootstrap-330 .img-thumbnail {
7527
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
7528
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
7529
- }
7530
-
7531
- .factory-bootstrap-330 .dropdown-menu > li > a:hover,
7532
- .factory-bootstrap-330 .dropdown-menu > li > a:focus {
7533
- background-color: #e8e8e8;
7534
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
7535
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
7536
- background-repeat: repeat-x;
7537
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
7538
- }
7539
-
7540
- .factory-bootstrap-330 .dropdown-menu > .active > a,
7541
- .factory-bootstrap-330 .dropdown-menu > .active > a:hover,
7542
- .factory-bootstrap-330 .dropdown-menu > .active > a:focus {
7543
- background-color: #357ebd;
7544
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
7545
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
7546
- background-repeat: repeat-x;
7547
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
7548
- }
7549
-
7550
- .factory-bootstrap-330 .navbar-default {
7551
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
7552
- background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
7553
- background-repeat: repeat-x;
7554
- border-radius: 4px;
7555
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
7556
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
7557
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
7558
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
7559
- }
7560
-
7561
- .factory-bootstrap-330 .navbar-default .navbar-nav > .active > a {
7562
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
7563
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
7564
- background-repeat: repeat-x;
7565
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
7566
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
7567
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
7568
- }
7569
-
7570
- .factory-bootstrap-330 .navbar-brand,
7571
- .factory-bootstrap-330 .navbar-nav > li > a {
7572
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
7573
- }
7574
-
7575
- .factory-bootstrap-330 .navbar-inverse {
7576
- background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);
7577
- background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);
7578
- background-repeat: repeat-x;
7579
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
7580
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
7581
- }
7582
-
7583
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > .active > a {
7584
- background-image: -webkit-linear-gradient(top, #222222 0%, #282828 100%);
7585
- background-image: linear-gradient(to bottom, #222222 0%, #282828 100%);
7586
- background-repeat: repeat-x;
7587
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
7588
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
7589
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
7590
- }
7591
-
7592
- .factory-bootstrap-330 .navbar-inverse .navbar-brand,
7593
- .factory-bootstrap-330 .navbar-inverse .navbar-nav > li > a {
7594
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
7595
- }
7596
-
7597
- .factory-bootstrap-330 .navbar-static-top,
7598
- .factory-bootstrap-330 .navbar-fixed-top,
7599
- .factory-bootstrap-330 .navbar-fixed-bottom {
7600
- border-radius: 0;
7601
- }
7602
-
7603
- .factory-bootstrap-330 .alert {
7604
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
7605
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
7606
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
7607
- }
7608
-
7609
- .factory-bootstrap-330 .alert .actions {
7610
- padding-top: 10px;
7611
- }
7612
-
7613
- .factory-bootstrap-330 .alert-success {
7614
- color: #3c763d;
7615
- background-color: #dff0d8;
7616
- border-bottom: 2px solid #c8e5bc;
7617
- }
7618
-
7619
- .factory-bootstrap-330 .alert-info {
7620
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
7621
- background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
7622
- background-repeat: repeat-x;
7623
- border-color: #9acfea;
7624
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
7625
- }
7626
-
7627
- .factory-bootstrap-330 .alert {
7628
- text-shadow: none;
7629
- box-shadow: none;
7630
-
7631
- margin: 0px;
7632
- margin-top: 10px;
7633
- margin-bottom: 10px;
7634
- padding: 10px;
7635
- }
7636
-
7637
- .factory-bootstrap-330 .alert-warning,
7638
- .factory-bootstrap-330 .alert-normal {
7639
- background: #fcf8e3;
7640
- border: 0px;
7641
- color: #8a6d3b;
7642
- border: 1px solid #b8823b;
7643
- }
7644
-
7645
- .factory-bootstrap-330 .alert-danger {
7646
- background: #cf4944;
7647
- color: #fff;
7648
- border-bottom: 2px solid #b23e3a;
7649
- }
7650
-
7651
- .factory-bootstrap-330 .alert-error a:not(.btn),
7652
- .factory-bootstrap-330 .alert-danger a:not(.btn) {
7653
- color: #fff;
7654
- }
7655
-
7656
- .factory-bootstrap-330 .progress {
7657
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
7658
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
7659
- background-repeat: repeat-x;
7660
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
7661
- }
7662
-
7663
- .factory-bootstrap-330 .progress-bar {
7664
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
7665
- background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
7666
- background-repeat: repeat-x;
7667
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
7668
- }
7669
-
7670
- .factory-bootstrap-330 .progress-bar-success {
7671
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
7672
- background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
7673
- background-repeat: repeat-x;
7674
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
7675
- }
7676
-
7677
- .factory-bootstrap-330 .progress-bar-info {
7678
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
7679
- background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
7680
- background-repeat: repeat-x;
7681
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
7682
- }
7683
-
7684
- .factory-bootstrap-330 .progress-bar-warning {
7685
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
7686
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
7687
- background-repeat: repeat-x;
7688
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
7689
- }
7690
-
7691
- .factory-bootstrap-330 .progress-bar-danger {
7692
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
7693
- background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
7694
- background-repeat: repeat-x;
7695
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
7696
- }
7697
-
7698
- .factory-bootstrap-330 .list-group {
7699
- border-radius: 4px;
7700
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
7701
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
7702
- }
7703
-
7704
- .factory-bootstrap-330 .list-group-item.active,
7705
- .factory-bootstrap-330 .list-group-item.active:hover,
7706
- .factory-bootstrap-330 .list-group-item.active:focus {
7707
- text-shadow: 0 -1px 0 #3071a9;
7708
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
7709
- background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
7710
- background-repeat: repeat-x;
7711
- border-color: #3278b3;
7712
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
7713
- }
7714
-
7715
- .factory-bootstrap-330 .panel {
7716
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
7717
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
7718
- }
7719
-
7720
- .factory-bootstrap-330 .panel-default > .panel-heading {
7721
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
7722
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
7723
- background-repeat: repeat-x;
7724
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
7725
- }
7726
-
7727
- .factory-bootstrap-330 .panel-primary > .panel-heading {
7728
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
7729
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
7730
- background-repeat: repeat-x;
7731
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
7732
- }
7733
-
7734
- .factory-bootstrap-330 .panel-success > .panel-heading {
7735
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
7736
- background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
7737
- background-repeat: repeat-x;
7738
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
7739
- }
7740
-
7741
- .factory-bootstrap-330 .panel-info > .panel-heading {
7742
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
7743
- background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
7744
- background-repeat: repeat-x;
7745
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
7746
- }
7747
-
7748
- .factory-bootstrap-330 .panel-warning > .panel-heading {
7749
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
7750
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
7751
- background-repeat: repeat-x;
7752
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
7753
- }
7754
-
7755
- .factory-bootstrap-330 .panel-danger > .panel-heading {
7756
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
7757
- background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
7758
- background-repeat: repeat-x;
7759
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
7760
- }
7761
-
7762
- .factory-bootstrap-330 .well {
7763
- background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
7764
- background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
7765
- background-repeat: repeat-x;
7766
- border-color: #dcdcdc;
7767
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
7768
- -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
7769
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
7770
- }
7771
-
7772
- /**
7773
- * Extra
7774
- */
7775
-
7776
- .factory-bootstrap-330 .factory-after {
7777
- margin-left: 7px;
7778
- display: inline-block;
7779
- }
7780
-
7781
- .factory-bootstrap-330 .factory-hidden {
7782
- display: none;
7783
- }
7784
-
7785
- .factory-bootstrap-330 .factory-ajax-loader {
7786
- width: 25px;
7787
- height: 25px;
7788
- background: url("../assets/images/loader-sm-tr.gif")
7789
- }
7790
-
7791
- .factory-control-error {
7792
-
7793
- background-color: rgba(0, 0, 0, 0.8);
7794
- white-space: normal;
7795
- z-index: 10;
7796
- font-weight: normal;
7797
- line-height: 150%;
7798
- border-radius: 4px;
7799
- color: #fff;
7800
- font-size: 13px;
7801
- margin-top: 5px;
7802
-
7803
- padding: 4px 10px 3px 10px;
7804
- max-width: 500px;
7805
- display: inline-block;
7806
- }
7807
-
7808
- .factory-control-error i {
7809
- margin: 0 7px 0 1px;
7810
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/flat/css/bootstrap.datetimepicker.css DELETED
@@ -1,432 +0,0 @@
1
- /*!
2
- * Datetimepicker for Bootstrap 3
3
- * version : 4.17.47
4
- * https://github.com/Eonasdan/bootstrap-datetimepicker/
5
- */
6
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget {
7
- list-style: none;
8
- }
9
-
10
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu {
11
- display: block;
12
- margin: 2px 0;
13
- padding: 4px;
14
- width: 19em;
15
- }
16
-
17
- @media (min-width: 768px) {
18
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
19
- width: 38em;
20
- }
21
- }
22
-
23
- @media (min-width: 992px) {
24
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
25
- width: 38em;
26
- }
27
- }
28
-
29
- @media (min-width: 1200px) {
30
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
31
- width: 38em;
32
- }
33
- }
34
-
35
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu:before,
36
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu:after {
37
- content: '';
38
- display: inline-block;
39
- position: absolute;
40
- }
41
-
42
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {
43
- border-left: 7px solid transparent;
44
- border-right: 7px solid transparent;
45
- border-bottom: 7px solid #ccc;
46
- border-bottom-color: rgba(0, 0, 0, 0.2);
47
- top: -7px;
48
- left: 7px;
49
- }
50
-
51
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {
52
- border-left: 6px solid transparent;
53
- border-right: 6px solid transparent;
54
- border-bottom: 6px solid white;
55
- top: -6px;
56
- left: 8px;
57
- }
58
-
59
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu.top:before {
60
- border-left: 7px solid transparent;
61
- border-right: 7px solid transparent;
62
- border-top: 7px solid #ccc;
63
- border-top-color: rgba(0, 0, 0, 0.2);
64
- bottom: -7px;
65
- left: 6px;
66
- }
67
-
68
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu.top:after {
69
- border-left: 6px solid transparent;
70
- border-right: 6px solid transparent;
71
- border-top: 6px solid white;
72
- bottom: -6px;
73
- left: 7px;
74
- }
75
-
76
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before {
77
- left: auto;
78
- right: 6px;
79
- }
80
-
81
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after {
82
- left: auto;
83
- right: 7px;
84
- }
85
-
86
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .list-unstyled {
87
- margin: 0;
88
- }
89
-
90
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget a[data-action] {
91
- padding: 6px 0;
92
- }
93
-
94
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget a[data-action]:active {
95
- box-shadow: none;
96
- }
97
-
98
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .timepicker-hour,
99
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .timepicker-minute,
100
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .timepicker-second {
101
- width: 54px;
102
- font-weight: bold;
103
- font-size: 1.2em;
104
- margin: 0;
105
- }
106
-
107
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget button[data-action] {
108
- padding: 6px;
109
- }
110
-
111
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after {
112
- position: absolute;
113
- width: 1px;
114
- height: 1px;
115
- margin: -1px;
116
- padding: 0;
117
- overflow: hidden;
118
- clip: rect(0, 0, 0, 0);
119
- border: 0;
120
- content: "Increment Hours";
121
- }
122
-
123
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after {
124
- position: absolute;
125
- width: 1px;
126
- height: 1px;
127
- margin: -1px;
128
- padding: 0;
129
- overflow: hidden;
130
- clip: rect(0, 0, 0, 0);
131
- border: 0;
132
- content: "Increment Minutes";
133
- }
134
-
135
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after {
136
- position: absolute;
137
- width: 1px;
138
- height: 1px;
139
- margin: -1px;
140
- padding: 0;
141
- overflow: hidden;
142
- clip: rect(0, 0, 0, 0);
143
- border: 0;
144
- content: "Decrement Hours";
145
- }
146
-
147
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after {
148
- position: absolute;
149
- width: 1px;
150
- height: 1px;
151
- margin: -1px;
152
- padding: 0;
153
- overflow: hidden;
154
- clip: rect(0, 0, 0, 0);
155
- border: 0;
156
- content: "Decrement Minutes";
157
- }
158
-
159
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after {
160
- position: absolute;
161
- width: 1px;
162
- height: 1px;
163
- margin: -1px;
164
- padding: 0;
165
- overflow: hidden;
166
- clip: rect(0, 0, 0, 0);
167
- border: 0;
168
- content: "Show Hours";
169
- }
170
-
171
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after {
172
- position: absolute;
173
- width: 1px;
174
- height: 1px;
175
- margin: -1px;
176
- padding: 0;
177
- overflow: hidden;
178
- clip: rect(0, 0, 0, 0);
179
- border: 0;
180
- content: "Show Minutes";
181
- }
182
-
183
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after {
184
- position: absolute;
185
- width: 1px;
186
- height: 1px;
187
- margin: -1px;
188
- padding: 0;
189
- overflow: hidden;
190
- clip: rect(0, 0, 0, 0);
191
- border: 0;
192
- content: "Toggle AM/PM";
193
- }
194
-
195
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after {
196
- position: absolute;
197
- width: 1px;
198
- height: 1px;
199
- margin: -1px;
200
- padding: 0;
201
- overflow: hidden;
202
- clip: rect(0, 0, 0, 0);
203
- border: 0;
204
- content: "Clear the picker";
205
- }
206
-
207
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .btn[data-action="today"]::after {
208
- position: absolute;
209
- width: 1px;
210
- height: 1px;
211
- margin: -1px;
212
- padding: 0;
213
- overflow: hidden;
214
- clip: rect(0, 0, 0, 0);
215
- border: 0;
216
- content: "Set the date to today";
217
- }
218
-
219
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .picker-switch {
220
- text-align: center;
221
- }
222
-
223
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .picker-switch::after {
224
- position: absolute;
225
- width: 1px;
226
- height: 1px;
227
- margin: -1px;
228
- padding: 0;
229
- overflow: hidden;
230
- clip: rect(0, 0, 0, 0);
231
- border: 0;
232
- content: "Toggle Date and Time Screens";
233
- }
234
-
235
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .picker-switch td {
236
- padding: 0;
237
- margin: 0;
238
- height: auto;
239
- width: auto;
240
- line-height: inherit;
241
- }
242
-
243
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .picker-switch td span {
244
- line-height: 2.5;
245
- height: 2.5em;
246
- width: 100%;
247
- }
248
-
249
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table {
250
- width: 100%;
251
- margin: 0;
252
- }
253
-
254
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td,
255
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table th {
256
- text-align: center;
257
- border-radius: 4px;
258
- }
259
-
260
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table th {
261
- height: 20px;
262
- line-height: 20px;
263
- width: 20px;
264
- }
265
-
266
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table th.picker-switch {
267
- width: 145px;
268
- }
269
-
270
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table th.disabled,
271
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table th.disabled:hover {
272
- background: none;
273
- color: #777777;
274
- cursor: not-allowed;
275
- }
276
-
277
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table th.prev::after {
278
- position: absolute;
279
- width: 1px;
280
- height: 1px;
281
- margin: -1px;
282
- padding: 0;
283
- overflow: hidden;
284
- clip: rect(0, 0, 0, 0);
285
- border: 0;
286
- content: "Previous Month";
287
- }
288
-
289
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table th.next::after {
290
- position: absolute;
291
- width: 1px;
292
- height: 1px;
293
- margin: -1px;
294
- padding: 0;
295
- overflow: hidden;
296
- clip: rect(0, 0, 0, 0);
297
- border: 0;
298
- content: "Next Month";
299
- }
300
-
301
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table thead tr:first-child th {
302
- cursor: pointer;
303
- }
304
-
305
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table thead tr:first-child th:hover {
306
- background: #eeeeee;
307
- }
308
-
309
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td {
310
- height: 54px;
311
- line-height: 54px;
312
- width: 54px;
313
- }
314
-
315
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.cw {
316
- font-size: .8em;
317
- height: 20px;
318
- line-height: 20px;
319
- color: #777777;
320
- }
321
-
322
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.day {
323
- height: 20px;
324
- line-height: 20px;
325
- width: 20px;
326
- }
327
-
328
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.day:hover,
329
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.hour:hover,
330
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.minute:hover,
331
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.second:hover {
332
- background: #eeeeee;
333
- cursor: pointer;
334
- }
335
-
336
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.old,
337
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.new {
338
- color: #777777;
339
- }
340
-
341
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.today {
342
- position: relative;
343
- }
344
-
345
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.today:before {
346
- content: '';
347
- display: inline-block;
348
- border: solid transparent;
349
- border-width: 0 0 7px 7px;
350
- border-bottom-color: #337ab7;
351
- border-top-color: rgba(0, 0, 0, 0.2);
352
- position: absolute;
353
- bottom: 4px;
354
- right: 4px;
355
- }
356
-
357
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.active,
358
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.active:hover {
359
- background-color: #337ab7;
360
- color: #fff;
361
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
362
- }
363
-
364
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.active.today:before {
365
- border-bottom-color: #fff;
366
- }
367
-
368
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.disabled,
369
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td.disabled:hover {
370
- background: none;
371
- color: #777777;
372
- cursor: not-allowed;
373
- }
374
-
375
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td span {
376
- display: inline-block;
377
- width: 54px;
378
- height: 54px;
379
- line-height: 54px;
380
- margin: 2px 1.5px;
381
- cursor: pointer;
382
- border-radius: 4px;
383
- }
384
-
385
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td span:hover {
386
- background: #eeeeee;
387
- }
388
-
389
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td span.active {
390
- background-color: #337ab7;
391
- color: #fff;
392
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
393
- }
394
-
395
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td span.old {
396
- color: #777777;
397
- }
398
-
399
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td span.disabled,
400
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget table td span.disabled:hover {
401
- background: none;
402
- color: #777777;
403
- cursor: not-allowed;
404
- }
405
-
406
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.usetwentyfour td.hour {
407
- height: 27px;
408
- line-height: 27px;
409
- }
410
-
411
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget.wider {
412
- width: 21em;
413
- }
414
-
415
- .factory-bootstrap-330 .bootstrap-datetimepicker-widget .datepicker-decades .decade {
416
- line-height: 1.8em !important;
417
- }
418
-
419
- .factory-bootstrap-330 .input-group.date .input-group-addon {
420
- cursor: pointer;
421
- }
422
-
423
- .factory-bootstrap-330 .sr-only {
424
- position: absolute;
425
- width: 1px;
426
- height: 1px;
427
- margin: -1px;
428
- padding: 0;
429
- overflow: hidden;
430
- clip: rect(0, 0, 0, 0);
431
- border: 0;
432
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/flat/css/bootstrap.form-group.css DELETED
@@ -1,59 +0,0 @@
1
- /**
2
- * Form Groups
3
- */
4
-
5
- .factory-bootstrap-330 .factory-form-group .factory-legend {
6
- padding: 9px 12px;
7
- background-color: #f9f9f9;
8
- }
9
-
10
- .factory-bootstrap-330 .factory-form-group .factory-title {
11
- font-weight: bold;
12
- font-size: 14px;
13
- line-height: 14px;
14
- color: #555;
15
- margin: 0px;
16
- }
17
-
18
- .factory-bootstrap-330 .factory-form-group .factory-hint-icon {
19
- display: block;
20
- width: 16px;
21
- height: 16px;
22
- line-height: 13px;
23
- padding: 0;
24
- font-size: 11px;
25
- text-align: center;
26
- position: absolute;
27
- top: -5px;
28
- right: -3px;
29
- color: #fff;
30
- background: #E91E63;
31
- border-radius: 3px;
32
- }
33
-
34
- .factory-bootstrap-330 .factory-form-group .factory-hint-icon.factory-hint-icon-green {
35
- background: #8bc34a;
36
- }
37
-
38
- .factory-bootstrap-330 .factory-form-group .factory-hint-icon.factory-hint-icon-grey {
39
- background: #9e9e9e;
40
- }
41
-
42
- .factory-bootstrap-330 .factory-form-group .factory-hint-icon.factory-hint-icon-red {
43
- background: #E91E63;
44
- }
45
-
46
- .factory-bootstrap-330 .factory-form-group .factory-hint {
47
- margin: 0px;
48
- font-size: 12px;
49
- line-height: 16px;
50
- margin-top: 6px;
51
- }
52
-
53
- .factory-bootstrap-330 .factory-form-group + .factory-form-group {
54
- margin-top: 30px;
55
- }
56
-
57
- .factory-bootstrap-330 .factory-form-group legend + .control-group {
58
- margin-top: 0px;
59
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/flat/css/bootstrap.light.css DELETED
@@ -1,48 +0,0 @@
1
- .factory-bootstrap-330 .btn-primary {
2
- background: #04a4cc;
3
- border-color: #037c9a;
4
- color: white;
5
- -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15);
6
- box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15);
7
- }
8
- .factory-bootstrap-330 .btn-primary:hover,
9
- .factory-bootstrap-330 .btn-primary:focus {
10
- background: #0384a4;
11
- border-color: #036881;
12
- color: white;
13
- -webkit-box-shadow: inset 0 1px 0 #09cafa, 0 1px 0 rgba(0, 0, 0, 0.15);
14
- box-shadow: inset 0 1px 0 #09cafa, 0 1px 0 rgba(0, 0, 0, 0.15);
15
- }
16
- .factory-bootstrap-330 .btn-primary:active {
17
- background: #0384a4;
18
- border-color: #036881;
19
- color: white;
20
- -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
21
- box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
22
- }
23
- .factory-bootstrap-330 .btn-primary[disabled],
24
- .factory-bootstrap-330 .btn-primary:disabled {
25
- color: #c7cfd1 !important;
26
- background: #0384a4 !important;
27
- border-color: #036881 !important;
28
- text-shadow: none !important;
29
- }
30
-
31
- .factory-bootstrap-330 .btn-group .btn.active.value {
32
- background-color: #04a4cc;
33
- -webkit-box-shadow: inset 0 1px 2px #037c9a;
34
- box-shadow: inset 0 1px 2px #037c9a;
35
- border-top: 1px solid #037c9a;
36
- border-bottom: 1px solid #037c9a;
37
- border-left: 1px solid #037c9a;
38
- }
39
-
40
- .factory-bootstrap-330 .pagination > .active > a,
41
- .factory-bootstrap-330 .pagination > .active > span,
42
- .factory-bootstrap-330 .pagination > .active > a:hover,
43
- .factory-bootstrap-330 .pagination > .active > span:hover,
44
- .factory-bootstrap-330 .pagination > .active > a:focus,
45
- .factory-bootstrap-330 .pagination > .active > span:focus {
46
- background-color: #04a4cc;
47
- border-color: #037c9a;
48
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/flat/css/bootstrap.separator.css DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * Separator
3
- */
4
- .factory-bootstrap-330 .factory-separator {
5
- border-bottom: 1px solid #f9f9f9;
6
- border-top: 1px solid #d1d1d1;
7
- margin-bottom: 25px;
8
- }
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/flat/css/control.checkbox.css DELETED
@@ -1,102 +0,0 @@
1
- #side-sortables .factory-bootstrap-330 .factory-buttons-way {
2
- float: right;
3
- position: relative;
4
- top: -25px;
5
- left: 5px;
6
- border: 3px solid #f9f9f9;
7
- border-radius: 4px;
8
- }
9
-
10
- .factory-bootstrap-330 .factory-buttons-way {
11
- border: 3px solid #f9f9f9;
12
- border-radius: 4px;
13
- }
14
-
15
- .factory-bootstrap-330 .factory-buttons-way button {
16
- padding-left: 10px;
17
- padding-right: 10px;
18
- }
19
-
20
- .factory-bootstrap-330 .factory-buttons-way .factory-on.active {
21
- text-shadow: none;
22
- color: #fff;
23
- background-color: #33aad5;
24
- -webkit-box-shadow: inset 0 1px 1px #0074a2;
25
- box-shadow: inset 0 1px 3px #0074a2;
26
- border-top: 1px solid #0074a2;
27
- border-bottom: 1px solid #0074a2;
28
- border-left: 1px solid #0074a2;
29
- }
30
-
31
- .factory-bootstrap-330 .factory-checkbox-tumbler-hint {
32
- margin-top: 5px;
33
- }
34
-
35
- .factory-bootstrap-330 .factory-checkbox-tumbler-hint .factory-tumbler-content {
36
- display: inline-block;
37
- background-color: #ffffdd;
38
- padding: 1px 5px;
39
- }
40
-
41
- .admin-color-light .factory-bootstrap-330 .factory-buttons-way .factory-on.active {
42
- background-color: #04a4cc;
43
- -webkit-box-shadow: inset 0 1px 2px #037c9a;
44
- box-shadow: inset 0 1px 2px #037c9a;
45
- border-top: 1px solid #037c9a;
46
- border-bottom: 1px solid #037c9a;
47
- border-left: 1px solid #037c9a;
48
- }
49
-
50
- .admin-color-blue .factory-bootstrap-330 .factory-buttons-way .factory-on.active {
51
- background-color: #e1a948;
52
- -webkit-box-shadow: inset 0 1px 2px #d39323;
53
- box-shadow: inset 0 1px 2px #d39323;
54
- border-top: 1px solid #d39323;
55
- border-bottom: 1px solid #d39323;
56
- border-left: 1px solid #d39323;
57
- }
58
-
59
- .admin-color-coffee .factory-bootstrap-330 .factory-buttons-way .factory-on.active {
60
- background-color: #c7a589;
61
- -webkit-box-shadow: inset 0 1px 2px #b78a66;
62
- box-shadow: inset 0 1px 2px #b78a66;
63
- border-top: 1px solid #b78a66;
64
- border-bottom: 1px solid #b78a66;
65
- border-left: 1px solid #b78a66;
66
- }
67
-
68
- .admin-color-ectoplasm .factory-bootstrap-330 .factory-buttons-way .factory-on.active {
69
- background-color: #a3b745;
70
- -webkit-box-shadow: inset 0 1px 2px #839237;
71
- box-shadow: inset 0 1px 2px #839237;
72
- border-top: 1px solid #839237;
73
- border-bottom: 1px solid #839237;
74
- border-left: 1px solid #839237;
75
- }
76
-
77
- .admin-color-midnight .factory-bootstrap-330 .factory-buttons-way .factory-on.active {
78
- background-color: #e14d43;
79
- -webkit-box-shadow: inset 0 1px 2px #d02a21;
80
- box-shadow: inset 0 1px 2px #d02a21;
81
- border-top: 1px solid #d02a21;
82
- border-bottom: 1px solid #d02a21;
83
- border-left: 1px solid #d02a21;
84
- }
85
-
86
- .admin-color-ocean .factory-bootstrap-330 .factory-buttons-way .factory-on.active {
87
- background-color: #9ebaa0;
88
- -webkit-box-shadow: inset 0 1px 2px #80a583;
89
- box-shadow: inset 0 1px 2px #80a583;
90
- border-top: 1px solid #80a583;
91
- border-bottom: 1px solid #80a583;
92
- border-left: 1px solid #80a583;
93
- }
94
-
95
- .admin-color-sunrise .factory-bootstrap-330 .factory-buttons-way .factory-on.active {
96
- background-color: #dd823b;
97
- -webkit-box-shadow: inset 0 1px 2px #c36822;
98
- box-shadow: inset 0 1px 2px #c36822;
99
- border-top: 1px solid #c36822;
100
- border-bottom: 1px solid #c36822;
101
- border-left: 1px solid #c36822;
102
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/flat/css/control.dropdown.css DELETED
@@ -1,92 +0,0 @@
1
- /**
2
- * Dropdown As Buttons
3
- */
4
-
5
- .factory-bootstrap-330 .factory-dropdown.factory-buttons-way .fa {
6
- margin-right: 6px;
7
- position: relative;
8
- }
9
- .factory-bootstrap-330 .factory-dropdown.factory-buttons-way {
10
- border: 0px;
11
- border-radius: 0px;
12
- }
13
-
14
- .factory-bootstrap-330 .factory-hints .factory-hint {
15
- margin-top: 5px;
16
- display: inline-block;
17
- background-color: #ffffdd;
18
- padding: 1px 5px;
19
- }
20
-
21
- .admin-color-light .factory-bootstrap-330 .factory-dropdown.factory-buttons-way .active {
22
- background-color: #04a4cc;
23
- -webkit-box-shadow: inset 0 1px 2px #037c9a;
24
- box-shadow: inset 0 1px 2px #037c9a;
25
- border-top: 1px solid #037c9a;
26
- border-bottom: 1px solid #037c9a;
27
- border-left: 1px solid #037c9a;
28
- }
29
- .admin-color-blue .factory-bootstrap-330 .factory-dropdown.factory-buttons-way .active {
30
- background-color: #e1a948;
31
- -webkit-box-shadow: inset 0 1px 2px #d39323;
32
- box-shadow: inset 0 1px 2px #d39323;
33
- border-top: 1px solid #d39323;
34
- border-bottom: 1px solid #d39323;
35
- border-left: 1px solid #d39323;
36
- }
37
- .admin-color-coffee .factory-bootstrap-330 .factory-dropdown.factory-buttons-way .active {
38
- background-color: #c7a589;
39
- -webkit-box-shadow: inset 0 1px 2px #b78a66;
40
- box-shadow: inset 0 1px 2px #b78a66;
41
- border-top: 1px solid #b78a66;
42
- border-bottom: 1px solid #b78a66;
43
- border-left: 1px solid #b78a66;
44
- }
45
- .admin-color-ectoplasm .factory-bootstrap-330 .factory-dropdown.factory-buttons-way .active {
46
- background-color: #a3b745;
47
- -webkit-box-shadow: inset 0 1px 2px #839237;
48
- box-shadow: inset 0 1px 2px #839237;
49
- border-top: 1px solid #839237;
50
- border-bottom: 1px solid #839237;
51
- border-left: 1px solid #839237;
52
- }
53
- .admin-color-midnight .factory-bootstrap-330 .factory-dropdown.factory-buttons-way .active {
54
- background-color: #e14d43;
55
- -webkit-box-shadow: inset 0 1px 2px #d02a21;
56
- box-shadow: inset 0 1px 2px #d02a21;
57
- border-top: 1px solid #d02a21;
58
- border-bottom: 1px solid #d02a21;
59
- border-left: 1px solid #d02a21;
60
- }
61
- .admin-color-ocean .factory-bootstrap-330 .factory-dropdown.factory-buttons-way .active {
62
- background-color: #9ebaa0;
63
- -webkit-box-shadow: inset 0 1px 2px #80a583;
64
- box-shadow: inset 0 1px 2px #80a583;
65
- border-top: 1px solid #80a583;
66
- border-bottom: 1px solid #80a583;
67
- border-left: 1px solid #80a583;
68
- }
69
- .admin-color-sunrise .factory-bootstrap-330 .factory-dropdown.factory-buttons-way .active {
70
- background-color: #dd823b;
71
- -webkit-box-shadow: inset 0 1px 2px #c36822;
72
- box-shadow: inset 0 1px 2px #c36822;
73
- border-top: 1px solid #c36822;
74
- border-bottom: 1px solid #c36822;
75
- border-left: 1px solid #c36822;
76
- }
77
-
78
- /**
79
- * Dropdown As ddSlick
80
- * http://designwithpc.com/plugins/ddslick
81
- */
82
-
83
- .factory-bootstrap-330 .factory-dropdown.factory-ddslick-way .dd-select {
84
- background-color: #fff !important;
85
- }
86
- .factory-bootstrap-330 .factory-dropdown.factory-ddslick-way label {
87
- margin-bottom: 1px;
88
- }
89
- .factory-bootstrap-330 .factory-dropdown.factory-ddslick-way .dd-option,
90
- .factory-bootstrap-330 .factory-dropdown.factory-ddslick-way .dd-selected {
91
- padding: 8px 12px 8px 11px !important;
92
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/flat/css/control.multiple-textbox.css DELETED
@@ -1,37 +0,0 @@
1
- .factory-bootstrap-330 .factory-mtextbox-item {
2
- position: relative;
3
- margin-bottom: 5px;
4
- }
5
-
6
- .factory-bootstrap-330 .factory-mtextbox-item input, .factory-mtextbox-remove-item {
7
- display: inline-block;
8
- }
9
-
10
- .factory-bootstrap-330 .factory-mtextbox-item .factory-mtextbox-remove-item {
11
- position: absolute;
12
- top: 0;
13
- right: 0;
14
- bottom: 0;
15
- width: 40px;
16
- border-radius: 0 3px 3px 0;
17
- outline: none;
18
- /*background: #fbe3e3;
19
- color: #9c7070;
20
- box-shadow: none;*/
21
- }
22
-
23
- .factory-bootstrap-330 .factory-mtextbox-item .factory-mtextbox-remove-item:hover,
24
- .factory-bootstrap-330 .factory-mtextbox-item .factory-mtextbox-remove-item:focus {
25
- box-shadow: none;
26
- outline: none;
27
- }
28
-
29
- /*.factory-bootstrap-330 .factory-mtextbox-item .factory-mtextbox-remove-item:hover {
30
- background: #fbe3e3;
31
- color: #9c7070;
32
- }*/
33
-
34
- .factory-bootstrap-330 .factory-mtextbox-add-item {
35
- display: block;
36
- margin-top: 10px;
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/flat/css/holder.more-link.css DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * More Link
3
- */
4
-
5
- .factory-bootstrap-330 .factory-more-link-content {
6
- border-top: 1px dashed #DDD;
7
- padding-top: 25px;
8
- width: 100%;
9
- padding-right: 20px;
10
- position: relative;
11
- }
12
- .factory-bootstrap-330 .factory-tab .factory-more-link-show {
13
- display: inline-block;
14
- text-decoration: none;
15
- border-bottom: 1px dotted #21759b;
16
- position: relative;
17
- }
18
- .factory-bootstrap-330 .factory-tab .factory-more-link-show:hover {
19
- border-color: #d54e21;
20
- }
21
- .factory-bootstrap-330 .factory-tab .factory-more-link-hide {
22
- position: absolute;
23
- margin-top: -35px;
24
- background-color: #fff;
25
- padding: 0 5px;
26
- right: 20px;
27
- color: #bbb;
28
- text-decoration: none;
29
- }
30
- .factory-bootstrap-330 .factory-tab .factory-more-link-hide:hover {
31
- color: #999;
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/js-min/bootstrap.dropdown.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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.factoryBootstrap400_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.factoryBootstrap400_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 ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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 ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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.attr("checked","checked"),c.$result.val(1),c.$result.trigger("change")),!1}),this.$off.click(function(){return c.$on.removeClass("active"),c.$off.addClass("active"),d?setTimeout(function(){c.$off.removeClass("active"),c.$on.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.removeAttr("checked"),c.$result.val(0),c.$result.trigger("change")),!1}),this.hashCode=function(a){var b=0;if(!a||0===a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b=b.toString(16),b=b.replace("-","")},this.executeEvents=function(a){(void 0!==window.__factory_checkbox_control_events_off_data||void 0!==window.__factory_checkbox_control_events_on_data)&&(a.change(function(){c.eventsProcess(a)}),c.eventsProcess(a))},this.eventsProcess=function(b){var d=b.attr("name"),e=b.prop("checked"),f=window.__factory_checkbox_control_events_on_data[d],g=window.__factory_checkbox_control_events_off_data[d];if(f||g){var h,i;void 0===window.__factory_checkbox_control_detach_elements&&(window.__factory_checkbox_control_detach_elements={}),h=window.__factory_checkbox_control_detach_elements,i=e?f:g;for(var j in i)if(i.hasOwnProperty(j)){var k,l=i[j];a.isArray(l)||(k=c.hashCode(d+l));var m;switch(j){case"hide":"string"==typeof l&&a(l).hide(0);break;case"show":"string"==typeof l&&a(l).fadeIn(200);break;case"detach":"string"==typeof l&&a(l).each(function(b){h[k]||(h[k]={}),h[k][b]||(h[k][b]={}),h[k][b].recovery_contanier=a(this).parent(),h[k][b].element=a(this).clone(!0),a(this).remove()});break;case"recovery":if(h[k]){for(var n in h[k])h[k].hasOwnProperty(n)&&h[k][n].recovery_contanier&&h[k][n].element&&h[k][n].recovery_contanier.append(h[k][n].element);delete h[k]}break;case"removeClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).removeClass(l[m]);break;case"addClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).addClass(l[m]);break;case"setValue":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&void 0!==l[m]&&null!==l[m]&&(console.log(l[m]),a(m).val(l[m]))}}}},this.executeEvents(this.$result)};a.fn.factoryBootstrap400_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.factoryBootstrap400_checkboxControl.Constructor=b,a(function(){a(".factory-bootstrap-400 .factory-checkbox.factory-buttons-way").factoryBootstrap400_checkboxControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.dropdown.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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.factoryBootstrap400_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.factoryBootstrap400_dropdownControl.Constructor=b,a(function(){a(".factory-bootstrap-400 .factory-dropdown").factoryBootstrap400_dropdownControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.list.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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.factoryBootstrap400_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.factoryBootstrap400_listControl.Constructor=b,a(function(){a(".factory-bootstrap-400 .factory-list").factoryBootstrap400_listControl()})}(jQuery);
libs/factory/bootstrap/assets/js-min/control.multiple-textbox.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap generator - v1.0.1, 2018-02-26
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.factoryBootstrap400_MultipleTextboxControl=function(){return this.each(function(){new b(this)})},a(function(){a(".factory-bootstrap-400 .factory-multiple-textbox-group").factoryBootstrap400_MultipleTextboxControl()})}(jQuery);
libs/factory/bootstrap/assets/js/bootstrap.datetimepicker.js DELETED
@@ -1,2746 +0,0 @@
1
- /*! version : 4.17.47
2
- =========================================================
3
- bootstrap-datetimejs
4
- https://github.com/Eonasdan/bootstrap-datetimepicker
5
- Copyright (c) 2015 Jonathan Peterson
6
- =========================================================
7
- */
8
- /*
9
- The MIT License (MIT)
10
-
11
- Copyright (c) 2015 Jonathan Peterson
12
-
13
- Permission is hereby granted, free of charge, to any person obtaining a copy
14
- of this software and associated documentation files (the "Software"), to deal
15
- in the Software without restriction, including without limitation the rights
16
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
- copies of the Software, and to permit persons to whom the Software is
18
- furnished to do so, subject to the following conditions:
19
-
20
- The above copyright notice and this permission notice shall be included in
21
- all copies or substantial portions of the Software.
22
-
23
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29
- THE SOFTWARE.
30
- */
31
- /*global define:false */
32
- /*global exports:false */
33
- /*global require:false */
34
- /*global jQuery:false */
35
- /*global moment:false */
36
- (function(factory) {
37
- 'use strict';
38
- if( typeof define === 'function' && define.amd ) {
39
- // AMD is used - Register as an anonymous module.
40
- define(['jquery', 'moment'], factory);
41
- } else if( typeof exports === 'object' ) {
42
- module.exports = factory(require('jquery'), require('moment'));
43
- } else {
44
- // Neither AMD nor CommonJS used. Use global variables.
45
- if( typeof jQuery === 'undefined' ) {
46
- throw 'bootstrap-datetimepicker requires jQuery to be loaded first';
47
- }
48
- if( typeof moment === 'undefined' ) {
49
- throw 'bootstrap-datetimepicker requires Moment.js to be loaded first';
50
- }
51
- factory(jQuery, moment);
52
- }
53
- }(function($, moment) {
54
- 'use strict';
55
- if( !moment ) {
56
- throw new Error('bootstrap-datetimepicker requires Moment.js to be loaded first');
57
- }
58
-
59
- var dateTimePicker = function(element, options) {
60
- var picker = {},
61
- date,
62
- viewDate,
63
- unset = true,
64
- input,
65
- component = false,
66
- widget = false,
67
- use24Hours,
68
- minViewModeNumber = 0,
69
- actualFormat,
70
- parseFormats,
71
- currentViewMode,
72
- datePickerModes = [
73
- {
74
- clsName: 'days',
75
- navFnc: 'M',
76
- navStep: 1
77
- },
78
- {
79
- clsName: 'months',
80
- navFnc: 'y',
81
- navStep: 1
82
- },
83
- {
84
- clsName: 'years',
85
- navFnc: 'y',
86
- navStep: 10
87
- },
88
- {
89
- clsName: 'decades',
90
- navFnc: 'y',
91
- navStep: 100
92
- }
93
- ],
94
- viewModes = ['days', 'months', 'years', 'decades'],
95
- verticalModes = ['top', 'bottom', 'auto'],
96
- horizontalModes = ['left', 'right', 'auto'],
97
- toolbarPlacements = ['default', 'top', 'bottom'],
98
- keyMap = {
99
- 'up': 38,
100
- 38: 'up',
101
- 'down': 40,
102
- 40: 'down',
103
- 'left': 37,
104
- 37: 'left',
105
- 'right': 39,
106
- 39: 'right',
107
- 'tab': 9,
108
- 9: 'tab',
109
- 'escape': 27,
110
- 27: 'escape',
111
- 'enter': 13,
112
- 13: 'enter',
113
- 'pageUp': 33,
114
- 33: 'pageUp',
115
- 'pageDown': 34,
116
- 34: 'pageDown',
117
- 'shift': 16,
118
- 16: 'shift',
119
- 'control': 17,
120
- 17: 'control',
121
- 'space': 32,
122
- 32: 'space',
123
- 't': 84,
124
- 84: 't',
125
- 'delete': 46,
126
- 46: 'delete'
127
- },
128
- keyState = {},
129
-
130
- /********************************************************************************
131
- *
132
- * Private functions
133
- *
134
- ********************************************************************************/
135
-
136
- hasTimeZone = function() {
137
- return moment.tz !== undefined && options.timeZone !== undefined && options.timeZone !== null && options.timeZone !== '';
138
- },
139
-
140
- getMoment = function(d) {
141
- var returnMoment;
142
-
143
- if( d === undefined || d === null ) {
144
- returnMoment = moment(); //TODO should this use format? and locale?
145
- } else if( moment.isDate(d) || moment.isMoment(d) ) {
146
- // If the date that is passed in is already a Date() or moment() object,
147
- // pass it directly to moment.
148
- returnMoment = moment(d);
149
- } else if( hasTimeZone() ) { // There is a string to parse and a default time zone
150
- // parse with the tz function which takes a default time zone if it is not in the format string
151
- returnMoment = moment.tz(d, parseFormats, options.useStrict, options.timeZone);
152
- } else {
153
- returnMoment = moment(d, parseFormats, options.useStrict);
154
- }
155
-
156
- if( hasTimeZone() ) {
157
- returnMoment.tz(options.timeZone);
158
- }
159
-
160
- return returnMoment;
161
- },
162
-
163
- isEnabled = function(granularity) {
164
- if( typeof granularity !== 'string' || granularity.length > 1 ) {
165
- throw new TypeError('isEnabled expects a single character string parameter');
166
- }
167
- switch( granularity ) {
168
- case 'y':
169
- return actualFormat.indexOf('Y') !== -1;
170
- case 'M':
171
- return actualFormat.indexOf('M') !== -1;
172
- case 'd':
173
- return actualFormat.toLowerCase().indexOf('d') !== -1;
174
- case 'h':
175
- case 'H':
176
- return actualFormat.toLowerCase().indexOf('h') !== -1;
177
- case 'm':
178
- return actualFormat.indexOf('m') !== -1;
179
- case 's':
180
- return actualFormat.indexOf('s') !== -1;
181
- default:
182
- return false;
183
- }
184
- },
185
-
186
- hasTime = function() {
187
- return (isEnabled('h') || isEnabled('m') || isEnabled('s'));
188
- },
189
-
190
- hasDate = function() {
191
- return (isEnabled('y') || isEnabled('M') || isEnabled('d'));
192
- },
193
-
194
- getDatePickerTemplate = function() {
195
- var headTemplate = $('<thead>')
196
- .append($('<tr>')
197
- .append($('<th>').addClass('prev').attr('data-action', 'previous')
198
- .append($('<span>').addClass(options.icons.previous))
199
- )
200
- .append($('<th>').addClass('picker-switch').attr('data-action', 'pickerSwitch').attr('colspan', (options.calendarWeeks
201
- ? '6'
202
- : '5')))
203
- .append($('<th>').addClass('next').attr('data-action', 'next')
204
- .append($('<span>').addClass(options.icons.next))
205
- )
206
- ),
207
- contTemplate = $('<tbody>')
208
- .append($('<tr>')
209
- .append($('<td>').attr('colspan', (options.calendarWeeks ? '8' : '7')))
210
- );
211
-
212
- return [
213
- $('<div>').addClass('datepicker-days')
214
- .append($('<table>').addClass('table-condensed')
215
- .append(headTemplate)
216
- .append($('<tbody>'))
217
- ),
218
- $('<div>').addClass('datepicker-months')
219
- .append($('<table>').addClass('table-condensed')
220
- .append(headTemplate.clone())
221
- .append(contTemplate.clone())
222
- ),
223
- $('<div>').addClass('datepicker-years')
224
- .append($('<table>').addClass('table-condensed')
225
- .append(headTemplate.clone())
226
- .append(contTemplate.clone())
227
- ),
228
- $('<div>').addClass('datepicker-decades')
229
- .append($('<table>').addClass('table-condensed')
230
- .append(headTemplate.clone())
231
- .append(contTemplate.clone())
232
- )
233
- ];
234
- },
235
-
236
- getTimePickerMainTemplate = function() {
237
- var topRow = $('<tr>'),
238
- middleRow = $('<tr>'),
239
- bottomRow = $('<tr>');
240
-
241
- if( isEnabled('h') ) {
242
- topRow.append($('<td>')
243
- .append($('<a>').attr({
244
- href: '#',
245
- tabindex: '-1',
246
- 'title': options.tooltips.incrementHour
247
- }).addClass('btn').attr('data-action', 'incrementHours').append($('<span>').addClass(options.icons.up))));
248
- middleRow.append($('<td>')
249
- .append($('<span>').addClass('timepicker-hour').attr({
250
- 'data-time-component': 'hours',
251
- 'title': options.tooltips.pickHour
252
- }).attr('data-action', 'showHours')));
253
- bottomRow.append($('<td>')
254
- .append($('<a>').attr({
255
- href: '#',
256
- tabindex: '-1',
257
- 'title': options.tooltips.decrementHour
258
- }).addClass('btn').attr('data-action', 'decrementHours').append($('<span>').addClass(options.icons.down))));
259
- }
260
- if( isEnabled('m') ) {
261
- if( isEnabled('h') ) {
262
- topRow.append($('<td>').addClass('separator'));
263
- middleRow.append($('<td>').addClass('separator').html(':'));
264
- bottomRow.append($('<td>').addClass('separator'));
265
- }
266
- topRow.append($('<td>')
267
- .append($('<a>').attr({
268
- href: '#',
269
- tabindex: '-1',
270
- 'title': options.tooltips.incrementMinute
271
- }).addClass('btn').attr('data-action', 'incrementMinutes')
272
- .append($('<span>').addClass(options.icons.up))));
273
- middleRow.append($('<td>')
274
- .append($('<span>').addClass('timepicker-minute').attr({
275
- 'data-time-component': 'minutes',
276
- 'title': options.tooltips.pickMinute
277
- }).attr('data-action', 'showMinutes')));
278
- bottomRow.append($('<td>')
279
- .append($('<a>').attr({
280
- href: '#',
281
- tabindex: '-1',
282
- 'title': options.tooltips.decrementMinute
283
- }).addClass('btn').attr('data-action', 'decrementMinutes')
284
- .append($('<span>').addClass(options.icons.down))));
285
- }
286
- if( isEnabled('s') ) {
287
- if( isEnabled('m') ) {
288
- topRow.append($('<td>').addClass('separator'));
289
- middleRow.append($('<td>').addClass('separator').html(':'));
290
- bottomRow.append($('<td>').addClass('separator'));
291
- }
292
- topRow.append($('<td>')
293
- .append($('<a>').attr({
294
- href: '#',
295
- tabindex: '-1',
296
- 'title': options.tooltips.incrementSecond
297
- }).addClass('btn').attr('data-action', 'incrementSeconds')
298
- .append($('<span>').addClass(options.icons.up))));
299
- middleRow.append($('<td>')
300
- .append($('<span>').addClass('timepicker-second').attr({
301
- 'data-time-component': 'seconds',
302
- 'title': options.tooltips.pickSecond
303
- }).attr('data-action', 'showSeconds')));
304
- bottomRow.append($('<td>')
305
- .append($('<a>').attr({
306
- href: '#',
307
- tabindex: '-1',
308
- 'title': options.tooltips.decrementSecond
309
- }).addClass('btn').attr('data-action', 'decrementSeconds')
310
- .append($('<span>').addClass(options.icons.down))));
311
- }
312
-
313
- if( !use24Hours ) {
314
- topRow.append($('<td>').addClass('separator'));
315
- middleRow.append($('<td>')
316
- .append($('<button>').addClass('btn btn-primary').attr({
317
- 'data-action': 'togglePeriod',
318
- tabindex: '-1',
319
- 'title': options.tooltips.togglePeriod
320
- })));
321
- bottomRow.append($('<td>').addClass('separator'));
322
- }
323
-
324
- return $('<div>').addClass('timepicker-picker')
325
- .append($('<table>').addClass('table-condensed')
326
- .append([topRow, middleRow, bottomRow]));
327
- },
328
-
329
- getTimePickerTemplate = function() {
330
- var hoursView = $('<div>').addClass('timepicker-hours')
331
- .append($('<table>').addClass('table-condensed')),
332
- minutesView = $('<div>').addClass('timepicker-minutes')
333
- .append($('<table>').addClass('table-condensed')),
334
- secondsView = $('<div>').addClass('timepicker-seconds')
335
- .append($('<table>').addClass('table-condensed')),
336
- ret = [getTimePickerMainTemplate()];
337
-
338
- if( isEnabled('h') ) {
339
- ret.push(hoursView);
340
- }
341
- if( isEnabled('m') ) {
342
- ret.push(minutesView);
343
- }
344
- if( isEnabled('s') ) {
345
- ret.push(secondsView);
346
- }
347
-
348
- return ret;
349
- },
350
-
351
- getToolbar = function() {
352
- var row = [];
353
- if( options.showTodayButton ) {
354
- row.push($('<td>').append($('<a>').attr({
355
- 'data-action': 'today',
356
- 'title': options.tooltips.today
357
- }).append($('<span>').addClass(options.icons.today))));
358
- }
359
- if( !options.sideBySide && hasDate() && hasTime() ) {
360
- row.push($('<td>').append($('<a>').attr({
361
- 'data-action': 'togglePicker',
362
- 'title': options.tooltips.selectTime
363
- }).append($('<span>').addClass(options.icons.time))));
364
- }
365
- if( options.showClear ) {
366
- row.push($('<td>').append($('<a>').attr({
367
- 'data-action': 'clear',
368
- 'title': options.tooltips.clear
369
- }).append($('<span>').addClass(options.icons.clear))));
370
- }
371
- if( options.showClose ) {
372
- row.push($('<td>').append($('<a>').attr({
373
- 'data-action': 'close',
374
- 'title': options.tooltips.close
375
- }).append($('<span>').addClass(options.icons.close))));
376
- }
377
- return $('<table>').addClass('table-condensed').append($('<tbody>').append($('<tr>').append(row)));
378
- },
379
-
380
- getTemplate = function() {
381
- var template = $('<div>').addClass('bootstrap-datetimepicker-widget dropdown-menu'),
382
- dateView = $('<div>').addClass('datepicker').append(getDatePickerTemplate()),
383
- timeView = $('<div>').addClass('timepicker').append(getTimePickerTemplate()),
384
- content = $('<ul>').addClass('list-unstyled'),
385
- toolbar = $('<li>').addClass('picker-switch' + (options.collapse
386
- ? ' accordion-toggle'
387
- : '')).append(getToolbar());
388
-
389
- if( options.inline ) {
390
- template.removeClass('dropdown-menu');
391
- }
392
-
393
- if( use24Hours ) {
394
- template.addClass('usetwentyfour');
395
- }
396
-
397
- if( isEnabled('s') && !use24Hours ) {
398
- template.addClass('wider');
399
- }
400
-
401
- if( options.sideBySide && hasDate() && hasTime() ) {
402
- template.addClass('timepicker-sbs');
403
- if( options.toolbarPlacement === 'top' ) {
404
- template.append(toolbar);
405
- }
406
- template.append(
407
- $('<div>').addClass('row')
408
- .append(dateView.addClass('col-md-6'))
409
- .append(timeView.addClass('col-md-6'))
410
- );
411
- if( options.toolbarPlacement === 'bottom' ) {
412
- template.append(toolbar);
413
- }
414
- return template;
415
- }
416
-
417
- if( options.toolbarPlacement === 'top' ) {
418
- content.append(toolbar);
419
- }
420
- if( hasDate() ) {
421
- content.append($('<li>').addClass((options.collapse && hasTime()
422
- ? 'collapse in'
423
- : '')).append(dateView));
424
- }
425
- if( options.toolbarPlacement === 'default' ) {
426
- content.append(toolbar);
427
- }
428
- if( hasTime() ) {
429
- content.append($('<li>').addClass((options.collapse && hasDate()
430
- ? 'collapse'
431
- : '')).append(timeView));
432
- }
433
- if( options.toolbarPlacement === 'bottom' ) {
434
- content.append(toolbar);
435
- }
436
- return template.append(content);
437
- },
438
-
439
- dataToOptions = function() {
440
- var eData,
441
- dataOptions = {};
442
-
443
- if( element.is('input') || options.inline ) {
444
- eData = element.data();
445
- } else {
446
- eData = element.find('input').data();
447
- }
448
-
449
- if( eData.dateOptions && eData.dateOptions instanceof Object ) {
450
- dataOptions = $.extend(true, dataOptions, eData.dateOptions);
451
- }
452
-
453
- $.each(options, function(key) {
454
- var attributeName = 'date' + key.charAt(0).toUpperCase() + key.slice(1);
455
- if( eData[attributeName] !== undefined ) {
456
- dataOptions[key] = eData[attributeName];
457
- }
458
- });
459
- return dataOptions;
460
- },
461
-
462
- place = function() {
463
- var position = (component || element).position(),
464
- offset = (component || element).offset(),
465
- vertical = options.widgetPositioning.vertical,
466
- horizontal = options.widgetPositioning.horizontal,
467
- parent;
468
-
469
- if( options.widgetParent ) {
470
- parent = options.widgetParent.append(widget);
471
- } else if( element.is('input') ) {
472
- parent = element.after(widget).parent();
473
- } else if( options.inline ) {
474
- parent = element.append(widget);
475
- return;
476
- } else {
477
- parent = element;
478
- element.children().first().after(widget);
479
- }
480
-
481
- // Top and bottom logic
482
- if( vertical === 'auto' ) {
483
- if( offset.top + widget.height() * 1.5 >= $(window).height() + $(window).scrollTop() &&
484
- widget.height() + element.outerHeight() < offset.top ) {
485
- vertical = 'top';
486
- } else {
487
- vertical = 'bottom';
488
- }
489
- }
490
-
491
- // Left and right logic
492
- if( horizontal === 'auto' ) {
493
- if( parent.width() < offset.left + widget.outerWidth() / 2 &&
494
- offset.left + widget.outerWidth() > $(window).width() ) {
495
- horizontal = 'right';
496
- } else {
497
- horizontal = 'left';
498
- }
499
- }
500
-
501
- if( vertical === 'top' ) {
502
- widget.addClass('top').removeClass('bottom');
503
- } else {
504
- widget.addClass('bottom').removeClass('top');
505
- }
506
-
507
- if( horizontal === 'right' ) {
508
- widget.addClass('pull-right');
509
- } else {
510
- widget.removeClass('pull-right');
511
- }
512
-
513
- // find the first parent element that has a non-static css positioning
514
- if( parent.css('position') === 'static' ) {
515
- parent = parent.parents().filter(function() {
516
- return $(this).css('position') !== 'static';
517
- }).first();
518
- }
519
-
520
- if( parent.length === 0 ) {
521
- throw new Error('datetimepicker component should be placed within a non-static positioned container');
522
- }
523
-
524
- widget.css({
525
- top: vertical === 'top' ? 'auto' : position.top + element.outerHeight(),
526
- bottom: vertical === 'top'
527
- ? parent.outerHeight() - (parent === element ? 0 : position.top)
528
- : 'auto',
529
- left: horizontal === 'left' ? (parent === element ? 0 : position.left) : 'auto',
530
- right: horizontal === 'left'
531
- ? 'auto'
532
- : parent.outerWidth() - element.outerWidth() - (parent === element ? 0 : position.left)
533
- });
534
- },
535
-
536
- notifyEvent = function(e) {
537
- if( e.type === 'dp.change' && ((e.date && e.date.isSame(e.oldDate)) || (!e.date && !e.oldDate)) ) {
538
- return;
539
- }
540
- element.trigger(e);
541
- },
542
-
543
- viewUpdate = function(e) {
544
- if( e === 'y' ) {
545
- e = 'YYYY';
546
- }
547
- notifyEvent({
548
- type: 'dp.update',
549
- change: e,
550
- viewDate: viewDate.clone()
551
- });
552
- },
553
-
554
- showMode = function(dir) {
555
- if( !widget ) {
556
- return;
557
- }
558
- if( dir ) {
559
- currentViewMode = Math.max(minViewModeNumber, Math.min(3, currentViewMode + dir));
560
- }
561
- widget.find('.datepicker > div').hide().filter('.datepicker-' + datePickerModes[currentViewMode].clsName).show();
562
- },
563
-
564
- fillDow = function() {
565
- var row = $('<tr>'),
566
- currentDate = viewDate.clone().startOf('w').startOf('d');
567
-
568
- if( options.calendarWeeks === true ) {
569
- row.append($('<th>').addClass('cw').text('#'));
570
- }
571
-
572
- while( currentDate.isBefore(viewDate.clone().endOf('w')) ) {
573
- row.append($('<th>').addClass('dow').text(currentDate.format('dd')));
574
- currentDate.add(1, 'd');
575
- }
576
- widget.find('.datepicker-days thead').append(row);
577
- },
578
-
579
- isInDisabledDates = function(testDate) {
580
- return options.disabledDates[testDate.format('YYYY-MM-DD')] === true;
581
- },
582
-
583
- isInEnabledDates = function(testDate) {
584
- return options.enabledDates[testDate.format('YYYY-MM-DD')] === true;
585
- },
586
-
587
- isInDisabledHours = function(testDate) {
588
- return options.disabledHours[testDate.format('H')] === true;
589
- },
590
-
591
- isInEnabledHours = function(testDate) {
592
- return options.enabledHours[testDate.format('H')] === true;
593
- },
594
-
595
- isValid = function(targetMoment, granularity) {
596
- if( !targetMoment.isValid() ) {
597
- return false;
598
- }
599
- if( options.disabledDates && granularity === 'd' && isInDisabledDates(targetMoment) ) {
600
- return false;
601
- }
602
- if( options.enabledDates && granularity === 'd' && !isInEnabledDates(targetMoment) ) {
603
- return false;
604
- }
605
- if( options.minDate && targetMoment.isBefore(options.minDate, granularity) ) {
606
- return false;
607
- }
608
- if( options.maxDate && targetMoment.isAfter(options.maxDate, granularity) ) {
609
- return false;
610
- }
611
- if( options.daysOfWeekDisabled && granularity === 'd' && options.daysOfWeekDisabled.indexOf(targetMoment.day()) !== -1 ) {
612
- return false;
613
- }
614
- if( options.disabledHours && (granularity === 'h' || granularity === 'm' || granularity === 's') && isInDisabledHours(targetMoment) ) {
615
- return false;
616
- }
617
- if( options.enabledHours && (granularity === 'h' || granularity === 'm' || granularity === 's') && !isInEnabledHours(targetMoment) ) {
618
- return false;
619
- }
620
- if( options.disabledTimeIntervals && (granularity === 'h' || granularity === 'm' || granularity === 's') ) {
621
- var found = false;
622
- $.each(options.disabledTimeIntervals, function() {
623
- if( targetMoment.isBetween(this[0], this[1]) ) {
624
- found = true;
625
- return false;
626
- }
627
- });
628
- if( found ) {
629
- return false;
630
- }
631
- }
632
- return true;
633
- },
634
-
635
- fillMonths = function() {
636
- var spans = [],
637
- monthsShort = viewDate.clone().startOf('y').startOf('d');
638
- while( monthsShort.isSame(viewDate, 'y') ) {
639
- spans.push($('<span>').attr('data-action', 'selectMonth').addClass('month').text(monthsShort.format('MMM')));
640
- monthsShort.add(1, 'M');
641
- }
642
- widget.find('.datepicker-months td').empty().append(spans);
643
- },
644
-
645
- updateMonths = function() {
646
- var monthsView = widget.find('.datepicker-months'),
647
- monthsViewHeader = monthsView.find('th'),
648
- months = monthsView.find('tbody').find('span');
649
-
650
- monthsViewHeader.eq(0).find('span').attr('title', options.tooltips.prevYear);
651
- monthsViewHeader.eq(1).attr('title', options.tooltips.selectYear);
652
- monthsViewHeader.eq(2).find('span').attr('title', options.tooltips.nextYear);
653
-
654
- monthsView.find('.disabled').removeClass('disabled');
655
-
656
- if( !isValid(viewDate.clone().subtract(1, 'y'), 'y') ) {
657
- monthsViewHeader.eq(0).addClass('disabled');
658
- }
659
-
660
- monthsViewHeader.eq(1).text(viewDate.year());
661
-
662
- if( !isValid(viewDate.clone().add(1, 'y'), 'y') ) {
663
- monthsViewHeader.eq(2).addClass('disabled');
664
- }
665
-
666
- months.removeClass('active');
667
- if( date.isSame(viewDate, 'y') && !unset ) {
668
- months.eq(date.month()).addClass('active');
669
- }
670
-
671
- months.each(function(index) {
672
- if( !isValid(viewDate.clone().month(index), 'M') ) {
673
- $(this).addClass('disabled');
674
- }
675
- });
676
- },
677
-
678
- updateYears = function() {
679
- var yearsView = widget.find('.datepicker-years'),
680
- yearsViewHeader = yearsView.find('th'),
681
- startYear = viewDate.clone().subtract(5, 'y'),
682
- endYear = viewDate.clone().add(6, 'y'),
683
- html = '';
684
-
685
- yearsViewHeader.eq(0).find('span').attr('title', options.tooltips.prevDecade);
686
- yearsViewHeader.eq(1).attr('title', options.tooltips.selectDecade);
687
- yearsViewHeader.eq(2).find('span').attr('title', options.tooltips.nextDecade);
688
-
689
- yearsView.find('.disabled').removeClass('disabled');
690
-
691
- if( options.minDate && options.minDate.isAfter(startYear, 'y') ) {
692
- yearsViewHeader.eq(0).addClass('disabled');
693
- }
694
-
695
- yearsViewHeader.eq(1).text(startYear.year() + '-' + endYear.year());
696
-
697
- if( options.maxDate && options.maxDate.isBefore(endYear, 'y') ) {
698
- yearsViewHeader.eq(2).addClass('disabled');
699
- }
700
-
701
- while( !startYear.isAfter(endYear, 'y') ) {
702
- html += '<span data-action="selectYear" class="year' + (startYear.isSame(date, 'y') && !unset
703
- ? ' active'
704
- : '') + (!isValid(startYear, 'y') ? ' disabled' : '') + '">' + startYear.year() + '</span>';
705
- startYear.add(1, 'y');
706
- }
707
-
708
- yearsView.find('td').html(html);
709
- },
710
-
711
- updateDecades = function() {
712
- var decadesView = widget.find('.datepicker-decades'),
713
- decadesViewHeader = decadesView.find('th'),
714
- startDecade = moment({y: viewDate.year() - (viewDate.year() % 100) - 1}),
715
- endDecade = startDecade.clone().add(100, 'y'),
716
- startedAt = startDecade.clone(),
717
- minDateDecade = false,
718
- maxDateDecade = false,
719
- endDecadeYear,
720
- html = '';
721
-
722
- decadesViewHeader.eq(0).find('span').attr('title', options.tooltips.prevCentury);
723
- decadesViewHeader.eq(2).find('span').attr('title', options.tooltips.nextCentury);
724
-
725
- decadesView.find('.disabled').removeClass('disabled');
726
-
727
- if( startDecade.isSame(moment({y: 1900})) || (options.minDate && options.minDate.isAfter(startDecade, 'y')) ) {
728
- decadesViewHeader.eq(0).addClass('disabled');
729
- }
730
-
731
- decadesViewHeader.eq(1).text(startDecade.year() + '-' + endDecade.year());
732
-
733
- if( startDecade.isSame(moment({y: 2000})) || (options.maxDate && options.maxDate.isBefore(endDecade, 'y')) ) {
734
- decadesViewHeader.eq(2).addClass('disabled');
735
- }
736
-
737
- while( !startDecade.isAfter(endDecade, 'y') ) {
738
- endDecadeYear = startDecade.year() + 12;
739
- minDateDecade = options.minDate && options.minDate.isAfter(startDecade, 'y') && options.minDate.year() <= endDecadeYear;
740
- maxDateDecade = options.maxDate && options.maxDate.isAfter(startDecade, 'y') && options.maxDate.year() <= endDecadeYear;
741
- html += '<span data-action="selectDecade" class="decade' + (date.isAfter(startDecade) && date.year() <= endDecadeYear
742
- ? ' active'
743
- : '') +
744
- (!isValid(startDecade, 'y') && !minDateDecade && !maxDateDecade
745
- ? ' disabled'
746
- : '') + '" data-selection="' + (startDecade.year() + 6) + '">' + (startDecade.year() + 1) + ' - ' + (startDecade.year() + 12) + '</span>';
747
- startDecade.add(12, 'y');
748
- }
749
- html += '<span></span><span></span><span></span>'; //push the dangling block over, at least this way
750
- // it's even
751
-
752
- decadesView.find('td').html(html);
753
- decadesViewHeader.eq(1).text((startedAt.year() + 1) + '-' + (startDecade.year()));
754
- },
755
-
756
- fillDate = function() {
757
- var daysView = widget.find('.datepicker-days'),
758
- daysViewHeader = daysView.find('th'),
759
- currentDate,
760
- html = [],
761
- row,
762
- clsNames = [],
763
- i;
764
-
765
- if( !hasDate() ) {
766
- return;
767
- }
768
-
769
- daysViewHeader.eq(0).find('span').attr('title', options.tooltips.prevMonth);
770
- daysViewHeader.eq(1).attr('title', options.tooltips.selectMonth);
771
- daysViewHeader.eq(2).find('span').attr('title', options.tooltips.nextMonth);
772
-
773
- daysView.find('.disabled').removeClass('disabled');
774
- daysViewHeader.eq(1).text(viewDate.format(options.dayViewHeaderFormat));
775
-
776
- if( !isValid(viewDate.clone().subtract(1, 'M'), 'M') ) {
777
- daysViewHeader.eq(0).addClass('disabled');
778
- }
779
- if( !isValid(viewDate.clone().add(1, 'M'), 'M') ) {
780
- daysViewHeader.eq(2).addClass('disabled');
781
- }
782
-
783
- currentDate = viewDate.clone().startOf('M').startOf('w').startOf('d');
784
-
785
- for( i = 0; i < 42; i++ ) { //always display 42 days (should show 6 weeks)
786
- if( currentDate.weekday() === 0 ) {
787
- row = $('<tr>');
788
- if( options.calendarWeeks ) {
789
- row.append('<td class="cw">' + currentDate.week() + '</td>');
790
- }
791
- html.push(row);
792
- }
793
- clsNames = ['day'];
794
- if( currentDate.isBefore(viewDate, 'M') ) {
795
- clsNames.push('old');
796
- }
797
- if( currentDate.isAfter(viewDate, 'M') ) {
798
- clsNames.push('new');
799
- }
800
- if( currentDate.isSame(date, 'd') && !unset ) {
801
- clsNames.push('active');
802
- }
803
- if( !isValid(currentDate, 'd') ) {
804
- clsNames.push('disabled');
805
- }
806
- if( currentDate.isSame(getMoment(), 'd') ) {
807
- clsNames.push('today');
808
- }
809
- if( currentDate.day() === 0 || currentDate.day() === 6 ) {
810
- clsNames.push('weekend');
811
- }
812
- notifyEvent({
813
- type: 'dp.classify',
814
- date: currentDate,
815
- classNames: clsNames
816
- });
817
- row.append('<td data-action="selectDay" data-day="' + currentDate.format('L') + '" class="' + clsNames.join(' ') + '">' + currentDate.date() + '</td>');
818
- currentDate.add(1, 'd');
819
- }
820
-
821
- daysView.find('tbody').empty().append(html);
822
-
823
- updateMonths();
824
-
825
- updateYears();
826
-
827
- updateDecades();
828
- },
829
-
830
- fillHours = function() {
831
- var table = widget.find('.timepicker-hours table'),
832
- currentHour = viewDate.clone().startOf('d'),
833
- html = [],
834
- row = $('<tr>');
835
-
836
- if( viewDate.hour() > 11 && !use24Hours ) {
837
- currentHour.hour(12);
838
- }
839
- while( currentHour.isSame(viewDate, 'd') && (use24Hours || (viewDate.hour() < 12 && currentHour.hour() < 12) || viewDate.hour() > 11) ) {
840
- if( currentHour.hour() % 4 === 0 ) {
841
- row = $('<tr>');
842
- html.push(row);
843
- }
844
- row.append('<td data-action="selectHour" class="hour' + (!isValid(currentHour, 'h')
845
- ? ' disabled'
846
- : '') + '">' + currentHour.format(use24Hours ? 'HH' : 'hh') + '</td>');
847
- currentHour.add(1, 'h');
848
- }
849
- table.empty().append(html);
850
- },
851
-
852
- fillMinutes = function() {
853
- var table = widget.find('.timepicker-minutes table'),
854
- currentMinute = viewDate.clone().startOf('h'),
855
- html = [],
856
- row = $('<tr>'),
857
- step = options.stepping === 1 ? 5 : options.stepping;
858
-
859
- while( viewDate.isSame(currentMinute, 'h') ) {
860
- if( currentMinute.minute() % (step * 4) === 0 ) {
861
- row = $('<tr>');
862
- html.push(row);
863
- }
864
- row.append('<td data-action="selectMinute" class="minute' + (!isValid(currentMinute, 'm')
865
- ? ' disabled'
866
- : '') + '">' + currentMinute.format('mm') + '</td>');
867
- currentMinute.add(step, 'm');
868
- }
869
- table.empty().append(html);
870
- },
871
-
872
- fillSeconds = function() {
873
- var table = widget.find('.timepicker-seconds table'),
874
- currentSecond = viewDate.clone().startOf('m'),
875
- html = [],
876
- row = $('<tr>');
877
-
878
- while( viewDate.isSame(currentSecond, 'm') ) {
879
- if( currentSecond.second() % 20 === 0 ) {
880
- row = $('<tr>');
881
- html.push(row);
882
- }
883
- row.append('<td data-action="selectSecond" class="second' + (!isValid(currentSecond, 's')
884
- ? ' disabled'
885
- : '') + '">' + currentSecond.format('ss') + '</td>');
886
- currentSecond.add(5, 's');
887
- }
888
-
889
- table.empty().append(html);
890
- },
891
-
892
- fillTime = function() {
893
- var toggle, newDate, timeComponents = widget.find('.timepicker span[data-time-component]');
894
-
895
- if( !use24Hours ) {
896
- toggle = widget.find('.timepicker [data-action=togglePeriod]');
897
- newDate = date.clone().add((date.hours() >= 12) ? -12 : 12, 'h');
898
-
899
- toggle.text(date.format('A'));
900
-
901
- if( isValid(newDate, 'h') ) {
902
- toggle.removeClass('disabled');
903
- } else {
904
- toggle.addClass('disabled');
905
- }
906
- }
907
- timeComponents.filter('[data-time-component=hours]').text(date.format(use24Hours ? 'HH' : 'hh'));
908
- timeComponents.filter('[data-time-component=minutes]').text(date.format('mm'));
909
- timeComponents.filter('[data-time-component=seconds]').text(date.format('ss'));
910
-
911
- fillHours();
912
- fillMinutes();
913
- fillSeconds();
914
- },
915
-
916
- update = function() {
917
- if( !widget ) {
918
- return;
919
- }
920
- fillDate();
921
- fillTime();
922
- },
923
-
924
- setValue = function(targetMoment) {
925
- var oldDate = unset ? null : date;
926
-
927
- // case of calling setValue(null or false)
928
- if( !targetMoment ) {
929
- unset = true;
930
- input.val('');
931
- element.data('date', '');
932
- notifyEvent({
933
- type: 'dp.change',
934
- date: false,
935
- oldDate: oldDate
936
- });
937
- update();
938
- return;
939
- }
940
-
941
- targetMoment = targetMoment.clone().locale(options.locale);
942
-
943
- if( hasTimeZone() ) {
944
- targetMoment.tz(options.timeZone);
945
- }
946
-
947
- if( options.stepping !== 1 ) {
948
- targetMoment.minutes((Math.round(targetMoment.minutes() / options.stepping) * options.stepping)).seconds(0);
949
-
950
- while( options.minDate && targetMoment.isBefore(options.minDate) ) {
951
- targetMoment.add(options.stepping, 'minutes');
952
- }
953
- }
954
-
955
- if( isValid(targetMoment) ) {
956
- date = targetMoment;
957
- viewDate = date.clone();
958
- input.val(date.format(actualFormat));
959
- element.data('date', date.format(actualFormat));
960
- unset = false;
961
- update();
962
- notifyEvent({
963
- type: 'dp.change',
964
- date: date.clone(),
965
- oldDate: oldDate
966
- });
967
- } else {
968
- if( !options.keepInvalid ) {
969
- input.val(unset ? '' : date.format(actualFormat));
970
- } else {
971
- notifyEvent({
972
- type: 'dp.change',
973
- date: targetMoment,
974
- oldDate: oldDate
975
- });
976
- }
977
- notifyEvent({
978
- type: 'dp.error',
979
- date: targetMoment,
980
- oldDate: oldDate
981
- });
982
- }
983
- },
984
-
985
- /**
986
- * Hides the widget. Possibly will emit dp.hide
987
- */
988
- hide = function() {
989
- var transitioning = false;
990
- if( !widget ) {
991
- return picker;
992
- }
993
- // Ignore event if in the middle of a picker transition
994
- widget.find('.collapse').each(function() {
995
- var collapseData = $(this).data('collapse');
996
- if( collapseData && collapseData.transitioning ) {
997
- transitioning = true;
998
- return false;
999
- }
1000
- return true;
1001
- });
1002
- if( transitioning ) {
1003
- return picker;
1004
- }
1005
- if( component && component.hasClass('btn') ) {
1006
- component.toggleClass('active');
1007
- }
1008
- widget.hide();
1009
-
1010
- $(window).off('resize', place);
1011
- widget.off('click', '[data-action]');
1012
- widget.off('mousedown', false);
1013
-
1014
- widget.remove();
1015
- widget = false;
1016
-
1017
- notifyEvent({
1018
- type: 'dp.hide',
1019
- date: date.clone()
1020
- });
1021
-
1022
- input.blur();
1023
-
1024
- viewDate = date.clone();
1025
-
1026
- return picker;
1027
- },
1028
-
1029
- clear = function() {
1030
- setValue(null);
1031
- },
1032
-
1033
- parseInputDate = function(inputDate) {
1034
- if( options.parseInputDate === undefined ) {
1035
- if( !moment.isMoment(inputDate) || inputDate instanceof Date ) {
1036
- inputDate = getMoment(inputDate);
1037
- }
1038
- } else {
1039
- inputDate = options.parseInputDate(inputDate);
1040
- }
1041
- //inputDate.locale(options.locale);
1042
- return inputDate;
1043
- },
1044
-
1045
- /********************************************************************************
1046
- *
1047
- * Widget UI interaction functions
1048
- *
1049
- ********************************************************************************/
1050
- actions = {
1051
- next: function() {
1052
- var navFnc = datePickerModes[currentViewMode].navFnc;
1053
- viewDate.add(datePickerModes[currentViewMode].navStep, navFnc);
1054
- fillDate();
1055
- viewUpdate(navFnc);
1056
- },
1057
-
1058
- previous: function() {
1059
- var navFnc = datePickerModes[currentViewMode].navFnc;
1060
- viewDate.subtract(datePickerModes[currentViewMode].navStep, navFnc);
1061
- fillDate();
1062
- viewUpdate(navFnc);
1063
- },
1064
-
1065
- pickerSwitch: function() {
1066
- showMode(1);
1067
- },
1068
-
1069
- selectMonth: function(e) {
1070
- var month = $(e.target).closest('tbody').find('span').index($(e.target));
1071
- viewDate.month(month);
1072
- if( currentViewMode === minViewModeNumber ) {
1073
- setValue(date.clone().year(viewDate.year()).month(viewDate.month()));
1074
- if( !options.inline ) {
1075
- hide();
1076
- }
1077
- } else {
1078
- showMode(-1);
1079
- fillDate();
1080
- }
1081
- viewUpdate('M');
1082
- },
1083
-
1084
- selectYear: function(e) {
1085
- var year = parseInt($(e.target).text(), 10) || 0;
1086
- viewDate.year(year);
1087
- if( currentViewMode === minViewModeNumber ) {
1088
- setValue(date.clone().year(viewDate.year()));
1089
- if( !options.inline ) {
1090
- hide();
1091
- }
1092
- } else {
1093
- showMode(-1);
1094
- fillDate();
1095
- }
1096
- viewUpdate('YYYY');
1097
- },
1098
-
1099
- selectDecade: function(e) {
1100
- var year = parseInt($(e.target).data('selection'), 10) || 0;
1101
- viewDate.year(year);
1102
- if( currentViewMode === minViewModeNumber ) {
1103
- setValue(date.clone().year(viewDate.year()));
1104
- if( !options.inline ) {
1105
- hide();
1106
- }
1107
- } else {
1108
- showMode(-1);
1109
- fillDate();
1110
- }
1111
- viewUpdate('YYYY');
1112
- },
1113
-
1114
- selectDay: function(e) {
1115
- var day = viewDate.clone();
1116
- if( $(e.target).is('.old') ) {
1117
- day.subtract(1, 'M');
1118
- }
1119
- if( $(e.target).is('.new') ) {
1120
- day.add(1, 'M');
1121
- }
1122
- setValue(day.date(parseInt($(e.target).text(), 10)));
1123
- if( !hasTime() && !options.keepOpen && !options.inline ) {
1124
- hide();
1125
- }
1126
- },
1127
-
1128
- incrementHours: function() {
1129
- var newDate = date.clone().add(1, 'h');
1130
- if( isValid(newDate, 'h') ) {
1131
- setValue(newDate);
1132
- }
1133
- },
1134
-
1135
- incrementMinutes: function() {
1136
- var newDate = date.clone().add(options.stepping, 'm');
1137
- if( isValid(newDate, 'm') ) {
1138
- setValue(newDate);
1139
- }
1140
- },
1141
-
1142
- incrementSeconds: function() {
1143
- var newDate = date.clone().add(1, 's');
1144
- if( isValid(newDate, 's') ) {
1145
- setValue(newDate);
1146
- }
1147
- },
1148
-
1149
- decrementHours: function() {
1150
- var newDate = date.clone().subtract(1, 'h');
1151
- if( isValid(newDate, 'h') ) {
1152
- setValue(newDate);
1153
- }
1154
- },
1155
-
1156
- decrementMinutes: function() {
1157
- var newDate = date.clone().subtract(options.stepping, 'm');
1158
- if( isValid(newDate, 'm') ) {
1159
- setValue(newDate);
1160
- }
1161
- },
1162
-
1163
- decrementSeconds: function() {
1164
- var newDate = date.clone().subtract(1, 's');
1165
- if( isValid(newDate, 's') ) {
1166
- setValue(newDate);
1167
- }
1168
- },
1169
-
1170
- togglePeriod: function() {
1171
- setValue(date.clone().add((date.hours() >= 12) ? -12 : 12, 'h'));
1172
- },
1173
-
1174
- togglePicker: function(e) {
1175
- var $this = $(e.target),
1176
- $parent = $this.closest('ul'),
1177
- expanded = $parent.find('.in'),
1178
- closed = $parent.find('.collapse:not(.in)'),
1179
- collapseData;
1180
-
1181
- if( expanded && expanded.length ) {
1182
- collapseData = expanded.data('collapse');
1183
- if( collapseData && collapseData.transitioning ) {
1184
- return;
1185
- }
1186
- if( expanded.collapse ) { // if collapse plugin is available through bootstrap.js then use it
1187
- expanded.collapse('hide');
1188
- closed.collapse('show');
1189
- } else { // otherwise just toggle in class on the two views
1190
- expanded.removeClass('in');
1191
- closed.addClass('in');
1192
- }
1193
- if( $this.is('span') ) {
1194
- $this.toggleClass(options.icons.time + ' ' + options.icons.date);
1195
- } else {
1196
- $this.find('span').toggleClass(options.icons.time + ' ' + options.icons.date);
1197
- }
1198
-
1199
- // NOTE: uncomment if toggled state will be restored in show()
1200
- //if (component) {
1201
- // component.find('span').toggleClass(options.icons.time + ' ' + options.icons.date);
1202
- //}
1203
- }
1204
- },
1205
-
1206
- showPicker: function() {
1207
- widget.find('.timepicker > div:not(.timepicker-picker)').hide();
1208
- widget.find('.timepicker .timepicker-picker').show();
1209
- },
1210
-
1211
- showHours: function() {
1212
- widget.find('.timepicker .timepicker-picker').hide();
1213
- widget.find('.timepicker .timepicker-hours').show();
1214
- },
1215
-
1216
- showMinutes: function() {
1217
- widget.find('.timepicker .timepicker-picker').hide();
1218
- widget.find('.timepicker .timepicker-minutes').show();
1219
- },
1220
-
1221
- showSeconds: function() {
1222
- widget.find('.timepicker .timepicker-picker').hide();
1223
- widget.find('.timepicker .timepicker-seconds').show();
1224
- },
1225
-
1226
- selectHour: function(e) {
1227
- var hour = parseInt($(e.target).text(), 10);
1228
-
1229
- if( !use24Hours ) {
1230
- if( date.hours() >= 12 ) {
1231
- if( hour !== 12 ) {
1232
- hour += 12;
1233
- }
1234
- } else {
1235
- if( hour === 12 ) {
1236
- hour = 0;
1237
- }
1238
- }
1239
- }
1240
- setValue(date.clone().hours(hour));
1241
- actions.showPicker.call(picker);
1242
- },
1243
-
1244
- selectMinute: function(e) {
1245
- setValue(date.clone().minutes(parseInt($(e.target).text(), 10)));
1246
- actions.showPicker.call(picker);
1247
- },
1248
-
1249
- selectSecond: function(e) {
1250
- setValue(date.clone().seconds(parseInt($(e.target).text(), 10)));
1251
- actions.showPicker.call(picker);
1252
- },
1253
-
1254
- clear: clear,
1255
-
1256
- today: function() {
1257
- var todaysDate = getMoment();
1258
- if( isValid(todaysDate, 'd') ) {
1259
- setValue(todaysDate);
1260
- }
1261
- },
1262
-
1263
- close: hide
1264
- },
1265
-
1266
- doAction = function(e) {
1267
- if( $(e.currentTarget).is('.disabled') ) {
1268
- return false;
1269
- }
1270
- actions[$(e.currentTarget).data('action')].apply(picker, arguments);
1271
- return false;
1272
- },
1273
-
1274
- /**
1275
- * Shows the widget. Possibly will emit dp.show and dp.change
1276
- */
1277
- show = function() {
1278
- var currentMoment,
1279
- useCurrentGranularity = {
1280
- 'year': function(m) {
1281
- return m.month(0).date(1).hours(0).seconds(0).minutes(0);
1282
- },
1283
- 'month': function(m) {
1284
- return m.date(1).hours(0).seconds(0).minutes(0);
1285
- },
1286
- 'day': function(m) {
1287
- return m.hours(0).seconds(0).minutes(0);
1288
- },
1289
- 'hour': function(m) {
1290
- return m.seconds(0).minutes(0);
1291
- },
1292
- 'minute': function(m) {
1293
- return m.seconds(0);
1294
- }
1295
- };
1296
-
1297
- if( input.prop('disabled') || (!options.ignoreReadonly && input.prop('readonly')) || widget ) {
1298
- return picker;
1299
- }
1300
- if( input.val() !== undefined && input.val().trim().length !== 0 ) {
1301
- setValue(parseInputDate(input.val().trim()));
1302
- } else if( unset && options.useCurrent && (options.inline || (input.is('input') && input.val().trim().length === 0)) ) {
1303
- currentMoment = getMoment();
1304
- if( typeof options.useCurrent === 'string' ) {
1305
- currentMoment = useCurrentGranularity[options.useCurrent](currentMoment);
1306
- }
1307
- setValue(currentMoment);
1308
- }
1309
- widget = getTemplate();
1310
-
1311
- fillDow();
1312
- fillMonths();
1313
-
1314
- widget.find('.timepicker-hours').hide();
1315
- widget.find('.timepicker-minutes').hide();
1316
- widget.find('.timepicker-seconds').hide();
1317
-
1318
- update();
1319
- showMode();
1320
-
1321
- $(window).on('resize', place);
1322
- widget.on('click', '[data-action]', doAction); // this handles clicks on the widget
1323
- widget.on('mousedown', false);
1324
-
1325
- if( component && component.hasClass('btn') ) {
1326
- component.toggleClass('active');
1327
- }
1328
- place();
1329
- widget.show();
1330
- if( options.focusOnShow && !input.is(':focus') ) {
1331
- input.focus();
1332
- }
1333
-
1334
- notifyEvent({
1335
- type: 'dp.show'
1336
- });
1337
- return picker;
1338
- },
1339
-
1340
- /**
1341
- * Shows or hides the widget
1342
- */
1343
- toggle = function() {
1344
- return (widget ? hide() : show());
1345
- },
1346
-
1347
- keydown = function(e) {
1348
- var handler = null,
1349
- index,
1350
- index2,
1351
- pressedKeys = [],
1352
- pressedModifiers = {},
1353
- currentKey = e.which,
1354
- keyBindKeys,
1355
- allModifiersPressed,
1356
- pressed = 'p';
1357
-
1358
- keyState[currentKey] = pressed;
1359
-
1360
- for( index in keyState ) {
1361
- if( keyState.hasOwnProperty(index) && keyState[index] === pressed ) {
1362
- pressedKeys.push(index);
1363
- if( parseInt(index, 10) !== currentKey ) {
1364
- pressedModifiers[index] = true;
1365
- }
1366
- }
1367
- }
1368
-
1369
- for( index in options.keyBinds ) {
1370
- if( options.keyBinds.hasOwnProperty(index) && typeof (options.keyBinds[index]) === 'function' ) {
1371
- keyBindKeys = index.split(' ');
1372
- if( keyBindKeys.length === pressedKeys.length && keyMap[currentKey] === keyBindKeys[keyBindKeys.length - 1] ) {
1373
- allModifiersPressed = true;
1374
- for( index2 = keyBindKeys.length - 2; index2 >= 0; index2-- ) {
1375
- if( !(keyMap[keyBindKeys[index2]] in pressedModifiers) ) {
1376
- allModifiersPressed = false;
1377
- break;
1378
- }
1379
- }
1380
- if( allModifiersPressed ) {
1381
- handler = options.keyBinds[index];
1382
- break;
1383
- }
1384
- }
1385
- }
1386
- }
1387
-
1388
- if( handler ) {
1389
- handler.call(picker, widget);
1390
- e.stopPropagation();
1391
- e.preventDefault();
1392
- }
1393
- },
1394
-
1395
- keyup = function(e) {
1396
- keyState[e.which] = 'r';
1397
- e.stopPropagation();
1398
- e.preventDefault();
1399
- },
1400
-
1401
- change = function(e) {
1402
- var val = $(e.target).val().trim(),
1403
- parsedDate = val ? parseInputDate(val) : null;
1404
- setValue(parsedDate);
1405
- e.stopImmediatePropagation();
1406
- return false;
1407
- },
1408
-
1409
- attachDatePickerElementEvents = function() {
1410
- input.on({
1411
- 'change': change,
1412
- 'blur': options.debug ? '' : hide,
1413
- 'keydown': keydown,
1414
- 'keyup': keyup,
1415
- 'focus': options.allowInputToggle ? show : ''
1416
- });
1417
-
1418
- if( element.is('input') ) {
1419
- input.on({
1420
- 'focus': show
1421
- });
1422
- } else if( component ) {
1423
- component.on('click', toggle);
1424
- component.on('mousedown', false);
1425
- }
1426
- },
1427
-
1428
- detachDatePickerElementEvents = function() {
1429
- input.off({
1430
- 'change': change,
1431
- 'blur': blur,
1432
- 'keydown': keydown,
1433
- 'keyup': keyup,
1434
- 'focus': options.allowInputToggle ? hide : ''
1435
- });
1436
-
1437
- if( element.is('input') ) {
1438
- input.off({
1439
- 'focus': show
1440
- });
1441
- } else if( component ) {
1442
- component.off('click', toggle);
1443
- component.off('mousedown', false);
1444
- }
1445
- },
1446
-
1447
- indexGivenDates = function(givenDatesArray) {
1448
- // Store given enabledDates and disabledDates as keys.
1449
- // This way we can check their existence in O(1) time instead of looping through whole array.
1450
- // (for example: options.enabledDates['2014-02-27'] === true)
1451
- var givenDatesIndexed = {};
1452
- $.each(givenDatesArray, function() {
1453
- var dDate = parseInputDate(this);
1454
- if( dDate.isValid() ) {
1455
- givenDatesIndexed[dDate.format('YYYY-MM-DD')] = true;
1456
- }
1457
- });
1458
- return (Object.keys(givenDatesIndexed).length) ? givenDatesIndexed : false;
1459
- },
1460
-
1461
- indexGivenHours = function(givenHoursArray) {
1462
- // Store given enabledHours and disabledHours as keys.
1463
- // This way we can check their existence in O(1) time instead of looping through whole array.
1464
- // (for example: options.enabledHours['2014-02-27'] === true)
1465
- var givenHoursIndexed = {};
1466
- $.each(givenHoursArray, function() {
1467
- givenHoursIndexed[this] = true;
1468
- });
1469
- return (Object.keys(givenHoursIndexed).length) ? givenHoursIndexed : false;
1470
- },
1471
-
1472
- initFormatting = function() {
1473
- var format = options.format || 'L LT';
1474
-
1475
- actualFormat = format.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, function(formatInput) {
1476
- var newinput = date.localeData().longDateFormat(formatInput) || formatInput;
1477
- return newinput.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, function(formatInput2) { //temp fix for #740
1478
- return date.localeData().longDateFormat(formatInput2) || formatInput2;
1479
- });
1480
- });
1481
-
1482
- parseFormats = options.extraFormats ? options.extraFormats.slice() : [];
1483
- if( parseFormats.indexOf(format) < 0 && parseFormats.indexOf(actualFormat) < 0 ) {
1484
- parseFormats.push(actualFormat);
1485
- }
1486
-
1487
- use24Hours = (actualFormat.toLowerCase().indexOf('a') < 1 && actualFormat.replace(/\[.*?\]/g, '').indexOf('h') < 1);
1488
-
1489
- if( isEnabled('y') ) {
1490
- minViewModeNumber = 2;
1491
- }
1492
- if( isEnabled('M') ) {
1493
- minViewModeNumber = 1;
1494
- }
1495
- if( isEnabled('d') ) {
1496
- minViewModeNumber = 0;
1497
- }
1498
-
1499
- currentViewMode = Math.max(minViewModeNumber, currentViewMode);
1500
-
1501
- if( !unset ) {
1502
- setValue(date);
1503
- }
1504
- };
1505
-
1506
- /********************************************************************************
1507
- *
1508
- * Public API functions
1509
- * =====================
1510
- *
1511
- * Important: Do not expose direct references to private objects or the options
1512
- * object to the outer world. Always return a clone when returning values or make
1513
- * a clone when setting a private variable.
1514
- *
1515
- ********************************************************************************/
1516
- picker.destroy = function() {
1517
- ///<summary>Destroys the widget and removes all attached event listeners</summary>
1518
- hide();
1519
- detachDatePickerElementEvents();
1520
- element.removeData('DateTimePicker');
1521
- element.removeData('date');
1522
- };
1523
-
1524
- picker.toggle = toggle;
1525
-
1526
- picker.show = show;
1527
-
1528
- picker.hide = hide;
1529
-
1530
- picker.disable = function() {
1531
- ///<summary>Disables the input element, the component is attached to, by adding a disabled="true" attribute
1532
- // to it. /If the widget was visible before that call it is hidden. Possibly emits dp.hide</summary>
1533
- hide();
1534
- if( component && component.hasClass('btn') ) {
1535
- component.addClass('disabled');
1536
- }
1537
- input.prop('disabled', true);
1538
- return picker;
1539
- };
1540
-
1541
- picker.enable = function() {
1542
- ///<summary>Enables the input element, the component is attached to, by removing disabled attribute from
1543
- // it.</summary>
1544
- if( component && component.hasClass('btn') ) {
1545
- component.removeClass('disabled');
1546
- }
1547
- input.prop('disabled', false);
1548
- return picker;
1549
- };
1550
-
1551
- picker.ignoreReadonly = function(ignoreReadonly) {
1552
- if( arguments.length === 0 ) {
1553
- return options.ignoreReadonly;
1554
- }
1555
- if( typeof ignoreReadonly !== 'boolean' ) {
1556
- throw new TypeError('ignoreReadonly () expects a boolean parameter');
1557
- }
1558
- options.ignoreReadonly = ignoreReadonly;
1559
- return picker;
1560
- };
1561
-
1562
- picker.options = function(newOptions) {
1563
- if( arguments.length === 0 ) {
1564
- return $.extend(true, {}, options);
1565
- }
1566
-
1567
- if( !(newOptions instanceof Object) ) {
1568
- throw new TypeError('options() options parameter should be an object');
1569
- }
1570
- $.extend(true, options, newOptions);
1571
- $.each(options, function(key, value) {
1572
- if( picker[key] !== undefined ) {
1573
- picker[key](value);
1574
- } else {
1575
- throw new TypeError('option ' + key + ' is not recognized!');
1576
- }
1577
- });
1578
- return picker;
1579
- };
1580
-
1581
- picker.date = function(newDate) {
1582
- ///<signature helpKeyword="$.fn.factoryBootstrap330_DatetimePickerControl.date">
1583
- ///<summary>Returns the component's model current date, a moment object or null if not set.</summary>
1584
- ///<returns type="Moment">date.clone()</returns>
1585
- ///</signature>
1586
- ///<signature>
1587
- ///<summary>Sets the components model current moment to it. Passing a null value unsets the components
1588
- // model current moment. Parsing of the newDate parameter is made using moment library with the
1589
- // options.format and options.useStrict components configuration.</summary> /<param name="newDate"
1590
- // locid="$.fn.factoryBootstrap330_DatetimePickerControl.date_p:newDate">Takes string, Date, moment, null
1591
- // parameter.</param> /</signature>
1592
- if( arguments.length === 0 ) {
1593
- if( unset ) {
1594
- return null;
1595
- }
1596
- return date.clone();
1597
- }
1598
-
1599
- if( newDate !== null && typeof newDate !== 'string' && !moment.isMoment(newDate) && !(newDate instanceof Date) ) {
1600
- throw new TypeError('date() parameter must be one of [null, string, moment or Date]');
1601
- }
1602
-
1603
- setValue(newDate === null ? null : parseInputDate(newDate));
1604
- return picker;
1605
- };
1606
-
1607
- picker.format = function(newFormat) {
1608
- ///<summary>test su</summary>
1609
- ///<param name="newFormat">info about para</param>
1610
- ///<returns type="string|boolean">returns foo</returns>
1611
- if( arguments.length === 0 ) {
1612
- return options.format;
1613
- }
1614
-
1615
- if( (typeof newFormat !== 'string') && ((typeof newFormat !== 'boolean') || (newFormat !== false)) ) {
1616
- throw new TypeError('format() expects a string or boolean:false parameter ' + newFormat);
1617
- }
1618
-
1619
- options.format = newFormat;
1620
- if( actualFormat ) {
1621
- initFormatting(); // reinit formatting
1622
- }
1623
- return picker;
1624
- };
1625
-
1626
- picker.timeZone = function(newZone) {
1627
- if( arguments.length === 0 ) {
1628
- return options.timeZone;
1629
- }
1630
-
1631
- if( typeof newZone !== 'string' ) {
1632
- throw new TypeError('newZone() expects a string parameter');
1633
- }
1634
-
1635
- options.timeZone = newZone;
1636
-
1637
- return picker;
1638
- };
1639
-
1640
- picker.dayViewHeaderFormat = function(newFormat) {
1641
- if( arguments.length === 0 ) {
1642
- return options.dayViewHeaderFormat;
1643
- }
1644
-
1645
- if( typeof newFormat !== 'string' ) {
1646
- throw new TypeError('dayViewHeaderFormat() expects a string parameter');
1647
- }
1648
-
1649
- options.dayViewHeaderFormat = newFormat;
1650
- return picker;
1651
- };
1652
-
1653
- picker.extraFormats = function(formats) {
1654
- if( arguments.length === 0 ) {
1655
- return options.extraFormats;
1656
- }
1657
-
1658
- if( formats !== false && !(formats instanceof Array) ) {
1659
- throw new TypeError('extraFormats() expects an array or false parameter');
1660
- }
1661
-
1662
- options.extraFormats = formats;
1663
- if( parseFormats ) {
1664
- initFormatting(); // reinit formatting
1665
- }
1666
- return picker;
1667
- };
1668
-
1669
- picker.disabledDates = function(dates) {
1670
- ///<signature helpKeyword="$.fn.factoryBootstrap330_DatetimePickerControl.disabledDates">
1671
- ///<summary>Returns an array with the currently set disabled dates on the component.</summary>
1672
- ///<returns type="array">options.disabledDates</returns>
1673
- ///</signature>
1674
- ///<signature>
1675
- ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling
1676
- // this function removes the configuration of /options.enabledDates if such exist.</summary> /<param
1677
- // name="dates" locid="$.fn.factoryBootstrap330_DatetimePickerControl.disabledDates_p:dates">Takes an [
1678
- // string or Date or moment ] of values and allows the user to select only from those days.</param>
1679
- // /</signature>
1680
- if( arguments.length === 0 ) {
1681
- return (options.disabledDates ? $.extend({}, options.disabledDates) : options.disabledDates);
1682
- }
1683
-
1684
- if( !dates ) {
1685
- options.disabledDates = false;
1686
- update();
1687
- return picker;
1688
- }
1689
- if( !(dates instanceof Array) ) {
1690
- throw new TypeError('disabledDates() expects an array parameter');
1691
- }
1692
- options.disabledDates = indexGivenDates(dates);
1693
- options.enabledDates = false;
1694
- update();
1695
- return picker;
1696
- };
1697
-
1698
- picker.enabledDates = function(dates) {
1699
- ///<signature helpKeyword="$.fn.factoryBootstrap330_DatetimePickerControl.enabledDates">
1700
- ///<summary>Returns an array with the currently set enabled dates on the component.</summary>
1701
- ///<returns type="array">options.enabledDates</returns>
1702
- ///</signature>
1703
- ///<signature>
1704
- ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling
1705
- // this function removes the configuration of options.disabledDates if such exist.</summary> /<param
1706
- // name="dates" locid="$.fn.factoryBootstrap330_DatetimePickerControl.enabledDates_p:dates">Takes an [
1707
- // string or Date or moment ] of values and allows the user to select only from those days.</param>
1708
- // /</signature>
1709
- if( arguments.length === 0 ) {
1710
- return (options.enabledDates ? $.extend({}, options.enabledDates) : options.enabledDates);
1711
- }
1712
-
1713
- if( !dates ) {
1714
- options.enabledDates = false;
1715
- update();
1716
- return picker;
1717
- }
1718
- if( !(dates instanceof Array) ) {
1719
- throw new TypeError('enabledDates() expects an array parameter');
1720
- }
1721
- options.enabledDates = indexGivenDates(dates);
1722
- options.disabledDates = false;
1723
- update();
1724
- return picker;
1725
- };
1726
-
1727
- picker.daysOfWeekDisabled = function(daysOfWeekDisabled) {
1728
- if( arguments.length === 0 ) {
1729
- return options.daysOfWeekDisabled.splice(0);
1730
- }
1731
-
1732
- if( (typeof daysOfWeekDisabled === 'boolean') && !daysOfWeekDisabled ) {
1733
- options.daysOfWeekDisabled = false;
1734
- update();
1735
- return picker;
1736
- }
1737
-
1738
- if( !(daysOfWeekDisabled instanceof Array) ) {
1739
- throw new TypeError('daysOfWeekDisabled() expects an array parameter');
1740
- }
1741
- options.daysOfWeekDisabled = daysOfWeekDisabled.reduce(function(previousValue, currentValue) {
1742
- currentValue = parseInt(currentValue, 10);
1743
- if( currentValue > 6 || currentValue < 0 || isNaN(currentValue) ) {
1744
- return previousValue;
1745
- }
1746
- if( previousValue.indexOf(currentValue) === -1 ) {
1747
- previousValue.push(currentValue);
1748
- }
1749
- return previousValue;
1750
- }, []).sort();
1751
- if( options.useCurrent && !options.keepInvalid ) {
1752
- var tries = 0;
1753
- while( !isValid(date, 'd') ) {
1754
- date.add(1, 'd');
1755
- if( tries === 31 ) {
1756
- throw 'Tried 31 times to find a valid date';
1757
- }
1758
- tries++;
1759
- }
1760
- setValue(date);
1761
- }
1762
- update();
1763
- return picker;
1764
- };
1765
-
1766
- picker.maxDate = function(maxDate) {
1767
- if( arguments.length === 0 ) {
1768
- return options.maxDate ? options.maxDate.clone() : options.maxDate;
1769
- }
1770
-
1771
- if( (typeof maxDate === 'boolean') && maxDate === false ) {
1772
- options.maxDate = false;
1773
- update();
1774
- return picker;
1775
- }
1776
-
1777
- if( typeof maxDate === 'string' ) {
1778
- if( maxDate === 'now' || maxDate === 'moment' ) {
1779
- maxDate = getMoment();
1780
- }
1781
- }
1782
-
1783
- var parsedDate = parseInputDate(maxDate);
1784
-
1785
- if( !parsedDate.isValid() ) {
1786
- throw new TypeError('maxDate() Could not parse date parameter: ' + maxDate);
1787
- }
1788
- if( options.minDate && parsedDate.isBefore(options.minDate) ) {
1789
- throw new TypeError('maxDate() date parameter is before options.minDate: ' + parsedDate.format(actualFormat));
1790
- }
1791
- options.maxDate = parsedDate;
1792
- if( options.useCurrent && !options.keepInvalid && date.isAfter(maxDate) ) {
1793
- setValue(options.maxDate);
1794
- }
1795
- if( viewDate.isAfter(parsedDate) ) {
1796
- viewDate = parsedDate.clone().subtract(options.stepping, 'm');
1797
- }
1798
- update();
1799
- return picker;
1800
- };
1801
-
1802
- picker.minDate = function(minDate) {
1803
- if( arguments.length === 0 ) {
1804
- return options.minDate ? options.minDate.clone() : options.minDate;
1805
- }
1806
-
1807
- if( (typeof minDate === 'boolean') && minDate === false ) {
1808
- options.minDate = false;
1809
- update();
1810
- return picker;
1811
- }
1812
-
1813
- if( typeof minDate === 'string' ) {
1814
- if( minDate === 'now' || minDate === 'moment' ) {
1815
- minDate = getMoment();
1816
- }
1817
- }
1818
-
1819
- var parsedDate = parseInputDate(minDate);
1820
-
1821
- if( !parsedDate.isValid() ) {
1822
- throw new TypeError('minDate() Could not parse date parameter: ' + minDate);
1823
- }
1824
- if( options.maxDate && parsedDate.isAfter(options.maxDate) ) {
1825
- throw new TypeError('minDate() date parameter is after options.maxDate: ' + parsedDate.format(actualFormat));
1826
- }
1827
- options.minDate = parsedDate;
1828
- if( options.useCurrent && !options.keepInvalid && date.isBefore(minDate) ) {
1829
- setValue(options.minDate);
1830
- }
1831
- if( viewDate.isBefore(parsedDate) ) {
1832
- viewDate = parsedDate.clone().add(options.stepping, 'm');
1833
- }
1834
- update();
1835
- return picker;
1836
- };
1837
-
1838
- picker.defaultDate = function(defaultDate) {
1839
- ///<signature helpKeyword="$.fn.factoryBootstrap330_DatetimePickerControl.defaultDate">
1840
- ///<summary>Returns a moment with the options.defaultDate option configuration or false if not
1841
- // set</summary>
1842
- ///<returns type="Moment">date.clone()</returns>
1843
- ///</signature>
1844
- ///<signature>
1845
- ///<summary>Will set the picker's inital date. If a boolean:false value is passed the options.defaultDate
1846
- // parameter is cleared.</summary> /<param name="defaultDate"
1847
- // locid="$.fn.factoryBootstrap330_DatetimePickerControl.defaultDate_p:defaultDate">Takes a string, Date,
1848
- // moment, boolean:false</param> /</signature>
1849
- if( arguments.length === 0 ) {
1850
- return options.defaultDate ? options.defaultDate.clone() : options.defaultDate;
1851
- }
1852
- if( !defaultDate ) {
1853
- options.defaultDate = false;
1854
- return picker;
1855
- }
1856
-
1857
- if( typeof defaultDate === 'string' ) {
1858
- if( defaultDate === 'now' || defaultDate === 'moment' ) {
1859
- defaultDate = getMoment();
1860
- } else {
1861
- defaultDate = getMoment(defaultDate);
1862
- }
1863
- }
1864
-
1865
- var parsedDate = parseInputDate(defaultDate);
1866
- if( !parsedDate.isValid() ) {
1867
- throw new TypeError('defaultDate() Could not parse date parameter: ' + defaultDate);
1868
- }
1869
- if( !isValid(parsedDate) ) {
1870
- throw new TypeError('defaultDate() date passed is invalid according to component setup validations');
1871
- }
1872
-
1873
- options.defaultDate = parsedDate;
1874
-
1875
- if( (options.defaultDate && options.inline) || input.val().trim() === '' ) {
1876
- setValue(options.defaultDate);
1877
- }
1878
- return picker;
1879
- };
1880
-
1881
- picker.locale = function(locale) {
1882
- if( arguments.length === 0 ) {
1883
- return options.locale;
1884
- }
1885
-
1886
- if( !moment.localeData(locale) ) {
1887
- throw new TypeError('locale() locale ' + locale + ' is not loaded from moment locales!');
1888
- }
1889
-
1890
- options.locale = locale;
1891
- date.locale(options.locale);
1892
- viewDate.locale(options.locale);
1893
-
1894
- if( actualFormat ) {
1895
- initFormatting(); // reinit formatting
1896
- }
1897
- if( widget ) {
1898
- hide();
1899
- show();
1900
- }
1901
- return picker;
1902
- };
1903
-
1904
- picker.stepping = function(stepping) {
1905
- if( arguments.length === 0 ) {
1906
- return options.stepping;
1907
- }
1908
-
1909
- stepping = parseInt(stepping, 10);
1910
- if( isNaN(stepping) || stepping < 1 ) {
1911
- stepping = 1;
1912
- }
1913
- options.stepping = stepping;
1914
- return picker;
1915
- };
1916
-
1917
- picker.useCurrent = function(useCurrent) {
1918
- var useCurrentOptions = ['year', 'month', 'day', 'hour', 'minute'];
1919
- if( arguments.length === 0 ) {
1920
- return options.useCurrent;
1921
- }
1922
-
1923
- if( (typeof useCurrent !== 'boolean') && (typeof useCurrent !== 'string') ) {
1924
- throw new TypeError('useCurrent() expects a boolean or string parameter');
1925
- }
1926
- if( typeof useCurrent === 'string' && useCurrentOptions.indexOf(useCurrent.toLowerCase()) === -1 ) {
1927
- throw new TypeError('useCurrent() expects a string parameter of ' + useCurrentOptions.join(', '));
1928
- }
1929
- options.useCurrent = useCurrent;
1930
- return picker;
1931
- };
1932
-
1933
- picker.collapse = function(collapse) {
1934
- if( arguments.length === 0 ) {
1935
- return options.collapse;
1936
- }
1937
-
1938
- if( typeof collapse !== 'boolean' ) {
1939
- throw new TypeError('collapse() expects a boolean parameter');
1940
- }
1941
- if( options.collapse === collapse ) {
1942
- return picker;
1943
- }
1944
- options.collapse = collapse;
1945
- if( widget ) {
1946
- hide();
1947
- show();
1948
- }
1949
- return picker;
1950
- };
1951
-
1952
- picker.icons = function(icons) {
1953
- if( arguments.length === 0 ) {
1954
- return $.extend({}, options.icons);
1955
- }
1956
-
1957
- if( !(icons instanceof Object) ) {
1958
- throw new TypeError('icons() expects parameter to be an Object');
1959
- }
1960
- $.extend(options.icons, icons);
1961
- if( widget ) {
1962
- hide();
1963
- show();
1964
- }
1965
- return picker;
1966
- };
1967
-
1968
- picker.tooltips = function(tooltips) {
1969
- if( arguments.length === 0 ) {
1970
- return $.extend({}, options.tooltips);
1971
- }
1972
-
1973
- if( !(tooltips instanceof Object) ) {
1974
- throw new TypeError('tooltips() expects parameter to be an Object');
1975
- }
1976
- $.extend(options.tooltips, tooltips);
1977
- if( widget ) {
1978
- hide();
1979
- show();
1980
- }
1981
- return picker;
1982
- };
1983
-
1984
- picker.useStrict = function(useStrict) {
1985
- if( arguments.length === 0 ) {
1986
- return options.useStrict;
1987
- }
1988
-
1989
- if( typeof useStrict !== 'boolean' ) {
1990
- throw new TypeError('useStrict() expects a boolean parameter');
1991
- }
1992
- options.useStrict = useStrict;
1993
- return picker;
1994
- };
1995
-
1996
- picker.sideBySide = function(sideBySide) {
1997
- if( arguments.length === 0 ) {
1998
- return options.sideBySide;
1999
- }
2000
-
2001
- if( typeof sideBySide !== 'boolean' ) {
2002
- throw new TypeError('sideBySide() expects a boolean parameter');
2003
- }
2004
- options.sideBySide = sideBySide;
2005
- if( widget ) {
2006
- hide();
2007
- show();
2008
- }
2009
- return picker;
2010
- };
2011
-
2012
- picker.viewMode = function(viewMode) {
2013
- if( arguments.length === 0 ) {
2014
- return options.viewMode;
2015
- }
2016
-
2017
- if( typeof viewMode !== 'string' ) {
2018
- throw new TypeError('viewMode() expects a string parameter');
2019
- }
2020
-
2021
- if( viewModes.indexOf(viewMode) === -1 ) {
2022
- throw new TypeError('viewMode() parameter must be one of (' + viewModes.join(', ') + ') value');
2023
- }
2024
-
2025
- options.viewMode = viewMode;
2026
- currentViewMode = Math.max(viewModes.indexOf(viewMode), minViewModeNumber);
2027
-
2028
- showMode();
2029
- return picker;
2030
- };
2031
-
2032
- picker.toolbarPlacement = function(toolbarPlacement) {
2033
- if( arguments.length === 0 ) {
2034
- return options.toolbarPlacement;
2035
- }
2036
-
2037
- if( typeof toolbarPlacement !== 'string' ) {
2038
- throw new TypeError('toolbarPlacement() expects a string parameter');
2039
- }
2040
- if( toolbarPlacements.indexOf(toolbarPlacement) === -1 ) {
2041
- throw new TypeError('toolbarPlacement() parameter must be one of (' + toolbarPlacements.join(', ') + ') value');
2042
- }
2043
- options.toolbarPlacement = toolbarPlacement;
2044
-
2045
- if( widget ) {
2046
- hide();
2047
- show();
2048
- }
2049
- return picker;
2050
- };
2051
-
2052
- picker.widgetPositioning = function(widgetPositioning) {
2053
- if( arguments.length === 0 ) {
2054
- return $.extend({}, options.widgetPositioning);
2055
- }
2056
-
2057
- if( ({}).toString.call(widgetPositioning) !== '[object Object]' ) {
2058
- throw new TypeError('widgetPositioning() expects an object variable');
2059
- }
2060
- if( widgetPositioning.horizontal ) {
2061
- if( typeof widgetPositioning.horizontal !== 'string' ) {
2062
- throw new TypeError('widgetPositioning() horizontal variable must be a string');
2063
- }
2064
- widgetPositioning.horizontal = widgetPositioning.horizontal.toLowerCase();
2065
- if( horizontalModes.indexOf(widgetPositioning.horizontal) === -1 ) {
2066
- throw new TypeError('widgetPositioning() expects horizontal parameter to be one of (' + horizontalModes.join(', ') + ')');
2067
- }
2068
- options.widgetPositioning.horizontal = widgetPositioning.horizontal;
2069
- }
2070
- if( widgetPositioning.vertical ) {
2071
- if( typeof widgetPositioning.vertical !== 'string' ) {
2072
- throw new TypeError('widgetPositioning() vertical variable must be a string');
2073
- }
2074
- widgetPositioning.vertical = widgetPositioning.vertical.toLowerCase();
2075
- if( verticalModes.indexOf(widgetPositioning.vertical) === -1 ) {
2076
- throw new TypeError('widgetPositioning() expects vertical parameter to be one of (' + verticalModes.join(', ') + ')');
2077
- }
2078
- options.widgetPositioning.vertical = widgetPositioning.vertical;
2079
- }
2080
- update();
2081
- return picker;
2082
- };
2083
-
2084
- picker.calendarWeeks = function(calendarWeeks) {
2085
- if( arguments.length === 0 ) {
2086
- return options.calendarWeeks;
2087
- }
2088
-
2089
- if( typeof calendarWeeks !== 'boolean' ) {
2090
- throw new TypeError('calendarWeeks() expects parameter to be a boolean value');
2091
- }
2092
-
2093
- options.calendarWeeks = calendarWeeks;
2094
- update();
2095
- return picker;
2096
- };
2097
-
2098
- picker.showTodayButton = function(showTodayButton) {
2099
- if( arguments.length === 0 ) {
2100
- return options.showTodayButton;
2101
- }
2102
-
2103
- if( typeof showTodayButton !== 'boolean' ) {
2104
- throw new TypeError('showTodayButton() expects a boolean parameter');
2105
- }
2106
-
2107
- options.showTodayButton = showTodayButton;
2108
- if( widget ) {
2109
- hide();
2110
- show();
2111
- }
2112
- return picker;
2113
- };
2114
-
2115
- picker.showClear = function(showClear) {
2116
- if( arguments.length === 0 ) {
2117
- return options.showClear;
2118
- }
2119
-
2120
- if( typeof showClear !== 'boolean' ) {
2121
- throw new TypeError('showClear() expects a boolean parameter');
2122
- }
2123
-
2124
- options.showClear = showClear;
2125
- if( widget ) {
2126
- hide();
2127
- show();
2128
- }
2129
- return picker;
2130
- };
2131
-
2132
- picker.widgetParent = function(widgetParent) {
2133
- if( arguments.length === 0 ) {
2134
- return options.widgetParent;
2135
- }
2136
-
2137
- if( typeof widgetParent === 'string' ) {
2138
- widgetParent = $(widgetParent);
2139
- }
2140
-
2141
- if( widgetParent !== null && (typeof widgetParent !== 'string' && !(widgetParent instanceof $)) ) {
2142
- throw new TypeError('widgetParent() expects a string or a jQuery object parameter');
2143
- }
2144
-
2145
- options.widgetParent = widgetParent;
2146
- if( widget ) {
2147
- hide();
2148
- show();
2149
- }
2150
- return picker;
2151
- };
2152
-
2153
- picker.keepOpen = function(keepOpen) {
2154
- if( arguments.length === 0 ) {
2155
- return options.keepOpen;
2156
- }
2157
-
2158
- if( typeof keepOpen !== 'boolean' ) {
2159
- throw new TypeError('keepOpen() expects a boolean parameter');
2160
- }
2161
-
2162
- options.keepOpen = keepOpen;
2163
- return picker;
2164
- };
2165
-
2166
- picker.focusOnShow = function(focusOnShow) {
2167
- if( arguments.length === 0 ) {
2168
- return options.focusOnShow;
2169
- }
2170
-
2171
- if( typeof focusOnShow !== 'boolean' ) {
2172
- throw new TypeError('focusOnShow() expects a boolean parameter');
2173
- }
2174
-
2175
- options.focusOnShow = focusOnShow;
2176
- return picker;
2177
- };
2178
-
2179
- picker.inline = function(inline) {
2180
- if( arguments.length === 0 ) {
2181
- return options.inline;
2182
- }
2183
-
2184
- if( typeof inline !== 'boolean' ) {
2185
- throw new TypeError('inline() expects a boolean parameter');
2186
- }
2187
-
2188
- options.inline = inline;
2189
- return picker;
2190
- };
2191
-
2192
- picker.clear = function() {
2193
- clear();
2194
- return picker;
2195
- };
2196
-
2197
- picker.keyBinds = function(keyBinds) {
2198
- if( arguments.length === 0 ) {
2199
- return options.keyBinds;
2200
- }
2201
-
2202
- options.keyBinds = keyBinds;
2203
- return picker;
2204
- };
2205
-
2206
- picker.getMoment = function(d) {
2207
- return getMoment(d);
2208
- };
2209
-
2210
- picker.debug = function(debug) {
2211
- if( typeof debug !== 'boolean' ) {
2212
- throw new TypeError('debug() expects a boolean parameter');
2213
- }
2214
-
2215
- options.debug = debug;
2216
- return picker;
2217
- };
2218
-
2219
- picker.allowInputToggle = function(allowInputToggle) {
2220
- if( arguments.length === 0 ) {
2221
- return options.allowInputToggle;
2222
- }
2223
-
2224
- if( typeof allowInputToggle !== 'boolean' ) {
2225
- throw new TypeError('allowInputToggle() expects a boolean parameter');
2226
- }
2227
-
2228
- options.allowInputToggle = allowInputToggle;
2229
- return picker;
2230
- };
2231
-
2232
- picker.showClose = function(showClose) {
2233
- if( arguments.length === 0 ) {
2234
- return options.showClose;
2235
- }
2236
-
2237
- if( typeof showClose !== 'boolean' ) {
2238
- throw new TypeError('showClose() expects a boolean parameter');
2239
- }
2240
-
2241
- options.showClose = showClose;
2242
- return picker;
2243
- };
2244
-
2245
- picker.keepInvalid = function(keepInvalid) {
2246
- if( arguments.length === 0 ) {
2247
- return options.keepInvalid;
2248
- }
2249
-
2250
- if( typeof keepInvalid !== 'boolean' ) {
2251
- throw new TypeError('keepInvalid() expects a boolean parameter');
2252
- }
2253
- options.keepInvalid = keepInvalid;
2254
- return picker;
2255
- };
2256
-
2257
- picker.datepickerInput = function(datepickerInput) {
2258
- if( arguments.length === 0 ) {
2259
- return options.datepickerInput;
2260
- }
2261
-
2262
- if( typeof datepickerInput !== 'string' ) {
2263
- throw new TypeError('datepickerInput() expects a string parameter');
2264
- }
2265
-
2266
- options.datepickerInput = datepickerInput;
2267
- return picker;
2268
- };
2269
-
2270
- picker.parseInputDate = function(parseInputDate) {
2271
- if( arguments.length === 0 ) {
2272
- return options.parseInputDate;
2273
- }
2274
-
2275
- if( typeof parseInputDate !== 'function' ) {
2276
- throw new TypeError('parseInputDate() sholud be as function');
2277
- }
2278
-
2279
- options.parseInputDate = parseInputDate;
2280
-
2281
- return picker;
2282
- };
2283
-
2284
- picker.disabledTimeIntervals = function(disabledTimeIntervals) {
2285
- ///<signature helpKeyword="$.fn.factoryBootstrap330_DatetimePickerControl.disabledTimeIntervals">
2286
- ///<summary>Returns an array with the currently set disabled dates on the component.</summary>
2287
- ///<returns type="array">options.disabledTimeIntervals</returns>
2288
- ///</signature>
2289
- ///<signature>
2290
- ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling
2291
- // this function removes the configuration of /options.enabledDates if such exist.</summary> /<param
2292
- // name="dates" locid="$.fn.factoryBootstrap330_DatetimePickerControl.disabledTimeIntervals_p:dates">Takes
2293
- // an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
2294
- // /</signature>
2295
- if( arguments.length === 0 ) {
2296
- return (options.disabledTimeIntervals
2297
- ? $.extend({}, options.disabledTimeIntervals)
2298
- : options.disabledTimeIntervals);
2299
- }
2300
-
2301
- if( !disabledTimeIntervals ) {
2302
- options.disabledTimeIntervals = false;
2303
- update();
2304
- return picker;
2305
- }
2306
- if( !(disabledTimeIntervals instanceof Array) ) {
2307
- throw new TypeError('disabledTimeIntervals() expects an array parameter');
2308
- }
2309
- options.disabledTimeIntervals = disabledTimeIntervals;
2310
- update();
2311
- return picker;
2312
- };
2313
-
2314
- picker.disabledHours = function(hours) {
2315
- ///<signature helpKeyword="$.fn.factoryBootstrap330_DatetimePickerControl.disabledHours">
2316
- ///<summary>Returns an array with the currently set disabled hours on the component.</summary>
2317
- ///<returns type="array">options.disabledHours</returns>
2318
- ///</signature>
2319
- ///<signature>
2320
- ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling
2321
- // this function removes the configuration of /options.enabledHours if such exist.</summary> /<param
2322
- // name="hours" locid="$.fn.factoryBootstrap330_DatetimePickerControl.disabledHours_p:hours">Takes an [ int
2323
- // ] of values and disallows the user to select only from those hours.</param> /</signature>
2324
- if( arguments.length === 0 ) {
2325
- return (options.disabledHours ? $.extend({}, options.disabledHours) : options.disabledHours);
2326
- }
2327
-
2328
- if( !hours ) {
2329
- options.disabledHours = false;
2330
- update();
2331
- return picker;
2332
- }
2333
- if( !(hours instanceof Array) ) {
2334
- throw new TypeError('disabledHours() expects an array parameter');
2335
- }
2336
- options.disabledHours = indexGivenHours(hours);
2337
- options.enabledHours = false;
2338
- if( options.useCurrent && !options.keepInvalid ) {
2339
- var tries = 0;
2340
- while( !isValid(date, 'h') ) {
2341
- date.add(1, 'h');
2342
- if( tries === 24 ) {
2343
- throw 'Tried 24 times to find a valid date';
2344
- }
2345
- tries++;
2346
- }
2347
- setValue(date);
2348
- }
2349
- update();
2350
- return picker;
2351
- };
2352
-
2353
- picker.enabledHours = function(hours) {
2354
- ///<signature helpKeyword="$.fn.factoryBootstrap330_DatetimePickerControl.enabledHours">
2355
- ///<summary>Returns an array with the currently set enabled hours on the component.</summary>
2356
- ///<returns type="array">options.enabledHours</returns>
2357
- ///</signature>
2358
- ///<signature>
2359
- ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling
2360
- // this function removes the configuration of options.disabledHours if such exist.</summary> /<param
2361
- // name="hours" locid="$.fn.factoryBootstrap330_DatetimePickerControl.enabledHours_p:hours">Takes an [ int
2362
- // ] of values and allows the user to select only from those hours.</param> /</signature>
2363
- if( arguments.length === 0 ) {
2364
- return (options.enabledHours ? $.extend({}, options.enabledHours) : options.enabledHours);
2365
- }
2366
-
2367
- if( !hours ) {
2368
- options.enabledHours = false;
2369
- update();
2370
- return picker;
2371
- }
2372
- if( !(hours instanceof Array) ) {
2373
- throw new TypeError('enabledHours() expects an array parameter');
2374
- }
2375
- options.enabledHours = indexGivenHours(hours);
2376
- options.disabledHours = false;
2377
- if( options.useCurrent && !options.keepInvalid ) {
2378
- var tries = 0;
2379
- while( !isValid(date, 'h') ) {
2380
- date.add(1, 'h');
2381
- if( tries === 24 ) {
2382
- throw 'Tried 24 times to find a valid date';
2383
- }
2384
- tries++;
2385
- }
2386
- setValue(date);
2387
- }
2388
- update();
2389
- return picker;
2390
- };
2391
- /**
2392
- * Returns the component's model current viewDate, a moment object or null if not set. Passing a null value
2393
- * unsets the components model current moment. Parsing of the newDate parameter is made using moment library
2394
- * with the options.format and options.useStrict components configuration.
2395
- * @param {Takes string, viewDate, moment, null parameter.} newDate
2396
- * @returns {viewDate.clone()}
2397
- */
2398
- picker.viewDate = function(newDate) {
2399
- if( arguments.length === 0 ) {
2400
- return viewDate.clone();
2401
- }
2402
-
2403
- if( !newDate ) {
2404
- viewDate = date.clone();
2405
- return picker;
2406
- }
2407
-
2408
- if( typeof newDate !== 'string' && !moment.isMoment(newDate) && !(newDate instanceof Date) ) {
2409
- throw new TypeError('viewDate() parameter must be one of [string, moment or Date]');
2410
- }
2411
-
2412
- viewDate = parseInputDate(newDate);
2413
- viewUpdate();
2414
- return picker;
2415
- };
2416
-
2417
- // initializing element and component attributes
2418
- if( element.is('input') ) {
2419
- input = element;
2420
- } else {
2421
- input = element.find(options.datepickerInput);
2422
- if( input.length === 0 ) {
2423
- input = element.find('input');
2424
- } else if( !input.is('input') ) {
2425
- throw new Error('CSS class "' + options.datepickerInput + '" cannot be applied to non input element');
2426
- }
2427
- }
2428
-
2429
- if( element.hasClass('input-group') ) {
2430
- // in case there is more then one 'input-group-addon' Issue #48
2431
- if( element.find('.datepickerbutton').length === 0 ) {
2432
- component = element.find('.input-group-addon');
2433
- } else {
2434
- component = element.find('.datepickerbutton');
2435
- }
2436
- }
2437
-
2438
- if( !options.inline && !input.is('input') ) {
2439
- throw new Error('Could not initialize DateTimePicker without an input element');
2440
- }
2441
-
2442
- // Set defaults for date here now instead of in var declaration
2443
- date = getMoment();
2444
- viewDate = date.clone();
2445
-
2446
- $.extend(true, options, dataToOptions());
2447
-
2448
- picker.options(options);
2449
-
2450
- initFormatting();
2451
-
2452
- attachDatePickerElementEvents();
2453
-
2454
- if( input.prop('disabled') ) {
2455
- picker.disable();
2456
- }
2457
- if( input.is('input') && input.val().trim().length !== 0 ) {
2458
- setValue(parseInputDate(input.val().trim()));
2459
- }
2460
- else if( options.defaultDate && input.attr('placeholder') === undefined ) {
2461
- setValue(options.defaultDate);
2462
- }
2463
- if( options.inline ) {
2464
- show();
2465
- }
2466
- return picker;
2467
- };
2468
-
2469
- /********************************************************************************
2470
- *
2471
- * jQuery plugin constructor and defaults object
2472
- *
2473
- ********************************************************************************/
2474
-
2475
- /**
2476
- * See (http://jquery.com/).
2477
- * @name jQuery
2478
- * @class
2479
- * See the jQuery Library (http://jquery.com/) for full details. This just
2480
- * documents the function and classes that are added to jQuery by this plug-in.
2481
- */
2482
- /**
2483
- * See (http://jquery.com/)
2484
- * @name fn
2485
- * @class
2486
- * See the jQuery Library (http://jquery.com/) for full details. This just
2487
- * documents the function and classes that are added to jQuery by this plug-in.
2488
- * @memberOf jQuery
2489
- */
2490
- /**
2491
- * Show comments
2492
- * @class datetimepicker
2493
- * @memberOf jQuery.fn
2494
- */
2495
- $.fn.factoryBootstrap330_DatetimePickerControl = function(options) {
2496
- options = options || {};
2497
-
2498
- var args = Array.prototype.slice.call(arguments, 1),
2499
- isInstance = true,
2500
- thisMethods = ['destroy', 'hide', 'show', 'toggle'],
2501
- returnValue;
2502
-
2503
- if( typeof options === 'object' ) {
2504
- return this.each(function() {
2505
- var $this = $(this),
2506
- _options;
2507
- if( !$this.data('DateTimePicker') ) {
2508
- // create a private copy of the defaults object
2509
- _options = $.extend(true, {}, $.fn.factoryBootstrap330_DatetimePickerControl.defaults, options);
2510
- $this.data('DateTimePicker', dateTimePicker($this, _options));
2511
- }
2512
- });
2513
- } else if( typeof options === 'string' ) {
2514
- this.each(function() {
2515
- var $this = $(this),
2516
- instance = $this.data('DateTimePicker');
2517
- if( !instance ) {
2518
- throw new Error('bootstrap-datetimepicker("' + options + '") method was called on an element that is not using DateTimePicker');
2519
- }
2520
-
2521
- returnValue = instance[options].apply(instance, args);
2522
- isInstance = returnValue === instance;
2523
- });
2524
-
2525
- if( isInstance || $.inArray(options, thisMethods) > -1 ) {
2526
- return this;
2527
- }
2528
-
2529
- return returnValue;
2530
- }
2531
-
2532
- throw new TypeError('Invalid arguments for DateTimePicker: ' + options);
2533
- };
2534
-
2535
- $.fn.factoryBootstrap330_DatetimePickerControl.defaults = {
2536
- timeZone: '',
2537
- format: false,
2538
- dayViewHeaderFormat: 'MMMM YYYY',
2539
- extraFormats: false,
2540
- stepping: 1,
2541
- minDate: false,
2542
- maxDate: false,
2543
- useCurrent: true,
2544
- collapse: true,
2545
- locale: moment.locale(),
2546
- defaultDate: false,
2547
- disabledDates: false,
2548
- enabledDates: false,
2549
- icons: {
2550
- time: 'fa fa-clock-o',
2551
- date: 'fa fa-calendar',
2552
- up: 'fa fa-arrow-up',
2553
- down: 'fa fa-arrow-down',
2554
- previous: 'fa fa-arrow-left',
2555
- next: 'fa fa-arrow-right',
2556
- today: 'fa fa-thumb-tack',
2557
- clear: 'fa fa-trash',
2558
- close: 'fa fa-times'
2559
- },
2560
- tooltips: {
2561
- today: 'Go to today',
2562
- clear: 'Clear selection',
2563
- close: 'Close the picker',
2564
- selectMonth: 'Select Month',
2565
- prevMonth: 'Previous Month',
2566
- nextMonth: 'Next Month',
2567
- selectYear: 'Select Year',
2568
- prevYear: 'Previous Year',
2569
- nextYear: 'Next Year',
2570
- selectDecade: 'Select Decade',
2571
- prevDecade: 'Previous Decade',
2572
- nextDecade: 'Next Decade',
2573
- prevCentury: 'Previous Century',
2574
- nextCentury: 'Next Century',
2575
- pickHour: 'Pick Hour',
2576
- incrementHour: 'Increment Hour',
2577
- decrementHour: 'Decrement Hour',
2578
- pickMinute: 'Pick Minute',
2579
- incrementMinute: 'Increment Minute',
2580
- decrementMinute: 'Decrement Minute',
2581
- pickSecond: 'Pick Second',
2582
- incrementSecond: 'Increment Second',
2583
- decrementSecond: 'Decrement Second',
2584
- togglePeriod: 'Toggle Period',
2585
- selectTime: 'Select Time'
2586
- },
2587
- useStrict: false,
2588
- sideBySide: false,
2589
- daysOfWeekDisabled: false,
2590
- calendarWeeks: false,
2591
- viewMode: 'days',
2592
- toolbarPlacement: 'default',
2593
- showTodayButton: false,
2594
- showClear: false,
2595
- showClose: false,
2596
- widgetPositioning: {
2597
- horizontal: 'auto',
2598
- vertical: 'auto'
2599
- },
2600
- widgetParent: null,
2601
- ignoreReadonly: false,
2602
- keepOpen: false,
2603
- focusOnShow: true,
2604
- inline: false,
2605
- keepInvalid: false,
2606
- datepickerInput: '.datepickerinput',
2607
- keyBinds: {
2608
- up: function(widget) {
2609
- if( !widget ) {
2610
- return;
2611
- }
2612
- var d = this.date() || this.getMoment();
2613
- if( widget.find('.datepicker').is(':visible') ) {
2614
- this.date(d.clone().subtract(7, 'd'));
2615
- } else {
2616
- this.date(d.clone().add(this.stepping(), 'm'));
2617
- }
2618
- },
2619
- down: function(widget) {
2620
- if( !widget ) {
2621
- this.show();
2622
- return;
2623
- }
2624
- var d = this.date() || this.getMoment();
2625
- if( widget.find('.datepicker').is(':visible') ) {
2626
- this.date(d.clone().add(7, 'd'));
2627
- } else {
2628
- this.date(d.clone().subtract(this.stepping(), 'm'));
2629
- }
2630
- },
2631
- 'control up': function(widget) {
2632
- if( !widget ) {
2633
- return;
2634
- }
2635
- var d = this.date() || this.getMoment();
2636
- if( widget.find('.datepicker').is(':visible') ) {
2637
- this.date(d.clone().subtract(1, 'y'));
2638
- } else {
2639
- this.date(d.clone().add(1, 'h'));
2640
- }
2641
- },
2642
- 'control down': function(widget) {
2643
- if( !widget ) {
2644
- return;
2645
- }
2646
- var d = this.date() || this.getMoment();
2647
- if( widget.find('.datepicker').is(':visible') ) {
2648
- this.date(d.clone().add(1, 'y'));
2649
- } else {
2650
- this.date(d.clone().subtract(1, 'h'));
2651
- }
2652
- },
2653
- left: function(widget) {
2654
- if( !widget ) {
2655
- return;
2656
- }
2657
- var d = this.date() || this.getMoment();
2658
- if( widget.find('.datepicker').is(':visible') ) {
2659
- this.date(d.clone().subtract(1, 'd'));
2660
- }
2661
- },
2662
- right: function(widget) {
2663
- if( !widget ) {
2664
- return;
2665
- }
2666
- var d = this.date() || this.getMoment();
2667
- if( widget.find('.datepicker').is(':visible') ) {
2668
- this.date(d.clone().add(1, 'd'));
2669
- }
2670
- },
2671
- pageUp: function(widget) {
2672
- if( !widget ) {
2673
- return;
2674
- }
2675
- var d = this.date() || this.getMoment();
2676
- if( widget.find('.datepicker').is(':visible') ) {
2677
- this.date(d.clone().subtract(1, 'M'));
2678
- }
2679
- },
2680
- pageDown: function(widget) {
2681
- if( !widget ) {
2682
- return;
2683
- }
2684
- var d = this.date() || this.getMoment();
2685
- if( widget.find('.datepicker').is(':visible') ) {
2686
- this.date(d.clone().add(1, 'M'));
2687
- }
2688
- },
2689
- enter: function() {
2690
- this.hide();
2691
- },
2692
- escape: function() {
2693
- this.hide();
2694
- },
2695
- //tab: function (widget) { //this break the flow of the form. disabling for now
2696
- // var toggle = widget.find('.picker-switch a[data-action="togglePicker"]');
2697
- // if(toggle.length > 0) toggle.click();
2698
- //},
2699
- 'control space': function(widget) {
2700
- if( !widget ) {
2701
- return;
2702
- }
2703
- if( widget.find('.timepicker').is(':visible') ) {
2704
- widget.find('.btn[data-action="togglePeriod"]').click();
2705
- }
2706
- },
2707
- t: function() {
2708
- this.date(this.getMoment());
2709
- },
2710
- 'delete': function() {
2711
- this.clear();
2712
- }
2713
- },
2714
- debug: false,
2715
- allowInputToggle: false,
2716
- disabledTimeIntervals: false,
2717
- disabledHours: false,
2718
- enabledHours: false,
2719
- viewDate: false
2720
- };
2721
-
2722
- return $.fn.factoryBootstrap330_DatetimePickerControl;
2723
- }));
2724
-
2725
- ( function($) {
2726
- $(function() {
2727
- /**
2728
- * Init base controls
2729
- */
2730
- $(".factory-bootstrap-330 .factory-datetimepicker").factoryBootstrap330_DatetimePickerControl();
2731
-
2732
- /**
2733
- * Init range controls
2734
- */
2735
- $('.factory-bootstrap-330 .factory-datetimepicker-range-0').factoryBootstrap330_DatetimePickerControl();
2736
- $('.factory-bootstrap-330 .factory-datetimepicker-range-1').factoryBootstrap330_DatetimePickerControl({
2737
- useCurrent: false //Important! See issue #1075
2738
- });
2739
- $(".factory-bootstrap-330 .factory-datetimepicker-range-0").on("dp.change", function(e) {
2740
- $('.factory-bootstrap-330 .factory-datetimepicker-range-1').data("DateTimePicker").minDate(e.date);
2741
- });
2742
- $(".factory-bootstrap-330 .factory-datetimepicker-range-1").on("dp.change", function(e) {
2743
- $('.factory-bootstrap-330 .factory-datetimepicker-range-0').data("DateTimePicker").maxDate(e.date);
2744
- });
2745
- });
2746
- }(jQuery) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/js/bootstrap.dropdown.js DELETED
@@ -1,143 +0,0 @@
1
- /* ========================================================================
2
- * Bootstrap: dropdown.js v3.0.3
3
- * http://getbootstrap.com/javascript/#dropdowns
4
- * ========================================================================
5
- * Copyright 2013 Twitter, Inc.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the "License");
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- * ======================================================================== */
19
-
20
-
21
- +function ($) { "use strict";
22
-
23
- // DROPDOWN CLASS DEFINITION
24
- // =========================
25
-
26
- var backdrop = '.dropdown-backdrop'
27
- var toggle = '[data-toggle=factory-dropdown]'
28
- var Dropdown = function (element) {
29
- $(element).on('click.bs.dropdown', this.toggle)
30
- }
31
-
32
- Dropdown.prototype.toggle = function (e) {
33
- var $this = $(this)
34
-
35
- if ($this.is('.disabled, :disabled')) return
36
-
37
- var $parent = getParent($this)
38
- var isActive = $parent.hasClass('open')
39
-
40
- clearMenus()
41
-
42
- if (!isActive) {
43
- if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
44
- // if mobile we use a backdrop because click events don't delegate
45
- $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
46
- }
47
-
48
- $parent.trigger(e = $.Event('show.bs.dropdown'))
49
-
50
- if (e.isDefaultPrevented()) return
51
-
52
- $parent
53
- .toggleClass('open')
54
- .trigger('shown.bs.dropdown')
55
-
56
- $this.focus()
57
- }
58
-
59
- return false
60
- }
61
-
62
- Dropdown.prototype.keydown = function (e) {
63
- if (!/(38|40|27)/.test(e.keyCode)) return
64
-
65
- var $this = $(this)
66
-
67
- e.preventDefault()
68
- e.stopPropagation()
69
-
70
- if ($this.is('.disabled, :disabled')) return
71
-
72
- var $parent = getParent($this)
73
- var isActive = $parent.hasClass('open')
74
-
75
- if (!isActive || (isActive && e.keyCode == 27)) {
76
- if (e.which == 27) $parent.find(toggle).focus()
77
- return $this.click()
78
- }
79
-
80
- var $items = $('[role=menu] li:not(.divider):visible a', $parent)
81
-
82
- if (!$items.length) return
83
-
84
- var index = $items.index($items.filter(':focus'))
85
-
86
- if (e.keyCode == 38 && index > 0) index-- // up
87
- if (e.keyCode == 40 && index < $items.length - 1) index++ // down
88
- if (!~index) index=0
89
-
90
- $items.eq(index).focus()
91
- }
92
-
93
- function clearMenus() {
94
- $(backdrop).remove()
95
- $(toggle).each(function (e) {
96
- var $parent = getParent($(this))
97
- if (!$parent.hasClass('open')) return
98
- $parent.trigger(e = $.Event('hide.bs.dropdown'))
99
- if (e.isDefaultPrevented()) return
100
- $parent.removeClass('open').trigger('hidden.bs.dropdown')
101
- })
102
- }
103
-
104
- function getParent($this) {
105
- var selector = $this.attr('data-target')
106
-
107
- if (!selector) {
108
- selector = $this.attr('href')
109
- selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
110
- }
111
-
112
- var $parent = selector && $(selector)
113
-
114
- return $parent && $parent.length ? $parent : $this.parent()
115
- }
116
-
117
-
118
- // DROPDOWN PLUGIN DEFINITION
119
- // ==========================
120
-
121
- $.fn.factoryBootstrap330_dropdown = function (option) {
122
- return this.each(function () {
123
- var $this = $(this)
124
- var data = $this.data('bs.dropdown')
125
-
126
- if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
127
- if (typeof option == 'string') data[option].call($this)
128
- })
129
- }
130
-
131
- $.fn.factoryBootstrap330_dropdown.Constructor = Dropdown
132
-
133
-
134
- // APPLY TO STANDARD DROPDOWN ELEMENTS
135
- // ===================================
136
-
137
- $(document)
138
- .on('click.bs.dropdown.data-api', clearMenus)
139
- .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
140
- .on('click.bs.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
141
- .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
142
-
143
- }(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/js/bootstrap.tooltip.js DELETED
@@ -1,455 +0,0 @@
1
- /* ========================================================================
2
- * Bootstrap: tooltip.js v3.0.3
3
- * http://getbootstrap.com/javascript/#tooltip
4
- * Inspired by the original jQuery.tipsy by Jason Frame
5
- * ========================================================================
6
- * Copyright 2013 Twitter, Inc.
7
- *
8
- * Licensed under the Apache License, Version 2.0 (the "License");
9
- * you may not use this file except in compliance with the License.
10
- * You may obtain a copy of the License at
11
- *
12
- * http://www.apache.org/licenses/LICENSE-2.0
13
- *
14
- * Unless required by applicable law or agreed to in writing, software
15
- * distributed under the License is distributed on an "AS IS" BASIS,
16
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
- * See the License for the specific language governing permissions and
18
- * limitations under the License.
19
- * ======================================================================== */
20
-
21
- +function($) {
22
- "use strict";
23
-
24
- // TOOLTIP PUBLIC CLASS DEFINITION
25
- // ===============================
26
-
27
- var Tooltip = function(element, options) {
28
- this.type =
29
- this.options =
30
- this.enabled =
31
- this.timeout =
32
- this.hoverState =
33
- this.$element = null;
34
-
35
- this.init('tooltip', element, options)
36
- };
37
-
38
- Tooltip.DEFAULTS = {
39
- animation: true
40
- ,
41
- placement: 'top'
42
- ,
43
- selector: false
44
- ,
45
- template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
46
- ,
47
- trigger: 'hover focus'
48
- ,
49
- title: ''
50
- ,
51
- delay: 0
52
- ,
53
- html: false
54
- ,
55
- container: false
56
- };
57
-
58
- Tooltip.prototype.init = function(type, element, options) {
59
- this.enabled = true;
60
- this.type = type;
61
- this.$element = $(element);
62
- this.options = this.getOptions(options);
63
-
64
- var triggers = this.options.trigger.split(' ');
65
-
66
- for( var i = triggers.length; i--; ) {
67
- var trigger = triggers[i];
68
-
69
- if( trigger == 'click' ) {
70
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
71
- } else if( trigger != 'manual' ) {
72
- var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus';
73
- var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur';
74
-
75
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this));
76
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
77
- }
78
- }
79
-
80
- this.options.selector ?
81
- (this._options = $.extend({}, this.options, {
82
- trigger: 'manual',
83
- selector: ''
84
- })) :
85
- this.fixTitle()
86
- };
87
-
88
- Tooltip.prototype.getDefaults = function() {
89
- return Tooltip.DEFAULTS
90
- };
91
-
92
- Tooltip.prototype.getOptions = function(options) {
93
- options = $.extend({}, this.getDefaults(), this.$element.data(), options)
94
-
95
- if( options.delay && typeof options.delay == 'number' ) {
96
- options.delay = {
97
- show: options.delay
98
- ,
99
- hide: options.delay
100
- }
101
- }
102
-
103
- return options
104
- };
105
-
106
- Tooltip.prototype.getDelegateOptions = function() {
107
- var options = {};
108
- var defaults = this.getDefaults();
109
-
110
- this._options && $.each(this._options, function(key, value) {
111
- if( defaults[key] != value ) {
112
- options[key] = value
113
- }
114
- });
115
-
116
- return options
117
- };
118
-
119
- Tooltip.prototype.enter = function(obj) {
120
- var self = obj instanceof this.constructor ?
121
- obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type);
122
-
123
- clearTimeout(self.timeout);
124
-
125
- self.hoverState = 'in';
126
-
127
- if( !self.options.delay || !self.options.delay.show ) {
128
- return self.show();
129
- }
130
-
131
- self.timeout = setTimeout(function() {
132
- if( self.hoverState == 'in' ) {
133
- self.show()
134
- }
135
- }, self.options.delay.show)
136
- };
137
-
138
- Tooltip.prototype.leave = function(obj) {
139
- var self = obj instanceof this.constructor ?
140
- obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type);
141
-
142
- clearTimeout(self.timeout);
143
-
144
- self.hoverState = 'out';
145
-
146
- if( !self.options.delay || !self.options.delay.hide ) {
147
- return self.hide();
148
- }
149
-
150
- self.timeout = setTimeout(function() {
151
- if( self.hoverState == 'out' ) {
152
- self.hide()
153
- }
154
- }, self.options.delay.hide)
155
- };
156
-
157
- Tooltip.prototype.show = function() {
158
- var e = $.Event('show.bs.' + this.type);
159
-
160
- if( this.hasContent() && this.enabled ) {
161
- this.$element.trigger(e);
162
-
163
- if( e.isDefaultPrevented() ) {
164
- return;
165
- }
166
-
167
- var $tip = this.tip();
168
-
169
- this.setContent();
170
-
171
- if( this.options.animation ) {
172
- $tip.addClass('fade');
173
- }
174
-
175
- var placement = typeof this.options.placement == 'function' ?
176
- this.options.placement.call(this, $tip[0], this.$element[0]) :
177
- this.options.placement;
178
-
179
- var autoToken = /\s?auto?\s?/i;
180
- var autoPlace = autoToken.test(placement);
181
- if( autoPlace ) {
182
- placement = placement.replace(autoToken, '') || 'top';
183
- }
184
-
185
- $tip
186
- .detach()
187
- .css({
188
- top: 0,
189
- left: 0,
190
- display: 'block'
191
- })
192
- .addClass(placement);
193
-
194
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element);
195
-
196
- var pos = this.getPosition();
197
- var actualWidth = $tip[0].offsetWidth;
198
- var actualHeight = $tip[0].offsetHeight;
199
-
200
- if( autoPlace ) {
201
- var $parent = this.$element.parent();
202
-
203
- var orgPlacement = placement;
204
- var docScroll = document.documentElement.scrollTop || document.body.scrollTop;
205
- var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth();
206
- var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight();
207
- var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left;
208
-
209
- placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight
210
- ? 'top'
211
- :
212
- placement == 'top' && pos.top - docScroll - actualHeight < 0
213
- ? 'bottom'
214
- :
215
- placement == 'right' && pos.right + actualWidth > parentWidth
216
- ? 'left'
217
- :
218
- placement == 'left' && pos.left - actualWidth < parentLeft
219
- ? 'right'
220
- :
221
- placement;
222
-
223
- $tip
224
- .removeClass(orgPlacement)
225
- .addClass(placement)
226
- }
227
-
228
- var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
229
-
230
- this.applyPlacement(calculatedOffset, placement);
231
- this.$element.trigger('shown.bs.' + this.type)
232
- }
233
- };
234
-
235
- Tooltip.prototype.applyPlacement = function(offset, placement) {
236
- var replace;
237
- var $tip = this.tip();
238
- var width = $tip[0].offsetWidth;
239
- var height = $tip[0].offsetHeight;
240
-
241
- // manually read margins because getBoundingClientRect includes difference
242
- var marginTop = parseInt($tip.css('margin-top'), 10);
243
- var marginLeft = parseInt($tip.css('margin-left'), 10);
244
-
245
- // we must check for NaN for ie 8/9
246
- if( isNaN(marginTop) ) {
247
- marginTop = 0;
248
- }
249
- if( isNaN(marginLeft) ) {
250
- marginLeft = 0;
251
- }
252
-
253
- offset.top = offset.top + marginTop;
254
- offset.left = offset.left + marginLeft;
255
-
256
- $tip
257
- .offset(offset)
258
- .addClass('in');
259
-
260
- // check to see if placing tip in new offset caused the tip to resize itself
261
- var actualWidth = $tip[0].offsetWidth;
262
- var actualHeight = $tip[0].offsetHeight;
263
-
264
- if( placement == 'top' && actualHeight != height ) {
265
- replace = true;
266
- offset.top = offset.top + height - actualHeight
267
- }
268
-
269
- if( /bottom|top/.test(placement) ) {
270
- var delta = 0;
271
-
272
- if( offset.left < 0 ) {
273
- delta = offset.left * -2;
274
- offset.left = 0;
275
-
276
- $tip.offset(offset);
277
-
278
- actualWidth = $tip[0].offsetWidth;
279
- actualHeight = $tip[0].offsetHeight
280
- }
281
-
282
- this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
283
- } else {
284
- this.replaceArrow(actualHeight - height, actualHeight, 'top')
285
- }
286
-
287
- if( replace ) {
288
- $tip.offset(offset)
289
- }
290
- };
291
-
292
- Tooltip.prototype.replaceArrow = function(delta, dimension, position) {
293
- this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
294
- };
295
-
296
- Tooltip.prototype.setContent = function() {
297
- var $tip = this.tip();
298
- var title = this.getTitle();
299
-
300
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title);
301
- $tip.removeClass('fade in top bottom left right')
302
- };
303
-
304
- Tooltip.prototype.hide = function() {
305
- var that = this;
306
- var $tip = this.tip();
307
- var e = $.Event('hide.bs.' + this.type);
308
-
309
- function complete() {
310
- if( that.hoverState != 'in' ) {
311
- $tip.detach()
312
- }
313
- }
314
-
315
- this.$element.trigger(e);
316
-
317
- if( e.isDefaultPrevented() ) {
318
- return;
319
- }
320
-
321
- $tip.removeClass('in');
322
-
323
- $.support.transition && this.$tip.hasClass('fade') ?
324
- $tip
325
- .one($.support.transition.end, complete)
326
- .emulateTransitionEnd(150) :
327
- complete();
328
-
329
- this.$element.trigger('hidden.bs.' + this.type);
330
-
331
- return this
332
- };
333
-
334
- Tooltip.prototype.fixTitle = function() {
335
- var $e = this.$element;
336
- if( $e.attr('title') || typeof($e.attr('data-original-title')) != 'string' ) {
337
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
338
- }
339
- };
340
-
341
- Tooltip.prototype.hasContent = function() {
342
- return this.getTitle()
343
- };
344
-
345
- Tooltip.prototype.getPosition = function() {
346
- var el = this.$element[0];
347
- return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
348
- width: el.offsetWidth
349
- ,
350
- height: el.offsetHeight
351
- }, this.$element.offset())
352
- };
353
-
354
- Tooltip.prototype.getCalculatedOffset = function(placement, pos, actualWidth, actualHeight) {
355
- return placement == 'bottom' ? {
356
- top: pos.top + pos.height,
357
- left: pos.left + pos.width / 2 - actualWidth / 2
358
- } :
359
- placement == 'top' ? {
360
- top: pos.top - actualHeight,
361
- left: pos.left + pos.width / 2 - actualWidth / 2
362
- } :
363
- placement == 'left' ? {
364
- top: pos.top + pos.height / 2 - actualHeight / 2,
365
- left: pos.left - actualWidth
366
- } :
367
- /* placement == 'right' */ {
368
- top: pos.top + pos.height / 2 - actualHeight / 2,
369
- left: pos.left + pos.width
370
- }
371
- };
372
-
373
- Tooltip.prototype.getTitle = function() {
374
- var title;
375
- var $e = this.$element;
376
- var o = this.options;
377
-
378
- title = $e.attr('data-original-title')
379
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title);
380
-
381
- return title
382
- };
383
-
384
- Tooltip.prototype.tip = function() {
385
- return this.$tip = this.$tip || $(this.options.template)
386
- };
387
-
388
- Tooltip.prototype.arrow = function() {
389
- return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
390
- };
391
-
392
- Tooltip.prototype.validate = function() {
393
- if( !this.$element[0].parentNode ) {
394
- this.hide();
395
- this.$element = null;
396
- this.options = null
397
- }
398
- };
399
-
400
- Tooltip.prototype.enable = function() {
401
- this.enabled = true
402
- };
403
-
404
- Tooltip.prototype.disable = function() {
405
- this.enabled = false
406
- };
407
-
408
- Tooltip.prototype.toggleEnabled = function() {
409
- this.enabled = !this.enabled
410
- };
411
-
412
- Tooltip.prototype.toggle = function(e) {
413
- var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this;
414
- self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
415
- };
416
-
417
- Tooltip.prototype.destroy = function() {
418
- this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
419
- };
420
-
421
- // TOOLTIP PLUGIN DEFINITION
422
- // =========================
423
-
424
- var old = $.fn.tooltip;
425
-
426
- $.fn.tooltip = function(option) {
427
- return this.each(function() {
428
- var $this = $(this);
429
- var data = $this.data('bs.tooltip');
430
- var options = typeof option == 'object' && option;
431
-
432
- if( !data ) {
433
- $this.data('bs.tooltip', (data = new Tooltip(this, options)));
434
- }
435
- if( typeof option == 'string' ) {
436
- data[option]()
437
- }
438
- })
439
- };
440
-
441
- $.fn.tooltip.Constructor = Tooltip;
442
-
443
- // TOOLTIP NO CONFLICT
444
- // ===================
445
-
446
- $.fn.tooltip.noConflict = function() {
447
- $.fn.tooltip = old;
448
- return this
449
- };
450
-
451
- $(function() {
452
- $('[data-toggle="factory-tooltip"]').tooltip({html: true});
453
- })
454
-
455
- }(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/js/control.checkbox.js DELETED
@@ -1,290 +0,0 @@
1
- ( function($) {
2
-
3
- // CHECKBOX CONTROL CLASS DEFINITION
4
- // ================================
5
-
6
- var CheckboxControl = function(element) {
7
- var self = this;
8
- this.$element = $(element);
9
-
10
- this.$result = this.$element.find(".factory-result");
11
- this.$on = this.$element.find(".factory-on");
12
- this.$off = this.$element.find(".factory-off");
13
-
14
- var isTumbler = this.$element.is(".factory-tumbler");
15
- var hasTumblerHint = this.$element.is(".factory-has-tumbler-hint");
16
- var tumblerFunction = this.$element.data('tumbler-function');
17
-
18
- var tumblerDelay = this.$element.data('tumbler-delay');
19
- if( !tumblerDelay ) {
20
- tumblerDelay = 3000;
21
- }
22
-
23
- this.callByPath = function(functionName, args) {
24
- var parts = functionName.split(".");
25
- var obj = window;
26
-
27
- for( var i = 0; i < parts.length; i++ ) {
28
- obj = obj[parts[i]];
29
- }
30
-
31
- obj.apply(obj, args);
32
- }
33
-
34
- this.$on.click(function() {
35
-
36
- self.$off.removeClass('active');
37
- self.$on.addClass('active');
38
-
39
- if( !isTumbler ) {
40
- self.$result.attr('checked', 'checked');
41
- self.$result.val(1);
42
- self.$result.trigger('change');
43
- } else {
44
-
45
- setTimeout(function() {
46
- self.$on.removeClass('active');
47
- self.$off.addClass('active');
48
-
49
- var $hint = hasTumblerHint ? self.$element.next() : null;
50
-
51
- if( tumblerFunction ) {
52
- self.callByPath(tumblerFunction, [self.$element, $hint]);
53
- } else {
54
- if( hasTumblerHint ) {
55
- self.$element.next().fadeIn(300);
56
- setTimeout(function() {
57
- self.$element.next().fadeOut(500);
58
- }, tumblerDelay);
59
- }
60
- }
61
-
62
- }, 300);
63
- }
64
-
65
- return false;
66
- });
67
-
68
- this.$off.click(function() {
69
-
70
- self.$on.removeClass('active');
71
- self.$off.addClass('active');
72
-
73
- if( !isTumbler ) {
74
- self.$result.removeAttr('checked');
75
- self.$result.val(0);
76
- self.$result.trigger('change');
77
- } else {
78
-
79
- setTimeout(function() {
80
- self.$off.removeClass('active');
81
- self.$on.addClass('active');
82
-
83
- var $hint = hasTumblerHint ? self.$element.next() : null;
84
-
85
- if( tumblerFunction ) {
86
- self.callByPath(tumblerFunction, [self.$element, $hint]);
87
- } else {
88
- if( hasTumblerHint ) {
89
- self.$element.next().fadeIn(300);
90
- setTimeout(function() {
91
- self.$element.next().fadeOut(500);
92
- }, tumblerDelay);
93
- }
94
- }
95
-
96
- }, 300);
97
- }
98
-
99
- return false;
100
- });
101
-
102
- this.hashCode = function(str) {
103
- var hash = 0;
104
- if( !str || str.length === 0 ) {
105
- return hash;
106
- }
107
- for( var i = 0; i < str.length; i++ ) {
108
- var charCode = str.charCodeAt(i);
109
- hash = ((hash << 5) - hash) + charCode;
110
- hash = hash & hash;
111
- }
112
- hash = hash.toString(16);
113
- hash = hash.replace("-", "");
114
- return hash;
115
- };
116
-
117
- this.executeEvents = function(element) {
118
- if( void 0 === window.__factory_checkbox_control_events_off_data && void 0 === window.__factory_checkbox_control_events_on_data ) {
119
- return;
120
- }
121
- element.change(function() {
122
- self.eventsProcess(element);
123
- });
124
-
125
- self.eventsProcess(element);
126
- };
127
-
128
- this.eventsProcess = function(element) {
129
- var controlName = element.attr('name'),
130
- controlIsChecked = element.prop('checked');
131
-
132
- var controlEventsOnData = window.__factory_checkbox_control_events_on_data[controlName];
133
- var controlEventsOffData = window.__factory_checkbox_control_events_off_data[controlName];
134
-
135
- if( !controlEventsOnData && !controlEventsOffData ) {
136
- return;
137
- }
138
-
139
- var detachElements, currentEventsData;
140
-
141
- if( void 0 === window.__factory_checkbox_control_detach_elements ) {
142
- window.__factory_checkbox_control_detach_elements = {};
143
- }
144
-
145
- detachElements = window.__factory_checkbox_control_detach_elements;
146
-
147
- if( controlIsChecked ) {
148
- currentEventsData = controlEventsOnData;
149
- } else {
150
- currentEventsData = controlEventsOffData;
151
- }
152
-
153
- for( var event in currentEventsData ) {
154
- if( !currentEventsData.hasOwnProperty(event) ) {
155
- continue;
156
- }
157
-
158
- var selector = currentEventsData[event];
159
-
160
- var uqName;
161
- if( !$.isArray(selector) ) {
162
- uqName = self.hashCode(controlName + selector);
163
- }
164
-
165
- var selectorName;
166
-
167
- switch( event ) {
168
- case 'hide':
169
- if( typeof selector === 'string' ) {
170
- $(selector).hide(0);
171
- }
172
- break;
173
- case 'show':
174
- if( typeof selector === 'string' ) {
175
- $(selector).fadeIn(200);
176
- }
177
- break;
178
- case 'detach':
179
- if( typeof selector === 'string' ) {
180
- $(selector).each(function(i) {
181
- if( !detachElements[uqName] ) {
182
- detachElements[uqName] = {};
183
- }
184
- if( !detachElements[uqName][i] ) {
185
- detachElements[uqName][i] = {};
186
- }
187
- detachElements[uqName][i]['recovery_contanier'] = $(this).parent();
188
- detachElements[uqName][i]['element'] = $(this).clone(true);
189
-
190
- $(this).remove();
191
- });
192
- }
193
- break;
194
- case 'recovery':
195
- if( detachElements[uqName] ) {
196
- for( var key in detachElements[uqName] ) {
197
- if( !detachElements[uqName].hasOwnProperty(key) ) {
198
- continue;
199
- }
200
- if( detachElements[uqName][key]['recovery_contanier'] && detachElements[uqName][key]['element'] ) {
201
- detachElements[uqName][key]['recovery_contanier'].append(detachElements[uqName][key]['element']);
202
- }
203
- }
204
- delete detachElements[uqName];
205
- }
206
- break;
207
- case 'removeClasses':
208
- if( typeof selector === 'object' ) {
209
- for( selectorName in selector ) {
210
- if( !selector.hasOwnProperty(selectorName) ) {
211
- continue;
212
- }
213
- if( selector[selectorName] ) {
214
- $(selectorName).removeClass(selector[selectorName]);
215
- }
216
-
217
- }
218
- }
219
- break;
220
- case 'addClasses':
221
- if( typeof selector === 'object' ) {
222
- for( selectorName in selector ) {
223
- if( !selector.hasOwnProperty(selectorName) ) {
224
- continue;
225
- }
226
- if( selector[selectorName] ) {
227
- $(selectorName).addClass(selector[selectorName]);
228
- }
229
-
230
- }
231
- }
232
- break;
233
- case 'setValue':
234
- if( typeof selector === 'object' ) {
235
- for( selectorName in selector ) {
236
- if( !selector.hasOwnProperty(selectorName) ) {
237
- continue;
238
- }
239
-
240
- if( selector[selectorName] !== void 0 && selector[selectorName] !== null ) {
241
- console.log(selector[selectorName]);
242
- $(selectorName).val(selector[selectorName]);
243
- }
244
- }
245
- }
246
- break;
247
- }
248
- }
249
- };
250
-
251
- this.executeEvents(this.$result);
252
-
253
- };
254
-
255
- // CHECKBOX CONTROL DEFINITION
256
- // ================================
257
-
258
- $.fn.factoryBootstrap330_checkboxControl = function(option) {
259
-
260
- // call an method
261
- if( typeof option === "string" ) {
262
- var data = $(this).data('factory.checkbox.control');
263
- if( !data ) {
264
- return null;
265
- }
266
- return data[option]();
267
- }
268
-
269
- // creating an object
270
- else {
271
- return this.each(function() {
272
- var $this = $(this);
273
- var data = $this.data('factory.checkbox.control');
274
- if( !data ) {
275
- $this.data('factory.checkbox.control', (data = new CheckboxControl(this)));
276
- }
277
- });
278
- }
279
- };
280
-
281
- $.fn.factoryBootstrap330_checkboxControl.Constructor = CheckboxControl;
282
-
283
- // AUTO CREATING
284
- // ================================
285
-
286
- $(function() {
287
- $(".factory-bootstrap-330 .factory-checkbox.factory-buttons-way").factoryBootstrap330_checkboxControl();
288
- });
289
-
290
- }(jQuery) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/js/control.dropdown.js DELETED
@@ -1,355 +0,0 @@
1
- ( function($) {
2
-
3
- // DROPDOWN CONTROL CLASS DEFINITION
4
- // ================================
5
-
6
- var DropdownControl = function(element) {
7
- var self = this;
8
-
9
- this.$element = $(element);
10
- this.way = this.$element.data('way');
11
- this.name = this.$element.data('name') || this.$element.attr('name');
12
-
13
- this.hashCode = function(str) {
14
- var hash = 0;
15
- if( !str || str.length === 0 ) {
16
- return hash;
17
- }
18
- for( var i = 0; i < str.length; i++ ) {
19
- var charCode = str.charCodeAt(i);
20
- hash = ((hash << 5) - hash) + charCode;
21
- hash = hash & hash;
22
- }
23
- hash = hash.toString(16);
24
- hash = hash.replace("-", "");
25
- return hash;
26
- };
27
-
28
- this.executeEvents = function(element) {
29
- if( void 0 === window.factory_dropdown_control_events_data ) {
30
- return;
31
- }
32
-
33
- element.change(function() {
34
- self.eventsProcess(element);
35
- });
36
-
37
- self.eventsProcess(element);
38
- };
39
-
40
- this.eventsProcess = function(element) {
41
- var controlName = element.attr('name'),
42
- controlValue = element.val();
43
- var controlEventsData = window.factory_dropdown_control_events_data[controlName];
44
-
45
- if( !controlEventsData || !controlEventsData[controlValue] ) {
46
- return;
47
- }
48
-
49
- var detachElements;
50
-
51
- if( void 0 === window.__factory_dropdown_control_detach_elements ) {
52
- window.__factory_dropdown_control_detach_elements = {};
53
- }
54
-
55
- detachElements = window.__factory_dropdown_control_detach_elements;
56
-
57
- for( var event in controlEventsData[controlValue] ) {
58
- if( !controlEventsData[controlValue].hasOwnProperty(event) ) {
59
- continue;
60
- }
61
-
62
- var selector = controlEventsData[controlValue][event];
63
-
64
- var uqName;
65
- if( !$.isArray(selector) ) {
66
- uqName = self.hashCode(controlName + selector);
67
- }
68
-
69
- switch( event ) {
70
- case 'hide':
71
- if( typeof selector === 'string' ) {
72
- $(selector).hide(0);
73
- }
74
- break;
75
- case 'show':
76
- if( typeof selector === 'string' ) {
77
- $(selector).fadeIn(200);
78
- }
79
- break;
80
- case 'detach':
81
- if( typeof selector === 'string' ) {
82
- $(selector).each(function(i) {
83
- if( !detachElements[uqName] ) {
84
- detachElements[uqName] = {};
85
- }
86
- if( !detachElements[uqName][i] ) {
87
- detachElements[uqName][i] = {};
88
- }
89
- detachElements[uqName][i]['recovery_contanier'] = $(this).parent();
90
- detachElements[uqName][i]['element'] = $(this).clone(true);
91
-
92
- $(this).remove();
93
- });
94
- }
95
- break;
96
- case 'recovery':
97
- if( detachElements[uqName] ) {
98
- for( var key in detachElements[uqName] ) {
99
- if( !detachElements[uqName].hasOwnProperty(key) ) {
100
- continue;
101
- }
102
- if( detachElements[uqName][key]['recovery_contanier'] && detachElements[uqName][key]['element'] ) {
103
- detachElements[uqName][key]['recovery_contanier'].append(detachElements[uqName][key]['element']);
104
- }
105
- }
106
- delete detachElements[uqName];
107
- }
108
- break;
109
- case 'removeClasses':
110
- if( typeof selector === 'object' ) {
111
- for( var selectorName in selector ) {
112
- if( !selector.hasOwnProperty(selectorName) ) {
113
- continue;
114
- }
115
- if( selector[selectorName] ) {
116
- $(selectorName).removeClass(selector[selectorName]);
117
- }
118
-
119
- }
120
- }
121
- break;
122
- case 'addClasses':
123
- if( typeof selector === 'object' ) {
124
- for( var selectorName in selector ) {
125
- if( !selector.hasOwnProperty(selectorName) ) {
126
- continue;
127
- }
128
- if( selector[selectorName] ) {
129
- $(selectorName).addClass(selector[selectorName]);
130
- }
131
-
132
- }
133
- }
134
- break;
135
- }
136
- }
137
- };
138
-
139
- if( 'buttons' === this.way ) {
140
-
141
- this.$result = this.$element.find(".factory-result");
142
- this.$hints = this.$element.find(".factory-hints");
143
- this.$buttons = this.$element.find(".btn");
144
-
145
- self.executeEvents(this.$result);
146
-
147
- this.$buttons.click(function() {
148
- var value = $(this).data('value');
149
-
150
- self.$buttons.removeClass('active');
151
- $(this).addClass('active');
152
-
153
- self.$hints.find(".factory-hint").hide();
154
- self.$hints.find(".factory-hint-" + value).fadeIn();
155
-
156
- self.$result.val(value);
157
- self.$result.trigger('change');
158
-
159
- return false;
160
- });
161
-
162
- } else if( 'ddslick' === this.way ) {
163
- self.executeEvents(self.$element.find(".factory-result"));
164
-
165
- var data = window['factory_' + this.name + "_data"];
166
- var $ddslick = this.$element.find(".factory-ddslick");
167
-
168
- var width = this.$element.data("width") || 300;
169
- var imagePosition = this.$element.data("align") || 'right';
170
-
171
- $(data).each(function() {
172
- if( !this.imageHoverSrc ) {
173
- return true;
174
- }
175
- $('<img/>')[0].src = this.imageHoverSrc;
176
- });
177
-
178
- $ddslick.ddslick({
179
- data: data,
180
- width: width,
181
- imagePosition: imagePosition,
182
- selectText: "- select -",
183
- onSelected: function(data) {
184
-
185
- if( data.selectedData.imageHoverSrc ) {
186
- self.$element.find(".dd-selected-image").attr('src', data.selectedData.imageHoverSrc);
187
- }
188
-
189
- var $result = self.$element.find(".factory-result").val(data.selectedData.value);
190
- $result.change();
191
- }
192
- });
193
-
194
- } else {
195
-
196
- self.executeEvents(this.$element);
197
-
198
- // hints
199
-
200
- this.$hints = this.$element.next();
201
-
202
- if( this.$hints.hasClass('factory-hints') ) {
203
- this.$element.change(function() {
204
- self.updateHints();
205
- return false;
206
- });
207
-
208
- this.updateHints = function() {
209
- var value = self.$element.val();
210
- self.$hints.find(".factory-hint").hide();
211
- self.$hints.find(".factory-hint-" + value).show();
212
- };
213
-
214
- self.updateHints();
215
- }
216
-
217
- // ajax
218
-
219
- this.getAjaxData = function() {
220
- var ajaxDataID = self.$element.data('ajax-data-id');
221
- return window[ajaxDataID];
222
- };
223
-
224
- this.loadData = function() {
225
-
226
- var ajaxData = self.getAjaxData();
227
-
228
- var req = $.ajax({
229
- url: ajaxData.url,
230
- data: ajaxData.data,
231
- dataType: 'json',
232
-
233
- success: function(response) {
234
- if( response.error ) {
235
- return self.showError(response.error);
236
- }
237
- self.fill(response.items);
238
- },
239
- error: function(response) {
240
-
241
- if( console && console.log ) {
242
- console.log(response.responseText);
243
- }
244
-
245
- self.showError('Unexpected error occurred during the ajax request.');
246
- },
247
- complete: function() {
248
- self.removeLoader();
249
- }
250
- });
251
- };
252
-
253
- this.fill = function(items) {
254
- this.clearList();
255
-
256
- var ajaxData = self.getAjaxData();
257
-
258
- if( !items || !items.length ) {
259
-
260
- this.$element.append("<option>" + ajaxData.emptyList + "</li>");
261
-
262
- } else {
263
-
264
- for( var index in items ) {
265
- var item = items[index];
266
- self.addListItem(item);
267
- }
268
- }
269
-
270
- this.$element.trigger("factory-loaded");
271
- };
272
-
273
- this.clearList = function() {
274
- this.$element.html("");
275
- };
276
-
277
- this.addListItem = function(item) {
278
-
279
- var $option = $('<option />')
280
- .attr('value', item.value)
281
- .text(item.title)
282
- .appendTo(this.$element);
283
-
284
- var ajaxData = self.getAjaxData();
285
-
286
- if( ajaxData.selected && ajaxData.selected == item.value ) {
287
- $option.attr('selected', 'selected');
288
- }
289
- };
290
-
291
- this.showError = function(text) {
292
- this.clearList();
293
-
294
- var $error = $("<div class='factory-control-error'></div>")
295
- .append($("<i class='fa fa-exclamation-triangle'></i>"))
296
- .append(text);
297
-
298
- var ajaxData = self.getAjaxData();
299
-
300
- this.$element.append("<option>" + ajaxData.emptyList + "</li>");
301
- this.$element.after($error);
302
-
303
- this.$element.addClass('factory-has-error');
304
- };
305
-
306
- this.removeLoader = function() {
307
- this.$element.removeClass('factory-hidden');
308
-
309
- var ajaxData = self.getAjaxData();
310
- $(ajaxData.loader).remove();
311
- };
312
-
313
- var ajax = this.$element.data('ajax');
314
- if( ajax ) {
315
- this.loadData();
316
- }
317
- }
318
- };
319
-
320
- // DROPDOWN CONTROL DEFINITION
321
- // ================================
322
-
323
- $.fn.factoryBootstrap330_dropdownControl = function(option) {
324
-
325
- // call an method
326
- if( typeof option === "string" ) {
327
- var data = $(this).data('factory.dropdown.control');
328
- if( !data ) {
329
- return null;
330
- }
331
- return data[option]();
332
- }
333
-
334
- // creating an object
335
- else {
336
- return this.each(function() {
337
- var $this = $(this);
338
- var data = $this.data('factory.dropdown.control');
339
- if( !data ) {
340
- $this.data('factory.dropdown.control', (data = new DropdownControl(this)));
341
- }
342
- });
343
- }
344
- };
345
-
346
- $.fn.factoryBootstrap330_dropdownControl.Constructor = DropdownControl;
347
-
348
- // AUTO CREATING
349
- // ================================
350
-
351
- $(function() {
352
- $(".factory-bootstrap-330 .factory-dropdown").factoryBootstrap330_dropdownControl();
353
- });
354
-
355
- }(jQuery) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/js/control.list.js DELETED
@@ -1,141 +0,0 @@
1
- ( function( $ ){
2
-
3
- var list = function (element) {
4
- var self = this;
5
-
6
- this.$element = $(element);
7
- this.way = this.$element.data('way');
8
- this.name = this.$element.data('name');
9
-
10
- // curently the control supports only checklists
11
- if ( 'checklist' !== this.way ) return;
12
-
13
- this.getAjaxData = function() {
14
- var ajaxDataID = self.$element.data('ajax-data-id');
15
- return window[ajaxDataID];
16
- }
17
-
18
- this.loadData = function() {
19
-
20
- var ajaxData = self.getAjaxData();
21
-
22
- var req = $.ajax({
23
- url: ajaxData.url,
24
- data: ajaxData.data,
25
- dataType: 'json',
26
-
27
- success: function( response ){
28
- if ( response.error ) return self.showError( response.error );
29
- self.fill( response.items );
30
- },
31
- error: function() {
32
- self.showError('Unexpected error occurred during the ajax request.');
33
- },
34
- complete: function() {
35
- self.removeLoader();
36
- }
37
- });
38
- };
39
-
40
- this.fill = function( items ) {
41
- this.clearList();
42
-
43
- var ajaxData = self.getAjaxData();
44
-
45
- if ( !items || !items.length ) {
46
-
47
- this.$element.addClass('factory-empty');
48
- this.$element.append("<li>" + ajaxData.emptyList + "</li>");
49
-
50
- } else {
51
-
52
- this.$element.removeClass('factory-empty');
53
-
54
- for( var index in items ) {
55
- var item = items[index];
56
- self.addListItem( item );
57
- }
58
- }
59
- };
60
-
61
- this.clearList = function() {
62
- this.$element.html("");
63
- };
64
-
65
- this.addListItem = function( item ) {
66
-
67
- var $li = $('<li>');
68
-
69
- var $label = $('<label>')
70
- .attr('for', 'factory-checklist-' + self.name + '-' + item.value)
71
- .appendTo($li);
72
-
73
- var $checkboxSpan = $('<span>')
74
- .appendTo($label);
75
-
76
- var $checkbox = $('<input />')
77
- .attr('type', 'checkbox')
78
- .attr('name', self.name + "[]")
79
- .val(item.value)
80
- .attr('id', 'factory-checklist-' + self.name + '-' + item.value)
81
- .appendTo($checkboxSpan);
82
-
83
-
84
- var $title = $('<span>' + item.title + '</span>')
85
- .appendTo($label);
86
-
87
-
88
- var ajaxData = self.getAjaxData();
89
- if ( ajaxData.selected.length && $.inArray( item.value, ajaxData.selected ) >= 0 ) {
90
- $checkbox.attr('checked', 'checked');
91
- }
92
-
93
- this.$element.append($li);
94
- };
95
-
96
- this.showError = function( text ) {
97
-
98
- this.$element.html("")
99
- .append($("<i class='fa fa-exclamation-triangle'></i>"))
100
- .append( text );
101
-
102
- this.$element.addClass('factory-list-error');
103
- };
104
-
105
- this.removeLoader = function() {
106
- this.$element.removeClass('factory-hidden');
107
-
108
- var ajaxData = self.getAjaxData();
109
- $( ajaxData.loader ).remove();
110
- }
111
-
112
- var ajax = this.$element.data('ajax');
113
- if ( ajax ) this.loadData();
114
- };
115
-
116
- $.fn.factoryBootstrap330_listControl = function (option) {
117
-
118
- // call an method
119
- if ( typeof option === "string" ) {
120
- var data = $(this).data('factory.list.control');
121
- if ( !data ) return null;
122
- return data[option]();
123
- }
124
-
125
- // creating an object
126
- else {
127
- return this.each(function () {
128
- var $this = $(this);
129
- var data = $this.data('factory.list.control');
130
- if (!data) $this.data('factory.list.control', (data = new list(this)));
131
- });
132
- }
133
- };
134
-
135
- $.fn.factoryBootstrap330_listControl.Constructor = list;
136
-
137
- $(function(){
138
- $(".factory-bootstrap-330 .factory-list").factoryBootstrap330_listControl();
139
- });
140
-
141
- }( jQuery ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/assets/js/control.multiple-textbox.js DELETED
@@ -1,43 +0,0 @@
1
- /**
2
- * Control multiple textbox
3
- * @author Webcraftic <wordpress.webraftic@gmail.com>
4
- * @copyright (c) 22.11.2017, Webcraftic
5
- * @version 1.0
6
- */
7
-
8
-
9
- (function($) {
10
- 'use strict';
11
-
12
- var multipleControl = function(element) {
13
- var self = this;
14
- this.$element = $(element);
15
-
16
- var prototype = $('.factory-mtextbox-item', this.$element).eq(0).clone(true);
17
-
18
- $('.factory-mtextbox-add-item', this.$element).on('click', function() {
19
- var contanier = $(this).closest('.factory-multiple-textbox-group').find('.factory-mtextbox-items');
20
- var element = prototype.clone(true);
21
- var removeButton = $('<button class="btn btn-default btn-small factory-mtextbox-remove-item"><i class="fa fa-times" aria-hidden="true"></i></button>');
22
- contanier.append(element.append(removeButton));
23
- element.find('input[type="text"]').val('').focus();
24
- return false;
25
- });
26
-
27
- $(document).on('click', '.factory-mtextbox-remove-item', function() {
28
- $(this).closest('.factory-mtextbox-item').remove();
29
- return false;
30
- });
31
- };
32
-
33
- $.fn.factoryBootstrap330_MultipleTextboxControl = function() {
34
- return this.each(function() {
35
- new multipleControl(this);
36
- });
37
- };
38
-
39
- $(function() {
40
- $(".factory-bootstrap-330 .factory-multiple-textbox-group").factoryBootstrap330_MultipleTextboxControl();
41
- });
42
-
43
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/boot.php CHANGED
@@ -2,30 +2,36 @@
2
  /**
3
  * Factory Bootstrap
4
  *
5
- * @author Paul Kashtanoff <paul@byonepress.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
- * @copyright (c) 2013, OnePress Ltd, (c) 2017 Webcraftic Ltd
7
  *
8
  * @package factory-bootstrap
9
  * @since 1.0.0
10
  */
11
 
 
 
 
 
 
12
  // module provides function only for the admin area
13
  if( !is_admin() ) {
14
  return;
15
  }
16
 
17
- if( defined('FACTORY_BOOTSTRAP_330_LOADED') ) {
18
  return;
19
  }
20
- define('FACTORY_BOOTSTRAP_330_LOADED', true);
21
 
22
- define('FACTORY_BOOTSTRAP_330_DIR', dirname(__FILE__));
23
- define('FACTORY_BOOTSTRAP_330_URL', plugins_url(null, __FILE__));
24
 
25
  // sets version of admin interface
26
- define('FACTORY_BOOTSTRAP_330_VERSION', 'FACTORY_BOOTSTRAP_330');
 
27
  if( !defined('FACTORY_FLAT_ADMIN') ) {
28
  define('FACTORY_FLAT_ADMIN', true);
29
  }
30
 
31
- include_once(FACTORY_BOOTSTRAP_330_DIR . '/includes/functions.php');
2
  /**
3
  * Factory Bootstrap
4
  *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
  *
8
  * @package factory-bootstrap
9
  * @since 1.0.0
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_400_LOADED') ) {
23
  return;
24
  }
25
+ define('FACTORY_BOOTSTRAP_400_LOADED', true);
26
 
27
+ define('FACTORY_BOOTSTRAP_400_DIR', dirname(__FILE__));
28
+ define('FACTORY_BOOTSTRAP_400_URL', plugins_url(null, __FILE__));
29
 
30
  // sets version of admin interface
31
+ define('FACTORY_BOOTSTRAP_400_VERSION', 'FACTORY_BOOTSTRAP_400');
32
+
33
  if( !defined('FACTORY_FLAT_ADMIN') ) {
34
  define('FACTORY_FLAT_ADMIN', true);
35
  }
36
 
37
+ include_once(FACTORY_BOOTSTRAP_400_DIR . '/includes/functions.php');
libs/factory/bootstrap/includes/functions.php CHANGED
@@ -4,293 +4,287 @@
4
  *
5
  * @author Alex Kovalev <alex@byonepress.com>
6
  * @author Paul Kashtanoff <paul@byonepress.com>
7
- * @copyright (c) 2013, OnePress Ltd
8
  *
9
- * @package core
10
  * @since 1.0.0
11
  */
12
-
13
- add_action('factory_bootstrap_330_plugin_created', 'factory_bootstrap_330_plugin_created');
14
- function factory_bootstrap_330_plugin_created($plugin)
15
- {
16
- $manager = new FactoryBootstrap330_Manager($plugin);
17
- $plugin->bootstrap = $manager;
18
- }
19
-
20
  /**
21
- * The Bootstrap Manager class.
22
- *
23
- * @since 3.2.0
24
  */
25
- class FactoryBootstrap330_Manager {
26
-
27
- /**
28
- * A plugin for which the manager was created.
29
- *
30
- * @since 3.2.0
31
- * @var Factory326_Plugin
32
- */
33
- public $plugin;
34
-
35
- /**
36
- * Contains scripts to include.
37
- *
38
- * @since 3.2.0
39
- * @var string[]
40
- */
41
- public $scripts = array();
42
-
43
- /**
44
- * Contains styles to include.
45
- *
46
- * @since 3.2.0
47
- * @var string[]
48
- */
49
- public $styles = array();
50
-
51
- /**
52
- * Createas a new instance of the license api for a given plugin.
53
- *
54
- * @since 1.0.0
55
- */
56
- public function __construct($plugin)
57
- {
58
- $this->plugin = $plugin;
59
-
60
- add_action('admin_enqueue_scripts', array($this, 'loadAssets'));
61
- add_filter('admin_body_class', array($this, 'adminBodyClass'));
62
- }
63
-
64
  /**
65
- * Includes the Bootstrap scripts.
66
  *
67
  * @since 3.2.0
68
- * @param mixedp[] $scripts
69
- * @return void
70
  */
71
- public function enqueueScript($scripts)
72
- {
73
-
74
- if( is_array($scripts) ) {
75
- foreach($scripts as $script) {
76
- if( !in_array($script, $this->scripts) ) {
77
- $this->scripts[] = $script;
78
- }
79
- }
80
- } else {
81
- if( !in_array($scripts, $this->scripts) ) {
82
- $this->scripts[] = $scripts;
83
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  }
85
- }
86
-
87
- /**
88
- * Includes the Bootstrap styles.
89
- *
90
- * @since 3.2.0
91
- * @param mixedp[] $scripts
92
- * @return void
93
- */
94
- public function enqueueStyle($styles)
95
- {
96
-
97
- if( is_array($styles) ) {
98
- foreach($styles as $style) {
99
- if( !in_array($style, $this->styles) ) {
100
- $this->styles[] = $style;
 
101
  }
102
- }
103
- } else {
104
- if( !in_array($styles, $this->styles) ) {
105
- $this->styles[] = $styles;
106
- }
107
- }
108
- }
109
-
110
- /**
111
- * Loads Bootstrap assets.
112
- *
113
- * @see admin_enqueue_scripts
114
- *
115
- * @since 3.2.0
116
- * @return void
117
- */
118
- public function loadAssets($hook)
119
- {
120
-
121
- do_action('factory_bootstrap_enqueue_scripts', $hook);
122
- do_action('factory_bootstrap_enqueue_scripts_' . $this->plugin->pluginName, $hook);
123
-
124
- $dependencies = array();
125
- if( !empty($this->scripts) ) {
126
- $dependencies[] = 'jquery';
127
- $dependencies[] = 'jquery-ui-core';
128
- $dependencies[] = 'jquery-ui-widget';
129
- }
130
-
131
- foreach($this->scripts as $script) {
132
- switch( $script ) {
133
- case 'plugin.iris':
134
- $dependencies[] = 'jquery-ui-widget';
135
- $dependencies[] = 'jquery-ui-slider';
136
- $dependencies[] = 'jquery-ui-draggable';
137
- break;
138
  }
139
  }
140
-
141
- // Issue #FB-3:
142
- // Tests if we can access load-styles.php and load-scripts.php remotely.
143
- // If yes, we use load-styles.php and load-scripts.php to load, merge and compress css and js.
144
- // Otherwise, every resource will be loaded separatly.
145
-
146
- $isWpContentAccessTested = get_option('factory_wp_content_access_tested', false);
147
- if( !$isWpContentAccessTested ) {
148
- update_option('factory_css_js_compression', false);
149
- update_option('factory_wp_content_access_tested', true);
150
-
151
- if( function_exists('wp_remote_get') ) {
152
- $result = wp_remote_get(FACTORY_BOOTSTRAP_330_URL . '/includes/load-scripts.php?test=1');
153
- if( !is_wp_error($result) && $result && isset($result['body']) && $result['body'] == 'success' ) {
154
- update_option('factory_css_js_compression', true);
 
 
 
 
155
  }
156
  }
157
  }
158
-
159
- $compression = get_option('factory_css_js_compression', false);
160
-
161
- if( !$compression ) {
162
-
163
- $id = md5(FACTORY_BOOTSTRAP_330_VERSION);
164
-
165
- $isFirst = true;
166
- foreach($this->scripts as $scriptToLoad) {
167
- wp_enqueue_script($scriptToLoad . '-' . $id, FACTORY_BOOTSTRAP_330_URL . "/assets/js/$scriptToLoad.js", $isFirst
168
- ? $dependencies
169
- : false, $this->plugin->version);
170
- $isFirst = false;
 
 
 
 
 
 
 
171
  }
172
-
173
- foreach($this->styles as $styleToLoad) {
174
- wp_enqueue_style($styleToLoad . '-' . $id, FACTORY_BOOTSTRAP_330_URL . "/assets/flat/css/$styleToLoad.css", array(), $this->plugin->version);
 
 
 
 
 
 
175
  }
176
- // - //
177
-
178
- } else {
179
-
180
- $loadScriptsOut = join(',', $this->scripts);
181
- $loadStylesOut = join(',', $this->styles);
182
 
183
- if( defined('WP_DEBUG') && WP_DEBUG ) {
184
- $loadScriptsOut .= "&debug=true";
185
- $loadStylesOut .= "&debug=true";
186
  }
187
-
188
  if( !empty($this->styles) ) {
189
- $id = md5($loadStylesOut . FACTORY_BOOTSTRAP_330_VERSION);
190
- wp_enqueue_style('factory-bootstrap-330-' . $id, FACTORY_BOOTSTRAP_330_URL . '/includes/load-styles.php?folder=flat&load=' . $loadStylesOut, array(), $this->plugin->version);
191
  }
192
 
193
- if( !empty($this->scripts) ) {
194
- $id = md5($loadScriptsOut . FACTORY_BOOTSTRAP_330_VERSION);
195
- wp_enqueue_script('factory-bootstrap-330-' . $id, FACTORY_BOOTSTRAP_330_URL . '/includes/load-scripts.php?load=' . $loadScriptsOut, $dependencies, $this->plugin->version);
 
 
196
  }
197
-
198
- // Issue #FB-4:
199
- // Some themes and plugins contain the functions which remove arguments from the scripts and styles paths.
200
- // If we use the compression, we need to check whether the paths are the same.
201
-
202
- add_filter('script_loader_src', array($this, 'testKeepingArgsInPaths'), 99999, 2);
203
- add_filter('style_loader_src', array($this, 'testKeepingArgsInPaths'), 99999, 2);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  }
205
 
206
- $userId = get_current_user_id();
207
- $colorName = get_user_meta($userId, 'admin_color', true);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
 
209
- if( $colorName !== 'fresh' ) {
210
- wp_enqueue_style('factory-bootstrap-330-colors', FACTORY_BOOTSTRAP_330_URL . '/assets/flat/css/bootstrap.' . $colorName . '.css');
211
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
212
 
213
- if( $colorName == 'light' ) {
214
- $primaryDark = '#037c9a';
215
- $primaryLight = '#04a4cc';
216
- } elseif( $colorName == 'blue' ) {
217
- $primaryDark = '#d39323';
218
- $primaryLight = '#e1a948';
219
- } elseif( $colorName == 'coffee' ) {
220
- $primaryDark = '#b78a66';
221
- $primaryLight = '#c7a589';
222
- } elseif( $colorName == 'ectoplasm' ) {
223
- $primaryDark = '#839237';
224
- $primaryLight = '#a3b745';
225
- } elseif( $colorName == 'ocean' ) {
226
- $primaryDark = '#80a583';
227
- $primaryLight = '#9ebaa0';
228
- } elseif( $colorName == 'midnight' ) {
229
- $primaryDark = '#d02a21';
230
- $primaryLight = '#e14d43';
231
- } elseif( $colorName == 'sunrise' ) {
232
- $primaryDark = '#c36822';
233
- $primaryLight = '#dd823b';
234
- } else {
235
- $primaryDark = '#0074a2';
236
- $primaryLight = '#2ea2cc';
237
- }
238
 
239
- ?>
 
 
 
240
 
241
- <script>
242
- if( !window.factory ) {
243
- window.factory = {};
244
- }
245
- if( !window.factory.factoryBootstrap330 ) {
246
- window.factory.factoryBootstrap330 = {};
 
 
247
  }
248
- window.factory.factoryBootstrap330.colors = {
249
- primaryDark: '<?php echo $primaryDark ?>',
250
- primaryLight: '<?php echo $primaryLight ?>'
251
- };
252
- </script>
253
- <?php
254
- }
255
-
256
- /**
257
- * Tests whether the scripts and styles path contain query arguments or them were removed.
258
- *
259
- * See 'script_loader_src'
260
- * See 'style_loader_src'
261
- *
262
- * @since 3.2.5
263
- * @return void
264
- */
265
- public function testKeepingArgsInPaths($src, $handle)
266
- {
267
- if( substr($handle, 0, 22) !== 'factory-bootstrap-330-' ) {
268
- return $src;
269
  }
270
 
271
- $parts = explode('?', $src);
272
- if( count($parts) > 1 ) {
273
- return $src;
 
 
 
 
 
 
 
 
 
 
 
274
  }
275
-
276
- update_option('factory_css_js_compression', false);
277
-
278
- return $src;
279
- }
280
-
281
- /**
282
- * Adds the body classes: 'factory-flat or 'factory-volumetric'.
283
- *
284
- * @since 3.2.0
285
- * @param string $classes
286
- * @return string
287
- */
288
- public function adminBodyClass($classes)
289
- {
290
- $classes .= FACTORY_FLAT_ADMIN
291
- ? ' factory-flat '
292
- : ' factory-volumetric ';
293
-
294
- return $classes;
295
  }
296
  }
4
  *
5
  * @author Alex Kovalev <alex@byonepress.com>
6
  * @author Paul Kashtanoff <paul@byonepress.com>
7
+ * @copyright (c) 2018, OnePress Ltd
8
  *
9
+ * @package factory-bootstrap
10
  * @since 1.0.0
11
  */
12
+
13
+ add_action('wbcr_factory_bootstrap_400_plugin_created', 'wbcr_factory_bootstrap_400_plugin_created');
14
+
 
 
 
 
 
15
  /**
16
+ * @param Wbcr_Factory400_Plugin $plugin
 
 
17
  */
18
+ function wbcr_factory_bootstrap_400_plugin_created($plugin)
19
+ {
20
+ $manager = new Wbcr_FactoryBootstrap400_Manager($plugin);
21
+ $plugin->setBootstap($manager);
22
+ }
23
+
24
+ if( !class_exists('Wbcr_FactoryBootstrap400_Manager') ) {
25
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  /**
27
+ * The Bootstrap Manager class.
28
  *
29
  * @since 3.2.0
 
 
30
  */
31
+ class Wbcr_FactoryBootstrap400_Manager {
32
+
33
+ /**
34
+ * A plugin for which the manager was created.
35
+ *
36
+ * @since 3.2.0
37
+ * @var Wbcr_Factory400_Plugin
38
+ */
39
+ public $plugin;
40
+
41
+ /**
42
+ * Contains scripts to include.
43
+ *
44
+ * @since 3.2.0
45
+ * @var string[]
46
+ */
47
+ public $scripts = array();
48
+
49
+ /**
50
+ * Contains styles to include.
51
+ *
52
+ * @since 3.2.0
53
+ * @var string[]
54
+ */
55
+ public $styles = array();
56
+
57
+ /**
58
+ * Createas a new instance of the license api for a given plugin.
59
+ *
60
+ * @since 1.0.0
61
+ */
62
+ public function __construct(Wbcr_Factory400_Plugin $plugin)
63
+ {
64
+ $this->plugin = $plugin;
65
+
66
+ add_action('admin_enqueue_scripts', array($this, 'loadAssets'));
67
+ add_filter('admin_body_class', array($this, 'adminBodyClass'));
68
  }
69
+
70
+ /**
71
+ * Includes the Bootstrap scripts.
72
+ * @since 3.2.0
73
+ * @param array|string $scripts
74
+ */
75
+ public function enqueueScript($scripts)
76
+ {
77
+ if( is_array($scripts) ) {
78
+ foreach($scripts as $script) {
79
+ if( !in_array($script, $this->scripts) ) {
80
+ $this->scripts[] = $script;
81
+ }
82
+ }
83
+ } else {
84
+ if( !in_array($scripts, $this->scripts) ) {
85
+ $this->scripts[] = $scripts;
86
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  }
88
  }
89
+
90
+ /**
91
+ * * Includes the Bootstrap styles.
92
+ *
93
+ * @since 3.2.0
94
+ * @param array|string $styles
95
+ */
96
+ public function enqueueStyle($styles)
97
+ {
98
+
99
+ if( is_array($styles) ) {
100
+ foreach($styles as $style) {
101
+ if( !in_array($style, $this->styles) ) {
102
+ $this->styles[] = $style;
103
+ }
104
+ }
105
+ } else {
106
+ if( !in_array($styles, $this->styles) ) {
107
+ $this->styles[] = $styles;
108
  }
109
  }
110
  }
111
+
112
+ /**
113
+ * Loads Bootstrap assets.
114
+ *
115
+ * @see admin_enqueue_scripts
116
+ *
117
+ * @since 3.2.0
118
+ * @return void
119
+ */
120
+ public function loadAssets($hook)
121
+ {
122
+
123
+ do_action('wbcr_factory_400_bootstrap_enqueue_scripts', $hook);
124
+ do_action('wbcr_factory_400_bootstrap_enqueue_scripts_' . $this->plugin->getPluginName(), $hook);
125
+
126
+ $dependencies = array();
127
+ if( !empty($this->scripts) ) {
128
+ $dependencies[] = 'jquery';
129
+ $dependencies[] = 'jquery-ui-core';
130
+ $dependencies[] = 'jquery-ui-widget';
131
  }
132
+
133
+ foreach($this->scripts as $script) {
134
+ switch( $script ) {
135
+ case 'plugin.iris':
136
+ $dependencies[] = 'jquery-ui-widget';
137
+ $dependencies[] = 'jquery-ui-slider';
138
+ $dependencies[] = 'jquery-ui-draggable';
139
+ break;
140
+ }
141
  }
 
 
 
 
 
 
142
 
143
+ if( !empty($this->scripts) ) {
144
+ $this->enqueueScripts($this->scripts, 'js', $dependencies);
 
145
  }
 
146
  if( !empty($this->styles) ) {
147
+ $this->enqueueScripts($this->styles, 'css', $dependencies);
 
148
  }
149
 
150
+ $user_id = get_current_user_id();
151
+ $color_name = get_user_meta($user_id, 'admin_color', true);
152
+
153
+ if( $color_name !== 'fresh' ) {
154
+ wp_enqueue_style('wbcr-factory-bootstrap-400-colors', FACTORY_BOOTSTRAP_400_URL . '/assets/flat/css/bootstrap.' . $color_name . '.css');
155
  }
156
+
157
+ if( $color_name == 'light' ) {
158
+ $primary_dark = '#037c9a';
159
+ $primary_light = '#04a4cc';
160
+ } elseif( $color_name == 'blue' ) {
161
+ $primary_dark = '#d39323';
162
+ $primary_light = '#e1a948';
163
+ } elseif( $color_name == 'coffee' ) {
164
+ $primary_dark = '#b78a66';
165
+ $primary_light = '#c7a589';
166
+ } elseif( $color_name == 'ectoplasm' ) {
167
+ $primary_dark = '#839237';
168
+ $primary_light = '#a3b745';
169
+ } elseif( $color_name == 'ocean' ) {
170
+ $primary_dark = '#80a583';
171
+ $primary_light = '#9ebaa0';
172
+ } elseif( $color_name == 'midnight' ) {
173
+ $primary_dark = '#d02a21';
174
+ $primary_light = '#e14d43';
175
+ } elseif( $color_name == 'sunrise' ) {
176
+ $primary_dark = '#c36822';
177
+ $primary_light = '#dd823b';
178
+ } else {
179
+ $primary_dark = '#0074a2';
180
+ $primary_light = '#2ea2cc';
181
+ }
182
+
183
+ ?>
184
+
185
+ <script>
186
+ if( !window.factory ) {
187
+ window.factory = {};
188
+ }
189
+ if( !window.factory.factoryBootstrap400 ) {
190
+ window.factory.factoryBootstrap400 = {};
191
+ }
192
+ window.factory.factoryBootstrap400.colors = {
193
+ primaryDark: '<?php echo $primary_dark ?>',
194
+ primaryLight: '<?php echo $primary_light ?>'
195
+ };
196
+ </script>
197
+ <?php
198
  }
199
 
200
+ /**
201
+ * @param array $sripts
202
+ * @param string $type
203
+ * @param array $dependencies
204
+ */
205
+ protected function enqueueScripts(array $sripts, $type = 'js', array $dependencies)
206
+ {
207
+
208
+ $is_first = true;
209
+ $cache_id = md5(implode(',', $this->scripts) . $type . $this->plugin->getPluginVersion());
210
+ $cache_dir_path = FACTORY_BOOTSTRAP_400_DIR . '/assets/cache/';
211
+ $cache_dir_url = FACTORY_BOOTSTRAP_400_URL . '/assets/cache/';
212
+
213
+ $cache_filepath = $cache_dir_path . $cache_id . ".min." . $type;
214
+ $cache_fileurl = $cache_dir_url . $cache_id . ".min." . $type;
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, array(), $this->plugin->getPluginVersion());
221
+ }
222
+ } else {
223
+ $cache_dir_exists = false;
224
+ if( !file_exists($cache_dir_path) ) {
225
+ if( @mkdir($cache_dir_path, 0777) && is_writable($cache_dir_path) ) {
226
+ $cache_dir_exists = true;
227
+ }
228
+ } else {
229
+ if( is_writable($cache_dir_path) ) {
230
+ $cache_dir_exists = true;
231
+ }
232
+ }
233
 
234
+ $concat_files = array();
235
+ foreach($sripts as $script_to_load) {
236
+ $script_to_load = sanitize_text_field($script_to_load);
237
+ if( $cache_dir_exists ) {
238
+ $fname = FACTORY_BOOTSTRAP_400_DIR . "/assets/$type-min/$script_to_load.min." . $type;
239
+ if( file_exists($fname) ) {
240
+ $f = @fopen($fname, 'r');
241
+ $concat_files[] = @fread($f, filesize($fname));
242
+ @fclose($f);
243
+ }
244
+ } else {
245
+ if( $type == 'js' ) {
246
+ wp_enqueue_script(md5($script_to_load), FACTORY_BOOTSTRAP_400_URL . "/assets/$type-min/$script_to_load.min." . $type, $is_first
247
+ ? $dependencies
248
+ : false, $this->plugin->getPluginVersion());
249
+ } else {
250
+ wp_enqueue_style(md5($script_to_load), FACTORY_BOOTSTRAP_400_URL . "/assets/$type-min/$script_to_load.min." . $type, array(), $this->plugin->getPluginVersion());
251
+ }
252
+ $is_first = false;
253
+ }
254
+ }
255
 
256
+ if( $cache_dir_exists && !empty($concat_files) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
 
258
+ $cf = @fopen($cache_filepath, 'w');
259
+ $write_content = implode(PHP_EOL, $concat_files);
260
+ @fwrite($cf, $write_content);
261
+ @fclose($cf);
262
 
263
+ if( file_exists($cache_filepath) ) {
264
+ if( $type == 'js' ) {
265
+ wp_enqueue_script('wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, $dependencies, $this->plugin->getPluginVersion());
266
+ } else {
267
+ wp_enqueue_style('wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, array(), $this->plugin->getPluginVersion());
268
+ }
269
+ }
270
+ }
271
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  }
273
 
274
+ /**
275
+ * Adds the body classes: 'factory-flat or 'factory-volumetric'.
276
+ *
277
+ * @since 3.2.0
278
+ * @param string $classes
279
+ * @return string
280
+ */
281
+ public function adminBodyClass($classes)
282
+ {
283
+ $classes .= FACTORY_FLAT_ADMIN
284
+ ? ' factory-flat '
285
+ : ' factory-volumetric ';
286
+
287
+ return $classes;
288
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
289
  }
290
  }
libs/factory/bootstrap/includes/load-scripts.php DELETED
@@ -1,91 +0,0 @@
1
- <?php
2
- /**
3
- * Этот файл отвечает за конкатенацию скриптов из сабмодулей
4
- *
5
- * Создано для Factory Metaboxes.
6
- *
7
- * @author Alex Kovalev <alex@byonepress.com>
8
- * @copyright (c) 2013, OnePress Ltd
9
- *
10
- * @package core
11
- * @since 1.0.0
12
- */
13
-
14
- define('ONP_SCRIPTS_DIR', '..');
15
-
16
- if( isset($_GET['test']) ) {
17
- echo 'success';
18
- exit;
19
- }
20
-
21
- /**
22
- * Фукнция получает контент файла
23
- * @param type $path - путь к файлу
24
- * @return string
25
- */
26
- function get_file($path)
27
- {
28
- if( function_exists('realpath') ) {
29
- $path = realpath($path);
30
- }
31
- if( !$path || !@is_file($path) ) {
32
- return '';
33
- }
34
-
35
- return @file_get_contents($path);
36
- }
37
-
38
- //Получает имена модулей разделенные запятой
39
- $load = isset($_GET['load'])
40
- ? preg_replace('/[^a-z0-9,._-]+/i', '', $_GET['load'])
41
- : null;
42
-
43
- $debug = isset($_GET['debug']) && $_GET['debug'] === 'true'
44
- ? true
45
- : false;
46
-
47
- if( empty($load) ) {
48
- exit;
49
- }
50
-
51
- $load = explode(',', $load);
52
-
53
- $out = '';
54
- $compress = (isset($_GET['c']) && $_GET['c']);
55
- $force_gzip = ($compress && 'gzip' == $_GET['c']);
56
- $expires_offset = 31536000; // 1 year
57
- $cache_filename = md5(join(',', $load));
58
-
59
- if( empty($load) ) {
60
- exit;
61
- }
62
-
63
- foreach($load as $key => $val) {
64
- $load[$key] = ONP_SCRIPTS_DIR . "/assets/js/$val.js";
65
- }
66
-
67
- //Собираем в строку
68
- foreach($load as $handle) {
69
- if( file_exists($handle) ) {
70
- $out .= get_file($handle) . "\n";
71
- }
72
- }
73
-
74
- //Говорим, что этот javascript файл
75
- header('Content-Type: application/x-javascript; charset=UTF-8');
76
- header('Expires: ' . gmdate("D, d M Y H:i:s", time() + $expires_offset) . ' GMT');
77
- header("Cache-Control: public, max-age=$expires_offset");
78
-
79
- if( $compress && !ini_get('zlib.output_compression') && 'ob_gzhandler' != ini_get('output_handler') && isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) {
80
- header('Vary: Accept-Encoding'); // Handle proxies
81
- if( false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate') && function_exists('gzdeflate') && !$force_gzip ) {
82
- header('Content-Encoding: deflate');
83
- $out = gzdeflate($out, 3);
84
- } elseif( false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode') ) {
85
- header('Content-Encoding: gzip');
86
- $out = gzencode($out, 3);
87
- }
88
- }
89
-
90
- echo $out;
91
- exit;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/bootstrap/includes/load-styles.php DELETED
@@ -1,90 +0,0 @@
1
- <?php
2
- /**
3
- * Этот файл отвечает за конкатенацию стилей из сабмодулей
4
- *
5
- * Создано для Factory Metaboxes.
6
- *
7
- * @author Alex Kovalev <alex@byonepress.com>
8
- * @copyright (c) 2013, OnePress Ltd
9
- *
10
- * @package core
11
- * @since 1.0.0
12
- */
13
-
14
- define('ONP_SCRIPTS_DIR', '..');
15
-
16
- if( isset($_GET['test']) ) {
17
- echo 'success';
18
- exit;
19
- }
20
-
21
- /**
22
- * Фукнция получает контент файла
23
- * @param type $path - путь к файлу
24
- * @return string
25
- */
26
- function get_file($path)
27
- {
28
- if( function_exists('realpath') ) {
29
- $path = realpath($path);
30
- }
31
- if( !$path || !@is_file($path) ) {
32
- return '';
33
- }
34
-
35
- return @file_get_contents($path);
36
- }
37
-
38
- //Получает имена модулей разделенные запятой
39
- $load = isset($_GET['load'])
40
- ? preg_replace('/[^a-z0-9,._-]+/i', '', $_GET['load'])
41
- : null;
42
-
43
- $debug = isset($_GET['debug']) && $_GET['debug'] === 'true'
44
- ? true
45
- : false;
46
-
47
- $folder = isset($_GET['folder'])
48
- ? preg_replace('/[^a-z0-9,._-]+/i', '', $_GET['folder'])
49
- : null;
50
-
51
- if( empty($folder) || empty($load) ) {
52
- exit;
53
- }
54
-
55
- $load = explode(',', $load);
56
-
57
- $out = '';
58
- $compress = (isset($_GET['c']) && $_GET['c']);
59
- $force_gzip = ($compress && 'gzip' == $_GET['c']);
60
- $expires_offset = 31536000; // 1 year
61
- $cache_filename = md5(join(',', $load));
62
-
63
- foreach($load as $key => $val)
64
- $load[$key] = ONP_SCRIPTS_DIR . "/assets/$folder/css/$val.css";
65
-
66
- //Собираем в строку и минифицируем
67
- foreach($load as $handle) {
68
- if( file_exists($handle) ) {
69
- $out .= get_file($handle) . "\n";
70
- }
71
- }
72
-
73
- //Говорим, что этот javascript файл
74
- header('Content-Type: text/css; charset=UTF-8');
75
- header('Expires: ' . gmdate("D, d M Y H:i:s", time() + $expires_offset) . ' GMT');
76
- header("Cache-Control: public, max-age=$expires_offset");
77
-
78
- if( $compress && !ini_get('zlib.output_compression') && 'ob_gzhandler' != ini_get('output_handler') && isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) {
79
- header('Vary: Accept-Encoding'); // Handle proxies
80
- if( false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate') && function_exists('gzdeflate') && !$force_gzip ) {
81
- header('Content-Encoding: deflate');
82
- $out = gzdeflate($out, 3);
83
- } elseif( false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode') ) {
84
- header('Content-Encoding: gzip');
85
- $out = gzencode($out, 3);
86
- }
87
- }
88
-
89
- echo $out;
90
- exit;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/clearfy/boot.php CHANGED
@@ -2,31 +2,36 @@
2
  /**
3
  * Factory clearfy
4
  *
5
- * @author Webcraftic <wordpress.webraftic@gmail.com>
6
- * @copyright (c) 2017 Webcraftic Ltd
7
  *
8
- * @package core
9
  * @since 1.0.0
10
  */
11
 
12
- if( defined('FACTORY_CLEARFY_102_LOADED') ) {
 
 
 
 
 
13
  return;
14
  }
15
- define('FACTORY_CLEARFY_102_LOADED', true);
16
 
17
- define('FACTORY_CLEARFY_102_DIR', dirname(__FILE__));
18
- define('FACTORY_CLEARFY_102_URL', plugins_url(null, __FILE__));
19
 
20
- load_plugin_textdomain('factory_clearfy_102', false, dirname(plugin_basename(__FILE__)) . '/langs');
21
 
22
- require(FACTORY_CLEARFY_102_DIR . '/includes/functions.php');
23
- require(FACTORY_CLEARFY_102_DIR . '/includes/class.configurate.php');
24
 
25
  // module provides function only for the admin area
26
  if( !is_admin() ) {
27
  return;
28
  }
29
 
30
- if( defined('FACTORY_PAGES_324_LOADED') ) {
31
- require(FACTORY_CLEARFY_102_DIR . '/pages/more-features.php');
32
  }
2
  /**
3
  * Factory clearfy
4
  *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
  *
8
+ * @package clearfy
9
  * @since 1.0.0
10
  */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( defined('FACTORY_CLEARFY_200_LOADED') ) {
18
  return;
19
  }
20
+ define('FACTORY_CLEARFY_200_LOADED', true);
21
 
22
+ define('FACTORY_CLEARFY_200_DIR', dirname(__FILE__));
23
+ define('FACTORY_CLEARFY_200_URL', plugins_url(null, __FILE__));
24
 
25
+ load_plugin_textdomain('wbcr_factory_clearfy_200', false, dirname(plugin_basename(__FILE__)) . '/langs');
26
 
27
+ require(FACTORY_CLEARFY_200_DIR . '/includes/class.helpers.php');
28
+ require(FACTORY_CLEARFY_200_DIR . '/includes/class.configurate.php');
29
 
30
  // module provides function only for the admin area
31
  if( !is_admin() ) {
32
  return;
33
  }
34
 
35
+ if( defined('FACTORY_PAGES_400_LOADED') ) {
36
+ require(FACTORY_CLEARFY_200_DIR . '/pages/more-features.php');
37
  }
libs/factory/clearfy/includes/class.configurate.php CHANGED
@@ -1,33 +1,67 @@
1
  <?php
2
-
3
  /**
4
- * Core plugin
5
- * @author Webcraftic <wordpress.webraftic@gmail.com>
6
- * @copyright (c) 2017 Webraftic Ltd
7
- * @version 1.0
 
 
 
8
  */
9
- abstract class WbcrFactoryClearfy_Configurate {
10
 
11
- public function __construct(Factory326_Plugin $plugin)
12
- {
13
- $this->plugin = $plugin;
14
- $this->registerActionsAndFilters();
15
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
- /**
18
- * Registers filters and actions
19
- * @return mixed
20
- */
21
- abstract protected function registerActionsAndFilters();
22
-
23
- /**
24
- * Get options with namespace
25
- * @param $option_name
26
- * @param bool $default
27
- * @return mixed|void
28
- */
29
- public function getOption($option_name, $default = false)
30
- {
31
- return get_option($this->plugin->pluginName . '_' . $option_name, $default);
32
  }
33
  }
1
  <?php
 
2
  /**
3
+ * Configurate clearfy plugins
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package clearfy
9
+ * @since 1.0.0
10
  */
 
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( !class_exists('Wbcr_FactoryClearfy200_Configurate') ) {
18
+
19
+ abstract class Wbcr_FactoryClearfy200_Configurate {
20
+
21
+ /**
22
+ * @param Wbcr_Factory400_Plugin $plugin
23
+ */
24
+ public function __construct(Wbcr_Factory400_Plugin $plugin)
25
+ {
26
+ $this->plugin = $plugin;
27
+ $this->registerActionsAndFilters();
28
+ }
29
+
30
+ /**
31
+ * Registers filters and actions
32
+ * @return mixed
33
+ */
34
+ abstract protected function registerActionsAndFilters();
35
+
36
+ /**
37
+ * Get options with namespace
38
+ *
39
+ * @param $option_name
40
+ * @param bool $default
41
+ * @return mixed|void
42
+ */
43
+ public function getOption($option_name, $default = false)
44
+ {
45
+ return $this->plugin->getOption($option_name, $default);
46
+ }
47
+
48
+ /**
49
+ * @param $option_name
50
+ * @param $value
51
+ * @return bool
52
+ */
53
+ public function updateOption($option_name, $value)
54
+ {
55
+ $this->plugin->updateOption($option_name, $value);
56
+ }
57
 
58
+ /**
59
+ * @param $option_name
60
+ * @return bool
61
+ */
62
+ public function deleteOption($option_name)
63
+ {
64
+ $this->plugin->deleteOption($option_name);
65
+ }
 
 
 
 
 
 
 
66
  }
67
  }
libs/factory/clearfy/includes/class.helpers.php ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Helpers functions
5
+ *
6
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
7
+ * @copyright (c) 2018, Webcraftic Ltd
8
+ *
9
+ * @package clearfy
10
+ * @since 1.0.0
11
+ */
12
+
13
+ // Exit if accessed directly
14
+ if( !defined('ABSPATH') ) {
15
+ exit;
16
+ }
17
+
18
+ if( !class_exists('WbcrFactoryClearfy200_Helpers') ) {
19
+ class WbcrFactoryClearfy200_Helpers {
20
+
21
+ /**
22
+ * Display 404 page to bump bots and bad guys
23
+ *
24
+ * @param bool $simple If true force displaying basic 404 page
25
+ */
26
+ public static function setError404()
27
+ {
28
+ global $wp_query;
29
+
30
+ if( function_exists('status_header') ) {
31
+ status_header('404');
32
+ nocache_headers();
33
+ }
34
+
35
+ if( $wp_query && is_object($wp_query) ) {
36
+ $wp_query->set_404();
37
+ get_template_part(404);
38
+ } else {
39
+ global $pagenow;
40
+
41
+ $pagenow = 'index.php';
42
+
43
+ if( !defined('WP_USE_THEMES') ) {
44
+ define('WP_USE_THEMES', true);
45
+ }
46
+
47
+ wp();
48
+
49
+ $_SERVER['REQUEST_URI'] = self::userTrailingslashit('/hmwp_404');
50
+
51
+ require_once(ABSPATH . WPINC . '/template-loader.php');
52
+ }
53
+
54
+ exit();
55
+ }
56
+
57
+ public static function useTrailingSlashes()
58
+ {
59
+ return ('/' === substr(get_option('permalink_structure'), -1, 1));
60
+ }
61
+
62
+ public static function userTrailingslashit($string)
63
+ {
64
+ return self::useTrailingSlashes()
65
+ ? trailingslashit($string)
66
+ : untrailingslashit($string);
67
+ }
68
+
69
+ /**
70
+ * Returns true if a needle can be found in a haystack
71
+ *
72
+ * @param string $string
73
+ * @param string $find
74
+ * @param bool $case_sensitive
75
+ * @return bool
76
+ */
77
+ public static function strContains($string, $find, $case_sensitive = true)
78
+ {
79
+ if( empty($string) || empty($find) ) {
80
+ return false;
81
+ }
82
+
83
+ $pos = $case_sensitive
84
+ ? strpos($string, $find)
85
+ : stripos($string, $find);
86
+
87
+ return !($pos === false);
88
+ }
89
+
90
+ /**
91
+ * Tests if a text starts with an given string.
92
+ *
93
+ * @param string $string
94
+ * @param string $find
95
+ * @param bool $case_sensitive
96
+ * @return bool
97
+ */
98
+ public static function strStartsWith($string, $find, $case_sensitive = true)
99
+ {
100
+ if( $case_sensitive ) {
101
+ return strpos($string, $find) === 0;
102
+ }
103
+
104
+ return stripos($string, $find) === 0;
105
+ }
106
+
107
+ /**
108
+ * Tests if a text ends with an given string.
109
+ *
110
+ * @param $string
111
+ * @param $find
112
+ * @param bool $case_sensitive
113
+ * @return bool
114
+ */
115
+ public static function strEndsWith($string, $find, $case_sensitive = true)
116
+ {
117
+ $expected_position = strlen($string) - strlen($find);
118
+
119
+ if( $case_sensitive ) {
120
+ return strrpos($string, $find, 0) === $expected_position;
121
+ }
122
+
123
+ return strripos($string, $find, 0) === $expected_position;
124
+ }
125
+
126
+ public static function arrayMergeInsert(array $arr, array $inserted, $position = 'bottom', $key = null)
127
+ {
128
+ if( $position == 'top' ) {
129
+ return array_merge($inserted, $arr);
130
+ }
131
+ $key_position = ($key === null)
132
+ ? false
133
+ : array_search($key, array_keys($arr));
134
+ if( $key_position === false OR ($position != 'before' AND $position != 'after') ) {
135
+ return array_merge($arr, $inserted);
136
+ }
137
+ if( $position == 'after' ) {
138
+ $key_position++;
139
+ }
140
+
141
+ return array_merge(array_slice($arr, 0, $key_position, true), $inserted, array_slice($arr, $key_position, null, true));
142
+ }
143
+
144
+ public static function maybeGetPostJson($name)
145
+ {
146
+ if( isset($_POST[$name]) AND is_string($_POST[$name]) ) {
147
+ $result = json_decode(stripslashes($_POST[$name]), true);
148
+ if( !is_array($result) ) {
149
+ $result = array();
150
+ }
151
+
152
+ return $result;
153
+ } else {
154
+ return array();
155
+ }
156
+ }
157
+
158
+ public static function getEscapeJson(array $data)
159
+ {
160
+ return htmlspecialchars(json_encode($data), ENT_QUOTES, 'UTF-8');
161
+ }
162
+ }
163
+ }
libs/factory/clearfy/includes/functions.php DELETED
@@ -1,69 +0,0 @@
1
- <?php
2
- /**
3
- * Helpers functions
4
- * @author Webcraftic <wordpress.webraftic@gmail.com>
5
- * @copyright (c) 2017 Webraftic Ltd
6
- * @version 1.0
7
- */
8
-
9
- /**
10
- * Merge arrays, inserting $arr2 into $arr1 before/after certain key
11
- *
12
- * @param array $arr Modifyed array
13
- * @param array $inserted Inserted array
14
- * @param string $position 'before' / 'after' / 'top' / 'bottom'
15
- * @param string $key Associative key of $arr1 for before/after insertion
16
- *
17
- * @return array
18
- */
19
- function wbcr_factory_array_merge_insert(array $arr, array $inserted, $position = 'bottom', $key = null)
20
- {
21
- if( $position == 'top' ) {
22
- return array_merge($inserted, $arr);
23
- }
24
- $key_position = ($key === null)
25
- ? false
26
- : array_search($key, array_keys($arr));
27
- if( $key_position === false OR ($position != 'before' AND $position != 'after') ) {
28
- return array_merge($arr, $inserted);
29
- }
30
- if( $position == 'after' ) {
31
- $key_position++;
32
- }
33
-
34
- return array_merge(array_slice($arr, 0, $key_position, true), $inserted, array_slice($arr, $key_position, null, true));
35
- }
36
-
37
- /**
38
- * Try to get variable from JSON-encoded post variable
39
- *
40
- * Note: we pass some params via json-encoded variables, as via pure post some data (ex empty array) will be absent
41
- *
42
- * @param string $name $_POST's variable name
43
- *
44
- * @return array
45
- */
46
- function wbcr_factory_maybe_get_post_json($name)
47
- {
48
- if( isset($_POST[$name]) AND is_string($_POST[$name]) ) {
49
- $result = json_decode(stripslashes($_POST[$name]), true);
50
- if( !is_array($result) ) {
51
- $result = array();
52
- }
53
-
54
- return $result;
55
- } else {
56
- return array();
57
- }
58
- }
59
-
60
- /**
61
- * Escape json data
62
- * @param array $data
63
- * @return string escaped json string
64
- */
65
- function wbcr_factory_get_escape_json(array $data)
66
- {
67
- return htmlspecialchars(json_encode($data), ENT_QUOTES, 'UTF-8');
68
- }
69
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/clearfy/langs/{factory_clearfy_102-fr-FR.mo → wbcr_factory_clearfy_200-fr-FR.mo} RENAMED
File without changes
libs/factory/clearfy/langs/{factory_clearfy_102-fr-FR.po → wbcr_factory_clearfy_200-fr-FR.po} RENAMED
File without changes
libs/factory/clearfy/langs/{factory_clearfy_102-ru_RU.mo → wbcr_factory_clearfy_200-ru_RU.mo} RENAMED
File without changes
libs/factory/clearfy/langs/{factory_clearfy_102-ru_RU.po → wbcr_factory_clearfy_200-ru_RU.po} RENAMED
File without changes
libs/factory/clearfy/pages/more-features.php CHANGED
@@ -1,135 +1,138 @@
1
  <?php
2
-
3
  /**
4
  * The page Settings.
5
  *
6
- * @since 1.0.0
 
 
 
 
7
  */
8
- class FactoryClearfy102_MoreFeaturesPage extends FactoryPages324_ImpressiveThemplate {
9
 
10
- /**
11
- * The id of the page in the admin menu.
12
- *
13
- * Mainly used to navigate between pages.
14
- * @see FactoryPages324_AdminPage
15
- *
16
- * @since 1.0.0
17
- * @var string
18
- */
19
- public $id = "more_features";
20
 
21
- public $page_menu_dashicon = 'dashicons-star-filled wbcr-factory-premium-color';
22
 
23
- public $page_menu_position = 5;
24
 
25
- public $type = 'page';
26
 
27
- public function __construct(Factory326_Plugin $plugin)
28
- {
29
- $this->menuTitle = __('More features (<b>free</b>)', 'factory_clearfy_102');
30
 
31
- parent::__construct($plugin);
32
- }
33
 
34
- public function getPageTitle()
35
- {
36
- return __('install the ultimate version of the plugin for free!', 'factory_clearfy_102');
37
- }
38
 
39
- public function showPageContent()
40
- {
41
- ?>
42
- <div class="row">
43
- <div class="col-sm-4">
44
- <div class="wbcr-factory-feature-box">
45
- <span class="dashicons dashicons-yes"></span>
46
 
47
- <h3><?php _e('Code cleaning', 'factory_clearfy_102')?></h3>
 
48
 
49
- <p><?php _e('Clears the source code of the page from unused code.', 'factory_clearfy_102')?></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  </div>
51
- </div>
52
- <div class="col-sm-4">
53
- <div class="wbcr-factory-feature-box">
54
- <span class="dashicons dashicons-chart-bar"></span>
55
 
56
- <h3><?php _e('Improve SEO', 'factory_clearfy_102')?></h3>
57
 
58
- <p><?php _e('Removes duplicate pages, closes external links, changes the headers of the server.', 'factory_clearfy_102')?></p>
 
59
  </div>
60
- </div>
61
- <div class="col-sm-4">
62
- <div class="wbcr-factory-feature-box">
63
- <span class="dashicons dashicons-shield-alt"></span>
64
 
65
- <h3><?php _e('Site ptotection', 'factory_clearfy_102')?></h3>
66
 
67
- <p><?php _e('Enables and disables features that improve the protection of your site.', 'factory_clearfy_102')?></p>
 
68
  </div>
69
- </div>
70
- <div class="col-sm-4">
71
- <div class="wbcr-factory-feature-box">
72
- <span class="dashicons dashicons-welcome-comments"></span>
73
 
74
- <h3><?php _e('Disable comments', 'factory_clearfy_102')?></h3>
75
 
76
- <p><?php _e('Disables comments on the entire site or on specific pages.', 'factory_clearfy_102')?></p>
 
77
  </div>
78
- </div>
79
- <div class="col-sm-4">
80
- <div class="wbcr-factory-feature-box">
81
- <span class="dashicons dashicons-update"></span>
82
 
83
- <h3><?php _e('Manage updates', 'factory_clearfy_102')?></h3>
84
 
85
- <p><?php _e('Enables or disables automatically updates for plugins, themes and core. It is also possible
86
- to disable all updates.', 'factory_clearfy_102')?></p>
 
87
  </div>
88
- </div>
89
- <div class="col-sm-4">
90
- <div class="wbcr-factory-feature-box">
91
- <span class="dashicons dashicons-admin-plugins"></span>
92
 
93
- <h3><?php _e('Manage widgets', 'factory_clearfy_102')?></h3>
94
 
95
- <p><?php _e('Allows you to remove unused widgets.', 'factory_clearfy_102')?></p>
 
96
  </div>
97
- </div>
98
- <div class="col-sm-4">
99
- <div class="wbcr-factory-feature-box">
100
- <span class="dashicons dashicons-dashboard"></span>
101
 
102
- <h3><?php _e('Speed Optimization', 'factory_clearfy_102')?></h3>
103
 
104
- <p><?php _e('Increases performance by disabling unused functions and reducing the number of requests.', 'factory_clearfy_102')?></p>
 
105
  </div>
106
- </div>
107
- <div class="col-sm-4">
108
- <div class="wbcr-factory-feature-box">
109
- <span class="dashicons dashicons-visibility"></span>
110
 
111
- <h3><?php _e('Site privacy', 'factory_clearfy_102')?></h3>
112
 
113
- <p><?php _e('Allows you to hide the version of the site and plugins. Allows you to hide your
114
- WordPress.', 'factory_clearfy_102')?></p>
 
115
  </div>
116
- </div>
117
- <div class="col-sm-4">
118
- <div class="wbcr-factory-feature-box">
119
- <span class="dashicons dashicons-admin-settings"></span>
120
 
121
- <h3><?php _e('Easy setup', 'factory_clearfy_102')?></h3>
122
 
123
- <p><?php _e('In quick mode, you can easily configure the plugin according to your needs.', 'factory_clearfy_102')?></p>
 
124
  </div>
125
  </div>
126
- </div>
127
-
128
- <div class="wbcr-factory-buttons-wrap">
129
- <a href="https://goo.gl/TcMcS4" class="wbcr-factory-premium-button" target="_blank">
130
- <?php _e('Get the ultimate plugin 100% FREE', 'factory_clearfy_102')?>
131
- </a>
132
- </div>
133
- <?php
134
  }
135
  }
1
  <?php
 
2
  /**
3
  * The page Settings.
4
  *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package clearfy
9
+ * @since 1.0.1
10
  */
 
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
 
 
 
 
 
 
16
 
17
+ if( !class_exists('Wbcr_FactoryClearfy200_MoreFeaturesPage') ) {
18
 
19
+ class Wbcr_FactoryClearfy200_MoreFeaturesPage extends Wbcr_FactoryPages400_ImpressiveThemplate {
20
 
21
+ public $id = "more_features";
22
 
23
+ public $page_menu_dashicon = 'dashicons-star-filled wbcr-factory-premium-color';
 
 
24
 
25
+ public $page_menu_position = 5;
 
26
 
27
+ public $type = 'page';
 
 
 
28
 
29
+ public function __construct(Wbcr_Factory400_Plugin $plugin)
30
+ {
31
+ $this->menu_title = __('More features (<b>free</b>)', 'wbcr_factory_clearfy_200');
 
 
 
 
32
 
33
+ parent::__construct($plugin);
34
+ }
35
 
36
+ public function getPageTitle()
37
+ {
38
+ return __('install the ultimate version of the plugin for free!', 'wbcr_factory_clearfy_200');
39
+ }
40
+
41
+ public function showPageContent()
42
+ {
43
+ ?>
44
+ <div class="row">
45
+ <div class="col-sm-4">
46
+ <div class="wbcr-factory-feature-box">
47
+ <span class="dashicons dashicons-yes"></span>
48
+
49
+ <h3><?php _e('Code cleaning', 'wbcr_factory_clearfy_200')?></h3>
50
+
51
+ <p><?php _e('Clears the source code of the page from unused code.', 'wbcr_factory_clearfy_200')?></p>
52
+ </div>
53
  </div>
54
+ <div class="col-sm-4">
55
+ <div class="wbcr-factory-feature-box">
56
+ <span class="dashicons dashicons-chart-bar"></span>
 
57
 
58
+ <h3><?php _e('Improve SEO', 'wbcr_factory_clearfy_200')?></h3>
59
 
60
+ <p><?php _e('Removes duplicate pages, closes external links, changes the headers of the server.', 'wbcr_factory_clearfy_200')?></p>
61
+ </div>
62
  </div>
63
+ <div class="col-sm-4">
64
+ <div class="wbcr-factory-feature-box">
65
+ <span class="dashicons dashicons-shield-alt"></span>
 
66
 
67
+ <h3><?php _e('Site ptotection', 'wbcr_factory_clearfy_200')?></h3>
68
 
69
+ <p><?php _e('Enables and disables features that improve the protection of your site.', 'wbcr_factory_clearfy_200')?></p>
70
+ </div>
71
  </div>
72
+ <div class="col-sm-4">
73
+ <div class="wbcr-factory-feature-box">
74
+ <span class="dashicons dashicons-welcome-comments"></span>
 
75
 
76
+ <h3><?php _e('Disable comments', 'wbcr_factory_clearfy_200')?></h3>
77
 
78
+ <p><?php _e('Disables comments on the entire site or on specific pages.', 'wbcr_factory_clearfy_200')?></p>
79
+ </div>
80
  </div>
81
+ <div class="col-sm-4">
82
+ <div class="wbcr-factory-feature-box">
83
+ <span class="dashicons dashicons-update"></span>
 
84
 
85
+ <h3><?php _e('Manage updates', 'wbcr_factory_clearfy_200')?></h3>
86
 
87
+ <p><?php _e('Enables or disables automatically updates for plugins, themes and core. It is also possible
88
+ to disable all updates.', 'wbcr_factory_clearfy_200')?></p>
89
+ </div>
90
  </div>
91
+ <div class="col-sm-4">
92
+ <div class="wbcr-factory-feature-box">
93
+ <span class="dashicons dashicons-admin-plugins"></span>
 
94
 
95
+ <h3><?php _e('Manage widgets', 'wbcr_factory_clearfy_200')?></h3>
96
 
97
+ <p><?php _e('Allows you to remove unused widgets.', 'wbcr_factory_clearfy_200')?></p>
98
+ </div>
99
  </div>
100
+ <div class="col-sm-4">
101
+ <div class="wbcr-factory-feature-box">
102
+ <span class="dashicons dashicons-dashboard"></span>
 
103
 
104
+ <h3><?php _e('Speed Optimization', 'wbcr_factory_clearfy_200')?></h3>
105
 
106
+ <p><?php _e('Increases performance by disabling unused functions and reducing the number of requests.', 'wbcr_factory_clearfy_200')?></p>
107
+ </div>
108
  </div>
109
+ <div class="col-sm-4">
110
+ <div class="wbcr-factory-feature-box">
111
+ <span class="dashicons dashicons-visibility"></span>
 
112
 
113
+ <h3><?php _e('Site privacy', 'wbcr_factory_clearfy_200')?></h3>
114
 
115
+ <p><?php _e('Allows you to hide the version of the site and plugins. Allows you to hide your
116
+ WordPress.', 'wbcr_factory_clearfy_200')?></p>
117
+ </div>
118
  </div>
119
+ <div class="col-sm-4">
120
+ <div class="wbcr-factory-feature-box">
121
+ <span class="dashicons dashicons-admin-settings"></span>
 
122
 
123
+ <h3><?php _e('Easy setup', 'wbcr_factory_clearfy_200')?></h3>
124
 
125
+ <p><?php _e('In quick mode, you can easily configure the plugin according to your needs.', 'wbcr_factory_clearfy_200')?></p>
126
+ </div>
127
  </div>
128
  </div>
129
+
130
+ <div class="wbcr-factory-buttons-wrap">
131
+ <a href="https://goo.gl/TcMcS4" class="wbcr-factory-premium-button" target="_blank">
132
+ <?php _e('Get the ultimate plugin 100% FREE', 'wbcr_factory_clearfy_200')?>
133
+ </a>
134
+ </div>
135
+ <?php
136
+ }
137
  }
138
  }
libs/factory/core/boot.php CHANGED
@@ -2,31 +2,39 @@
2
  /**
3
  * Factory Plugin
4
  *
5
- * @author Paul Kashtanoff <paul@byonepress.com>, Webcraftic <wordpress.webraftic@gmail.com>
6
- * @copyright (c) 2013, OnePress Ltd, (c) 2017 Webcraftic Ltd
7
  *
8
  * @package core
9
- * @since 1.0.1
10
  */
11
 
12
- if( defined('FACTORY_326_LOADED') ) {
 
 
 
 
 
13
  return;
14
  }
15
- define('FACTORY_326_LOADED', true);
16
 
17
- define('FACTORY_326_VERSION', '000');
18
 
19
- define('FACTORY_326_DIR', dirname(__FILE__));
20
- define('FACTORY_326_URL', plugins_url(null, __FILE__));
21
 
22
  #comp merge
23
- require(FACTORY_326_DIR . '/includes/assets-managment/assets-list.class.php');
24
- require(FACTORY_326_DIR . '/includes/assets-managment/script-list.class.php');
25
- require(FACTORY_326_DIR . '/includes/assets-managment/style-list.class.php');
 
 
 
 
26
 
27
- require(FACTORY_326_DIR . '/includes/functions.php');
28
- require(FACTORY_326_DIR . '/includes/plugin.class.php');
29
 
30
- require(FACTORY_326_DIR . '/includes/activation/activator.class.php');
31
- require(FACTORY_326_DIR . '/includes/activation/update.class.php');
32
  #endcomp
2
  /**
3
  * Factory Plugin
4
  *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
  *
8
  * @package core
9
+ * @since 1.0.0
10
  */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( defined('FACTORY_400_LOADED') ) {
18
  return;
19
  }
20
+ define('FACTORY_400_LOADED', true);
21
 
22
+ define('FACTORY_400_VERSION', '000');
23
 
24
+ define('FACTORY_400_DIR', dirname(__FILE__));
25
+ define('FACTORY_400_URL', plugins_url(null, __FILE__));
26
 
27
  #comp merge
28
+ require_once(FACTORY_400_DIR . '/includes/functions.php');
29
+ require_once(FACTORY_400_DIR . '/includes/request.class.php');
30
+ require_once(FACTORY_400_DIR . '/includes/base.class.php');
31
+
32
+ require_once(FACTORY_400_DIR . '/includes/assets-managment/assets-list.class.php');
33
+ require_once(FACTORY_400_DIR . '/includes/assets-managment/script-list.class.php');
34
+ require_once(FACTORY_400_DIR . '/includes/assets-managment/style-list.class.php');
35
 
36
+ require_once(FACTORY_400_DIR . '/includes/plugin.class.php');
 
37
 
38
+ require_once(FACTORY_400_DIR . '/includes/activation/activator.class.php');
39
+ require_once(FACTORY_400_DIR . '/includes/activation/update.class.php');
40
  #endcomp
libs/factory/core/includes/activation/activator.class.php CHANGED
@@ -1,149 +1,187 @@
1
  <?php
2
- /**
3
- * The file contains a base class for plugin activators.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package factory-core
9
- * @since 1.0.0
10
- */
11
-
12
- /**
13
- * Plugin Activator
14
- *
15
- * @since 1.0.0
16
- */
17
- abstract class Factory326_Activator {
18
-
19
- /**
20
- * Curent plugin.
21
- * @var Factory326_Plugin
22
- */
23
- public $plugin;
24
-
25
- public function __construct(Factory326_Plugin $plugin) {
26
- $this->plugin = $plugin;
27
- }
28
-
29
- public function activate() {}
30
- public function deactivate() {}
31
- public function update() {}
32
-
33
- // --------------------------------------------------------------------------------
34
- // Posts and pages
35
- // --------------------------------------------------------------------------------
36
-
37
- /**
38
- * Adds post on activation.
39
- * @return array Post info.
40
- */
41
- public function addPost() {
42
-
43
- $argsCount = func_num_args();
44
-
45
- $postInfoBase = array();
46
- $metaInfoBase = array();
47
-
48
- if ($argsCount == 4) {
49
-
50
- $base = func_get_arg(0);
51
-
52
- $postInfoBase = $base['post'];
53
- $metaInfoBase = $base['meta'];
54
- }
55
-
56
- $optionName = ($argsCount == 4) ? func_get_arg(1) : func_get_arg(0);
57
- $postInfo = ($argsCount == 4) ? func_get_arg(2) : func_get_arg(1);
58
- $metaInfo = ($argsCount == 4) ? func_get_arg(3) : func_get_arg(2);
59
-
60
- if ($postInfo == null) $postInfo = array();
61
- if ($metaInfo == null) $metaInfo = array();
62
-
63
- $postInfo = array_merge($postInfoBase, $postInfo);
64
- $metaInfo = array_merge($metaInfoBase, $metaInfo);
65
-
66
- $insert_id = $this->createPost($postInfo, $metaInfo, $optionName);
67
-
68
- return array(
69
- 'post_id' => $insert_id,
70
- 'post' => $postInfo,
71
- 'meta' => $metaInfo
72
- );
73
- }
74
-
75
- /**
76
- * Adds a page on activation.
77
- */
78
- public function addPage() {
79
- $argsCount = func_num_args();
80
-
81
- $optionName = func_get_arg(0);
82
- $postInfo = func_get_arg(1);
83
- $metaInfo = func_get_arg(2);
84
-
85
- if ($postInfo == null) $postInfo = array();
86
- if ($metaInfo == null) $metaInfo = array();
87
-
88
- $postInfo['post_type'] = 'page';
89
- $this->createPost($postInfo, $metaInfo, $optionName);
90
- }
91
-
92
- /**
93
- * Creates post by using the specified info.
94
- * @global type $wpdb
95
- * @param type $postInfo
96
- * @param type $metaInfo
97
- * @param type $optionName
98
- * @return interger
99
- */
100
- public function createPost( $postInfo, $metaInfo, $optionName ) {
101
- global $wpdb;
102
-
103
- $slug = $postInfo['post_name'];
104
- $postType = $postInfo['post_type'];
105
-
106
- $postId = $wpdb->get_var("SELECT ID FROM " . $wpdb->posts . " WHERE post_name = '$slug' AND
107
- post_type = '" . $postType . "' LIMIT 1");
108
-
109
- $optionValue = get_option($optionName);
110
-
111
- if ( !$postId )
112
- {
113
- $create = true;
114
-
115
- if ( !empty( $optionValue ) ) {
116
- $post_id = $wpdb->get_var("SELECT ID FROM " . $wpdb->posts . " WHERE ID = '$optionValue' AND
117
- post_type = '" . $postType . "' LIMIT 1");
118
- if ( $post_id ) $create = false;
119
- };
120
-
121
- if ( $create ) :
122
- if ( !isset( $postInfo['post_status'] ) ) $postInfo['post_status'] = 'publish';
123
-
124
- // '@' here is to hide unexpected output while plugin activation
125
- $optionValue = @wp_insert_post( $postInfo );
126
- $postId = $optionValue;
127
- update_option( $optionName, $optionValue );
128
- endif;
129
- }
130
- else
131
- {
132
- if ( empty ( $optionValue ) ) {
133
- update_option( $optionName, $postId );
134
- }
135
- }
136
-
137
- update_option( $optionName, $postId );
138
-
139
- // adds meta
140
- foreach($metaInfo as $key => $value) {
141
- if ($value === true) $value = 'true';
142
- if ($value === false) $value = 'false';
143
-
144
- add_post_meta($postId, $key, $value);
145
- }
146
-
147
- return $postId;
148
- }
149
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains a base class for plugin activators.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
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
+ if( !class_exists('Wbcr_Factory400_Activator') ) {
17
+ /**
18
+ * Plugin Activator
19
+ *
20
+ * @since 1.0.0
21
+ */
22
+ abstract class Wbcr_Factory400_Activator {
23
+
24
+ /**
25
+ * Curent plugin.
26
+ * @var Wbcr_Factory400_Plugin
27
+ */
28
+ public $plugin;
29
+
30
+ public function __construct(Wbcr_Factory400_Plugin $plugin)
31
+ {
32
+ $this->plugin = $plugin;
33
+ }
34
+
35
+ public function activate()
36
+ {
37
+ }
38
+
39
+ public function deactivate()
40
+ {
41
+ }
42
+
43
+ public function update()
44
+ {
45
+ }
46
+
47
+ // --------------------------------------------------------------------------------
48
+ // Posts and pages
49
+ // --------------------------------------------------------------------------------
50
+
51
+ /**
52
+ * Adds post on activation.
53
+ * @return array Post info.
54
+ */
55
+ public function addPost()
56
+ {
57
+
58
+ $args_count = func_num_args();
59
+
60
+ $post_info_base = array();
61
+ $meta_info_base = array();
62
+
63
+ if( $args_count == 4 ) {
64
+
65
+ $base = func_get_arg(0);
66
+
67
+ $post_info_base = $base['post'];
68
+ $meta_info_base = $base['meta'];
69
+ }
70
+
71
+ $option_name = ($args_count == 4)
72
+ ? func_get_arg(1)
73
+ : func_get_arg(0);
74
+ $post_info = ($args_count == 4)
75
+ ? func_get_arg(2)
76
+ : func_get_arg(1);
77
+ $meta_info = ($args_count == 4)
78
+ ? func_get_arg(3)
79
+ : func_get_arg(2);
80
+
81
+ if( $post_info == null ) {
82
+ $post_info = array();
83
+ }
84
+ if( $meta_info == null ) {
85
+ $meta_info = array();
86
+ }
87
+
88
+ $post_info = array_merge($post_info_base, $post_info);
89
+ $meta_info = array_merge($meta_info_base, $meta_info);
90
+
91
+ $insert_id = $this->createPost($post_info, $meta_info, $option_name);
92
+
93
+ return array(
94
+ 'post_id' => $insert_id,
95
+ 'post' => $post_info,
96
+ 'meta' => $meta_info
97
+ );
98
+ }
99
+
100
+ /**
101
+ * * Adds a page on activation.
102
+ *
103
+ * @return int|null|string|WP_Error
104
+ */
105
+ public function addPage()
106
+ {
107
+ $option_name = func_get_arg(0);
108
+ $post_info = func_get_arg(1);
109
+ $meta_info = func_get_arg(2);
110
+
111
+ if( $post_info == null ) {
112
+ $post_info = array();
113
+ }
114
+ if( $meta_info == null ) {
115
+ $meta_info = array();
116
+ }
117
+
118
+ $post_info['post_type'] = 'page';
119
+
120
+ return $this->createPost($post_info, $meta_info, $option_name);
121
+ }
122
+
123
+ /**
124
+ * Creates post by using the specified info.
125
+ *
126
+ * @param array $post_info
127
+ * @param array $meta_info
128
+ * @param string $option_name
129
+ * @return int|null|string|WP_Error
130
+ */
131
+ public function createPost($post_info, $meta_info, $option_name)
132
+ {
133
+ global $wpdb;
134
+
135
+ $slug = $post_info['post_name'];
136
+ $post_type = $post_info['post_type'];
137
+
138
+ $postId = $wpdb->get_var($wpdb->prepare("SELECT ID FROM " . $wpdb->posts . " WHERE post_name = '%s' AND
139
+ post_type = '%s' LIMIT 1", $slug, $post_type));
140
+
141
+ $option_value = $this->plugin->getOption($option_name);
142
+
143
+ if( !$postId ) {
144
+ $create = true;
145
+
146
+ if( !empty($option_value) ) {
147
+ $post_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM " . $wpdb->posts . " WHERE ID = '%d' AND
148
+ post_type = '%s' LIMIT 1", $option_value, $post_type));
149
+ if( $post_id ) {
150
+ $create = false;
151
+ }
152
+ };
153
+
154
+ if( $create ) :
155
+ if( !isset($post_info['post_status']) ) {
156
+ $post_info['post_status'] = 'publish';
157
+ }
158
+
159
+ // '@' here is to hide unexpected output while plugin activation
160
+ $option_value = @wp_insert_post($post_info);
161
+ $postId = $option_value;
162
+ $this->plugin->updateOption($option_name, $option_value);
163
+ endif;
164
+ } else {
165
+ if( empty ($option_value) ) {
166
+ $this->plugin->updateOption($option_name, $postId);
167
+ }
168
+ }
169
+
170
+ $this->plugin->updateOption($option_name, $postId);
171
+
172
+ // adds meta
173
+ foreach($meta_info as $key => $value) {
174
+ if( $value === true ) {
175
+ $value = 'true';
176
+ }
177
+ if( $value === false ) {
178
+ $value = 'false';
179
+ }
180
+
181
+ add_post_meta($postId, $key, $value);
182
+ }
183
+
184
+ return $postId;
185
+ }
186
+ }
187
+ }
libs/factory/core/includes/activation/update.class.php CHANGED
@@ -1,30 +1,38 @@
1
  <?php
2
- /**
3
- * The file contains a base class for update items of plugins.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package factory-core
9
- * @since 1.0.0
10
- */
11
 
12
- /**
13
- * Plugin Activator
14
- *
15
- * @since 1.0.0
16
- */
17
- abstract class Factory326_Update {
18
-
19
- /**
20
- * Current plugin
21
- * @var Factory326_Plugin
22
- */
23
- var $plugin;
24
-
25
- public function __construct( Factory326_Plugin $plugin ){
26
- $this->plugin = $plugin;
27
- }
28
-
29
- abstract function install();
30
- }
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains a base class for update items of plugins.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
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
+ if( !class_exists('Wbcr_Factory400_Update') ) {
18
+ /**
19
+ * Plugin Activator
20
+ *
21
+ * @since 1.0.0
22
+ */
23
+ abstract class Wbcr_Factory400_Update {
24
+
25
+ /**
26
+ * Current plugin
27
+ * @var Factory400_Plugin
28
+ */
29
+ var $plugin;
30
+
31
+ public function __construct(Wbcr_Factory400_Plugin $plugin)
32
+ {
33
+ $this->plugin = $plugin;
34
+ }
35
+
36
+ abstract function install();
37
+ }
38
+ }
libs/factory/core/includes/assets-managment/assets-list.class.php CHANGED
@@ -2,156 +2,172 @@
2
  /**
3
  * The class contains a base class for all lists of assets.
4
  *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
  *
8
  * @package factory-core
9
  * @since 1.0.0
10
  */
11
 
12
- /**
13
- * Assets List
14
- *
15
- * @since 1.0.0
16
- */
17
- class Factory326_AssetsList {
18
-
19
- protected $all = array();
20
- public $headerPlace = array();
21
- public $footerPlace = array();
22
- public $required = array();
23
-
24
- protected $defaultPlace;
25
-
26
- public function __construct($plugin = null, $defaultIsFooter = true)
27
- {
28
- $this->plugin = $plugin;
29
-
30
- if( $defaultIsFooter ) {
31
- $this->defaultPlace = &$this->footerPlace;
32
- }
33
- if( !$defaultIsFooter ) {
34
- $this->defaultPlace = &$this->headerPlace;
35
- }
36
- }
37
-
38
  /**
39
- * Adds new items to the collection (default place).
40
- * @param mixed
 
41
  */
42
- public function add()
43
- {
44
-
45
- foreach(func_get_args() as $item) {
46
- $this->all[] = $item;
47
- $this->defaultPlace[] = $item;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  }
49
 
50
- return $this;
51
- }
52
-
53
- /**
54
- * Remove items from the collection
55
- * @return $this
56
- */
57
- public function deregister()
58
- {
59
- foreach(func_get_args() as $item) {
60
- if( !is_string($item) ) {
61
- return $this;
62
  }
63
- $keyInAll = array_search($item, $this->all);
64
- $keyInDefaultPlace = array_search($item, $this->defaultPlace);
65
- $keyInHeaderPlace = array_search($item, $this->headerPlace);
66
- $keyInFooterPlace = array_search($item, $this->footerPlace);
67
 
68
- if( $keyInAll ) {
69
- unset($this->all[$keyInAll]);
70
- }
71
- if( $keyInDefaultPlace ) {
72
- unset($this->defaultPlace[$keyInDefaultPlace]);
73
- }
74
- if( $keyInHeaderPlace ) {
75
- unset($this->headerPlace[$keyInHeaderPlace]);
76
- }
77
- if( $keyInFooterPlace ) {
78
- unset($this->footerPlace[$keyInFooterPlace]);
79
- }
80
  }
81
 
82
- return $this;
83
- }
84
-
85
- /**
86
- * Adds new items to the collection (header).
87
- * @param mixed
88
- */
89
- public function addToHeader()
90
- {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
 
92
- foreach(func_get_args() as $item) {
93
- $this->all[] = $item;
94
- $this->headerPlace[] = $item;
95
  }
96
 
97
- return $this;
98
- }
 
 
 
 
99
 
100
- /**
101
- * Adds new items to the collection (footer).
102
- * @param mixed
103
- */
104
- public function addToFooter()
105
- {
106
 
107
- foreach(func_get_args() as $item) {
108
- $this->all[] = $item;
109
- $this->footerPlace[] = $item;
110
  }
111
 
112
- return $this;
113
- }
 
 
 
 
114
 
115
- /**
116
- * Checks whether the collection is empty.
117
- *
118
- * @param string $source if the 'bootstrap' specified, checks only whether the bootstrap assets were required.
119
- * @return boolean
120
- */
121
- public function isEmpty($source = 'wordpress')
122
- {
123
- if( 'bootstrap' === $source ) {
124
- return empty($this->required[$source]);
125
  }
126
 
127
- return empty($this->all) && empty($this->required);
128
- }
 
 
 
 
 
 
 
 
 
129
 
130
- public function IsHeaderEmpty()
131
- {
132
- return empty($this->headerPlace);
133
- }
134
 
135
- public function IsFooterEmpty()
136
- {
137
- return empty($this->footerPlace);
138
- }
139
 
140
- /**
141
- * Adds new items to the requried collection.
142
- * @param mixed
143
- */
144
- public function request($items, $source = 'wordpress')
145
- {
146
 
147
- if( is_array($items) ) {
148
- foreach($items as $item) {
149
- $this->required[$source][] = $item;
 
 
 
 
 
 
 
 
 
 
150
  }
151
- } else {
152
- $this->required[$source][] = $items;
153
- }
154
 
155
- return $this;
 
156
  }
157
  }
2
  /**
3
  * The class contains a base class for all lists of assets.
4
  *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
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
+ if( !class_exists('Wbcr_Factory400_AssetsList') ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  /**
18
+ * Assets List
19
+ *
20
+ * @since 1.0.0
21
  */
22
+ class Wbcr_Factory400_AssetsList {
23
+
24
+ protected $all = array();
25
+ public $header_place = array();
26
+ public $footer_place = array();
27
+ public $required = array();
28
+
29
+ protected $default_place;
30
+
31
+ /**
32
+ * @var Wbcr_Factory400_Plugin
33
+ */
34
+ protected $plugin;
35
+
36
+ /**
37
+ * @param Wbcr_Factory400_Plugin $plugin
38
+ * @param bool $defaultIsFooter
39
+ */
40
+ public function __construct(Wbcr_Factory400_Plugin $plugin, $defaultIsFooter = true)
41
+ {
42
+ $this->plugin = $plugin;
43
+
44
+ if( $defaultIsFooter ) {
45
+ $this->default_place = &$this->footer_place;
46
+ }
47
+ if( !$defaultIsFooter ) {
48
+ $this->default_place = &$this->header_place;
49
+ }
50
  }
51
 
52
+ /**
53
+ * Adds new items to the collection (default place).
54
+ * @param mixed
55
+ */
56
+ public function add()
57
+ {
58
+ foreach(func_get_args() as $item) {
59
+ $this->all[] = $item;
60
+ $this->default_place[] = $item;
 
 
 
61
  }
 
 
 
 
62
 
63
+ return $this;
 
 
 
 
 
 
 
 
 
 
 
64
  }
65
 
66
+ /**
67
+ * Remove items from the collection
68
+ * @return $this
69
+ */
70
+ public function deregister()
71
+ {
72
+ foreach(func_get_args() as $item) {
73
+
74
+ if( !is_string($item) ) {
75
+ return $this;
76
+ }
77
+
78
+ $key_in_all = array_search($item, $this->all);
79
+ $key_in_default_place = array_search($item, $this->default_place);
80
+ $key_in_header_place = array_search($item, $this->header_place);
81
+ $key_inFooterPlace = array_search($item, $this->footer_place);
82
+
83
+ if( $key_in_all ) {
84
+ unset($this->all[$key_in_all]);
85
+ }
86
+ if( $key_in_default_place ) {
87
+ unset($this->default_place[$key_in_default_place]);
88
+ }
89
+ if( $key_in_header_place ) {
90
+ unset($this->header_place[$key_in_header_place]);
91
+ }
92
+ if( $key_inFooterPlace ) {
93
+ unset($this->footer_place[$key_inFooterPlace]);
94
+ }
95
+ }
96
 
97
+ return $this;
 
 
98
  }
99
 
100
+ /**
101
+ * Adds new items to the collection (header).
102
+ * @param mixed
103
+ */
104
+ public function addToHeader()
105
+ {
106
 
107
+ foreach(func_get_args() as $item) {
108
+ $this->all[] = $item;
109
+ $this->header_place[] = $item;
110
+ }
 
 
111
 
112
+ return $this;
 
 
113
  }
114
 
115
+ /**
116
+ * Adds new items to the collection (footer).
117
+ * @param mixed
118
+ */
119
+ public function addToFooter()
120
+ {
121
 
122
+ foreach(func_get_args() as $item) {
123
+ $this->all[] = $item;
124
+ $this->footer_place[] = $item;
125
+ }
126
+
127
+ return $this;
 
 
 
 
128
  }
129
 
130
+ /**
131
+ * Checks whether the collection is empty.
132
+ *
133
+ * @param string $source if the 'bootstrap' specified, checks only whether the bootstrap assets were required.
134
+ * @return boolean
135
+ */
136
+ public function isEmpty($source = 'wordpress')
137
+ {
138
+ if( 'bootstrap' === $source ) {
139
+ return empty($this->required[$source]);
140
+ }
141
 
142
+ return empty($this->all) && empty($this->required);
143
+ }
 
 
144
 
145
+ public function IsHeaderEmpty()
146
+ {
147
+ return empty($this->header_place);
148
+ }
149
 
150
+ public function IsFooterEmpty()
151
+ {
152
+ return empty($this->footer_place);
153
+ }
 
 
154
 
155
+ /**
156
+ * Adds new items to the requried collection.
157
+ * @param mixed
158
+ */
159
+ public function request($items, $source = 'wordpress')
160
+ {
161
+
162
+ if( is_array($items) ) {
163
+ foreach($items as $item) {
164
+ $this->required[$source][] = $item;
165
+ }
166
+ } else {
167
+ $this->required[$source][] = $items;
168
  }
 
 
 
169
 
170
+ return $this;
171
+ }
172
  }
173
  }
libs/factory/core/includes/assets-managment/script-list.class.php CHANGED
@@ -2,83 +2,96 @@
2
  /**
3
  * The file contains a class to manage script assets.
4
  *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
  *
8
  * @package factory-core
9
  * @since 1.0.0
10
  */
11
 
12
- /**
13
- * Script List
14
- *
15
- * @since 1.0.0
16
- */
17
- class Factory326_ScriptList extends Factory326_AssetsList {
18
-
19
- public $localizeData = array();
20
- public $useAjax = false;
21
-
22
- public function connect($source = 'wordpress')
23
- {
24
 
25
- // register all global required scripts
26
- if( !empty($this->required[$source]) ) {
27
- foreach($this->required[$source] as $script) {
28
- if( 'wordpress' === $source ) {
29
- wp_enqueue_script($script);
30
- } elseif( 'bootstrap' === $source ) {
31
- $this->plugin->bootstrap->enqueueScript($script);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  }
33
  }
34
- }
35
 
36
- if( $source == 'bootstrap' ) {
37
- return;
38
- }
39
 
40
- $isFirstScript = true;
41
- $isFooter = false;
42
 
43
- // register all other scripts
44
- foreach(array($this->headerPlace, $this->footerPlace) as $scriptPlace) {
45
- foreach($scriptPlace as $script) {
46
 
47
- wp_register_script($script, $script, array(), $this->plugin->version, $isFooter);
48
 
49
- if( $isFirstScript && $this->useAjax ) {
50
- wp_localize_script($script, 'factory', array('ajaxurl' => admin_url('admin-ajax.php')));
51
- }
 
 
52
 
53
- if( !empty($this->localizeData[$script]) ) {
 
54
 
55
- wp_localize_script($script, $this->localizeData[$script][0], $this->localizeData[$script][1]);
 
 
56
  }
57
 
58
- wp_enqueue_script($script);
59
- $siFirstScript = false;
60
  }
 
61
 
62
- $isFooter = true;
 
 
63
  }
64
- }
65
 
66
- public function useAjax()
67
- {
68
- $this->useAjax = true;
69
- }
 
70
 
71
- public function localize($varname, $data)
72
- {
73
- $bindTo = count($this->all) == 0
74
- ? null
75
- : end($this->all);
76
- if( !$bindTo ) {
77
- return;
78
- }
79
 
80
- $this->localizeData[$bindTo] = array($varname, $data);
81
 
82
- return $this;
 
83
  }
84
  }
2
  /**
3
  * The file contains a class to manage script assets.
4
  *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
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
+ if( !class_exists('Wbcr_Factory400_ScriptList') ) {
18
+
19
+ /**
20
+ * Script List
21
+ *
22
+ * @since 1.0.0
23
+ */
24
+ class Wbcr_Factory400_ScriptList extends Wbcr_Factory400_AssetsList {
25
+
26
+ public $localize_data = array();
27
+ public $use_ajax = false;
28
+
29
+ /**
30
+ * @param string $source
31
+ */
32
+ public function connect($source = 'wordpress')
33
+ {
34
+
35
+ // register all global required scripts
36
+ if( !empty($this->required[$source]) ) {
37
+ foreach($this->required[$source] as $script) {
38
+ if( 'wordpress' === $source ) {
39
+ wp_enqueue_script($script);
40
+ } elseif( 'bootstrap' === $source ) {
41
+ $this->plugin->bootstrap->enqueueScript($script);
42
+ }
43
  }
44
  }
 
45
 
46
+ if( $source == 'bootstrap' ) {
47
+ return;
48
+ }
49
 
50
+ $is_first_script = true;
51
+ $is_footer = false;
52
 
53
+ // register all other scripts
54
+ foreach(array($this->header_place, $this->footer_place) as $scriptPlace) {
55
+ foreach($scriptPlace as $script) {
56
 
57
+ wp_register_script($script, $script, array(), $this->plugin->getPluginVersion(), $is_footer);
58
 
59
+ if( $is_first_script && $this->use_ajax ) {
60
+ wp_localize_script($script, 'factory', array('ajaxurl' => admin_url('admin-ajax.php')));
61
+ }
62
+
63
+ if( !empty($this->localize_data[$script]) ) {
64
 
65
+ wp_localize_script($script, $this->localize_data[$script][0], $this->localize_data[$script][1]);
66
+ }
67
 
68
+ wp_enqueue_script($script);
69
+
70
+ $is_first_script = false;
71
  }
72
 
73
+ $is_footer = true;
 
74
  }
75
+ }
76
 
77
+ public function useAjax()
78
+ {
79
+ $this->use_ajax = true;
80
  }
 
81
 
82
+ public function localize($varname, $data)
83
+ {
84
+ $bindTo = count($this->all) == 0
85
+ ? null
86
+ : end($this->all);
87
 
88
+ if( !$bindTo ) {
89
+ return;
90
+ }
 
 
 
 
 
91
 
92
+ $this->localize_data[$bindTo] = array($varname, $data);
93
 
94
+ return $this;
95
+ }
96
  }
97
  }
libs/factory/core/includes/assets-managment/style-list.class.php CHANGED
@@ -2,42 +2,50 @@
2
  /**
3
  * The file contains a class to manage style assets.
4
  *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
  *
8
  * @package factory-core
9
  * @since 1.0.0
10
  */
11
 
12
- /**
13
- * Style List
14
- *
15
- * @since 1.0.0
16
- */
17
- class Factory326_StyleList extends Factory326_AssetsList {
18
 
19
- public function connect($source = 'wordpress')
20
- {
 
 
 
 
21
 
22
- // register all global required scripts
23
- if( !empty($this->required[$source]) ) {
24
 
25
- foreach($this->required[$source] as $style) {
26
- if( 'wordpress' === $source ) {
27
- wp_enqueue_style($style);
28
- } elseif( 'bootstrap' === $source ) {
29
- $this->plugin->bootstrap->enqueueStyle($style);
 
 
 
 
30
  }
31
  }
32
- }
33
 
34
- if( $source == 'bootstrap' ) {
35
- return;
36
- }
37
 
38
- // register all other styles
39
- foreach($this->all as $style) {
40
- wp_enqueue_style(md5($style), $style, array(), $this->plugin->version);
 
41
  }
42
  }
43
  }
2
  /**
3
  * The file contains a class to manage style assets.
4
  *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
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
+ if( !class_exists('Wbcr_Factory400_StyleList') ) {
18
 
19
+ /**
20
+ * Style List
21
+ *
22
+ * @since 1.0.0
23
+ */
24
+ class Wbcr_Factory400_StyleList extends Wbcr_Factory400_AssetsList {
25
 
26
+ public function connect($source = 'wordpress')
27
+ {
28
 
29
+ // register all global required scripts
30
+ if( !empty($this->required[$source]) ) {
31
+
32
+ foreach($this->required[$source] as $style) {
33
+ if( 'wordpress' === $source ) {
34
+ wp_enqueue_style($style);
35
+ } elseif( 'bootstrap' === $source ) {
36
+ $this->plugin->bootstrap->enqueueStyle($style);
37
+ }
38
  }
39
  }
 
40
 
41
+ if( $source == 'bootstrap' ) {
42
+ return;
43
+ }
44
 
45
+ // register all other styles
46
+ foreach($this->all as $style) {
47
+ wp_enqueue_style(md5($style), $style, array(), $this->plugin->getPluginVersion());
48
+ }
49
  }
50
  }
51
  }
libs/factory/core/includes/base.class.php ADDED
@@ -0,0 +1,378 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Exit if accessed directly
3
+ if( !defined('ABSPATH') ) {
4
+ exit;
5
+ }
6
+
7
+ if( !class_exists('Wbcr_Factory400_Base') ) {
8
+ class Wbcr_Factory400_Base {
9
+
10
+ /**
11
+ * Буферизуем опции плагинов в этот атрибут, для быстрого доступа
12
+ *
13
+ * @var array
14
+ */
15
+ private static $_opt_buffer = array();
16
+
17
+ /**
18
+ * Префикс для пространства имен среди опций Wordpress
19
+ *
20
+ * @var string
21
+ */
22
+ protected $prefix;
23
+
24
+ /**
25
+ * Экзамеляр класса FactoryPages400_Request, необходим управляет http запросами
26
+ *
27
+ * @var FactoryPages400_Request
28
+ */
29
+ public $request;
30
+
31
+ public function __construct($plugin_path, $data)
32
+ {
33
+ $this->prefix = isset($data['prefix'])
34
+ ? $data['prefix']
35
+ : null;
36
+
37
+ if( empty($this->prefix) || !is_string($this->prefix) ) {
38
+ throw new Exception('Не передан один из обязательных атрибутов (prefix) или атрибует не соотвествует типу данных string.');
39
+ }
40
+
41
+ $this->request = new Wbcr_Factory400_Request();
42
+
43
+ if( !isset(self::$_opt_buffer[$this->prefix]) ) {
44
+ $cache_options = get_option($this->prefix . 'cache_options', array());
45
+
46
+ if( empty($cache_options) || !is_array($cache_options) ) {
47
+ $cache_options = array();
48
+ delete_option($this->prefix . 'cache_options');
49
+ }
50
+
51
+ self::$_opt_buffer[$this->prefix] = $cache_options;
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Получает опцию из кеша или из базы данные, если опция не кешируемая,
57
+ * то опция тянется только из базы данных. Не кешируемые опции это массивы,
58
+ * сериализованные массивы, строки больше 150 символов
59
+ *
60
+ * @param string $option_name
61
+ * @param bool $default
62
+ * @return mixed|void
63
+ */
64
+ public function getOption($option_name, $default = false)
65
+ {
66
+ if( $option_name == 'cache_options' ) {
67
+ return $default;
68
+ }
69
+
70
+ $get_cache_option = $this->getOptionFromCache($option_name);
71
+
72
+ if( !is_null($get_cache_option) ) {
73
+ return $get_cache_option === false
74
+ ? $default
75
+ : $get_cache_option;
76
+ }
77
+
78
+ $option_value = get_option($this->prefix . $option_name);
79
+
80
+ if( $this->isCacheable($option_value) ) {
81
+ $this->setCacheOption($option_name, $this->normalizeValue($option_value));
82
+ }
83
+
84
+ return $option_value === false
85
+ ? $default
86
+ : $this->normalizeValue($option_value);
87
+ }
88
+
89
+ /**
90
+ * Обновляет опцию в базе данных и в кеше, кеш обновляется только кешируемых опций.
91
+ * Не кешируемые опции это массивы, сериализованные массивы, строки больше 150 символов
92
+ *
93
+ * @param string $option_name
94
+ * @param string $value
95
+ * @return void
96
+ */
97
+ public function updateOption($option_name, $value)
98
+ {
99
+ if( $this->isCacheable($value) ) {
100
+ $this->setCacheOption($option_name, $this->normalizeValue($value));
101
+ } else {
102
+ if( isset(self::$_opt_buffer[$this->prefix][$option_name]) ) {
103
+ unset(self::$_opt_buffer[$this->prefix][$option_name]);
104
+
105
+ $this->updateOption('cache_options', self::$_opt_buffer[$this->prefix]);
106
+ }
107
+ }
108
+
109
+ update_option($this->prefix . $option_name, $value);
110
+ }
111
+
112
+ /**
113
+ * Пакетное обновление опций, также метод пакетно обновляет кеш в базе данных
114
+ * и в буфере опций, кеш обновляется только кешируемых опций. Не кешируемые опции это массивы,
115
+ * сериализованные массивы, строки больше 150 символов
116
+ *
117
+ * @param array $options
118
+ * @return bool
119
+ */
120
+ public function updateOptions($options)
121
+ {
122
+ if( empty($options) ) {
123
+ return false;
124
+ }
125
+
126
+ foreach((array)$options as $option_name => $option_value) {
127
+ $this->updateOption($option_name, $option_value);
128
+ }
129
+
130
+ $this->updateCacheOptions($options);
131
+
132
+ return true;
133
+ }
134
+
135
+ /**
136
+ * Удаляет опцию из базы данных, если опция есть в кеше,
137
+ * индивидуально удаляет опцию из кеша.
138
+ *
139
+ * @param string $option_name
140
+ * @return void
141
+ */
142
+ public function deleteOption($option_name)
143
+ {
144
+ if( isset(self::$_opt_buffer[$this->prefix][$option_name]) ) {
145
+ unset(self::$_opt_buffer[$this->prefix][$option_name]);
146
+
147
+ $this->updateOption('cache_options', self::$_opt_buffer[$this->prefix]);
148
+ }
149
+
150
+ delete_option($this->prefix . $option_name . '_is_active');
151
+ delete_option($this->prefix . $option_name);
152
+ }
153
+
154
+ /**
155
+ * Пакетное удаление опций, после удаления опции происходит очистка кеша и буфера опций
156
+ *
157
+ * @param array $options
158
+ * @return void
159
+ */
160
+ public function deleteOptions($options)
161
+ {
162
+ if( !empty($options) ) {
163
+ foreach((array)$options as $option_name) {
164
+ if( isset(self::$_opt_buffer[$this->prefix]) ) {
165
+ unset(self::$_opt_buffer[$this->prefix]);
166
+ }
167
+
168
+ delete_option($this->prefix . $option_name . '_is_active');
169
+ delete_option($this->prefix . $option_name);
170
+ }
171
+
172
+ $this->updateOption('cache_options', self::$_opt_buffer[$this->prefix]);
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Сбрасывает кеш опций, удаляет кеш из базы данных и буфер опций
178
+ *
179
+ * @return bool
180
+ */
181
+ public function flushOptionsCache()
182
+ {
183
+ if( isset(self::$_opt_buffer[$this->prefix]) ) {
184
+ unset(self::$_opt_buffer[$this->prefix]);
185
+ self::$_opt_buffer[$this->prefix] = array();
186
+ }
187
+
188
+ $this->deleteOption('cache_options');
189
+ }
190
+
191
+ /**
192
+ * Получает все опций текущего плагина
193
+ *
194
+ * @param bool $is_cacheable - только кешируемые опции, кешируемые опции это массивы,
195
+ * сериализованные массивы, строки больше 150 символов
196
+ * @return array
197
+ */
198
+ protected function getAllPluginOptions($is_cacheable = true)
199
+ {
200
+ global $wpdb;
201
+ $options = array();
202
+
203
+ $request = $wpdb->get_results($wpdb->prepare("
204
+ SELECT option_name, option_value
205
+ FROM {$wpdb->prefix}options
206
+ WHERE option_name
207
+ LIKE '%s'", $this->prefix . "%"));
208
+
209
+ if( !empty($request) ) {
210
+ foreach((array)$request as $option) {
211
+ if( $is_cacheable && !$this->isCacheable($option->option_value) ) {
212
+ continue;
213
+ }
214
+ $options[$option->option_name] = $this->normalizeValue($option->option_value);
215
+ }
216
+ }
217
+
218
+ return $options;
219
+ }
220
+
221
+
222
+ /**
223
+ * Записывает только одну опцию в кеш базы данных и в буфер
224
+ *
225
+ * @param string $option_name
226
+ * @param string $value
227
+ * @return void
228
+ * @throws Exception
229
+ */
230
+ protected function setCacheOption($option_name, $value)
231
+ {
232
+ $this->setBufferOption($option_name, $value);
233
+
234
+ if( !empty(self::$_opt_buffer[$this->prefix]) ) {
235
+ $this->updateOption('cache_options', self::$_opt_buffer[$this->prefix]);
236
+ }
237
+ }
238
+
239
+ /**
240
+ * Пакетное обновление опций в кеше и буфер опций,
241
+ * все записываемые опции приводятся к регламентированному типу данных
242
+ *
243
+ * @param array $options
244
+ * @return bool
245
+ * @throws Exception
246
+ */
247
+ protected function updateCacheOptions($options)
248
+ {
249
+ foreach((array)$options as $option_name => $value) {
250
+ $option_name = str_replace($this->prefix, '', $option_name);
251
+ $this->setBufferOption($option_name, $this->normalizeValue($value));
252
+ }
253
+
254
+ if( !empty(self::$_opt_buffer[$this->prefix]) ) {
255
+ $this->updateOption('cache_options', self::$_opt_buffer[$this->prefix]);
256
+ }
257
+
258
+ return false;
259
+ }
260
+
261
+ /**
262
+ * Получает опцию из кеша или буфера, если опция не найдена и буфер пуст,
263
+ * то заполняет буфер кеширумыми опциями, которые уже записаны в базу данных.
264
+ *
265
+ * @param string $option_name
266
+ * @return null
267
+ * @throws Exception
268
+ */
269
+ protected function getOptionFromCache($option_name)
270
+ {
271
+ if( empty(self::$_opt_buffer[$this->prefix]) ) {
272
+ $all_options = $this->getAllPluginOptions();
273
+
274
+ if( !empty($all_options) ) {
275
+ $this->updateCacheOptions($all_options);
276
+ }
277
+ }
278
+
279
+ $buffer_option = $this->getBufferOption($option_name);
280
+
281
+ if( !is_null($buffer_option) ) {
282
+ return $buffer_option;
283
+ }
284
+
285
+ return null;
286
+ }
287
+
288
+ /**
289
+ * Получает опцию из буфера опций
290
+ *
291
+ * @param string $option_name
292
+ * @return null|mixed
293
+ */
294
+ private function getBufferOption($option_name)
295
+ {
296
+ if( isset(self::$_opt_buffer[$this->prefix][$option_name]) ) {
297
+ return self::$_opt_buffer[$this->prefix][$option_name];
298
+ }
299
+
300
+ return null;
301
+ }
302
+
303
+ /**
304
+ * Записывает опции в буфер опций, если опция уже есть в буфере и их значения не совпадают,
305
+ * то новое значение перезаписывает старое
306
+ *
307
+ * @param string $option_name
308
+ * @param string $option_value
309
+ */
310
+ private function setBufferOption($option_name, $option_value)
311
+ {
312
+ if( !isset(self::$_opt_buffer[$this->prefix][$option_name]) ) {
313
+ self::$_opt_buffer[$this->prefix][$option_name] = $option_value;
314
+ } else {
315
+ if( self::$_opt_buffer[$this->prefix][$option_name] !== $option_value ) {
316
+ self::$_opt_buffer[$this->prefix][$option_name] = $option_value;
317
+ }
318
+ }
319
+ }
320
+
321
+ /**
322
+ * Возвращает название опции в пространстве имен плагина
323
+ *
324
+ * @param string $option_name
325
+ * @return null|string
326
+ */
327
+ public function getOptionName($option_name)
328
+ {
329
+ $option_name = trim(rtrim($option_name));
330
+ if( empty($option_name) || !is_string($option_name) ) {
331
+ return null;
332
+ }
333
+
334
+ return $this->prefix . $option_name;
335
+ }
336
+
337
+ /**
338
+ * Проверяет является ли опция кешируемой. Кешируемые опции это массивы,
339
+ * сериализованные массивы, строки больше 150 символов.
340
+ *
341
+ * @param string $data - переданое значение опции
342
+ * @return bool
343
+ */
344
+ public function isCacheable($data)
345
+ {
346
+ if( (is_string($data) && (is_serialized($data) || strlen($data) > 150)) || is_array($data) ) {
347
+ return false;
348
+ }
349
+
350
+ return true;
351
+ }
352
+
353
+ /**
354
+ * Приведение значений опций к строгому типу данных
355
+ *
356
+ * @param $string
357
+ * @return bool|int
358
+ */
359
+ public function normalizeValue($string)
360
+ {
361
+ if( is_numeric($string) ) {
362
+ $number = intval($string);
363
+
364
+ if( strlen($number) != strlen($string) ) {
365
+ throw new Exception('Error converting data type to a number.');
366
+ }
367
+
368
+ return $number;
369
+ } else if( $string === 'false' ) {
370
+ return false;
371
+ } else if( $string === 'true' ) {
372
+ return true;
373
+ }
374
+
375
+ return $string;
376
+ }
377
+ }
378
+ }
libs/factory/core/includes/functions.php CHANGED
@@ -1,276 +1,48 @@
1
  <?php
2
- /**
3
- * Factory Function Library
4
- *
5
- * ToDo: remove this file in future
6
- *
7
- * @author Paul Kashtanoff <paul@byonepress.com>
8
- * @copyright (c) 2013, OnePress Ltd
9
- *
10
- * @package factory-core
11
- * @since 1.0.0
12
- */
13
-
14
- /**
15
- * Returns a nonce based on a current wordpress blog options.
16
- *
17
- * @since 1.0.0
18
- * @return string
19
- */
20
- function factory_326_get_nonce() {
21
- $values = array('name', 'description', 'admin_email', 'url', 'language', 'version');
22
- $line = '';
23
-
24
- foreach($values as $value) $line .= get_bloginfo($value);
25
- return md5( $line );
26
- }
27
-
28
- /**
29
- * Prints a nonce based on a current wordpress blog options.
30
- *
31
- * @since 1.0.0
32
- * @return string
33
- */
34
- function factory_326_nonce() {
35
- echo factory_326_get_nonce();
36
- }
37
-
38
- // ------------------------------
39
- // String functions
40
- // ------------------------------
41
-
42
- /**
43
- * Checks if $haystack strats with $needle.
44
- *
45
- * @since 1.0.0
46
- * @param string $haystack
47
- * @param string $needle
48
- * @return bool
49
- */
50
- function factory_326_starts_with($haystack, $needle) {
51
- return !strncmp($haystack, $needle, strlen($needle));
52
- }
53
-
54
- /**
55
- * Checks if $haystack ends with $needle.
56
- *
57
- * @since 1.0.0
58
- * @param string $haystack
59
- * @param string $needle
60
- * @return bool
61
- */
62
- function factory_326_ends_with($haystack, $needle) {
63
- $length = strlen($needle);
64
- if ($length == 0) return true;
65
- return (substr($haystack, -$length) === $needle);
66
- }
67
-
68
- // ------------------------------
69
- // Json functions
70
- // ------------------------------
71
-
72
- function factory_326_json_error($error) {
73
- echo json_encode(array('error' => $error));
74
- exit;
75
- }
76
-
77
- function factory_326_json_success( $data = array() ) {
78
- $data['error'] = false;
79
- echo json_encode( $data );
80
- exit;
81
- }
82
-
83
- // ------------------------------
84
- // File functions
85
- // ------------------------------
86
-
87
- /**
88
- * Gets data about a given path.
89
- *
90
- * @since 1.0.0
91
- * @param type $path A path to get data.
92
- * @return string[]
93
- */
94
- function factory_326_pathinfo( $path ) {
95
- $data = pathinfo($path);
96
- $data['filename'] = factory_326_filename_without_ext($data['basename']);
97
- return $data;
98
- }
99
-
100
- /**
101
- * Gets a file name without its extention.
102
- *
103
- * @since 1.0.0
104
- * @param string $filename A file name to process.
105
- * @return string
106
- */
107
- function factory_326_filename_without_ext($filename){
108
- $pos = strripos($filename, '.');
109
- if($pos === false){
110
- return $filename;
111
- }else{
112
- return substr($filename, 0, $pos);
113
- }
114
- }
115
-
116
- /**
117
- * Gets a file extention.
118
- *
119
- * @since 1.0.0
120
- * @param string $filename A file name to get an extention.
121
- * @return string
122
- */
123
- function factory_326_filename_ext($filename){
124
- $result = explode('.', $filename);
125
- if ( empty($result) ) return null;
126
- return $result[count($result)-1];
127
- }
128
-
129
- function factory_326_get_human_filesize_by_path( $path ) {
130
- $bytes = filesize( $path );
131
- return factory_get_human_filesize( $bytes );
132
- }
133
-
134
- function factory_326_get_human_filesize( $bytes ) {
135
- if ($bytes >= 1073741824)
136
- {
137
- $bytes = number_format($bytes / 1073741824, 2) . ' GB';
138
- }
139
- elseif ($bytes >= 1048576)
140
- {
141
- $bytes = number_format($bytes / 1048576, 2) . ' MB';
142
- }
143
- elseif ($bytes >= 1024)
144
- {
145
- $bytes = number_format($bytes / 1024, 2) . ' KB';
146
- }
147
- elseif ($bytes > 1)
148
- {
149
- $bytes = $bytes . ' bytes';
150
- }
151
- elseif ($bytes == 1)
152
- {
153
- $bytes = $bytes . ' byte';
154
- }
155
- else
156
- {
157
- $bytes = '0 bytes';
158
- }
159
-
160
- return $bytes;
161
- }
162
-
163
- // ------------------------------
164
- // Date functions
165
- // ------------------------------
166
-
167
- /**
168
- * @since 1.0.0
169
- */
170
- function factory_326_get_days( $startDate, $endDate ) {
171
- return floor( abs( $endDate - $startDate ) / (60*60*24) ) + 1;
172
- }
173
-
174
- /**
175
- * @since 1.0.0
176
- */
177
- function factory_326_get_weeks( $startDate, $endDate ) {
178
- $days = factory_326_get_days( $startDate, $endDate );
179
-
180
- $startDay = date( "w", $startDate );
181
- $endDay = date( "w", $endDate );
182
-
183
- if ( $days < 7 ) {
184
- if ( $endDay < $startDay ) {
185
- return 2;
186
- } else {
187
- return 1;
188
- }
189
- } else {
190
- return floor( $days / 7 );
191
- }
192
- }
193
-
194
- /**
195
- * @since 1.0.0
196
- */
197
- function factory_326_get_months( $startDate, $endDate ) {
198
- return floor( abs( $endDate - $startDate ) / (60*60*24*30) );
199
- }
200
-
201
- /**
202
- * Checks if a user is an administrator.
203
- *
204
- * @since 1.5.0
205
- * @return type
206
- */
207
- function factory_326_is_administrator() {
208
- return current_user_can( 'manage_options' );
209
- }
210
-
211
- /**
212
- * Prints hard-coded formatted html error.
213
- *
214
- * @since 3.0.6
215
- * @param type $title a title of the error to print
216
- * @param type $message a message of the error to print
217
- * @return void
218
- */
219
- function factory_326_print_error( $title, $message ) {
220
- ?>
221
- <div class="factory-error" style="padding: 10px; border: 3px solid #b23e3a; background: #cf4944; color: #fff;">
222
- <strong><?php echo $title ?></strong><br />
223
- <p style="margin: 0px;"><?php echo $message ?></p>
224
- </div>
225
- <?php
226
- }
227
-
228
- /**
229
- * Prints a script that resized parent iframe.
230
- *
231
- * @since 3.0.6
232
- * @return void
233
- */
234
- function factory_326_iframe_resize_script( $wrapId ) {
235
- ?>
236
- <script>
237
- var $ = window.parent.jQuery;
238
- var $doc = $(window.document);
239
- var $parentDoc = $(window.parent.document);
240
-
241
- var $body = $doc.find("body");
242
- if ( $body.length === 1 ) {
243
-
244
- var heigth = $body.height() + 20;
245
- if ( heigth < 150 ) heigth = 150;
246
-
247
- var $iframe = $parentDoc.find("#<?php echo $wrapId ?> iframe");
248
- $iframe.height(heigth);
249
- }
250
- </script>
251
- <?php
252
- }
253
-
254
- /**
255
- * Sets a lazy redirect.
256
- *
257
- * @since 3.0.6
258
- * @return void
259
- */
260
- function factory_326_set_lazy_redirect( $url ) {
261
- update_option('factory_lazy_redirect', $url );
262
- }
263
-
264
- add_action('admin_init', 'factory_326_do_lazy_redirect');
265
- function factory_326_do_lazy_redirect() {
266
- $url = get_option('factory_lazy_redirect', null );
267
- if ( empty($url) ) return;
268
-
269
- delete_option('factory_lazy_redirect');
270
- wp_redirect($url);
271
- }
272
-
273
-
274
  /**
275
  * Fires functions attached to a deprecated filter hook.
276
  *
@@ -282,7 +54,7 @@ function factory_326_do_lazy_redirect() {
282
  *
283
  * @since 1.0.0
284
  *
285
- * @see factory_326_deprecated_hook()
286
  *
287
  * @param string $tag The name of the filter hook.
288
  * @param array $args Array of additional function arguments to be passed to apply_filters().
@@ -292,7 +64,7 @@ function factory_326_do_lazy_redirect() {
292
  *
293
  * @return mixed
294
  */
295
- function factory_326_apply_filters_deprecated($tag, $args, $version, $replacement = false, $message = null)
296
  {
297
  if( function_exists('apply_filters_deprecated') ) {
298
  return apply_filters_deprecated($tag, $args, $version, $replacement, $message);
@@ -300,11 +72,11 @@ function factory_326_do_lazy_redirect() {
300
  if( !has_filter($tag) ) {
301
  return $args[0];
302
  }
303
- factory_326_deprecated_hook($tag, $version, $replacement, $message);
304
-
305
  return apply_filters_ref_array($tag, $args);
306
  }
307
-
308
  /**
309
  * Fires functions attached to a deprecated action hook.
310
  *
@@ -326,24 +98,24 @@ function factory_326_do_lazy_redirect() {
326
  *
327
  * @return void
328
  */
329
- function factory_326_do_action_deprecated($tag, $args, $version, $replacement = false, $message = null)
330
  {
331
  if( function_exists('do_action_deprecated') ) {
332
  do_action_deprecated($tag, $args, $version, $replacement, $message);
333
-
334
  return;
335
  }
336
  if( !has_action($tag) ) {
337
  return;
338
  }
339
- factory_326_deprecated_hook($tag, $version, $replacement, $message);
340
  do_action_ref_array($tag, $args);
341
  }
342
-
343
  /**
344
  * Marks a deprecated action or filter hook as deprecated and throws a notice.
345
  *
346
- * Use the 'factory_326_deprecated_hook_run' action to get the backtrace describing where the
347
  * deprecated hook was called.
348
  *
349
  * Default behavior is to trigger a user error if WP_DEBUG is true.
@@ -361,7 +133,7 @@ function factory_326_do_lazy_redirect() {
361
  * @param string $replacement Optional. The hook that should have been used.
362
  * @param string $message Optional. A message regarding the change.
363
  */
364
- function factory_326_deprecated_hook($hook, $version, $replacement = null, $message = null)
365
  {
366
  /**
367
  * Fires when a deprecated hook is called.
@@ -374,6 +146,7 @@ function factory_326_do_lazy_redirect() {
374
  * @param string $message A message regarding the change.
375
  */
376
  do_action('deprecated_hook_run', $hook, $replacement, $version, $message);
 
377
  /**
378
  * Filter whether to trigger deprecated hook errors.
379
  *
1
  <?php
2
+ /**
3
+ * Factory Function Library
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
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
+ if( function_exists('wbcr_factory_400_set_lazy_redirect') ) {
18
+ /**
19
+ * Sets a lazy redirect.
20
+ *
21
+ * @since 3.0.6
22
+ * @return void
23
+ */
24
+ function wbcr_factory_400_set_lazy_redirect($url)
25
+ {
26
+ update_option('wbcr_factory_400_lazy_redirect', $url);
27
+ }
28
+ }
29
+
30
+ if( function_exists('wbcr_factory_400_do_lazy_redirect') ) {
31
+ function wbcr_factory_400_do_lazy_redirect()
32
+ {
33
+ $url = get_option('wbcr_factory_400_lazy_redirect', null);
34
+
35
+ if( empty($url) ) {
36
+ return;
37
+ }
38
+
39
+ delete_option('wbcr_factory_400_lazy_redirect');
40
+ wp_redirect($url);
41
+ }
42
+
43
+ add_action('admin_init', 'wbcr_factory_400_do_lazy_redirect');
44
+ }
45
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  /**
47
  * Fires functions attached to a deprecated filter hook.
48
  *
54
  *
55
  * @since 1.0.0
56
  *
57
+ * @see wbcr_factory_400_deprecated_hook()
58
  *
59
  * @param string $tag The name of the filter hook.
60
  * @param array $args Array of additional function arguments to be passed to apply_filters().
64
  *
65
  * @return mixed
66
  */
67
+ function wbcr_factory_400_apply_filters_deprecated($tag, $args, $version, $replacement = false, $message = null)
68
  {
69
  if( function_exists('apply_filters_deprecated') ) {
70
  return apply_filters_deprecated($tag, $args, $version, $replacement, $message);
72
  if( !has_filter($tag) ) {
73
  return $args[0];
74
  }
75
+ wbcr_factory_400_deprecated_hook($tag, $version, $replacement, $message);
76
+
77
  return apply_filters_ref_array($tag, $args);
78
  }
79
+
80
  /**
81
  * Fires functions attached to a deprecated action hook.
82
  *
98
  *
99
  * @return void
100
  */
101
+ function wbcr_factory_400_do_action_deprecated($tag, $args, $version, $replacement = false, $message = null)
102
  {
103
  if( function_exists('do_action_deprecated') ) {
104
  do_action_deprecated($tag, $args, $version, $replacement, $message);
105
+
106
  return;
107
  }
108
  if( !has_action($tag) ) {
109
  return;
110
  }
111
+ wbcr_factory_400_deprecated_hook($tag, $version, $replacement, $message);
112
  do_action_ref_array($tag, $args);
113
  }
114
+
115
  /**
116
  * Marks a deprecated action or filter hook as deprecated and throws a notice.
117
  *
118
+ * Use the 'wbcr_factory_400_deprecated_hook_run' action to get the backtrace describing where the
119
  * deprecated hook was called.
120
  *
121
  * Default behavior is to trigger a user error if WP_DEBUG is true.
133
  * @param string $replacement Optional. The hook that should have been used.
134
  * @param string $message Optional. A message regarding the change.
135
  */
136
+ function wbcr_factory_400_deprecated_hook($hook, $version, $replacement = null, $message = null)
137
  {
138
  /**
139
  * Fires when a deprecated hook is called.
146
  * @param string $message A message regarding the change.
147
  */
148
  do_action('deprecated_hook_run', $hook, $replacement, $version, $message);
149
+
150
  /**
151
  * Filter whether to trigger deprecated hook errors.
152
  *
libs/factory/core/includes/plugin.class.php CHANGED
@@ -2,729 +2,828 @@
2
  /**
3
  * The file contains the class to register a plugin in the Factory.
4
  *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
  *
8
  * @package factory-core
9
  * @since 1.0.0
10
  */
11
 
12
- if( !class_exists('Factory_Plugins') ) {
13
-
14
- /**
15
- * A collection of created plugins.
16
- *
17
- * This class has the same name across all possible Factorries.
18
- *
19
- * @since 1.0.0
20
- */
21
- class Factory_Plugins {
22
-
23
- protected static $plugins = array();
24
 
25
  /**
26
- * Registers a plugin
27
  *
28
  * @since 1.0.0
 
29
  */
30
- public static function register($plugin)
31
- {
32
- self::$plugins[$plugin->pluginName] = $plugin;
33
- }
34
 
35
  /**
36
- * Get a plugin by its name.
37
  *
38
- * @since 1.0.0
39
  */
40
- public static function get($pluginName)
41
- {
42
- if( isset(self::$plugins[$pluginName]) ) {
43
- return self::$plugins[$pluginName];
44
- }
45
 
46
- return null;
47
- }
48
- }
49
- }
50
-
51
- /**
52
- * Factory Plugin
53
- *
54
- * @since 1.0.0
55
- */
56
- class Factory326_Plugin {
57
-
58
- /**
59
- * Is a current page one of the admin pages?
60
- *
61
- * @since 1.0.0
62
- * @var bool
63
- */
64
- public $isAdmin;
65
-
66
- /**
67
- * A class name of an activator to activate the plugin.
68
- *
69
- * @var string
70
- */
71
- protected $activatorClass = array();
72
-
73
- /**
74
- * Creates an instance of Factory plugin.
75
- *
76
- * @param $pluginPath A full path to the main plugin file.
77
- * @param $data A set of plugin data.
78
- * @since 1.0.0
79
- */
80
- public function __construct($pluginPath, $data)
81
- {
82
- $this->options = $data;
83
-
84
- // saves plugin basic paramaters
85
- $this->mainFile = $pluginPath;
86
- $this->pluginRoot = dirname($pluginPath);
87
- $this->relativePath = plugin_basename($pluginPath);
88
- $this->pluginUrl = plugins_url(null, $pluginPath);
89
-
90
- // child plugins, these plugins depend on activation/deactivation of the core plugin
91
- $this->childPlugins = isset($data['childPlugins'])
92
- ? $data['childPlugins']
93
- : array();
94
-
95
- // some extra params
96
- $this->pluginName = isset($data['name'])
97
- ? $data['name']
98
- : null;
99
- $this->pluginTitle = isset($data['title'])
100
- ? $data['title']
101
- : null;
102
- $this->version = isset($data['version'])
103
- ? $data['version']
104
- : null;
105
- $this->build = isset($data['assembly'])
106
- ? $data['assembly']
107
- : null;
108
- $this->tracker = isset ($data['tracker'])
109
- ? $data['tracker']
110
- : null;
111
- $this->host = isset($_SERVER['HTTP_HOST'])
112
- ? $_SERVER['HTTP_HOST']
113
- : null;
114
-
115
- // used only in the module 'updates'
116
- $this->pluginSlug = !empty($this->pluginName)
117
- ? $this->pluginName
118
- : basename($pluginPath);
119
-
120
- // just caching this varibale
121
- $this->isAdmin = is_admin();
122
-
123
- // registers the plugin in the global collection
124
- Factory_Plugins::register($this);
125
-
126
- // init actions
127
- $this->setupActions();
128
-
129
- // register activation hooks
130
- if( is_admin() ) {
131
- register_activation_hook($this->mainFile, array($this, 'forceActivationHook'));
132
- register_deactivation_hook($this->mainFile, array($this, 'deactivationHook'));
133
- }
134
- }
135
-
136
- /**
137
- * Loads modules required for a plugin.
138
- *
139
- * @since 3.2.0
140
- * @param mixed[] $modules
141
- * @return void
142
- */
143
- public function load($modules = array())
144
- {
145
- foreach($modules as $module) {
146
- $this->loadModule($module);
147
- }
148
 
149
- do_action('factory_core_modules_loaded-' . $this->pluginName);
150
- }
 
 
151
 
152
- /**
153
- * Loads add-ons for the plugin.
154
- */
155
- public function loadAddons($addons)
156
- {
157
- if( empty($addons) ) {
158
- return;
159
- }
160
 
161
- foreach($addons as $addonName => $addonPath) {
162
- $constName = strtoupper('LOADING_' . $addonName . '_AS_ADDON');
163
- if( !defined($constName) ) {
164
- define($constName, true);
165
- }
166
- require_once($addonPath);
167
- }
168
- }
169
 
170
- /**
171
- * Loads a specified module.
172
- *
173
- * @since 3.2.0
174
- * @param string $modulePath
175
- * @param string $moduleVersion
176
- * @return void
177
- */
178
- public function loadModule($module)
179
- {
180
- $scope = isset($module[2])
181
- ? $module[2]
182
- : 'all';
183
-
184
- if( $scope == 'all' || (is_admin() && $scope == 'admin') || (!is_admin() && $scope == 'public') ) {
185
-
186
- require $this->pluginRoot . '/' . $module[0] . '/boot.php';
187
- do_action($module[1] . '_plugin_created', $this);
188
- }
189
- }
190
 
191
- /**
192
- * Registers a class to activate the plugin.
193
- *
194
- * @since 1.0.0
195
- * @param string A class name of the plugin activator.
196
- * @return void
197
- */
198
- public function registerActivation($className)
199
- {
200
- $this->activatorClass[] = $className;
201
- }
202
 
203
- /**
204
- * Setups actions related with the Factory Plugin.
205
- *
206
- * @since 1.0.0
207
- */
208
- private function setupActions()
209
- {
210
- add_action('init', array($this, 'checkPluginVersioninDatabase'));
211
 
212
- if( $this->isAdmin ) {
213
- add_action('admin_init', array($this, 'customizePluginRow'), 20);
214
- add_action('factory_core_modules_loaded-' . $this->pluginName, array($this, 'modulesLoaded'));
215
- }
216
- }
217
 
218
- /**
219
- * Checks the plugin version in database. If it's not the same as the currernt,
220
- * it means that the plugin was updated and we need to execute the update hook.
221
- *
222
- * Calls on the hook "plugins_loaded".
223
- *
224
- * @since 1.0.0
225
- * @return void
226
- */
227
- public function checkPluginVersioninDatabase()
228
- {
229
 
230
- // checks whether the plugin needs to run updates.
231
- if( $this->isAdmin ) {
232
- $version = $this->getPluginVersionFromDatabase();
 
233
 
234
- if( $version != $this->build . '-' . $this->version ) {
235
- $this->activationOrUpdateHook(false);
236
- }
237
- }
238
- }
 
239
 
240
- /**
241
- * Returns the plugin version from database.
242
- *
243
- * @since 1.0.0
244
- * @return string|null The plugin version registered in the database.
245
- */
246
- public function getPluginVersionFromDatabase()
247
- {
248
- $versions = get_option('factory_plugin_versions', array());
249
- $version = isset ($versions[$this->pluginName])
250
- ? $versions[$this->pluginName]
251
- : null;
252
-
253
- // for combability with previous versions
254
- // @todo: remove after several updates
255
- if( !$version ) {
256
- return get_option('fy_plugin_version_' . $this->pluginName, null);
257
- }
258
-
259
- return $version;
260
- }
261
 
262
- /**
263
- * Registers in the database a new version of the plugin.
264
- *
265
- * @since 1.0.0
266
- * @return void
267
- */
268
- public function updatePluginVersionInDatabase()
269
- {
270
- $versions = get_option('factory_plugin_versions', array());
271
- $versions[$this->pluginName] = $this->build . '-' . $this->version;
272
- update_option('factory_plugin_versions', $versions);
273
- }
274
 
275
- /**
276
- * Customize the plugin row (on the page plugins.php).
277
- *
278
- * Calls on the hook "admin_init".
279
- *
280
- * @since 1.0.0
281
- * @return void
282
- */
283
- public function customizePluginRow()
284
- {
285
- remove_action("after_plugin_row_" . $this->relativePath, 'wp_plugin_update_row');
286
- add_action("after_plugin_row_" . $this->relativePath, array($this, 'showCustomPluginRow'), 10, 2);
287
- }
288
 
289
- public function activate()
290
- {
291
- $this->forceActivationHook();
292
- }
 
 
 
 
 
 
 
 
 
 
 
 
293
 
294
- public function deactivate()
295
- {
296
- $this->deactivationHook();
297
- }
298
 
299
- /**
300
- * Executes an activation hook for this plugin immediately.
301
- *
302
- * @since 1.0.0
303
- * @return void
304
- */
305
- public function forceActivationHook()
306
- {
307
- $this->activationOrUpdateHook(true);
308
-
309
- // activates the child plugins
310
- if( !empty($this->childPlugins) ) {
311
- foreach($this->childPlugins as $childPluginName) {
312
-
313
- $childPlugin = Factory_Plugins::get($childPluginName);
314
- if( empty($childPlugin) ) {
315
- die('The child plugin "' . $childPluginName . '" not found.');
316
  }
317
-
318
- $childPlugin->forceActivationHook();
319
  }
320
- }
321
- }
322
-
323
- /**
324
- * Executes an activation hook or an update hook.
325
- *
326
- * @param bool $forceActivation If true, then executes an activation hook.
327
- * @since 1.0.0
328
- * @return void
329
- */
330
- public function activationOrUpdateHook($forceActivation = false)
331
- {
332
 
333
- $dbVersion = $this->getPluginVersionFromDatabase();
334
- do_action('factory_plugin_activation_or_update_' . $this->pluginName, $forceActivation, $dbVersion, $this);
335
 
336
- // there are not any previous version of the plugin in the past
337
- if( !$dbVersion ) {
338
- $this->activationHook();
339
-
340
- $this->updatePluginVersionInDatabase();
341
 
342
- return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  }
344
 
345
- $parts = explode('-', $dbVersion);
346
- $prevousBuild = $parts[0];
347
- $prevousVersion = $parts[1];
348
-
349
- // if another build was used previously
350
- if( $prevousBuild != $this->build ) {
351
- $this->migrationHook($prevousBuild, $this->build);
352
- $this->activationHook();
353
-
354
- $this->updatePluginVersionInDatabase();
355
 
356
- return;
 
 
 
 
 
357
  }
358
 
359
- // if another less version was used previously
360
- if( version_compare($prevousVersion, $this->version, '<') ) {
361
- $this->updateHook($prevousVersion, $this->version);
 
 
 
362
  }
363
 
364
- // standart plugin activation
365
- if( $forceActivation ) {
366
- $this->activationHook();
 
 
 
367
  }
368
 
369
- // else nothing to do
370
- $this->updatePluginVersionInDatabase();
371
-
372
- return;
373
- }
374
-
375
- /**
376
- * It's invoked on plugin activation. Don't excite it directly.
377
- *
378
- * @since 1.0.0
379
- * @return void
380
- */
381
- public function activationHook()
382
- {
383
-
384
- $cancelled = apply_filters('factory_cancel_plugin_activation_' . $this->pluginName, false);
385
- if( $cancelled ) {
386
- return;
387
  }
388
 
389
- if( !empty($this->activatorClass) ) {
390
- foreach($this->activatorClass as $activatorClass) {
391
- $activator = new $activatorClass($this);
392
- $activator->activate();
393
- }
 
394
  }
395
 
396
- do_action('factory_326_plugin_activation', $this);
397
- do_action('factory_plugin_activation_' . $this->pluginName, $this);
398
-
399
- // just time to know when the plugin was activated the first time
400
- $activated = get_option('factory_plugin_activated_' . $this->pluginName, 0);
401
- if( !$activated ) {
402
- update_option('factory_plugin_activated_' . $this->pluginName, time());
403
  }
404
- }
405
 
406
- /**
407
- * It's invoked on plugin deactionvation. Don't excite it directly.
408
- *
409
- * @since 1.0.0
410
- * @return void
411
- */
412
- public function deactivationHook()
413
- {
414
-
415
- $cancelled = apply_filters('factory_cancel_plugin_deactivation_' . $this->pluginName, false);
416
- if( $cancelled ) {
417
- return;
418
  }
419
 
420
- do_action('factory_326_plugin_deactivation', $this);
421
- do_action('factory_plugin_deactivation_' . $this->pluginName, $this);
422
-
423
- if( !empty($this->activatorClass) ) {
424
- foreach($this->activatorClass as $activatorClass) {
425
- $activator = new $activatorClass($this);
426
- $activator->deactivate();
427
- }
428
- }
429
 
430
- // deactivates the child plugins
431
- if( !empty($this->childPlugins) ) {
432
- foreach($this->childPlugins as $childPluginName) {
433
 
434
- $childPlugin = Factory_Plugins::get($childPluginName);
435
- if( empty($childPlugin) ) {
436
- die('The child plugin "' . $childPluginName . '" not found.');
437
- }
438
 
439
- $childPlugin->deactivationHook();
440
- }
441
  }
442
- }
443
 
444
- /**
445
- * Finds migration items and install ones.
446
- *
447
- * @since 1.0.0
448
- * @return void
449
- */
450
- public function migrationHook($previosBuild, $currentBuild)
451
- {
452
-
453
- $migrationFile = $this->options['updates'] . $previosBuild . '-' . $currentBuild . '.php';
454
- if( !file_exists($migrationFile) ) {
455
- return;
456
  }
457
 
458
- $classes = $this->getClasses($migrationFile);
459
- if( count($classes) == 0 ) {
460
- return;
 
 
 
461
  }
462
 
463
- include_once($migrationFile);
464
- $migrationClass = $classes[0]['name'];
465
 
466
- $migrationItem = new $migrationClass($this->plugin);
467
- $migrationItem->install();
468
- }
469
 
470
- /**
471
- * Finds upate items and install the ones.
472
- *
473
- * @since 1.0.0
474
- * @return void
475
- */
476
- public function updateHook($old, $new)
477
- {
478
 
479
- // converts versions like 0.0.0 to 000000
480
- $oldNumber = $this->getVersionNumber($old);
481
- $newNumber = $this->getVersionNumber($new);
482
 
483
- $updateFiles = $this->options['updates'];
484
- $files = $this->findFiles($updateFiles);
485
 
486
- if( empty($files) ) {
487
- return;
 
 
488
  }
489
 
490
- // finds updates that has intermediate version
491
- foreach($files as $item) {
492
- if( !preg_match('/^\d+$/', $item['name']) ) {
493
- continue;
 
 
 
 
 
 
 
494
  }
 
 
 
495
 
496
- $itemNumber = intval($item['name']);
497
- if( $itemNumber > $oldNumber && $itemNumber <= $newNumber ) {
 
 
 
 
 
 
 
 
 
 
498
 
499
- $classes = $this->getClasses($item['path']);
500
- if( count($classes) == 0 ) {
501
- return;
502
- }
503
 
504
- foreach($classes as $path => $classData) {
505
- include_once($path);
506
- $updateClass = $classData['name'];
507
 
508
- $update = new $updateClass($this);
509
- $update->install();
510
  }
511
  }
512
  }
513
-
514
- // just time to know when the plugin was activated the first time
515
- $activated = get_option('factory_plugin_activated_' . $this->pluginName, 0);
516
- if( !$activated ) {
517
- update_option('factory_plugin_activated_' . $this->pluginName, time());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
518
  }
519
- }
520
-
521
- /**
522
- * Converts string representation of the version to the numeric.
523
- *
524
- * @since 1.0.0
525
- * @param string $version A string version to convert.
526
- * @return integer
527
- */
528
- protected function getVersionNumber($version)
529
- {
530
-
531
- preg_match('/(\d+)\.(\d+)\.(\d+)/', $version, $matches);
532
- if( count($matches) == 0 ) {
533
- return false;
534
- }
535
-
536
- $number = '';
537
- $number .= (strlen($matches[1]) == 1)
538
- ? '0' . $matches[1]
539
- : $matches[1];
540
- $number .= (strlen($matches[2]) == 1)
541
- ? '0' . $matches[2]
542
- : $matches[2];
543
- $number .= (strlen($matches[3]) == 1)
544
- ? '0' . $matches[3]
545
- : $matches[3];
546
-
547
- return intval($number);
548
- }
549
-
550
- /**
551
- * Forces modules.
552
- *
553
- * @since 1.0.0
554
- * @return void
555
- */
556
- public function modulesLoaded()
557
- {
558
- // factory_core_000_modules_loaded( $this );
559
- }
560
-
561
- /**
562
- * Shows admin notices for a given plugin.
563
- *
564
- * @since 1.0.0
565
- * @return void
566
- */
567
- public function showAdminNotices()
568
- {
569
- factory_core_000_show_admin_notices($this);
570
- }
571
-
572
- /**
573
- * Hook action.
574
- *
575
- * @since 1.0.0
576
- * @return void
577
- */
578
- public function hook()
579
- {
580
- factory_core_000_hook($this);
581
- }
582
-
583
- // ----------------------------------------------------------------------
584
- // Plugin row on plugins.php page
585
- // ----------------------------------------------------------------------
586
-
587
- public function showCustomPluginRow($file, $plugin_data)
588
- {
589
- if( !is_network_admin() && is_multisite() ) {
590
- return;
591
  }
592
-
593
- $messages = apply_filters('factory_plugin_row_' . $this->pluginName, array(), $file, $plugin_data);
594
-
595
- // if nothign to show then, use default handle
596
- /*if( count($messages) == 0 ) {
597
- wp_plugin_update_row($file, $plugin_data);
598
-
599
- return;
600
- }*/
601
-
602
- if( empty($messages) ) {
603
- return;
 
 
 
 
 
604
  }
 
 
 
 
 
 
 
 
 
 
 
 
605
 
606
- $wp_list_table = _get_list_table('WP_Plugins_List_Table');
 
 
607
 
608
- foreach($messages as $message) {
609
- echo '<tr class="plugin-update-tr active">';
610
- echo '<td colspan="' . $wp_list_table->get_column_count() . '" class="plugin-update colspanchange">';
611
- echo '<div class="update-message notice inline notice-error notice-alt">';
612
- echo '<p>' . $message . '</p>';
613
- echo '</div>';
614
- echo '</td></tr>';
615
  }
616
- }
617
-
618
- // ----------------------------------------------------------------------
619
- // Finding files
620
- // ----------------------------------------------------------------------
621
-
622
- /**
623
- * Returns a list of files at a given path.
624
- * @param string $path path for search
625
- */
626
- private function findFiles($path)
627
- {
628
- return $this->findFileOrFolders($path, true);
629
- }
630
-
631
- /**
632
- * Returns a list of folders at a given path.
633
- * @param string $path path for search
634
- */
635
- private function findFolders($path)
636
- {
637
- return $this->findFileOrFolders($path, false);
638
- }
639
 
640
- /**
641
- * Returns a list of files or folders at a given path.
642
- * @param string $path path for search
643
- * @param bool $files files or folders?
644
- */
645
- private function findFileOrFolders($path, $areFiles = true)
646
- {
647
- if( !is_dir($path) ) {
648
- return array();
649
  }
650
-
651
- $entries = scandir($path);
652
- if( empty($entries) ) {
653
- return array();
 
 
 
 
 
 
 
 
654
  }
655
-
656
- $files = array();
657
- foreach($entries as $entryName) {
658
- if( $entryName == '.' || $entryName == '..' ) {
659
- continue;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
660
  }
661
-
662
- $filename = $path . '/' . $entryName;
663
- if( ($areFiles && is_file($filename)) || (!$areFiles && is_dir($filename)) ) {
664
- $files[] = array(
665
- 'path' => str_replace("\\", "/", $filename),
666
- 'name' => $areFiles
667
- ? str_replace('.php', '', $entryName)
668
- : $entryName
669
- );
 
 
 
 
 
 
 
 
 
670
  }
 
 
 
 
 
 
 
 
 
 
671
  }
 
 
 
 
 
 
 
 
 
 
672
 
673
- return $files;
674
- }
675
-
676
- /**
677
- * Gets php classes defined in a specified file.
678
- * @param type $path
679
- */
680
- private function getClasses($path)
681
- {
682
-
683
- $phpCode = file_get_contents($path);
684
-
685
- $classes = array();
686
- $tokens = token_get_all($phpCode);
687
-
688
- $count = count($tokens);
689
- for($i = 2; $i < $count; $i++) {
690
- if( is_array($tokens) && $tokens[$i - 2][0] == T_CLASS && $tokens[$i - 1][0] == T_WHITESPACE && $tokens[$i][0] == T_STRING ) {
691
-
692
- $extends = null;
693
- if( $tokens[$i + 2][0] == T_EXTENDS && $tokens[$i + 4][0] == T_STRING ) {
694
- $extends = $tokens[$i + 4][1];
695
  }
696
-
697
- $class_name = $tokens[$i][1];
698
- $classes[$path] = array(
699
- 'name' => $class_name,
700
- 'extends' => $extends
701
- );
 
 
 
 
702
  }
703
  }
704
-
705
  /**
706
- * result example:
707
  *
708
- * $classes['/plugin/items/filename.php'] = array(
709
- * 'name' => 'PluginNameItem',
710
- * 'extendes' => 'PluginNameItemBase'
711
- * )
712
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
713
 
714
- return $classes;
715
- }
716
-
717
- // ----------------------------------------------------------------------
718
- // Public methods
719
- // ----------------------------------------------------------------------
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
720
 
721
- public function newScriptList()
722
- {
723
- return new Factory326_ScriptList($this);
724
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
725
 
726
- public function newStyleList()
727
- {
728
- return new Factory326_StyleList($this);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
729
  }
730
- }
2
  /**
3
  * The file contains the class to register a plugin in the Factory.
4
  *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
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
+ if( !class_exists('Wbcr_Factory400_Plugin') ) {
18
+
19
+ abstract class Wbcr_Factory400_Plugin extends Wbcr_Factory400_Base {
 
 
 
 
20
 
21
  /**
22
+ * Is a current page one of the admin pages?
23
  *
24
  * @since 1.0.0
25
+ * @var bool
26
  */
27
+ public $is_admin;
 
 
 
28
 
29
  /**
30
+ * The Bootstrap Manager class.n.
31
  *
32
+ * @var Wbcr_FactoryBootstrap400_Manager
33
  */
34
+ public $bootstrap;
 
 
 
 
35
 
36
+ /**
37
+ * The Bootstrap Manager class.n.
38
+ *
39
+ * @var Wbcr_FactoryForms400_Manager
40
+ */
41
+ public $forms;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
+ /**
44
+ * @var string
45
+ */
46
+ protected $plugin_title;
47
 
48
+ /**
49
+ * @var string
50
+ */
51
+ protected $plugin_name;
 
 
 
 
52
 
53
+ /**
54
+ * @var string
55
+ */
56
+ protected $plugin_version;
 
 
 
 
57
 
58
+ /**
59
+ * @var string
60
+ */
61
+ protected $plugin_build;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
+ /**
64
+ * @var string
65
+ */
66
+ protected $plugin_assembly;
 
 
 
 
 
 
 
67
 
68
+ /**
69
+ * @var string
70
+ */
71
+ protected $main_file;
 
 
 
 
72
 
73
+ /**
74
+ * @var string
75
+ */
76
+ protected $plugin_root;
 
77
 
78
+ /**
79
+ * @var string
80
+ */
81
+ protected $relative_path;
 
 
 
 
 
 
 
82
 
83
+ /**
84
+ * @var string
85
+ */
86
+ protected $plugin_url;
87
 
88
+ /**
89
+ * A class name of an activator to activate the plugin.
90
+ *
91
+ * @var string
92
+ */
93
+ protected $activator_class = array();
94
 
95
+ /**
96
+ * @var string
97
+ */
98
+ protected $updates;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
 
100
+ /**
101
+ * @var Wbcr_Factory400_Plugin
102
+ */
103
+ private static $app;
 
 
 
 
 
 
 
 
104
 
105
+ /**
106
+ * @var array[] Wbcr_Factory400_Plugin
107
+ */
108
+ private $plugin_addons;
 
 
 
 
 
 
 
 
 
109
 
110
+ /**
111
+ * @var array
112
+ */
113
+ private $plugin_data;
114
+
115
+ /**
116
+ * Creates an instance of Factory plugin.
117
+ *
118
+ * @param string $plugin_path A full path to the main plugin file.
119
+ * @param array $data A set of plugin data.
120
+ * @since 1.0.0
121
+ * @throws Exception
122
+ */
123
+ public function __construct($plugin_path, $data)
124
+ {
125
+ $this->plugin_data = $data;
126
 
127
+ parent::__construct($plugin_path, $data);
 
 
 
128
 
129
+ foreach((array)$data as $option_name => $option_value) {
130
+ if( !isset($this->$option_name) ) {
131
+ $this->$option_name = $option_value;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  }
 
 
133
  }
 
 
 
 
 
 
 
 
 
 
 
 
134
 
135
+ self::$app = $this;
 
136
 
137
+ $this->is_admin = is_admin();
138
+
139
+ if( empty($this->prefix) || empty($this->plugin_title) || empty($this->plugin_version) || empty($this->plugin_build) ) {
140
+ throw new Exception('One of the required attributes has not been passed (prefix,plugin_title,plugin_name,plugin_version,plugin_build).');
141
+ }
142
 
143
+ // saves plugin basic paramaters
144
+ $this->main_file = $plugin_path;
145
+ $this->plugin_root = dirname($plugin_path);
146
+ $this->relative_path = plugin_basename($plugin_path);
147
+ $this->plugin_url = plugins_url(null, $plugin_path);
148
+
149
+ // used only in the module 'updates'
150
+ $this->plugin_slug = !empty($this->plugin_name)
151
+ ? $this->plugin_name
152
+ : basename($plugin_path);
153
+
154
+ // init actions
155
+ $this->setupActions();
156
+
157
+ // register activation hooks
158
+ if( is_admin() ) {
159
+ register_activation_hook($this->main_file, array($this, 'forceActivationHook'));
160
+ register_deactivation_hook($this->main_file, array($this, 'deactivationHook'));
161
+ }
162
  }
163
 
 
 
 
 
 
 
 
 
 
 
164
 
165
+ /**
166
+ * @return WHM_Plugin
167
+ */
168
+ public static function app()
169
+ {
170
+ return self::$app;
171
  }
172
 
173
+ /**
174
+ * @return string
175
+ */
176
+ public function getPluginTitle()
177
+ {
178
+ return $this->plugin_title;
179
  }
180
 
181
+ /**
182
+ * @return string
183
+ */
184
+ public function getPrefix()
185
+ {
186
+ return $this->prefix;
187
  }
188
 
189
+ /**
190
+ * @return string
191
+ */
192
+ public function getPluginName()
193
+ {
194
+ return $this->plugin_name;
 
 
 
 
 
 
 
 
 
 
 
 
195
  }
196
 
197
+ /**
198
+ * @return string
199
+ */
200
+ public function getPluginVersion()
201
+ {
202
+ return $this->plugin_version;
203
  }
204
 
205
+ /**
206
+ * @return string
207
+ */
208
+ public function getPluginBuild()
209
+ {
210
+ return $this->plugin_build;
 
211
  }
 
212
 
213
+ /**
214
+ * @return string
215
+ */
216
+ public function getPluginAssembly()
217
+ {
218
+ return $this->plugin_assembly;
 
 
 
 
 
 
219
  }
220
 
221
+ /**
222
+ * @return stdClass
223
+ */
224
+ public function getPluginPathInfo()
225
+ {
 
 
 
 
226
 
227
+ $object = new stdClass;
 
 
228
 
229
+ $object->main_file = $this->main_file;
230
+ $object->plugin_root = $this->plugin_root;
231
+ $object->relative_path = $this->relative_path;
232
+ $object->plugin_url = $this->plugin_url;
233
 
234
+ return $object;
 
235
  }
 
236
 
237
+ /**
238
+ * @param Wbcr_FactoryBootstrap400_Manager $bootstrap
239
+ */
240
+ public function setBootstap(Wbcr_FactoryBootstrap400_Manager $bootstrap)
241
+ {
242
+ $this->bootstrap = $bootstrap;
 
 
 
 
 
 
243
  }
244
 
245
+ /**
246
+ * @param Wbcr_FactoryForms400_Manager $forms
247
+ */
248
+ public function setForms(Wbcr_FactoryForms400_Manager $forms)
249
+ {
250
+ $this->forms = $forms;
251
  }
252
 
253
+ //protected abstract function setTextDomain();
 
254
 
255
+ //protected abstract function setModules();
 
 
256
 
257
+ /**
258
+ * @param string $class_name
259
+ * @param string $path
260
+ */
261
+ public function registerPage($class_name, $file_path)
262
+ {
 
 
263
 
264
+ if( !file_exists($file_path) ) {
265
+ throw new Exception('The page file was not found by the path {' . $file_path . '} you set.');
266
+ }
267
 
268
+ require_once($file_path);
 
269
 
270
+ if( !class_exists($class_name) ) {
271
+ throw new Exception('A class with this name {' . $class_name . '} does not exist.');
272
+ }
273
+ Wbcr_FactoryPages400::register($this, $class_name);
274
  }
275
 
276
+ /**
277
+ * Loads modules required for a plugin.
278
+ *
279
+ * @since 3.2.0
280
+ * @param mixed[] $modules
281
+ * @return void
282
+ */
283
+ protected function load($modules = array())
284
+ {
285
+ foreach($modules as $module) {
286
+ $this->loadModule($module);
287
  }
288
+
289
+ do_action('wbcr_factory_400_core_modules_loaded-' . $this->plugin_name);
290
+ }
291
 
292
+ /**
293
+ * Loads add-ons for the plugin.
294
+ */
295
+ protected function loadAddons($addons)
296
+ {
297
+ if( empty($addons) ) {
298
+ return;
299
+ }
300
+
301
+ foreach($addons as $addon_name => $addon_path) {
302
+ if( !isset($this->plugin_addons[$addon_name]) ) {
303
+ $const_name = strtoupper('LOADING_' . $addon_name . '_AS_ADDON');
304
 
305
+ if( !defined($const_name) ) {
306
+ define($const_name, true);
307
+ }
308
+ require_once($addon_path[1]);
309
 
310
+ $plugin_data = $this->plugin_data;
311
+ $plugin_data['as_addon'] = true;
312
+ $plugin_data['plugin_parent'] = $this;
313
 
314
+ $this->plugin_addons[$addon_name] = new $addon_path[0]($this->main_file, $plugin_data);
 
315
  }
316
  }
317
  }
318
+
319
+ /**
320
+ * Loads a specified module.
321
+ *
322
+ * @since 3.2.0
323
+ * @param string $modulePath
324
+ * @param string $moduleVersion
325
+ * @return void
326
+ */
327
+ protected function loadModule($module)
328
+ {
329
+ $scope = isset($module[2])
330
+ ? $module[2]
331
+ : 'all';
332
+
333
+ if( $scope == 'all' || (is_admin() && $scope == 'admin') || (!is_admin() && $scope == 'public') ) {
334
+
335
+ require $this->plugin_root . '/' . $module[0] . '/boot.php';
336
+ do_action('wbcr_' . $module[1] . '_plugin_created', $this);
337
+ }
338
  }
339
+
340
+ /**
341
+ * Registers a class to activate the plugin.
342
+ *
343
+ * @since 1.0.0
344
+ * @param string $className class name of the plugin activator.
345
+ * @return void
346
+ */
347
+ public function registerActivation($className)
348
+ {
349
+ $this->activator_class[] = $className;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
350
  }
351
+
352
+ /**
353
+ * Setups actions related with the Factory Plugin.
354
+ *
355
+ * @since 1.0.0
356
+ */
357
+ private function setupActions()
358
+ {
359
+ add_action('init', array($this, 'checkPluginVersioninDatabase'));
360
+
361
+ if( $this->is_admin ) {
362
+ add_action('admin_init', array($this, 'customizePluginRow'), 20);
363
+ /*add_action('wbcr_factory_400_core_modules_loaded-' . $this->plugin_name, array(
364
+ $this,
365
+ 'modulesLoaded'
366
+ ));*/
367
+ }
368
  }
369
+
370
+ /**
371
+ * Checks the plugin version in database. If it's not the same as the currernt,
372
+ * it means that the plugin was updated and we need to execute the update hook.
373
+ *
374
+ * Calls on the hook "plugins_loaded".
375
+ *
376
+ * @since 1.0.0
377
+ * @return void
378
+ */
379
+ public function checkPluginVersioninDatabase()
380
+ {
381
 
382
+ // checks whether the plugin needs to run updates.
383
+ if( $this->is_admin ) {
384
+ $plugin_version = $this->getPluginVersionFromDatabase();
385
 
386
+ if( $plugin_version != $this->plugin_build . '-' . $this->plugin_version ) {
387
+ $this->activationOrUpdateHook(false);
388
+ }
389
+ }
 
 
 
390
  }
391
+
392
+ /**
393
+ * Returns the plugin version from database.
394
+ *
395
+ * @since 1.0.0
396
+ * @return string|null The plugin version registered in the database.
397
+ */
398
+ public function getPluginVersionFromDatabase()
399
+ {
400
+ $plugin_versions = get_option('factory_plugin_versions', array());
401
+ $plugin_version = isset ($plugin_versions[$this->plugin_name])
402
+ ? $plugin_versions[$this->plugin_name]
403
+ : null;
 
 
 
 
 
 
 
 
 
 
404
 
405
+ return $plugin_version;
 
 
 
 
 
 
 
 
406
  }
407
+
408
+ /**
409
+ * Registers in the database a new version of the plugin.
410
+ *
411
+ * @since 1.0.0
412
+ * @return void
413
+ */
414
+ public function updatePluginVersionInDatabase()
415
+ {
416
+ $plugin_versions = get_option('factory_plugin_versions', array());
417
+ $plugin_versions[$this->plugin_name] = $this->plugin_build . '-' . $this->plugin_version;
418
+ update_option('factory_plugin_versions', $plugin_versions);
419
  }
420
+
421
+ /**
422
+ * Customize the plugin row (on the page plugins.php).
423
+ *
424
+ * Calls on the hook "admin_init".
425
+ *
426
+ * @since 1.0.0
427
+ * @return void
428
+ */
429
+ public function customizePluginRow()
430
+ {
431
+ remove_action("after_plugin_row_" . $this->relative_path, 'wp_plugin_update_row');
432
+ add_action("after_plugin_row_" . $this->relative_path, array($this, 'showCustomPluginRow'), 10, 2);
433
+ }
434
+
435
+ public function activate()
436
+ {
437
+ $this->forceActivationHook();
438
+ }
439
+
440
+ public function deactivate()
441
+ {
442
+ $this->deactivationHook();
443
+ }
444
+
445
+ /**
446
+ * Executes an activation hook for this plugin immediately.
447
+ *
448
+ * @since 1.0.0
449
+ * @return void
450
+ */
451
+ public function forceActivationHook()
452
+ {
453
+ $this->activationOrUpdateHook(true);
454
+ }
455
+
456
+ /**
457
+ * Executes an activation hook or an update hook.
458
+ *
459
+ * @param bool $forceActivation If true, then executes an activation hook.
460
+ * @since 1.0.0
461
+ * @return void
462
+ */
463
+ public function activationOrUpdateHook($force_activation = false)
464
+ {
465
+
466
+ $db_version = $this->getPluginVersionFromDatabase();
467
+ do_action('wbcr_factory_400_plugin_activation_or_update_' . $this->plugin_name, $force_activation, $db_version, $this);
468
+
469
+ // there are not any previous version of the plugin in the past
470
+ if( !$db_version ) {
471
+ $this->activationHook();
472
+
473
+ $this->updatePluginVersionInDatabase();
474
+
475
+ return;
476
  }
477
+
478
+ $parts = explode('-', $db_version);
479
+ $prevous_build = $parts[0];
480
+ $prevous_version = $parts[1];
481
+
482
+ // if another build was used previously
483
+ if( $prevous_build != $this->plugin_build ) {
484
+ $this->migrationHook($prevous_build, $this->plugin_build);
485
+ $this->activationHook();
486
+
487
+ $this->updatePluginVersionInDatabase();
488
+
489
+ return;
490
+ }
491
+
492
+ // if another less version was used previously
493
+ if( version_compare($prevous_version, $this->plugin_version, '<') ) {
494
+ $this->updateHook($prevous_version, $this->plugin_version);
495
  }
496
+
497
+ // standart plugin activation
498
+ if( $force_activation ) {
499
+ $this->activationHook();
500
+ }
501
+
502
+ // else nothing to do
503
+ $this->updatePluginVersionInDatabase();
504
+
505
+ return;
506
  }
507
+
508
+ /**
509
+ * It's invoked on plugin activation. Don't excite it directly.
510
+ *
511
+ * @since 1.0.0
512
+ * @return void
513
+ */
514
+ public function activationHook()
515
+ {
516
+ $cancelled = apply_filters('wbcr_factory_400_cancel_plugin_activation_' . $this->plugin_name, false);
517
 
518
+ if( $cancelled ) {
519
+ return;
520
+ }
521
+
522
+ if( !empty($this->activator_class) ) {
523
+ foreach((array)$this->activator_class as $activator_class) {
524
+ $activator = new $activator_class($this);
525
+ $activator->activate();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
526
  }
527
+ }
528
+
529
+ do_action('wbcr_factory_400_plugin_activation', $this);
530
+ do_action('wbcr_factory_400_plugin_activation_' . $this->plugin_name, $this);
531
+
532
+ // just time to know when the plugin was activated the first time
533
+ $activated = $this->getOption('factory_400_plugin_activated_' . $this->plugin_name, 0);
534
+
535
+ if( !$activated ) {
536
+ $this->updateOption('factory_400_plugin_activated_' . $this->plugin_name, time());
537
  }
538
  }
539
+
540
  /**
541
+ * It's invoked on plugin deactionvation. Don't excite it directly.
542
  *
543
+ * @since 1.0.0
544
+ * @return void
 
 
545
  */
546
+ public function deactivationHook()
547
+ {
548
+ $cancelled = apply_filters('wbcr_factory_400_cancel_plugin_deactivation_' . $this->plugin_name, false);
549
+
550
+ if( $cancelled ) {
551
+ return;
552
+ }
553
+
554
+ do_action('wbcr_factory_400_plugin_deactivation', $this);
555
+ do_action('wbcr_factory_400_plugin_deactivation_' . $this->plugin_name, $this);
556
+
557
+ if( !empty($this->activator_class) ) {
558
+ foreach((array)$this->activator_class as $activator_class) {
559
+ $activator = new $activator_class($this);
560
+ $activator->deactivate();
561
+ }
562
+ }
563
+ }
564
+
565
+ /**
566
+ * Finds migration items and install ones.
567
+ *
568
+ * @since 1.0.0
569
+ * @return void
570
+ */
571
+ public function migrationHook($previos_build, $current_build)
572
+ {
573
+ $migration_file = $this->updates . $previos_build . '-' . $current_build . '.php';
574
+ if( !file_exists($migration_file) ) {
575
+ return;
576
+ }
577
+
578
+ $classes = $this->getClasses($migration_file);
579
+ if( count($classes) == 0 ) {
580
+ return;
581
+ }
582
+
583
+ include_once($migration_file);
584
+ $migrationClass = $classes[0]['name'];
585
+
586
+ $migrationItem = new $migrationClass($this);
587
+ $migrationItem->install();
588
+ }
589
+
590
+ /**
591
+ * Finds upate items and install the ones.
592
+ *
593
+ * @since 1.0.0
594
+ * @return void
595
+ */
596
+ public function updateHook($old, $new)
597
+ {
598
+
599
+ // converts versions like 0.0.0 to 000000
600
+ $old_number = $this->getVersionNumber($old);
601
+ $new_number = $this->getVersionNumber($new);
602
+
603
+ $update_files = $this->updates;
604
+ $files = $this->findFiles($update_files);
605
+
606
+ if( empty($files) ) {
607
+ return;
608
+ }
609
+
610
+ // finds updates that has intermediate version
611
+ foreach($files as $item) {
612
+ if( !preg_match('/^\d+$/', $item['name']) ) {
613
+ continue;
614
+ }
615
+
616
+ $item_number = intval($item['name']);
617
+ if( $item_number > $old_number && $item_number <= $new_number ) {
618
+
619
+ $classes = $this->getClasses($item['path']);
620
+ if( count($classes) == 0 ) {
621
+ return;
622
+ }
623
+
624
+ foreach($classes as $path => $class_data) {
625
+ include_once($path);
626
+ $update_class = $class_data['name'];
627
+
628
+ $update = new $update_class($this);
629
+ $update->install();
630
+ }
631
+ }
632
+ }
633
+
634
+ // just time to know when the plugin was activated the first time
635
+ $activated = $this->getOption('factory_400_plugin_activated_' . $this->plugin_name, 0);
636
 
637
+ if( !$activated ) {
638
+ $this->updateOption('factory_400_plugin_activated_' . $this->plugin_name, time());
639
+ }
640
+ }
641
+
642
+ /**
643
+ * Converts string representation of the version to the numeric.
644
+ *
645
+ * @since 1.0.0
646
+ * @param string $version A string version to convert.
647
+ * @return integer
648
+ */
649
+ protected function getVersionNumber($version)
650
+ {
651
+ preg_match('/(\d+)\.(\d+)\.(\d+)/', $version, $matches);
652
+ if( count($matches) == 0 ) {
653
+ return false;
654
+ }
655
+
656
+ $number = '';
657
+ $number .= (strlen($matches[1]) == 1)
658
+ ? '0' . $matches[1]
659
+ : $matches[1];
660
+ $number .= (strlen($matches[2]) == 1)
661
+ ? '0' . $matches[2]
662
+ : $matches[2];
663
+ $number .= (strlen($matches[3]) == 1)
664
+ ? '0' . $matches[3]
665
+ : $matches[3];
666
+
667
+ return intval($number);
668
+ }
669
+
670
+ /**
671
+ * Forces modules.
672
+ *
673
+ * @since 1.0.0
674
+ * @return void
675
+ */
676
+ //public function modulesLoaded()
677
+ //{
678
+ // factory_core_000_modules_loaded( $this );
679
+ //}
680
 
681
+ // ----------------------------------------------------------------------
682
+ // Plugin row on plugins.php page
683
+ // ----------------------------------------------------------------------
684
+
685
+ public function showCustomPluginRow($file, $plugin_data)
686
+ {
687
+ if( !is_network_admin() && is_multisite() ) {
688
+ return;
689
+ }
690
+
691
+ $messages = apply_filters('wbcr_factory_400_plugin_row_' . $this->plugin_name, array(), $file, $plugin_data);
692
+
693
+ // if nothign to show then, use default handle
694
+ /*if( count($messages) == 0 ) {
695
+ wp_plugin_update_row($file, $plugin_data);
696
+
697
+ return;
698
+ }*/
699
+
700
+ if( empty($messages) ) {
701
+ return;
702
+ }
703
+
704
+ $wp_list_table = _get_list_table('WP_Plugins_List_Table');
705
+
706
+ foreach($messages as $message) {
707
+ echo '<tr class="plugin-update-tr active">';
708
+ echo '<td colspan="' . $wp_list_table->get_column_count() . '" class="plugin-update colspanchange">';
709
+ echo '<div class="update-message notice inline notice-error notice-alt">';
710
+ echo '<p>' . $message . '</p>';
711
+ echo '</div>';
712
+ echo '</td></tr>';
713
+ }
714
+ }
715
+
716
+ // ----------------------------------------------------------------------
717
+ // Finding files
718
+ // ----------------------------------------------------------------------
719
+
720
+ /**
721
+ * Returns a list of files at a given path.
722
+ * @param string $path path for search
723
+ */
724
+ private function findFiles($path)
725
+ {
726
+ return $this->findFileOrFolders($path, true);
727
+ }
728
 
729
+ /**
730
+ * Returns a list of folders at a given path.
731
+ * @param string $path path for search
732
+ */
733
+ private function findFolders($path)
734
+ {
735
+ return $this->findFileOrFolders($path, false);
736
+ }
737
+
738
+ /**
739
+ * Returns a list of files or folders at a given path.
740
+ * @param string $path path for search
741
+ * @param bool $files files or folders?
742
+ */
743
+ private function findFileOrFolders($path, $areFiles = true)
744
+ {
745
+ if( !is_dir($path) ) {
746
+ return array();
747
+ }
748
+
749
+ $entries = scandir($path);
750
+ if( empty($entries) ) {
751
+ return array();
752
+ }
753
+
754
+ $files = array();
755
+ foreach($entries as $entryName) {
756
+ if( $entryName == '.' || $entryName == '..' ) {
757
+ continue;
758
+ }
759
+
760
+ $filename = $path . '/' . $entryName;
761
+ if( ($areFiles && is_file($filename)) || (!$areFiles && is_dir($filename)) ) {
762
+ $files[] = array(
763
+ 'path' => str_replace("\\", "/", $filename),
764
+ 'name' => $areFiles
765
+ ? str_replace('.php', '', $entryName)
766
+ : $entryName
767
+ );
768
+ }
769
+ }
770
+
771
+ return $files;
772
+ }
773
+
774
+ /**
775
+ * Gets php classes defined in a specified file.
776
+ * @param string $path
777
+ */
778
+ private function getClasses($path)
779
+ {
780
+
781
+ $phpCode = file_get_contents($path);
782
+
783
+ $classes = array();
784
+ $tokens = token_get_all($phpCode);
785
+
786
+ $count = count($tokens);
787
+ for($i = 2; $i < $count; $i++) {
788
+ if( is_array($tokens) && $tokens[$i - 2][0] == T_CLASS && $tokens[$i - 1][0] == T_WHITESPACE && $tokens[$i][0] == T_STRING ) {
789
+
790
+ $extends = null;
791
+ if( $tokens[$i + 2][0] == T_EXTENDS && $tokens[$i + 4][0] == T_STRING ) {
792
+ $extends = $tokens[$i + 4][1];
793
+ }
794
+
795
+ $class_name = $tokens[$i][1];
796
+ $classes[$path] = array(
797
+ 'name' => $class_name,
798
+ 'extends' => $extends
799
+ );
800
+ }
801
+ }
802
+
803
+ /**
804
+ * result example:
805
+ *
806
+ * $classes['/plugin/items/filename.php'] = array(
807
+ * 'name' => 'PluginNameItem',
808
+ * 'extendes' => 'PluginNameItemBase'
809
+ * )
810
+ */
811
+
812
+ return $classes;
813
+ }
814
+
815
+ // ----------------------------------------------------------------------
816
+ // Public methods
817
+ // ----------------------------------------------------------------------
818
+
819
+ public function newScriptList()
820
+ {
821
+ return new Wbcr_Factory400_ScriptList($this);
822
+ }
823
+
824
+ public function newStyleList()
825
+ {
826
+ return new Wbcr_Factory400_StyleList($this);
827
+ }
828
  }
829
+ }
libs/factory/core/includes/request.class.php ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Exit if accessed directly
3
+ if( !defined('ABSPATH') ) {
4
+ exit;
5
+ }
6
+
7
+ if( !class_exists('Wbcr_Factory400_Plugin') ) {
8
+ class Wbcr_Factory400_Request {
9
+
10
+ /**
11
+ * @param null $param
12
+ * @param bool|string $sanitize true/false or sanitize function name
13
+ * @param bool $default
14
+ * @param string $method_name
15
+ * @return array|bool|mixed
16
+ */
17
+ private function getBody($param = null, $sanitize = false, $default = false, $method_name = 'REQUEST')
18
+ {
19
+ $sanitize_function_name = 'sanitize_text_field';
20
+ $method = $_REQUEST;
21
+
22
+ switch( mb_strtoupper($method_name) ) {
23
+ case 'GET':
24
+ $method = $_GET;
25
+ break;
26
+ case 'POST':
27
+ $method = $_POST;
28
+ break;
29
+ case 'REQUEST':
30
+ $method = $_REQUEST;
31
+ break;
32
+ }
33
+
34
+ if( !empty($sanitize) && is_string($sanitize) && $sanitize !== $sanitize_function_name ) {
35
+ $sanitize_function_name = $sanitize;
36
+ }
37
+
38
+ if( !function_exists($sanitize_function_name) ) {
39
+ throw new Exception('Function ' . $sanitize_function_name . 'is undefined.');
40
+ }
41
+
42
+ if( !empty($param) ) {
43
+ if( isset($method[$param]) && !empty($method[$param]) ) {
44
+ if( is_array($method[$param]) ) {
45
+ return !empty($sanitize)
46
+ ? array_map($sanitize_function_name, $method[$param])
47
+ : $method[$param];
48
+ } else {
49
+ return !empty($sanitize)
50
+ ? call_user_func($sanitize_function_name, $method[$param])
51
+ : $method[$param];
52
+ }
53
+ }
54
+
55
+ return $default;
56
+ }
57
+
58
+ return !empty($sanitize)
59
+ ? array_map($sanitize_function_name, $method)
60
+ : $method;
61
+ }
62
+
63
+ /**
64
+ * @param bool|string see method getBody
65
+ * @param array $default
66
+ * @return mixed|null
67
+ */
68
+ public function requestAll($sanitize = false, $default = array())
69
+ {
70
+ return $this->getBody(null, $sanitize, $default);
71
+ }
72
+
73
+ /**
74
+ * @param $param
75
+ * @param bool|string see method getBody
76
+ * @param bool $default
77
+ * @return mixed|null
78
+ */
79
+ public function request($param, $default = false, $sanitize = false)
80
+ {
81
+ return $this->getBody($param, $sanitize, $default);
82
+ }
83
+
84
+ /**
85
+ * @param bool|string see method getBody
86
+ * @param array $default
87
+ * @return mixed|null
88
+ */
89
+ public function getAll($sanitize = false, $default = array())
90
+ {
91
+ return $this->getBody(null, $sanitize, $default, 'get');
92
+ }
93
+
94
+ /**
95
+ * @param null $param
96
+ * @param bool|string see method getBody
97
+ * @param bool $default
98
+ * @return mixed|null
99
+ */
100
+ public function get($param, $default = false, $sanitize = false)
101
+ {
102
+ return $this->getBody($param, $sanitize, $default, 'get');
103
+ }
104
+
105
+ /**
106
+ * @param bool|string see method getBody
107
+ * @param array $default
108
+ * @return mixed|null
109
+ */
110
+ public function postAll($sanitize = false, $default = array())
111
+ {
112
+ return $this->getBody(null, $sanitize, $default, 'post');
113
+ }
114
+
115
+ /**
116
+ * @param $param
117
+ * @param bool|string see method getBody
118
+ * @param bool $default
119
+ * @return mixed|null
120
+ */
121
+ public function post($param, $default = false, $sanitize = false)
122
+ {
123
+ return $this->getBody($param, $sanitize, $default, 'post');
124
+ }
125
+ }
126
+ }
libs/factory/forms/boot.php CHANGED
@@ -2,16 +2,18 @@
2
  /**
3
  * Factory Forms
4
  *
5
- * Factory Forms is a Factory module that provides a declarative
6
- * way to build forms without any extra html or css markup.
7
- *
8
- * @author Paul Kashtanoff <paul@byonepress.com>, Webcraftic <wordpress.webraftic@gmail.com>
9
- * @copyright (c) 2013, OnePress Ltd, (c) 2017 Webcraftic Ltd
10
  *
11
  * @package factory-forms
12
  * @since 1.0.1
13
  */
14
 
 
 
 
 
 
15
  // the module provides function for the admin area only
16
 
17
  if( !is_admin() ) {
@@ -20,169 +22,172 @@
20
 
21
  // checks if the module is already loaded in order to
22
  // prevent loading the same version of the module twice.
23
- if( defined('FACTORY_FORMS_329_LOADED') ) {
24
  return;
25
  }
26
 
27
- define('FACTORY_FORMS_329_LOADED', true);
28
 
29
  // absolute path and URL to the files and resources of the module.
30
- define('FACTORY_FORMS_329_DIR', dirname(__FILE__));
31
- define('FACTORY_FORMS_329_URL', plugins_url(null, __FILE__));
32
 
33
  #comp merge
34
- require(FACTORY_FORMS_329_DIR . '/includes/providers/value-provider.interface.php');
35
- require(FACTORY_FORMS_329_DIR . '/includes/providers/meta-value-provider.class.php');
36
- require(FACTORY_FORMS_329_DIR . '/includes/providers/options-value-provider.class.php');
37
 
38
- require(FACTORY_FORMS_329_DIR . '/includes/form.class.php');
39
- require(FACTORY_FORMS_329_DIR . '/helpers.php');
40
  #endcomp
41
 
42
- load_plugin_textdomain('factory_forms_329', false, dirname(plugin_basename(__FILE__)) . '/langs');
43
 
44
  /**
45
  * We add this code into the hook because all these controls quite heavy. So in order to get better perfomance,
46
  * we load the form controls only on pages where the forms are created.
47
  *
48
- * @see the 'factory_forms_329_register_controls' hook
49
  *
50
  * @since 3.0.7
51
  */
52
- if( !function_exists('factory_forms_329_register_default_controls') ) {
53
 
54
- function factory_forms_329_register_default_controls($plugin)
 
 
 
 
55
  {
56
 
57
  if( $plugin && !isset($plugin->forms) ) {
58
- throw new Exception("The module Factory Forms is not loaded for the plugin '{$plugin->pluginName}'.");
59
  }
60
 
61
- require_once(FACTORY_FORMS_329_DIR . '/includes/html-builder.class.php');
62
- require_once(FACTORY_FORMS_329_DIR . '/includes/form-element.class.php');
63
- require_once(FACTORY_FORMS_329_DIR . '/includes/control.class.php');
64
- require_once(FACTORY_FORMS_329_DIR . '/includes/complex-control.class.php');
65
- require_once(FACTORY_FORMS_329_DIR . '/includes/holder.class.php');
66
- require_once(FACTORY_FORMS_329_DIR . '/includes/control-holder.class.php');
67
- require_once(FACTORY_FORMS_329_DIR . '/includes/custom-element.class.php');
68
- require_once(FACTORY_FORMS_329_DIR . '/includes/form-layout.class.php');
69
 
70
  // registration of controls
71
  $plugin->forms->registerControls(array(
72
  array(
73
  'type' => 'checkbox',
74
- 'class' => 'FactoryForms329_CheckboxControl',
75
- 'include' => FACTORY_FORMS_329_DIR . '/controls/checkbox.php'
76
  ),
77
  array(
78
  'type' => 'list',
79
- 'class' => 'FactoryForms329_ListControl',
80
- 'include' => FACTORY_FORMS_329_DIR . '/controls/list.php'
81
  ),
82
  array(
83
  'type' => 'dropdown',
84
- 'class' => 'FactoryForms329_DropdownControl',
85
- 'include' => FACTORY_FORMS_329_DIR . '/controls/dropdown.php'
86
  ),
87
  array(
88
  'type' => 'dropdown-and-colors',
89
- 'class' => 'FactoryForms329_DropdownAndColorsControl',
90
- 'include' => FACTORY_FORMS_329_DIR . '/controls/dropdown-and-colors.php'
91
  ),
92
  array(
93
  'type' => 'hidden',
94
- 'class' => 'FactoryForms329_HiddenControl',
95
- 'include' => FACTORY_FORMS_329_DIR . '/controls/hidden.php'
96
  ),
97
  array(
98
  'type' => 'hidden',
99
- 'class' => 'FactoryForms329_HiddenControl',
100
- 'include' => FACTORY_FORMS_329_DIR . '/controls/hidden.php'
101
  ),
102
  array(
103
  'type' => 'radio',
104
- 'class' => 'FactoryForms329_RadioControl',
105
- 'include' => FACTORY_FORMS_329_DIR . '/controls/radio.php'
106
  ),
107
  array(
108
  'type' => 'radio-colors',
109
- 'class' => 'FactoryForms329_RadioColorsControl',
110
- 'include' => FACTORY_FORMS_329_DIR . '/controls/radio-colors.php'
111
  ),
112
  array(
113
  'type' => 'textarea',
114
- 'class' => 'FactoryForms329_TextareaControl',
115
- 'include' => FACTORY_FORMS_329_DIR . '/controls/textarea.php'
116
  ),
117
  array(
118
  'type' => 'textbox',
119
- 'class' => 'FactoryForms329_TextboxControl',
120
- 'include' => FACTORY_FORMS_329_DIR . '/controls/textbox.php'
121
  ),
122
  array(
123
  'type' => 'multiple-textbox',
124
- 'class' => 'FactoryForms329_MultipleTextboxControl',
125
- 'include' => FACTORY_FORMS_329_DIR . '/controls/multiple-textbox.php'
126
  ),
127
  array(
128
  'type' => 'datetimepicker-range',
129
- 'class' => 'FactoryForms329_DatepickerRangeControl',
130
- 'include' => FACTORY_FORMS_329_DIR . '/controls/datepicker-range.php'
131
  ),
132
  array(
133
  'type' => 'url',
134
- 'class' => 'FactoryForms329_UrlControl',
135
- 'include' => FACTORY_FORMS_329_DIR . '/controls/url.php'
136
  ),
137
  array(
138
  'type' => 'wp-editor',
139
- 'class' => 'FactoryForms329_WpEditorControl',
140
- 'include' => FACTORY_FORMS_329_DIR . '/controls/wp-editor.php'
141
  ),
142
  array(
143
  'type' => 'color',
144
- 'class' => 'FactoryForms329_ColorControl',
145
- 'include' => FACTORY_FORMS_329_DIR . '/controls/color.php'
146
  ),
147
  array(
148
  'type' => 'color-and-opacity',
149
- 'class' => 'FactoryForms329_ColorAndOpacityControl',
150
- 'include' => FACTORY_FORMS_329_DIR . '/controls/color-and-opacity.php'
151
  ),
152
  array(
153
  'type' => 'gradient',
154
- 'class' => 'FactoryForms329_GradientControl',
155
- 'include' => FACTORY_FORMS_329_DIR . '/controls/gradient.php'
156
  ),
157
  array(
158
  'type' => 'font',
159
- 'class' => 'FactoryForms329_FontControl',
160
- 'include' => FACTORY_FORMS_329_DIR . '/controls/font.php'
161
  ),
162
  array(
163
  'type' => 'google-font',
164
- 'class' => 'FactoryForms329_GoogleFontControl',
165
- 'include' => FACTORY_FORMS_329_DIR . '/controls/google-font.php'
166
  ),
167
  array(
168
  'type' => 'pattern',
169
- 'class' => 'FactoryForms329_PatternControl',
170
- 'include' => FACTORY_FORMS_329_DIR . '/controls/pattern.php'
171
  ),
172
  array(
173
  'type' => 'integer',
174
- 'class' => 'FactoryForms329_IntegerControl',
175
- 'include' => FACTORY_FORMS_329_DIR . '/controls/integer.php'
176
  ),
177
  array(
178
  'type' => 'control-group',
179
- 'class' => 'FactoryForms329_ControlGroupHolder',
180
- 'include' => FACTORY_FORMS_329_DIR . '/controls/holders/control-group.php'
181
  ),
182
  array(
183
  'type' => 'paddings-editor',
184
- 'class' => 'FactoryForms329_PaddingsEditorControl',
185
- 'include' => FACTORY_FORMS_329_DIR . '/controls/paddings-editor.php'
186
  ),
187
  ));
188
 
@@ -190,53 +195,53 @@
190
  $plugin->forms->registerHolders(array(
191
  array(
192
  'type' => 'tab',
193
- 'class' => 'FactoryForms329_TabHolder',
194
- 'include' => FACTORY_FORMS_329_DIR . '/controls/holders/tab.php'
195
  ),
196
  array(
197
  'type' => 'tab-item',
198
- 'class' => 'FactoryForms329_TabItemHolder',
199
- 'include' => FACTORY_FORMS_329_DIR . '/controls/holders/tab-item.php'
200
  ),
201
  array(
202
  'type' => 'accordion',
203
- 'class' => 'FactoryForms329_AccordionHolder',
204
- 'include' => FACTORY_FORMS_329_DIR . '/controls/holders/accordion.php'
205
  ),
206
  array(
207
  'type' => 'accordion-item',
208
- 'class' => 'FactoryForms329_AccordionItemHolder',
209
- 'include' => FACTORY_FORMS_329_DIR . '/controls/holders/accordion-item.php'
210
  ),
211
  array(
212
  'type' => 'control-group',
213
- 'class' => 'FactoryForms329_ControlGroupHolder',
214
- 'include' => FACTORY_FORMS_329_DIR . '/controls/holders/control-group.php'
215
  ),
216
  array(
217
  'type' => 'control-group-item',
218
- 'class' => 'FactoryForms329_ControlGroupItem',
219
- 'include' => FACTORY_FORMS_329_DIR . '/controls/holders/control-group-item.php'
220
  ),
221
  array(
222
  'type' => 'form-group',
223
- 'class' => 'FactoryForms329_FormGroupHolder',
224
- 'include' => FACTORY_FORMS_329_DIR . '/controls/holders/form-group.php'
225
  ),
226
  array(
227
  'type' => 'more-link',
228
- 'class' => 'FactoryForms329_MoreLinkHolder',
229
- 'include' => FACTORY_FORMS_329_DIR . '/controls/holders/more-link.php'
230
  ),
231
  array(
232
  'type' => 'div',
233
- 'class' => 'FactoryForms329_DivHolder',
234
- 'include' => FACTORY_FORMS_329_DIR . '/controls/holders/div.php'
235
  ),
236
  array(
237
  'type' => 'columns',
238
- 'class' => 'FactoryForms329_ColumnsHolder',
239
- 'include' => FACTORY_FORMS_329_DIR . '/controls/holders/columns.php'
240
  )
241
  ));
242
 
@@ -244,28 +249,23 @@
244
  $plugin->forms->registerCustomElements(array(
245
  array(
246
  'type' => 'html',
247
- 'class' => 'FactoryForms329_Html',
248
- 'include' => FACTORY_FORMS_329_DIR . '/controls/customs/html.php',
249
  ),
250
  array(
251
  'type' => 'separator',
252
- 'class' => 'FactoryForms329_Separator',
253
- 'include' => FACTORY_FORMS_329_DIR . '/controls/customs/separator.php',
254
  ),
255
  ));
256
 
257
  // registration of form layouts
258
- $plugin->forms->registerFormLayout(array(
259
- 'name' => 'bootstrap-2',
260
- 'class' => 'FactoryForms329_Bootstrap2FormLayout',
261
- 'include' => FACTORY_FORMS_329_DIR . '/layouts/bootstrap-2/bootstrap-2.php'
262
- ));
263
  $plugin->forms->registerFormLayout(array(
264
  'name' => 'bootstrap-3',
265
- 'class' => 'FactoryForms329_Bootstrap3FormLayout',
266
- 'include' => FACTORY_FORMS_329_DIR . '/layouts/bootstrap-3/bootstrap-3.php'
267
  ));
268
  }
269
 
270
- add_action('factory_forms_329_register_controls', 'factory_forms_329_register_default_controls');
271
  }
2
  /**
3
  * Factory Forms
4
  *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
 
 
 
7
  *
8
  * @package factory-forms
9
  * @since 1.0.1
10
  */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
  // the module provides function for the admin area only
18
 
19
  if( !is_admin() ) {
22
 
23
  // checks if the module is already loaded in order to
24
  // prevent loading the same version of the module twice.
25
+ if( defined('FACTORY_FORMS_400_LOADED') ) {
26
  return;
27
  }
28
 
29
+ define('FACTORY_FORMS_400_LOADED', true);
30
 
31
  // absolute path and URL to the files and resources of the module.
32
+ define('FACTORY_FORMS_400_DIR', dirname(__FILE__));
33
+ define('FACTORY_FORMS_400_URL', plugins_url(null, __FILE__));
34
 
35
  #comp merge
36
+ require_once(FACTORY_FORMS_400_DIR . '/includes/providers/value-provider.interface.php');
37
+ require_once(FACTORY_FORMS_400_DIR . '/includes/providers/meta-value-provider.class.php');
38
+ require_once(FACTORY_FORMS_400_DIR . '/includes/providers/options-value-provider.class.php');
39
 
40
+ require_once(FACTORY_FORMS_400_DIR . '/includes/form.class.php');
 
41
  #endcomp
42
 
43
+ load_plugin_textdomain('wbcr_factory_forms_400', false, dirname(plugin_basename(__FILE__)) . '/langs');
44
 
45
  /**
46
  * We add this code into the hook because all these controls quite heavy. So in order to get better perfomance,
47
  * we load the form controls only on pages where the forms are created.
48
  *
49
+ * @see the 'wbcr_factory_forms_400_register_controls' hook
50
  *
51
  * @since 3.0.7
52
  */
53
+ if( !function_exists('wbcr_factory_forms_400_register_default_controls') ) {
54
 
55
+ /**
56
+ * @param Wbcr_Factory400_Plugin $plugin
57
+ * @throws Exception
58
+ */
59
+ function wbcr_factory_forms_400_register_default_controls($plugin)
60
  {
61
 
62
  if( $plugin && !isset($plugin->forms) ) {
63
+ throw new Exception("The module Factory Forms is not loaded for the plugin '{$plugin->getPluginName()}'.");
64
  }
65
 
66
+ require_once(FACTORY_FORMS_400_DIR . '/includes/html-builder.class.php');
67
+ require_once(FACTORY_FORMS_400_DIR . '/includes/form-element.class.php');
68
+ require_once(FACTORY_FORMS_400_DIR . '/includes/control.class.php');
69
+ require_once(FACTORY_FORMS_400_DIR . '/includes/complex-control.class.php');
70
+ require_once(FACTORY_FORMS_400_DIR . '/includes/holder.class.php');
71
+ require_once(FACTORY_FORMS_400_DIR . '/includes/control-holder.class.php');
72
+ require_once(FACTORY_FORMS_400_DIR . '/includes/custom-element.class.php');
73
+ require_once(FACTORY_FORMS_400_DIR . '/includes/form-layout.class.php');
74
 
75
  // registration of controls
76
  $plugin->forms->registerControls(array(
77
  array(
78
  'type' => 'checkbox',
79
+ 'class' => 'Wbcr_FactoryForms400_CheckboxControl',
80
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/checkbox.php'
81
  ),
82
  array(
83
  'type' => 'list',
84
+ 'class' => 'Wbcr_FactoryForms400_ListControl',
85
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/list.php'
86
  ),
87
  array(
88
  'type' => 'dropdown',
89
+ 'class' => 'Wbcr_FactoryForms400_DropdownControl',
90
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/dropdown.php'
91
  ),
92
  array(
93
  'type' => 'dropdown-and-colors',
94
+ 'class' => 'Wbcr_FactoryForms400_DropdownAndColorsControl',
95
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/dropdown-and-colors.php'
96
  ),
97
  array(
98
  'type' => 'hidden',
99
+ 'class' => 'Wbcr_FactoryForms400_HiddenControl',
100
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/hidden.php'
101
  ),
102
  array(
103
  'type' => 'hidden',
104
+ 'class' => 'Wbcr_FactoryForms400_HiddenControl',
105
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/hidden.php'
106
  ),
107
  array(
108
  'type' => 'radio',
109
+ 'class' => 'Wbcr_FactoryForms400_RadioControl',
110
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/radio.php'
111
  ),
112
  array(
113
  'type' => 'radio-colors',
114
+ 'class' => 'Wbcr_FactoryForms400_RadioColorsControl',
115
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/radio-colors.php'
116
  ),
117
  array(
118
  'type' => 'textarea',
119
+ 'class' => 'Wbcr_FactoryForms400_TextareaControl',
120
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/textarea.php'
121
  ),
122
  array(
123
  'type' => 'textbox',
124
+ 'class' => 'Wbcr_FactoryForms400_TextboxControl',
125
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/textbox.php'
126
  ),
127
  array(
128
  'type' => 'multiple-textbox',
129
+ 'class' => 'Wbcr_FactoryForms400_MultipleTextboxControl',
130
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/multiple-textbox.php'
131
  ),
132
  array(
133
  'type' => 'datetimepicker-range',
134
+ 'class' => 'Wbcr_FactoryForms400_DatepickerRangeControl',
135
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/datepicker-range.php'
136
  ),
137
  array(
138
  'type' => 'url',
139
+ 'class' => 'Wbcr_FactoryForms400_UrlControl',
140
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/url.php'
141
  ),
142
  array(
143
  'type' => 'wp-editor',
144
+ 'class' => 'Wbcr_FactoryForms400_WpEditorControl',
145
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/wp-editor.php'
146
  ),
147
  array(
148
  'type' => 'color',
149
+ 'class' => 'Wbcr_FactoryForms400_ColorControl',
150
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/color.php'
151
  ),
152
  array(
153
  'type' => 'color-and-opacity',
154
+ 'class' => 'Wbcr_FactoryForms400_ColorAndOpacityControl',
155
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/color-and-opacity.php'
156
  ),
157
  array(
158
  'type' => 'gradient',
159
+ 'class' => 'Wbcr_FactoryForms400_GradientControl',
160
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/gradient.php'
161
  ),
162
  array(
163
  'type' => 'font',
164
+ 'class' => 'Wbcr_FactoryForms400_FontControl',
165
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/font.php'
166
  ),
167
  array(
168
  'type' => 'google-font',
169
+ 'class' => 'Wbcr_FactoryForms400_GoogleFontControl',
170
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/google-font.php'
171
  ),
172
  array(
173
  'type' => 'pattern',
174
+ 'class' => 'Wbcr_FactoryForms400_PatternControl',
175
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/pattern.php'
176
  ),
177
  array(
178
  'type' => 'integer',
179
+ 'class' => 'Wbcr_FactoryForms400_IntegerControl',
180
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/integer.php'
181
  ),
182
  array(
183
  'type' => 'control-group',
184
+ 'class' => 'Wbcr_FactoryForms400_ControlGroupHolder',
185
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/holders/control-group.php'
186
  ),
187
  array(
188
  'type' => 'paddings-editor',
189
+ 'class' => 'Wbcr_FactoryForms400_PaddingsEditorControl',
190
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/paddings-editor.php'
191
  ),
192
  ));
193
 
195
  $plugin->forms->registerHolders(array(
196
  array(
197
  'type' => 'tab',
198
+ 'class' => 'Wbcr_FactoryForms400_TabHolder',
199
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/holders/tab.php'
200
  ),
201
  array(
202
  'type' => 'tab-item',
203
+ 'class' => 'Wbcr_FactoryForms400_TabItemHolder',
204
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/holders/tab-item.php'
205
  ),
206
  array(
207
  'type' => 'accordion',
208
+ 'class' => 'Wbcr_FactoryForms400_AccordionHolder',
209
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/holders/accordion.php'
210
  ),
211
  array(
212
  'type' => 'accordion-item',
213
+ 'class' => 'Wbcr_FactoryForms400_AccordionItemHolder',
214
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/holders/accordion-item.php'
215
  ),
216
  array(
217
  'type' => 'control-group',
218
+ 'class' => 'Wbcr_FactoryForms400_ControlGroupHolder',
219
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/holders/control-group.php'
220
  ),
221
  array(
222
  'type' => 'control-group-item',
223
+ 'class' => 'Wbcr_FactoryForms400_ControlGroupItem',
224
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/holders/control-group-item.php'
225
  ),
226
  array(
227
  'type' => 'form-group',
228
+ 'class' => 'Wbcr_FactoryForms400_FormGroupHolder',
229
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/holders/form-group.php'
230
  ),
231
  array(
232
  'type' => 'more-link',
233
+ 'class' => 'Wbcr_FactoryForms400_MoreLinkHolder',
234
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/holders/more-link.php'
235
  ),
236
  array(
237
  'type' => 'div',
238
+ 'class' => 'Wbcr_FactoryForms400_DivHolder',
239
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/holders/div.php'
240
  ),
241
  array(
242
  'type' => 'columns',
243
+ 'class' => 'Wbcr_FactoryForms400_ColumnsHolder',
244
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/holders/columns.php'
245
  )
246
  ));
247
 
249
  $plugin->forms->registerCustomElements(array(
250
  array(
251
  'type' => 'html',
252
+ 'class' => 'Wbcr_FactoryForms400_Html',
253
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/customs/html.php',
254
  ),
255
  array(
256
  'type' => 'separator',
257
+ 'class' => 'Wbcr_FactoryForms400_Separator',
258
+ 'include' => FACTORY_FORMS_400_DIR . '/controls/customs/separator.php',
259
  ),
260
  ));
261
 
262
  // registration of form layouts
 
 
 
 
 
263
  $plugin->forms->registerFormLayout(array(
264
  'name' => 'bootstrap-3',
265
+ 'class' => 'Wbcr_FactoryForms400_Bootstrap3FormLayout',
266
+ 'include' => FACTORY_FORMS_400_DIR . '/layouts/bootstrap-3/bootstrap-3.php'
267
  ));
268
  }
269
 
270
+ add_action('wbcr_factory_forms_400_register_controls', 'wbcr_factory_forms_400_register_default_controls');
271
  }
libs/factory/forms/controls/checkbox.php CHANGED
@@ -8,161 +8,170 @@
8
  * value => a value to show in the control
9
  * default => a default value of the control if the "value" option is not specified
10
  *
11
- * @author Paul Kashtanoff <paul@byonepress.com>
12
- * @copyright (c) 2013, OnePress Ltd
13
  *
14
  * @package factory-forms
15
  * @since 1.0.0
16
  */
17
- class FactoryForms329_CheckboxControl extends FactoryForms329_Control {
18
 
19
- public $type = 'checkbox';
 
 
 
20
 
21
- public function getSubmitValue($name, $subName)
22
- {
23
- $nameOnForm = $this->getNameOnForm($name);
24
 
25
- return isset($_POST[$nameOnForm]) && $_POST[$nameOnForm] != 0
26
- ? 1
27
- : 0;
28
- }
29
 
30
- /**
31
- * Shows the html markup of the control.
32
- *
33
- * @since 1.0.0
34
- * @return void
35
- */
36
- public function html()
37
- {
38
 
39
- $eventsOnData = $this->getOption('eventsOn', array());
40
- $eventsOffData = $this->getOption('eventsOff', array());
 
41
 
42
- if( !empty($eventsOnData) || !empty($eventsOffData) ) {
 
 
 
43
 
44
- $eventsOnStringData = json_encode($eventsOnData);
45
- $eventsOffStringData = json_encode($eventsOffData);
 
 
 
 
 
 
46
 
47
- $nameOnForm = $this->getNameOnForm();
48
- $value = $this->getValue();
49
 
50
- $printStyles = '';
51
 
52
- if( $value ) {
53
- $currentEventsData = $eventsOnData;
54
- } else {
55
- $currentEventsData = $eventsOffData;
56
- }
57
 
58
- foreach($currentEventsData as $eventName => $selectors) {
59
- if( $eventName == 'hide' ) {
60
- $printStyles .= $selectors . '{display:none;}';
61
- } else if( $eventName == 'show' ) {
62
- $printStyles .= $selectors . '{display:block;}';
63
- }
64
- }
65
 
66
- echo '<style>' . $printStyles . '</style>';
67
- ?>
68
 
69
- <script>
70
- // Onepress factory checkbox control events
71
- if( void 0 === window.__factory_checkbox_control_events_on_data ) {
72
- window.__factory_checkbox_control_events_on_data = {};
73
  }
74
- if( void 0 === window.__factory_checkbox_control_events_off_data ) {
75
- window.__factory_checkbox_control_events_off_data = {};
 
 
 
 
 
76
  }
77
- window.__factory_checkbox_control_events_on_data['<?php echo $nameOnForm ?>'] = <?= $eventsOnStringData ?>;
78
- window.__factory_checkbox_control_events_off_data['<?php echo $nameOnForm ?>'] = <?= $eventsOffStringData ?>;
79
- </script>
80
- <?php
81
- }
82
 
83
- if( 'buttons' == $this->getOption('way') ) {
84
- $this->buttonsHtml();
85
- } else {
86
- $this->defaultHtml();
87
- }
88
- }
 
 
 
 
 
 
 
 
 
 
89
 
90
- /**
91
- * Shows the Buttons Checkbox.
92
- *
93
- * @since 1.0.0
94
- * @return void
95
- */
96
- protected function buttonsHtml()
97
- {
98
- $value = esc_attr($this->getValue());
99
- $nameOnForm = $this->getNameOnForm();
100
-
101
- $this->addCssClass('factory-buttons-way');
102
- $this->addCssClass('btn-group');
103
-
104
- if( $this->getOption('tumbler', false) ) {
105
- $this->addCssClass('factory-tumbler');
106
  }
107
 
108
- $tumblerFunction = $this->getOption('tumblerFunction', false);
109
- if( $tumblerFunction ) {
110
- $this->addHtmlData('tumbler-function', $tumblerFunction);
111
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
112
 
113
- if( $this->getOption('tumblerHint', false) ) {
114
- $this->addCssClass('factory-has-tumbler-hint');
 
 
115
 
116
- $delay = $this->getOption('tumblerDelay', 3000);
117
- $this->addHtmlData('tumbler-delay', $delay);
118
- }
119
 
 
 
 
120
 
121
- ?>
122
- <div <?php $this->attrs() ?>>
123
- <button type="button" class="btn btn-default btn-small btn-sm factory-on <?php if( $value ) {
124
- echo 'active';
125
- } ?>"><?php _e('On', 'factory_forms_329') ?></button>
126
- <button type="button" class="btn btn-default btn-small btn-sm factory-off <?php if( !$value ) {
127
- echo 'active';
128
- } ?>" data-value="0"><?php _e('Off', 'factory_forms_329') ?></button>
129
- <input type="checkbox" style="display: none" id="<?php echo $nameOnForm ?>" class="factory-result" name="<?php echo $nameOnForm ?>" value="<?= $value ?>" <?php if( $value ) {
130
- echo 'checked="checked"';
131
- } ?>" />
132
- </div>
133
- <?php if( $this->getOption('tumblerHint', false) ) { ?>
134
- <div class="factory-checkbox-tumbler-hint factory-tumbler-hint" style="display: none;">
135
- <div class="factory-tumbler-content">
136
- <?php echo $this->getOption('tumblerHint') ?>
137
- </div>
138
- </div>
139
- <?php } ?>
140
- <?php
141
- }
142
 
143
- /**
144
- * Shows the standart checkbox.
145
- *
146
- * @since 1.0.0
147
- * @return void
148
- */
149
- protected function defaultHtml()
150
- {
151
- $value = esc_attr($this->getValue());
152
- $nameOnForm = $this->getNameOnForm();
153
-
154
- $this->addHtmlAttr('type', 'checkbox');
155
- $this->addHtmlAttr('id', $nameOnForm);
156
- $this->addHtmlAttr('name', $nameOnForm);
157
- $this->addHtmlAttr('value', $value);
158
-
159
- if( $value ) {
160
- $this->addHtmlAttr('checked', 'checked');
 
 
161
  }
162
- $this->addCssClass('factory-default-way');
163
 
164
- ?>
165
- <input <?php $this->attrs() ?>/>
166
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  }
168
- }
8
  * value => a value to show in the control
9
  * default => a default value of the control if the "value" option is not specified
10
  *
11
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
12
+ * @copyright (c) 2018, Webcraftic Ltd
13
  *
14
  * @package factory-forms
15
  * @since 1.0.0
16
  */
 
17
 
18
+ // Exit if accessed directly
19
+ if( !defined('ABSPATH') ) {
20
+ exit;
21
+ }
22
 
23
+ if( !class_exists('Wbcr_FactoryForms400_CheckboxControl') ) {
 
 
24
 
25
+ class Wbcr_FactoryForms400_CheckboxControl extends Wbcr_FactoryForms400_Control {
 
 
 
26
 
27
+ public $type = 'checkbox';
 
 
 
 
 
 
 
28
 
29
+ public function getSubmitValue($name, $sub_name)
30
+ {
31
+ $name_on_form = $this->getNameOnForm($name);
32
 
33
+ return isset($_POST[$name_on_form]) && $_POST[$name_on_form] != 0
34
+ ? 1
35
+ : 0;
36
+ }
37
 
38
+ /**
39
+ * Shows the html markup of the control.
40
+ *
41
+ * @since 1.0.0
42
+ * @return void
43
+ */
44
+ public function html()
45
+ {
46
 
47
+ $events_on_data = $this->getOption('eventsOn', array());
48
+ $events_off_data = $this->getOption('eventsOff', array());
49
 
50
+ if( !empty($events_on_data) || !empty($events_off_data) ) {
51
 
52
+ $events_on_string_data = json_encode($events_on_data);
53
+ $events_off_string_data = json_encode($events_off_data);
 
 
 
54
 
55
+ $name_on_form = $this->getNameOnForm();
56
+ $value = $this->getValue();
 
 
 
 
 
57
 
58
+ $print_styles = '';
 
59
 
60
+ if( $value ) {
61
+ $current_events_data = $events_on_data;
62
+ } else {
63
+ $current_events_data = $events_off_data;
64
  }
65
+
66
+ foreach($current_events_data as $event_name => $selectors) {
67
+ if( $event_name == 'hide' ) {
68
+ $print_styles .= $selectors . '{display:none;}';
69
+ } else if( $event_name == 'show' ) {
70
+ $print_styles .= $selectors . '{display:block;}';
71
+ }
72
  }
 
 
 
 
 
73
 
74
+ echo '<style>' . $print_styles . '</style>';
75
+ ?>
76
+
77
+ <script>
78
+ // Onepress factory checkbox control events
79
+ if( void 0 === window.__factory_checkbox_control_events_on_data ) {
80
+ window.__factory_checkbox_control_events_on_data = {};
81
+ }
82
+ if( void 0 === window.__factory_checkbox_control_events_off_data ) {
83
+ window.__factory_checkbox_control_events_off_data = {};
84
+ }
85
+ window.__factory_checkbox_control_events_on_data['<?php echo $name_on_form ?>'] = <?= $events_on_string_data ?>;
86
+ window.__factory_checkbox_control_events_off_data['<?php echo $name_on_form ?>'] = <?= $events_off_string_data ?>;
87
+ </script>
88
+ <?php
89
+ }
90
 
91
+ if( 'buttons' == $this->getOption('way') ) {
92
+ $this->buttonsHtml();
93
+ } else {
94
+ $this->defaultHtml();
95
+ }
 
 
 
 
 
 
 
 
 
 
 
96
  }
97
 
98
+ /**
99
+ * Shows the Buttons Checkbox.
100
+ *
101
+ * @since 1.0.0
102
+ * @return void
103
+ */
104
+ protected function buttonsHtml()
105
+ {
106
+ $value = esc_attr($this->getValue());
107
+ $name_on_form = $this->getNameOnForm();
108
+
109
+ $this->addCssClass('factory-buttons-way');
110
+ $this->addCssClass('btn-group');
111
+
112
+ if( $this->getOption('tumbler', false) ) {
113
+ $this->addCssClass('factory-tumbler');
114
+ }
115
 
116
+ $tumbler_function = $this->getOption('tumblerFunction', false);
117
+ if( $tumbler_function ) {
118
+ $this->addHtmlData('tumbler-function', $tumbler_function);
119
+ }
120
 
121
+ if( $this->getOption('tumblerHint', false) ) {
122
+ $this->addCssClass('factory-has-tumbler-hint');
 
123
 
124
+ $delay = $this->getOption('tumblerDelay', 3000);
125
+ $this->addHtmlData('tumbler-delay', $delay);
126
+ }
127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
 
129
+ ?>
130
+ <div <?php $this->attrs() ?>>
131
+ <button type="button" class="btn btn-default btn-small btn-sm factory-on <?php if( $value ) {
132
+ echo 'active';
133
+ } ?>"><?php _e('On', 'wbcr_factory_forms_400') ?></button>
134
+ <button type="button" class="btn btn-default btn-small btn-sm factory-off <?php if( !$value ) {
135
+ echo 'active';
136
+ } ?>" data-value="0"><?php _e('Off', 'wbcr_factory_forms_400') ?></button>
137
+ <input type="checkbox" style="display: none" id="<?php echo $name_on_form ?>" class="factory-result" name="<?php echo $name_on_form ?>" value="<?= $value ?>" <?php if( $value ) {
138
+ echo 'checked="checked"';
139
+ } ?>" />
140
+ </div>
141
+ <?php if( $this->getOption('tumblerHint', false) ) { ?>
142
+ <div class="factory-checkbox-tumbler-hint factory-tumbler-hint" style="display: none;">
143
+ <div class="factory-tumbler-content">
144
+ <?php echo $this->getOption('tumblerHint') ?>
145
+ </div>
146
+ </div>
147
+ <?php } ?>
148
+ <?php
149
  }
 
150
 
151
+ /**
152
+ * Shows the standart checkbox.
153
+ *
154
+ * @since 1.0.0
155
+ * @return void
156
+ */
157
+ protected function defaultHtml()
158
+ {
159
+ $value = esc_attr($this->getValue());
160
+ $name_on_form = $this->getNameOnForm();
161
+
162
+ $this->addHtmlAttr('type', 'checkbox');
163
+ $this->addHtmlAttr('id', $name_on_form);
164
+ $this->addHtmlAttr('name', $name_on_form);
165
+ $this->addHtmlAttr('value', $value);
166
+
167
+ if( $value ) {
168
+ $this->addHtmlAttr('checked', 'checked');
169
+ }
170
+ $this->addCssClass('factory-default-way');
171
+
172
+ ?>
173
+ <input <?php $this->attrs() ?>/>
174
+ <?php
175
+ }
176
  }
177
+ }
libs/factory/forms/controls/color-and-opacity.php CHANGED
@@ -1,67 +1,88 @@
1
  <?php
2
- /**
3
- * Color and Opacity
4
- *
5
- * Main options:
6
- * name => a name of the control
7
- * value => a value to show in the control
8
- * default => a default value of the control if the "value" option is not specified
9
- *
10
- * @author Alex Kovalev <alex.kovalevv@gmail.com>
11
- * @copyright (c) 2013, OnePress Ltd
12
- *
13
- * @package core
14
- * @since 1.0.0
15
- */
16
 
17
- class FactoryForms329_ColorAndOpacityControl extends FactoryForms329_ComplexControl
18
- {
19
- public $type = 'color-and-opacity';
20
-
21
- public function __construct( $options, $form, $provider = null ) {
22
- parent::__construct( $options, $form, $provider );
23
-
24
- if ( !isset( $options['color']) ) $options['color'] = array();
25
- $options['color'] = array_merge($options['color'], array(
26
- 'name' => $this->options['name'] . '__color',
27
- 'default' => isset( $this->options['default'] ) ? $this->options['default']['color'] : '#1e8cbe',
28
- 'pickerTarget' => '.factory-control-' . $this->options['name'] . ' .factory-picker-target'
29
- ));
30
-
31
- if ( !isset( $options['opacity']) ) $options['opacity'] = array();
32
- $options['opacity'] = array_merge($options['opacity'], array(
33
- 'name' => $this->options['name'] . '__opacity',
34
- 'default' => isset( $this->options['default'] ) ? $this->options['default']['opacity'] : 100,
35
- 'units' => '%',
36
- 'range' => array(0, 100),
37
- 'way' => 'slider'
38
- ));
39
-
40
- $this->color = new FactoryForms329_ColorControl( $options['color'], $form, $provider );
41
- $this->opacity = new FactoryForms329_IntegerControl( $options['opacity'], $form, $provider );
42
-
43
- $this->innerControls = array( $this->color, $this->opacity );
44
- }
45
-
46
- /**
47
- * Shows the html markup of the control.
48
- *
49
- * @since 1.0.0
50
- * @return void
51
- */
52
- public function html( ) {
53
- ?>
54
- <div <?php $this->attrs() ?>>
55
- <div class="factory-control-row">
56
- <div class="factory-color-wrap">
57
- <?php $this->color->html() ?>
58
- </div>
59
- <div class="factory-opacity-wrap">
60
- <?php $this->opacity->html() ?>
61
- </div>
62
- </div>
63
- <div class="factory-picker-target"></div>
64
- </div>
65
- <?php
66
- }
67
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
+ /**
4
+ * Color and Opacity
5
+ *
6
+ * Main options:
7
+ * name => a name of the control
8
+ * value => a value to show in the control
9
+ * default => a default value of the control if the "value" option is not specified
10
+ *
11
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
12
+ * @copyright (c) 2018, Webcraftic Ltd
13
+ *
14
+ * @package core
15
+ * @since 1.0.0
16
+ */
17
+
18
+ // Exit if accessed directly
19
+ if( !defined('ABSPATH') ) {
20
+ exit;
21
+ }
22
+
23
+ if( !class_exists('Wbcr_FactoryForms400_ColorAndOpacityControl') ) {
24
+ }
25
+
26
+ class Wbcr_FactoryForms400_ColorAndOpacityControl extends Wbcr_FactoryForms400_ComplexControl {
27
+
28
+ public $type = 'color-and-opacity';
29
+
30
+ public function __construct($options, $form, $provider = null)
31
+ {
32
+ parent::__construct($options, $form, $provider);
33
+
34
+ if( !isset($options['color']) ) {
35
+ $options['color'] = array();
36
+ }
37
+
38
+ $options['color'] = array_merge($options['color'], array(
39
+ 'name' => $this->options['name'] . '__color',
40
+ 'default' => isset($this->options['default'])
41
+ ? $this->options['default']['color']
42
+ : '#1e8cbe',
43
+ 'pickerTarget' => '.factory-control-' . $this->options['name'] . ' .factory-picker-target'
44
+ ));
45
+
46
+ if( !isset($options['opacity']) ) {
47
+ $options['opacity'] = array();
48
+ }
49
+
50
+ $options['opacity'] = array_merge($options['opacity'], array(
51
+ 'name' => $this->options['name'] . '__opacity',
52
+ 'default' => isset($this->options['default'])
53
+ ? $this->options['default']['opacity']
54
+ : 100,
55
+ 'units' => '%',
56
+ 'range' => array(0, 100),
57
+ 'way' => 'slider'
58
+ ));
59
+
60
+ $this->color = new Wbcr_FactoryForms400_ColorControl($options['color'], $form, $provider);
61
+ $this->opacity = new Wbcr_FactoryForms400_IntegerControl($options['opacity'], $form, $provider);
62
+
63
+ $this->innerControls = array($this->color, $this->opacity);
64
+ }
65
+
66
+ /**
67
+ * Shows the html markup of the control.
68
+ *
69
+ * @since 1.0.0
70
+ * @return void
71
+ */
72
+ public function html()
73
+ {
74
+ ?>
75
+ <div <?php $this->attrs() ?>>
76
+ <div class="factory-control-row">
77
+ <div class="factory-color-wrap">
78
+ <?php $this->color->html() ?>
79
+ </div>
80
+ <div class="factory-opacity-wrap">
81
+ <?php $this->opacity->html() ?>
82
+ </div>
83
+ </div>
84
+ <div class="factory-picker-target"></div>
85
+ </div>
86
+ <?php
87
+ }
88
+ }
libs/factory/forms/controls/color.php CHANGED
@@ -9,42 +9,54 @@
9
  * default => a default value of the control if the "value" option is not specified
10
  *
11
  * @author Alex Kovalev <alex.kovalevv@gmail.com>
12
- * @copyright (c) 2013, OnePress Ltd
13
  *
14
  * @package core
15
  * @since 1.0.0
16
  */
17
- class FactoryForms329_ColorControl extends FactoryForms329_Control {
18
-
19
- public $type = 'color';
20
-
21
- /**
22
- * Shows the html markup of the control.
23
- *
24
- * @since 1.0.0
25
- * @return void
26
- */
27
- public function html()
28
- {
29
- $name = $this->getNameOnForm();
30
- $value = esc_attr($this->getValue());
31
-
32
- if( !$value )
33
- $value = '#1e8cbe';
34
-
35
- // the "pickerTarget" options allows to select element where the palette will be shown
36
- $pickerTarget = $this->getOption('pickerTarget');
37
- if( !empty($pickerTarget) )
38
- $this->addHtmlData('picker-target', $pickerTarget);
39
-
40
- ?>
41
- <div <?php $this->attrs() ?>>
42
- <div class="factory-background" <?php echo(!empty($value)
43
- ? 'style="background:' . $value . ';"'
44
- : ''); ?>></div>
45
- <div class="factory-pattern"></div>
46
- <input type="text" id="<?php echo $name; ?>" name="<?php echo $name; ?>" class="factory-input-text factory-color-hex" value="<?php echo $value; ?>">
47
- </div>
48
- <?php
49
- }
50
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  * default => a default value of the control if the "value" option is not specified
10
  *
11
  * @author Alex Kovalev <alex.kovalevv@gmail.com>
12
+ * @copyright (c) 2018, Webcraftic Ltd
13
  *
14
  * @package core
15
  * @since 1.0.0
16
  */
17
+
18
+ // Exit if accessed directly
19
+ if( !defined('ABSPATH') ) {
20
+ exit;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  }
22
+
23
+ if( !class_exists('Wbcr_FactoryForms400_ColorControl') ) {
24
+
25
+ class Wbcr_FactoryForms400_ColorControl extends Wbcr_FactoryForms400_Control {
26
+
27
+ public $type = 'color';
28
+
29
+ /**
30
+ * Shows the html markup of the control.
31
+ *
32
+ * @since 1.0.0
33
+ * @return void
34
+ */
35
+ public function html()
36
+ {
37
+ $name = $this->getNameOnForm();
38
+ $value = esc_attr($this->getValue());
39
+
40
+ if( !$value ) {
41
+ $value = '#1e8cbe';
42
+ }
43
+
44
+ // the "pickerTarget" options allows to select element where the palette will be shown
45
+ $picker_target = $this->getOption('pickerTarget');
46
+
47
+ if( !empty($picker_target) ) {
48
+ $this->addHtmlData('picker-target', $picker_target);
49
+ }
50
+
51
+ ?>
52
+ <div <?php $this->attrs() ?>>
53
+ <div class="factory-background" <?php echo(!empty($value)
54
+ ? 'style="background:' . $value . ';"'
55
+ : ''); ?>></div>
56
+ <div class="factory-pattern"></div>
57
+ <input type="text" id="<?php echo $name; ?>" name="<?php echo $name; ?>" class="factory-input-text factory-color-hex" value="<?php echo $value; ?>">
58
+ </div>
59
+ <?php
60
+ }
61
+ }
62
+ }
libs/factory/forms/controls/customs/html.php CHANGED
@@ -1,37 +1,45 @@
1
  <?php
2
-
3
  /**
4
  * Html Markup
5
  *
6
- * @author Paul Kashtanoff <paul@byonepress.com>
7
- * @copyright (c) 2013, OnePress Ltd
8
  *
9
  * @package factory-forms
10
  * @since 1.0.0
11
  */
12
- class FactoryForms329_Html extends FactoryForms329_CustomElement {
13
 
14
- public $type = 'html';
 
 
 
 
 
15
 
16
- /**
17
- * Shows the html markup of the element.
18
- *
19
- * @since 1.0.0
20
- * @return void
21
- */
22
- public function html()
23
- {
24
- $html = $this->getOption('html', '');
25
 
26
- // if the data options is a valid callback for an object method
27
- if( (is_array($html) && count($html) == 2 && gettype($html[0]) == 'object') || function_exists($html) ) {
28
 
29
- call_user_func($html, $this);
 
 
 
 
 
 
 
 
30
 
31
- return;
32
- }
33
 
34
- // if the data options is an array of values
35
- echo $html;
 
 
 
 
 
 
36
  }
37
  }
1
  <?php
 
2
  /**
3
  * Html Markup
4
  *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
  *
8
  * @package factory-forms
9
  * @since 1.0.0
10
  */
 
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( !class_exists('Wbcr_FactoryForms400_Html') ) {
18
 
19
+ class Wbcr_FactoryForms400_Html extends Wbcr_FactoryForms400_CustomElement {
 
 
 
 
 
 
 
 
20
 
21
+ public $type = 'html';
 
22
 
23
+ /**
24
+ * Shows the html markup of the element.
25
+ *
26
+ * @since 1.0.0
27
+ * @return void
28
+ */
29
+ public function html()
30
+ {
31
+ $html = $this->getOption('html', '');
32
 
33
+ // if the data options is a valid callback for an object method
34
+ if( (is_array($html) && count($html) == 2 && gettype($html[0]) == 'object') || function_exists($html) ) {
35
 
36
+ call_user_func($html, $this);
37
+
38
+ return;
39
+ }
40
+
41
+ // if the data options is an array of values
42
+ echo $html;
43
+ }
44
  }
45
  }
libs/factory/forms/controls/customs/separator.php CHANGED
@@ -1,27 +1,35 @@
1
  <?php
2
- /**
3
- * Html Markup
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package factory-forms
9
- * @since 1.0.0
10
- */
11
 
12
- class FactoryForms329_Separator extends FactoryForms329_CustomElement
13
- {
14
- public $type = 'separator';
15
-
16
- /**
17
- * Shows the html markup of the element.
18
- *
19
- * @since 1.0.0
20
- * @return void
21
- */
22
- public function html( ) {
23
- ?>
24
- <div <?php $this->attrs()?>></div>
25
- <?php
26
- }
27
- }
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * Separator Markup
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
+ */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( !class_exists('Wbcr_FactoryForms400_Separator') ) {
18
+ class Wbcr_FactoryForms400_Separator extends Wbcr_FactoryForms400_CustomElement {
19
+
20
+ public $type = 'separator';
21
+
22
+ /**
23
+ * Shows the html markup of the element.
24
+ *
25
+ * @since 1.0.0
26
+ * @return void
27
+ */
28
+ public function html()
29
+ {
30
+ ?>
31
+ <div <?php $this->attrs() ?>></div>
32
+ <?php
33
+ }
34
+ }
35
+ }
libs/factory/forms/controls/datepicker-range.php CHANGED
@@ -2,8 +2,9 @@
2
 
3
  /**
4
  * Datepicker range control
5
- * @author Webcraftic <wordpress.webraftic@gmail.com>
6
- * @copyright (c) 22.11.2017, Webcraftic
 
7
  *
8
  * Example:
9
  * 'type' => 'datetimepicker-range',
@@ -22,75 +23,84 @@
22
  * @package factory-forms
23
  * @since 1.0.0
24
  */
25
- class FactoryForms329_DatepickerRangeControl extends FactoryForms329_ComplexControl {
26
 
27
- public $type = 'datetimepicker-range';
 
 
 
28
 
29
- public function __construct($options, $form, $provider = null)
30
- {
31
- parent::__construct($options, $form, $provider);
32
 
33
- if( !isset($options['range_1']) ) {
34
- $options['range_1'] = array();
35
- }
36
 
37
- $options['range_1'] = array_merge(array(
38
- 'scope' => isset($options['scope'])
39
- ? $options['scope']
40
- : 'factory',
41
- 'name' => $this->options['name'] . '__range_1',
42
- 'format' => 'YYYY/MM/DD HH:mm',
43
- 'default' => date('Y/m/d H:i')
44
- ), $options['range_1']);
45
-
46
- if( !isset($options['range_2']) ) {
47
- $options['range_2'] = array();
48
- }
49
 
50
- $options['range_2'] = array_merge(array(
51
- 'scope' => isset($options['scope'])
52
- ? $options['scope']
53
- : 'factory',
54
- 'name' => $this->options['name'] . '__range_2',
55
- 'format' => 'YYYY/MM/DD HH:mm',
56
- 'default' => date('Y/m/d H:i', strtotime("+1 month"))
57
- ), $options['range_2']);
58
-
59
- $this->range_1 = new FactoryForms329_TextboxControl($options['range_1'], $form, $provider);
60
- $this->range_2 = new FactoryForms329_TextboxControl($options['range_2'], $form, $provider);
61
- $this->innerControls = array($this->range_1, $this->range_2);
62
-
63
- foreach($this->innerControls as $key => $control) {
64
- $control->addCssClass('factory-datetimepicker-range-' . $key);
65
- $control->addHtmlAttr('data-date-show-today-button', 'true');
66
- $control->addHtmlAttr('data-date-show-clear', 'true');
67
-
68
- $format = $control->getOption('format');
69
-
70
- if( !empty($format) ) {
71
- //'YYYY/MM/DD HH:mm'
72
- $control->addHtmlAttr('data-date-format', $format);
73
  }
74
 
75
- $locale_parts = explode('_', get_locale());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
 
77
- $locale = isset($locale_parts[0])
78
- ? $locale_parts[0]
79
- : 'en';
 
80
 
81
- $control->addHtmlAttr('data-date-locale', $locale);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  }
83
- }
84
 
85
- public function render()
86
- {
87
- ?>
88
- <div class='input-group date factory-datetimepicker-input-group' style="display:inline-block; width: 200px">
89
- <?php $this->range_1->render(); ?>
90
- </div>
91
- <div class='input-group date factory-datetimepicker-input-group' style="display:inline-block; width: 200px">
92
- <?php $this->range_2->render(); ?>
93
- </div>
94
- <?php
 
95
  }
96
- }
2
 
3
  /**
4
  * Datepicker range control
5
+ *
6
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
7
+ * @copyright (c) 2018, Webcraftic Ltd
8
  *
9
  * Example:
10
  * 'type' => 'datetimepicker-range',
23
  * @package factory-forms
24
  * @since 1.0.0
25
  */
 
26
 
27
+ // Exit if accessed directly
28
+ if( !defined('ABSPATH') ) {
29
+ exit;
30
+ }
31
 
32
+ if( !class_exists('Wbcr_FactoryForms400_DatepickerRangeControl') ) {
 
 
33
 
34
+ class Wbcr_FactoryForms400_DatepickerRangeControl extends Wbcr_FactoryForms400_ComplexControl {
 
 
35
 
36
+ public $type = 'datetimepicker-range';
37
+
38
+ public function __construct($options, $form, $provider = null)
39
+ {
40
+ parent::__construct($options, $form, $provider);
 
 
 
 
 
 
 
41
 
42
+ if( !isset($options['range_1']) ) {
43
+ $options['range_1'] = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  }
45
 
46
+ $options['range_1'] = array_merge(array(
47
+ 'scope' => isset($options['scope'])
48
+ ? $options['scope']
49
+ : 'factory',
50
+ 'name' => $this->options['name'] . '__range_1',
51
+ 'format' => 'YYYY/MM/DD HH:mm',
52
+ 'default' => date('Y/m/d H:i')
53
+ ), $options['range_1']);
54
+
55
+ if( !isset($options['range_2']) ) {
56
+ $options['range_2'] = array();
57
+ }
58
+
59
+ $options['range_2'] = array_merge(array(
60
+ 'scope' => isset($options['scope'])
61
+ ? $options['scope']
62
+ : 'factory',
63
+ 'name' => $this->options['name'] . '__range_2',
64
+ 'format' => 'YYYY/MM/DD HH:mm',
65
+ 'default' => date('Y/m/d H:i', strtotime("+1 month"))
66
+ ), $options['range_2']);
67
+
68
+ $this->range_1 = new Wbcr_FactoryForms400_TextboxControl($options['range_1'], $form, $provider);
69
+ $this->range_2 = new Wbcr_FactoryForms400_TextboxControl($options['range_2'], $form, $provider);
70
+ $this->inner_controls = array($this->range_1, $this->range_2);
71
 
72
+ foreach($this->inner_controls as $key => $control) {
73
+ $control->addCssClass('factory-datetimepicker-range-' . $key);
74
+ $control->addHtmlAttr('data-date-show-today-button', 'true');
75
+ $control->addHtmlAttr('data-date-show-clear', 'true');
76
 
77
+ $format = $control->getOption('format');
78
+
79
+ if( !empty($format) ) {
80
+ //'YYYY/MM/DD HH:mm'
81
+ $control->addHtmlAttr('data-date-format', $format);
82
+ }
83
+
84
+ $locale_parts = explode('_', get_locale());
85
+
86
+ $locale = isset($locale_parts[0])
87
+ ? $locale_parts[0]
88
+ : 'en';
89
+
90
+ $control->addHtmlAttr('data-date-locale', $locale);
91
+ }
92
  }
 
93
 
94
+ public function render()
95
+ {
96
+ ?>
97
+ <div class='input-group date factory-datetimepicker-input-group' style="display:inline-block; width: 200px">
98
+ <?php $this->range_1->render(); ?>
99
+ </div>
100
+ <div class='input-group date factory-datetimepicker-input-group' style="display:inline-block; width: 200px">
101
+ <?php $this->range_2->render(); ?>
102
+ </div>
103
+ <?php
104
+ }
105
  }
106
+ }
libs/factory/forms/controls/dropdown-and-colors.php CHANGED
@@ -5,14 +5,14 @@
5
  *
6
  * Main options:
7
  * name => a name of the control
8
- * // see FactoryForms329_DropdownControl
9
  * 'dropdown' => array(
10
  * // a callback to return items or an array of items to select
11
  * 'data' => OPanda_ThemeManager::getThemes(OPanda_Items::getCurrentItemName(), 'dropdown'),
12
  * 'default' => 'default',
13
  * 'value' => 'value' // a value to show in the control
14
  * ),
15
- * // see FactoryForms329_RadioColorsControl
16
  * 'colors' => array(
17
  * // a callback to return items or an array of items to select
18
  * 'data' => array(
@@ -25,83 +25,92 @@
25
  * 'default' => 'default', // a default value of the control if the "value" option is not specified
26
  * ),
27
  *
28
- * @author Alex Kovalevv <alex.kovalevv@gmail.com>
29
- * @copyright (c) 2017, OnePress Ltd
30
  *
31
  * @package factory-forms
32
  * @since 1.0.0
33
  */
34
- class FactoryForms329_DropdownAndColorsControl extends FactoryForms329_ComplexControl {
35
 
36
- public $type = 'dropdown-and-colors';
 
 
 
37
 
38
- public function __construct($options, $form, $provider = null)
39
- {
40
- parent::__construct($options, $form, $provider);
41
 
42
- if( !isset($options['dropdown']) ) {
43
- $options['dropdown'] = array();
44
- }
45
 
46
- $options['dropdown'] = array_merge($options['dropdown'], array(
47
- 'scope' => isset($options['scope'])
48
- ? $options['scope']
49
- : 'opanda',
50
- 'name' => $this->options['name'] . '__dropdown',
51
- ));
52
 
53
- if( !isset($options['colors']) ) {
54
- $options['colors'] = array();
55
- }
 
 
 
 
 
 
 
56
 
57
- $options['colors'] = array_merge($options['colors'], array(
58
- 'scope' => isset($options['scope'])
59
- ? $options['scope']
60
- : 'opanda',
61
- 'name' => $this->options['name'] . '__colors',
62
- ));
63
 
64
- $this->dropdown = new FactoryForms329_DropdownControl($options['dropdown'], $form, $provider);
65
- $this->colors = new FactoryForms329_RadioColorsControl($options['colors'], $form, $provider);
66
- $this->innerControls = array($this->dropdown, $this->colors);
 
 
 
67
 
68
- $colors = $this->colors->getOption('data');
 
 
69
 
70
- if( empty($colors) ) {
71
- $dropdownValue = $this->dropdown->getValue();
72
- $dOptions = $this->dropdown->getOption('data', array());
73
 
74
- foreach($dOptions as $option) {
75
- if( $option['value'] == $dropdownValue && isset($option['data']['colors']) ) {
76
- $colorsOptions = json_decode(htmlspecialchars_decode($option['data']['colors']));
77
- $this->colors->setOption('data', $colorsOptions);
 
 
 
 
 
78
  }
79
  }
80
  }
81
- }
82
 
83
- /**
84
- * Shows the html markup of the control.
85
- *
86
- * @since 1.0.0
87
- * @return void
88
- */
89
- public function html()
90
- {
91
- ?>
92
- <script>
93
- </script>
94
- <div <?php $this->attrs() ?>>
95
- <div class="factory-control-row">
96
- <div class="factory-dropdown-wrap">
97
- <?php $this->dropdown->render(); ?>
98
- </div>
99
- <div class="factory-colors-wrap">
100
- <?php $this->colors->render(); ?>
 
101
  </div>
 
102
  </div>
103
- <div class="factory-picker-target"></div>
104
- </div>
105
- <?php
106
  }
107
- }
5
  *
6
  * Main options:
7
  * name => a name of the control
8
+ * // see FactoryForms400_DropdownControl
9
  * 'dropdown' => array(
10
  * // a callback to return items or an array of items to select
11
  * 'data' => OPanda_ThemeManager::getThemes(OPanda_Items::getCurrentItemName(), 'dropdown'),
12
  * 'default' => 'default',
13
  * 'value' => 'value' // a value to show in the control
14
  * ),
15
+ * // see FactoryForms400_RadioColorsControl
16
  * 'colors' => array(
17
  * // a callback to return items or an array of items to select
18
  * 'data' => array(
25
  * 'default' => 'default', // a default value of the control if the "value" option is not specified
26
  * ),
27
  *
28
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
29
+ * @copyright (c) 2018, Webcraftic Ltd
30
  *
31
  * @package factory-forms
32
  * @since 1.0.0
33
  */
 
34
 
35
+ // Exit if accessed directly
36
+ if( !defined('ABSPATH') ) {
37
+ exit;
38
+ }
39
 
40
+ if( !class_exists('Wbcr_FactoryForms400_DropdownAndColorsControl') ) {
41
+
42
+ class Wbcr_FactoryForms400_DropdownAndColorsControl extends Wbcr_FactoryForms400_ComplexControl {
43
 
44
+ public $type = 'dropdown-and-colors';
 
 
45
 
46
+ public function __construct($options, $form, $provider = null)
47
+ {
48
+ parent::__construct($options, $form, $provider);
 
 
 
49
 
50
+ if( !isset($options['dropdown']) ) {
51
+ $options['dropdown'] = array();
52
+ }
53
+
54
+ $options['dropdown'] = array_merge($options['dropdown'], array(
55
+ 'scope' => isset($options['scope'])
56
+ ? $options['scope']
57
+ : 'opanda',
58
+ 'name' => $this->options['name'] . '__dropdown',
59
+ ));
60
 
61
+ if( !isset($options['colors']) ) {
62
+ $options['colors'] = array();
63
+ }
 
 
 
64
 
65
+ $options['colors'] = array_merge($options['colors'], array(
66
+ 'scope' => isset($options['scope'])
67
+ ? $options['scope']
68
+ : 'opanda',
69
+ 'name' => $this->options['name'] . '__colors',
70
+ ));
71
 
72
+ $this->dropdown = new Wbcr_FactoryForms400_DropdownControl($options['dropdown'], $form, $provider);
73
+ $this->colors = new Wbcr_FactoryForms400_RadioColorsControl($options['colors'], $form, $provider);
74
+ $this->inner_controls = array($this->dropdown, $this->colors);
75
 
76
+ $colors = $this->colors->getOption('data');
 
 
77
 
78
+ if( empty($colors) ) {
79
+ $dropdown_value = $this->dropdown->getValue();
80
+ $dOptions = $this->dropdown->getOption('data', array());
81
+
82
+ foreach($dOptions as $option) {
83
+ if( $option['value'] == $dropdown_value && isset($option['data']['colors']) ) {
84
+ $colors_options = json_decode(htmlspecialchars_decode($option['data']['colors']));
85
+ $this->colors->setOption('data', $colors_options);
86
+ }
87
  }
88
  }
89
  }
 
90
 
91
+ /**
92
+ * Shows the html markup of the control.
93
+ *
94
+ * @since 1.0.0
95
+ * @return void
96
+ */
97
+ public function html()
98
+ {
99
+ ?>
100
+ <script>
101
+ </script>
102
+ <div <?php $this->attrs() ?>>
103
+ <div class="factory-control-row">
104
+ <div class="factory-dropdown-wrap">
105
+ <?php $this->dropdown->render(); ?>
106
+ </div>
107
+ <div class="factory-colors-wrap">
108
+ <?php $this->colors->render(); ?>
109
+ </div>
110
  </div>
111
+ <div class="factory-picker-target"></div>
112
  </div>
113
+ <?php
114
+ }
 
115
  }
116
+ }
libs/factory/forms/controls/dropdown.php CHANGED
@@ -9,371 +9,380 @@
9
  * default => a default value of the control if the "value" option is not specified
10
  * items => a callback to return items or an array of items to select
11
  *
12
- * @author Paul Kashtanoff <paul@byonepress.com>
13
- * @copyright (c) 2013, OnePress Ltd
14
  *
15
  * @package factory-forms
16
  * @since 1.0.0
17
  */
18
- class FactoryForms329_DropdownControl extends FactoryForms329_Control {
19
 
20
- public $type = 'dropdown';
 
 
 
21
 
22
- /**
23
- * Returns a set of available items for the list.
24
- *
25
- * @since 1.0.0
26
- * @return mixed[]
27
- */
28
- private function getItems()
29
- {
30
- $data = $this->getOption('data', array());
31
 
32
- // if the data options is a valid callback for an object method
33
- if( is_array($data) && count($data) == 2 && gettype($data[0]) == 'object' ) {
34
 
35
- return call_user_func($data);
36
- // if the data options is a valid callback for a function
37
- } elseif( gettype($data) == 'string' ) {
38
 
39
- return $data();
40
- }
 
 
 
 
 
 
 
41
 
42
- // if the data options is an array of values
43
- return $data;
44
- }
 
 
45
 
46
- /**
47
- * Returns true, if the data should be loaded via ajax.
48
- *
49
- * @since 1.0.0
50
- * @return bool
51
- */
52
- protected function isAjax()
53
- {
54
 
55
- $data = $this->getOption('data', array());
 
 
 
 
 
 
 
56
 
57
- return is_array($data) && isset($data['ajax']);
58
- }
59
 
60
- /**
61
- * Shows the html markup of the control.
62
- *
63
- * @since 1.0.0
64
- * @return void
65
- */
66
- public function html()
67
- {
68
 
69
- $way = $this->getOption('way', 'default');
70
- $this->addHtmlData('way', $way);
 
 
 
 
 
 
71
 
72
- $eventsData = $this->getOption('events', array());
 
73
 
74
- if( !empty($eventsData) ) {
75
- $eventsStringData = json_encode($eventsData);
76
- $nameOnForm = $this->getNameOnForm();
77
 
78
- $value = $this->getValue();
 
 
79
 
80
- if( empty($value) || (is_array($value) && empty($value[0])) ) {
81
- $value = null;
82
- }
83
 
84
- if( !empty($value) && isset($eventsData[$value]) && is_array($eventsData[$value]) ) {
85
- $printStyles = '';
86
- foreach($eventsData[$value] as $eventName => $selectors) {
87
- if( $eventName == 'hide' ) {
88
- $printStyles .= $selectors . '{display:none;}';
89
- } else if( $eventName == 'show' ) {
90
- $printStyles .= $selectors . '{display:block;}';
 
 
 
 
 
91
  }
 
 
92
  }
 
93
 
94
- echo '<style>' . $printStyles . '</style>';
 
 
 
 
 
 
 
95
  }
96
- ?>
97
 
98
- <script>
99
- // Onepress factory dropdown control events
100
- if( void 0 === window.factory_dropdown_control_events_data ) {
101
- window.factory_dropdown_control_events_data = {};
102
- }
103
- window.factory_dropdown_control_events_data['<?php echo $nameOnForm ?>'] = <?= $eventsStringData ?>;
104
- </script>
105
- <?php
106
- }
107
- if( $this->isAjax() ) {
108
 
109
- $data = $this->getOption('data', array());
110
- $ajaxId = 'factory-dropdown-' . rand(1000000, 9999999);
111
 
112
- $value = $this->getValue();
 
 
113
 
114
- if( empty($value) || (is_array($value) && empty($value[0])) ) {
115
- $value = null;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  }
117
 
118
- ?>
119
- <div class="factory-ajax-loader <?php echo $ajaxId . '-loader'; ?>"></div>
120
- <script>
121
- window['<?php echo $ajaxId ?>'] = {
122
- 'loader': '.<?php echo $ajaxId . '-loader' ?>',
123
- 'url': '<?php echo $data['url'] ?>',
124
- 'data': <?php echo json_encode( $data['data'] ) ?>,
125
- 'selected': '<?php echo $value ?>',
126
- 'emptyList': '<?php echo $this->getOption('empty', __('The list is empty.', 'factory_forms_329') ) ?>'
127
- };
128
- </script>
129
- <?php
130
-
131
- $this->addHtmlData('ajax', true);
132
- $this->addHtmlData('ajax-data-id', $ajaxId);
133
- $this->addCssClass('factory-hidden');
134
  }
135
 
136
- if( 'buttons' == $way ) {
137
- $this->buttonsHtml();
138
- } elseif( 'ddslick' == $way ) {
139
- $this->ddslickHtml();
140
- } else {
141
- $this->defaultHtml();
142
- }
143
- }
 
 
144
 
145
- /**
146
- * Shows the Buttons Dropdown.
147
- *
148
- * @since 1.0.0
149
- * @return void
150
- */
151
- protected function buttonsHtml()
152
- {
153
- $items = $this->getItems();
154
- $value = $this->getValue();
155
-
156
- $nameOnForm = $this->getNameOnForm();
157
-
158
- $this->addCssClass('factory-buttons-way');
159
-
160
- ?>
161
- <div <?php $this->attrs() ?>>
162
- <div class="btn-group factory-buttons-group">
163
- <?php foreach($items as $item) { ?>
164
- <button type="button" class="btn btn-default btn-small factory-<?php echo $item[0] ?> <?php if( $value == $item[0] ) {
165
- echo 'active';
166
- } ?>" data-value="<?php echo $item[0] ?>"><?php echo $item[1] ?></button>
167
- <?php } ?>
168
- <input type="hidden" id="<?php echo $nameOnForm ?>" class="factory-result" name="<?php echo $nameOnForm ?>" value="<?php echo $value ?>"/>
169
- </div>
170
- <div class="factory-hints">
171
- <?php foreach($items as $item) { ?>
172
- <?php if( isset($item[2]) ) { ?>
173
- <div class="factory-hint factory-hint-<?php echo $item[0] ?>" <?php if( $value !== $item[0] ) {
174
- echo 'style="display: none;"';
175
- } ?>><?php echo $item[2] ?></div>
176
- <?php } ?>
177
- <?php } ?>
178
- </div>
179
- </div>
180
- <?php
181
- }
182
 
183
- /**
184
- * Shows the ddSlick dropbox.
185
- *
186
- * @since 3.2.8
187
- * @return void
188
- */
189
- protected function ddslickHtml()
190
- {
191
- $items = $this->getItems();
192
- $value = $this->getValue();
193
-
194
- $nameOnForm = $this->getNameOnForm();
195
-
196
- $this->addCssClass('factory-ddslick-way');
197
- $this->addHtmlData('name', $nameOnForm);
198
-
199
- $this->addHtmlData('width', $this->getOption('width', 300));
200
- $this->addHtmlData('align', $this->getOption('imagePosition', 'right'));
201
-
202
- ?>
203
- <div <?php $this->attrs() ?>>
204
- <script>
205
- //Dropdown plugin data
206
- var factory_<?php echo $nameOnForm ?>_data = [
207
- <?php foreach ( $items as $item ) { ?>
208
- {
209
- text: "<?php echo $item['title'] ?>",
210
- value: "<?php echo $item['value'] ?>",
211
- selected: <?php if ( $value == $item['value'] ) { echo 'true'; } else { echo 'false'; } ?>,
212
- description: "<?php echo ( isset( $item['hint'] ) ? $item['hint'] : '' ); ?>",
213
- imageSrc: "<?php echo ( isset( $item['image'] ) ? $item['image'] : '' ); ?>",
214
- imageHoverSrc: "<?php echo ( isset( $item['hover'] ) ? $item['hover'] : '' ); ?>"
215
- },
216
- <?php } ?>
217
- ];
218
- </script>
219
- <div class="factory-ddslick"></div>
220
- <input type="hidden" class="factory-result" id="<?php echo $nameOnForm ?>" name="<?php echo $nameOnForm ?>" value="<?php echo $value ?>"/>
221
- </div>
222
- <?php
223
- }
224
 
225
- /**
226
- * Shows the standart dropdown.
227
- *
228
- * @since 1.3.1
229
- * @return void
230
- */
231
- protected function defaultHtml()
232
- {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
 
234
- $items = $this->getItems();
235
- $value = esc_attr($this->getValue());
 
 
 
 
 
 
 
 
236
 
237
- $nameOnForm = $this->getNameOnForm();
238
 
239
- $this->addHtmlAttr('id', $nameOnForm);
240
- $this->addHtmlAttr('name', $nameOnForm);
241
- $this->addCssClass('form-control');
242
 
243
- $hasGroups = $this->getOption('hasGroups', true);
244
- $hasHints = $this->getOption('hasHints', false);
245
 
246
- foreach($items as $item) {
247
- if( !isset($item['hint']) ) {
248
- continue;
249
- }
250
- if( empty($item['hint']) ) {
251
- continue;
252
- }
253
- $hasHints = true;
254
- break;
 
 
 
 
 
 
 
 
 
 
 
 
255
  }
256
 
257
- $isEmpty = $this->isAjax() || empty($items);
258
- $emptyList = $this->getOption('empty', __('- empty -', 'factory_forms_329'));
259
-
260
- ?>
261
-
262
- <select <?php $this->attrs() ?>>
263
- <?php if( $isEmpty ) { ?>
264
-
265
- <option value='' class="factory-empty-option">
266
- <?php echo $emptyList ?>
267
- </option>
268
-
269
- <?php } else { ?>
270
-
271
- <?php $this->printItems($items, $value) ?>
272
-
273
- <?php } ?>
274
- </select>
275
-
276
- <?php if( $hasHints ) { ?>
277
- <div class="factory-hints">
278
- <?php foreach($items as $item) {
279
-
280
- $hint = isset($item[2])
281
- ? $item[2]
282
- : null;
283
- $hint = isset($item['hint'])
284
- ? $item['hint']
285
- : null;
286
- $value = isset($item[0])
287
- ? esc_attr($item[0])
288
- : null;
289
- $value = isset($item['value'])
290
- ? esc_attr($item['value'])
291
- : null;
292
-
293
- if( !empty($hint) ) { ?>
294
- <div style="display: none;" class="factory-hint factory-hint-<?php echo $value ?>" <?php if( $value !== $value ) {
295
- echo 'style="display: none;"';
296
- } ?>><?php echo $hint ?></div>
297
- <?php }
298
- } ?>
299
- </div>
300
- <?php } ?>
301
- <?php
302
- }
303
 
304
- protected function printItems($items, $selected = null)
305
- {
306
 
307
- foreach($items as $item) {
308
 
309
- $subitems = array();
310
- $data = null;
 
311
 
312
- // this item is an associative array
313
- if( isset($item['type']) || isset($item['value']) ) {
314
 
315
- $type = isset($item['type'])
316
- ? $item['type']
317
- : 'option';
318
- if( 'group' === $type ) {
319
- $subitems = isset($item['items'])
320
- ? $item['items']
321
- : array();
322
  }
 
 
 
 
 
 
323
 
324
- $value = isset($item['value'])
325
- ? $item['value']
326
- : '';
327
- $title = isset($item['title'])
328
- ? $item['title']
329
- : __('- empty -', 'factory_forms_329');
330
 
331
- $data = isset($item['data'])
332
- ? $item['data']
333
- : null;
334
- } else {
335
 
336
- $type = (count($item) == 3 && $item[0] === 'group')
337
- ? 'group'
338
- : 'option';
339
- if( 'group' === $type ) {
340
- $subitems = $item[2];
341
- }
342
 
343
- $title = esc_html($item[1]);
344
- $value = esc_attr($item[0]);
345
- }
346
 
347
- if( 'group' === $type ) {
348
- ?>
349
 
350
- <optgroup label="<?php echo $item[1] ?>">
351
- <?php $this->printItems($subitems, $selected); ?>
352
- </optgroup>
353
 
354
- <?php
355
- } else {
356
 
357
- $attr = ($selected == $value)
358
- ? 'selected="selected"'
359
- : '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
360
 
361
- $strData = '';
362
- if( !empty($data) ) {
363
 
364
- foreach($data as $key => $values) {
365
- $strData = $strData . ' data-' . $key . '="' . (is_array($values)
366
- ? implode(',', $values)
367
- : $values) . '"';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
368
  }
 
 
 
369
  }
370
 
371
- ?>
372
- <option value='<?php echo $value ?>' <?php echo $attr ?> <?php echo $strData ?>>
373
- <?php echo $title ?>
374
- </option>
375
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
376
  }
377
  }
378
  }
379
- }
9
  * default => a default value of the control if the "value" option is not specified
10
  * items => a callback to return items or an array of items to select
11
  *
12
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
13
+ * @copyright (c) 2018, Webcraftic Ltd
14
  *
15
  * @package factory-forms
16
  * @since 1.0.0
17
  */
 
18
 
19
+ // Exit if accessed directly
20
+ if( !defined('ABSPATH') ) {
21
+ exit;
22
+ }
23
 
24
+ if( !class_exists('Wbcr_FactoryForms400_DropdownControl') ) {
 
 
 
 
 
 
 
 
25
 
26
+ class Wbcr_FactoryForms400_DropdownControl extends Wbcr_FactoryForms400_Control {
 
27
 
28
+ public $type = 'dropdown';
 
 
29
 
30
+ /**
31
+ * Returns a set of available items for the list.
32
+ *
33
+ * @since 1.0.0
34
+ * @return mixed[]
35
+ */
36
+ private function getItems()
37
+ {
38
+ $data = $this->getOption('data', array());
39
 
40
+ // if the data options is a valid callback for an object method
41
+ if( (is_array($data) && count($data) == 2 && is_object($data[0])) || is_string($data) ) {
42
+
43
+ return call_user_func($data);
44
+ }
45
 
46
+ // if the data options is an array of values
47
+ return $data;
48
+ }
 
 
 
 
 
49
 
50
+ /**
51
+ * Returns true, if the data should be loaded via ajax.
52
+ *
53
+ * @since 1.0.0
54
+ * @return bool
55
+ */
56
+ protected function isAjax()
57
+ {
58
 
59
+ $data = $this->getOption('data', array());
 
60
 
61
+ return is_array($data) && isset($data['ajax']);
62
+ }
 
 
 
 
 
 
63
 
64
+ /**
65
+ * Shows the html markup of the control.
66
+ *
67
+ * @since 1.0.0
68
+ * @return void
69
+ */
70
+ public function html()
71
+ {
72
 
73
+ $way = $this->getOption('way', 'default');
74
+ $this->addHtmlData('way', $way);
75
 
76
+ $events_data = $this->getOption('events', array());
 
 
77
 
78
+ if( !empty($events_data) ) {
79
+ $events_string_data = json_encode($events_data);
80
+ $name_on_form = $this->getNameOnForm();
81
 
82
+ $value = $this->getValue();
 
 
83
 
84
+ if( empty($value) || (is_array($value) && empty($value[0])) ) {
85
+ $value = null;
86
+ }
87
+
88
+ if( !empty($value) && isset($events_data[$value]) && is_array($events_data[$value]) ) {
89
+ $print_styles = '';
90
+ foreach($events_data[$value] as $eventName => $selectors) {
91
+ if( $eventName == 'hide' ) {
92
+ $print_styles .= $selectors . '{display:none;}';
93
+ } else if( $eventName == 'show' ) {
94
+ $print_styles .= $selectors . '{display:block;}';
95
+ }
96
  }
97
+
98
+ echo '<style>' . $print_styles . '</style>';
99
  }
100
+ ?>
101
 
102
+ <script>
103
+ // Onepress factory dropdown control events
104
+ if( void 0 === window.factory_dropdown_control_events_data ) {
105
+ window.factory_dropdown_control_events_data = {};
106
+ }
107
+ window.factory_dropdown_control_events_data['<?php echo $name_on_form ?>'] = <?= $events_string_data ?>;
108
+ </script>
109
+ <?php
110
  }
111
+ if( $this->isAjax() ) {
112
 
113
+ $data = $this->getOption('data', array());
114
+ $ajax_id = 'factory-dropdown-' . rand(1000000, 9999999);
 
 
 
 
 
 
 
 
115
 
116
+ $value = $this->getValue();
 
117
 
118
+ if( empty($value) || (is_array($value) && empty($value[0])) ) {
119
+ $value = null;
120
+ }
121
 
122
+ ?>
123
+ <div class="factory-ajax-loader <?php echo $ajax_id . '-loader'; ?>"></div>
124
+ <script>
125
+ window['<?php echo $ajax_id ?>'] = {
126
+ 'loader': '.<?php echo $ajax_id . '-loader' ?>',
127
+ 'url': '<?php echo $data['url'] ?>',
128
+ 'data': <?php echo json_encode( $data['data'] ) ?>,
129
+ 'selected': '<?php echo $value ?>',
130
+ 'emptyList': '<?php echo $this->getOption('empty', __('The list is empty.', 'wbcr_factory_forms_400') ) ?>'
131
+ };
132
+ </script>
133
+ <?php
134
+
135
+ $this->addHtmlData('ajax', true);
136
+ $this->addHtmlData('ajax-data-id', $ajax_id);
137
+ $this->addCssClass('factory-hidden');
138
  }
139
 
140
+ if( 'buttons' == $way ) {
141
+ $this->buttonsHtml();
142
+ } elseif( 'ddslick' == $way ) {
143
+ $this->ddslickHtml();
144
+ } else {
145
+ $this->defaultHtml();
146
+ }
 
 
 
 
 
 
 
 
 
147
  }
148
 
149
+ /**
150
+ * Shows the Buttons Dropdown.
151
+ *
152
+ * @since 1.0.0
153
+ * @return void
154
+ */
155
+ protected function buttonsHtml()
156
+ {
157
+ $items = $this->getItems();
158
+ $value = $this->getValue();
159
 
160
+ $name_on_form = $this->getNameOnForm();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
 
162
+ $this->addCssClass('factory-buttons-way');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
 
164
+ ?>
165
+ <div <?php $this->attrs() ?>>
166
+ <div class="btn-group factory-buttons-group">
167
+ <?php foreach($items as $item) { ?>
168
+ <button type="button" class="btn btn-default btn-small factory-<?php echo $item[0] ?> <?php if( $value == $item[0] ) {
169
+ echo 'active';
170
+ } ?>" data-value="<?php echo $item[0] ?>"><?php echo $item[1] ?></button>
171
+ <?php } ?>
172
+ <input type="hidden" id="<?php echo $name_on_form ?>" class="factory-result" name="<?php echo $name_on_form ?>" value="<?php echo $value ?>"/>
173
+ </div>
174
+ <div class="factory-hints">
175
+ <?php foreach($items as $item) { ?>
176
+ <?php if( isset($item[2]) ) { ?>
177
+ <div class="factory-hint factory-hint-<?php echo $item[0] ?>" <?php if( $value !== $item[0] ) {
178
+ echo 'style="display: none;"';
179
+ } ?>><?php echo $item[2] ?></div>
180
+ <?php } ?>
181
+ <?php } ?>
182
+ </div>
183
+ </div>
184
+ <?php
185
+ }
186
 
187
+ /**
188
+ * Shows the ddSlick dropbox.
189
+ *
190
+ * @since 3.2.8
191
+ * @return void
192
+ */
193
+ protected function ddslickHtml()
194
+ {
195
+ $items = $this->getItems();
196
+ $value = $this->getValue();
197
 
198
+ $name_on_form = $this->getNameOnForm();
199
 
200
+ $this->addCssClass('factory-ddslick-way');
201
+ $this->addHtmlData('name', $name_on_form);
 
202
 
203
+ $this->addHtmlData('width', $this->getOption('width', 300));
204
+ $this->addHtmlData('align', $this->getOption('imagePosition', 'right'));
205
 
206
+ ?>
207
+ <div <?php $this->attrs() ?>>
208
+ <script>
209
+ //Dropdown plugin data
210
+ var factory_<?php echo $name_on_form ?>_data = [
211
+ <?php foreach ( $items as $item ) { ?>
212
+ {
213
+ text: "<?php echo $item['title'] ?>",
214
+ value: "<?php echo $item['value'] ?>",
215
+ selected: <?php if ( $value == $item['value'] ) { echo 'true'; } else { echo 'false'; } ?>,
216
+ description: "<?php echo ( isset( $item['hint'] ) ? $item['hint'] : '' ); ?>",
217
+ imageSrc: "<?php echo ( isset( $item['image'] ) ? $item['image'] : '' ); ?>",
218
+ imageHoverSrc: "<?php echo ( isset( $item['hover'] ) ? $item['hover'] : '' ); ?>"
219
+ },
220
+ <?php } ?>
221
+ ];
222
+ </script>
223
+ <div class="factory-ddslick"></div>
224
+ <input type="hidden" class="factory-result" id="<?php echo $name_on_form ?>" name="<?php echo $name_on_form ?>" value="<?php echo $value ?>"/>
225
+ </div>
226
+ <?php
227
  }
228
 
229
+ /**
230
+ * Shows the standart dropdown.
231
+ *
232
+ * @since 1.3.1
233
+ * @return void
234
+ */
235
+ protected function defaultHtml()
236
+ {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
 
238
+ $items = $this->getItems();
239
+ $value = esc_attr($this->getValue());
240
 
241
+ $name_on_form = $this->getNameOnForm();
242
 
243
+ $this->addHtmlAttr('id', $name_on_form);
244
+ $this->addHtmlAttr('name', $name_on_form);
245
+ $this->addCssClass('form-control');
246
 
247
+ $hasGroups = $this->getOption('hasGroups', true);
248
+ $hasHints = $this->getOption('hasHints', false);
249
 
250
+ foreach($items as $item) {
251
+ if( !isset($item['hint']) ) {
252
+ continue;
 
 
 
 
253
  }
254
+ if( empty($item['hint']) ) {
255
+ continue;
256
+ }
257
+ $hasHints = true;
258
+ break;
259
+ }
260
 
261
+ $isEmpty = $this->isAjax() || empty($items);
262
+ $emptyList = $this->getOption('empty', __('- empty -', 'wbcr_factory_forms_400'));
 
 
 
 
263
 
264
+ ?>
 
 
 
265
 
266
+ <select <?php $this->attrs() ?>>
267
+ <?php if( $isEmpty ) { ?>
 
 
 
 
268
 
269
+ <option value='' class="factory-empty-option">
270
+ <?php echo $emptyList ?>
271
+ </option>
272
 
273
+ <?php } else { ?>
 
274
 
275
+ <?php $this->printItems($items, $value) ?>
 
 
276
 
277
+ <?php } ?>
278
+ </select>
279
 
280
+ <?php if( $hasHints ) { ?>
281
+ <div class="factory-hints">
282
+ <?php foreach($items as $item) {
283
+
284
+ $hint = isset($item[2])
285
+ ? $item[2]
286
+ : null;
287
+ $hint = isset($item['hint'])
288
+ ? $item['hint']
289
+ : null;
290
+ $value = isset($item[0])
291
+ ? esc_attr($item[0])
292
+ : null;
293
+ $value = isset($item['value'])
294
+ ? esc_attr($item['value'])
295
+ : null;
296
+
297
+ if( !empty($hint) ) { ?>
298
+ <div style="display: none;" class="factory-hint factory-hint-<?php echo $value ?>" <?php if( $value !== $value ) {
299
+ echo 'style="display: none;"';
300
+ } ?>><?php echo $hint ?></div>
301
+ <?php }
302
+ } ?>
303
+ </div>
304
+ <?php } ?>
305
+ <?php
306
+ }
307
+
308
+ /**
309
+ * @param array $items
310
+ * @param null $selected
311
+ */
312
+ protected function printItems($items, $selected = null)
313
+ {
314
 
315
+ foreach((array)$items as $item) {
 
316
 
317
+ $subitems = array();
318
+ $data = null;
319
+
320
+ // this item is an associative array
321
+ if( isset($item['type']) || isset($item['value']) ) {
322
+
323
+ $type = isset($item['type'])
324
+ ? $item['type']
325
+ : 'option';
326
+ if( 'group' === $type ) {
327
+ $subitems = isset($item['items'])
328
+ ? $item['items']
329
+ : array();
330
+ }
331
+
332
+ $value = isset($item['value'])
333
+ ? $item['value']
334
+ : '';
335
+ $title = isset($item['title'])
336
+ ? $item['title']
337
+ : __('- empty -', 'wbcr_factory_forms_400');
338
+
339
+ $data = isset($item['data'])
340
+ ? $item['data']
341
+ : null;
342
+ } else {
343
+
344
+ $type = (count($item) == 3 && $item[0] === 'group')
345
+ ? 'group'
346
+ : 'option';
347
+ if( 'group' === $type ) {
348
+ $subitems = $item[2];
349
  }
350
+
351
+ $title = esc_html($item[1]);
352
+ $value = esc_attr($item[0]);
353
  }
354
 
355
+ if( 'group' === $type ) {
356
+ ?>
357
+
358
+ <optgroup label="<?php echo $item[1] ?>">
359
+ <?php $this->printItems($subitems, $selected); ?>
360
+ </optgroup>
361
+
362
+ <?php
363
+ } else {
364
+
365
+ $attr = ($selected == $value)
366
+ ? 'selected="selected"'
367
+ : '';
368
+
369
+ $strData = '';
370
+ if( !empty($data) ) {
371
+
372
+ foreach($data as $key => $values) {
373
+ $strData = $strData . ' data-' . $key . '="' . (is_array($values)
374
+ ? implode(',', $values)
375
+ : $values) . '"';
376
+ }
377
+ }
378
+
379
+ ?>
380
+ <option value='<?php echo $value ?>' <?php echo $attr ?> <?php echo $strData ?>>
381
+ <?php echo $title ?>
382
+ </option>
383
+ <?php
384
+ }
385
  }
386
  }
387
  }
388
+ }
libs/factory/forms/controls/font.php CHANGED
@@ -9,247 +9,262 @@
9
  * default => a default value of the control if the "value" option is not specified
10
  * items => a callback to return items or an array of items to select
11
  *
12
- * @author Alex Kovalev <alex@byonepress.com>
13
- * @copyright (c) 2013, OnePress Ltd
14
  *
15
  * @package core
16
  * @since 1.0.0
17
  */
18
- class FactoryForms329_FontControl extends FactoryForms329_ComplexControl {
19
-
20
- public $type = 'font';
21
-
22
- public function __construct($options, $form, $provider = null)
23
- {
24
- parent::__construct($options, $form, $provider);
25
-
26
- $optionFontSize = array(
27
- 'name' => $this->options['name'] . '__size',
28
- 'units' => $this->options['units'],
29
- 'default' => isset($this->options['default'])
30
- ? $this->options['default']['size']
31
- : null
32
- );
33
-
34
- $optionFontFamily = array(
35
- 'name' => $this->options['name'] . '__family',
36
- 'data' => $this->getFonts(),
37
- 'default' => isset($this->options['default'])
38
- ? $this->options['default']['family']
39
- : null
40
- );
41
-
42
- $optionFontColor = array(
43
- 'name' => $this->options['name'] . '__color',
44
- 'default' => isset($this->options['default'])
45
- ? $this->options['default']['color']
46
- : null,
47
- 'pickerTarget' => '.factory-control-' . $this->options['name'] . ' .factory-picker-target'
48
- );
49
-
50
- $this->size = new FactoryForms329_IntegerControl($optionFontSize, $form, $provider);
51
- $this->family = new FactoryForms329_DropdownControl($optionFontFamily, $form, $provider);
52
- $this->color = new FactoryForms329_ColorControl($optionFontColor, $form, $provider);
53
-
54
- $this->innerControls = array($this->family, $this->size, $this->color);
55
- }
56
 
57
- public function getFonts()
58
- {
59
 
60
- $fonts = $this->getDefaultFonts();
61
 
62
- $fonts = apply_filters('factory_forms_329_fonts', $fonts);
63
- $fonts = apply_filters('factory_forms_329_fonts-' . $this->options['name'], $fonts);
64
 
65
- return $fonts;
66
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
 
68
- public function getDefaultFonts()
69
- {
70
 
71
- $fonts = array(
 
72
 
73
- array('inherit', __('(use default website font)', 'factory_forms_329')),
74
- array(
75
- 'group',
76
- __('Sans Serif:', 'factory_forms_329'),
77
  array(
78
- array('Arial, "Helvetica Neue", Helvetica, sans-serif', 'Arial'),
79
- array('"Arial Black", "Arial Bold", Gadget, sans-serif', 'Arial Black'),
80
- array('"Arial Narrow", Arial, sans-serif', 'Arial Narrow'),
81
- array(
82
- '"Arial Rounded MT Bold", "Helvetica Rounded", Arial, sans-serif',
83
- 'Arial Rounded MT Bold'
84
- ),
85
- array(
86
- '"Avant Garde", Avantgarde, "Century Gothic", CenturyGothic, "AppleGothic", sans-serif',
87
- 'Avant Garde'
88
- ),
89
- array('Calibri, Candara, Segoe, "Segoe UI", Optima, Arial, sans-serif', 'Calibri'),
90
- array('Candara, Calibri, Segoe, "Segoe UI", Optima, Arial, sans-serif', 'Candara'),
91
- array('"Century Gothic", CenturyGothic, AppleGothic, sans-serif', 'Century Gothic'),
92
- array(
93
- '"Franklin Gothic Medium", "Franklin Gothic", "ITC Franklin Gothic", Arial, sans-serif',
94
- 'Franklin Gothic Medium'
95
- ),
96
- array('Futura, "Trebuchet MS", Arial, sans-serif', 'Futura'),
97
- array('Geneva, Tahoma, Verdana, sans-serif', 'Geneva'),
98
- array('"Gill Sans", "Gill Sans MT", Calibri, sans-serif', 'Gill Sans'),
99
- array('"Helvetica Neue", Helvetica, Arial, sans-serif', 'Helvetica'),
100
- array(
101
- 'Impact, Haettenschweiler, "Franklin Gothic Bold", Charcoal, "Helvetica Inserat", "Bitstream Vera Sans Bold", "Arial Black", sans serif',
102
- 'Impact'
103
- ),
104
  array(
105
- '"Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif',
106
- 'Lucida Grande'
107
- ),
108
- array('Optima, Segoe, "Segoe UI", Candara, Calibri, Arial, sans-serif', 'Optima'),
109
- array(
110
- '"Segoe UI", Frutiger, "Frutiger Linotype", "Dejavu Sans", "Helvetica Neue", Arial, sans-serif',
111
- 'Segoe UI'
112
- ),
113
- array(
114
- 'Montserrat, "Segoe UI", "Helvetica Neue", Arial, sans-serif',
115
- 'Montserrat'
116
- ),
117
- array('Tahoma, Verdana, Segoe, sans-serif', 'Tahoma'),
118
- array(
119
- '"Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif',
120
- 'Trebuchet MS'
121
- ),
122
- array('Verdana, Geneva, sans-serif', 'Verdana'),
123
- )
124
- ),
125
- array(
126
- 'group',
127
- __('Serif:', 'factory_forms_329'),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  array(
 
 
129
  array(
130
- 'Baskerville, "Baskerville Old Face", "Hoefler Text", Garamond, "Times New Roman", serif',
131
- 'Baskerville'
132
- ),
133
- array('"Big Caslon", "Book Antiqua", "Palatino Linotype", Georgia, serif', 'Big Caslon'),
134
- array(
135
- '"Bodoni MT", Didot, "Didot LT STD", "Hoefler Text", Garamond, "Times New Roman", serif',
136
- 'Bodoni MT'
137
- ),
138
- array(
139
- '"Book Antiqua", Palatino, "Palatino Linotype", "Palatino LT STD", Georgia, serif',
140
- 'Book Antiqua'
141
- ),
142
- array(
143
- '"Calisto MT", "Bookman Old Style", Bookman, "Goudy Old Style", Garamond, "Hoefler Text", "Bitstream Charter", Georgia, serif',
144
- 'Calisto MT'
145
- ),
146
- array('Cambria, Georgia, serif', 'Cambria'),
147
- array('Didot, "Didot LT STD", "Hoefler Text", Garamond, "Times New Roman", serif', 'Didot'),
148
- array(
149
- 'Garamond, Baskerville, "Baskerville Old Face", "Hoefler Text", "Times New Roman", serif',
150
- 'Garamond'
151
- ),
152
- array('Georgia, Times, "Times New Roman", serif', 'Georgia'),
153
- array('"Goudy Old Style", Garamond, "Big Caslon", "Times New Roman", serif', 'Goudy Old Style'),
154
- array(
155
- '"Hoefler Text", "Baskerville old face", Garamond, "Times New Roman", serif',
156
- 'Hoefler Text'
157
- ),
158
- array('"Lucida Bright", Georgia, serif', 'Lucida Bright'),
159
- array(
160
- 'Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif',
161
- 'Palatino'
162
- ),
163
- array(
164
- 'Perpetua, Baskerville, "Big Caslon", "Palatino Linotype", Palatino, "URW Palladio L", "Nimbus Roman No9 L", serif',
165
- 'Perpetua'
166
- ),
167
- array(
168
- 'Rockwell, "Courier Bold", Courier, Georgia, Times, "Times New Roman", serif',
169
- 'Rockwell'
170
- ),
171
- array('"Rockwell Extra Bold", "Rockwell Bold", monospace', 'Rockwell Extra Bold'),
172
- array('TimesNewRoman, "Times New Roman", Times, Baskerville, Georgia, serif', 'Times New Roman')
173
- )
174
- ),
175
- array(
176
- 'group',
177
- __('Monospaced:', 'factory_forms_329'),
 
 
 
 
178
  array(
179
- array('"Andale Mono", AndaleMono, monospace', 'Andale Mono'),
180
- array('Consolas, monaco, monospace', 'Consolas'),
181
- array(
182
- '"Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace',
183
- 'Courier New'
184
- ),
185
- array(
186
- '"Lucida Console", "Lucida Sans Typewriter", Monaco, "Bitstream Vera Sans Mono", monospace',
187
- 'Lucida Console'
188
- ),
189
  array(
190
- '"Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace',
191
- 'Lucida Sans Typewriter'
192
- ),
193
- array('Monaco, Consolas, "Lucida Console", monospace', 'Monaco')
 
 
 
 
 
 
 
 
 
 
 
 
194
  )
195
- )
196
 
197
- );
198
 
199
- return $fonts;
200
- }
201
 
202
- /**
203
- * Removes \" in the font family value.
204
- *
205
- * @since 3.1.0
206
- * @return mixed[]
207
- */
208
- public function getValuesToSave()
209
- {
210
- $values = parent::getValuesToSave();
211
 
212
- $familyKey = $this->options['name'] . '__family';
213
- $values[$familyKey] = sanitize_text_field($values[$familyKey]);
214
 
215
- return $values;
216
- }
217
 
218
- public function beforeControlsHtml()
219
- {
220
- }
221
 
222
- public function afterControlsHtml()
223
- {
224
- }
225
 
226
- /**
227
- * Shows the html markup of the control.
228
- *
229
- * @since 1.0.0
230
- * @return void
231
- */
232
- public function html()
233
- {
234
- ?>
235
- <div <?php $this->attrs() ?>>
236
- <div class="factory-control-row">
237
- <?php $this->beforeControlsHtml() ?>
238
-
239
- <div class="factory-family-wrap">
240
- <?php $this->family->html() ?>
241
- </div>
242
- <div class="factory-size-wrap">
243
- <?php $this->size->html() ?>
244
- </div>
245
- <div class="factory-color-wrap">
246
- <?php $this->color->html() ?>
247
- </div>
248
 
249
- <?php $this->afterControlsHtml() ?>
 
 
250
  </div>
251
- <div class="factory-picker-target"></div>
252
- </div>
253
- <?php
254
  }
255
  }
 
9
  * default => a default value of the control if the "value" option is not specified
10
  * items => a callback to return items or an array of items to select
11
  *
12
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
13
+ * @copyright (c) 2018, Webcraftic Ltd
14
  *
15
  * @package core
16
  * @since 1.0.0
17
  */
18
+ // Exit if accessed directly
19
+ if( !defined('ABSPATH') ) {
20
+ exit;
21
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
+ if( !class_exists('Wbcr_FactoryForms400_FontControl') ) {
 
24
 
25
+ class Wbcr_FactoryForms400_FontControl extends Wbcr_FactoryForms400_ComplexControl {
26
 
27
+ public $type = 'font';
 
28
 
29
+ public function __construct($options, $form, $provider = null)
30
+ {
31
+ parent::__construct($options, $form, $provider);
32
+
33
+ $option_font_size = array(
34
+ 'name' => $this->options['name'] . '__size',
35
+ 'units' => $this->options['units'],
36
+ 'default' => isset($this->options['default'])
37
+ ? $this->options['default']['size']
38
+ : null
39
+ );
40
+
41
+ $option_font_family = array(
42
+ 'name' => $this->options['name'] . '__family',
43
+ 'data' => $this->getFonts(),
44
+ 'default' => isset($this->options['default'])
45
+ ? $this->options['default']['family']
46
+ : null
47
+ );
48
+
49
+ $optionFontColor = array(
50
+ 'name' => $this->options['name'] . '__color',
51
+ 'default' => isset($this->options['default'])
52
+ ? $this->options['default']['color']
53
+ : null,
54
+ 'pickerTarget' => '.factory-control-' . $this->options['name'] . ' .factory-picker-target'
55
+ );
56
+
57
+ $this->size = new Wbcr_FactoryForms400_IntegerControl($option_font_size, $form, $provider);
58
+ $this->family = new Wbcr_FactoryForms400_DropdownControl($option_font_family, $form, $provider);
59
+ $this->color = new Wbcr_FactoryForms400_ColorControl($optionFontColor, $form, $provider);
60
+
61
+ $this->innerControls = array($this->family, $this->size, $this->color);
62
+ }
63
+
64
+ public function getFonts()
65
+ {
66
+
67
+ $fonts = $this->getDefaultFonts();
68
+
69
+ $fonts = apply_filters('wbcr_factory_forms_400_fonts', $fonts);
70
+ $fonts = apply_filters('wbcr_factory_forms_400_fonts-' . $this->options['name'], $fonts);
71
 
72
+ return $fonts;
73
+ }
74
 
75
+ public function getDefaultFonts()
76
+ {
77
 
78
+ $fonts = array(
79
+
80
+ array('inherit', __('(use default website font)', 'wbcr_factory_forms_400')),
 
81
  array(
82
+ 'group',
83
+ __('Sans Serif:', 'wbcr_factory_forms_400'),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  array(
85
+ array('Arial, "Helvetica Neue", Helvetica, sans-serif', 'Arial'),
86
+ array('"Arial Black", "Arial Bold", Gadget, sans-serif', 'Arial Black'),
87
+ array('"Arial Narrow", Arial, sans-serif', 'Arial Narrow'),
88
+ array(
89
+ '"Arial Rounded MT Bold", "Helvetica Rounded", Arial, sans-serif',
90
+ 'Arial Rounded MT Bold'
91
+ ),
92
+ array(
93
+ '"Avant Garde", Avantgarde, "Century Gothic", CenturyGothic, "AppleGothic", sans-serif',
94
+ 'Avant Garde'
95
+ ),
96
+ array('Calibri, Candara, Segoe, "Segoe UI", Optima, Arial, sans-serif', 'Calibri'),
97
+ array('Candara, Calibri, Segoe, "Segoe UI", Optima, Arial, sans-serif', 'Candara'),
98
+ array('"Century Gothic", CenturyGothic, AppleGothic, sans-serif', 'Century Gothic'),
99
+ array(
100
+ '"Franklin Gothic Medium", "Franklin Gothic", "ITC Franklin Gothic", Arial, sans-serif',
101
+ 'Franklin Gothic Medium'
102
+ ),
103
+ array('Futura, "Trebuchet MS", Arial, sans-serif', 'Futura'),
104
+ array('Geneva, Tahoma, Verdana, sans-serif', 'Geneva'),
105
+ array('"Gill Sans", "Gill Sans MT", Calibri, sans-serif', 'Gill Sans'),
106
+ array('"Helvetica Neue", Helvetica, Arial, sans-serif', 'Helvetica'),
107
+ array(
108
+ 'Impact, Haettenschweiler, "Franklin Gothic Bold", Charcoal, "Helvetica Inserat", "Bitstream Vera Sans Bold", "Arial Black", sans serif',
109
+ 'Impact'
110
+ ),
111
+ array(
112
+ '"Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif',
113
+ 'Lucida Grande'
114
+ ),
115
+ array('Optima, Segoe, "Segoe UI", Candara, Calibri, Arial, sans-serif', 'Optima'),
116
+ array(
117
+ '"Segoe UI", Frutiger, "Frutiger Linotype", "Dejavu Sans", "Helvetica Neue", Arial, sans-serif',
118
+ 'Segoe UI'
119
+ ),
120
+ array(
121
+ 'Montserrat, "Segoe UI", "Helvetica Neue", Arial, sans-serif',
122
+ 'Montserrat'
123
+ ),
124
+ array('Tahoma, Verdana, Segoe, sans-serif', 'Tahoma'),
125
+ array(
126
+ '"Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif',
127
+ 'Trebuchet MS'
128
+ ),
129
+ array('Verdana, Geneva, sans-serif', 'Verdana'),
130
+ )
131
+ ),
132
  array(
133
+ 'group',
134
+ __('Serif:', 'wbcr_factory_forms_400'),
135
  array(
136
+ array(
137
+ 'Baskerville, "Baskerville Old Face", "Hoefler Text", Garamond, "Times New Roman", serif',
138
+ 'Baskerville'
139
+ ),
140
+ array('"Big Caslon", "Book Antiqua", "Palatino Linotype", Georgia, serif', 'Big Caslon'),
141
+ array(
142
+ '"Bodoni MT", Didot, "Didot LT STD", "Hoefler Text", Garamond, "Times New Roman", serif',
143
+ 'Bodoni MT'
144
+ ),
145
+ array(
146
+ '"Book Antiqua", Palatino, "Palatino Linotype", "Palatino LT STD", Georgia, serif',
147
+ 'Book Antiqua'
148
+ ),
149
+ array(
150
+ '"Calisto MT", "Bookman Old Style", Bookman, "Goudy Old Style", Garamond, "Hoefler Text", "Bitstream Charter", Georgia, serif',
151
+ 'Calisto MT'
152
+ ),
153
+ array('Cambria, Georgia, serif', 'Cambria'),
154
+ array('Didot, "Didot LT STD", "Hoefler Text", Garamond, "Times New Roman", serif', 'Didot'),
155
+ array(
156
+ 'Garamond, Baskerville, "Baskerville Old Face", "Hoefler Text", "Times New Roman", serif',
157
+ 'Garamond'
158
+ ),
159
+ array('Georgia, Times, "Times New Roman", serif', 'Georgia'),
160
+ array(
161
+ '"Goudy Old Style", Garamond, "Big Caslon", "Times New Roman", serif',
162
+ 'Goudy Old Style'
163
+ ),
164
+ array(
165
+ '"Hoefler Text", "Baskerville old face", Garamond, "Times New Roman", serif',
166
+ 'Hoefler Text'
167
+ ),
168
+ array('"Lucida Bright", Georgia, serif', 'Lucida Bright'),
169
+ array(
170
+ 'Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif',
171
+ 'Palatino'
172
+ ),
173
+ array(
174
+ 'Perpetua, Baskerville, "Big Caslon", "Palatino Linotype", Palatino, "URW Palladio L", "Nimbus Roman No9 L", serif',
175
+ 'Perpetua'
176
+ ),
177
+ array(
178
+ 'Rockwell, "Courier Bold", Courier, Georgia, Times, "Times New Roman", serif',
179
+ 'Rockwell'
180
+ ),
181
+ array('"Rockwell Extra Bold", "Rockwell Bold", monospace', 'Rockwell Extra Bold'),
182
+ array(
183
+ 'TimesNewRoman, "Times New Roman", Times, Baskerville, Georgia, serif',
184
+ 'Times New Roman'
185
+ )
186
+ )
187
+ ),
188
  array(
189
+ 'group',
190
+ __('Monospaced:', 'wbcr_factory_forms_400'),
 
 
 
 
 
 
 
 
191
  array(
192
+ array('"Andale Mono", AndaleMono, monospace', 'Andale Mono'),
193
+ array('Consolas, monaco, monospace', 'Consolas'),
194
+ array(
195
+ '"Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace',
196
+ 'Courier New'
197
+ ),
198
+ array(
199
+ '"Lucida Console", "Lucida Sans Typewriter", Monaco, "Bitstream Vera Sans Mono", monospace',
200
+ 'Lucida Console'
201
+ ),
202
+ array(
203
+ '"Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace',
204
+ 'Lucida Sans Typewriter'
205
+ ),
206
+ array('Monaco, Consolas, "Lucida Console", monospace', 'Monaco')
207
+ )
208
  )
 
209
 
210
+ );
211
 
212
+ return $fonts;
213
+ }
214
 
215
+ /**
216
+ * Removes \" in the font family value.
217
+ *
218
+ * @since 3.1.0
219
+ * @return mixed[]
220
+ */
221
+ public function getValuesToSave()
222
+ {
223
+ $values = parent::getValuesToSave();
224
 
225
+ $family_key = $this->options['name'] . '__family';
226
+ $values[$family_key] = sanitize_text_field($values[$family_key]);
227
 
228
+ return $values;
229
+ }
230
 
231
+ public function beforeControlsHtml()
232
+ {
233
+ }
234
 
235
+ public function afterControlsHtml()
236
+ {
237
+ }
238
 
239
+ /**
240
+ * Shows the html markup of the control.
241
+ *
242
+ * @since 1.0.0
243
+ * @return void
244
+ */
245
+ public function html()
246
+ {
247
+ ?>
248
+ <div <?php $this->attrs() ?>>
249
+ <div class="factory-control-row">
250
+ <?php $this->beforeControlsHtml() ?>
251
+
252
+ <div class="factory-family-wrap">
253
+ <?php $this->family->html() ?>
254
+ </div>
255
+ <div class="factory-size-wrap">
256
+ <?php $this->size->html() ?>
257
+ </div>
258
+ <div class="factory-color-wrap">
259
+ <?php $this->color->html() ?>
260
+ </div>
261
 
262
+ <?php $this->afterControlsHtml() ?>
263
+ </div>
264
+ <div class="factory-picker-target"></div>
265
  </div>
266
+ <?php
267
+ }
 
268
  }
269
  }
270
+
libs/factory/forms/controls/google-font.php CHANGED
@@ -1,123 +1,152 @@
1
  <?php
2
- /**
3
- * Dropdown List Control
4
- *
5
- * Main options:
6
- * name => a name of the control
7
- * value => a value to show in the control
8
- * default => a default value of the control if the "value" option is not specified
9
- * items => a callback to return items or an array of items to select
10
- *
11
- * @author Alex Kovalev <alex@byonepress.com>
12
- * @copyright (c) 2013, OnePress Ltd
13
- *
14
- * @package core
15
- * @since 1.0.0
16
- */
17
-
18
- class FactoryForms329_GoogleFontControl extends FactoryForms329_FontControl
19
- {
20
- public $type = 'google-font';
21
- const APIKEY = 'AIzaSyB-3vazYv7Q-5QZA04bmSKFrWcw_VhC40w';
22
-
23
- public function __construct($options, $form, $provider = null) {
24
- parent::__construct($options, $form, $provider);
25
- $this->addCssClass('factory-font');
26
-
27
- $optionGoogleFontData = array(
28
- 'name' => $this->options['name'] . '__google_font_data',
29
- 'cssClass' => 'factory-google-font-data'
30
- );
31
-
32
- $this->googleFontData = new FactoryForms329_HiddenControl( $optionGoogleFontData, $form, $provider );
33
- $this->innerControls[] = $this->googleFontData;
34
- }
35
-
36
- public function getDefaultFonts() {
37
-
38
- $googleFonts = $this->getGoogleFonts();
39
-
40
- $fonts = array(
41
- array( 'inherit', __( '(use default website font)', 'factory_forms_329' ) )
42
- );
43
-
44
- $fontsCommon = array( 'group', __('Standard:', 'factory_forms_329'), array(
45
-
46
- array( 'Arial, "Helvetica Neue", Helvetica, sans-serif', 'Arial' ),
47
- array( '"Helvetica Neue", Helvetica, Arial, sans-serif', 'Helvetica' ),
48
- array( 'Tahoma, Verdana, Segoe, sans-serif', 'Tahoma' ),
49
- array( 'Verdana, Geneva, sans-serif', 'Verdana' ),
50
-
51
- ));
52
-
53
- $fontsGoogleFonts = array( 'group', __('Google Fonts:', 'factory_forms_329'), array() );
54
-
55
- foreach( $googleFonts->items as $item ) {
56
-
57
- $altFont = $item->category;
58
- if ( in_array( $altFont, array( 'handwriting', 'display' ) ) ) $altFont = 'serif';
59
-
60
- $listItem = array(
61
- 'title' => $item->family,
62
- 'value' => $item->family . ', ' . $item->category,
63
- 'hint' => '<em>Google Font</em>',
64
- 'data' => array(
65
- 'google-font' => true,
66
- 'family' => $item->family,
67
- 'variants' => $item->variants,
68
- 'subsets' => $item->subsets
69
- )
70
- );
71
-
72
- $fontsGoogleFonts[2][] = $listItem;
73
- }
74
-
75
- $fonts[] = $fontsCommon;
76
- $fonts[] = $fontsGoogleFonts;
77
-
78
- set_transient('factory_google_fonts', $fonts, 60 * 60 * 6);
79
- return $fonts;
80
- }
81
-
82
- protected function getGoogleFonts() {
83
-
84
- $body = get_transient('factory_google_fonts_raw');
85
- if ( !empty( $body ) ) return $body;
86
-
87
- $response = wp_remote_get( sprintf( 'https://www.googleapis.com/webfonts/v1/webfonts?key=%s', self::APIKEY ) );
88
-
89
- $this->error = false;
90
- $this->defailedError = false;
91
-
92
- if ( is_wp_error( $response ) ) {
93
-
94
- $this->error = __('Unable to retrieve the list of Google Fonts.', 'factory_forms_329');
95
- $this->defailedError = $response->get_error_message();
96
- return $body;
97
- }
98
-
99
- if ( !isset( $response['body'] ) ) {
100
-
101
- $this->error = __('Invalide response from the Google Fonts API.', 'factory_forms_329');
102
- $this->defailedError = $response['body'];
103
- return $body;
104
- }
105
-
106
- $body = json_decode( $response['body']);
107
-
108
- if ( empty( $body->items ) ) {
109
-
110
- $this->error = __('Unexpected error. The list of Google Fonts are empty.', 'factory_forms_329');
111
- return $body;
112
- }
113
-
114
- set_transient('factory_google_fonts_raw', $body, 60 * 60 * 6);
115
- return $body;
116
- }
117
-
118
- public function afterControlsHtml() {
119
- ?>
120
- <?php $this->googleFontData->html() ?>
121
- <?php
122
- }
123
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+
3
+ /**
4
+ * Dropdown List Control
5
+ *
6
+ * Main options:
7
+ * name => a name of the control
8
+ * value => a value to show in the control
9
+ * default => a default value of the control if the "value" option is not specified
10
+ * items => a callback to return items or an array of items to select
11
+ *
12
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
13
+ * @copyright (c) 2018, Webcraftic Ltd
14
+ *
15
+ * @package core
16
+ * @since 1.0.0
17
+ */
18
+ class Wbcr_FactoryForms400_GoogleFontControl extends Wbcr_FactoryForms400_FontControl {
19
+
20
+ public $type = 'google-font';
21
+ const APIKEY = 'AIzaSyB-3vazYv7Q-5QZA04bmSKFrWcw_VhC40w';
22
+
23
+ public function __construct($options, $form, $provider = null)
24
+ {
25
+ parent::__construct($options, $form, $provider);
26
+ $this->addCssClass('factory-font');
27
+
28
+ $option_google_font_data = array(
29
+ 'name' => $this->options['name'] . '__google_font_data',
30
+ 'cssClass' => 'factory-google-font-data'
31
+ );
32
+
33
+ $this->google_font_data = new Wbcr_FactoryForms400_HiddenControl($option_google_font_data, $form, $provider);
34
+ $this->inner_controls[] = $this->google_font_data;
35
+ }
36
+
37
+ /**
38
+ * @return array|mixed
39
+ */
40
+ public function getDefaultFonts()
41
+ {
42
+
43
+ $cache_fonts = get_transient('wbcr_factory_google_fonts');
44
+
45
+ if( !empty($cache_fonts) ) {
46
+ return $cache_fonts;
47
+ }
48
+
49
+ $google_fonts = $this->getGoogleFonts();
50
+
51
+ $fonts = array(
52
+ array('inherit', __('(use default website font)', 'wbcr_factory_forms_400'))
53
+ );
54
+
55
+ $fontsCommon = array(
56
+ 'group',
57
+ __('Standard:', 'wbcr_factory_forms_400'),
58
+ array(
59
+
60
+ array('Arial, "Helvetica Neue", Helvetica, sans-serif', 'Arial'),
61
+ array('"Helvetica Neue", Helvetica, Arial, sans-serif', 'Helvetica'),
62
+ array('Tahoma, Verdana, Segoe, sans-serif', 'Tahoma'),
63
+ array('Verdana, Geneva, sans-serif', 'Verdana'),
64
+
65
+ )
66
+ );
67
+
68
+ $fontsGoogleFonts = array('group', __('Google Fonts:', 'wbcr_factory_forms_400'), array());
69
+
70
+ foreach($google_fonts->items as $item) {
71
+
72
+ $alt_font = $item->category;
73
+ if( in_array($alt_font, array('handwriting', 'display')) ) {
74
+ $alt_font = 'serif';
75
+ }
76
+
77
+ $listItem = array(
78
+ 'title' => $item->family,
79
+ 'value' => $item->family . ', ' . $item->category,
80
+ 'hint' => '<em>Google Font</em>',
81
+ 'data' => array(
82
+ 'google-font' => true,
83
+ 'family' => $item->family,
84
+ 'variants' => $item->variants,
85
+ 'subsets' => $item->subsets
86
+ )
87
+ );
88
+
89
+ $fontsGoogleFonts[2][] = $listItem;
90
+ }
91
+
92
+ $fonts[] = $fontsCommon;
93
+ $fonts[] = $fontsGoogleFonts;
94
+
95
+ set_transient('wbcr_factory_google_fonts', $fonts, 60 * 60 * 6);
96
+
97
+ return $fonts;
98
+ }
99
+
100
+ /**
101
+ * @return array|mixed|object
102
+ */
103
+ protected function getGoogleFonts()
104
+ {
105
+
106
+ $body = get_transient('wbcr_factory_google_fonts_raw');
107
+ if( !empty($body) ) {
108
+ return $body;
109
+ }
110
+
111
+ $response = wp_remote_get(sprintf('https://www.googleapis.com/webfonts/v1/webfonts?key=%s', self::APIKEY));
112
+
113
+ $this->error = false;
114
+ $this->defailed_error = false;
115
+
116
+ if( is_wp_error($response) ) {
117
+
118
+ $this->error = __('Unable to retrieve the list of Google Fonts.', 'wbcr_factory_forms_400');
119
+ $this->defailed_error = $response->get_error_message();
120
+
121
+ return $body;
122
+ }
123
+
124
+ if( !isset($response['body']) ) {
125
+
126
+ $this->error = __('Invalide response from the Google Fonts API.', 'wbcr_factory_forms_400');
127
+ $this->defailed_error = $response['body'];
128
+
129
+ return $body;
130
+ }
131
+
132
+ $body = json_decode($response['body']);
133
+
134
+ if( empty($body->items) ) {
135
+
136
+ $this->error = __('Unexpected error. The list of Google Fonts are empty.', 'wbcr_factory_forms_400');
137
+
138
+ return $body;
139
+ }
140
+
141
+ set_transient('wbcr_factory_google_fonts_raw', $body, 60 * 60 * 6);
142
+
143
+ return $body;
144
+ }
145
+
146
+ public function afterControlsHtml()
147
+ {
148
+ ?>
149
+ <?php $this->google_font_data->html() ?>
150
+ <?php
151
+ }
152
+ }
libs/factory/forms/controls/gradient.php CHANGED
@@ -14,82 +14,90 @@
14
  * default => a default value of the control if the "value" option is not specified
15
  *
16
  * @author Alex Kovalev <alex.kovalevv@gmail.com>
17
- * @copyright (c) 2013, OnePress Ltd
18
  *
19
  * @package core
20
  * @since 1.0.0
21
  */
22
- class FactoryForms329_GradientControl extends FactoryForms329_Control {
23
 
24
- public $type = 'gradient';
 
 
 
25
 
26
- /**
27
- * Shows the html markup of the control.
28
- *
29
- * @since 1.0.0
30
- * @return void
31
- */
32
- public function html()
33
- {
34
- $name = $this->getNameOnForm();
35
- $value = esc_attr($this->getValue());
36
 
37
- if( !empty($value) ) {
38
 
39
- $values = json_decode(stripcslashes(htmlspecialchars_decode($value)));
 
 
 
 
 
 
 
 
 
40
 
41
- $points = '';
42
 
43
- foreach($values->color_points as $splitVlaues) {
44
- $points .= $splitVlaues . ',';
45
- }
46
 
47
- $points = rtrim($points, ',');
48
 
49
- $this->addHtmlData('points', $points);
50
- $this->addHtmlData('directions', $values->filldirection);
51
- } else {
52
- $this->addHtmlData('directions', 'top');
53
- }
54
- ?>
55
- <script>
56
- if( !window.factory ) {
57
- window.factory = {};
58
- }
59
- if( !window.factory.res ) {
60
- window.factory.res = {};
61
  }
62
- factory.res.resVertical = '<?php _e( 'vertical', 'factory_forms_329' ) ?>';
63
- factory.res.resHorizontal = '<?php _e( 'horizontal', 'factory_forms_329' ) ?>';
64
- </script>
65
- <div <?php $this->attrs() ?>>
66
- <div class="factory-gradient-picker">
67
- <ul class="gradientPicker-pallets">
68
- <li class="factory-preset-gradient factory-primary-gradient" data-primary="#1bbc9d" data-secondary="#16a086"></li>
69
- <li class="factory-preset-gradient factory-primary-gradient" data-primary="#2fcc71" data-secondary="#27ae61"></li>
70
- <li class="factory-preset-gradient factory-primary-gradient" data-primary="#3598dc" data-secondary="#2a80b9"></li>
71
- <li class="factory-preset-gradient factory-primary-gradient" data-primary="#9c59b8" data-secondary="#8f44ad"></li>
72
- <li class="factory-preset-gradient factory-primary-gradient" data-primary="#34495e" data-secondary="#2d3e50"></li>
73
- <li class="factory-preset-gradient factory-primary-gradient" data-primary="#f1c40f" data-secondary="#f49c14"></li>
74
- <li class="factory-preset-gradient factory-primary-gradient" data-primary="#e84c3d" data-secondary="#c1392b"></li>
75
- <li class="factory-preset-gradient factory-primary-gradient" data-primary="#ecf0f1" data-secondary="#bec3c7"></li>
76
- </ul>
77
- <canvas class='gradientPicker-preview'></canvas>
78
- <div class='factory-points'></div>
79
- <div class='factory-color-picker-container'>
80
- <div class="factory-slider-container">
81
- <div class="factory-slider">
82
- <input type="text" class="factory-input-text factory-color-hex"/>
 
 
 
 
 
 
 
 
83
 
84
- <div class="factory-bar"></div>
85
- <div class="factory-visible-value">100%</div>
 
86
  </div>
 
87
  </div>
88
- <div class="factory-color-picker"></div>
89
  </div>
 
90
  </div>
91
- <input type="hidden" id="<?php echo $name; ?>" class="factory-result" name="<?php echo $name; ?>" value="<?php echo $value; ?>">
92
- </div>
93
- <?php
94
  }
95
- }
14
  * default => a default value of the control if the "value" option is not specified
15
  *
16
  * @author Alex Kovalev <alex.kovalevv@gmail.com>
17
+ * @copyright (c) 2018, Webcraftic Ltd
18
  *
19
  * @package core
20
  * @since 1.0.0
21
  */
 
22
 
23
+ // Exit if accessed directly
24
+ if( !defined('ABSPATH') ) {
25
+ exit;
26
+ }
27
 
28
+ if( !class_exists('Wbcr_FactoryForms400_GradientControl') ) {
29
+ class Wbcr_FactoryForms400_GradientControl extends Wbcr_FactoryForms400_Control {
 
 
 
 
 
 
 
 
30
 
31
+ public $type = 'gradient';
32
 
33
+ /**
34
+ * Shows the html markup of the control.
35
+ *
36
+ * @since 1.0.0
37
+ * @return void
38
+ */
39
+ public function html()
40
+ {
41
+ $name = $this->getNameOnForm();
42
+ $value = esc_attr($this->getValue());
43
 
44
+ if( !empty($value) ) {
45
 
46
+ $values = json_decode(stripcslashes(htmlspecialchars_decode($value)));
 
 
47
 
48
+ $points = '';
49
 
50
+ foreach($values->color_points as $split_values) {
51
+ $points .= $split_values . ',';
52
+ }
53
+
54
+ $points = rtrim($points, ',');
55
+
56
+ $this->addHtmlData('points', $points);
57
+ $this->addHtmlData('directions', $values->filldirection);
58
+ } else {
59
+ $this->addHtmlData('directions', 'top');
 
 
60
  }
61
+ ?>
62
+ <script>
63
+ if( !window.factory ) {
64
+ window.factory = {};
65
+ }
66
+ if( !window.factory.res ) {
67
+ window.factory.res = {};
68
+ }
69
+ factory.res.resVertical = '<?php _e( 'vertical', 'wbcr_factory_forms_400' ) ?>';
70
+ factory.res.resHorizontal = '<?php _e( 'horizontal', 'wbcr_factory_forms_400' ) ?>';
71
+ </script>
72
+ <div <?php $this->attrs() ?>>
73
+ <div class="factory-gradient-picker">
74
+ <ul class="gradientPicker-pallets">
75
+ <li class="factory-preset-gradient factory-primary-gradient" data-primary="#1bbc9d" data-secondary="#16a086"></li>
76
+ <li class="factory-preset-gradient factory-primary-gradient" data-primary="#2fcc71" data-secondary="#27ae61"></li>
77
+ <li class="factory-preset-gradient factory-primary-gradient" data-primary="#3598dc" data-secondary="#2a80b9"></li>
78
+ <li class="factory-preset-gradient factory-primary-gradient" data-primary="#9c59b8" data-secondary="#8f44ad"></li>
79
+ <li class="factory-preset-gradient factory-primary-gradient" data-primary="#34495e" data-secondary="#2d3e50"></li>
80
+ <li class="factory-preset-gradient factory-primary-gradient" data-primary="#f1c40f" data-secondary="#f49c14"></li>
81
+ <li class="factory-preset-gradient factory-primary-gradient" data-primary="#e84c3d" data-secondary="#c1392b"></li>
82
+ <li class="factory-preset-gradient factory-primary-gradient" data-primary="#ecf0f1" data-secondary="#bec3c7"></li>
83
+ </ul>
84
+ <canvas class='gradientPicker-preview'></canvas>
85
+ <div class='factory-points'></div>
86
+ <div class='factory-color-picker-container'>
87
+ <div class="factory-slider-container">
88
+ <div class="factory-slider">
89
+ <input type="text" class="factory-input-text factory-color-hex"/>
90
 
91
+ <div class="factory-bar"></div>
92
+ <div class="factory-visible-value">100%</div>
93
+ </div>
94
  </div>
95
+ <div class="factory-color-picker"></div>
96
  </div>
 
97
  </div>
98
+ <input type="hidden" id="<?php echo $name; ?>" class="factory-result" name="<?php echo $name; ?>" value="<?php echo $value; ?>">
99
  </div>
100
+ <?php
101
+ }
 
102
  }
103
+ }
libs/factory/forms/controls/hidden.php CHANGED
@@ -8,34 +8,43 @@
8
  * value => a value to show in the control
9
  * default => a default value of the control if the "value" option is not specified
10
  *
11
- * @author Paul Kashtanoff <paul@byonepress.com>
12
- * @copyright (c) 2013, OnePress Ltd
13
  *
14
  * @package factory-forms
15
  * @since 1.0.0
16
  */
17
- class FactoryForms329_HiddenControl extends FactoryForms329_Control {
18
-
19
- public $type = 'hidden';
20
-
21
- /**
22
- * Shows the html markup of the control.
23
- *
24
- * @since 1.0.0
25
- * @return void
26
- */
27
- public function html()
28
- {
29
- $value = esc_attr($this->getValue());
30
- $nameOnForm = $this->getNameOnForm();
31
-
32
- $this->addHtmlAttr('id', $nameOnForm);
33
- $this->addHtmlAttr('name', $nameOnForm);
34
- $this->addHtmlAttr('value', $value);
35
- $this->addHtmlAttr('type', 'hidden');
36
-
37
- ?>
38
- <input <?php $this->attrs() ?>/>
39
- <?php
 
 
 
 
 
 
 
 
 
40
  }
41
  }
8
  * value => a value to show in the control
9
  * default => a default value of the control if the "value" option is not specified
10
  *
11
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
12
+ * @copyright (c) 2018, Webcraftic Ltd
13
  *
14
  * @package factory-forms
15
  * @since 1.0.0
16
  */
17
+
18
+ // Exit if accessed directly
19
+ if( !defined('ABSPATH') ) {
20
+ exit;
21
+ }
22
+
23
+ if( !class_exists('Wbcr_FactoryForms400_HiddenControl') ) {
24
+
25
+ class Wbcr_FactoryForms400_HiddenControl extends Wbcr_FactoryForms400_Control {
26
+
27
+ public $type = 'hidden';
28
+
29
+ /**
30
+ * Shows the html markup of the control.
31
+ *
32
+ * @since 1.0.0
33
+ * @return void
34
+ */
35
+ public function html()
36
+ {
37
+ $value = esc_attr($this->getValue());
38
+ $name_on_form = $this->getNameOnForm();
39
+
40
+ $this->addHtmlAttr('id', $name_on_form);
41
+ $this->addHtmlAttr('name', $name_on_form);
42
+ $this->addHtmlAttr('value', $value);
43
+ $this->addHtmlAttr('type', 'hidden');
44
+
45
+ ?>
46
+ <input <?php $this->attrs() ?>/>
47
+ <?php
48
+ }
49
  }
50
  }
libs/factory/forms/controls/holders/accordion-item.php CHANGED
@@ -1,53 +1,63 @@
1
  <?php
2
- /**
3
- * The file contains the class of Tab Control Holder.
4
- *
5
- * @author Alex Kovalev <alex@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package core
9
- * @since 1.0.0
10
- */
11
 
12
- /**
13
- * Tab Control Holder
14
- *
15
- * @since 1.0.0
16
- */
17
- class FactoryForms329_AccordionItemHolder extends FactoryForms329_Holder {
18
-
19
- /**
20
- * A holder type.
21
- *
22
- * @since 1.0.0
23
- * @var string
24
- */
25
- public $type = 'accordion-item';
26
-
27
- /**
28
- * Here we should render a beginning html of the tab.
29
- *
30
- * @since 1.0.0
31
- * @return void
32
- */
33
- public function beforeRendering() {
34
- ?>
35
- <h3><?php echo $this->options['title']; ?></h3>
36
- <div class="factory-accordion-item">
37
- <div class="inner-factory-accordion-item">
38
- <?php
39
- }
40
-
41
- /**
42
- * Here we should render an end html of the tab.
43
- *
44
- * @since 1.0.0
45
- * @return void
46
- */
47
- public function afterRendering() {
48
- ?>
49
- </div>
50
- </div>
51
- <?php
52
- }
53
- }
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the class of Tab Control Holder.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package core
9
+ * @since 1.0.0
10
+ */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( !class_exists('Wbcr_FactoryForms400_AccordionItemHolder') ) {
18
+
19
+ /**
20
+ * Tab Control Holder
21
+ *
22
+ * @since 1.0.0
23
+ */
24
+ class Wbcr_FactoryForms400_AccordionItemHolder extends Wbcr_FactoryForms400_Holder {
25
+
26
+ /**
27
+ * A holder type.
28
+ *
29
+ * @since 1.0.0
30
+ * @var string
31
+ */
32
+ public $type = 'accordion-item';
33
+
34
+ /**
35
+ * Here we should render a beginning html of the tab.
36
+ *
37
+ * @since 1.0.0
38
+ * @return void
39
+ */
40
+ public function beforeRendering()
41
+ {
42
+ ?>
43
+ <h3><?php echo $this->options['title']; ?></h3>
44
+ <div class="factory-accordion-item">
45
+ <div class="inner-factory-accordion-item">
46
+ <?php
47
+ }
48
+
49
+ /**
50
+ * Here we should render an end html of the tab.
51
+ *
52
+ * @since 1.0.0
53
+ * @return void
54
+ */
55
+ public function afterRendering()
56
+ {
57
+ ?>
58
+ </div>
59
+ </div>
60
+ <?php
61
+ }
62
+ }
63
+ }
libs/factory/forms/controls/holders/accordion.php CHANGED
@@ -1,50 +1,58 @@
1
  <?php
2
- /**
3
- * The file contains the class of Tab Control Holder.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package core
9
- * @since 1.0.0
10
- */
11
 
12
- /**
13
- * Tab Control Holder
14
- *
15
- * @since 1.0.0
16
- */
17
- class FactoryForms329_AccordionHolder extends FactoryForms329_Holder {
18
-
19
- /**
20
- * A holder type.
21
- *
22
- * @since 1.0.0
23
- * @var string
24
- */
25
- public $type = 'accordion';
26
-
27
- /**
28
- * Here we should render a beginning html of the tab.
29
- *
30
- * @since 1.0.0
31
- * @return void
32
- */
33
- public function beforeRendering() {
34
- ?>
35
- <div <?php $this->attrs() ?>>
36
- <?php
37
- }
38
-
39
- /**
40
- * Here we should render an end html of the tab.
41
- *
42
- * @since 1.0.0
43
- * @return void
44
- */
45
- public function afterRendering() {
46
- ?>
47
- </div>
48
- <?php
49
- }
50
- }
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the class of Tab Control Holder.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package core
9
+ * @since 1.0.0
10
+ */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+ if( !class_exists('Wbcr_FactoryForms400_AccordionHolder') ) {
17
+ /**
18
+ * Tab Control Holder
19
+ *
20
+ * @since 1.0.0
21
+ */
22
+ class Wbcr_FactoryForms400_AccordionHolder extends Wbcr_FactoryForms400_Holder {
23
+
24
+ /**
25
+ * A holder type.
26
+ *
27
+ * @since 1.0.0
28
+ * @var string
29
+ */
30
+ public $type = 'accordion';
31
+
32
+ /**
33
+ * Here we should render a beginning html of the tab.
34
+ *
35
+ * @since 1.0.0
36
+ * @return void
37
+ */
38
+ public function beforeRendering()
39
+ {
40
+ ?>
41
+ <div <?php $this->attrs() ?>>
42
+ <?php
43
+ }
44
+
45
+ /**
46
+ * Here we should render an end html of the tab.
47
+ *
48
+ * @since 1.0.0
49
+ * @return void
50
+ */
51
+ public function afterRendering()
52
+ {
53
+ ?>
54
+ </div>
55
+ <?php
56
+ }
57
+ }
58
+ }
libs/factory/forms/controls/holders/columns.php CHANGED
@@ -1,85 +1,99 @@
1
  <?php
2
- /**
3
- * The file contains the class of Columns Holder.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2014, OnePress Ltd
7
- *
8
- * @package factory-forms
9
- * @since 1.0.0
10
- */
11
-
12
- /**
13
- * Columns Holder
14
- *
15
- * @since 1.0.0
16
- */
17
- class FactoryForms329_ColumnsHolder extends FactoryForms329_Holder {
18
-
19
- /**
20
- * A holder type.
21
- *
22
- * @since 1.0.0
23
- * @var string
24
- */
25
- public $type = 'columns';
26
-
27
- public function __construct($options, $form) {
28
- $columnsItems = array();
29
-
30
- $items = isset( $options['items'] ) ? $options['items'] : array();
31
-
32
- // calculates the number of columns
33
-
34
- $this->columnsCount = 0;
35
-
36
- foreach( $options['items'] as $item ) {
37
- $i = ( !isset( $item['column'] ) ? 1 : intval( $item['column'] ) ) - 1;
38
- $columnsItems[$i][] = $item;
39
-
40
- if ( $i > $this->columnsCount ) $this->columnsCount = $i + 1;
41
- }
42
- // calculates the number of rows
43
-
44
- $this->rowsCount = 0;
45
- foreach($columnsItems as $items) {
46
- $count = count( $items );
47
- if ( $count > $this->rowsCount ) $this->rowsCount = $count;
48
- }
49
-
50
- // creates elements
51
-
52
- parent::__construct($options, $form);
53
-
54
- // groups the created by columns
55
-
56
- $elementIndex = 0;
57
- $this->columns = array();
58
-
59
- foreach($columnsItems as $columnIndex => $columnItems) {
60
- $count = count ( $columnItems );
61
- for ( $k = 0; $k < $count; $k++ ) {
62
- $this->columns[$columnIndex][] = $this->elements[$elementIndex];
63
- $elementIndex++;
64
- }
65
- }
66
- }
67
-
68
- public function render() {
69
- $this->beforeRendering();
70
-
71
- for( $n = 0; $n < $this->rowsCount; $n++ ) {
72
-
73
- $this->form->layout->startRow( $n, $this->rowsCount );
74
-
75
- for( $i = 0; $i < $this->columnsCount; $i++ ) {
76
- $control = $this->columns[$i][$n];
77
- $this->form->layout->startColumn( $control, $i, $this->columnsCount );
78
- $this->columns[$i][$n]->render();
79
- $this->form->layout->endColumn( $control, $i, $this->columnsCount );
80
- }
81
-
82
- $this->form->layout->endRow( $n, $this->rowsCount );
83
- }
84
- }
85
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the class of Columns Holder.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( !class_exists('Wbcr_FactoryForms400_ColumnsHolder') ) {
18
+ /**
19
+ * Columns Holder
20
+ *
21
+ * @since 1.0.0
22
+ */
23
+ class Wbcr_FactoryForms400_ColumnsHolder extends Wbcr_FactoryForms400_Holder {
24
+
25
+ /**
26
+ * A holder type.
27
+ *
28
+ * @since 1.0.0
29
+ * @var string
30
+ */
31
+ public $type = 'columns';
32
+
33
+ public function __construct($options, $form)
34
+ {
35
+ $columns_items = array();
36
+
37
+ // calculates the number of columns
38
+
39
+ $this->columns_count = 0;
40
+
41
+ foreach($options['items'] as $item) {
42
+ $i = (!isset($item['column'])
43
+ ? 1
44
+ : intval($item['column'])) - 1;
45
+ $columns_items[$i][] = $item;
46
+
47
+ if( $i > $this->columns_count ) {
48
+ $this->columns_count = $i + 1;
49
+ }
50
+ }
51
+ // calculates the number of rows
52
+
53
+ $this->rows_count = 0;
54
+ foreach($columns_items as $items) {
55
+ $count = count($items);
56
+ if( $count > $this->rows_count ) {
57
+ $this->rows_count = $count;
58
+ }
59
+ }
60
+
61
+ // creates elements
62
+
63
+ parent::__construct($options, $form);
64
+
65
+ // groups the created by columns
66
+
67
+ $element_index = 0;
68
+ $this->columns = array();
69
+
70
+ foreach($columns_items as $column_index => $columnItems) {
71
+ $count = count($columnItems);
72
+ for($k = 0; $k < $count; $k++) {
73
+ $this->columns[$column_index][] = $this->elements[$element_index];
74
+ $element_index++;
75
+ }
76
+ }
77
+ }
78
+
79
+
80
+ public function render()
81
+ {
82
+ $this->beforeRendering();
83
+
84
+ for($n = 0; $n < $this->rows_count; $n++) {
85
+
86
+ $this->form->layout->startRow($n, $this->rows_count);
87
+
88
+ for($i = 0; $i < $this->columns_count; $i++) {
89
+ $control = $this->columns[$i][$n];
90
+ $this->form->layout->startColumn($control, $i, $this->columns_count);
91
+ $this->columns[$i][$n]->render();
92
+ $this->form->layout->endColumn($control, $i, $this->columns_count);
93
+ }
94
+
95
+ $this->form->layout->endRow($n, $this->rows_count);
96
+ }
97
+ }
98
+ }
99
+ }
libs/factory/forms/controls/holders/control-group-item.php CHANGED
@@ -1,64 +1,76 @@
1
  <?php
2
- /**
3
- * The file contains the class of Tab Control Holder.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package factory-forms
9
- * @since 1.0.0
10
- */
11
 
12
- /**
13
- * Tab Control Holder
14
- *
15
- * @since 1.0.0
16
- */
17
- class FactoryForms329_ControlGroupItem extends FactoryForms329_Holder {
18
-
19
- /**
20
- * A holder type.
21
- *
22
- * @since 1.0.0
23
- * @var string
24
- */
25
- public $type = 'control-group-item';
26
-
27
-
28
- /**
29
- * Here we should render a beginning html of the tab.
30
- *
31
- * @since 1.0.0
32
- * @return void
33
- */
34
- public function beforeRendering() {
35
- $this->addCssClass('control-group-item' );
36
- $this->addCssClass('factory-control-group-item-' . $this->options['name'] );
37
- if ( $this->parent->getValue() == $this->options['name'] ) {
38
- $this->addCssClass('current');
39
- foreach( $this->elements as $val ) {
40
- $val->setOption('isActive', 1);
41
- }
42
- } else {
43
- foreach( $this->elements as $val ) {
44
- $val->setOption('isActive', 0);
45
- }
46
- }
47
-
48
- ?>
49
- <div <?php $this->attrs() ?>>
50
- <?php
51
- }
52
-
53
- /**
54
- * Here we should render an end html of the tab.
55
- *
56
- * @since 1.0.0
57
- * @return void
58
- */
59
- public function afterRendering() {
60
- ?>
61
- </div>
62
- <?php
63
- }
64
- }
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the class of Tab Control Holder.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
+ */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( !class_exists('Wbcr_FactoryForms400_ControlGroupItem') ) {
18
+
19
+ /**
20
+ * Tab Control Holder
21
+ *
22
+ * @since 1.0.0
23
+ */
24
+ class Wbcr_FactoryForms400_ControlGroupItem extends Wbcr_FactoryForms400_Holder {
25
+
26
+ /**
27
+ * A holder type.
28
+ *
29
+ * @since 1.0.0
30
+ * @var string
31
+ */
32
+ public $type = 'control-group-item';
33
+
34
+
35
+ /**
36
+ * Here we should render a beginning html of the tab.
37
+ *
38
+ * @since 1.0.0
39
+ * @return void
40
+ */
41
+ public function beforeRendering()
42
+ {
43
+ $this->addCssClass('control-group-item');
44
+ $this->addCssClass('factory-control-group-item-' . $this->options['name']);
45
+
46
+ if( $this->parent->getValue() == $this->options['name'] ) {
47
+ $this->addCssClass('current');
48
+
49
+ foreach($this->elements as $val) {
50
+ $val->setOption('isActive', 1);
51
+ }
52
+ } else {
53
+ foreach($this->elements as $val) {
54
+ $val->setOption('isActive', 0);
55
+ }
56
+ }
57
+
58
+ ?>
59
+ <div <?php $this->attrs() ?>>
60
+ <?php
61
+ }
62
+
63
+ /**
64
+ * Here we should render an end html of the tab.
65
+ *
66
+ * @since 1.0.0
67
+ * @return void
68
+ */
69
+ public function afterRendering()
70
+ {
71
+ ?>
72
+ </div>
73
+ <?php
74
+ }
75
+ }
76
+ }
libs/factory/forms/controls/holders/control-group.php CHANGED
@@ -1,80 +1,97 @@
1
  <?php
2
- /**
3
- * The file contains the class of Tab Control Holder.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package factory-forms
9
- * @since 1.0.0
10
- */
11
-
12
- /**
13
- * Tab Control Holder
14
- *
15
- * @since 1.0.0
16
- */
17
- class FactoryForms329_ControlGroupHolder extends FactoryForms329_ControlHolder {
18
-
19
- /**
20
- * A holder type.
21
- *
22
- * @since 1.0.0
23
- * @var string
24
- */
25
- public $type = 'control-group';
26
-
27
-
28
- /**
29
- * Here we should render a beginning html of the tab.
30
- *
31
- * @since 1.0.0
32
- * @return void
33
- */
34
- public function beforeRendering() {
35
- $name = $this->getNameOnForm();
36
- $value = $this->getValue();
37
-
38
- $title = $this->getOption('title', null);
39
-
40
- ?>
41
- <div <?php $this->attrs() ?>>
42
- <input type="hidden" name="<?php echo $name ?>" id="<?php echo $name ?>" class="factory-ui-control-group" value="<?php echo $value ?>" />
43
-
44
- <?php if ( $title ) {?>
45
- <strong class="factory-header"><?php echo $title; ?></strong>
46
- <?php } ?>
47
-
48
- <ul class="factory-control-group-nav">
49
- <?php
50
- foreach( $this->elements as $element ):
51
- if ( $element->options['type'] !== 'control-group-item' ) continue;
52
- $builder = new FactoryForms329_HtmlAttributeBuilder();
53
- $builder->addCssClass('factory-control-group-nav-label');
54
- $builder->addCssClass('factory-control-group-nav-label-'. $element->getOption('name') );
55
- $builder->addHtmlData('control-id', 'factory-control-group-item-' . $element->getOption('name') );
56
- $builder->addHtmlData('control-name', $element->getOption('name') );
57
-
58
- if ( $value == $element->getOption('name') ) $builder->addCssClass('current');
59
-
60
- ?>
61
- <li <?php $builder->printAttrs(); ?>><?php $element->title(); ?></li>
62
- <?php endforeach; ?>
63
- </ul>
64
- <div class="factory-control-group-body">
65
- <?php
66
- }
67
-
68
- /**
69
- * Here we should render an end html of the tab.
70
- *
71
- * @since 1.0.0
72
- * @return void
73
- */
74
- public function afterRendering() {
75
- ?>
76
- </div>
77
- </div>
78
- <?php
79
- }
80
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the class of Tab Control Holder.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( !class_exists('Wbcr_FactoryForms400_ControlGroupHolder') ) {
18
+
19
+ /**
20
+ * Tab Control Holder
21
+ *
22
+ * @since 1.0.0
23
+ */
24
+ class Wbcr_FactoryForms400_ControlGroupHolder extends Wbcr_FactoryForms400_ControlHolder {
25
+
26
+ /**
27
+ * A holder type.
28
+ *
29
+ * @since 1.0.0
30
+ * @var string
31
+ */
32
+ public $type = 'control-group';
33
+
34
+
35
+ /**
36
+ * Here we should render a beginning html of the tab.
37
+ *
38
+ * @since 1.0.0
39
+ * @return void
40
+ */
41
+ public function beforeRendering()
42
+ {
43
+ $name = $this->getNameOnForm();
44
+ $value = $this->getValue();
45
+
46
+ $title = $this->getOption('title', null);
47
+
48
+ ?>
49
+ <div <?php $this->attrs() ?>>
50
+ <input type="hidden" name="<?php echo $name ?>" id="<?php echo $name ?>" class="factory-ui-control-group" value="<?php echo $value ?>"/>
51
+
52
+ <?php if( $title ) { ?>
53
+ <strong class="factory-header"><?php echo $title; ?></strong>
54
+ <?php } ?>
55
+
56
+ <ul class="factory-control-group-nav">
57
+ <?php
58
+ foreach($this->elements as $element):
59
+
60
+ if( $element->options['type'] !== 'control-group-item' ) {
61
+ continue;
62
+ }
63
+
64
+ $builder = new Wbcr_FactoryForms400_HtmlAttributeBuilder();
65
+
66
+ $builder->addCssClass('factory-control-group-nav-label');
67
+ $builder->addCssClass('factory-control-group-nav-label-' . $element->getOption('name'));
68
+ $builder->addHtmlData('control-id', 'factory-control-group-item-' . $element->getOption('name'));
69
+ $builder->addHtmlData('control-name', $element->getOption('name'));
70
+
71
+ if( $value == $element->getOption('name') ) {
72
+ $builder->addCssClass('current');
73
+ }
74
+
75
+ ?>
76
+ <li <?php $builder->printAttrs(); ?>><?php $element->title(); ?></li>
77
+ <?php endforeach; ?>
78
+ </ul>
79
+ <div class="factory-control-group-body">
80
+ <?php
81
+ }
82
+
83
+ /**
84
+ * Here we should render an end html of the tab.
85
+ *
86
+ * @since 1.0.0
87
+ * @return void
88
+ */
89
+ public function afterRendering()
90
+ {
91
+ ?>
92
+ </div>
93
+ </div>
94
+ <?php
95
+ }
96
+ }
97
+ }
libs/factory/forms/controls/holders/div.php CHANGED
@@ -1,54 +1,67 @@
1
  <?php
2
- /**
3
- * The file contains the class of Div Control Holder.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package factory-forms
9
- * @since 1.0.0
10
- */
11
 
12
- /**
13
- * Div Control Holder
14
- *
15
- * @since 1.0.0
16
- */
17
- class FactoryForms329_DivHolder extends FactoryForms329_Holder {
18
-
19
- /**
20
- * A holder type.
21
- *
22
- * @since 1.0.0
23
- * @var string
24
- */
25
- public $type = 'div';
26
-
27
- /**
28
- * Here we should render a beginning html of the tab.
29
- *
30
- * @since 1.0.0
31
- * @return void
32
- */
33
- public function beforeRendering() {
34
 
35
- if ( isset( $this->options['class'] )) $this->addCssClass ( $this->options['class'] );
36
- if ( isset( $this->options['id'] )) $this->addHtmlAttr ( 'id', $this->options['id'] );
 
 
 
 
 
37
 
38
- ?>
39
- <div <?php $this->attrs() ?>>
40
- <?php
41
- }
42
-
43
- /**
44
- * Here we should render an end html of the tab.
45
- *
46
- * @since 1.0.0
47
- * @return void
48
- */
49
- public function afterRendering() {
50
- ?>
51
- </div>
52
- <?php
53
- }
54
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the class of Div Control Holder.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
+ */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
+ if( !class_exists('Wbcr_FactoryForms400_DivHolder') ) {
18
+ /**
19
+ * Div Control Holder
20
+ *
21
+ * @since 1.0.0
22
+ */
23
+ class Wbcr_FactoryForms400_DivHolder extends Wbcr_FactoryForms400_Holder {
24
 
25
+ /**
26
+ * A holder type.
27
+ *
28
+ * @since 1.0.0
29
+ * @var string
30
+ */
31
+ public $type = 'div';
32
+
33
+ /**
34
+ * Here we should render a beginning html of the tab.
35
+ *
36
+ * @since 1.0.0
37
+ * @return void
38
+ */
39
+ public function beforeRendering()
40
+ {
41
+
42
+ if( isset($this->options['class']) ) {
43
+ $this->addCssClass($this->options['class']);
44
+ }
45
+ if( isset($this->options['id']) ) {
46
+ $this->addHtmlAttr('id', $this->options['id']);
47
+ }
48
+
49
+ ?>
50
+ <div <?php $this->attrs() ?>>
51
+ <?php
52
+ }
53
+
54
+ /**
55
+ * Here we should render an end html of the tab.
56
+ *
57
+ * @since 1.0.0
58
+ * @return void
59
+ */
60
+ public function afterRendering()
61
+ {
62
+ ?>
63
+ </div>
64
+ <?php
65
+ }
66
+ }
67
+ }
libs/factory/forms/controls/holders/form-group.php CHANGED
@@ -1,62 +1,71 @@
1
  <?php
2
- /**
3
- * The file contains the class of Group Holder.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package factory-forms
9
- * @since 1.0.0
10
- */
11
 
12
- /**
13
- * Group Holder
14
- *
15
- * @since 1.0.0
16
- */
17
- class FactoryForms329_FormGroupHolder extends FactoryForms329_Holder {
18
-
19
- /**
20
- * A holder type.
21
- *
22
- * @since 1.0.0
23
- * @var string
24
- */
25
- public $type = 'form-group';
26
-
27
- /**
28
- * Here we should render a beginning html of the tab.
29
- *
30
- * @since 1.0.0
31
- * @return void
32
- */
33
- public function beforeRendering() {
34
 
35
- $this->addCssClass('factory-form-group-'. $this->getName() );
36
- $this->addHtmlAttr('id', 'factory-form-group-' . $this->getName() );
37
-
38
- ?>
39
- <fieldset <?php $this->attrs()?>>
40
- <?php if ( $this->hasTitle() ) { ?>
41
- <legend class='factory-legend'>
42
- <p class='factory-title'><?php $this->title() ?></p>
43
- <?php if ( $this->hasHint() ) { ?>
44
- <p class='factory-hint'><?php echo $this->hint() ?></p>
45
- <?php } ?>
46
- </legend>
47
- <?php } ?>
48
- <?php
49
- }
50
-
51
- /**
52
- * Here we should render an end html of the tab.
53
- *
54
- * @since 1.0.0
55
- * @return void
56
- */
57
- public function afterRendering() {
58
- ?>
59
- </fieldset>
60
- <?php
61
- }
62
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the class of Group Holder.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
+ */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
+ if( !class_exists('Wbcr_FactoryForms400_FormGroupHolder') ) {
18
+ /**
19
+ * Group Holder
20
+ *
21
+ * @since 1.0.0
22
+ */
23
+ class Wbcr_FactoryForms400_FormGroupHolder extends Wbcr_FactoryForms400_Holder {
24
+
25
+ /**
26
+ * A holder type.
27
+ *
28
+ * @since 1.0.0
29
+ * @var string
30
+ */
31
+ public $type = 'form-group';
32
+
33
+ /**
34
+ * Here we should render a beginning html of the tab.
35
+ *
36
+ * @since 1.0.0
37
+ * @return void
38
+ */
39
+ public function beforeRendering()
40
+ {
41
+
42
+ $this->addCssClass('factory-form-group-' . $this->getName());
43
+ $this->addHtmlAttr('id', 'factory-form-group-' . $this->getName());
44
+
45
+ ?>
46
+ <fieldset <?php $this->attrs() ?>>
47
+ <?php if( $this->hasTitle() ) { ?>
48
+ <legend class='factory-legend'>
49
+ <p class='factory-title'><?php $this->title() ?></p>
50
+ <?php if( $this->hasHint() ) { ?>
51
+ <p class='factory-hint'><?php echo $this->hint() ?></p>
52
+ <?php } ?>
53
+ </legend>
54
+ <?php } ?>
55
+ <?php
56
+ }
57
+
58
+ /**
59
+ * Here we should render an end html of the tab.
60
+ *
61
+ * @since 1.0.0
62
+ * @return void
63
+ */
64
+ public function afterRendering()
65
+ {
66
+ ?>
67
+ </fieldset>
68
+ <?php
69
+ }
70
+ }
71
+ }
libs/factory/forms/controls/holders/more-link.php CHANGED
@@ -1,62 +1,75 @@
1
  <?php
2
- /**
3
- * The file contains the class of More Link Holder.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package factory-forms
9
- * @since 1.0.0
10
- */
11
-
12
- /**
13
- * Collapsed Group Holder
14
- *
15
- * @since 1.0.0
16
- */
17
- class FactoryForms329_MoreLinkHolder extends FactoryForms329_Holder {
18
-
19
- /**
20
- * A holder type.
21
- *
22
- * @since 1.0.0
23
- * @var string
24
- */
25
- public $type = 'more-link';
26
-
27
- /**
28
- * Here we should render a beginning html of the tab.
29
- *
30
- * @since 1.0.0
31
- * @return void
32
- */
33
- public function beforeRendering() {
34
-
35
- $count = isset( $this->options['count'] ) ? $this->options['count'] : 0;
36
- $id = 'factory-more-link-' . $this->getName();
37
-
38
- ?>
39
- <div <?php $this->attrs() ?>>
40
- <div class="form-group">
41
- <div class="control-label col-sm-2"></div>
42
- <div class="control-group col-sm-10">
43
- <a href="#<?php echo $id ?>" class="factory-more-link-show"><?php $this->title() ?> (<?php echo $count ?>)</a>
44
- </div>
45
- </div>
46
- <div class='factory-more-link-content' id="<?php echo $id ?>" style="display: none;">
47
- <a href="#<?php echo $id ?>" class='factory-more-link-hide'><?php _e('hide extra options', 'factory'); ?></a>
48
- <?php
49
- }
50
-
51
- /**
52
- * Here we should render an end html of the tab.
53
- *
54
- * @since 1.0.0
55
- * @return void
56
- */
57
- public function afterRendering() {
58
- ?>
59
- </div></div>
60
- <?php
61
- }
62
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the class of More Link Holder.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( !class_exists('Wbcr_FactoryForms400_MoreLinkHolder') ) {
18
+
19
+ /**
20
+ * Collapsed Group Holder
21
+ *
22
+ * @since 1.0.0
23
+ */
24
+ class Wbcr_FactoryForms400_MoreLinkHolder extends Wbcr_FactoryForms400_Holder {
25
+
26
+ /**
27
+ * A holder type.
28
+ *
29
+ * @since 1.0.0
30
+ * @var string
31
+ */
32
+ public $type = 'more-link';
33
+
34
+ /**
35
+ * Here we should render a beginning html of the tab.
36
+ *
37
+ * @since 1.0.0
38
+ * @return void
39
+ */
40
+ public function beforeRendering()
41
+ {
42
+ $count = isset($this->options['count'])
43
+ ? $this->options['count']
44
+ : 0;
45
+
46
+ $id = 'factory-more-link-' . $this->getName();
47
+
48
+ ?>
49
+ <div <?php $this->attrs() ?>>
50
+ <div class="form-group">
51
+ <div class="control-label col-sm-2"></div>
52
+ <div class="control-group col-sm-10">
53
+ <a href="#<?php echo $id ?>" class="factory-more-link-show"><?php $this->title() ?>
54
+ (<?php echo $count ?>)</a>
55
+ </div>
56
+ </div>
57
+ <div class='factory-more-link-content' id="<?php echo $id ?>" style="display: none;">
58
+ <a href="#<?php echo $id ?>" class='factory-more-link-hide'><?php _e('hide extra options', 'factory'); ?></a>
59
+ <?php
60
+ }
61
+
62
+ /**
63
+ * Here we should render an end html of the tab.
64
+ *
65
+ * @since 1.0.0
66
+ * @return void
67
+ */
68
+ public function afterRendering()
69
+ {
70
+ ?>
71
+ </div></div>
72
+ <?php
73
+ }
74
+ }
75
+ }
libs/factory/forms/controls/holders/tab-item.php CHANGED
@@ -1,57 +1,68 @@
1
  <?php
2
- /**
3
- * The file contains the class of Tab Item Control Holder.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package factory-forms
9
- * @since 1.0.0
10
- */
11
-
12
- /**
13
- * Tab Item Control Holder
14
- *
15
- * @since 1.0.0
16
- */
17
- class FactoryForms329_TabItemHolder extends FactoryForms329_Holder {
18
-
19
- /**
20
- * A holder type.
21
- *
22
- * @since 1.0.0
23
- * @var string
24
- */
25
- public $type = 'tab-item';
26
-
27
- /**
28
- * Here we should render a beginning html of the tab.
29
- *
30
- * @since 1.0.0
31
- * @return void
32
- */
33
- public function beforeRendering() {
34
-
35
- $this->addCssClass('tab-'. $this->getName() );
36
- $this->addHtmlAttr('id', $this->getName() );
37
-
38
- $this->addCssClass('tab-pane');
39
- if ( isset( $this->options['isFirst'] ) && $this->options['isFirst'] ) $this->addCssClass('active');
40
-
41
- ?>
42
- <div <?php $this->attrs()?>>
43
- <?php
44
- }
45
-
46
- /**
47
- * Here we should render an end html of the tab.
48
- *
49
- * @since 1.0.0
50
- * @return void
51
- */
52
- public function afterRendering() {
53
- ?>
54
- </div>
55
- <?php
56
- }
57
- }
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the class of Tab Item Control Holder.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly
12
+ if( !defined('ABSPATH') ) {
13
+ exit;
14
+ }
15
+
16
+ if( !class_exists('Wbcr_FactoryForms400_TabItemHolder') ) {
17
+ /**
18
+ * Tab Item Control Holder
19
+ *
20
+ * @since 1.0.0
21
+ */
22
+ class Wbcr_FactoryForms400_TabItemHolder extends Wbcr_FactoryForms400_Holder {
23
+
24
+ /**
25
+ * A holder type.
26
+ *
27
+ * @since 1.0.0
28
+ * @var string
29
+ */
30
+ public $type = 'tab-item';
31
+
32
+ /**
33
+ * Here we should render a beginning html of the tab.
34
+ *
35
+ * @since 1.0.0
36
+ * @return void
37
+ */
38
+ public function beforeRendering()
39
+ {
40
+
41
+ $this->addCssClass('tab-' . $this->getName());
42
+ $this->addHtmlAttr('id', $this->getName());
43
+
44
+ $this->addCssClass('tab-pane');
45
+
46
+ if( isset($this->options['isFirst']) && $this->options['isFirst'] ) {
47
+ $this->addCssClass('active');
48
+ }
49
+
50
+ ?>
51
+ <div <?php $this->attrs() ?>>
52
+ <?php
53
+ }
54
+
55
+ /**
56
+ * Here we should render an end html of the tab.
57
+ *
58
+ * @since 1.0.0
59
+ * @return void
60
+ */
61
+ public function afterRendering()
62
+ {
63
+ ?>
64
+ </div>
65
+ <?php
66
+ }
67
+ }
68
+ }
libs/factory/forms/controls/holders/tab.php CHANGED
@@ -1,112 +1,139 @@
1
  <?php
2
- /**
3
- * The file contains the class of Tab Control Holder.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package factory-forms
9
- * @since 1.0.0
10
- */
11
-
12
- /**
13
- * Tab Control Holder
14
- *
15
- * @since 1.0.0
16
- */
17
- class FactoryForms329_TabHolder extends FactoryForms329_Holder {
18
-
19
- /**
20
- * A holder type.
21
- *
22
- * @since 1.0.0
23
- * @var string
24
- */
25
- public $type = 'tab';
26
-
27
- /**
28
- * An align of a tab (horizontal or vertical).
29
- *
30
- * @since 1.0.0
31
- * @var string
32
- */
33
- public $align = 'horizontal';
34
-
35
- /**
36
- * Creates a new instance of control holder.
37
- *
38
- * @since 1.0.0
39
- * @param mixed[] $options A holder options.
40
- * @param FactoryForms329_Form $form A parent form.
41
- */
42
- public function __construct($options, $form) {
43
- parent::__construct($options, $form);
44
- $this->align = isset( $options['align'] ) ? $options['align'] : 'horizontal';
45
- }
46
-
47
- /**
48
- * Here we should render a beginning html of the tab.
49
- *
50
- * @since 1.0.0
51
- * @return void
52
- */
53
- public function beforeRendering() {
54
-
55
- $isFirstTab = true;
56
- $tabClass = $this->getOption('class');
57
-
58
- if(!empty($tabClass))
59
- $this->addCssClass($tabClass);
60
- $this->addCssClass('factory-align-' . $this->align);
61
-
62
- ?>
63
- <div <?php $this->attrs() ?>>
64
- <div class="factory-headers">
65
- <ul class="nav nav-tabs">
66
- <?php foreach( $this->elements as $element ) {
67
- if ( $element->options['type'] !== 'tab-item' ) continue;
68
-
69
- $hasIcon = isset( $element->options['icon'] );
70
- if ( $hasIcon ) $tabIcon = $element->options['icon'];
71
-
72
- $builder = new FactoryForms329_HtmlAttributeBuilder();
73
- $builder->addCssClass('factory-tab-item-header');
74
- $builder->addCssClass('factory-tab-item-header-'. $element->getName() );
75
- if ( $hasIcon ) $builder->addCssClass('factory-tab-item-header-with-icon');
76
- if ( $isFirstTab ) $builder->addCssClass('active');
77
-
78
- $builder->addHtmlData('tab-id', $element->getName() );
79
- $isFirstTab = false;
80
-
81
- if ($hasIcon) { ?>
82
- <style>
83
- .factory-form-tab-item-header-<?php $element->name() ?> a {
84
- background-image: url("<?php echo $tabIcon ?>");
85
- }
86
- </style>
87
- <?php } ?>
88
- <li <?php $builder->printAttrs() ?>>
89
- <a href="#<?php $element->name() ?>" data-toggle="tab">
90
- <?php $element->title() ?>
91
- </a>
92
- </li>
93
- <?php } ?>
94
- </ul>
95
- </div>
96
- <div class='tab-content factory-bodies'>
97
- <?php
98
- }
99
-
100
- /**
101
- * Here we should render an end html of the tab.
102
- *
103
- * @since 1.0.0
104
- * @return void
105
- */
106
- public function afterRendering() {
107
- ?>
108
- </div>
109
- </div>
110
- <?php
111
- }
112
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the class of Tab Control Holder.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( !class_exists('Wbcr_FactoryForms400_TabHolder') ) {
18
+
19
+ /**
20
+ * Tab Control Holder
21
+ *
22
+ * @since 1.0.0
23
+ */
24
+ class Wbcr_FactoryForms400_TabHolder extends Wbcr_FactoryForms400_Holder {
25
+
26
+ /**
27
+ * A holder type.
28
+ *
29
+ * @since 1.0.0
30
+ * @var string
31
+ */
32
+ public $type = 'tab';
33
+
34
+ /**
35
+ * An align of a tab (horizontal or vertical).
36
+ *
37
+ * @since 1.0.0
38
+ * @var string
39
+ */
40
+ public $align = 'horizontal';
41
+
42
+ /**
43
+ * Creates a new instance of control holder.
44
+ *
45
+ * @since 1.0.0
46
+ * @param mixed[] $options A holder options.
47
+ * @param FactoryForms400_Form $form A parent form.
48
+ */
49
+ public function __construct($options, $form)
50
+ {
51
+ parent::__construct($options, $form);
52
+ $this->align = isset($options['align'])
53
+ ? $options['align']
54
+ : 'horizontal';
55
+ }
56
+
57
+ /**
58
+ * Here we should render a beginning html of the tab.
59
+ *
60
+ * @since 1.0.0
61
+ * @return void
62
+ */
63
+ public function beforeRendering()
64
+ {
65
+
66
+ $is_first_tab = true;
67
+ $tab_class = $this->getOption('class');
68
+
69
+ if( !empty($tab_class) ) {
70
+ $this->addCssClass($tab_class);
71
+ }
72
+
73
+ $this->addCssClass('factory-align-' . $this->align);
74
+
75
+ ?>
76
+ <div <?php $this->attrs() ?>>
77
+ <div class="factory-headers">
78
+ <ul class="nav nav-tabs">
79
+ <?php foreach($this->elements as $element) {
80
+ if( $element->options['type'] !== 'tab-item' ) {
81
+ continue;
82
+ }
83
+
84
+ $tab_icon = '';
85
+ $has_icon = isset($element->options['icon']);
86
+
87
+ if( $has_icon ) {
88
+ $tab_icon = $element->options['icon'];
89
+ }
90
+
91
+ $builder = new Wbcr_FactoryForms400_HtmlAttributeBuilder();
92
+
93
+ $builder->addCssClass('factory-tab-item-header');
94
+ $builder->addCssClass('factory-tab-item-header-' . $element->getName());
95
+
96
+ if( $has_icon ) {
97
+ $builder->addCssClass('factory-tab-item-header-with-icon');
98
+ }
99
+ if( $is_first_tab ) {
100
+ $builder->addCssClass('active');
101
+ }
102
+
103
+ $builder->addHtmlData('tab-id', $element->getName());
104
+ $is_first_tab = false;
105
+
106
+ if( $has_icon ) { ?>
107
+ <style>
108
+ .factory-form-tab-item-header-<?php $element->name() ?> a {
109
+ background-image: url("<?php echo $tab_icon ?>");
110
+ }
111
+ </style>
112
+ <?php } ?>
113
+ <li <?php $builder->printAttrs() ?>>
114
+ <a href="#<?php $element->name() ?>" data-toggle="tab">
115
+ <?php $element->title() ?>
116
+ </a>
117
+ </li>
118
+ <?php } ?>
119
+ </ul>
120
+ </div>
121
+ <div class='tab-content factory-bodies'>
122
+ <?php
123
+ }
124
+
125
+ /**
126
+ * Here we should render an end html of the tab.
127
+ *
128
+ * @since 1.0.0
129
+ * @return void
130
+ */
131
+ public function afterRendering()
132
+ {
133
+ ?>
134
+ </div>
135
+ </div>
136
+ <?php
137
+ }
138
+ }
139
+ }
libs/factory/forms/controls/integer.php CHANGED
@@ -21,127 +21,140 @@
21
  * default => a default value of the control if the "value" option is not specified
22
  *
23
  * @author Alex Kovalev <alex.kovalevv@gmail.com>
24
- * @copyright (c) 2013, OnePress Ltd
25
  *
26
  * @package factory-forms
27
  * @since 1.0.0
28
  */
29
- class FactoryForms329_IntegerControl extends FactoryForms329_Control {
30
-
31
- public $type = 'integer';
32
-
33
- /**
34
- * Converting string to integer.
35
- *
36
- * @since 1.0.0
37
- * @return integer
38
- */
39
- public function html()
40
- {
41
-
42
- $name = $this->getNameOnForm();
43
- $value = esc_attr($this->getValue());
44
- $isActive = $this->getOption('isActive', 1);
45
- $unit = esc_attr($this->getOption('units'));
46
-
47
- $way = $this->getOption('way');
48
- if( empty($way) ) {
49
- $way = 'text';
50
- }
51
-
52
- $hasSlider = false;
53
 
54
- if( in_array($way, array('slider', 'checkbox-slider')) ) {
55
- $range = $this->getOption('range', array(0, 99));
56
- $slider_title = $this->getOption('slider-title');
57
- $checkbox = $this->getOption('checkbox');
58
- $step = $this->getOption('step', 1);
59
- $hasSlider = true;
60
- }
61
-
62
- $this->addCssClass('factory-way-' . $way);
63
- if( $hasSlider ) {
64
- $this->addCssClass('factory-has-slider');
65
- }
66
- ?>
67
-
68
- <div <?php $this->attrs() ?>>
69
- <?php if( $hasSlider ) { ?>
70
-
71
- <?php if( 'checkbox-slider' == $way ) { ?>
72
-
73
- <div>
74
- <label for="<?php echo $name; ?>_checker"><?php echo $isActive
75
- ? $checkbox['off']
76
- : $checkbox['on']; ?></label><br>
77
- <input type="checkbox" id="<?php echo $name; ?>_checker" class="factory-checkbox" name="<?php echo $name; ?>_checker" <?php echo $isActive
78
- ? 'checked'
79
- : '' ?>></p>
80
- </div>
81
-
82
- <?php } ?>
83
 
84
- <div
85
- data-units="<?php echo $unit ?>"
86
- data-range-start="<?php echo $range[0] ?>"
87
- data-range-end="<?php echo $range[1] ?>"
88
- data-step="<?php echo $step ?>"
89
- <?php echo !$isActive
90
- ? ' style="display:none;"'
91
- : '' ?>
92
- class="factory-slider-container factory-slider-container-<?php echo $name; ?>">
93
- <?php if( !empty($slider_title) ): ?>
94
- <label class="factory-title">
95
- <?php echo $this->getOption('slider-title'); ?>
96
- </label>
97
- <?php endif; ?>
98
-
99
- <div class="factory-slider">
100
- <div class="factory-bar"></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  <span class="factory-visible-value">
102
  <?php echo $value ?><?php echo $unit ?>
103
  </span>
 
 
104
  </div>
105
- <input type="hidden" name="<?php echo $name; ?>" class="factory-result" value="<?php echo $value; ?>"/>
106
- </div>
107
 
108
- <?php } else { ?>
109
 
110
- <input type="text" id="<?php echo $name; ?>" name="<?php echo $name; ?>" value="<?php echo $value; ?>" class="factory-input-text"/>
111
- <span class="factory-units"><?php echo $unit ?></span>
112
 
113
- <?php } ?>
114
- </div><!-- .factory-integer -->
115
- <?php
116
- }
117
 
118
- /**
119
- * Форматирует значение без единиц измерения
120
- * @param string $values
121
- * @param string $unit
122
- * @return string
123
- */
124
- public function valueFormatWithoutUnit($values, $unit)
125
- {
126
- if( !is_numeric($values) ) {
127
- return str_replace($unit, '', $values);
128
- } else {
129
- return $values;
 
130
  }
131
- }
132
 
133
- /**
134
- * Форматирует значение c единицами измерения
135
- * @param string $values
136
- * @param string $unit
137
- * @return string
138
- */
139
- public function valueFormatWithUnit($values, $unit)
140
- {
141
- if( is_numeric($values) ) {
142
- return $values . $unit;
143
- } else {
144
- return $values;
 
145
  }
146
  }
147
- }
21
  * default => a default value of the control if the "value" option is not specified
22
  *
23
  * @author Alex Kovalev <alex.kovalevv@gmail.com>
24
+ * @copyright (c) 2018, Webcraftic Ltd
25
  *
26
  * @package factory-forms
27
  * @since 1.0.0
28
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
 
30
+ // Exit if accessed directly
31
+ if( !defined('ABSPATH') ) {
32
+ exit;
33
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
+ if( !class_exists('Wbcr_FactoryForms400_IntegerControl') ) {
36
+
37
+ class Wbcr_FactoryForms400_IntegerControl extends Wbcr_FactoryForms400_Control {
38
+
39
+ public $type = 'integer';
40
+
41
+ /**
42
+ * Converting string to integer.
43
+ *
44
+ * @since 1.0.0
45
+ * @return integer
46
+ */
47
+ public function html()
48
+ {
49
+
50
+ $name = $this->getNameOnForm();
51
+ $value = esc_attr($this->getValue());
52
+ $step = 1;
53
+ $range = $checkbox = array();
54
+ $is_active = $this->getOption('isActive', 1);
55
+ $unit = esc_attr($this->getOption('units'));
56
+
57
+ $way = $this->getOption('way');
58
+
59
+ if( empty($way) ) {
60
+ $way = 'text';
61
+ }
62
+
63
+ $has_slider = false;
64
+
65
+ if( in_array($way, array('slider', 'checkbox-slider')) ) {
66
+ $range = $this->getOption('range', array(0, 99));
67
+ $slider_title = $this->getOption('slider-title');
68
+ $checkbox = $this->getOption('checkbox');
69
+ $step = $this->getOption('step', 1);
70
+ $has_slider = true;
71
+ }
72
+
73
+ $this->addCssClass('factory-way-' . $way);
74
+
75
+ if( $has_slider ) {
76
+ $this->addCssClass('factory-has-slider');
77
+ }
78
+ ?>
79
+
80
+ <div <?php $this->attrs() ?>>
81
+ <?php if( $has_slider ) { ?>
82
+
83
+ <?php if( 'checkbox-slider' == $way ) { ?>
84
+
85
+ <div>
86
+ <label for="<?php echo $name; ?>_checker"><?php echo $is_active
87
+ ? $checkbox['off']
88
+ : $checkbox['on']; ?></label><br>
89
+ <input type="checkbox" id="<?php echo $name; ?>_checker" class="factory-checkbox" name="<?php echo $name; ?>_checker" <?php echo $is_active
90
+ ? 'checked'
91
+ : '' ?>>
92
+ </div>
93
+
94
+ <?php } ?>
95
+
96
+ <div
97
+ data-units="<?php echo $unit ?>"
98
+ data-range-start="<?php echo $range[0] ?>"
99
+ data-range-end="<?php echo $range[1] ?>"
100
+ data-step="<?php echo $step ?>"
101
+ <?php echo !$is_active
102
+ ? ' style="display:none;"'
103
+ : '' ?>
104
+ class="factory-slider-container factory-slider-container-<?php echo $name; ?>">
105
+ <?php if( !empty($slider_title) ): ?>
106
+ <label class="factory-title">
107
+ <?php echo $this->getOption('slider-title'); ?>
108
+ </label>
109
+ <?php endif; ?>
110
+
111
+ <div class="factory-slider">
112
+ <div class="factory-bar"></div>
113
  <span class="factory-visible-value">
114
  <?php echo $value ?><?php echo $unit ?>
115
  </span>
116
+ </div>
117
+ <input type="hidden" name="<?php echo $name; ?>" class="factory-result" value="<?php echo $value; ?>"/>
118
  </div>
 
 
119
 
120
+ <?php } else { ?>
121
 
122
+ <input type="number" id="<?php echo $name; ?>" name="<?php echo $name; ?>" value="<?php echo $value; ?>" class="factory-input-text"/>
123
+ <span class="factory-units"><?php echo $unit ?></span>
124
 
125
+ <?php } ?>
126
+ </div><!-- .factory-integer -->
127
+ <?php
128
+ }
129
 
130
+ /**
131
+ * Форматирует значение без единиц измерения
132
+ * @param string $values
133
+ * @param string $unit
134
+ * @return string
135
+ */
136
+ public function valueFormatWithoutUnit($values, $unit)
137
+ {
138
+ if( !is_numeric($values) ) {
139
+ return str_replace($unit, '', $values);
140
+ } else {
141
+ return $values;
142
+ }
143
  }
 
144
 
145
+ /**
146
+ * Форматирует значение c единицами измерения
147
+ * @param string $values
148
+ * @param string $unit
149
+ * @return string
150
+ */
151
+ public function valueFormatWithUnit($values, $unit)
152
+ {
153
+ if( is_numeric($values) ) {
154
+ return $values . $unit;
155
+ } else {
156
+ return $values;
157
+ }
158
  }
159
  }
160
+ }
libs/factory/forms/controls/list.php CHANGED
@@ -1,211 +1,230 @@
1
  <?php
2
- /**
3
- * Multiselect List Control
4
- *
5
- * Main options:
6
- * name => a name of the control
7
- * value => a value to show in the control
8
- * default => a default value of the control if the "value" option is not specified
9
- * items => a callback to return items or an array of items to select
10
- *
11
- * @author Paul Kashtanoff <paul@byonepress.com>
12
- * @copyright (c) 2013, OnePress Ltd
13
- *
14
- * @package factory-forms
15
- * @since 1.0.0
16
- */
17
-
18
- class FactoryForms329_ListControl extends FactoryForms329_Control
19
- {
20
- public $type = 'list';
21
-
22
- /**
23
- * Returns a set of available items for the list.
24
- *
25
- * @since 1.0.0
26
- * @return mixed[]
27
- */
28
- private function getItems() {
29
-
30
- $data = $this->getOption('data', array());
31
-
32
- // if the data options is a valid callback for an object method
33
- if (
34
- is_array($data) &&
35
- count($data) == 2 &&
36
- gettype($data[0]) == 'object' ) {
37
-
38
- return call_user_func($data);
39
-
40
- // if the data options is a valid callback for a function
41
- } elseif ( gettype($data) == 'string' ) {
42
-
43
- return $data();
44
- }
45
-
46
- // if the data options is an array of values
47
- return $data;
48
- }
49
-
50
- /**
51
- * Returns true, if the data should be loaded via ajax.
52
- *
53
- * @since 1.0.0
54
- * @return bool
55
- */
56
- protected function isAjax() {
57
-
58
- $data = $this->getOption('data', array());
59
- return is_array($data) && isset($data['ajax']);
60
- }
61
-
62
- /**
63
- * Shows the html markup of the control.
64
- *
65
- * @since 1.0.0
66
- * @return void
67
- */
68
- public function html( ) {
69
-
70
- $way = $this->getOption('way', 'default');
71
- $this->addHtmlData('way', $way);
72
-
73
- if ( $this->isAjax() ) {
74
-
75
- $data = $this->getOption('data', array());
76
- $ajaxId = 'factory-list-' . rand(1000000, 9999999);
77
-
78
- $value = $this->getValue( null, true );
79
- if ( empty( $value ) || empty( $value[0] )) $value = array();
80
-
81
- ?>
82
- <div class="factory-ajax-loader <?php echo $ajaxId . '-loader'; ?>"></div>
83
- <script>
84
- window['<?php echo $ajaxId ?>'] = {
85
- 'loader': '.<?php echo $ajaxId . '-loader' ?>',
86
- 'url': '<?php echo $data['url'] ?>',
87
- 'data': <?php echo json_encode( $data['data'] ) ?>,
88
- 'selected': <?php echo json_encode( $value ) ?>,
89
- 'emptyList': '<?php echo $this->getOption('empty', __('The list is empty.', 'factory_forms_329') ) ?>'
90
- };
91
- </script>
92
- <?php
93
-
94
- $this->addHtmlData('ajax', true);
95
- $this->addHtmlData('ajax-data-id', $ajaxId);
96
- $this->addCssClass('factory-hidden');
97
- }
98
-
99
- if ( 'checklist' == $way ) {
100
- $this->checklistHtml();
101
- } else {
102
- $this->defaultHtml();
103
- }
104
- }
105
-
106
- /**
107
- * Shows the Buttons Dropdown.
108
- *
109
- * @since 1.0.0
110
- * @return void
111
- */
112
- protected function checklistHtml() {
113
- $items = $this->getItems();
114
-
115
- $value = explode( ',', $this->getValue() );
116
- if ( empty( $value ) || empty( $value[0] )) $value = array();
117
-
118
- $nameOnForm = $this->getNameOnForm();
119
-
120
- $this->addCssClass('factory-checklist-way');
121
- $this->addHtmlData('name', $nameOnForm);
122
-
123
- $errorsCallback = $this->getOption('errors');
124
- $errors = !empty( $errorsCallback ) ? call_user_func( $errorsCallback ) : array();
125
-
126
- $isEmpty = $this->isAjax() || empty( $items );
127
- $emptyList = $this->getOption('empty', __('The list is empty.', 'factory_forms_329') );
128
-
129
- if ( $isEmpty ) {
130
- $this->addCssClass('factory-empty');
131
- }
132
-
133
- ?>
134
- <ul <?php $this->attrs() ?>>
135
-
136
- <?php if ( $isEmpty ) { ?>
137
- <li><?php echo $emptyList ?></li>
138
- <?php } else { ?>
139
- <?php foreach($items as $item) { ?>
140
- <li>
141
- <label for="factory-checklist-<?php echo $nameOnForm ?>-<?php echo $item[0] ?>" class="<?php if ( !empty( $errors[$item[0] ] ) ) { echo 'factory-has-error'; } ?>">
142
-
143
- <?php if ( !empty( $errors[$item[0] ] ) ) { ?>
144
- <span class="factory-error">
 
 
 
 
 
 
 
 
 
 
 
 
145
  <i class="fa fa-exclamation-triangle"></i>
146
  <div class='factory-error-text'><?php echo $errors[$item[0]] ?></div>
147
  </span>
148
- <?php } else { ?>
149
- <span>
150
- <input
151
- type="checkbox"
152
- name="<?php echo $nameOnForm ?>[]"
153
- value="<?php echo $item[0] ?>"
154
- id="factory-checklist-<?php echo $nameOnForm ?>-<?php echo $item[0] ?>"
155
- <?php if ( in_array( $item[0], $value) ) { echo 'checked="checked"'; } ?> />
 
 
156
  </span>
157
- <?php } ?>
158
-
159
- <span><?php echo $item[1] ?></span>
160
- </label>
161
- </li>
162
- <?php } ?>
163
- <?php } ?>
164
-
165
- </ul>
166
- <?php
167
- }
168
-
169
- /**
170
- * Shows the standart dropdown.
171
- *
172
- * @since 1.3.1
173
- * @return void
174
- */
175
- protected function defaultHtml() {
176
-
177
- $items = $this->getItems();
178
- $value = $this->getValue();
179
-
180
- $nameOnForm = $this->getNameOnForm();
181
-
182
- $this->addHtmlAttr('id', $nameOnForm);
183
- $this->addHtmlAttr('name', $nameOnForm);
184
- $this->addCssClass('form-control');
185
-
186
- ?>
187
  <select multiple="multiple" <?php $this->attrs() ?>/>
188
  <?php foreach($items as $item) {
189
- if ( count($item) == 3 ) {
190
- ?>
191
- <optgroup label="<?php echo $item[1] ?>" >
192
- <?php foreach($item[2] as $subitem) { ?>
193
- <?php $selected = ( $subitem[0] == $value ) ? 'selected="selected"' : ''; ?>
194
- <option value='<?php echo $subitem[0] ?>' <?php echo $selected ?>>
195
- <?php echo $subitem[1] ?>
196
- </option>
197
- <?php } ?>
198
- </optgroup>
199
- <?php
200
- } else {
201
- $selected = ( $item[0] == $value ) ? 'selected="selected"' : '';
202
- ?>
203
- <option value='<?php echo $item[0] ?>' <?php echo $selected ?>>
204
- <?php echo $item[1] ?>
205
- </option>
206
- <?php } ?>
207
- <?php } ?>
 
 
 
 
208
  </select>
209
  <?php
210
- }
211
- }
 
1
  <?php
2
+
3
+ /**
4
+ * Multiselect List Control
5
+ *
6
+ * Main options:
7
+ * name => a name of the control
8
+ * value => a value to show in the control
9
+ * default => a default value of the control if the "value" option is not specified
10
+ * items => a callback to return items or an array of items to select
11
+ *
12
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
13
+ * @copyright (c) 2018, Webcraftic Ltd
14
+ *
15
+ * @package factory-forms
16
+ * @since 1.0.0
17
+ */
18
+
19
+ // Exit if accessed directly
20
+ if( !defined('ABSPATH') ) {
21
+ exit;
22
+ }
23
+
24
+ if( !class_exists('Wbcr_FactoryForms400_ListControl') ) {
25
+
26
+ class Wbcr_FactoryForms400_ListControl extends Wbcr_FactoryForms400_Control {
27
+
28
+ public $type = 'list';
29
+
30
+ /**
31
+ * Returns a set of available items for the list.
32
+ *
33
+ * @since 1.0.0
34
+ * @return mixed[]
35
+ */
36
+ private function getItems()
37
+ {
38
+
39
+ $data = $this->getOption('data', array());
40
+
41
+ // if the data options is a valid callback for an object method
42
+ if( (is_array($data) && count($data) == 2 && is_object($data[0])) || is_string($data) ) {
43
+
44
+ return call_user_func($data);
45
+ }
46
+
47
+ // if the data options is an array of values
48
+ return $data;
49
+ }
50
+
51
+ /**
52
+ * Returns true, if the data should be loaded via ajax.
53
+ *
54
+ * @since 1.0.0
55
+ * @return bool
56
+ */
57
+ protected function isAjax()
58
+ {
59
+
60
+ $data = $this->getOption('data', array());
61
+
62
+ return is_array($data) && isset($data['ajax']);
63
+ }
64
+
65
+ /**
66
+ * Shows the html markup of the control.
67
+ *
68
+ * @since 1.0.0
69
+ * @return void
70
+ */
71
+ public function html()
72
+ {
73
+
74
+ $way = $this->getOption('way', 'default');
75
+ $this->addHtmlData('way', $way);
76
+
77
+ if( $this->isAjax() ) {
78
+
79
+ $data = $this->getOption('data', array());
80
+ $ajax_id = 'factory-list-' . rand(1000000, 9999999);
81
+
82
+ $value = $this->getValue(null, true);
83
+
84
+ if( empty($value) || empty($value[0]) ) {
85
+ $value = array();
86
+ }
87
+
88
+ ?>
89
+ <div class="factory-ajax-loader <?php echo $ajax_id . '-loader'; ?>"></div>
90
+ <script>
91
+ window['<?php echo $ajax_id ?>'] = {
92
+ 'loader': '.<?php echo $ajax_id . '-loader' ?>',
93
+ 'url': '<?php echo $data['url'] ?>',
94
+ 'data': <?php echo json_encode( $data['data'] ) ?>,
95
+ 'selected': <?php echo json_encode( $value ) ?>,
96
+ 'emptyList': '<?php echo $this->getOption('empty', __('The list is empty.', 'wbcr_factory_forms_400') ) ?>'
97
+ };
98
+ </script>
99
+ <?php
100
+
101
+ $this->addHtmlData('ajax', true);
102
+ $this->addHtmlData('ajax-data-id', $ajax_id);
103
+ $this->addCssClass('factory-hidden');
104
+ }
105
+
106
+ if( 'checklist' == $way ) {
107
+ $this->checklistHtml();
108
+ } else {
109
+ $this->defaultHtml();
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Shows the Buttons Dropdown.
115
+ *
116
+ * @since 1.0.0
117
+ * @return void
118
+ */
119
+ protected function checklistHtml()
120
+ {
121
+ $items = $this->getItems();
122
+
123
+ $value = explode(',', $this->getValue());
124
+ if( empty($value) || empty($value[0]) ) {
125
+ $value = array();
126
+ }
127
+
128
+ $name_on_form = $this->getNameOnForm();
129
+
130
+ $this->addCssClass('factory-checklist-way');
131
+ $this->addHtmlData('name', $name_on_form);
132
+
133
+ $errors_callback = $this->getOption('errors');
134
+ $errors = !empty($errors_callback)
135
+ ? call_user_func($errors_callback)
136
+ : array();
137
+
138
+ $is_empty = $this->isAjax() || empty($items);
139
+ $emptyList = $this->getOption('empty', __('The list is empty.', 'wbcr_factory_forms_400'));
140
+
141
+ if( $is_empty ) {
142
+ $this->addCssClass('factory-empty');
143
+ }
144
+
145
+ ?>
146
+ <ul <?php $this->attrs() ?>>
147
+ <?php if( $is_empty ) { ?>
148
+ <li><?php echo $emptyList ?></li>
149
+ <?php } else { ?>
150
+ <?php foreach($items as $item) { ?>
151
+ <li>
152
+ <label for="factory-checklist-<?php echo $name_on_form ?>-<?php echo $item[0] ?>" class="<?php if( !empty($errors[$item[0]]) ) {
153
+ echo 'factory-has-error';
154
+ } ?>">
155
+ <?php if( !empty($errors[$item[0]]) ) { ?>
156
+ <span class="factory-error">
157
  <i class="fa fa-exclamation-triangle"></i>
158
  <div class='factory-error-text'><?php echo $errors[$item[0]] ?></div>
159
  </span>
160
+ <?php } else { ?>
161
+ <span>
162
+ <input
163
+ type="checkbox"
164
+ name="<?php echo $name_on_form ?>[]"
165
+ value="<?php echo $item[0] ?>"
166
+ id="factory-checklist-<?php echo $name_on_form ?>-<?php echo $item[0] ?>"
167
+ <?php if( in_array($item[0], $value) ) {
168
+ echo 'checked="checked"';
169
+ } ?> />
170
  </span>
171
+ <?php } ?>
172
+
173
+ <span><?php echo $item[1] ?></span>
174
+ </label>
175
+ </li>
176
+ <?php } ?>
177
+ <?php } ?>
178
+ </ul>
179
+ <?php
180
+ }
181
+
182
+ /**
183
+ * Shows the standart dropdown.
184
+ *
185
+ * @since 1.3.1
186
+ * @return void
187
+ */
188
+ protected function defaultHtml()
189
+ {
190
+
191
+ $items = $this->getItems();
192
+ $value = $this->getValue();
193
+
194
+ $name_on_form = $this->getNameOnForm();
195
+
196
+ $this->addHtmlAttr('id', $name_on_form);
197
+ $this->addHtmlAttr('name', $name_on_form);
198
+ $this->addCssClass('form-control');
199
+
200
+ ?>
201
  <select multiple="multiple" <?php $this->attrs() ?>/>
202
  <?php foreach($items as $item) {
203
+ if( count($item) == 3 ) {
204
+ ?>
205
+ <optgroup label="<?php echo $item[1] ?>">
206
+ <?php foreach($item[2] as $subitem) { ?>
207
+ <?php $selected = ($subitem[0] == $value)
208
+ ? 'selected="selected"'
209
+ : ''; ?>
210
+ <option value='<?php echo $subitem[0] ?>' <?php echo $selected ?>>
211
+ <?php echo $subitem[1] ?>
212
+ </option>
213
+ <?php } ?>
214
+ </optgroup>
215
+ <?php
216
+ } else {
217
+ $selected = ($item[0] == $value)
218
+ ? 'selected="selected"'
219
+ : '';
220
+ ?>
221
+ <option value='<?php echo $item[0] ?>' <?php echo $selected ?>>
222
+ <?php echo $item[1] ?>
223
+ </option>
224
+ <?php } ?>
225
+ <?php } ?>
226
  </select>
227
  <?php
228
+ }
229
+ }
230
+ }
libs/factory/forms/controls/multiple-textbox.php CHANGED
@@ -2,107 +2,119 @@
2
 
3
  /**
4
  * Control multiple textbox
5
- * @author Webcraftic <wordpress.webraftic@gmail.com>
6
- * @copyright (c) 22.11.2017, Webcraftic
 
7
  *
8
  * @package factory-forms
9
  * @since 1.0.0
10
  */
11
- class FactoryForms329_MultipleTextboxControl extends FactoryForms329_Control {
12
 
13
- public $type = 'multiple-textbox';
 
 
 
14
 
15
- /**
16
- * Preparing html attributes before rendering html of the control.
17
- *
18
- * @since 1.0.0
19
- * @return void
20
- */
21
- protected function beforeHtml()
22
- {
23
 
24
- $nameOnForm = $this->getNameOnForm();
25
 
26
- if( $this->getOption('maxLength', false) ) {
27
- $this->addHtmlAttr('maxlength', intval($this->getOption('maxLength')));
28
- }
29
 
30
- if( $this->getOption('placeholder', false) ) {
31
- $this->addHtmlAttr('placeholder', $this->getOption('placeholder'));
32
- }
 
 
 
 
 
33
 
34
- $this->addCssClass('form-control');
35
- $this->addHtmlAttr('type', 'text');
36
- //$this->addHtmlAttr('id', $nameOnForm);
37
- $this->addCssClass(str_replace('_', '-', $nameOnForm));
38
- $this->addHtmlAttr('name', $nameOnForm . '[]');
39
- }
40
 
41
- /**
42
- * Shows the html markup of the control.
43
- *
44
- * @since 1.0.0
45
- * @return void
46
- */
47
- public function html()
48
- {
49
-
50
- $values = $this->getValue();
51
-
52
- if( !empty($values) ) {
53
- $values = explode('{%spr%}', $values);
54
- } else {
55
- $values = array();
56
  }
57
 
58
- ?>
59
- <div class="factory-multiple-textbox-group">
60
- <div class="factory-mtextbox-items">
61
- <?php if( empty($values) ): ?>
62
- <div class="factory-mtextbox-item">
63
- <input <?php $this->attrs() ?>/>
64
- </div>
65
- <?php else: ?>
66
- <?php $counter = 0; ?>
67
- <?php foreach($values as $value): ?>
 
 
 
 
 
 
 
 
 
 
 
68
  <div class="factory-mtextbox-item">
69
- <input value="<?= esc_attr($value) ?>"<?php $this->attrs() ?>/>
70
- <?php if( $counter >= 1 ): ?>
71
- <button class="btn btn-default btn-small factory-mtextbox-remove-item">
72
- <i class="fa fa-times" aria-hidden="true"></i></button>
73
- <?php endif; ?>
74
  </div>
75
- <?php $counter++; ?>
76
- <?php endforeach; ?>
77
- <?php endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  </div>
79
- <button class="btn btn-default btn-small factory-mtextbox-add-item">
80
- <i class="fa fa-plus" aria-hidden="true"></i> <?php _e('Add new', 'factory_forms_329') ?>
81
- </button>
82
- </div>
83
-
84
- <?php
85
- }
86
 
87
- /**
88
- * Returns a submit value of the control by a given name.
89
- *
90
- * @since 1.0.0
91
- * @return mixed
92
- */
93
- public function getSubmitValue($name, $subName)
94
- {
95
- $nameOnForm = $this->getNameOnForm($name);
96
- $value = isset($_POST[$nameOnForm])
97
- ? $_POST[$nameOnForm]
98
- : null;
99
- if( is_array($value) ) {
100
- $value = array_map('sanitize_text_field', $value);
101
- $value = implode('{%spr%}', $value);
102
  }
103
 
104
- $value = sanitize_text_field($value);
 
 
 
 
 
 
 
 
105
 
106
- return $value;
 
 
 
 
 
 
 
 
 
 
 
 
107
  }
108
  }
2
 
3
  /**
4
  * Control multiple textbox
5
+ *
6
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
7
+ * @copyright (c) 2018, Webcraftic Ltd
8
  *
9
  * @package factory-forms
10
  * @since 1.0.0
11
  */
 
12
 
13
+ // Exit if accessed directly
14
+ if( !defined('ABSPATH') ) {
15
+ exit;
16
+ }
17
 
18
+ if( !class_exists('Wbcr_FactoryForms400_MultipleTextboxControl') ) {
 
 
 
 
 
 
 
19
 
20
+ class Wbcr_FactoryForms400_MultipleTextboxControl extends Wbcr_FactoryForms400_Control {
21
 
22
+ public $type = 'multiple-textbox';
 
 
23
 
24
+ /**
25
+ * Preparing html attributes before rendering html of the control.
26
+ *
27
+ * @since 1.0.0
28
+ * @return void
29
+ */
30
+ protected function beforeHtml()
31
+ {
32
 
33
+ $name_on_form = $this->getNameOnForm();
34
+
35
+ if( $this->getOption('maxLength', false) ) {
36
+ $this->addHtmlAttr('maxlength', intval($this->getOption('maxLength')));
37
+ }
 
38
 
39
+ if( $this->getOption('placeholder', false) ) {
40
+ $this->addHtmlAttr('placeholder', $this->getOption('placeholder'));
41
+ }
42
+
43
+ $this->addCssClass('form-control');
44
+ $this->addHtmlAttr('type', 'text');
45
+ //$this->addHtmlAttr('id', $name_on_form);
46
+ $this->addCssClass(str_replace('_', '-', $name_on_form));
47
+ $this->addHtmlAttr('name', $name_on_form . '[]');
 
 
 
 
 
 
48
  }
49
 
50
+ /**
51
+ * Shows the html markup of the control.
52
+ *
53
+ * @since 1.0.0
54
+ * @return void
55
+ */
56
+ public function html()
57
+ {
58
+
59
+ $values = $this->getValue();
60
+
61
+ if( !empty($values) ) {
62
+ $values = explode('{%spr%}', $values);
63
+ } else {
64
+ $values = array();
65
+ }
66
+
67
+ ?>
68
+ <div class="factory-multiple-textbox-group">
69
+ <div class="factory-mtextbox-items">
70
+ <?php if( empty($values) ): ?>
71
  <div class="factory-mtextbox-item">
72
+ <input <?php $this->attrs() ?>/>
 
 
 
 
73
  </div>
74
+ <?php else: ?>
75
+ <?php $counter = 0; ?>
76
+ <?php foreach($values as $value): ?>
77
+ <div class="factory-mtextbox-item">
78
+ <input value="<?= esc_attr($value) ?>"<?php $this->attrs() ?>/>
79
+ <?php if( $counter >= 1 ): ?>
80
+ <button class="btn btn-default btn-small factory-mtextbox-remove-item">
81
+ <i class="fa fa-times" aria-hidden="true"></i></button>
82
+ <?php endif; ?>
83
+ </div>
84
+ <?php $counter++; ?>
85
+ <?php endforeach; ?>
86
+ <?php endif; ?>
87
+ </div>
88
+ <button class="btn btn-default btn-small factory-mtextbox-add-item">
89
+ <i class="fa fa-plus" aria-hidden="true"></i> <?php _e('Add new', 'wbcr_factory_forms_400') ?>
90
+ </button>
91
  </div>
 
 
 
 
 
 
 
92
 
93
+ <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  }
95
 
96
+ /**
97
+ * Returns a submit value of the control by a given name.
98
+ *
99
+ * @since 1.0.0
100
+ * @return mixed
101
+ */
102
+ public function getSubmitValue($name, $subName)
103
+ {
104
+ $name_on_form = $this->getNameOnForm($name);
105
 
106
+ $value = isset($_POST[$name_on_form])
107
+ ? $_POST[$name_on_form]
108
+ : null;
109
+
110
+ if( is_array($value) ) {
111
+ $value = array_map('sanitize_text_field', $value);
112
+ $value = implode('{%spr%}', $value);
113
+ }
114
+
115
+ $value = sanitize_text_field($value);
116
+
117
+ return $value;
118
+ }
119
  }
120
  }
libs/factory/forms/controls/paddings-editor.php CHANGED
@@ -1,64 +1,82 @@
1
  <?php
2
-
3
  /**
4
  * Paddings Control
 
 
 
 
 
 
5
  */
6
- class FactoryForms329_PaddingsEditorControl extends FactoryForms329_Control {
7
 
8
- public $type = 'paddings-editor';
 
 
 
9
 
10
- /**
11
- * Converting string to integer.
12
- *
13
- * @since 1.0.0
14
- * @return integer
15
- */
16
- public function html()
17
- {
18
 
19
- $name = $this->getNameOnForm();
20
- $rawValue = esc_attr($this->getValue());
21
 
22
- $units = $this->getOption('units');
23
- $valuesWithUnits = explode(' ', $rawValue);
24
 
25
- $values = array();
26
- foreach($valuesWithUnits as $valueWithUnit) {
27
- $values[] = intval($valueWithUnit);
28
- }
 
 
 
 
29
 
30
- $unit = $this->getOption('units', 'px');
31
- $range = $this->getOption('range', array(0, 99));
32
- $step = $this->getOption('step', 1);
33
 
34
- ?>
35
- <div <?php $this->attrs() ?>
36
- data-units="<?php echo $unit ?>"
37
- data-range-start="<?php echo $range[0] ?>"
38
- data-range-end="<?php echo $range[1] ?>"
39
- data-step="<?php echo $step ?>">
40
- <div class="factory-rectangle">
41
- <div class="factory-side factory-side-top" data-value="<?php echo $values[0] ?>">
42
- <span class="factory-visible-value"><?php echo $values[0] ?><?php echo $units ?></span></div>
43
- <div class="factory-side factory-side-bottom" data-value="<?php echo $values[1] ?>">
44
- <span class="factory-visible-value"><?php echo $values[1] ?><?php echo $units ?></span></div>
45
- <div class="factory-side factory-side-left" data-value="<?php echo $values[2] ?>">
46
- <span class="factory-visible-value"><?php echo $values[2] ?><?php echo $units ?></span></div>
47
- <div class="factory-side factory-side-right" data-value="<?php echo $values[3] ?>">
48
- <span class="factory-visible-value"><?php echo $values[3] ?><?php echo $units ?></span></div>
49
- <div class="factory-side factory-side-center" data-value="<?php echo $values[0] ?>"></div>
50
- </div>
51
- <div class="factory-slider-container">
52
- <label class="factory-title">
53
- <?php _e('Select a side and move the slider to set up:', 'factory_forms_329') ?>
54
- </label>
55
 
56
- <div class="factory-slider">
57
- <div class="factory-bar"></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  </div>
 
59
  </div>
60
- <input type="hidden" class="factory-result" name="<?php echo $name ?>" value="<?php echo $rawValue ?>"/>
61
- </div>
62
- <?php
63
  }
64
- }
1
  <?php
 
2
  /**
3
  * Paddings Control
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
  */
 
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
 
17
+ if( !class_exists('Wbcr_FactoryForms400_PaddingsEditorControl') ) {
 
 
 
 
 
 
 
18
 
19
+ class Wbcr_FactoryForms400_PaddingsEditorControl extends Wbcr_FactoryForms400_Control {
 
20
 
21
+ public $type = 'paddings-editor';
 
22
 
23
+ /**
24
+ * Converting string to integer.
25
+ *
26
+ * @since 1.0.0
27
+ * @return integer
28
+ */
29
+ public function html()
30
+ {
31
 
32
+ $name = $this->getNameOnForm();
33
+ $raw_value = esc_attr($this->getValue());
 
34
 
35
+ $units = $this->getOption('units');
36
+ $values_with_units = explode(' ', $raw_value);
37
+
38
+ $values = array();
39
+ foreach($values_with_units as $value_with_unit) {
40
+ $values[] = intval($value_with_unit);
41
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
+ $unit = $this->getOption('units', 'px');
44
+ $range = $this->getOption('range', array(0, 99));
45
+ $step = $this->getOption('step', 1);
46
+
47
+ ?>
48
+ <div <?php $this->attrs() ?>
49
+ data-units="<?php echo $unit ?>"
50
+ data-range-start="<?php echo $range[0] ?>"
51
+ data-range-end="<?php echo $range[1] ?>"
52
+ data-step="<?php echo $step ?>">
53
+ <div class="factory-rectangle">
54
+ <div class="factory-side factory-side-top" data-value="<?php echo $values[0] ?>">
55
+ <span class="factory-visible-value"><?php echo $values[0] ?><?php echo $units ?></span>
56
+ </div>
57
+ <div class="factory-side factory-side-bottom" data-value="<?php echo $values[1] ?>">
58
+ <span class="factory-visible-value"><?php echo $values[1] ?><?php echo $units ?></span>
59
+ </div>
60
+ <div class="factory-side factory-side-left" data-value="<?php echo $values[2] ?>">
61
+ <span class="factory-visible-value"><?php echo $values[2] ?><?php echo $units ?></span>
62
+ </div>
63
+ <div class="factory-side factory-side-right" data-value="<?php echo $values[3] ?>">
64
+ <span class="factory-visible-value"><?php echo $values[3] ?><?php echo $units ?></span>
65
+ </div>
66
+ <div class="factory-side factory-side-center" data-value="<?php echo $values[0] ?>"></div>
67
+ </div>
68
+ <div class="factory-slider-container">
69
+ <label class="factory-title">
70
+ <?php _e('Select a side and move the slider to set up:', 'wbcr_factory_forms_400') ?>
71
+ </label>
72
+
73
+ <div class="factory-slider">
74
+ <div class="factory-bar"></div>
75
+ </div>
76
  </div>
77
+ <input type="hidden" class="factory-result" name="<?php echo $name ?>" value="<?php echo $raw_value ?>"/>
78
  </div>
79
+ <?php
80
+ }
 
81
  }
82
+ }
libs/factory/forms/controls/pattern.php CHANGED
@@ -3,164 +3,179 @@
3
  /**
4
  * Pattern Control
5
  *
6
- * @author Alex Kovalev <alex@byonepress.com>
7
- * @author Paul Kashtanoff <paul@byonepress.com>
8
- * @copyright (c) 2013-2014, OnePress Ltd
9
  *
10
  * @package factory-forms
11
  * @since 3.1.0
12
  */
13
- class FactoryForms329_PatternControl extends FactoryForms329_Control {
14
 
15
- public $type = 'pattern';
 
 
 
16
 
17
- public function getName()
18
- {
19
- return array(
20
- $this->getOption('name') . '__url',
21
- $this->getOption('name') . '__color'
22
- );
23
- }
24
 
25
- public function __construct($options, $form, $provider = null)
26
- {
27
- parent::__construct($options, $form, $provider);
28
 
29
- if( !isset($options['color']) ) {
30
- $options['color'] = array();
 
 
 
 
31
  }
32
 
33
- $options['color'] = array_merge($options['color'], array(
34
- 'name' => $this->options['name'] . '_color_picker',
35
- 'default' => isset($this->options['default'])
36
- ? $this->options['default']['color']
37
- : null,
38
- 'pickerTarget' => '.factory-control-' . $this->options['name'] . ' .factory-picker-target'
39
- ));
40
 
41
- if( !$options['color']['default'] ) {
42
- $options['color']['default'] = '#1e8cbe';
43
- }
44
 
45
- $name = $this->getOption('name');
 
 
 
 
 
 
46
 
47
- // filters to get available patterns for the given background contols
48
- $this->patterns = apply_filters('factory_forms_329_patterns', array());
49
- $this->patterns = apply_filters('factory_forms_329_patterns-' . $name, $this->patterns);
50
- $this->customPatterns = $this->getOption('patterns', array());
51
 
52
- $this->color = new FactoryForms329_ColorControl($options['color'], $form, $provider);
53
- }
 
 
 
 
 
 
 
 
54
 
55
- /**
56
- * Shows the html markup of the control.
57
- *
58
- * @since 1.0.0
59
- * @return void
60
- */
61
- public function html()
62
- {
63
- $name = $this->getNameOnForm();
64
- $values = $this->getValue();
65
-
66
- // if a pattern is not set by defaut, sets the first available pattern
67
- if( empty($values['url']) && !empty($this->patterns) ) {
68
- foreach($this->patterns as $groupKey => $groupValue) {
69
- if( !empty($this->patterns[$groupKey]['patterns']) ) {
70
- $values['url'] = $this->patterns[$groupKey]['patterns'][0]['pattern'];
71
- break;
 
72
  }
73
  }
74
- }
75
 
76
- if( !empty($values['color']) ) {
77
- $this->color->setOption('value', $values['color']);
78
- }
79
 
80
- $hasColor = !empty($values['color']);
81
 
82
- if( $hasColor ) {
83
- $this->addCssClass('factory-color-panel-active');
84
- }
85
 
86
- ?>
87
- <div <?php $this->attrs() ?>>
88
- <div class="factory-pattern-controls">
89
- <div class="factory-preview-wrap">
90
- <div <?php echo (!empty($values['url']))
91
- ? 'style="background:url(' . esc_url($values['url']) . ') repeat; border:0; font-size:0;"'
92
- : ''; ?> class="factory-preview <?php echo $this->getOption('name'); ?>"><span></span></div>
 
 
 
 
 
 
 
 
 
 
93
  </div>
94
- <a href="#" class="button button-default factory-button factory-change-color-btn <?php if( $hasColor ) {
95
- echo 'button-active';
96
- } ?>" title="<?php _e('Change color', 'factory_forms_329') ?>">
97
- <i class="fa fa-flask"></i>
98
- <span><?php _e('re-color', 'factory_forms_329') ?></span>
99
- </a>
100
- <input type="hidden" id="<?php echo $name[0]; ?>" name="<?php echo $name[0]; ?>" value="<?php echo esc_url($values['url']); ?>" class="factory-pattern-result">
101
- <input type="hidden" id="<?php echo $name[1]; ?>" name="<?php echo $name[1]; ?>" value="<?php echo esc_attr($values['color']); ?>" class="factory-color-result">
102
- </div>
103
- <div class="factory-color-panel">
104
- <div class="factory-color-wrap">
105
- <span class="factory-color-label"><?php _e('Select color:', 'factory_forms_329') ?></span>
106
- <?php $this->color->html() ?>
107
- <div class="factory-hint">
108
- <i><?php _e('Changing the color may takes a minute or more. Please be patient.', 'factory_forms_329') ?></i>
109
  </div>
 
110
  </div>
111
- <div class="factory-picker-target"></div>
112
- </div>
113
- <div class="factory-patterns-panel">
114
- <div class="factory-patterns-group factory-patterns-group-custom">
115
- <?php $this->printPatterns($this->customPatterns, 4, '<div class="factory-patterns-item factory-upload-btn factory-no-preview"><span class="fa fa-upload"></span></div>') ?>
 
 
 
 
 
 
 
116
  </div>
117
- <?php foreach($this->patterns as $key => $group): ?>
118
- <?php if( !empty($group['patterns']) ): ?>
119
- <div class="factory-patterns-group factory-patterns-group-<?php echo $key ?>">
120
- <div class="factory-patterns-group-title"><?php echo $group['title'] ?></div>
121
- <?php $this->printPatterns($group['patterns'], 4) ?>
122
- </div>
123
- <?php endif; ?>
124
- <?php endforeach; ?>
125
  </div>
126
- <div class="clearfix"></div>
127
- </div>
128
- <?php
129
- }
130
-
131
- private function printPatterns($patterns, $perRow, $firstItem = null)
132
- {
133
- $counter = 0;
134
- $printFirstItem = $firstItem;
135
-
136
- ?>
137
- <div class="factory-patterns-row">
138
  <?php
139
-
140
- if( $printFirstItem ) {
141
- echo $printFirstItem;
142
- $printFirstItem = null;
143
- $counter++;
144
  }
145
 
146
- foreach($patterns as $pattern) {
147
- $counter++;
 
 
 
 
 
 
 
148
 
149
  ?>
150
- <div class="factory-patterns-item" data-pattern="<?php echo $pattern['pattern']; ?>">
151
- <div class="factory-pattern-holder" style="background:url(<?php echo $pattern['preview']; ?>) repeat;"></div>
152
- </div>
153
  <?php
154
 
155
- if( $counter == 4 ) {
156
- $counter = 0;
 
 
 
 
 
 
 
157
  ?>
158
- </div><div class="factory-patterns-row">
159
- <?php
 
 
 
 
 
 
 
 
 
160
  }
 
 
 
161
  }
162
- ?>
163
- </div>
164
- <?php
165
  }
166
  }
3
  /**
4
  * Pattern Control
5
  *
6
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
7
+ * @copyright (c) 2018, Webcraftic Ltd
 
8
  *
9
  * @package factory-forms
10
  * @since 3.1.0
11
  */
 
12
 
13
+ // Exit if accessed directly
14
+ if( !defined('ABSPATH') ) {
15
+ exit;
16
+ }
17
 
18
+ if( !class_exists('Wbcr_FactoryForms400_PatternControl') ) {
19
+
20
+ class Wbcr_FactoryForms400_PatternControl extends Wbcr_FactoryForms400_Control {
 
 
 
 
21
 
22
+ public $type = 'pattern';
 
 
23
 
24
+ public function getName()
25
+ {
26
+ return array(
27
+ $this->getOption('name') . '__url',
28
+ $this->getOption('name') . '__color'
29
+ );
30
  }
31
 
32
+ public function __construct($options, $form, $provider = null)
33
+ {
34
+ parent::__construct($options, $form, $provider);
 
 
 
 
35
 
36
+ if( !isset($options['color']) ) {
37
+ $options['color'] = array();
38
+ }
39
 
40
+ $options['color'] = array_merge($options['color'], array(
41
+ 'name' => $this->options['name'] . '_color_picker',
42
+ 'default' => isset($this->options['default'])
43
+ ? $this->options['default']['color']
44
+ : null,
45
+ 'pickerTarget' => '.factory-control-' . $this->options['name'] . ' .factory-picker-target'
46
+ ));
47
 
48
+ if( !$options['color']['default'] ) {
49
+ $options['color']['default'] = '#1e8cbe';
50
+ }
 
51
 
52
+ $name = $this->getOption('name');
53
+
54
+ // filters to get available patterns for the given background contols
55
+ $this->patterns = apply_filters('wbcr_factory_forms_400_patterns', array());
56
+ $this->patterns = apply_filters('wbcr_factory_forms_400_patterns-' . $name, $this->patterns);
57
+
58
+ $this->custom_patterns = $this->getOption('patterns', array());
59
+
60
+ $this->color = new Wbcr_FactoryForms400_ColorControl($options['color'], $form, $provider);
61
+ }
62
 
63
+ /**
64
+ * Shows the html markup of the control.
65
+ *
66
+ * @since 1.0.0
67
+ * @return void
68
+ */
69
+ public function html()
70
+ {
71
+ $name = $this->getNameOnForm();
72
+ $values = $this->getValue();
73
+
74
+ // if a pattern is not set by defaut, sets the first available pattern
75
+ if( empty($values['url']) && !empty($this->patterns) ) {
76
+ foreach($this->patterns as $group_key => $groupValue) {
77
+ if( !empty($this->patterns[$group_key]['patterns']) ) {
78
+ $values['url'] = $this->patterns[$group_key]['patterns'][0]['pattern'];
79
+ break;
80
+ }
81
  }
82
  }
 
83
 
84
+ if( !empty($values['color']) ) {
85
+ $this->color->setOption('value', $values['color']);
86
+ }
87
 
88
+ $hasColor = !empty($values['color']);
89
 
90
+ if( $hasColor ) {
91
+ $this->addCssClass('factory-color-panel-active');
92
+ }
93
 
94
+ ?>
95
+ <div <?php $this->attrs() ?>>
96
+ <div class="factory-pattern-controls">
97
+ <div class="factory-preview-wrap">
98
+ <div <?php echo (!empty($values['url']))
99
+ ? 'style="background:url(' . esc_url($values['url']) . ') repeat; border:0; font-size:0;"'
100
+ : ''; ?> class="factory-preview <?php echo $this->getOption('name'); ?>"><span></span>
101
+ </div>
102
+ </div>
103
+ <a href="#" class="button button-default factory-button factory-change-color-btn <?php if( $hasColor ) {
104
+ echo 'button-active';
105
+ } ?>" title="<?php _e('Change color', 'wbcr_factory_forms_400') ?>">
106
+ <i class="fa fa-flask"></i>
107
+ <span><?php _e('re-color', 'wbcr_factory_forms_400') ?></span>
108
+ </a>
109
+ <input type="hidden" id="<?php echo $name[0]; ?>" name="<?php echo $name[0]; ?>" value="<?php echo esc_url($values['url']); ?>" class="factory-pattern-result">
110
+ <input type="hidden" id="<?php echo $name[1]; ?>" name="<?php echo $name[1]; ?>" value="<?php echo esc_attr($values['color']); ?>" class="factory-color-result">
111
  </div>
112
+ <div class="factory-color-panel">
113
+ <div class="factory-color-wrap">
114
+ <span class="factory-color-label"><?php _e('Select color:', 'wbcr_factory_forms_400') ?></span>
115
+ <?php $this->color->html() ?>
116
+ <div class="factory-hint">
117
+ <i><?php _e('Changing the color may takes a minute or more. Please be patient.', 'wbcr_factory_forms_400') ?></i>
118
+ </div>
 
 
 
 
 
 
 
 
119
  </div>
120
+ <div class="factory-picker-target"></div>
121
  </div>
122
+ <div class="factory-patterns-panel">
123
+ <div class="factory-patterns-group factory-patterns-group-custom">
124
+ <?php $this->printPatterns($this->custom_patterns, 4, '<div class="factory-patterns-item factory-upload-btn factory-no-preview"><span class="fa fa-upload"></span></div>') ?>
125
+ </div>
126
+ <?php foreach($this->patterns as $key => $group): ?>
127
+ <?php if( !empty($group['patterns']) ): ?>
128
+ <div class="factory-patterns-group factory-patterns-group-<?php echo $key ?>">
129
+ <div class="factory-patterns-group-title"><?php echo $group['title'] ?></div>
130
+ <?php $this->printPatterns($group['patterns'], 4) ?>
131
+ </div>
132
+ <?php endif; ?>
133
+ <?php endforeach; ?>
134
  </div>
135
+ <div class="clearfix"></div>
 
 
 
 
 
 
 
136
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
137
  <?php
 
 
 
 
 
138
  }
139
 
140
+ /**
141
+ * @param $patterns
142
+ * @param $perRow
143
+ * @param null $first_item
144
+ */
145
+ private function printPatterns($patterns, $perRow, $first_item = null)
146
+ {
147
+ $counter = 0;
148
+ $print_first_item = $first_item;
149
 
150
  ?>
151
+ <div class="factory-patterns-row">
 
 
152
  <?php
153
 
154
+ if( $print_first_item ) {
155
+ echo $print_first_item;
156
+ $print_first_item = null;
157
+ $counter++;
158
+ }
159
+
160
+ foreach($patterns as $pattern) {
161
+ $counter++;
162
+
163
  ?>
164
+ <div class="factory-patterns-item" data-pattern="<?php echo $pattern['pattern']; ?>">
165
+ <div class="factory-pattern-holder" style="background:url(<?php echo $pattern['preview']; ?>) repeat;"></div>
166
+ </div>
167
+ <?php
168
+
169
+ if( $counter == 4 ) {
170
+ $counter = 0;
171
+ ?>
172
+ </div><div class="factory-patterns-row">
173
+ <?php
174
+ }
175
  }
176
+ ?>
177
+ </div>
178
+ <?php
179
  }
 
 
 
180
  }
181
  }
libs/factory/forms/controls/radio-colors.php CHANGED
@@ -15,92 +15,97 @@
15
  * array('forest', '#c9d4be'),
16
  *)
17
  *
18
- * @author Alex Kovalevv <alex.kovalevv@gmail.com>
19
- * @copyright (c) 2017, OnePress Ltd
20
  *
21
  * @package factory-forms
22
  * @since 1.0.0
23
  */
24
- class FactoryForms329_RadioColorsControl extends FactoryForms329_Control {
25
 
26
- public $type = 'radio-color';
27
-
28
- /**
29
- * Returns a set of available items for the radio.
30
- *
31
- * @since 1.0.0
32
- * @return mixed[]
33
- */
34
- private function getItems()
35
- {
36
- $data = $this->getOption('data', array());
37
 
38
- // if the data options is a valid callback for an object method
39
- if( is_array($data) && count($data) == 2 && gettype($data[0]) == 'object' ) {
40
 
41
- return call_user_func($data);
42
- // if the data options is a valid callback for a function
43
- } elseif( gettype($data) == 'string' ) {
44
 
45
- return $data();
46
- }
47
 
48
- // if the data options is an array of values
49
- return $data;
50
- }
 
 
 
 
 
 
51
 
52
- /**
53
- * Preparing html attributes before rendering html of the control.
54
- *
55
- * @since 1.0.0
56
- * @return void
57
- */
58
- protected function beforeHtml()
59
- {
60
- $nameOnForm = $this->getNameOnForm();
61
- $this->addHtmlAttr('name', $nameOnForm);
62
 
63
- echo '<div class="factory-colors-inner-wrap" data-radio-name="' . $nameOnForm . '">';
64
- }
65
 
66
- /**
67
- * Preparing html attributes afterHtml rendering html of the control.
68
- *
69
- * @since 1.0.0
70
- * @return void
71
- */
72
- protected function afterHtml()
73
- {
74
- echo '</div>';
75
- }
76
 
77
- /**
78
- * Shows the html markup of the control.
79
- *
80
- * @since 1.0.0
81
- * @return void
82
- */
83
- public function html()
84
- {
85
- $items = $this->getItems();
86
- $value = $this->getValue();
87
 
88
- ?>
89
- <?php foreach($items as $item) {
90
- $checked = ($item[0] == $value)
91
- ? 'checked="checked"'
92
- : '';
93
 
94
- if( empty($item[1]) || strpos($item[1], '#') === false ) {
95
- $item[1] = '#fff';
 
 
 
 
 
 
 
96
  }
97
- ?>
98
- <span class="factory-form-radio-item">
99
- <label class="factory-from-radio-label">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  <input type="radio" <?php $this->attrs() ?> value="<?php echo esc_attr($item[0]) ?>" <?php echo $checked ?>/>
101
  <span style="background-color:<?= esc_attr($item[1]) ?>"></span>
102
- </lable>
103
  </span>
104
- <?php }
 
105
  }
106
  }
15
  * array('forest', '#c9d4be'),
16
  *)
17
  *
18
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
19
+ * @copyright (c) 2018, Webcraftic Ltd
20
  *
21
  * @package factory-forms
22
  * @since 1.0.0
23
  */
 
24
 
25
+ // Exit if accessed directly
26
+ if( !defined('ABSPATH') ) {
27
+ exit;
28
+ }
 
 
 
 
 
 
 
29
 
30
+ if( !class_exists('Wbcr_FactoryForms400_RadioColorsControl') ) {
 
31
 
32
+ class Wbcr_FactoryForms400_RadioColorsControl extends Wbcr_FactoryForms400_Control {
 
 
33
 
34
+ public $type = 'radio-color';
 
35
 
36
+ /**
37
+ * Returns a set of available items for the radio.
38
+ *
39
+ * @since 1.0.0
40
+ * @return mixed[]
41
+ */
42
+ private function getItems()
43
+ {
44
+ $data = $this->getOption('data', array());
45
 
46
+ // if the data options is a valid callback for an object method
47
+ if( (is_array($data) && count($data) == 2 && is_object($data[0])) || is_string($data) ) {
 
 
 
 
 
 
 
 
48
 
49
+ return call_user_func($data);
50
+ }
51
 
52
+ // if the data options is an array of values
53
+ return $data;
54
+ }
 
 
 
 
 
 
 
55
 
56
+ /**
57
+ * Preparing html attributes before rendering html of the control.
58
+ *
59
+ * @since 1.0.0
60
+ * @return void
61
+ */
62
+ protected function beforeHtml()
63
+ {
64
+ $name_on_form = $this->getNameOnForm();
65
+ $this->addHtmlAttr('name', $name_on_form);
66
 
67
+ echo '<div class="factory-colors-inner-wrap" data-radio-name="' . $name_on_form . '">';
68
+ }
 
 
 
69
 
70
+ /**
71
+ * Preparing html attributes afterHtml rendering html of the control.
72
+ *
73
+ * @since 1.0.0
74
+ * @return void
75
+ */
76
+ protected function afterHtml()
77
+ {
78
+ echo '</div>';
79
  }
80
+
81
+ /**
82
+ * Shows the html markup of the control.
83
+ *
84
+ * @since 1.0.0
85
+ * @return void
86
+ */
87
+ public function html()
88
+ {
89
+ $items = $this->getItems();
90
+ $value = $this->getValue();
91
+
92
+ ?>
93
+ <?php foreach($items as $item) {
94
+ $checked = ($item[0] == $value)
95
+ ? 'checked="checked"'
96
+ : '';
97
+
98
+ if( empty($item[1]) || strpos($item[1], '#') === false ) {
99
+ $item[1] = '#fff';
100
+ }
101
+ ?>
102
+ <span class="factory-form-radio-item">
103
+ <lable class="factory-from-radio-label">
104
  <input type="radio" <?php $this->attrs() ?> value="<?php echo esc_attr($item[0]) ?>" <?php echo $checked ?>/>
105
  <span style="background-color:<?= esc_attr($item[1]) ?>"></span>
106
+ </lable>
107
  </span>
108
+ <?php }
109
+ }
110
  }
111
  }
libs/factory/forms/controls/radio.php CHANGED
@@ -9,72 +9,77 @@
9
  * default => a default value of the control if the "value" option is not specified
10
  * items => a callback to return items or an array of items to select
11
  *
12
- * @author Paul Kashtanoff <paul@byonepress.com>
13
- * @copyright (c) 2013, OnePress Ltd
14
  *
15
  * @package factory-forms
16
  * @since 1.0.0
17
  */
18
- class FactoryForms329_RadioControl extends FactoryForms329_Control {
19
 
20
- public $type = 'radio';
 
 
 
21
 
22
- /**
23
- * Returns a set of available items for the radio.
24
- *
25
- * @since 1.0.0
26
- * @return mixed[]
27
- */
28
- private function getItems()
29
- {
30
- $data = $this->getOption('data', array());
31
 
32
- // if the data options is a valid callback for an object method
33
- if( is_array($data) && count($data) == 2 && gettype($data[0]) == 'object' ) {
34
 
35
- return call_user_func($data);
36
- // if the data options is a valid callback for a function
37
- } elseif( gettype($data) == 'string' ) {
38
 
39
- return $data();
40
- }
 
 
 
 
 
 
 
41
 
42
- // if the data options is an array of values
43
- return $data;
44
- }
45
 
46
- /**
47
- * Preparing html attributes before rendering html of the control.
48
- *
49
- * @since 1.0.0
50
- * @return void
51
- */
52
- protected function beforeHtml()
53
- {
54
- $nameOnForm = $this->getNameOnForm();
55
- $this->addHtmlAttr('name', $nameOnForm);
56
- }
 
 
 
 
 
 
 
57
 
58
- /**
59
- * Shows the html markup of the control.
60
- *
61
- * @since 1.0.0
62
- * @return void
63
- */
64
- public function html()
65
- {
66
- $items = $this->getItems();
67
- $value = $this->getValue();
68
- ?>
69
- <?php foreach($items as $item) {
70
- $checked = ($item[0] == $value)
71
- ? 'checked="checked"'
72
- : '';
73
- ?>
74
- <span class="factory-form-radio-item">
75
- <label class="factory-from-radio-label"><?php echo esc_html($item[1]) ?></lable>
76
- <input type="radio" <?php $this->attrs() ?> value="<?php echo esc_attr($item[0]) ?>" <?php echo $checked ?>/>
77
- </span>
78
- <?php }
 
79
  }
80
- }
9
  * default => a default value of the control if the "value" option is not specified
10
  * items => a callback to return items or an array of items to select
11
  *
12
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
13
+ * @copyright (c) 2018, Webcraftic Ltd
14
  *
15
  * @package factory-forms
16
  * @since 1.0.0
17
  */
 
18
 
19
+ // Exit if accessed directly
20
+ if( !defined('ABSPATH') ) {
21
+ exit;
22
+ }
23
 
24
+ if( !class_exists('Wbcr_FactoryForms400_RadioControl') ) {
 
 
 
 
 
 
 
 
25
 
26
+ class Wbcr_FactoryForms400_RadioControl extends Wbcr_FactoryForms400_Control {
 
27
 
28
+ public $type = 'radio';
 
 
29
 
30
+ /**
31
+ * Returns a set of available items for the radio.
32
+ *
33
+ * @since 1.0.0
34
+ * @return mixed[]
35
+ */
36
+ private function getItems()
37
+ {
38
+ $data = $this->getOption('data', array());
39
 
40
+ // if the data options is a valid callback for an object method
41
+ if( (is_array($data) && count($data) == 2 && is_object($data[0])) || is_string($data) ) {
 
42
 
43
+ return call_user_func($data);
44
+ }
45
+
46
+ // if the data options is an array of values
47
+ return $data;
48
+ }
49
+
50
+ /**
51
+ * Preparing html attributes before rendering html of the control.
52
+ *
53
+ * @since 1.0.0
54
+ * @return void
55
+ */
56
+ protected function beforeHtml()
57
+ {
58
+ $name_on_form = $this->getNameOnForm();
59
+ $this->addHtmlAttr('name', $name_on_form);
60
+ }
61
 
62
+ /**
63
+ * Shows the html markup of the control.
64
+ *
65
+ * @since 1.0.0
66
+ * @return void
67
+ */
68
+ public function html()
69
+ {
70
+ $items = $this->getItems();
71
+ $value = $this->getValue();
72
+ ?>
73
+ <?php foreach($items as $item) {
74
+ $checked = ($item[0] == $value)
75
+ ? 'checked="checked"'
76
+ : '';
77
+ ?>
78
+ <span class="factory-form-radio-item">
79
+ <lable class="factory-from-radio-label"><?= esc_html($item[1]); ?></lable>
80
+ <input type="radio" <?php $this->attrs() ?> value="<?php echo esc_attr($item[0]) ?>" <?php echo $checked ?>/>
81
+ </span>
82
+ <?php }
83
+ }
84
  }
85
+ }
libs/factory/forms/controls/textarea.php CHANGED
@@ -8,62 +8,73 @@
8
  * value => a value to show in the control
9
  * default => a default value of the control if the "value" option is not specified
10
  *
11
- * @author Paul Kashtanoff <paul@byonepress.com>
12
- * @copyright (c) 2013, OnePress Ltd
13
  *
14
  * @package factory-forms
15
  * @since 1.0.0
16
  */
17
- class FactoryForms329_TextareaControl extends FactoryForms329_Control {
18
 
19
- public $type = 'textarea';
 
 
 
20
 
21
- /**
22
- * Returns a submit value of the control by a given name.
23
- *
24
- * @since 1.0.0
25
- * @return mixed
26
- */
27
- public function getSubmitValue($name, $subName)
28
- {
29
- $nameOnForm = $this->getNameOnForm($name);
30
- $value = isset($_POST[$nameOnForm])
31
- ? $_POST[$nameOnForm]
32
- : null;
33
- if( is_array($value) ) {
34
- $value = implode(',', $value);
35
- }
36
 
37
- return sanitize_textarea_field($value);
38
- }
39
 
40
- /**
41
- * Preparing html attributes before rendering html of the control.
42
- *
43
- * @since 1.0.0
44
- * @return void
45
- */
46
- protected function beforeHtml()
47
- {
48
- $nameOnForm = $this->getNameOnForm();
49
- $height = (int)$this->getOption('height', 100);
50
 
51
- $this->addCssClass('form-control');
52
- $this->addHtmlAttr('name', $nameOnForm);
53
- $this->addHtmlAttr('id', $nameOnForm);
54
- $this->addHtmlAttr('style', 'min-height:' . $height . 'px');
55
- }
 
 
 
 
 
 
 
 
 
 
 
 
56
 
57
- /**
58
- * Shows the html markup of the control.
59
- *
60
- * @since 1.0.0
61
- * @return void
62
- */
63
- public function html()
64
- {
65
- ?>
66
- <textarea <?php $this->attrs(); ?> /><?php echo esc_textarea($this->getValue()); ?></textarea>
67
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  }
69
  }
8
  * value => a value to show in the control
9
  * default => a default value of the control if the "value" option is not specified
10
  *
11
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
12
+ * @copyright (c) 2018, Webcraftic Ltd
13
  *
14
  * @package factory-forms
15
  * @since 1.0.0
16
  */
 
17
 
18
+ // Exit if accessed directly
19
+ if( !defined('ABSPATH') ) {
20
+ exit;
21
+ }
22
 
23
+ if( !class_exists('Wbcr_FactoryForms400_TextareaControl') ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
+ class Wbcr_FactoryForms400_TextareaControl extends Wbcr_FactoryForms400_Control {
 
26
 
27
+ public $type = 'textarea';
 
 
 
 
 
 
 
 
 
28
 
29
+ /**
30
+ * Returns a submit value of the control by a given name.
31
+ *
32
+ * @since 1.0.0
33
+ * @return mixed
34
+ */
35
+ public function getSubmitValue($name, $subName)
36
+ {
37
+ $name_on_form = $this->getNameOnForm($name);
38
+
39
+ $value = isset($_POST[$name_on_form])
40
+ ? $_POST[$name_on_form]
41
+ : null;
42
+
43
+ if( is_array($value) ) {
44
+ $value = implode(',', $value);
45
+ }
46
 
47
+ return sanitize_textarea_field($value);
48
+ }
49
+
50
+ /**
51
+ * Preparing html attributes before rendering html of the control.
52
+ *
53
+ * @since 1.0.0
54
+ * @return void
55
+ */
56
+ protected function beforeHtml()
57
+ {
58
+ $name_on_form = $this->getNameOnForm();
59
+ $height = (int)$this->getOption('height', 100);
60
+
61
+ $this->addCssClass('form-control');
62
+ $this->addHtmlAttr('name', $name_on_form);
63
+ $this->addHtmlAttr('id', $name_on_form);
64
+ $this->addHtmlAttr('style', 'min-height:' . $height . 'px');
65
+ }
66
+
67
+ /**
68
+ * Shows the html markup of the control.
69
+ *
70
+ * @since 1.0.0
71
+ * @return void
72
+ */
73
+ public function html()
74
+ {
75
+ ?>
76
+ <textarea <?php $this->attrs(); ?>><?php echo esc_textarea($this->getValue()); ?></textarea>
77
+ <?php
78
+ }
79
  }
80
  }
libs/factory/forms/controls/textbox.php CHANGED
@@ -17,67 +17,76 @@
17
  * 'data-date-autoclose' => 'true'
18
  * )
19
  *
20
- * @author Paul Kashtanoff <paul@byonepress.com>
21
- * @copyright (c) 2013, OnePress Ltd
22
  *
23
  * @package factory-forms
24
  * @since 1.0.0
25
  */
26
- class FactoryForms329_TextboxControl extends FactoryForms329_Control {
27
 
28
- public $type = 'textbox';
 
 
 
29
 
30
- /**
31
- * Preparing html attributes before rendering html of the control.
32
- *
33
- * @since 1.0.0
34
- * @return void
35
- */
36
- protected function beforeHtml()
37
- {
38
- $value = esc_attr($this->getValue());
39
- $nameOnForm = $this->getNameOnForm();
40
 
41
- if( $this->getOption('maxLength', false) ) {
42
- $this->addHtmlAttr('maxlength', intval($this->getOption('maxLength')));
43
- }
44
 
45
- if( $this->getOption('placeholder', false) ) {
46
- $this->addHtmlAttr('placeholder', $this->getOption('placeholder'));
47
- }
48
 
49
- $this->addCssClass('form-control');
50
- $this->addHtmlAttr('type', 'text');
51
- $this->addHtmlAttr('id', $nameOnForm);
52
- $this->addHtmlAttr('name', $nameOnForm);
53
- $this->addHtmlAttr('value', $value);
54
- }
 
 
 
 
55
 
56
- /**
57
- * Shows the html markup of the control.
58
- *
59
- * @since 1.0.0
60
- * @return void
61
- */
62
- public function html()
63
- {
64
- $units = $this->getOption('units', false);
65
- ?>
66
- <?php if( $units ) { ?><div class="input-group"><?php } ?>
67
- <input <?php $this->attrs() ?>/>
68
- <?php if( $units ) { ?>
69
- <span class="input-group-addon"><?php echo $units; ?></span>
70
- <?php } ?>
71
- <?php if( $units ) { ?></div><?php } ?>
72
- <?php
73
- }
74
 
75
- public function getSubmitValue($name, $subName)
76
- {
77
- $nameOnForm = $this->getNameOnForm($name);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
- return isset($_POST[$nameOnForm])
80
- ? sanitize_text_field($_POST[$nameOnForm])
81
- : '';
 
 
 
 
 
82
  }
83
- }
17
  * 'data-date-autoclose' => 'true'
18
  * )
19
  *
20
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
21
+ * @copyright (c) 2018, Webcraftic Ltd
22
  *
23
  * @package factory-forms
24
  * @since 1.0.0
25
  */
 
26
 
27
+ // Exit if accessed directly
28
+ if( !defined('ABSPATH') ) {
29
+ exit;
30
+ }
31
 
32
+ if( !class_exists('Wbcr_FactoryForms400_TextboxControl') ) {
 
 
 
 
 
 
 
 
 
33
 
34
+ class Wbcr_FactoryForms400_TextboxControl extends Wbcr_FactoryForms400_Control {
 
 
35
 
36
+ public $type = 'textbox';
 
 
37
 
38
+ /**
39
+ * Preparing html attributes before rendering html of the control.
40
+ *
41
+ * @since 1.0.0
42
+ * @return void
43
+ */
44
+ protected function beforeHtml()
45
+ {
46
+ $value = esc_attr($this->getValue());
47
+ $name_on_form = $this->getNameOnForm();
48
 
49
+ if( $this->getOption('maxLength', false) ) {
50
+ $this->addHtmlAttr('maxlength', intval($this->getOption('maxLength')));
51
+ }
52
+
53
+ if( $this->getOption('placeholder', false) ) {
54
+ $this->addHtmlAttr('placeholder', $this->getOption('placeholder'));
55
+ }
 
 
 
 
 
 
 
 
 
 
 
56
 
57
+ $this->addCssClass('form-control');
58
+ $this->addHtmlAttr('type', 'text');
59
+ $this->addHtmlAttr('id', $name_on_form);
60
+ $this->addHtmlAttr('name', $name_on_form);
61
+ $this->addHtmlAttr('value', $value);
62
+ }
63
+
64
+ /**
65
+ * Shows the html markup of the control.
66
+ *
67
+ * @since 1.0.0
68
+ * @return void
69
+ */
70
+ public function html()
71
+ {
72
+ $units = $this->getOption('units', false);
73
+ ?>
74
+ <?php if( $units ) { ?><div class="input-group"><?php } ?>
75
+ <input <?php $this->attrs() ?>/>
76
+ <?php if( $units ) { ?>
77
+ <span class="input-group-addon"><?php echo $units; ?></span>
78
+ <?php } ?>
79
+ <?php if( $units ) { ?></div><?php } ?>
80
+ <?php
81
+ }
82
 
83
+ public function getSubmitValue($name, $subName)
84
+ {
85
+ $name_on_form = $this->getNameOnForm($name);
86
+
87
+ return isset($_POST[$name_on_form])
88
+ ? sanitize_text_field($_POST[$name_on_form])
89
+ : '';
90
+ }
91
  }
92
+ }
libs/factory/forms/controls/url.php CHANGED
@@ -4,30 +4,40 @@
4
  * Url Control
5
  *
6
  * Main options:
7
- * @see FactoryForms329_TextboxControl
8
  *
9
- * @author Paul Kashtanoff <paul@byonepress.com>
10
- * @copyright (c) 2013, OnePress Ltd
11
  *
12
  * @package factory-forms
13
  * @since 1.0.0
14
  */
15
- class FactoryForms329_UrlControl extends FactoryForms329_TextboxControl {
16
 
17
- public $type = 'url';
 
 
 
 
 
 
 
 
 
18
 
19
- /**
20
- * Adding 'http://' to the url if it was missed.
21
- *
22
- * @since 1.0.0
23
- * @return string
24
- */
25
- public function getSubmitValue($name, $subName)
26
- {
27
- $value = parent::getSubmitValue($name, $subName);
28
- if( !empty($value) && substr($value, 0, 4) != 'http' )
29
- $value = 'http://' . $value;
 
30
 
31
- return $value;
 
32
  }
33
  }
4
  * Url Control
5
  *
6
  * Main options:
7
+ * @see FactoryForms400_TextboxControl
8
  *
9
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
10
+ * @copyright (c) 2018, Webcraftic Ltd
11
  *
12
  * @package factory-forms
13
  * @since 1.0.0
14
  */
 
15
 
16
+ // Exit if accessed directly
17
+ if( !defined('ABSPATH') ) {
18
+ exit;
19
+ }
20
+
21
+ if( !class_exists('Wbcr_FactoryForms400_UrlControl') ) {
22
+
23
+ class Wbcr_FactoryForms400_UrlControl extends Wbcr_FactoryForms400_TextboxControl {
24
+
25
+ public $type = 'url';
26
 
27
+ /**
28
+ * Adding 'http://' to the url if it was missed.
29
+ *
30
+ * @since 1.0.0
31
+ * @return string
32
+ */
33
+ public function getSubmitValue($name, $sub_name)
34
+ {
35
+ $value = parent::getSubmitValue($name, $sub_name);
36
+ if( !empty($value) && substr($value, 0, 4) != 'http' ) {
37
+ $value = 'http://' . $value;
38
+ }
39
 
40
+ return $value;
41
+ }
42
  }
43
  }
libs/factory/forms/controls/wp-editor.php CHANGED
@@ -10,74 +10,86 @@
10
  * tinymce => an array of options for tinymce
11
  * @link http://codex.wordpress.org/Function_Reference/wp_editor
12
  *
13
- * @author Paul Kashtanoff <paul@byonepress.com>
14
- * @copyright (c) 2013, OnePress Ltd
15
  *
16
  * @package factory-forms
17
  * @since 1.0.0
18
  */
19
- class FactoryForms329_WpEditorControl extends FactoryForms329_Control {
20
 
21
- public $type = 'wp-editor';
 
 
 
22
 
23
- /**
24
- * Preparing html attributes and options for tinymce.
25
- *
26
- * @since 1.0.0
27
- * @return void
28
- */
29
- protected function beforeHtml()
30
- {
31
 
32
- if( empty($this->options['tinymce']) ) {
33
- $this->options['tinymce'] = array();
34
- }
 
 
 
 
 
 
 
 
 
35
 
36
- if( !isset($this->options['tinymce']['content_css']) ) {
37
- $this->options['tinymce']['content_css'] = FACTORY_FORMS_329_URL . '/assets/css/editor.css';
 
 
 
 
 
38
  }
39
- }
40
 
41
- /**
42
- * Shows the html markup of the control.
43
- *
44
- * @since 1.0.0
45
- * @return void
46
- */
47
- public function html()
48
- {
49
- $nameOnForm = $this->getNameOnForm();
50
-
51
- $value = $this->getValue();
52
-
53
- ?>
54
- <div class='factory-form-wp-editor'>
55
- <?php wp_editor($value, $nameOnForm, array(
56
- 'textarea_name' => $nameOnForm,
57
- 'wpautop' => false,
58
- 'teeny' => true,
59
- 'tinymce' => $this->getOption('tinymce', array())
60
- )); ?>
61
- </div>
62
- <?php
63
- }
64
 
65
- /**
66
- * Returns a submit value of the control by a given name.
67
- *
68
- * @since 1.0.0
69
- * @return mixed
70
- */
71
- public function getSubmitValue($name, $subName)
72
- {
73
- $nameOnForm = $this->getNameOnForm($name);
74
- $value = isset($_POST[$nameOnForm])
75
- ? $_POST[$nameOnForm]
76
- : null;
77
- if( is_array($value) ) {
78
- $value = implode(',', $value);
79
  }
80
 
81
- return wp_kses_post($value);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  }
83
  }
 
10
  * tinymce => an array of options for tinymce
11
  * @link http://codex.wordpress.org/Function_Reference/wp_editor
12
  *
13
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
14
+ * @copyright (c) 2018, Webcraftic Ltd
15
  *
16
  * @package factory-forms
17
  * @since 1.0.0
18
  */
 
19
 
20
+ // Exit if accessed directly
21
+ if( !defined('ABSPATH') ) {
22
+ exit;
23
+ }
24
 
25
+ if( !class_exists('Wbcr_FactoryForms400_WpEditorControl') ) {
 
 
 
 
 
 
 
26
 
27
+ class Wbcr_FactoryForms400_WpEditorControl extends Wbcr_FactoryForms400_Control {
28
+
29
+ public $type = 'wp-editor';
30
+
31
+ /**
32
+ * Preparing html attributes and options for tinymce.
33
+ *
34
+ * @since 1.0.0
35
+ * @return void
36
+ */
37
+ protected function beforeHtml()
38
+ {
39
 
40
+ if( empty($this->options['tinymce']) ) {
41
+ $this->options['tinymce'] = array();
42
+ }
43
+
44
+ if( !isset($this->options['tinymce']['content_css']) ) {
45
+ $this->options['tinymce']['content_css'] = FACTORY_FORMS_400_URL . '/assets/css/editor.css';
46
+ }
47
  }
 
48
 
49
+ /**
50
+ * Shows the html markup of the control.
51
+ *
52
+ * @since 1.0.0
53
+ * @return void
54
+ */
55
+ public function html()
56
+ {
57
+ $name_on_form = $this->getNameOnForm();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
+ $value = $this->getValue();
60
+
61
+ ?>
62
+ <div class='factory-form-wp-editor'>
63
+ <?php wp_editor($value, $name_on_form, array(
64
+ 'textarea_name' => $name_on_form,
65
+ 'wpautop' => false,
66
+ 'teeny' => true,
67
+ 'tinymce' => $this->getOption('tinymce', array())
68
+ )); ?>
69
+ </div>
70
+ <?php
 
 
71
  }
72
 
73
+ /**
74
+ * Returns a submit value of the control by a given name.
75
+ *
76
+ * @since 1.0.0
77
+ * @return mixed
78
+ */
79
+ public function getSubmitValue($name, $subName)
80
+ {
81
+ $name_on_form = $this->getNameOnForm($name);
82
+
83
+ $value = isset($_POST[$name_on_form])
84
+ ? $_POST[$name_on_form]
85
+ : null;
86
+
87
+ if( is_array($value) ) {
88
+ $value = implode(',', $value);
89
+ }
90
+
91
+ return wp_kses_post($value);
92
+ }
93
  }
94
  }
95
+
libs/factory/forms/helpers.php DELETED
@@ -1,101 +0,0 @@
1
- <?php
2
- /**
3
- * Html Helper is to render form elements independently.
4
- *
5
- * Factory Forms is a Factory module that provides a declarative
6
- * way to build forms without any extra html or css markup.
7
- *
8
- * @author Paul Kashtanoff <paul@byonepress.com>
9
- * @copyright (c) 2013, OnePress Ltd
10
- *
11
- * @package factory-forms
12
- * @since 1.0.0
13
- */
14
-
15
- /**
16
- * A class that provides a set of methods to render form elements independently.
17
- *
18
- * @since 1.0.0
19
- */
20
- class FactoryForms329_FormHelpers {
21
-
22
- /**
23
- * Renders a form element.
24
- *
25
- * @since 1.0.0
26
- * @param type $type A type of a form element.
27
- * @param type $options Element options.
28
- * @return void
29
- */
30
- public static function render( $type, $options = array() ) {
31
- $options['type'] = $type;
32
-
33
- if ( FactoryForms329_Form::isControl($type) ) {
34
- self::renderControl($type, $options);
35
- } elseif ( FactoryForms329_Form::isControlHolder($type) ) {
36
- self::renderHolder($type, $options);
37
- } else {
38
- print_r($options);
39
- die('The control type was not found: ' . $type );
40
- }
41
- }
42
-
43
- /**
44
- * Renders a given control.
45
- *
46
- * @since 1.0.0
47
- * @param type $type A control type.
48
- * @param type $options Control options.
49
- * @return void
50
- */
51
- public static function renderControl($type, $options) {
52
- FactoryForms329_Form::connectAssetsForItem( $options );
53
-
54
- $data = self::$_registeredControls[$type];
55
- require_once ($data['include']);
56
- $object = new $data['class']( $options );
57
- $object->html();
58
- }
59
-
60
- /**
61
- * Renders a given control holder.
62
- *
63
- * @since 1.0.0
64
- * @param type $type A holder type.
65
- * @param type $options Holder options.
66
- * @return void
67
- */
68
- public static function renderHolder($type, $options) {
69
- FactoryForms329_Form::connectAssetsForItem( $options );
70
-
71
- $data = self::$_registeredHolders[$type];
72
- require_once ($data['include']);
73
- $object = new $data['class']( $options );
74
- $object->html();
75
- }
76
-
77
- /**
78
- * A helper method to extract control options (items) by a given name.
79
- *
80
- * @since 3.0.5
81
- * @param string $controlName a control name to search
82
- * @param mixed $options a set of contol options
83
- * @return null|string
84
- */
85
- public static function extractControlOptions( $controlName, $options = array() ) {
86
-
87
- foreach($options as $itemOptions) {
88
-
89
- if ( isset( $itemOptions['name'] ) && $itemOptions['name'] == $controlName ) {
90
- return $itemOptions;
91
- }
92
-
93
- if ( isset( $itemOptions['items'] ) && is_array( $itemOptions['items'] ) ) {
94
- $result = self::extractControlOptions( $controlName, $itemOptions['items'] );
95
- if ( $result ) return $result;
96
- }
97
- }
98
-
99
- return null;
100
- }
101
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
libs/factory/forms/includes/complex-control.class.php CHANGED
@@ -1,117 +1,133 @@
1
  <?php
2
- /**
3
- * The file contains the base class for all complex controls.
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2014, OnePress Ltd
7
- *
8
- * @package factory-forms
9
- * @since 1.0.0
10
- */
11
 
12
- /**
13
- * The base class for all controls.
14
- *
15
- * @since 1.0.0
16
- */
17
- abstract class FactoryForms329_ComplexControl extends FactoryForms329_Control {
18
-
19
- /**
20
- * Is this element a complex control?
21
- *
22
- * @since 1.0.0
23
- * @var bool
24
- */
25
- public $isComplexControl = true;
26
-
27
- /**
28
- * Contains a set of internal controls.
29
- *
30
- * @since 1.0.0
31
- * @var FactoryForms329_Control[]
32
- */
33
- public $innerControls = array();
34
-
35
- /**
36
- * Sets a provider for the control.
37
- *
38
- * @since 1.0.0
39
- * @param IFactoryForms329_ValueProvider $provider
40
- * @return void
41
- */
42
- public function setProvider( $provider ) {
43
- $this->provider = $provider;
44
-
45
- foreach( $this->innerControls as $control ) {
46
- $control->setProvider( $provider );
47
- }
48
- }
49
-
50
- /**
51
- * Returns a control name used to save data with a provider.
52
- *
53
- * The method can return if the control have several elements.
54
- *
55
- * @since 1.0.0
56
- * @return string[]|string|null A control name.
57
- */
58
- public function getName()
59
- {
60
- $names = array();
61
-
62
- foreach( $this->innerControls as $control ) {
63
- $innerNames = $control->getName();
64
- if ( is_array($innerNames) ) $names = array_merge($names, $innerNames );
65
- else $names[] = $innerNames;
66
- }
67
-
68
- return $names;
69
- }
70
-
71
- /**
72
- * Returns an array of value to save received after submission of a form.
73
- *
74
- * @see getSubmitValue
75
- *
76
- * The array has the following format:
77
- * array(
78
- * 'control-name1' => 'value1',
79
- * 'control-name2__sub-name1' => 'value2'
80
- * 'control-name2__sub-name2' => 'value3'
81
- * )
82
- *
83
- * @since 3.1.0
84
- * @return mixed[]
85
- */
86
- public function getValuesToSave() {
87
- $values = array();
88
-
89
- foreach( $this->innerControls as $control ) {
90
- $innerValues = $control->getValuesToSave();
91
- if ( is_array($innerValues) ) $values = array_merge( $values, $innerValues );
92
- else $values[] = $innerValues;
93
- }
94
-
95
- return $values;
96
- }
97
-
98
- /**
99
- * Returns an initial value of control that is used to render the control first time.
100
- *
101
- * @since 1.0.0
102
- * @return mixed;
103
- */
104
- public function getValue( $index = null, $multiple = false ) {
105
-
106
- $values = array();
107
- foreach( $this->innerControls as $control ) {
108
- $innerValues = array_merge($values, $control->getValue() );
109
- if ( is_array($innerValues) ) $values = array_merge($values, $innerValues );
110
- else $values[] = $innerValues;
111
- }
112
-
113
- if ( $index !== null ) { return $values[$index]; }
114
- else { return $values; }
115
- }
116
-
117
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the base class for all complex controls.
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
+ */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+ if( !class_exists('Wbcr_FactoryForms400_ComplexControl') ) {
17
+ /**
18
+ * The base class for all controls.
19
+ *
20
+ * @since 1.0.0
21
+ */
22
+ abstract class Wbcr_FactoryForms400_ComplexControl extends Wbcr_FactoryForms400_Control {
23
+
24
+ /**
25
+ * Is this element a complex control?
26
+ *
27
+ * @since 1.0.0
28
+ * @var bool
29
+ */
30
+ public $is_complex_control = true;
31
+
32
+ /**
33
+ * Contains a set of internal controls.
34
+ *
35
+ * @since 1.0.0
36
+ * @var Wbcr_FactoryForms400_Control[]
37
+ */
38
+ public $inner_controls = array();
39
+
40
+ /**
41
+ * Sets a provider for the control.
42
+ *
43
+ * @since 1.0.0
44
+ * @param Wbcr_IFactoryForms400_ValueProvider $provider
45
+ * @return void
46
+ */
47
+ public function setProvider($provider)
48
+ {
49
+ $this->provider = $provider;
50
+
51
+ foreach($this->inner_controls as $control) {
52
+ $control->setProvider($provider);
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Returns a control name used to save data with a provider.
58
+ *
59
+ * The method can return if the control have several elements.
60
+ *
61
+ * @since 1.0.0
62
+ * @return array|string|null A control name.
63
+ */
64
+ public function getName()
65
+ {
66
+ $names = array();
67
+
68
+ foreach($this->inner_controls as $control) {
69
+ $inner_names = $control->getName();
70
+ if( is_array($inner_names) ) {
71
+ $names = array_merge($names, $inner_names);
72
+ } else $names[] = $inner_names;
73
+ }
74
+
75
+ return $names;
76
+ }
77
+
78
+ /**
79
+ * Returns an array of value to save received after submission of a form.
80
+ *
81
+ * @see getSubmitValue
82
+ *
83
+ * The array has the following format:
84
+ * array(
85
+ * 'control-name1' => 'value1',
86
+ * 'control-name2__sub-name1' => 'value2'
87
+ * 'control-name2__sub-name2' => 'value3'
88
+ * )
89
+ *
90
+ * @since 1.0.0
91
+ * @return array
92
+ */
93
+ public function getValuesToSave()
94
+ {
95
+ $values = array();
96
+
97
+ foreach($this->inner_controls as $control) {
98
+ $inner_values = $control->getValuesToSave();
99
+ if( is_array($inner_values) ) {
100
+ $values = array_merge($values, $inner_values);
101
+ } else $values[] = $inner_values;
102
+ }
103
+
104
+ return $values;
105
+ }
106
+
107
+ /**
108
+ * Returns an initial value of control that is used to render the control first time.
109
+ *
110
+ * @since 1.0.0
111
+ * @param null $index
112
+ * @param bool $multiple
113
+ * @return array
114
+ */
115
+ public function getValue($index = null, $multiple = false)
116
+ {
117
+
118
+ $values = array();
119
+ foreach($this->inner_controls as $control) {
120
+ $inner_values = array_merge($values, $control->getValue());
121
+ if( is_array($inner_values) ) {
122
+ $values = array_merge($values, $inner_values);
123
+ } else $values[] = $inner_values;
124
+ }
125
+
126
+ if( $index !== null ) {
127
+ return $values[$index];
128
+ } else {
129
+ return $values;
130
+ }
131
+ }
132
+ }
133
+ }
libs/factory/forms/includes/control-holder.class.php CHANGED
@@ -1,152 +1,173 @@
1
  <?php
2
- /**
3
- * The file contains the base class for all control holder
4
- *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
- *
8
- * @package factory-forms
9
- * @since 1.0.0
10
- */
11
-
12
- /**
13
- * The base class for control holders.
14
- *
15
- * @since 1.0.0
16
- */
17
- abstract class FactoryForms329_ControlHolder extends FactoryForms329_Control {
18
-
19
- /**
20
- * Holder Elements.
21
- *
22
- * @since 1.0.0
23
- * @var FactoryForms329_FormElement[]
24
- */
25
- protected $elements = array();
26
-
27
- /**
28
- * Is this element a control holder?
29
- *
30
- * @since 1.0.0
31
- * @var bool
32
- */
33
- public $isHolder = true;
34
-
35
- /**
36
- * Creates a new instance of control holder.
37
- *
38
- * @since 1.0.0
39
- * @param mixed[] $options A holder options.
40
- * @param FactoryForms329_Form $form A parent form.
41
- */
42
- public function __construct($options, $form) {
43
- parent::__construct($options, $form);
44
- $this->elements = $form->createElements( $options['items'] );
45
- foreach( $this->elements as $val ) {
46
- $val->parent = $this;
47
- }
48
- }
49
-
50
- /**
51
- * Returns holder elements.
52
- *
53
- * @since 1.0.0
54
- * @return FactoryForms329_FormElement[].
55
- */
56
- public function getElements() {
57
- return $this->elements;
58
- }
59
-
60
- /**
61
- * Renders the form or a given control holder.
62
- *
63
- * @since 1.0.0
64
- * @param $holder A control holder to render.
65
- * @return void
66
- */
67
- function render() {
68
-
69
- $this->beforeRendering();
70
-
71
- $isFirstItem = true;
72
-
73
- foreach( $this->elements as $element ) {
74
- $element->setOption('isFirst', $isFirstItem);
75
- if ( $isFirstItem ) $isFirstItem = false;
76
-
77
- do_action('factory_form_before_element_' . $element->getName() );
78
-
79
- // if a current item is a control holder
80
- if ( $element->isHolder ) {
81
-
82
- $this->form->layout->beforeHolder( $element );
83
- $element->render();
84
- $this->form->layout->afterHolder( $element );
85
-
86
- // if a current item is an input control
87
- } elseif ( $element->isControl ) {
88
-
89
- $this->form->layout->beforeControl( $element );
90
- $element->render();
91
- $this->form->layout->afterControl( $element );
92
-
93
- // if a current item is a custom form element
94
- } elseif ( $element->isCustom ) {
95
-
96
- $element->render();
97
-
98
- // otherwise, show the error
99
- } else {
100
- print_r($element);
101
- echo( '[ERROR] Invalid item.' );
102
- }
103
-
104
- do_action('factory_form_after_element_' . $element->getName() );
105
- }
106
-
107
- $this->afterRendering();
108
- }
109
-
110
- /**
111
- * Rendering a beginning of a holder.
112
- *
113
- * @since 1.0.0
114
- * @return void
115
- */
116
- public function beforeRendering(){}
117
-
118
- /**
119
- * Rendering an end of a holder.
120
- *
121
- * @since 1.0.0
122
- * @return void
123
- */
124
- public function afterRendering(){}
125
-
126
- /**
127
- * Rendering some html before an inner holder.
128
- *
129
- * @since 1.0.0
130
- * @return void
131
- */
132
- public function beforeInnerHolder(){}
133
-
134
- /**
135
- * Rendering some html after an inner holder.
136
- *
137
- * @since 1.0.0
138
- * @return void
139
- */
140
- public function afterInnerHolder(){}
141
-
142
-
143
- public function beforeInnerElement(){}
144
-
145
- /**
146
- * Rendering some html after an inner element.
147
- *
148
- * @since 1.0.0
149
- * @return void
150
- */
151
- public function afterInnerElement(){}
152
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * The file contains the base class for all control holder
4
+ *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 1.0.0
10
+ */
11
+
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
16
+
17
+ if( !class_exists('Wbcr_FactoryForms400_ControlHolder') ) {
18
+ /**
19
+ * The base class for control holders.
20
+ *
21
+ * @since 1.0.0
22
+ */
23
+ abstract class Wbcr_FactoryForms400_ControlHolder extends Wbcr_FactoryForms400_Control {
24
+
25
+ /**
26
+ * Holder Elements.
27
+ *
28
+ * @since 1.0.0
29
+ * @var Wbcr_FactoryForms400_Control[]
30
+ */
31
+ protected $elements = array();
32
+
33
+ /**
34
+ * Is this element a control holder?
35
+ *
36
+ * @since 1.0.0
37
+ * @var bool
38
+ */
39
+ public $is_holder = true;
40
+
41
+ /**
42
+ * Creates a new instance of control holder.
43
+ *
44
+ * @since 1.0.0
45
+ * @param mixed[] $options A holder options.
46
+ * @param Wbcr_FactoryForms400_Form $form A parent form.
47
+ */
48
+ public function __construct($options, $form)
49
+ {
50
+ parent::__construct($options, $form);
51
+
52
+ $this->elements = $form->createElements($options['items']);
53
+
54
+ foreach((array)$this->elements as $val) {
55
+ $val->parent = $this;
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Returns holder elements.
61
+ *
62
+ * @since 1.0.0
63
+ * @return Wbcr_FactoryForms400_FormElement[].
64
+ */
65
+ public function getElements()
66
+ {
67
+ return $this->elements;
68
+ }
69
+
70
+ /**
71
+ * Renders the form or a given control holder.
72
+ *
73
+ * @since 1.0.0
74
+ * @return void
75
+ */
76
+ function render()
77
+ {
78
+ $this->beforeRendering();
79
+
80
+ $is_first_item = true;
81
+
82
+ foreach($this->elements as $element) {
83
+ $element->setOption('isFirst', $is_first_item);
84
+
85
+ if( $is_first_item ) {
86
+ $is_first_item = false;
87
+ }
88
+
89
+ do_action('wbcr_factory_form_before_element_' . $element->getName());
90
+
91
+ // if a current item is a control holder
92
+ if( $element->is_holder ) {
93
+
94
+ $this->form->layout->beforeHolder($element);
95
+ $element->render();
96
+ $this->form->layout->afterHolder($element);
97
+ // if a current item is an input control
98
+ } elseif( $element->is_control ) {
99
+
100
+ $this->form->layout->beforeControl($element);
101
+ $element->render();
102
+ $this->form->layout->afterControl($element);
103
+ // if a current item is a custom form element
104
+ } elseif( $element->is_custom ) {
105
+
106
+ $element->render();
107
+ // otherwise, show the error
108
+ } else {
109
+ echo('[ERROR] Invalid item.');
110
+ }
111
+
112
+ do_action('wbcr_factory_form_after_element_' . $element->getName());
113
+ }
114
+
115
+ $this->afterRendering();
116
+ }
117
+
118
+ /**
119
+ * Rendering a beginning of a holder.
120
+ *
121
+ * @since 1.0.0
122
+ * @return void
123
+ */
124
+ public function beforeRendering()
125
+ {
126
+ }
127
+
128
+ /**
129
+ * Rendering an end of a holder.
130
+ *
131
+ * @since 1.0.0
132
+ * @return void
133
+ */
134
+ public function afterRendering()
135
+ {
136
+ }
137
+
138
+ /**
139
+ * Rendering some html before an inner holder.
140
+ *
141
+ * @since 1.0.0
142
+ * @return void
143
+ */
144
+ public function beforeInnerHolder()
145
+ {
146
+ }
147
+
148
+ /**
149
+ * Rendering some html after an inner holder.
150
+ *
151
+ * @since 1.0.0
152
+ * @return void
153
+ */
154
+ public function afterInnerHolder()
155
+ {
156
+ }
157
+
158
+
159
+ public function beforeInnerElement()
160
+ {
161
+ }
162
+
163
+ /**
164
+ * Rendering some html after an inner element.
165
+ *
166
+ * @since 1.0.0
167
+ * @return void
168
+ */
169
+ public function afterInnerElement()
170
+ {
171
+ }
172
+ }
173
+ }
libs/factory/forms/includes/control.class.php CHANGED
@@ -2,382 +2,398 @@
2
  /**
3
  * The file contains the base class for all controls.
4
  *
5
- * @author Paul Kashtanoff <paul@byonepress.com>
6
- * @copyright (c) 2013, OnePress Ltd
7
  *
8
  * @package factory-forms
9
  * @since 1.0.0
10
  */
11
 
12
- /**
13
- * The base class for all controls.
14
- *
15
- * @since 1.0.0
16
- */
17
- abstract class FactoryForms329_Control extends FactoryForms329_FormElement {
18
-
19
- /**
20
- * Is this element a control?
21
- *
22
- * @since 1.0.0
23
- * @var bool
24
- */
25
- public $isControl = true;
26
-
27
- /**
28
- * Is this element a complex control?
29
- *
30
- * @since 1.0.0
31
- * @var bool
32
- */
33
- public $isComplexControl = false;
34
 
35
- /**
36
- * A provider that is used to get values.
37
- *
38
- * @since 1.0.0
39
- * @var IFactoryValueProvider
40
- */
41
- protected $provider = null;
42
 
43
  /**
44
- * Create a new instance of the control.
45
  *
46
  * @since 1.0.0
47
- * @return void
48
  */
49
- public function __construct($options, $form, $provider = null)
50
- {
51
- parent::__construct($options, $form);
52
- $this->provider = $provider;
53
- }
54
-
55
- /**
56
- * Sets a provider for the control.
57
- *
58
- * @since 1.0.0
59
- * @param IFactoryForms329_ValueProvider $provider
60
- * @return void
61
- */
62
- public function setProvider($provider)
63
- {
64
- $this->provider = $provider;
65
- }
66
-
67
- /**
68
- * Returns a control name used to save data with a provider.
69
- *
70
- * The method can return if the control have several elements.
71
- *
72
- * @since 1.0.0
73
- * @return string[]|string|null A control name.
74
- */
75
- public function getName()
76
- {
77
- return isset($this->options['name'])
78
- ? $this->options['name']
79
- : null;
80
- }
81
-
82
- /**
83
- * Prints a control name used to save data with a provider.
84
- *
85
- * @since 1.0.0
86
- * @return void
87
- */
88
- protected function printName()
89
- {
90
- $name = $this->getName();
91
- if( is_array($name) ) {
92
- echo $name[0];
93
- } else echo $name;
94
- }
95
-
96
- /**
97
- * Returns a control scope.
98
- *
99
- * @since 1.0.0
100
- * @return string|null A control scope.
101
- */
102
- public function getScope()
103
- {
104
- return isset($this->options['scope'])
105
- ? $this->options['scope']
106
- : null;
107
- }
108
-
109
- /**
110
- * Prints a control scope.
111
- *
112
- * @since 1.0.0
113
- * @return void
114
- */
115
- protected function printScope()
116
- {
117
- echo $this->getScope();
118
- }
119
-
120
- /**
121
- * Returns a name of control on a form (scope + _ + name)
122
- *
123
- * @since 1.0.0
124
- * @return string|null A control name on a form.
125
- */
126
- public function getNameOnForm($name = null)
127
- {
128
- $scope = $this->getScope();
129
- $name = !$name
130
- ? $this->getName()
131
- : $name;
132
-
133
- if( is_array($name) ) {
134
- $names = array();
135
- foreach($name as $item) {
136
- $names[] = empty($scope)
137
- ? $item
138
- : $scope . '_' . $item;
139
- }
140
-
141
- return $names;
142
  }
143
 
144
- if( empty($scope) ) {
145
- return $name;
 
 
 
 
 
 
 
 
146
  }
147
- if( empty($name) ) {
148
- return null;
 
 
 
 
 
 
 
 
 
 
 
 
149
  }
150
 
151
- return $scope . '_' . $name;
152
- }
 
 
 
 
 
 
 
 
 
 
 
153
 
154
- /**
155
- * Prints a control name on a form.
156
- *
157
- * @since 1.0.0
158
- * @return void
159
- */
160
- public function printNameOnForm()
161
- {
162
- $name = $this->getNameOnForm();
163
- if( is_array($name) ) {
164
- echo $name[0];
165
- } else echo $name;
166
- }
167
 
168
- /**
169
- * Returns a submit value of the control by a given name.
170
- *
171
- * @since 1.0.0
172
- * @return mixed
173
- */
174
- public function getSubmitValue($name, $subName)
175
- {
176
- $nameOnForm = $this->getNameOnForm($name);
177
- $value = isset($_POST[$nameOnForm])
178
- ? $_POST[$nameOnForm]
179
- : null;
180
- if( is_array($value) ) {
181
- $value = implode(',', $value);
182
  }
183
 
184
- return sanitize_text_field($value);
185
- }
 
 
 
 
 
 
 
 
 
 
 
186
 
187
- /**
188
- * Returns an array of value to save received after submission of a form.
189
- *
190
- * @see getSubmitValue
191
- *
192
- * The array has the following format:
193
- * array(
194
- * 'control-name1' => 'value1',
195
- * 'control-name2__sub-name1' => 'value2'
196
- * 'control-name2__sub-name2' => 'value3'
197
- * )
198
- *
199
- * @since 3.1.0
200
- * @return mixed[]
201
- */
202
- public function getValuesToSave()
203
- {
204
- $name = $this->getName();
205
-
206
- if( is_array($name) ) {
207
- $i = 0;
208
-
209
- foreach($name as $singleName) {
210
- $subName = $this->getSubName($singleName);
211
- if( !$subName ) {
212
- $subName = $i;
213
- $i++;
214
  }
215
- $values[$singleName] = $this->getSubmitValue($singleName, $subName);
 
216
  }
217
 
218
- return $values;
219
- }
 
 
 
 
220
 
221
- $values[$name] = $this->getSubmitValue($name, null);
 
222
 
223
- return $values;
224
- }
 
 
 
 
 
 
 
225
 
226
- /**
227
- * Returns an initial value of control that is used to render the control first time.
228
- *
229
- * @since 1.0.0
230
- * @return mixed;
231
- */
232
- public function getValue($index = null, $multiple = false)
233
- {
234
- if( isset($this->options['value'])
2
  /**
3
  * The file contains the base class for all controls.
4
  *
5
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
6
+ * @copyright (c) 2018, Webcraftic Ltd
7
  *
8
  * @package factory-forms
9
  * @since 1.0.0
10
  */
11
 
12
+ // Exit if accessed directly
13
+ if( !defined('ABSPATH') ) {
14
+ exit;
15
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
+ if( !class_exists('Wbcr_FactoryForms400_Control') ) {
 
 
 
 
 
 
18
 
19
  /**
20
+ * The base class for all controls.
21
  *
22
  * @since 1.0.0
 
23
  */
24
+ abstract class Wbcr_FactoryForms400_Control extends Wbcr_FactoryForms400_FormElement {
25
+
26
+ /**
27
+ * Is this element a control?
28
+ *
29
+ * @since 1.0.0
30
+ * @var bool
31
+ */
32
+ public $is_control = true;
33
+
34
+ /**
35
+ * Is this element a complex control?
36
+ *
37
+ * @since 1.0.0
38
+ * @var bool
39
+ */
40
+ public $is_complex_control = false;
41
+
42
+ /**
43
+ * A provider that is used to get values.
44
+ *
45
+ * @since 1.0.0
46
+ * @var Wbcr_IFactoryForms400_ValueProvider
47
+ */
48
+ protected $provider = null;
49
+
50
+ /**
51
+ * Create a new instance of the control.
52
+ *
53
+ * @param mixed[] $options
54
+ * @param FactoryForms400_Form $form
55
+ * @param null $provider
56
+ * @since 1.0.0
57
+ * @return void
58
+ */
59
+ public function __construct($options, $form, $provider = null)
60
+ {
61
+ parent::__construct($options, $form);
62
+ $this->provider = $provider;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  }
64
 
65
+ /**
66
+ * Sets a provider for the control.
67
+ *
68
+ * @since 1.0.0
69
+ * @param IFactoryForms400_ValueProvider $provider
70
+ * @return void
71
+ */
72
+ public function setProvider($provider)
73
+ {
74
+ $this->provider = $provider;
75
  }
76
+
77
+ /**
78
+ * Returns a control name used to save data with a provider.
79
+ *
80
+ * The method can return if the control have several elements.
81
+ *
82
+ * @since 1.0.0
83
+ * @return string[]|string|null A control name.
84
+ */
85
+ public function getName()
86
+ {
87
+ return isset($this->options['name'])
88
+ ? $this->options['name']
89
+ : null;
90
  }
91
 
92
+ /**
93
+ * Prints a control name used to save data with a provider.
94
+ *
95
+ * @since 1.0.0
96
+ * @return void
97
+ */
98
+ protected function printName()
99
+ {
100
+ $name = $this->getName();
101
+ if( is_array($name) ) {
102
+ echo $name[0];
103
+ } else echo $name;
104
+ }
105
 
106
+ /**
107
+ * Returns a control scope.
108
+ *
109
+ * @since 1.0.0
110
+ * @return string|null A control scope.
111
+ */
112
+ public function getScope()
113
+ {
114
+ return isset($this->options['scope'])
115
+ ? $this->options['scope']
116
+ : null;
117
+ }
 
118
 
119
+ /**
120
+ * Prints a control scope.
121
+ *
122
+ * @since 1.0.0
123
+ * @return void
124
+ */
125
+ protected function printScope()
126
+ {
127
+ echo $this->getScope();
 
 
 
 
 
128
  }
129
 
130
+ /**
131
+ * Returns a name of control on a form (scope + _ + name)
132
+ *
133
+ * @since 1.0.0
134
+ * @param null|string $name
135
+ * @return array|null|string|string[]
136
+ */
137
+ public function getNameOnForm($name = null)
138
+ {
139
+ $scope = $this->getScope();
140
+ $name = !$name
141
+ ? $this->getName()
142
+ : $name;
143
 
144
+ if( is_array($name) ) {
145
+ $names = array();
146
+ foreach($name as $item) {
147
+ $names[] = empty($scope)
148
+ ? $item
149
+ : $scope . '_' . $item;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  }
151
+
152
+ return $names;
153
  }
154
 
155
+ if( empty($scope) ) {
156
+ return $name;
157
+ }
158
+ if( empty($name) ) {
159
+ return null;
160
+ }
161
 
162
+ return $scope . '_' . $name;
163
+ }
164
 
165
+ /**
166
+ * Prints a control name on a form.
167
+ *
168
+ * @since 1.0.0
169
+ * @return void
170
+ */
171
+ public function printNameOnForm()
172
+ {
173
+ $name = $this->getNameOnForm();
174