Clearfy – WordPress optimization plugin and disable ultimate tweaker - Version 1.0.9

Version Description

  • Added quick start assistant
  • Added new feature "Right robots.txt"
  • Added new feature "Html minify"
  • Update core functions
  • Added new feature "Redirect Http to Https"
Download this release

Release Info

Developer webcraftic
Plugin Icon 128x128 Clearfy – WordPress optimization plugin and disable ultimate tweaker
Version 1.0.9
Comparing to
See all releases

Version 1.0.9

Files changed (109) hide show
  1. admin/activation.php +38 -0
  2. admin/ajax/configurate.php +132 -0
  3. admin/assets/css/general.00002.css +147 -0
  4. admin/assets/css/general.00002.less +167 -0
  5. admin/assets/css/tinymce.010000.css +19 -0
  6. admin/assets/css/tinymce.010000.less +22 -0
  7. admin/assets/js/general.010000.js +89 -0
  8. admin/boot.php +51 -0
  9. admin/includes/class.pages.php +232 -0
  10. admin/pages/additionally.php +137 -0
  11. admin/pages/defence.php +116 -0
  12. admin/pages/double-pages.php +134 -0
  13. admin/pages/general.php +180 -0
  14. admin/pages/quick-start.php +216 -0
  15. admin/pages/seo.php +227 -0
  16. clearfy.php +81 -0
  17. includes/class.core.php +862 -0
  18. includes/class.zip-archive.php +59 -0
  19. includes/functions.php +204 -0
  20. languages/clearfy-ru_RU.mo +0 -0
  21. languages/clearfy-ru_RU.po +1543 -0
  22. libs/factory/bootstrap/assets/flat/css/bootstrap.accordion.css +33 -0
  23. libs/factory/bootstrap/assets/flat/css/bootstrap.blue.css +48 -0
  24. libs/factory/bootstrap/assets/flat/css/bootstrap.coffee.css +48 -0
  25. libs/factory/bootstrap/assets/flat/css/bootstrap.core.css +7532 -0
  26. libs/factory/bootstrap/assets/flat/css/bootstrap.datepicker.css +782 -0
  27. libs/factory/bootstrap/assets/flat/css/bootstrap.ectoplasm.css +48 -0
  28. libs/factory/bootstrap/assets/flat/css/bootstrap.form-group.css +27 -0
  29. libs/factory/bootstrap/assets/flat/css/bootstrap.form-metabox.css +56 -0
  30. libs/factory/bootstrap/assets/flat/css/bootstrap.light.css +48 -0
  31. libs/factory/bootstrap/assets/flat/css/bootstrap.midnight.css +48 -0
  32. libs/factory/bootstrap/assets/flat/css/bootstrap.ocean.css +48 -0
  33. libs/factory/bootstrap/assets/flat/css/bootstrap.separator.css +8 -0
  34. libs/factory/bootstrap/assets/flat/css/bootstrap.sunrise.css +48 -0
  35. libs/factory/bootstrap/assets/flat/css/bootstrap.tab.css +97 -0
  36. libs/factory/bootstrap/assets/flat/css/bootstrap.wp-editor.css +28 -0
  37. libs/factory/bootstrap/assets/flat/css/control.checkbox.css +93 -0
  38. libs/factory/bootstrap/assets/flat/css/control.color-and-opacity.css +24 -0
  39. libs/factory/bootstrap/assets/flat/css/control.color.css +44 -0
  40. libs/factory/bootstrap/assets/flat/css/control.dropdown-and-colors.css +16 -0
  41. libs/factory/bootstrap/assets/flat/css/control.dropdown.css +92 -0
  42. libs/factory/bootstrap/assets/flat/css/control.fonts.css +24 -0
  43. libs/factory/bootstrap/assets/flat/css/control.integer.css +1 -0
  44. libs/factory/bootstrap/assets/flat/css/control.list.css +67 -0
  45. libs/factory/bootstrap/assets/flat/css/control.pattern.css +187 -0
  46. libs/factory/bootstrap/assets/flat/css/control.radio-colors.css +39 -0
  47. libs/factory/bootstrap/assets/flat/css/holder.conrol-group.css +32 -0
  48. libs/factory/bootstrap/assets/flat/css/holder.more-link.css +32 -0
  49. libs/factory/bootstrap/assets/flat/css/plugin.chosen.css +494 -0
  50. libs/factory/bootstrap/assets/flat/css/plugin.gradient-picker.css +149 -0
  51. libs/factory/bootstrap/assets/flat/css/plugin.nouislider.css +1 -0
  52. libs/factory/bootstrap/assets/flat/css/plugin.paddings-editor.css +109 -0
  53. libs/factory/bootstrap/assets/images/chosen-sprite.png +0 -0
  54. libs/factory/bootstrap/assets/images/chosen-sprite@2x.png +0 -0
  55. libs/factory/bootstrap/assets/images/color_picker_pattern.jpg +0 -0
  56. libs/factory/bootstrap/assets/images/drop-menu_arrow.png +0 -0
  57. libs/factory/bootstrap/assets/images/loader-sm-f6f6f6.gif +0 -0
  58. libs/factory/bootstrap/assets/images/loader-sm-tr.gif +0 -0
  59. libs/factory/bootstrap/assets/images/no-pattern-background-control.png +0 -0
  60. libs/factory/bootstrap/assets/js/bootstrap.accordion.js +49 -0
  61. libs/factory/bootstrap/assets/js/bootstrap.affix.js +127 -0
  62. libs/factory/bootstrap/assets/js/bootstrap.alert.js +98 -0
  63. libs/factory/bootstrap/assets/js/bootstrap.button.js +115 -0
  64. libs/factory/bootstrap/assets/js/bootstrap.carousel.js +217 -0
  65. libs/factory/bootstrap/assets/js/bootstrap.collapse.js +167 -0
  66. libs/factory/bootstrap/assets/js/bootstrap.datepicker.js +1966 -0
  67. libs/factory/bootstrap/assets/js/bootstrap.dropdown.js +143 -0
  68. libs/factory/bootstrap/assets/js/bootstrap.modal.js +246 -0
  69. libs/factory/bootstrap/assets/js/bootstrap.popover.js +117 -0
  70. libs/factory/bootstrap/assets/js/bootstrap.scrollspy.js +158 -0
  71. libs/factory/bootstrap/assets/js/bootstrap.tab.js +135 -0
  72. libs/factory/bootstrap/assets/js/bootstrap.tooltip.js +386 -0
  73. libs/factory/bootstrap/assets/js/bootstrap.transition.js +63 -0
  74. libs/factory/bootstrap/assets/js/control.checkbox.js +290 -0
  75. libs/factory/bootstrap/assets/js/control.color-and-opacity.js +32 -0
  76. libs/factory/bootstrap/assets/js/control.color.js +88 -0
  77. libs/factory/bootstrap/assets/js/control.dropdown-and-colors.js +62 -0
  78. libs/factory/bootstrap/assets/js/control.dropdown.js +355 -0
  79. libs/factory/bootstrap/assets/js/control.fonts.js +196 -0
  80. libs/factory/bootstrap/assets/js/control.gradient.js +51 -0
  81. libs/factory/bootstrap/assets/js/control.integer.js +102 -0
  82. libs/factory/bootstrap/assets/js/control.list.js +141 -0
  83. libs/factory/bootstrap/assets/js/control.pattern.js +218 -0
  84. libs/factory/bootstrap/assets/js/global.color-functions.js +28 -0
  85. libs/factory/bootstrap/assets/js/holder.conrol-group.js +20 -0
  86. libs/factory/bootstrap/assets/js/holder.more-link.js +37 -0
  87. libs/factory/bootstrap/assets/js/plugin.chosen.js +1211 -0
  88. libs/factory/bootstrap/assets/js/plugin.color.js +595 -0
  89. libs/factory/bootstrap/assets/js/plugin.ddslick.js +1 -0
  90. libs/factory/bootstrap/assets/js/plugin.gradient-picker.js +585 -0
  91. libs/factory/bootstrap/assets/js/plugin.iris.js +893 -0
  92. libs/factory/bootstrap/assets/js/plugin.nouislider.js +24 -0
  93. libs/factory/bootstrap/assets/js/plugin.paddings-editor.js +254 -0
  94. libs/factory/bootstrap/boot.php +31 -0
  95. libs/factory/bootstrap/includes/functions.php +269 -0
  96. libs/factory/bootstrap/includes/load-scripts.php +91 -0
  97. libs/factory/bootstrap/includes/load-styles.php +90 -0
  98. libs/factory/core/boot.php +32 -0
  99. libs/factory/core/includes/activation/activator.class.php +149 -0
  100. libs/factory/core/includes/activation/update.class.php +30 -0
  101. libs/factory/core/includes/assets-managment/assets-list.class.php +157 -0
  102. libs/factory/core/includes/assets-managment/script-list.class.php +76 -0
  103. libs/factory/core/includes/assets-managment/style-list.class.php +37 -0
  104. libs/factory/core/includes/functions.php +272 -0
  105. libs/factory/core/includes/plugin.class.php +730 -0
  106. libs/factory/font-awesome/assets/css/font-awesome.css +3049 -0
  107. libs/factory/font-awesome/assets/fonts/FontAwesome.otf +0 -0
  108. libs/factory/font-awesome/assets/fonts/fontawesome-webfont.eot +0 -0
  109. libs/factory/font-awesome/assets/fonts/fontawesome-webfont.svg +824 -0
admin/activation.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Activator for the clearfy
5
+ * @author Webcraftic <wordpress.webraftic@gmail.com>
6
+ * @copyright (c) 09.09.2017, Webcraftic
7
+ * @see Factory325_Activator
8
+ * @version 1.0
9
+ */
10
+ /*class WbcrClr_Activation extends Factory325_Activator {
11
+
12
+ /**
13
+ * Runs activation actions.
14
+ *
15
+ * @since 1.0.0
16
+ */
17
+ /*public function activate()
18
+ {
19
+ global $wbcr_clearfy_plugin;
20
+
21
+ do_action('wbcr_clearfy_before_activation', $wbcr_clearfy_plugin, $this);
22
+ //wbcr_clearfy_import_old_options();
23
+ do_action('wbcr_clearfy_after_activation', $wbcr_clearfy_plugin, $this);
24
+ }
25
+ }*/
26
+
27
+ /*$wbcr_clearfy_plugin->registerActivation('WbcrClr_Activation');*/
28
+
29
+ /*function bizpanda_cancel_plugin_deactivation($cancel)
30
+ {
31
+ if( !BizPanda::isSinglePlugin() ) {
32
+ return true;
33
+ }
34
+
35
+ return $cancel;
36
+ }
37
+
38
+ add_filter('factory_cancel_plugin_deactivation_bizpanda', 'bizpanda_cancel_plugin_deactivation');*/
admin/ajax/configurate.php ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Ajax plugin configuration
4
+ * @author Webcraftic <wordpress.webraftic@gmail.com>
5
+ * @copyright (c) 2017 Webraftic Ltd
6
+ * @version 1.0
7
+ */
8
+
9
+ function wbcr_clearfy_configurate_plugin()
10
+ {
11
+ check_ajax_referer('wbcr_clearfy_ajax_configurate_nonce', 'security');
12
+
13
+ if( !current_user_can('manage_options') ) {
14
+ echo json_encode(array('error' => __('You don\'t have enough capability to edit this information.', 'clearfy')));
15
+ exit;
16
+ }
17
+
18
+ $mode_name = isset($_POST['mode'])
19
+ ? sanitize_text_field($_POST['mode'])
20
+ : null;
21
+
22
+ if( empty($mode_name) ) {
23
+ return;
24
+ }
25
+
26
+ $allow_mods['recommended'] = array(
27
+ 'disable_json_rest_api',
28
+ 'disable_emoji',
29
+ 'remove_dns_prefetch',
30
+ 'remove_rsd_link',
31
+ 'remove_wlw_link',
32
+ 'remove_shortlink_link',
33
+ 'remove_adjacent_posts_link',
34
+ 'remove_recent_comments_style',
35
+ 'content_image_auto_alt',
36
+ 'comment_text_convert_links_pseudo',
37
+ 'pseudo_comment_author_link',
38
+ 'set_last_modified_headers',
39
+ 'if_modified_since_headers',
40
+ 'remove_last_item_breadcrumb_yoast',
41
+ 'yoast_remove_image_from_xml_sitemap',
42
+ 'yoast_remove_head_comment',
43
+ 'redirect_archives_date',
44
+ 'redirect_archives_author',
45
+ 'redirect_archives_tag',
46
+ 'attachment_pages_redirect',
47
+ 'remove_single_pagination_duplicate',
48
+ 'remove_replytocom',
49
+ 'remove_meta_generator',
50
+ 'protect_author_get',
51
+ 'change_login_errors',
52
+ 'remove_x_pingback'
53
+ );
54
+
55
+ $allow_mods['clear_code'] = array(
56
+ 'disable_json_rest_api',
57
+ 'disable_emoji',
58
+ 'remove_dns_prefetch',
59
+ 'remove_rsd_link',
60
+ 'remove_wlw_link',
61
+ 'remove_shortlink_link',
62
+ 'remove_adjacent_posts_link',
63
+ 'remove_recent_comments_style',
64
+ 'yoast_remove_image_from_xml_sitemap',
65
+ 'yoast_remove_head_comment',
66
+ 'remove_meta_generator',
67
+ );
68
+
69
+ $allow_mods['defence'] = array(
70
+ 'remove_meta_generator',
71
+ 'protect_author_get',
72
+ 'change_login_errors',
73
+ 'remove_x_pingback'
74
+ );
75
+ $allow_mods['seo_optimize'] = array(
76
+ 'content_image_auto_alt',
77
+ 'comment_text_convert_links_pseudo',
78
+ 'pseudo_comment_author_link',
79
+ 'set_last_modified_headers',
80
+ 'if_modified_since_headers',
81
+ 'remove_last_item_breadcrumb_yoast',
82
+ 'redirect_archives_date',
83
+ 'redirect_archives_author',
84
+ 'redirect_archives_tag',
85
+ 'attachment_pages_redirect',
86
+ 'remove_single_pagination_duplicate',
87
+ 'remove_replytocom',
88
+ );
89
+
90
+ $all_options = array(
91
+ 'remove_jquery_migrate',
92
+ 'disable_embeds',
93
+ 'disable_feed',
94
+ 'remove_url_from_comment_form',
95
+ 'remove_unnecessary_link_admin_bar',
96
+ 'remove_unnecessary_link_admin_bar',
97
+ 'revisions_disable',
98
+ 'revision_limit',
99
+ 'last_modified_exclude',
100
+ 'right_robots_txt',
101
+ 'robots_txt_text',
102
+ 'quick_mode',
103
+ 'html_minify',
104
+ 'redirect_from_http_to_https'
105
+ );
106
+
107
+ $all_options = array_unique(array_merge($all_options, $allow_mods['recommended'], $allow_mods['clear_code'], $allow_mods['defence'], $allow_mods['seo_optimize']), SORT_REGULAR);
108
+
109
+ foreach($all_options as $opt_name) {
110
+ delete_option('wbcr-clearfy_' . $opt_name);
111
+ delete_option('wbcr-clearfy_' . $opt_name . '_is_active');
112
+ }
113
+
114
+ if( !isset($allow_mods[$mode_name]) && $mode_name != 'reset' ) {
115
+ echo json_encode(array('error' => __('Undefinded mode.', 'clearfy')));
116
+ exit;
117
+ }
118
+
119
+ if( $mode_name != 'reset' ) {
120
+ foreach($allow_mods[$mode_name] as $option_name) {
121
+ update_option('wbcr-clearfy_' . $option_name, 1);
122
+ }
123
+
124
+ update_option('wbcr-clearfy_quick_mode', $mode_name);
125
+ }
126
+
127
+ echo json_encode(array('status' => 'success'));
128
+ exit;
129
+ }
130
+
131
+ add_action('wp_ajax_wbcr_clearfy_configurate', 'wbcr_clearfy_configurate_plugin');
132
+
admin/assets/css/general.00002.css ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * General styles
3
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
4
+ * @copyright Alex Kovalev 23.08.2017
5
+ */
6
+ #WBCR {
7
+ /*.factory-form-group {
8
+ max-width: 1400px;
9
+ }*/
10
+ /*.wbcr-clr-options-general {
11
+
12
+ }*/
13
+ /* #wbcr-clearfy_quick_start_select {
14
+ max-width: 300px;
15
+ }*/
16
+ }
17
+ #WBCR .alert.alert-success {
18
+ margin: 0px;
19
+ margin-top: 10px;
20
+ margin-bottom: 10px;
21
+ font-weight: bold;
22
+ padding: 10px;
23
+ }
24
+ #WBCR .wbcr-clearfy-header {
25
+ padding: 20px 20px 40px;
26
+ }
27
+ #WBCR .factory-bootstrap-329 label {
28
+ font-weight: normal;
29
+ }
30
+ #WBCR .factory-bootstrap-329 .form-horizontal .control-label {
31
+ max-width: 300px;
32
+ }
33
+ #WBCR .factory-control-buttons {
34
+ text-align: right;
35
+ padding-right: 20px;
36
+ }
37
+ #WBCR .wbcr-clearfy-recomended-text {
38
+ display: block;
39
+ font-size: 11px;
40
+ font-weight: lighter;
41
+ color: #179347;
42
+ }
43
+ #WBCR .wbcr-clearfy-group-header {
44
+ background: #f9f9f9;
45
+ padding: 30px 0 10px 40px;
46
+ margin-bottom: 20px;
47
+ }
48
+ #WBCR .wbcr-clearfy-group-header strong {
49
+ font-size: 15px;
50
+ }
51
+ #WBCR .wbcr-clearfy-group-header p {
52
+ color: #8c8888;
53
+ font-size: 12px;
54
+ }
55
+ #WBCR #wbcr-clearfy_robots_txt_text {
56
+ min-height: 200px;
57
+ }
58
+ #WBCR .wbcr-clearfy-board {
59
+ background: #fff;
60
+ padding: 20px;
61
+ margin-top: 20px;
62
+ }
63
+ #WBCR .wbcr-clearfy-switch-success-message,
64
+ #WBCR .wbcr-clearfy-switch-error-message {
65
+ display: none;
66
+ padding: 15px 20px;
67
+ font-size: 13px;
68
+ font-weight: bold;
69
+ margin: 15px 0;
70
+ border-radius: 4px;
71
+ }
72
+ #WBCR .wbcr-clearfy-switch-success-message {
73
+ background: #e5f9ce;
74
+ border-bottom: 3px solid #d3eab9;
75
+ color: #56614a;
76
+ }
77
+ #WBCR .wbcr-clearfy-switch-error-message {
78
+ background: #fdc6c2;
79
+ border-bottom: 3px solid #e2a19c;
80
+ color: #bd6963;
81
+ }
82
+ #WBCR #wbcr-clearfy-quick-mode-board .wbcr-clearfy-switch {
83
+ position: relative;
84
+ padding: 20px;
85
+ font-size: 13px;
86
+ text-transform: uppercase;
87
+ background: #f1f1f1;
88
+ margin-top: 10px;
89
+ border: 2px solid #e0dfdf;
90
+ text-align: center;
91
+ -webkit-transition: all 0.2s ease-out;
92
+ -moz-transition: all 0.2s ease-out;
93
+ -o-transition: all 0.2s ease-out;
94
+ transition: all 0.2s ease-out;
95
+ }
96
+ #WBCR #wbcr-clearfy-quick-mode-board .wbcr-clearfy-switch:hover {
97
+ cursor: pointer;
98
+ background: #e9e9e9;
99
+ border: 2px solid #d8d7d7;
100
+ }
101
+ #WBCR #wbcr-clearfy-quick-mode-board .wbcr-clearfy-switch.wbcr-clearfy-loading .wbcr-clearfy-switch-confirmation button {
102
+ display: none !important;
103
+ }
104
+ #WBCR #wbcr-clearfy-quick-mode-board .wbcr-clearfy-switch.wbcr-clearfy-edit {
105
+ border: 2px solid #e0dfdf;
106
+ }
107
+ #WBCR #wbcr-clearfy-quick-mode-board .wbcr-clearfy-switch.wbcr-clearfy-edit .wbcr-clearfy-switch-confirmation {
108
+ display: block !important;
109
+ }
110
+ #WBCR #wbcr-clearfy-quick-mode-board .wbcr-clearfy-switch.wbcr-clearfy-active {
111
+ background: #e5f9ce;
112
+ border: 2px solid #c9deb2;
113
+ color: #677d4d;
114
+ }
115
+ #WBCR #wbcr-clearfy-quick-mode-board .wbcr-clearfy-switch.wbcr-clearfy-mode-reset:hover {
116
+ background: #f7ccc9;
117
+ color: #c55b5b;
118
+ border: 2px solid #d8adad;
119
+ }
120
+ #WBCR #wbcr-clearfy-quick-mode-board .wbcr-clearfy-switch .wbcr-clearfy-switch-confirmation {
121
+ position: absolute;
122
+ display: none;
123
+ top: 0;
124
+ left: 0;
125
+ right: 0;
126
+ bottom: 0;
127
+ background: rgba(255, 255, 255, 0.85);
128
+ }
129
+ #WBCR #wbcr-clearfy-quick-mode-board .wbcr-clearfy-switch .wbcr-clearfy-switch-confirmation button {
130
+ margin-top: 15px;
131
+ border: 0;
132
+ box-shadow: none;
133
+ padding: 5px 10px;
134
+ font-weight: bold;
135
+ font-size: 13px;
136
+ border-radius: 3px;
137
+ outline: none;
138
+ }
139
+ #WBCR #wbcr-clearfy-quick-mode-board .wbcr-clearfy-switch .wbcr-clearfy-switch-confirmation button.wbcr-clearfy-confirm-button-accept {
140
+ background-color: #c9deb2;
141
+ color: #586549;
142
+ }
143
+ #WBCR #wbcr-clearfy-quick-mode-board .wbcr-clearfy-switch .wbcr-clearfy-switch-confirmation button.wbcr-clearfy-confirm-button-cancel {
144
+ background-color: #fdd599;
145
+ color: #a57b3c;
146
+ margin-left: 10px;
147
+ }
admin/assets/css/general.00002.less ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * General styles
3
+ * @author Alex Kovalev <alex.kovalevv@gmail.com>
4
+ * @copyright Alex Kovalev 23.08.2017
5
+ */
6
+
7
+ #WBCR {
8
+ .alert.alert-success {
9
+ margin: 0px;
10
+ margin-top: 10px;
11
+ margin-bottom: 10px;
12
+ font-weight: bold;
13
+ padding: 10px;
14
+ }
15
+
16
+ .wbcr-clearfy-header {
17
+ padding: 20px 20px 40px;
18
+ }
19
+ .factory-bootstrap-000 label {
20
+ font-weight: normal;
21
+ }
22
+ .factory-bootstrap-000 .form-horizontal .control-label {
23
+ max-width: 300px;
24
+ }
25
+ .factory-control-buttons {
26
+ text-align: right;
27
+ padding-right: 20px;
28
+ }
29
+ /*.factory-form-group {
30
+ max-width: 1400px;
31
+ }*/
32
+ .wbcr-clearfy-recomended-text {
33
+ display: block;
34
+ font-size: 11px;
35
+ font-weight: lighter;
36
+ color: #179347;
37
+ }
38
+ .wbcr-clearfy-group-header {
39
+ background: #f9f9f9;
40
+ padding: 30px 0 10px 40px;
41
+ margin-bottom: 20px;
42
+ strong {
43
+ font-size: 15px;
44
+ }
45
+ p {
46
+ color: #8c8888;
47
+ font-size: 12px;
48
+ }
49
+ }
50
+
51
+ #wbcr-clearfy_robots_txt_text {
52
+ min-height: 200px;
53
+ }
54
+
55
+ .wbcr-clearfy-board {
56
+ background: #fff;
57
+ padding: 20px;
58
+ margin-top: 20px;
59
+ }
60
+
61
+ /*.wbcr-clr-options-general {
62
+
63
+ }*/
64
+ /* #wbcr-clearfy_quick_start_select {
65
+ max-width: 300px;
66
+ }*/
67
+
68
+ .wbcr-clearfy-switch-success-message, .wbcr-clearfy-switch-error-message {
69
+ display: none;
70
+ padding: 15px 20px;
71
+ font-size: 13px;
72
+ font-weight: bold;
73
+ margin: 15px 0;
74
+ border-radius: 4px;
75
+ }
76
+ .wbcr-clearfy-switch-success-message {
77
+ background: #e5f9ce;
78
+ border-bottom: 3px solid #d3eab9;
79
+ color: #56614a;
80
+ }
81
+
82
+ .wbcr-clearfy-switch-error-message {
83
+ background: #fdc6c2;
84
+ border-bottom: 3px solid #e2a19c;
85
+ color: #bd6963;
86
+ }
87
+
88
+ #wbcr-clearfy-quick-mode-board {
89
+ .wbcr-clearfy-switch {
90
+ position: relative;
91
+ padding: 20px;
92
+ font-size: 13px;
93
+ text-transform: uppercase;
94
+ background: #f1f1f1;
95
+ margin-top: 10px;
96
+ border: 2px solid #e0dfdf;
97
+ text-align: center;
98
+
99
+ -webkit-transition: all 0.2s ease-out;
100
+ -moz-transition: all 0.2s ease-out;
101
+ -o-transition: all 0.2s ease-out;
102
+ transition: all 0.2s ease-out;
103
+
104
+ &:hover {
105
+ cursor: pointer;
106
+ background: darken(#f1f1f1, 3%);
107
+ border: 2px solid darken(#e0dfdf, 3%);
108
+ }
109
+ &.wbcr-clearfy-loading {
110
+ .wbcr-clearfy-switch-confirmation {
111
+ // background-image: ;
112
+ button {
113
+ display: none !important;
114
+ }
115
+ }
116
+ }
117
+
118
+ &.wbcr-clearfy-edit {
119
+ border: 2px solid #e0dfdf;
120
+ .wbcr-clearfy-switch-confirmation {
121
+ display: block !important;
122
+ }
123
+ }
124
+ &.wbcr-clearfy-active {
125
+ background: #e5f9ce;
126
+ border: 2px solid #c9deb2;
127
+ color: #677d4d;
128
+ }
129
+ &.wbcr-clearfy-mode-reset:hover {
130
+ background: #f7ccc9;
131
+ color: #c55b5b;
132
+ border: 2px solid #d8adad;
133
+ }
134
+
135
+ .wbcr-clearfy-switch-confirmation {
136
+ position: absolute;
137
+ display: none;
138
+ top: 0;
139
+ left: 0;
140
+ right: 0;
141
+ bottom: 0;
142
+ background: rgba(255, 255, 255, 0.85);
143
+
144
+ button {
145
+ margin-top: 15px;
146
+ border: 0;
147
+ box-shadow: none;
148
+ padding: 5px 10px;
149
+ font-weight: bold;
150
+ font-size: 13px;
151
+ border-radius: 3px;
152
+ outline: none;
153
+
154
+ &.wbcr-clearfy-confirm-button-accept {
155
+ background-color: #c9deb2;
156
+ color: #586549;
157
+ }
158
+ &.wbcr-clearfy-confirm-button-cancel {
159
+ background-color: #fdd599;
160
+ color: #a57b3c;
161
+ margin-left: 10px;
162
+ }
163
+ }
164
+ }
165
+ }
166
+ }
167
+ }
admin/assets/css/tinymce.010000.css ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ font-family: Arial, san-serif;
3
+ background-color: #fff;
4
+ }
5
+ body,
6
+ p {
7
+ font-size: 17px;
8
+ line-height: 150%;
9
+ }
10
+ p {
11
+ margin: 0px;
12
+ font-size: 17px;
13
+ }
14
+ p + p {
15
+ margin-top: 15px;
16
+ }
17
+ strong {
18
+ color: #333;
19
+ }
admin/assets/css/tinymce.010000.less ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ font-family: Arial, san-serif;
3
+ background-color: #fff;
4
+ }
5
+
6
+ body, p {
7
+ font-size: 17px;
8
+ line-height: 150%;
9
+ }
10
+
11
+ p {
12
+ margin: 0px;
13
+ font-size: 17px;
14
+ }
15
+
16
+ p + p {
17
+ margin-top: 15px;
18
+ }
19
+
20
+ strong {
21
+ color: #333;
22
+ }
admin/assets/js/general.010000.js ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ $(document).ready(function() {
13
+ var errorContanier = $('.wbcr-clearfy-switch-error-message'),
14
+ defaultErrorMessage = errorContanier.text();
15
+
16
+ $('.wbcr-clearfy-switch').click(function() {
17
+ var self = $(this);
18
+
19
+ $('.wbcr-clearfy-switch').removeClass('wbcr-clearfy-edit');
20
+ self.addClass('wbcr-clearfy-edit');
21
+ return false;
22
+ });
23
+
24
+ $('.wbcr-clearfy-confirm-button-cancel').click(function() {
25
+ $(this).closest('.wbcr-clearfy-switch').removeClass('wbcr-clearfy-edit');
26
+ return false;
27
+ });
28
+
29
+ $('.wbcr-clearfy-confirm-button-accept').click(function() {
30
+ var self = $(this), switcher = $(this).closest('.wbcr-clearfy-switch'),
31
+ modeName = switcher.data('mode');
32
+
33
+ if( !modeName ) {
34
+ return;
35
+ }
36
+
37
+ switcher.addClass('wbcr-clearfy-loading');
38
+
39
+ if( wbcr_clearfy_ajax === undefined ) {
40
+ console.log('Undefinded wbcr_clearfy_ajax object.');
41
+ return;
42
+ }
43
+
44
+ var ajaxUrl = wbcr_clearfy_ajax ? wbcr_clearfy_ajax.ajaxurl : ajaxurl;
45
+
46
+ $.ajax(ajaxurl, {
47
+ type: 'post',
48
+ dataType: 'json',
49
+ data: {
50
+ action: 'wbcr_clearfy_configurate',
51
+ mode: modeName,
52
+ security: wbcr_clearfy_ajax.ajax_nonce
53
+ },
54
+ success: function(data, textStatus, jqXHR) {
55
+ switcher.removeClass('wbcr-clearfy-edit')
56
+ .removeClass('wbcr-clearfy-loading');
57
+
58
+ if( !data || data.error ) {
59
+
60
+ if( data ) {
61
+
62
+ console.log(data.error);
63
+ if( !errorContanier.is(':visible') ) {
64
+ errorContanier.html(defaultErrorMessage + '<br>' + data.error);
65
+ }
66
+ }
67
+
68
+ if( !errorContanier.is(':visible') ) {
69
+ errorContanier.fadeIn(600).delay(10000).fadeOut(600);
70
+ }
71
+ return;
72
+ }
73
+
74
+ $('.wbcr-clearfy-switch').removeClass('wbcr-clearfy-active');
75
+
76
+ if( modeName != 'reset' ) {
77
+ switcher.addClass('wbcr-clearfy-active');
78
+ }
79
+
80
+ $('.wbcr-clearfy-switch-success-message').fadeIn(600).delay(3000).fadeOut(600);
81
+
82
+ }
83
+ });
84
+
85
+ });
86
+
87
+ });
88
+
89
+ })(jQuery);
admin/boot.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Admin boot
4
+ * @author Webcraftic <alex.kovalevv@gmail.com>
5
+ * @copyright Webcraftic 25.05.2017
6
+ * @version 1.0
7
+ */
8
+
9
+ require(WBCR_CLR_PLUGIN_DIR . '/admin/activation.php');
10
+ require(WBCR_CLR_PLUGIN_DIR . '/admin/includes/class.pages.php');
11
+ require(WBCR_CLR_PLUGIN_DIR . '/admin/pages/quick-start.php');
12
+ require(WBCR_CLR_PLUGIN_DIR . '/admin/pages/general.php');
13
+ require(WBCR_CLR_PLUGIN_DIR . '/admin/pages/seo.php');
14
+ require(WBCR_CLR_PLUGIN_DIR . '/admin/pages/double-pages.php');
15
+ require(WBCR_CLR_PLUGIN_DIR . '/admin/pages/defence.php');
16
+ require(WBCR_CLR_PLUGIN_DIR . '/admin/pages/additionally.php');
17
+
18
+ if( isset($_REQUEST['action']) && $_REQUEST['action'] == 'wbcr_clearfy_configurate' ) {
19
+ require(WBCR_CLR_PLUGIN_DIR . '/admin/ajax/configurate.php');
20
+ }
21
+
22
+ /**
23
+ * Checking and using additional import
24
+ */
25
+ function wbcr_clearfy_admin_init()
26
+ {
27
+ wbcr_clearfy_import_old_options();
28
+ }
29
+
30
+ add_action('init', 'wbcr_clearfy_admin_init');
31
+
32
+ /**
33
+ * Add settings link in plugins list
34
+ *
35
+ * @param $links
36
+ * @return mixed
37
+ */
38
+ function wbcr_add_settings_link($links)
39
+ {
40
+ global $wbcr_clearfy_plugin;
41
+ $settings_link = '<a href="' . admin_url('options-general.php?page=quick_start-' . $wbcr_clearfy_plugin->pluginName) . '">' . __('Settings') . '</a>';
42
+ array_unshift($links, $settings_link);
43
+
44
+ return $links;
45
+ }
46
+
47
+ // plugin settings link
48
+ add_filter("plugin_action_links_" . WBCR_CLR_PLUGIN_BASE, 'wbcr_add_settings_link');
49
+
50
+
51
+
admin/includes/class.pages.php ADDED
@@ -0,0 +1,232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Page template class
5
+ * Author: Webcraftic <wordpress.webraftic@gmail.com>
6
+ * Version: 1.0.0
7
+ */
8
+ class WbcrClr_Page extends FactoryPages321_AdminPage {
9
+
10
+ /**
11
+ * The id of the page in the admin menu.
12
+ *
13
+ * Mainly used to navigate between pages.
14
+ * @see FactoryPages321_AdminPage
15
+ *
16
+ * @since 1.0.0
17
+ * @var string
18
+ */
19
+
20
+ protected $_pages = array();
21
+
22
+ public $customTarget = true;
23
+
24
+ public $menuTarget = 'options-general.php';
25
+
26
+ public $internal = true;
27
+
28
+ public function __construct(Factory325_Plugin $plugin)
29
+ {
30
+ parent::__construct($plugin);
31
+
32
+ $this->_pages = array(
33
+ 'quick_start' => array(
34
+ 'type' => 'page', // page, options
35
+ 'url' => admin_url('options-general.php?page=quick_start-' . $plugin->pluginName),
36
+ 'title' => __('Quick start', 'clearfy')
37
+ ),
38
+ 'general' => array(
39
+ 'type' => 'options', // page, options
40
+ 'url' => admin_url('options-general.php?page=general-' . $plugin->pluginName),
41
+ 'title' => __('General', 'clearfy')
42
+ ),
43
+ 'seo' => array(
44
+ 'type' => 'options',
45
+ 'url' => admin_url('options-general.php?page=seo-' . $plugin->pluginName),
46
+ 'title' => __('SEO', 'clearfy')
47
+ ),
48
+ 'double_pages' => array(
49
+ 'type' => 'options',
50
+ 'url' => admin_url('options-general.php?page=double_pages-' . $plugin->pluginName),
51
+ 'title' => __('Duplicate pages', 'clearfy')
52
+ ),
53
+ 'defence' => array(
54
+ 'type' => 'options',
55
+ 'url' => admin_url('options-general.php?page=defence-' . $plugin->pluginName),
56
+ 'title' => __('Defence', 'clearfy')
57
+ ),
58
+ 'additionally' => array(
59
+ 'type' => 'options',
60
+ 'url' => admin_url('options-general.php?page=additionally-' . $plugin->pluginName),
61
+ 'title' => __('Advanced', 'clearfy')
62
+ )
63
+ /*'support' => array(
64
+ 'type' => 'page',
65
+ 'url' => admin_url('options-general.php?page=support-' . $plugin->pluginName),
66
+ 'title' => __('Support', 'clearfy')
67
+ ),*/
68
+ );
69
+
70
+ foreach($this->_pages as $screen => $page) {
71
+ $this->_pages[$screen]['url'] = add_query_arg(array('wbcr_clr_screen' => $screen), $page['url']);
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Requests assets (js and css) for the page.
77
+ *
78
+ * @see FactoryPages321_AdminPage
79
+ *
80
+ * @since 1.0.0
81
+ * @return void
82
+ */
83
+ public function assets($scripts, $styles)
84
+ {
85
+
86
+ $this->scripts->request('jquery');
87
+
88
+ $this->scripts->request(array(
89
+ 'control.checkbox',
90
+ 'control.dropdown',
91
+ 'holder.more-link',
92
+ 'bootstrap.tab',
93
+ ), 'bootstrap');
94
+
95
+ $this->styles->request(array(
96
+ 'bootstrap.core',
97
+ 'bootstrap.form-group',
98
+ 'bootstrap.separator',
99
+ 'bootstrap.tab',
100
+ 'holder.more-link',
101
+ 'control.dropdown',
102
+ 'control.checkbox'
103
+ ), 'bootstrap');
104
+
105
+ $this->styles->add(WBCR_CLR_PLUGIN_URL . '/admin/assets/css/general.00002.css');
106
+ }
107
+
108
+ /**
109
+ * Shows a page or options
110
+ *
111
+ * @sinve 1.0.0
112
+ * @return void
113
+ */
114
+ public function indexAction()
115
+ {
116
+ $screen = isset($_GET['wbcr_clr_screen'])
117
+ ? sanitize_text_field($_GET['wbcr_clr_screen'])
118
+ : 'quick_start';
119
+
120
+ if( !isset($this->_pages[$screen]) ) {
121
+ $screen = 'quick_start';
122
+ }
123
+
124
+ if( 'options' === $this->_pages[$screen]['type'] ) {
125
+ $this->showOptions($screen);
126
+ } else {
127
+ $this->showPage($screen);
128
+ }
129
+ }
130
+
131
+ protected function showNav($screen)
132
+ {
133
+ ?>
134
+ <h2 class="nav-tab-wrapper">
135
+ <?php foreach($this->_pages as $pageScreen => $page) { ?>
136
+ <a href="<?php echo $page['url'] ?>" class="nav-tab <?php if( $pageScreen === $screen ) {
137
+ echo 'nav-tab-active';
138
+ } ?>" id="general-tab"><?php echo $page['title'] ?></a><?php } ?>
139
+ </h2>
140
+ <?php
141
+ }
142
+
143
+ protected function showOptions($screen)
144
+ {
145
+ $form = new FactoryForms328_Form(array(
146
+ 'scope' => 'wbcr-clearfy',
147
+ 'name' => "$screen-options"
148
+ ), $this->plugin);
149
+
150
+ $form->setProvider(new FactoryForms328_OptionsValueProvider(array(
151
+ 'scope' => 'wbcr-clearfy'
152
+ )));
153
+
154
+ $options = $this->getOptions();
155
+ $form->add($options);
156
+
157
+ if( isset($_POST['save-action']) && wp_verify_nonce($_POST['wbcr_clearfy_save'], 'wbcr_clearfy_save_action') ) {
158
+
159
+ if( !current_user_can('manage_options') ) {
160
+ wp_die(__('You do not have permission to edit page.', 'clearfy'));
161
+ exit;
162
+ }
163
+
164
+ $form->save();
165
+
166
+ $redirectArgs = apply_filters('onp_hmwp_' . $screen . '_options', array(
167
+ 'wbcr_clr_screen' => $screen,
168
+ 'wbcr_saved' => 1
169
+ ));
170
+
171
+ $this->redirectToAction('index', $redirectArgs);
172
+ }
173
+
174
+
175
+ ?>
176
+ <div id="WBCR" class="wrap">
177
+ <div class="factory-bootstrap-329 factory-fontawesome-320">
178
+ <h2><? _e('Clearfy - disable unused features', 'clearfy'); ?></h2>
179
+
180
+ <?php if( isset($_GET['wbcr_saved']) ) { ?>
181
+ <div id="message" class="alert alert-success">
182
+ <p><?php _e('The settings have been updated successfully!', 'clearfy') ?></p>
183
+ </div>
184
+ <?php } ?>
185
+
186
+ <?php $this->showNav($screen) ?>
187
+
188
+ <div class="wbcr-clr-options wbcr-clr-options-<?php echo $screen ?> ">
189
+ <form method="post" class="form-horizontal">
190
+ <?php $form->html(); ?>
191
+ </form>
192
+ </div>
193
+ </div>
194
+ </div>
195
+ <?php
196
+ }
197
+
198
+ protected function showPage($screen)
199
+ {
200
+ ?>
201
+ <div id="WBCR" class="wrap">
202
+ <div class="factory-bootstrap-329 factory-fontawesome-320">
203
+ <h2><? _e('Clearfy - disable unused features', 'clearfy'); ?></h2>
204
+
205
+ <?php $this->showNav($screen) ?>
206
+ <?php $this->showPageContent() ?>
207
+ </div>
208
+ </div>
209
+ <?php
210
+ }
211
+
212
+ public function _showFormButton()
213
+ {
214
+ ?>
215
+ <div class="form-group factory-control-buttons">
216
+ <div class="control-group">
217
+ <?php wp_nonce_field('wbcr_clearfy_save_action', 'wbcr_clearfy_save'); ?>
218
+ <input name="save-action" class="btn btn-primary" type="submit" value="<?php _e('Save changes', 'clearfy') ?>"/>
219
+ <input type="hidden" name="wbcr_clr_options_submit" value="1"/>
220
+ </div>
221
+ </div>
222
+ <?php
223
+ }
224
+
225
+ public function getPageUrl($screen)
226
+ {
227
+ return isset($this->_pages[$screen]['url'])
228
+ ? $this->_pages[$screen]['url']
229
+ : null;
230
+ }
231
+ }
232
+
admin/pages/additionally.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The page Settings.
5
+ *
6
+ * @since 1.0.0
7
+ */
8
+ class WbcrClr_AdditionallyPage extends WbcrClr_Page {
9
+
10
+ /**
11
+ * The id of the page in the admin menu.
12
+ *
13
+ * Mainly used to navigate between pages.
14
+ * @see FactoryPages321_AdminPage
15
+ *
16
+ * @since 1.0.0
17
+ * @var string
18
+ */
19
+ public $id = "additionally";
20
+
21
+ public function __construct(Factory325_Plugin $plugin)
22
+ {
23
+ parent::__construct($plugin);
24
+
25
+ $this->menuTitle = __('Advanced', 'clearfy');
26
+ }
27
+
28
+ /**
29
+ * Shows the description above the options.
30
+ *
31
+ * @since 1.0.0
32
+ * @return void
33
+ */
34
+ public function _showHeader()
35
+ {
36
+ ?>
37
+ <div class="wbcr-clearfy-header">
38
+ <?php _e('This page contains additional settings, usually not listed in the recommended list.', 'clearfy') ?>
39
+ </div>
40
+ <?php
41
+ }
42
+
43
+ /**
44
+ * Permalinks options.
45
+ *
46
+ * @since 1.0.0
47
+ * @return mixed[]
48
+ */
49
+ public function getOptions()
50
+ {
51
+ $options = array();
52
+
53
+ $options[] = array(
54
+ 'type' => 'html',
55
+ 'html' => array($this, '_showHeader')
56
+ );
57
+
58
+ $options[] = array(
59
+ 'type' => 'checkbox',
60
+ 'way' => 'buttons',
61
+ 'name' => 'disable_feed',
62
+ 'title' => __('Disable RSS feeds', 'clearfy'),
63
+ 'hint' => __('By default, WordPress generates all types of different RSS feeds for your site. While RSS feeds can be useful if you are running a blog, businesses might not always utilize these. Not every site out there has a blog.', 'clearfy') . '<br><b>Clearfy: </b>' . sprintf(__('Removes a link to the RSS-feed from the %s section, closes and puts the redirect from all RSS-feeds.', 'clearfy'), '&lt;head&gt;'),
64
+ 'default' => false
65
+ );
66
+
67
+ $options[] = array(
68
+ 'type' => 'checkbox',
69
+ 'way' => 'buttons',
70
+ 'name' => 'remove_url_from_comment_form',
71
+ 'title' => __('Remove field "site" in comment form', 'clearfy'),
72
+ 'hint' => __('Tired of spam in the comments? Do visitors leave "blank" comments for the sake of a link to their site?', 'clearfy') . '<br><b>Clearfy: </b>' . __('Removes the "Site" field from the comment form.', 'clearfy') . '<br>--<br><span style="color:#dd2b19"> *' . __('Works with the standard comment form, if the form is manually written in your theme-it probably will not work!', 'clearfy') . '</span>',
73
+ 'default' => false
74
+ );
75
+
76
+ $options[] = array(
77
+ 'type' => 'checkbox',
78
+ 'way' => 'buttons',
79
+ 'name' => 'remove_unnecessary_link_admin_bar',
80
+ 'title' => __('Removes links to wordpress.org site from the admin bar', 'clearfy'),
81
+ 'hint' => __('The first item in the toolbar goes wordpress logo and external links to wordpress.org, WP forums and documentation.', 'clearfy') . '<br><b>Clearfy</b>: ' . __('Removes all links to wordpress.org from the toolbar.', 'clearfy'),
82
+ 'default' => false
83
+ );
84
+
85
+ $options[] = array(
86
+ 'type' => 'html',
87
+ 'html' => '<div class="wbcr-clearfy-group-header">' . '<strong>' . __('Revisions', 'clearfy') . '</strong>' . '<p>' . __('Editorial (or revision) in WordPress are long-standing. They allow you to save a backup copy of the record or page whenever a change is made, and then view all versions with the ability to restore any of them.', 'clearfy') . '</p>' . '</div>'
88
+ );
89
+
90
+ $options[] = array(
91
+ 'type' => 'checkbox',
92
+ 'way' => 'buttons',
93
+ 'name' => 'revisions_disable',
94
+ 'title' => __('Disable revision', 'clearfy'),
95
+ 'default' => false
96
+ );
97
+
98
+ $check_config_revisions = file_get_contents(ABSPATH . '/wp-config.php');
99
+ $is_use_revision_constants = false;
100
+ if( !empty($check_config_revisions) && preg_match('/define(.+?)WP_POST_REVISIONS/', $check_config_revisions) ) {
101
+ $is_use_revision_constants = true;
102
+ }
103
+
104
+ $options[] = array(
105
+ 'type' => 'integer',
106
+ 'name' => 'revision_limit',
107
+ 'title' => __('Limit Post Revisions', 'clearfy'),
108
+ 'hint' => __('WordPress automatically saves revisions when you are working on posts and pages. These can begin to add up pretty quick. By default, there is no limit in place. We have seen posts with over 1,000 revisions. Multiply this by 50 pages and suddenly you have over 50,000 revisions sitting in your database. The problem with this is that you will most likely never use them and they can start slowing down your database as well as using disk space.
109
+ So we recommend either disabling or limiting your revisions. ', 'clearfy') . ($is_use_revision_constants
110
+ ? '<br>--<br><span style="color:#dd2b19">' . __('Warning! In the wp-config.php file, a constant WP_POST_REVISIONS is found, it determines the number of revisions. Delete it so you can change this value through the admin panel.', 'clearfy') . ' </span>'
111
+ : ''),
112
+ 'default' => ''
113
+ );
114
+
115
+ $options[] = array(
116
+ 'type' => 'separator',
117
+ 'cssClass' => 'factory-separator-dashed'
118
+ );
119
+
120
+ $options[] = array(
121
+ 'type' => 'html',
122
+ 'html' => array($this, '_showFormButton')
123
+ );
124
+
125
+ $formOptions = array();
126
+
127
+ $formOptions[] = array(
128
+ 'type' => 'form-group',
129
+ 'items' => $options,
130
+ //'cssClass' => 'postbox'
131
+ );
132
+
133
+ return apply_filters('wbcr_clr_general_form_options', $formOptions);
134
+ }
135
+ }
136
+
137
+ FactoryPages321::register($wbcr_clearfy_plugin, 'WbcrClr_AdditionallyPage');
admin/pages/defence.php ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The page Settings.
5
+ *
6
+ * @since 1.0.0
7
+ */
8
+ class WbcrClr_DefencePage extends WbcrClr_Page {
9
+
10
+ /**
11
+ * The id of the page in the admin menu.
12
+ *
13
+ * Mainly used to navigate between pages.
14
+ * @see FactoryPages321_AdminPage
15
+ *
16
+ * @since 1.0.0
17
+ * @var string
18
+ */
19
+ public $id = "defence";
20
+
21
+ public function __construct(Factory325_Plugin $plugin)
22
+ {
23
+ parent::__construct($plugin);
24
+
25
+ $this->menuTitle = __('Defence', 'clearfy');
26
+ }
27
+
28
+ /**
29
+ * Shows the description above the options.
30
+ *
31
+ * @since 1.0.0
32
+ * @return void
33
+ */
34
+ public function _showHeader()
35
+ {
36
+ ?>
37
+ <div class="wbcr-clearfy-header">
38
+ <?php _e('This page contains the security configuration settings for your site.', 'clearfy') ?>
39
+ </div>
40
+ <?php
41
+ }
42
+
43
+ /**
44
+ * Permalinks options.
45
+ *
46
+ * @since 1.0.0
47
+ * @return mixed[]
48
+ */
49
+ public function getOptions()
50
+ {
51
+ $options = array();
52
+
53
+ $options[] = array(
54
+ 'type' => 'html',
55
+ 'html' => array($this, '_showHeader')
56
+ );
57
+
58
+ $options[] = array(
59
+ 'type' => 'checkbox',
60
+ 'way' => 'buttons',
61
+ 'name' => 'remove_meta_generator',
62
+ 'title' => __('Remove meta generator', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
63
+ 'hint' => __('Allows attacker to learn the version of WP installed on the site. This meta tag has no useful function.', 'clearfy') . '<br><b>Clearfy: </b>' . sprintf(__('Removes the meta tag from the %s section', 'clearfy'), '&lt;head&gt;'),
64
+ 'default' => false
65
+ );
66
+
67
+ $options[] = array(
68
+ 'type' => 'checkbox',
69
+ 'way' => 'buttons',
70
+ 'name' => 'protect_author_get',
71
+ 'title' => __('Hide author login', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
72
+ 'hint' => __('An attacker can find out the author\'s login, using a similar request to get your site. mysite.com/?author=1', 'clearfy') . '<br><b>Clearfy: </b>' . __('Sets the redirect to exclude the possibility of obtaining a login.', 'clearfy'),
73
+ 'default' => false
74
+ );
75
+
76
+ $options[] = array(
77
+ 'type' => 'checkbox',
78
+ 'way' => 'buttons',
79
+ 'name' => 'change_login_errors',
80
+ 'title' => __('Hide errors when logging into the site', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
81
+ 'hint' => __('WP by default shows whether you entered a wrong login or incorrect password, which allows attackers to understand if there is a certain user on the site, and then start searching through the passwords.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Changes in the text of the error so that attackers could not find the login.', 'clearfy'),
82
+ 'default' => false
83
+ );
84
+
85
+ $options[] = array(
86
+ 'type' => 'checkbox',
87
+ 'way' => 'buttons',
88
+ 'name' => 'remove_x_pingback',
89
+ 'title' => __('Disable X-Pingback', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
90
+ 'hint' => __('A pingback is basically an automated comment that gets created when another blog links to you. A self-pingback is created when you link to an article within your own blog. Pingbacks are essentially nothing more than spam and simply waste resources.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Removes the server responses a reference to the xmlrpc file.', 'clearfy'),
91
+ 'default' => false
92
+ );
93
+
94
+ $options[] = array(
95
+ 'type' => 'separator',
96
+ 'cssClass' => 'factory-separator-dashed'
97
+ );
98
+
99
+ $options[] = array(
100
+ 'type' => 'html',
101
+ 'html' => array($this, '_showFormButton')
102
+ );
103
+
104
+ $formOptions = array();
105
+
106
+ $formOptions[] = array(
107
+ 'type' => 'form-group',
108
+ 'items' => $options,
109
+ //'cssClass' => 'postbox'
110
+ );
111
+
112
+ return apply_filters('wbcr_clr_general_form_options', $formOptions);
113
+ }
114
+ }
115
+
116
+ FactoryPages321::register($wbcr_clearfy_plugin, 'WbcrClr_DefencePage');
admin/pages/double-pages.php ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The page Settings.
5
+ *
6
+ * @since 1.0.0
7
+ */
8
+ class WbcrClr_DoublePagesPage extends WbcrClr_Page {
9
+
10
+ /**
11
+ * The id of the page in the admin menu.
12
+ *
13
+ * Mainly used to navigate between pages.
14
+ * @see FactoryPages321_AdminPage
15
+ *
16
+ * @since 1.0.0
17
+ * @var string
18
+ */
19
+ public $id = "double_pages";
20
+
21
+ public function __construct(Factory325_Plugin $plugin)
22
+ {
23
+ parent::__construct($plugin);
24
+
25
+ $this->menuTitle = __('Duplicate pages', 'clearfy');
26
+ }
27
+
28
+ /**
29
+ * Shows the description above the options.
30
+ *
31
+ * @since 1.0.0
32
+ * @return void
33
+ */
34
+ public function _showHeader()
35
+ {
36
+ ?>
37
+ <div class="wbcr-clearfy-header">
38
+ <?php _e('This page contains settings for setting up duplicate pages.', 'clearfy') ?>
39
+ </div>
40
+ <?php
41
+ }
42
+
43
+ /**
44
+ * Permalinks options.
45
+ *
46
+ * @since 1.0.0
47
+ * @return mixed[]
48
+ */
49
+ public function getOptions()
50
+ {
51
+ $options = array();
52
+
53
+ $options[] = array(
54
+ 'type' => 'html',
55
+ 'html' => array($this, '_showHeader')
56
+ );
57
+
58
+ $options[] = array(
59
+ 'type' => 'checkbox',
60
+ 'way' => 'buttons',
61
+ 'name' => 'redirect_archives_date',
62
+ 'title' => __('Remove archives date', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
63
+ 'hint' => sprintf(__('Many duplicates in date archives. Imagine, in addition, that your article will be displayed in the main and in the category, you will still receive at least 3 duplicates: in archives by year, month and date, for example %s.', 'clearfy'), '/2016/2016/02 / /2016/02/15') . '<br><b>Clearfy: </b>' . __('Removes all pages with the date archives and puts a redirect.', 'clearfy'),
64
+ 'default' => false
65
+ );
66
+
67
+ $options[] = array(
68
+ 'type' => 'checkbox',
69
+ 'way' => 'buttons',
70
+ 'name' => 'redirect_archives_author',
71
+ 'title' => __('Remove author archives ', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
72
+ 'hint' => sprintf(__('If the site is only filled by you - a mandatory item. Allows you to get rid of duplicates on user archives, for example %s.', 'clearfy'), '/author/admin/') . '<br><b>Clearfy: </b>' . __('Removes all pages with the author archives and puts a redirect.', 'clearfy'),
73
+ 'default' => false
74
+ );
75
+
76
+ $options[] = array(
77
+ 'type' => 'checkbox',
78
+ 'way' => 'buttons',
79
+ 'name' => 'redirect_archives_tag',
80
+ 'title' => __('Remove archives tag', 'clearfy'),
81
+ 'hint' => __('If you use tags only for the block Similar records, or do not use them at all - it will be more correct to close them to avoid duplicates.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Removes all pages with the tag archives and puts a redirect.', 'clearfy'),
82
+ 'default' => false
83
+ );
84
+
85
+ $options[] = array(
86
+ 'type' => 'checkbox',
87
+ 'way' => 'buttons',
88
+ 'name' => 'attachment_pages_redirect',
89
+ 'title' => __('Remove attachment pages', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
90
+ 'hint' => __('Every of the pictures has its own page on the site. Such pages are successfully indexed and create duplicates. The site can have thousands of same-type attachment pages.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Removes attachment pages and puts a redirect.', 'clearfy'),
91
+ 'default' => false
92
+ );
93
+
94
+ $options[] = array(
95
+ 'type' => 'checkbox',
96
+ 'way' => 'buttons',
97
+ 'name' => 'remove_single_pagination_duplicate',
98
+ 'title' => __('Remove post pagination', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
99
+ 'hint' => sprintf(__('In WordPress, any post can be divided into parts (pages), each part will have its own address. But this functionality is rarely used, but it can create trouble for you. For example, you can add a number to the address of any entry of your blog, %s - the post itself will open, which will be a duplicate. You can substitute any number.', 'clearfy'), '/privet-mir/1/') . '<br><b>Clearfy: </b>' . sprintf(__('Removes the pagination from the post and puts a redirect. Example: %s', 'clearfy'), '/post-name/number'),
100
+ 'default' => false
101
+ );
102
+
103
+ $options[] = array(
104
+ 'type' => 'checkbox',
105
+ 'way' => 'buttons',
106
+ 'name' => 'remove_replytocom',
107
+ 'title' => __('Remove ?replytocom', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
108
+ 'hint' => sprintf(__('WordPress adds %s to the link "Reply" in the comments, if you use hierarchical comments.', 'clearfy'), '?replytocom') . '<br><b>Clearfy: </b>' . __('?relpytocom remove and and puts a redirect.', 'clearfy'),
109
+ 'default' => false
110
+ );
111
+
112
+ $options[] = array(
113
+ 'type' => 'separator',
114
+ 'cssClass' => 'factory-separator-dashed'
115
+ );
116
+
117
+ $options[] = array(
118
+ 'type' => 'html',
119
+ 'html' => array($this, '_showFormButton')
120
+ );
121
+
122
+ $formOptions = array();
123
+
124
+ $formOptions[] = array(
125
+ 'type' => 'form-group',
126
+ 'items' => $options,
127
+ //'cssClass' => 'postbox'
128
+ );
129
+
130
+ return apply_filters('wbcr_clr_general_form_options', $formOptions);
131
+ }
132
+ }
133
+
134
+ FactoryPages321::register($wbcr_clearfy_plugin, 'WbcrClr_DoublePagesPage');
admin/pages/general.php ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The page Settings.
5
+ *
6
+ * @since 1.0.0
7
+ */
8
+ class WbcrClr_GeneralPage extends WbcrClr_Page {
9
+
10
+ /**
11
+ * The id of the page in the admin menu.
12
+ *
13
+ * Mainly used to navigate between pages.
14
+ * @see FactoryPages321_AdminPage
15
+ *
16
+ * @since 1.0.0
17
+ * @var string
18
+ */
19
+ public $id = "general";
20
+
21
+ //public $internal = false;
22
+
23
+ public function __construct(Factory325_Plugin $plugin)
24
+ {
25
+ parent::__construct($plugin);
26
+
27
+ $this->menuTitle = __('General', 'clearfy');
28
+ }
29
+
30
+ /**
31
+ * Shows the description above the options.
32
+ *
33
+ * @since 1.0.0
34
+ * @return void
35
+ */
36
+ public function _showHeader()
37
+ {
38
+ ?>
39
+ <div class="wbcr-clearfy-header">
40
+ <?php _e('On this settings page, you can optimize the source code of the page.', 'clearfy') ?>
41
+ </div>
42
+ <?php
43
+ }
44
+
45
+ /**
46
+ * Permalinks options.
47
+ *
48
+ * @since 1.0.0
49
+ * @return mixed[]
50
+ */
51
+ public function getOptions()
52
+ {
53
+ $options = array();
54
+
55
+ $options[] = array(
56
+ 'type' => 'html',
57
+ 'html' => array($this, '_showHeader')
58
+ );
59
+
60
+ $options[] = array(
61
+ 'type' => 'checkbox',
62
+ 'way' => 'buttons',
63
+ 'name' => 'disable_json_rest_api',
64
+ 'title' => __('Remove REST API Links', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
65
+ 'hint' => __('The WordPress REST API provides API endpoints for WordPress data types that allow developers to interact with sites remotely by sending and receiving JSON (JavaScript Object Notation) objects. However, a lot of sites don’t use this, and therefore in most cases, it is just unnecessary code.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Removes REST API link tag from the front end and the REST API header link from page requests.', 'clearfy'),
66
+ 'default' => false
67
+ );
68
+
69
+ $options[] = array(
70
+ 'type' => 'checkbox',
71
+ 'way' => 'buttons',
72
+ 'name' => 'disable_emoji',
73
+ 'title' => __('Disable Emojis', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
74
+ 'hint' => __('Emojis are fun and all, but if you are aren’t using them they actually load a JavaScript file (wp-emoji-release.min.js) on every page of your website. For a lot of businesses, this is not needed and simply adds load time to your site. So we recommend disabling this.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Removes WordPress Emojis JavaScript file (wp-emoji-release.min.js).', 'clearfy'),
75
+ 'default' => false
76
+ );
77
+
78
+ $options[] = array(
79
+ 'type' => 'checkbox',
80
+ 'way' => 'buttons',
81
+ 'name' => 'remove_jquery_migrate',
82
+ 'title' => __('Remove jQuery Migrate', 'clearfy'),
83
+ 'hint' => __('They started adding jQuery migrate in WordPress 3.6. Most up-to-date frontend code and plugins don’t require jquery-migrate.min.js. In most cases, this simply adds unnecessary load to your site. You can see this running if you launch Chrome Devtools console.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Removes jQuery Migrate JavaScript file (jquery-migrate.min.js).', 'clearfy') . '<br>--<br><span style="color:#dd2b19">' . __('Warning! If there is a broke on your site, disable this option!', 'clearfy') . '</span>',
84
+ 'default' => false
85
+ );
86
+
87
+ $options[] = array(
88
+ 'type' => 'checkbox',
89
+ 'way' => 'buttons',
90
+ 'name' => 'disable_embeds',
91
+ 'title' => __('Disable Embeds', 'clearfy'),
92
+ 'hint' => __('Embeds were released with WordPress 4.4. This is basically the magic that auto converts your YouTube videos, Tweets, and URLs into pretty previews while you are editing. However, this actually loads a JavaScript file (wp-embed.min.js) on every page of your website. If you don’t care about the auto converting preview (which we don’t), you can disable this across your site.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Removes WordPress Embed JavaScript file (wp-embed.min.js)', 'clearfy'),
93
+ 'default' => false
94
+ );
95
+
96
+ $options[] = array(
97
+ 'type' => 'checkbox',
98
+ 'way' => 'buttons',
99
+ 'name' => 'remove_dns_prefetch',
100
+ 'title' => __('Remove dns-prefetch', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
101
+ 'hint' => sprintf(__('Since version 4.6.1 in WordPress there are new links in the section %s this type of: ', 'clearfy'), '&lt;head&gt;') . '<code>&lt;link rel="dns-prefetch" href="//s.w.org"&gt;</code><br><b>Clearfy: </b>' . sprintf(__('Removes dns-prefetch links from the %s section', 'clearfy'), '&lt;head&gt;'),
102
+ 'default' => false
103
+ );
104
+ $options[] = array(
105
+ 'type' => 'checkbox',
106
+ 'way' => 'buttons',
107
+ 'name' => 'remove_rsd_link',
108
+ 'title' => __('Remove RSD Link', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
109
+ 'hint' => __('The above link is used by blog clients. If you edit your site from your browser then you don’t need this. It is also used by some 3rd party applications that utilize XML-RPC requests. In most cases, this is just unnecessary code.', 'clearfy') . '<br><code>&lt;link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://yourdomain.com/xmlrpc.php?rsd"&gt;</code><br><b>Clearfy: </b>' . __('Remove RSD (Real Simple Discovery) link tag.', 'clearfy'),
110
+ 'default' => false
111
+ );
112
+
113
+ $options[] = array(
114
+ 'type' => 'checkbox',
115
+ 'way' => 'buttons',
116
+ 'name' => 'remove_wlw_link',
117
+ 'title' => __('Remove wlwmanifest Link', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
118
+ 'hint' => '<code>&lt;link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://yourdomain.com/wp-includes/wlwmanifest.xml"&gt;</code><br>' . __('This link is actually used by Windows Live Writer. If you don’t know use Windows Live Writer, which we are guessing you don’t, this is just unnecessary code.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Remove wlwmanifest (Windows Live Writer) link tag.', 'clearfy'),
119
+ 'default' => false
120
+ );
121
+
122
+ $options[] = array(
123
+ 'type' => 'checkbox',
124
+ 'way' => 'buttons',
125
+ 'name' => 'remove_shortlink_link',
126
+ 'title' => __('Remove Shortlink', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
127
+ 'hint' => sprintf(__('By default, the following tag shows up in every WordPress install. %s This is used for a shortlink to your pages and posts. However, if you are already using pretty permalinks, such as domain.com/post, then there is no reason to keep this, it is just unnecessary code.', 'clearfy'), '<br><code>&lt;link rel="shortlink" href="https://domain.com?p=712"&gt;</code><br>') . '<br><b>Clearfy: </b>' . __('Remove Shortlink link tag.', 'clearfy'),
128
+ 'default' => false
129
+ );
130
+
131
+ $options[] = array(
132
+ 'type' => 'checkbox',
133
+ 'way' => 'buttons',
134
+ 'name' => 'remove_adjacent_posts_link',
135
+ 'title' => __('Remove links to previous, next post', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
136
+ 'hint' => __('If you use Wordpress as a CMS, then you can delete these links, they can only come in handy for a blog.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Remove the previous and next post links within the wp_head of your wordpress theme.', 'clearfy'),
137
+ 'default' => false
138
+ );
139
+
140
+ $options[] = array(
141
+ 'type' => 'checkbox',
142
+ 'way' => 'buttons',
143
+ 'name' => 'remove_recent_comments_style',
144
+ 'title' => __('Remove .recentcomments styles', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
145
+ 'hint' => __('WP by default for the widget "recent comments" prescribes in the code styles that are almost impossible to change, because to them apply! important.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Removes .recentcomments styles from head section.', 'clearfy'),
146
+ 'default' => false
147
+ );
148
+
149
+ $options[] = array(
150
+ 'type' => 'checkbox',
151
+ 'way' => 'buttons',
152
+ 'name' => 'html_minify',
153
+ 'title' => __('HTML minify', 'clearfy'),
154
+ 'hint' => __('Reduces the weight of the page by removing line breaks, tabs, spaces, etc.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Minify pages.', 'clearfy'),
155
+ 'default' => false
156
+ );
157
+
158
+ $options[] = array(
159
+ 'type' => 'separator',
160
+ 'cssClass' => 'factory-separator-dashed'
161
+ );
162
+
163
+ $options[] = array(
164
+ 'type' => 'html',
165
+ 'html' => array($this, '_showFormButton')
166
+ );
167
+
168
+ $formOptions = array();
169
+
170
+ $formOptions[] = array(
171
+ 'type' => 'form-group',
172
+ 'items' => $options,
173
+ //'cssClass' => 'postbox'
174
+ );
175
+
176
+ return apply_filters('wbcr_clr_general_form_options', $formOptions);
177
+ }
178
+ }
179
+
180
+ FactoryPages321::register($wbcr_clearfy_plugin, 'WbcrClr_GeneralPage');
admin/pages/quick-start.php ADDED
@@ -0,0 +1,216 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The page Settings.
5
+ *
6
+ * @since 1.0.0
7
+ */
8
+ class WbcrClr_QuickStartPage extends WbcrClr_Page {
9
+
10
+ /**
11
+ * The id of the page in the admin menu.
12
+ *
13
+ * Mainly used to navigate between pages.
14
+ * @see FactoryPages321_AdminPage
15
+ *
16
+ * @since 1.0.0
17
+ * @var string
18
+ */
19
+ public $id = "quick_start";
20
+
21
+ public $internal = false;
22
+
23
+ public function __construct(Factory325_Plugin $plugin)
24
+ {
25
+ parent::__construct($plugin);
26
+
27
+ $this->menuTitle = __('Clearfy - disable unused features', 'clearfy');
28
+ }
29
+
30
+ /**
31
+ * Requests assets (js and css) for the page.
32
+ *
33
+ * @see FactoryPages321_AdminPage
34
+ *
35
+ * @since 1.0.0
36
+ * @return void
37
+ */
38
+ public function assets($scripts, $styles)
39
+ {
40
+ parent::assets($scripts, $styles);
41
+
42
+ $this->scripts->add(WBCR_CLR_PLUGIN_URL . '/admin/assets/js/general.010000.js');
43
+
44
+ $params = array(
45
+ 'ajaxurl' => admin_url('admin-ajax.php'),
46
+ 'ajax_nonce' => wp_create_nonce('wbcr_clearfy_ajax_configurate_nonce'),
47
+ );
48
+ wp_localize_script('jquery', 'wbcr_clearfy_ajax', $params);
49
+ }
50
+
51
+ /**
52
+ * Shows the description above the options.
53
+ *
54
+ * @since 1.0.0
55
+ * @return void
56
+ */
57
+ public function _showHeader()
58
+ {
59
+ ?>
60
+ <div class="wbcr-clearfy-header">
61
+ <?php _e('On this page you can quickly configure the plug-in without going into details.', 'clearfy') ?>
62
+ </div>
63
+ <?php
64
+ }
65
+
66
+ /**
67
+ * Collects error and system error data
68
+ * @return string
69
+ */
70
+ public function getDebugReport()
71
+ {
72
+ $run_time = number_format(microtime(true) - HMW_REQUEST_TIME, 3);
73
+ $pps = number_format(1 / $run_time, 0);
74
+ $memory_avail = ini_get('memory_limit');
75
+ $memory_used = number_format(memory_get_usage(true) / (1024 * 1024), 2);
76
+ $memory_peak = number_format(memory_get_peak_usage(true) / (1024 * 1024), 2);
77
+
78
+ $debug = '';
79
+ if( PHP_SAPI == 'cli' ) {
80
+ // if run for command line, display some info
81
+ $debug = PHP_EOL . "======================================================================================" . PHP_EOL . " Config: php " . phpversion() . " " . php_sapi_name() . " / zend engine " . zend_version() . PHP_EOL . " Load: {$memory_avail} (avail) / {$memory_used}M (used) / {$memory_peak}M (peak)" . " | Time: {$run_time}s | {$pps} req/sec" . PHP_EOL . " | Server Timezone: " . date_default_timezone_get() . " | Agent: CLI" . PHP_EOL . "======================================================================================" . PHP_EOL;
82
+ } else {
83
+ // if not run from command line, only display if debug is enabled
84
+ $debug = "" //<hr />"
85
+ . "<div style=\"text-align: left;\">" . "<hr />" . " Config: " . "<br />" . " &nbsp;&nbsp; | php " . phpversion() . " " . php_sapi_name() . " / zend engine " . zend_version() . "<br />" . " &nbsp;&nbsp; | Server Timezone: " . date_default_timezone_get() . "<br />" . " Load: " . "<br />" . " &nbsp;&nbsp; | Memory: {$memory_avail} (avail) / {$memory_used}M (used) / {$memory_peak}M (peak)" . "<br />" . " &nbsp;&nbsp; | Time: {$run_time}s &nbsp;&nbsp; | {$pps} req/sec" . "<br />" . "Url: " . "<br />" . " &nbsp;&nbsp; |" . "<br />" . " &nbsp;&nbsp; | Agent: " . (@$_SERVER["HTTP_USER_AGENT"]) . "<br />" . "Version Control: " . "<br />" . " &nbsp;&nbsp; | " . str_replace("\n", '<br />&nbsp;&nbsp; | ', shell_exec('svn info')) . "</div>" . "<br />";
86
+ }
87
+
88
+ $debug .= "Plugins<br>";
89
+ $debug .= "=====================<br>";
90
+
91
+ $plugins = get_plugins();
92
+
93
+ foreach($plugins as $path => $plugin) {
94
+ if( is_plugin_active($path) ) {
95
+ $debug .= $plugin['Name'] . '<br>';
96
+ }
97
+ }
98
+
99
+ return $debug;
100
+ }
101
+
102
+ /**
103
+ * Generates a report about the system and plug-in error
104
+ * @return string
105
+ */
106
+ public function gererate_reportAction()
107
+ {
108
+ require_once(WBCR_CLR_PLUGIN_DIR . '/includes/class.zip-archive.php');
109
+
110
+ $reposts_dir = WBCR_CLR_PLUGIN_DIR . '/reports';
111
+ $reports_temp = $reposts_dir . '/temp';
112
+
113
+ if( !file_exists($reposts_dir) ) {
114
+ mkdir($reposts_dir, 0777, true);
115
+ }
116
+
117
+ if( !file_exists($reports_temp) ) {
118
+ mkdir($reports_temp, 0777, true);
119
+ }
120
+
121
+ $file = fopen($reports_temp . '/site-info.html', 'w+');
122
+ fputs($file, $this->getDebugReport());
123
+ fclose($file);
124
+
125
+ $download_file_name = 'webcraftic-clearfy-report-' . date('Y.m.d-H.i.s') . '.zip';
126
+ $download_file_path = WBCR_CLR_PLUGIN_DIR . '/reports/' . $download_file_name;
127
+
128
+ Wbcr_ExtendedZip::zipTree(WBCR_CLR_PLUGIN_DIR . '/reports/temp', $download_file_path, ZipArchive::CREATE);
129
+
130
+ array_map('unlink', glob(WBCR_CLR_PLUGIN_DIR . "/reports/temp/*"));
131
+
132
+ wp_redirect(WBCR_CLR_PLUGIN_URL . '/reports/' . $download_file_name);
133
+ exit;
134
+ }
135
+
136
+ public function selected($mode_name)
137
+ {
138
+ $get_mode = get_option('wbcr-clearfy_quick_mode');
139
+
140
+ if( $get_mode == 'reset' || $mode_name == 'reset' ) {
141
+ return ' wbcr-clearfy-mode-reset';
142
+ }
143
+
144
+ return $get_mode == $mode_name
145
+ ? ' wbcr-clearfy-active'
146
+ : '';
147
+ }
148
+
149
+
150
+ public function showPageContent()
151
+ {
152
+ global $wbcr_clearfy_plugin;
153
+
154
+ $allow_mods = array(
155
+ 'recommended' => __('Recommended Mode', 'clearfy'),
156
+ 'clear_code' => __('Code Clearing', 'clearfy'),
157
+ 'defence' => __('Security', 'clearfy'),
158
+ 'seo_optimize' => __('Seo optimization', 'clearfy'),
159
+ 'reset' => __('Reset all settings', 'clearfy')
160
+ );
161
+ ?>
162
+ <div class="wbcr-clr-options factory-bootstrap-329 factory-fontawesome-320">
163
+ <div class="row">
164
+ <div class="col-sm-6">
165
+ <div class="wbcr-clearfy-switch-success-message">
166
+ <?php _e('Settings successfully updated!', 'clearfy') ?>
167
+ </div>
168
+ <div class="wbcr-clearfy-switch-error-message">
169
+ <?php _e('During the setup, an unknown error occurred, please try again or contact the plug-in support.', 'clearfy') ?>
170
+ </div>
171
+ <div id="wbcr-clearfy-quick-mode-board" class="wbcr-clearfy-board">
172
+ <p><?php _e('This is the quick plug-in setup mode. Use it if you do not want to understand the settings or do not understand what settings you need to use.', 'clearfy') ?></p>
173
+ <h4><?php _e('Select mode', 'clearfy') ?></h4>
174
+
175
+ <p><?php _e('After selecting the mode, the plug-in automatically activates the necessary settings for the mode.', 'clearfy') ?></p>
176
+
177
+ <div class="row">
178
+ <?php foreach($allow_mods as $mode_name => $mode_title): ?>
179
+ <div class="col-sm-4">
180
+ <div class="wbcr-clearfy-switch<?= $this->selected($mode_name) ?>" data-mode="<?= $mode_name ?>">
181
+ <?= $mode_title ?>
182
+ <div class="wbcr-clearfy-switch-confirmation">
183
+ <button class="wbcr-clearfy-confirm-button-accept"><?php _e('Ok', 'clearfy'); ?></button>
184
+ <button class="wbcr-clearfy-confirm-button-cancel"><?php _e('Cancel', 'clearfy'); ?></button>
185
+ </div>
186
+ </div>
187
+ </div>
188
+ <?php endforeach; ?>
189
+ </div>
190
+ </div>
191
+ </div>
192
+ <div class="col-sm-4">
193
+ <div class="wbcr-clearfy-troubleshooting-board wbcr-clearfy-board">
194
+ <p><?php _e('If you faced with any issues, please follow the steps below to get quickly quality support:', 'clearfy') ?></p>
195
+ <ol>
196
+ <li>
197
+ <p><?php _e('Generate a debug report which will contains inforamtion about your configuratin and installed plugins', 'clearfy') ?></p>
198
+
199
+ <p>
200
+ <a href="<?= admin_url('options-general.php?page=quick_start-' . $wbcr_clearfy_plugin->pluginName . '&action=gererate_report'); ?>" class="button"><?php _e('Generate Debug Report', 'clearfy') ?></a>
201
+ </p>
202
+ </li>
203
+ <li>
204
+ <p><?php _e('Send a message to <b>wordpress.webraftic@gmail.com</b> include the debug report into the message body.', 'clearfy'); ?></p>
205
+ </li>
206
+ </ol>
207
+ <p style="margin-bottom: 0px;"><?php _e('We guarantee to respond you within 7 business day.', 'clearfy') ?></p>
208
+ </div>
209
+ </div>
210
+ </div>
211
+ </div>
212
+ <?php
213
+ }
214
+ }
215
+
216
+ FactoryPages321::register($wbcr_clearfy_plugin, 'WbcrClr_QuickStartPage');
admin/pages/seo.php ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The page Settings.
5
+ *
6
+ * @since 1.0.0
7
+ */
8
+ class WbcrClr_SeoPage extends WbcrClr_Page {
9
+
10
+ /**
11
+ * The id of the page in the admin menu.
12
+ *
13
+ * Mainly used to navigate between pages.
14
+ * @see FactoryPages321_AdminPage
15
+ *
16
+ * @since 1.0.0
17
+ * @var string
18
+ */
19
+ public $id = "seo";
20
+
21
+ public function __construct(Factory325_Plugin $plugin)
22
+ {
23
+ parent::__construct($plugin);
24
+
25
+ $this->menuTitle = __('SEO', 'clearfy');
26
+ }
27
+
28
+ /**
29
+ * Shows the description above the options.
30
+ *
31
+ * @since 1.0.0
32
+ * @return void
33
+ */
34
+ public function _showHeader()
35
+ {
36
+ ?>
37
+ <div class="wbcr-clearfy-header">
38
+ <?php _e('This page contains important settings for SEO optimization.', 'clearfy') ?>
39
+ </div>
40
+ <?php
41
+ }
42
+
43
+ /**
44
+ * Permalinks options.
45
+ *
46
+ * @since 1.0.0
47
+ * @return mixed[]
48
+ */
49
+ public function getOptions()
50
+ {
51
+ $options = array();
52
+
53
+ $options[] = array(
54
+ 'type' => 'html',
55
+ 'html' => array($this, '_showHeader')
56
+ );
57
+
58
+ $options[] = array(
59
+ 'type' => 'checkbox',
60
+ 'way' => 'buttons',
61
+ 'name' => 'content_image_auto_alt',
62
+ 'title' => __('Automatically set the alt attribute', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
63
+ 'hint' => __('The alt attribute is mandatory, so most SEO experts say. If you missed or did not fill it at all, it will be automatically assigned and will be equal to the title of the article.', 'clearfy') . '<br><b>Clearfy: </b>' . sprintf(__('Replaces the %s, on attribute with an article name %s', 'clearfy'), '<code>&lt;img scr="" alt=""&gt;</code>', '<code>&lt;img scr="" alt="Hello world"&gt;</code>'),
64
+ 'default' => false
65
+ );
66
+
67
+ $options[] = array(
68
+ 'type' => 'checkbox',
69
+ 'way' => 'buttons',
70
+ 'name' => 'comment_text_convert_links_pseudo',
71
+ 'title' => __('Replace external links in comments on the JavaScript code', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
72
+ 'hint' => __('Superfluous external links from comments, which can be typed from a dozen and more for one article, do not bring anything good for promotion.', 'clearfy') . '<br><b>Clearfy: </b>' . sprintf(__('Replaces the links of this kind of %s, on links of this kind %s', 'clearfy'), '<code>&lt;a href="http://yourdomain.com" rel="nofollow"&gt;example&lt;/a&gt;</code>', '<code>&lt;span class="wbcr-clearfy-pseoudo-link" data-uri="http://yourdomain.com"&gt;example&lt;/span&gt;</code>'),
73
+ 'default' => false
74
+ );
75
+
76
+ $options[] = array(
77
+ 'type' => 'checkbox',
78
+ 'way' => 'buttons',
79
+ 'name' => 'pseudo_comment_author_link',
80
+ 'title' => __('Replace external links from comment authors on the JavaScript code', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
81
+ 'hint' => __('Up to 90 percent of comments in the blog can be left for the sake of an external link. Even nofollow from page weight loss here does not help.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Replaces the links of the authors of comments on the JavaScript code, it is impossible to distinguish it from usual links.', 'clearfy') . '<br>--<br><i>' . __('In some Wordpress topics this may not work.', 'clearfy') . '</i>',
82
+ 'default' => false
83
+ );
84
+
85
+ $options[] = array(
86
+ 'type' => 'checkbox',
87
+ 'way' => 'buttons',
88
+ 'name' => 'right_robots_txt',
89
+ 'title' => __('Create right robots.txt', 'clearfy'),
90
+ 'hint' => __('After installation, WP does not contain a robots.txt file and create it manually. We re-read about 30 different articles, instructions from Yandex and Google to create the perfect robots.txt', 'clearfy') . '<br><b>Clearfy: </b>' . __('Automatically creates the perfect robots.txt file', 'clearfy'),
91
+ 'default' => false,
92
+ 'eventsOn' => array(
93
+ 'show' => '#wbcr-clearfy-seo-robot-txt-group'
94
+ ),
95
+ 'eventsOff' => array(
96
+ 'hide' => '#wbcr-clearfy-seo-robot-txt-group'
97
+ ),
98
+ );
99
+
100
+ $options[] = array(
101
+ 'type' => 'div',
102
+ 'id' => 'wbcr-clearfy-seo-robot-txt-group',
103
+ 'items' => array(
104
+ array(
105
+ 'type' => 'textarea',
106
+ 'name' => 'robots_txt_text',
107
+ 'title' => __('You can edit the robots.txt file in the box below:', 'clearfy'),
108
+ 'default' => wbcr_clearfy_get_right_robot_txt(),
109
+ 'height' => '300'
110
+ )
111
+ )
112
+ );
113
+
114
+ $options[] = array(
115
+ 'type' => 'checkbox',
116
+ 'way' => 'buttons',
117
+ 'name' => 'redirect_from_http_to_https',
118
+ 'title' => __('Redirect Http to Https', 'clearfy'),
119
+ 'hint' => __('If your site uses an SSL certificate, check this box to enable redirection from http to https.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Puts the redirect from http to https.', 'clearfy') . '<br>--<br><span style="color:#dd2b19">' . __('* Warning! Before activation, make sure your site is open https.', 'clearfy') . '</span>',
120
+ 'default' => false
121
+ );
122
+
123
+ $options[] = array(
124
+ 'type' => 'html',
125
+ 'html' => '<div class="wbcr-clearfy-group-header">' . '<strong>' . __('Server headers and response', 'clearfy') . '</strong>' . '<p>' . __('WordPress does not know how to give the Last Modified header in the server\'s responses. You can do this using the settings below.', 'clearfy') . '</p>' . '</div>'
126
+ );
127
+
128
+ $options[] = array(
129
+ 'type' => 'separator',
130
+ 'cssClass' => 'factory-separator-dashed'
131
+ );
132
+
133
+ $options[] = array(
134
+ 'type' => 'checkbox',
135
+ 'way' => 'buttons',
136
+ 'name' => 'set_last_modified_headers',
137
+ 'title' => __('Automatically insert the Last Modified header', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
138
+ 'default' => false,
139
+ 'eventsOn' => array(
140
+ 'show' => '.factory-control-last_modified_exclude'
141
+ ),
142
+ 'eventsOff' => array(
143
+ 'hide' => '.factory-control-last_modified_exclude'
144
+ )
145
+ );
146
+
147
+ $options[] = array(
148
+ 'type' => 'textarea',
149
+ 'name' => 'last_modified_exclude',
150
+ 'height' => '120',
151
+ 'title' => __('Exclude pages:', 'clearfy'),
152
+ 'hint' => sprintf(__('You can specify a page mask, for example: %s or %s. All pages that contain the string will be excluded. Each exclude must begin with a new line.', 'clearfy'), '/s=', '/manager/'),
153
+ );
154
+
155
+ $options[] = array(
156
+ 'type' => 'checkbox',
157
+ 'way' => 'buttons',
158
+ 'name' => 'if_modified_since_headers',
159
+ 'title' => __('Return an If-Modified-Since responce', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
160
+ 'default' => false
161
+ );
162
+
163
+ $options[] = array(
164
+ 'type' => 'separator',
165
+ 'cssClass' => 'factory-separator-dashed'
166
+ );
167
+
168
+ $options[] = array(
169
+ 'type' => 'html',
170
+ 'html' => '<div class="wbcr-clearfy-group-header">' . '<strong>' . __('For the Yoast SEO plugin', 'clearfy') . '</strong>' . '<p>' . __('These settings will help you eliminate some problems associated with the popular Yoast SEO plugin', 'clearfy') . '</p>' . '</div>'
171
+ );
172
+
173
+ $options[] = array(
174
+ 'type' => 'separator',
175
+ 'cssClass' => 'factory-separator-dashed'
176
+ );
177
+
178
+ $options[] = array(
179
+ 'type' => 'checkbox',
180
+ 'way' => 'buttons',
181
+ 'name' => 'remove_last_item_breadcrumb_yoast',
182
+ 'title' => __('Remove duplicate names in breadcrumbs WP SEO by Yoast', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
183
+ 'hint' => __('The last element in the breadcrumbs in the Yoast SEO plugin duplicates the title of the article. Some SEO-specialists consider this duplication to be superfluous.', 'clearfy') . '<br><b>Clearfy: </b>' . __('Removes duplication of the name in the breadcrumbs of the WP SEO plugin from Yoast.', 'clearfy'),
184
+ 'default' => false
185
+ );
186
+
187
+ $options[] = array(
188
+ 'type' => 'checkbox',
189
+ 'way' => 'buttons',
190
+ 'name' => 'yoast_remove_image_from_xml_sitemap',
191
+ 'title' => sprintf(__('Remove the tag %s from XML site map', 'clearfy'), '&lt;image:image&gt;') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
192
+ 'hint' => __('Yandex.Webmaster swears on a standard XML card from the plugin Yoast, tk. it has a specific tag', 'clearfy') . '&lt;image:image&gt;<br><b>Clearfy: </b>' . sprintf(__('Remove the tag %s from XML site map of the plugin Yoast SEO.', 'clearfy'), '&lt;image:image&gt;') . '<br>--<br><span style="color:#dd2b19">' . __('Attention! After activation, turn off the site map and enable it back to regenerate it.', 'clearfy') . '</span>' . '<br><span style="color:#dd2b19">* ' . __('In older versions of Yoast SEO may not work - update the plugin Yoast', 'clearfy') . '</span>',
193
+ 'default' => false
194
+ );
195
+
196
+ $options[] = array(
197
+ 'type' => 'checkbox',
198
+ 'way' => 'buttons',
199
+ 'name' => 'yoast_remove_head_comment',
200
+ 'title' => sprintf(__('Remove comment from %s section', 'clearfy'), '&lt;head&gt;') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
201
+ 'hint' => sprintf(__('The Yoast SEO plugin displays a comment of the form %s in %s section', 'clearfy'), '&lt;!-- This site is optimized with the Yoast SEO plugin v3.1.1 - https://yoast.com/wordpress/plugins/seo/ --&gt;', '&lt;head&gt;') . '<br><b>Clearfy: </b>' . sprintf(__('Removes the Yoast SEO plugin comment of their section %s', 'clearfy'), '&lt;head&gt;'),
202
+ 'default' => false
203
+ );
204
+
205
+ $options[] = array(
206
+ 'type' => 'separator',
207
+ 'cssClass' => 'factory-separator-dashed'
208
+ );
209
+
210
+ $options[] = array(
211
+ 'type' => 'html',
212
+ 'html' => array($this, '_showFormButton')
213
+ );
214
+
215
+ $formOptions = array();
216
+
217
+ $formOptions[] = array(
218
+ 'type' => 'form-group',
219
+ 'items' => $options,
220
+ //'cssClass' => 'postbox'
221
+ );
222
+
223
+ return apply_filters('wbcr_clr_general_form_options', $formOptions);
224
+ }
225
+ }
226
+
227
+ FactoryPages321::register($wbcr_clearfy_plugin, 'WbcrClr_SeoPage');
clearfy.php ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin Name: Clearfy - disable unused features
4
+ * Plugin URI: https://wordpress.org/plugins/clearfy/
5
+ * Description: Disable the rest api, emojis, rss, xml-rpc, revision. Remove Yoast SEO Comments, reduce HTTP requests, heartbeat and revision control.
6
+ * Author: Webcraftic <wordpress.webraftic@gmail.com>
7
+ * Version: 1.0.9
8
+ * Text Domain: сlearfy
9
+ * Domain Path: /languages/
10
+ */
11
+
12
+ if( defined('WBCR_CLR_PLUGIN_ACTIVE') ) {
13
+ return;
14
+ }
15
+ define('WBCR_CLR_PLUGIN_ACTIVE', true);
16
+
17
+ define('WBCR_CLR_PLUGIN_DIR', dirname(__FILE__));
18
+ define('WBCR_CLR_PLUGIN_BASE', plugin_basename(__FILE__));
19
+ define('WBCR_CLR_PLUGIN_URL', plugins_url(null, __FILE__));
20
+
21
+
22
+
23
+
24
+ // creating a plugin via the factory
25
+ require_once(WBCR_CLR_PLUGIN_DIR . '/libs/factory/core/boot.php');
26
+
27
+ add_action('plugins_loaded', 'wbcr_clearfy_plugin_init');
28
+
29
+ function wbcr_clearfy_plugin_init()
30
+ {
31
+ global $wbcr_clearfy_plugin;
32
+
33
+ // Localization plugin
34
+ load_plugin_textdomain('clearfy', false, basename(dirname(__FILE__)) . '/languages/');
35
+
36
+ $wbcr_clearfy_plugin = new Factory325_Plugin(__FILE__, array(
37
+ 'name' => 'wbcr_clearfy',
38
+ 'title' => __('Clearfy - disable unused features', 'clearfy'),
39
+ 'version' => '1.0.9',
40
+ 'host' => 'wordpress.org'
41
+ ));
42
+
43
+ // requires factory modules
44
+ $wbcr_clearfy_plugin->load(array(
45
+ array('libs/factory/bootstrap', 'factory_bootstrap_329', 'admin'),
46
+ array('libs/factory/font-awesome', 'factory_fontawesome_320', 'admin'),
47
+ array('libs/factory/forms', 'factory_forms_328', 'admin'),
48
+ array('libs/factory/notices', 'factory_notices_323', 'admin'),
49
+ array('libs/factory/pages', 'factory_pages_321', 'admin')
50
+ ));
51
+
52
+ require(WBCR_CLR_PLUGIN_DIR . '/includes/functions.php');
53
+
54
+ // loading other files
55
+ if( is_admin() ) {
56
+ require(WBCR_CLR_PLUGIN_DIR . '/admin/boot.php');
57
+ }
58
+
59
+ require(WBCR_CLR_PLUGIN_DIR . '/includes/class.core.php');
60
+ new WbcrClearfy_Plugin();
61
+ }
62
+
63
+ /**
64
+ * Activates the plugin.
65
+ *
66
+ * TThe activation hook has to be registered before loading the plugin.
67
+ * The deactivateion hook can be registered in any place (currently in the file plugin.class.php).
68
+ */
69
+ /*function wbcr_clearfy_plugin_activation()
70
+ {
71
+ if( !current_user_can('activate_plugins') ) {
72
+ wp_die(__('You do not have sufficient permissions to activate plugins for this site.'));
73
+ }
74
+
75
+ wbcr_clearfy_plugin_init();
76
+
77
+ global $wbcr_clearfy_plugin;
78
+ $wbcr_clearfy_plugin->activate();
79
+ }
80
+
81
+ register_activation_hook(__FILE__, 'wbcr_clearfy_plugin_activation');*/
includes/class.core.php ADDED
@@ -0,0 +1,862 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ class WbcrClearfy_Plugin {
10
+
11
+ public function __construct()
12
+ {
13
+
14
+ if( $this->getOption('comment_text_convert_links_pseudo') || $this->getOption('remove_url_from_comment_form') ) {
15
+ add_action('wp_head', array($this, 'addPseudoLinkStyle'));
16
+ add_action('wp_footer', array($this, 'addPseudoLinkScripts'));
17
+ }
18
+
19
+ if( $this->getOption('disable_emoji') ) {
20
+ add_action('init', array($this, 'disableEmojis'));
21
+ }
22
+
23
+ if( $this->getOption('remove_jquery_migrate') ) {
24
+ add_filter('wp_default_scripts', array($this, 'removeJqueryMigrate'));
25
+ }
26
+ if( $this->getOption('disable_embeds') ) {
27
+ add_action('init', array($this, 'disableEmbeds'), 9999);
28
+ }
29
+
30
+ if( $this->getOption('disable_json_rest_api') ) {
31
+ add_action('init', array($this, 'removeRestApi'));
32
+ }
33
+
34
+ if( $this->getOption('remove_recent_comments_style') ) {
35
+ add_action('widgets_init', array($this, 'removeRecentCommentsStyle'));
36
+ }
37
+
38
+ if( $this->getOption('content_image_auto_alt') ) {
39
+ add_filter('the_content', array($this, 'contentImageAutoAlt'));
40
+ }
41
+
42
+ if( $this->getOption('comment_text_convert_links_pseudo') ) {
43
+ add_filter('comment_text', array($this, 'commentTextConvertLinksPseudo'));
44
+ }
45
+
46
+ if( $this->getOption('pseudo_comment_author_link') ) {
47
+ add_filter('get_comment_author_link', array($this, 'pseudoCommentAuthorLink'), 100, 3);
48
+ }
49
+
50
+ if( $this->getOption('right_robots_txt') ) {
51
+ add_filter('robots_txt', array($this, 'rightRobotsTxt'));
52
+ }
53
+
54
+ if( $this->getOption('remove_last_item_breadcrumb_yoast') ) {
55
+ add_filter('wpseo_breadcrumb_single_link', array($this, 'removeLastItemBreadcrumbYoast'));
56
+ }
57
+
58
+ if( $this->getOption('attachment_pages_redirect') ) {
59
+ add_action('template_redirect', array($this, 'attachmentPagesRedirect'));
60
+ }
61
+
62
+ if( $this->getOption('remove_single_pagination_duplicate') ) {
63
+ add_action('template_redirect', array($this, 'removeSinglePaginationDuplicate'));
64
+ }
65
+
66
+ if( $this->getOption('change_login_errors') ) {
67
+ add_filter('login_errors', array($this, 'changeLoginErrors'));
68
+ }
69
+
70
+ if( $this->getOption('remove_x_pingback') ) {
71
+ add_filter('template_redirect', array($this, 'removeXPingbackHeaders'));
72
+ add_filter('wp_headers', array($this, 'removeXPingback'));
73
+
74
+ add_action('template_redirect', array($this, 'linkRelBufferStart'), -1);
75
+ add_action('get_header', array($this, 'linkRelBufferStart'));
76
+ add_action('wp_head', array($this, 'linkRelBufferEnd'), 999);
77
+ }
78
+
79
+ if( $this->getOption('disable_feed') ) {
80
+ $this->disableFeed();
81
+ }
82
+
83
+ if( $this->getOption('remove_url_from_comment_form') ) {
84
+ add_filter('comment_form_default_fields', array($this, 'removeUrlFromCommentForm'));
85
+ }
86
+
87
+ if( $this->getOption('remove_unnecessary_link_admin_bar') ) {
88
+ add_action('wp_before_admin_bar_render', array($this, 'removeUnnecessaryLinkAdminBar'));
89
+ }
90
+ if( $this->getOption('revision_limit') && is_numeric($this->getOption('revision_limit')) || $this->getOption('revisions_disable') ) {
91
+ add_filter('wp_revisions_to_keep', array($this, 'clearfyRevisionsToKeep'), 10, 2);
92
+ }
93
+
94
+ if( $this->getOption('set_last_modified_headers') ) {
95
+ add_action('template_redirect', array($this, 'setLastModifiedHeaders'));
96
+ }
97
+
98
+ if( $this->getOption('protect_author_get') ) {
99
+ add_action('wp', array($this, 'protectAuthorGet'));
100
+ }
101
+
102
+ if( $this->getOption('yoast_remove_image_from_xml_sitemap') ) {
103
+ $this->yoastRemoveImageFromXmlSitemap();
104
+ }
105
+
106
+ if( $this->getOption('yoast_remove_head_comment') ) {
107
+ add_action('init', array($this, 'yoastRemoveHeadComment'));
108
+ }
109
+
110
+ if( $this->getOption('remove_replytocom') ) {
111
+ add_action('template_redirect', array($this, 'removeReplytocomRedirect'), 1);
112
+ add_filter('comment_reply_link', array($this, 'removeReplytocomLink'));
113
+ }
114
+
115
+ if( $this->getOption('html_minify') ) {
116
+ add_action('init', array($this, 'htmlCompressor'));
117
+ }
118
+
119
+ if( $this->getOption('redirect_from_http_to_https') ) {
120
+ add_action('init', array($this, 'redirectFromHttpToHttps'));
121
+ }
122
+
123
+ $this->remove_tags_from_head();
124
+
125
+ add_action('wp', array($this, 'redirectArchives'));
126
+ }
127
+
128
+ public function addPseudoLinkStyle()
129
+ {
130
+ echo '<style>';
131
+ echo '.wbcr-clearfy-pseudo-link {color: #008acf;cursor: pointer;text-decoration: underline;}.wbcr-clearfy-pseudo-link:hover {text-decoration: none;}';
132
+ echo '</style>';
133
+ }
134
+
135
+
136
+ public function addPseudoLinkScripts()
137
+ {
138
+ echo '<script type="text/javascript">';
139
+ echo 'jQuery(function($) {$(document).on("click", ".wbcr-clearfy-pseudo-link", function(){window.open($(this).data("uri"));});});';
140
+ echo '</script>';
141
+ }
142
+
143
+ /**
144
+ * Disable Emojis
145
+ * URI: https://geek.hellyer.kiwi/plugins/disable-emojis/
146
+ * Version: 1.5.1
147
+ * Author: Ryan Hellyer
148
+ * Author URI: https://geek.hellyer.kiwi/
149
+ * License: GPL2
150
+ */
151
+
152
+ public function disableEmojis()
153
+ {
154
+ remove_action('wp_head', 'print_emoji_detection_script', 7);
155
+ remove_action('admin_print_scripts', 'print_emoji_detection_script');
156
+ remove_action('wp_print_styles', 'print_emoji_styles');
157
+ remove_action('admin_print_styles', 'print_emoji_styles');
158
+ remove_filter('the_content_feed', 'wp_staticize_emoji');
159
+ remove_filter('comment_text_rss', 'wp_staticize_emoji');
160
+ remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
161
+ add_filter('tiny_mce_plugins', array($this, 'disableEmojisTinymce'));
162
+ }
163
+
164
+ /**
165
+ * Filter function used to remove the tinymce emoji plugin.
166
+ *
167
+ * @param array $plugins
168
+ * @return array Difference betwen the two arrays
169
+ */
170
+
171
+ public function disableEmojisTinymce($plugins)
172
+ {
173
+ if( is_array($plugins) ) {
174
+
175
+ return array_diff($plugins, array('wpemoji'));
176
+ } else {
177
+
178
+ return array();
179
+ }
180
+ }
181
+
182
+ /**
183
+ * Disable JSON API
184
+ * http://wp-kama.ru/question/kak-polnostyu-otklyuchit-rest-api-vvedennyj-v-wp-4-4
185
+ */
186
+
187
+ public function removeRestApi()
188
+ {
189
+
190
+ // Disabled REST API
191
+ add_filter('rest_enabled', '__return_false');
192
+
193
+ // Add redirect except contact form and post request
194
+ if( (preg_match('#^/wp-json/(oembed|)#i', $_SERVER['REQUEST_URI']) || preg_match('#^/wp-json$#i', $_SERVER['REQUEST_URI'])) && (!preg_match('#^/wp-json/contact-form-7/#', $_SERVER['REQUEST_URI']) || $_SERVER['REQUEST_METHOD'] !== 'POST') ) {
195
+ wp_redirect(get_option('siteurl'), 301);
196
+ die();
197
+ }
198
+
199
+ // Disabled REST API filters
200
+ remove_action('xmlrpc_rsd_apis', 'rest_output_rsd');
201
+ remove_action('wp_head', 'rest_output_link_wp_head', 10, 0);
202
+ remove_action('template_redirect', 'rest_output_link_header', 11, 0);
203
+ remove_action('auth_cookie_malformed', 'rest_cookie_collect_status');
204
+ remove_action('auth_cookie_expired', 'rest_cookie_collect_status');
205
+ remove_action('auth_cookie_bad_username', 'rest_cookie_collect_status');
206
+ remove_action('auth_cookie_bad_hash', 'rest_cookie_collect_status');
207
+ remove_action('auth_cookie_valid', 'rest_cookie_collect_status');
208
+ remove_filter('rest_authentication_errors', 'rest_cookie_check_errors', 100);
209
+
210
+ // Disabled REST API events
211
+ remove_action('init', 'rest_api_init');
212
+ remove_action('rest_api_init', 'rest_api_default_filters', 10, 1);
213
+
214
+ // Disabled Embeds which are used in Rest api
215
+ remove_action('rest_api_init', 'wp_oembed_register_route');
216
+ remove_filter('rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4);
217
+ remove_action('wp_head', 'wp_oembed_add_discovery_links');
218
+ }
219
+
220
+ /**
221
+ * Remove styles for .recentcomments a
222
+ * .recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}
223
+ * https://github.com/nickyurov/
224
+ */
225
+
226
+ public function removeRecentCommentsStyle()
227
+ {
228
+
229
+ global $wp_widget_factory;
230
+
231
+ remove_action('wp_head', array(
232
+ $wp_widget_factory->widgets['WP_Widget_Recent_Comments'],
233
+ 'recent_comments_style'
234
+ ));
235
+ }
236
+
237
+ /**
238
+ * Add post title in image alt attribute
239
+ *
240
+ * @param $content
241
+ * @return mixed
242
+ */
243
+
244
+ public function contentImageAutoAlt($content)
245
+ {
246
+
247
+ global $post;
248
+
249
+ $pattern = array(' alt=""', ' alt=\'\'');
250
+
251
+ $replacement = array(
252
+ ' alt="' . esc_attr($post->post_title) . '"',
253
+ ' alt=\'' . esc_attr($post->post_title) . '\''
254
+ );
255
+
256
+ $content = str_replace($pattern, $replacement, $content);
257
+
258
+ return $content;
259
+ }
260
+
261
+ /**
262
+ * Convert links in comment text into span pseudo links
263
+ *
264
+ * @param $comment_text
265
+ * @return mixed
266
+ */
267
+
268
+ public function commentTextConvertLinksPseudo($comment_text)
269
+ {
270
+
271
+ return $this->convertLinksPseudo($comment_text);
272
+ }
273
+
274
+ /**
275
+ * Convert links into span pseudo links
276
+ *
277
+ * @param $text
278
+ * @return mixed
279
+ */
280
+
281
+ public function convertLinksPseudo($text)
282
+ {
283
+
284
+ return preg_replace_callback('/<a[^>]+href=[\'"](https?:\/\/[^"\']+)[\'"][^>]+>(.*?)<\/a>/i', array(
285
+ $this,
286
+ 'replaceLinks'
287
+ ), $text);
288
+ }
289
+
290
+ public function replaceLinks($matches)
291
+ {
292
+ if( $matches[1] == get_home_url() ) {
293
+ return $matches[0];
294
+ }
295
+
296
+ return '<span class="wbcr-clearfy-pseudo-link" data-uri="' . $matches[1] . '" > ' . $matches[2] . '</span>';
297
+ }
298
+
299
+ /**
300
+ * Convert author link to pseudo link
301
+ *
302
+ * @return string
303
+ */
304
+
305
+ public function pseudoCommentAuthorLink($return, $author, $comment_ID)
306
+ {
307
+ $url = get_comment_author_url($comment_ID);
308
+ $author = get_comment_author($comment_ID);
309
+
310
+ if( empty($url) || 'http://' == $url ) {
311
+ $return = $author;
312
+ } else {
313
+ $return = '<span class="wbcr-clearfy-pseudo-link" data-uri="' . $url . '">' . $author . '</span>';
314
+ }
315
+
316
+ return $return;
317
+ }
318
+
319
+ /**
320
+ * Add directories to virtual robots.txt file
321
+
322
+ */
323
+
324
+ public function rightRobotsTxt($output)
325
+ {
326
+ if( $this->getOption('robots_txt_text') ) {
327
+ return $this->getOption('robots_txt_text');
328
+ }
329
+
330
+ return wbcr_clearfy_get_right_robot_txt();
331
+ }
332
+
333
+ /**
334
+ * Remove last item from breadcrumbs SEO by YOAST
335
+ * http://www.wpdiv.com/remove-post-title-yoast-seo-plugin-breadcrumb/
336
+
337
+ */
338
+
339
+ public function removeLastItemBreadcrumbYoast($link_output)
340
+ {
341
+
342
+ if( strpos($link_output, 'breadcrumb_last') !== false ) {
343
+ $link_output = '';
344
+ }
345
+
346
+ return $link_output;
347
+ }
348
+
349
+ /**
350
+ * Attachment pages redirect
351
+ */
352
+
353
+ public function attachmentPagesRedirect()
354
+ {
355
+
356
+ global $post;
357
+ if( is_attachment() ) {
358
+ if( isset($post->post_parent) && ($post->post_parent != 0) ) {
359
+ wp_redirect(get_permalink($post->post_parent), 301);
360
+ } else {
361
+ wp_redirect(home_url(), 301);
362
+ }
363
+ exit;
364
+ }
365
+ }
366
+
367
+ /**
368
+ * Remove single pagination duplicate
369
+ */
370
+
371
+ public function removeSinglePaginationDuplicate()
372
+ {
373
+
374
+ if( is_singular() && !is_front_page() ) {
375
+
376
+ global $post, $page;
377
+
378
+ $num_pages = substr_count($post->post_content, '<!--nextpage-->') + 1;
379
+
380
+ if( $page > $num_pages || $page == 1 ) {
381
+
382
+ wp_redirect(get_permalink($post->ID));
383
+
384
+ exit;
385
+ }
386
+ }
387
+ }
388
+
389
+ /**
390
+ * Change login error message
391
+ *
392
+ * @return string
393
+ */
394
+
395
+ public function changeLoginErrors()
396
+ {
397
+ return __('<strong>ERROR</strong>: Wrong login or password', 'clearfy');
398
+ }
399
+
400
+ /**
401
+ * Remove X-Pingback
402
+ * https://github.com/nickyurov/
403
+
404
+ */
405
+
406
+ public function removeXPingback($headers)
407
+ {
408
+ unset($headers['X-Pingback']);
409
+
410
+ return $headers;
411
+ }
412
+
413
+ public function removeXPingbackHeaders($headers)
414
+ {
415
+ if( function_exists('header_remove') ) {
416
+ header_remove('X-Pingback');
417
+ header_remove('Server');
418
+ }
419
+ }
420
+
421
+ //https://wordpress.stackexchange.com/questions/158700/how-to-remove-pingback-from-head
422
+
423
+ public function linkRelBufferCallback($buffer)
424
+ {
425
+ $buffer = preg_replace('/(<link.*?rel=("|\')pingback("|\').*?href=("|\')(.*?)("|\')(.*?)?\/?>|<link.*?href=("|\')(.*?)("|\').*?rel=("|\')pingback("|\')(.*?)?\/?>)/i', '', $buffer);
426
+
427
+ return $buffer;
428
+ }
429
+
430
+ public function linkRelBufferStart()
431
+ {
432
+ ob_start(array($this, "linkRelBufferCallback"));
433
+ }
434
+
435
+ public function linkRelBufferEnd()
436
+ {
437
+ ob_flush();
438
+ }
439
+
440
+ /**
441
+ * Disable feeds
442
+
443
+ */
444
+
445
+ public function disableFeed()
446
+ {
447
+ //Remove feed links from the <head> section
448
+
449
+ remove_action('wp_head', 'feed_links_extra', 3);
450
+ remove_action('wp_head', 'feed_links', 2);
451
+
452
+ //Redirect feed URLs to home page
453
+
454
+ add_action('do_feed', array($this, 'disableFeedRedirect'), 1);
455
+ add_action('do_feed_rdf', array($this, 'disableFeedRedirect'), 1);
456
+ add_action('do_feed_rss', array($this, 'disableFeedRedirect'), 1);
457
+ add_action('do_feed_rss2', array($this, 'disableFeedRedirect'), 1);
458
+ add_action('do_feed_atom', array($this, 'disableFeedRedirect'), 1);
459
+ }
460
+
461
+ public function disableFeedRedirect()
462
+ {
463
+ // if GET param - remove and redirect
464
+ if( isset($_GET['feed']) ) {
465
+ wp_redirect(esc_url_raw(remove_query_arg('feed')), 301);
466
+
467
+ exit;
468
+ }
469
+
470
+ // if beauty permalink - remove and redirect
471
+ if( get_query_var('feed') !== 'old' ) {
472
+
473
+ set_query_var('feed', '');
474
+ }
475
+
476
+ redirect_canonical();
477
+
478
+ wp_redirect(get_option('siteurl'), 301);
479
+
480
+ die();
481
+ }
482
+
483
+ /**
484
+ * Remove url field from comment form
485
+ *
486
+ * @param $fields
487
+ * @return mixed
488
+ */
489
+
490
+ public function removeUrlFromCommentForm($fields)
491
+ {
492
+ if( isset($fields['url']) ) {
493
+ unset($fields['url']);
494
+ }
495
+
496
+ return $fields;
497
+ }
498
+
499
+ /**
500
+ * Deleted unnecessary link in admin bar
501
+
502
+ */
503
+
504
+ public function removeUnnecessaryLinkAdminBar()
505
+ {
506
+ if( !is_user_logged_in() ) {
507
+ return;
508
+ }
509
+
510
+ global $wp_admin_bar;
511
+
512
+ $wp_admin_bar->remove_menu('wp-logo');
513
+ $wp_admin_bar->remove_menu('about');
514
+ $wp_admin_bar->remove_menu('wporg');
515
+ $wp_admin_bar->remove_menu('documentation');
516
+ $wp_admin_bar->remove_menu('support-forums');
517
+ $wp_admin_bar->remove_menu('feedback');
518
+ $wp_admin_bar->remove_menu('view-site');
519
+ }
520
+
521
+ /**
522
+ * Revisions limit
523
+ *
524
+ * @since 0.9.5
525
+ */
526
+
527
+ public function clearfyRevisionsToKeep($num, $post)
528
+ {
529
+ if( $this->getOption('revision_limit', null) && is_numeric($this->getOption('revision_limit', null)) ) {
530
+ $num = $this->getOption('revision_limit', 0);
531
+ }
532
+
533
+ if( $this->getOption('revisions_disable') ) {
534
+ $num = 0;
535
+ }
536
+
537
+ return $num;
538
+ }
539
+
540
+ /**
541
+ * Set last modified to all posts and archives
542
+ */
543
+
544
+ public function setLastModifiedHeaders()
545
+ {
546
+ global $wp;
547
+ $last_modified_exclude = $this->getOption('last_modified_exclude');
548
+ $last_modified_exclude_exp = explode(PHP_EOL, $last_modified_exclude);
549
+
550
+ $current_url = home_url(add_query_arg(array(), $wp->request));
551
+
552
+ foreach($last_modified_exclude_exp as $expr) {
553
+ if( !empty($expr) && strpos(urldecode($current_url), $expr) !== false ) {
554
+ return;
555
+ }
556
+ }
557
+ if( (defined('DOING_AJAX') && DOING_AJAX) || (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST) || (defined('REST_REQUEST') && REST_REQUEST) || (is_admin()) ) {
558
+ return;
559
+ }
560
+ $last_modified = '';
561
+ /**
562
+ * If posts, pages, custom post types
563
+ */
564
+ if( is_singular() ) {
565
+ global $post;
566
+ if( !isset($post->post_modified_gmt) ) {
567
+ return;
568
+ }
569
+ $post_time = strtotime($post->post_modified_gmt);
570
+ $modified_time = $post_time;
571
+ /**
572
+ * If we have comment set new modified date
573
+ */
574
+ if( (int)$post->comment_count > 0 ) {
575
+ $comments = get_comments(array(
576
+ 'post_id' => $post->ID,
577
+ 'number' => '1',
578
+ 'status' => 'approve',
579
+ 'orderby' => 'comment_date_gmt',
580
+ ));
581
+ if( !empty($comments) && isset($comments[0]) ) {
582
+ $comment_time = strtotime($comments[0]->comment_date_gmt);
583
+ if( $comment_time > $post_time ) {
584
+ $modified_time = $comment_time;
585
+ }
586
+ }
587
+ }
588
+ $last_modified = str_replace('+0000', 'GMT', gmdate('r', $modified_time));
589
+ }
590
+ /**
591
+ * If any archives: categories, tags, taxonomy terms, post type archives
592
+ */
593
+ if( is_archive() || is_home() ) {
594
+ global $posts;
595
+ if( empty($posts) ) {
596
+ return;
597
+ }
598
+ $post = $posts[0];
599
+ if( !isset($post->post_modified_gmt) ) {
600
+ return;
601
+ }
602
+ $post_time = strtotime($post->post_modified_gmt);
603
+ $modified_time = $post_time;
604
+ $last_modified = str_replace('+0000', 'GMT', gmdate('r', $modified_time));
605
+ }
606
+
607
+ /**
608
+ * If headers already sent - do nothing
609
+ */
610
+
611
+ if( headers_sent() ) {
612
+ return;
613
+ }
614
+
615
+ if( !empty($last_modified) && !empty($modified_time) ) {
616
+
617
+ header('Last-Modified: ' . $last_modified);
618
+
619
+ if( $this->getOption('if_modified_since_headers') && !is_user_logged_in() ) {
620
+
621
+ if( isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $modified_time ) {
622
+
623
+ $protocol = (isset($_SERVER['SERVER_PROTOCOL'])
624
+ ? $_SERVER['SERVER_PROTOCOL']
625
+ : 'HTTP/1.0');
626
+
627
+ header($protocol . ' 304 Not Modified');
628
+ }
629
+ }
630
+ }
631
+ }
632
+
633
+ /**
634
+ * Protect author get
635
+ */
636
+
637
+ public function protectAuthorGet()
638
+ {
639
+ if( isset($_GET['author']) && !is_admin() ) {
640
+ wp_redirect(home_url(), 301);
641
+
642
+ die();
643
+ }
644
+ }
645
+
646
+ /**
647
+ * Remove yoast comment
648
+
649
+ */
650
+
651
+ public function yoastRemoveHeadComment()
652
+ {
653
+ if( defined('WPSEO_VERSION') && !is_admin() ) {
654
+ add_action('get_header', array($this, 'yoastRemoveHeadCommentStart'));
655
+ add_action('wp_head', array($this, 'yoastRemoveHeadCommentEnd'), 999);
656
+ }
657
+ }
658
+
659
+ public function yoastRemoveHeadCommentStart()
660
+ {
661
+ ob_start(array($this, 'yoastRemoveHeadCommentRemove'));
662
+ }
663
+
664
+ public function yoastRemoveHeadCommentEnd()
665
+ {
666
+ ob_end_flush();
667
+ }
668
+
669
+ public function yoastRemoveHeadCommentRemove($html)
670
+ {
671
+ return preg_replace('/^<!--.*?[Yy]oast.*?-->$/mi', '', $html);
672
+ }
673
+
674
+ /**
675
+ * Remove unnecessary tags from head
676
+
677
+ */
678
+
679
+ public function remove_tags_from_head()
680
+ {
681
+
682
+ if( $this->getOption('remove_meta_generator') ) {
683
+ remove_action('wp_head', 'wp_generator');
684
+ add_filter('the_generator', '__return_empty_string');
685
+ }
686
+
687
+ if( $this->getOption('remove_dns_prefetch') ) {
688
+ remove_action('wp_head', 'wp_resource_hints', 2);
689
+ }
690
+
691
+ if( $this->getOption('remove_rsd_link') ) {
692
+ remove_action('wp_head', 'rsd_link');
693
+ }
694
+
695
+ if( $this->getOption('remove_wlw_link') ) {
696
+ remove_action('wp_head', 'wlwmanifest_link');
697
+ }
698
+
699
+ if( $this->getOption('remove_adjacent_posts_link') ) {
700
+ remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0);
701
+ }
702
+
703
+ if( $this->getOption('remove_adjacent_posts_link') ) {
704
+ remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
705
+ }
706
+
707
+ if( $this->getOption('remove_shortlink_link') ) {
708
+ remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);
709
+ remove_action('template_redirect', 'wp_shortlink_header', 11, 0);
710
+ }
711
+ }
712
+
713
+ /**
714
+ * Redirect archives author, date, tags
715
+ */
716
+
717
+ public function redirectArchives()
718
+ {
719
+
720
+ if( $this->getOption('redirect_archives_author') ) {
721
+ if( is_author() && !is_admin() ) {
722
+ wp_redirect(home_url(), 301);
723
+
724
+ die();
725
+ }
726
+ }
727
+
728
+ if( $this->getOption('redirect_archives_date') ) {
729
+ if( is_date() && !is_admin() ) {
730
+ wp_redirect(home_url(), 301);
731
+
732
+ die();
733
+ }
734
+ }
735
+
736
+ if( $this->getOption('redirect_archives_tag') ) {
737
+ if( is_tag() && !is_admin() ) {
738
+ wp_redirect(home_url(), 301);
739
+
740
+ die();
741
+ }
742
+ }
743
+ }
744
+
745
+ /**
746
+ * Remove replytocom
747
+ */
748
+ public function removeReplytocomRedirect()
749
+ {
750
+ if( isset($_GET['replytocom']) && is_singular() ) {
751
+ $post_url = get_permalink($GLOBALS['post']->ID);
752
+ $comment_id = sanitize_text_field($_GET['replytocom']);
753
+ $query_string = remove_query_arg('replytocom', sanitize_text_field($_SERVER['QUERY_STRING']));
754
+
755
+ if( !empty($query_string) ) {
756
+ $post_url .= '?' . $query_string;
757
+ }
758
+ $post_url .= '#comment-' . $comment_id;
759
+
760
+ wp_redirect($post_url, 301);
761
+ die();
762
+ }
763
+
764
+ return false;
765
+ }
766
+
767
+ public function removeReplytocomLink($link)
768
+ {
769
+ return preg_replace('`href=(["\'])(?:.*(?:\?|&|&#038;)replytocom=(\d+)#respond)`', 'href=$1#comment-$2', $link);
770
+ }
771
+
772
+ /**
773
+ * Remove <image:image> from sitemap
774
+ */
775
+ public function yoastRemoveImageFromXmlSitemap()
776
+ {
777
+ add_filter('wpseo_xml_sitemap_img', '__return_false');
778
+ add_filter('wpseo_sitemap_url', array($this, 'yoastRemoveImageFromXmlClean'), 10, 2);
779
+ }
780
+
781
+ public function yoastRemoveImageFromXmlClean($output, $url)
782
+ {
783
+ $output = preg_replace('/<image:image[^>]*?>.*?<\/image:image>/si', '', $output);
784
+
785
+ return $output;
786
+ }
787
+
788
+ // Remove jQuery Migrate
789
+ public function removeJqueryMigrate(&$scripts)
790
+ {
791
+ if( !is_admin() ) {
792
+ $scripts->remove('jquery');
793
+ $scripts->add('jquery', false, array('jquery-core'), '1.12.4');
794
+ }
795
+ }
796
+
797
+ // Disable Embeds
798
+ public function disableEmbeds()
799
+ {
800
+ global $wp;
801
+ $wp->public_query_vars = array_diff($wp->public_query_vars, array('embed',));
802
+ remove_action('rest_api_init', 'wp_oembed_register_route');
803
+ add_filter('embed_oembed_discover', '__return_false');
804
+ remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);
805
+ remove_action('wp_head', 'wp_oembed_add_discovery_links');
806
+ remove_action('wp_head', 'wp_oembed_add_host_js');
807
+ add_filter('tiny_mce_plugins', 'disableEmbedsTinyMcePlugin');
808
+ add_filter('rewrite_rules_array', 'disableEmbedsRewrites');
809
+ remove_filter('pre_oembed_result', 'wp_filter_pre_oembed_result', 10);
810
+ }
811
+
812
+ public function disableEmbedsTinyMcePlugin($plugins)
813
+ {
814
+ return array_diff($plugins, array('wpembed'));
815
+ }
816
+
817
+ public function disableEmbedsRewrites($rules)
818
+ {
819
+ foreach($rules as $rule => $rewrite) {
820
+ if( false !== strpos($rewrite, 'embed=true') ) {
821
+ unset($rules[$rule]);
822
+ }
823
+ }
824
+
825
+ return $rules;
826
+ }
827
+
828
+ public function htmlCompressor()
829
+ {
830
+ ob_start(array($this, 'htmlCompressorMain'));
831
+ }
832
+
833
+ public function htmlCompressorMain($data)
834
+ {
835
+ return wbcr_clearfy_minify_html_output($data);
836
+ }
837
+
838
+ public function redirectFromHttpToHttps()
839
+ {
840
+ if( is_ssl() ) {
841
+ return;
842
+ }
843
+ if( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
844
+ wp_redirect(set_url_scheme($_SERVER['REQUEST_URI'], 'https'), 301);
845
+ } else {
846
+ wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301);
847
+ }
848
+ die();
849
+ }
850
+
851
+
852
+ /**
853
+ * Get options with namespace
854
+ * @param $option_name
855
+ * @param bool $default
856
+ * @return mixed|void
857
+ */
858
+ public function getOption($option_name, $default = false)
859
+ {
860
+ return get_option('wbcr-clearfy_' . $option_name, $default);
861
+ }
862
+ }
includes/class.zip-archive.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * A class for packing files into an archive.
4
+ * @author Webcraftic <wordpress.webraftic@gmail.com>
5
+ * @copyright (c) 2017 Webraftic Ltd
6
+ * @version 1.0
7
+ */
8
+
9
+ if( !class_exists('ZipArchive') ) {
10
+ wp_die(__('The ZipArchive class does not exist in this version of php.'));
11
+ }
12
+
13
+ class Wbcr_ExtendedZip extends ZipArchive {
14
+
15
+ // Member function to add a whole file system subtree to the archive
16
+ public function addTree($dirname, $localname = '')
17
+ {
18
+ if( $localname ) {
19
+ $this->addEmptyDir($localname);
20
+ }
21
+ $this->_addTree($dirname, $localname);
22
+ }
23
+
24
+ // Internal function, to recurse
25
+ protected function _addTree($dirname, $localname)
26
+ {
27
+ $dir = opendir($dirname);
28
+ while( $filename = readdir($dir) ) {
29
+ // Discard . and ..
30
+ if( $filename == '.' || $filename == '..' ) {
31
+ continue;
32
+ }
33
+
34
+ // Proceed according to type
35
+ $path = $dirname . '/' . $filename;
36
+ $localpath = $localname
37
+ ? ($localname . '/' . $filename)
38
+ : $filename;
39
+ if( is_dir($path) ) {
40
+ // Directory: add & recurse
41
+ $this->addEmptyDir($localpath);
42
+ $this->_addTree($path, $localpath);
43
+ } else if( is_file($path) ) {
44
+ // File: just add
45
+ $this->addFile($path, $localpath);
46
+ }
47
+ }
48
+ closedir($dir);
49
+ }
50
+
51
+ // Helper function
52
+ public static function zipTree($dirname, $zipFilename, $flags = 0, $localname = '')
53
+ {
54
+ $zip = new self();
55
+ $zip->open($zipFilename, $flags);
56
+ $zip->addTree($dirname, $localname);
57
+ $zip->close();
58
+ }
59
+ }
includes/functions.php ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Html minify function by Tim Eckel<tim@leethost.com>
11
+ * @param $buffer
12
+ * @return mixed
13
+ */
14
+ function wbcr_clearfy_minify_html_output($buffer)
15
+ {
16
+ if( substr(ltrim($buffer), 0, 5) == '<?xml' ) {
17
+ return ($buffer);
18
+ }
19
+ $minify_javascript = get_option('minify_javascript');
20
+ $minify_html_comments = get_option('minify_html_comments');
21
+ $minify_html_utf8 = get_option('minify_html_utf8');
22
+ if( $minify_html_utf8 == 'yes' && mb_detect_encoding($buffer, 'UTF-8', true) ) {
23
+ $mod = '/u';
24
+ } else {
25
+ $mod = '/s';
26
+ }
27
+ $buffer = str_replace(array(chr(13) . chr(10), chr(9)), array(chr(10), ''), $buffer);
28
+ $buffer = str_ireplace(array(
29
+ '<script',
30
+ '/script>',
31
+ '<pre',
32
+ '/pre>',
33
+ '<textarea',
34
+ '/textarea>',
35
+ '<style',
36
+ '/style>'
37
+ ), array(
38
+ 'M1N1FY-ST4RT<script',
39
+ '/script>M1N1FY-3ND',
40
+ 'M1N1FY-ST4RT<pre',
41
+ '/pre>M1N1FY-3ND',
42
+ 'M1N1FY-ST4RT<textarea',
43
+ '/textarea>M1N1FY-3ND',
44
+ 'M1N1FY-ST4RT<style',
45
+ '/style>M1N1FY-3ND'
46
+ ), $buffer);
47
+ $split = explode('M1N1FY-3ND', $buffer);
48
+ $buffer = '';
49
+ for($i = 0; $i < count($split); $i++) {
50
+ $ii = strpos($split[$i], 'M1N1FY-ST4RT');
51
+ if( $ii !== false ) {
52
+ $process = substr($split[$i], 0, $ii);
53
+ $asis = substr($split[$i], $ii + 12);
54
+ if( substr($asis, 0, 7) == '<script' ) {
55
+ $split2 = explode(chr(10), $asis);
56
+ $asis = '';
57
+ for($iii = 0; $iii < count($split2); $iii++) {
58
+ if( $split2[$iii] ) {
59
+ $asis .= trim($split2[$iii]) . chr(10);
60
+ }
61
+ if( $minify_javascript != 'no' ) {
62
+ if( strpos($split2[$iii], '//') !== false && substr(trim($split2[$iii]), -1) == ';' ) {
63
+ $asis .= chr(10);
64
+ }
65
+ }
66
+ }
67
+ if( $asis ) {
68
+ $asis = substr($asis, 0, -1);
69
+ }
70
+ if( $minify_html_comments != 'no' ) {
71
+ $asis = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $asis);
72
+ }
73
+ if( $minify_javascript != 'no' ) {
74
+ $asis = str_replace(array(
75
+ ';' . chr(10),
76
+ '>' . chr(10),
77
+ '{' . chr(10),
78
+ '}' . chr(10),
79
+ ',' . chr(10)
80
+ ), array(';', '>', '{', '}', ','), $asis);
81
+ }
82
+ } else if( substr($asis, 0, 6) == '<style' ) {
83
+ $asis = preg_replace(array('/\>[^\S ]+' . $mod, '/[^\S ]+\<' . $mod, '/(\s)+' . $mod), array(
84
+ '>',
85
+ '<',
86
+ '\\1'
87
+ ), $asis);
88
+ if( $minify_html_comments != 'no' ) {
89
+ $asis = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $asis);
90
+ }
91
+ $asis = str_replace(array(
92
+ chr(10),
93
+ ' {',
94
+ '{ ',
95
+ ' }',
96
+ '} ',
97
+ '( ',
98
+ ' )',
99
+ ' :',
100
+ ': ',
101
+ ' ;',
102
+ '; ',
103
+ ' ,',
104
+ ', ',
105
+ ';}'
106
+ ), array('', '{', '{', '}', '}', '(', ')', ':', ':', ';', ';', ',', ',', '}'), $asis);
107
+ }
108
+ } else {
109
+ $process = $split[$i];
110
+ $asis = '';
111
+ }
112
+ $process = preg_replace(array('/\>[^\S ]+' . $mod, '/[^\S ]+\<' . $mod, '/(\s)+' . $mod), array(
113
+ '>',
114
+ '<',
115
+ '\\1'
116
+ ), $process);
117
+ if( $minify_html_comments != 'no' ) {
118
+ $process = preg_replace('/<!--(?!\s*(?:\[if [^\]]+]|<!|>))(?:(?!-->).)*-->' . $mod, '', $process);
119
+ }
120
+ $buffer .= $process . $asis;
121
+ }
122
+ $buffer = str_replace(array(
123
+ chr(10) . '<script',
124
+ chr(10) . '<style',
125
+ '*/' . chr(10),
126
+ 'M1N1FY-ST4RT'
127
+ ), array('<script', '<style', '*/', ''), $buffer);
128
+ $minify_html_xhtml = get_option('minify_html_xhtml');
129
+ $minify_html_relative = get_option('minify_html_relative');
130
+ $minify_html_scheme = get_option('minify_html_scheme');
131
+ if( $minify_html_xhtml == 'yes' && strtolower(substr(ltrim($buffer), 0, 15)) == '<!doctype html>' ) {
132
+ $buffer = str_replace(' />', '>', $buffer);
133
+ }
134
+ if( $minify_html_relative == 'yes' ) {
135
+ $buffer = str_replace(array(
136
+ 'https://' . $_SERVER['HTTP_HOST'] . '/',
137
+ 'http://' . $_SERVER['HTTP_HOST'] . '/',
138
+ '//' . $_SERVER['HTTP_HOST'] . '/'
139
+ ), array('/', '/', '/'), $buffer);
140
+ }
141
+ if( $minify_html_scheme == 'yes' ) {
142
+ $buffer = str_replace(array('http://', 'https://'), '//', $buffer);
143
+ }
144
+
145
+ return ($buffer);
146
+ }
147
+
148
+ /**
149
+ * Componate content for robot.txt
150
+ * @return string
151
+ */
152
+ function wbcr_clearfy_get_right_robot_txt()
153
+ {
154
+ $site_url = get_home_url();
155
+ $dir_host = preg_replace("(^https?://)", "", $site_url);
156
+
157
+ if( is_ssl() ) {
158
+ $dir_host = 'https://' . $dir_host;
159
+ }
160
+
161
+ $robot_default_content = file_get_contents(WBCR_CLR_PLUGIN_DIR . '/templates/robots.txt');
162
+
163
+ $output = $robot_default_content;
164
+ $output .= 'Host: ' . $dir_host . PHP_EOL;
165
+
166
+ $headers = @get_headers($site_url . '/sitemap.xml', 1);
167
+
168
+ if( strpos($headers[0], '200 OK') !== false ) {
169
+ $output .= 'Sitemap: ' . $site_url . '/sitemap.xml' . PHP_EOL;
170
+ } else if( isset($headers['Location']) && !empty($headers['Location']) ) {
171
+ $output .= 'Sitemap: ' . $headers['Location'] . PHP_EOL;
172
+ }
173
+
174
+ return $output;
175
+ }
176
+
177
+ /**
178
+ * Import old options for compatibility of plugins
179
+ */
180
+ function wbcr_clearfy_import_old_options()
181
+ {
182
+ $need_import_old_options = get_option('wbcr-clearfy_old_clearfy_import_options');
183
+
184
+ // if need import options
185
+ if( !$need_import_old_options && current_user_can('activate_plugins') ) {
186
+ $old_clearfy_options = get_option('clearfy_option');
187
+
188
+ if( !empty($old_clearfy_options) && is_array($old_clearfy_options) ) {
189
+ foreach($old_clearfy_options as $option_name => $option_value) {
190
+ if( $option_value == 'on' ) {
191
+ update_option('wbcr-clearfy_' . $option_name, "1");
192
+ } elseif( in_array($option_name, array(
193
+ 'robots_txt_text',
194
+ 'last_modified_exclude',
195
+ 'revision_limit'
196
+ )) ) {
197
+ update_option('wbcr-clearfy_' . $option_name, $option_value);
198
+ }
199
+ }
200
+
201
+ update_option('wbcr-clearfy_old_clearfy_import_options', true);
202
+ }
203
+ }
204
+ }
languages/clearfy-ru_RU.mo ADDED
Binary file
languages/clearfy-ru_RU.po ADDED
@@ -0,0 +1,1543 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: clearfy\n"
4
+ "POT-Creation-Date: 2017-09-10 13:41+0300\n"
5
+ "PO-Revision-Date: 2017-09-10 13:42+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/configurate.php:14
22
+ msgid "You don't have enough capability to edit this information."
23
+ msgstr "У вас недостаточно возможностей для редактирования этой информации."
24
+
25
+ #: admin/ajax/configurate.php:114
26
+ msgid "Undefinded mode."
27
+ msgstr "Неопределенный режим."
28
+
29
+ #: admin/boot.php:41
30
+ msgid "Settings"
31
+ msgstr "Настройки"
32
+
33
+ #: admin/includes/class.pages.php:36
34
+ msgid "Quick start"
35
+ msgstr "Быстрый старт"
36
+
37
+ #: admin/includes/class.pages.php:41 admin/pages/general.php:27
38
+ msgid "General"
39
+ msgstr "Основные"
40
+
41
+ #: admin/includes/class.pages.php:46 admin/pages/seo.php:25
42
+ msgid "SEO"
43
+ msgstr "SEO"
44
+
45
+ #: admin/includes/class.pages.php:51 admin/pages/double-pages.php:25
46
+ msgid "Duplicate pages"
47
+ msgstr "Дубли страниц"
48
+
49
+ #: admin/includes/class.pages.php:56 admin/pages/defence.php:25
50
+ msgid "Defence"
51
+ msgstr "Защита"
52
+
53
+ #: admin/includes/class.pages.php:61 admin/pages/additionally.php:25
54
+ msgid "Advanced"
55
+ msgstr "Дополнительно"
56
+
57
+ #: admin/includes/class.pages.php:127
58
+ msgid "You do not have permission to edit page."
59
+ msgstr "У вас недостаточно прав, для редактирования этой страницы."
60
+
61
+ #: admin/includes/class.pages.php:145 admin/includes/class.pages.php:170
62
+ #: admin/pages/quick-start.php:27 clearfy.php:64
63
+ msgid "Clearfy - disable unused features"
64
+ msgstr "Clearfy - отключите бесполезные функции"
65
+
66
+ #: admin/includes/class.pages.php:149
67
+ msgid "The settings have been updated successfully!"
68
+ msgstr "Настройки были успешно обновлены!"
69
+
70
+ #: admin/includes/class.pages.php:185
71
+ msgid "Save changes"
72
+ msgstr "Сохранить настройки"
73
+
74
+ #: admin/pages/additionally.php:72
75
+ msgid ""
76
+ "This page contains additional settings, usually not listed in the "
77
+ "recommended list."
78
+ msgstr ""
79
+ "Эта страница содержит дополнительные параметры, обычно, не перечисленные в "
80
+ "списке рекомендованных."
81
+
82
+ #: admin/pages/additionally.php:96
83
+ msgid "Disable RSS feeds"
84
+ msgstr "Отключить RSS каналы"
85
+
86
+ #: admin/pages/additionally.php:97
87
+ msgid ""
88
+ "By default, WordPress generates all types of different RSS feeds for your "
89
+ "site. While RSS feeds can be useful if you are running a blog, businesses "
90
+ "might not always utilize these. Not every site out there has a blog."
91
+ msgstr ""
92
+ "По умолчанию WordPress генерирует различные виды RSS-каналов для вашего "
93
+ "сайта. Иногда RSS-каналы могут быть полезны, если вы используете блог "
94
+ "например, но если у вас обычный одностаничник, то RSS для вас будет "
95
+ "бесполезен. "
96
+
97
+ #: admin/pages/additionally.php:97
98
+ #, php-format
99
+ msgid ""
100
+ "Removes a link to the RSS-feed from the %s section, closes and puts the "
101
+ "redirect from all RSS-feeds."
102
+ msgstr ""
103
+ "Удаляет ссылку на RSS-канал из раздела %s, закрывает и ставит "
104
+ "перенаправления от всех RSS-каналов."
105
+
106
+ #: admin/pages/additionally.php:105
107
+ msgid "Remove field \"site\" in comment form"
108
+ msgstr "Удаляет поле \"Сайт\" в форме комментариев"
109
+
110
+ #: admin/pages/additionally.php:106
111
+ msgid ""
112
+ "Tired of spam in the comments? Do visitors leave \"blank\" comments for the "
113
+ "sake of a link to their site?"
114
+ msgstr ""
115
+ "Надоел спам в комментариях? Посетители оставляют «пустые» комментарии ради "
116
+ "ссылки на свой сайт?"
117
+
118
+ #: admin/pages/additionally.php:106
119
+ msgid "Removes the \"Site\" field from the comment form."
120
+ msgstr "Убирает поле «Сайт» из формы комментирования."
121
+
122
+ #: admin/pages/additionally.php:106
123
+ msgid ""
124
+ "Works with the standard comment form, if the form is manually written in "
125
+ "your theme-it probably will not work!"
126
+ msgstr ""
127
+ "Работает со стандартной формой комментирования, если в Вашей теме форма "
128
+ "прописана вручную - скорей всего не сработает!"
129
+
130
+ #: admin/pages/additionally.php:114
131
+ msgid "Removes links to wordpress.org site from the admin bar"
132
+ msgstr "Удаляет ссылки на wordpress.org сайт из панели администратора"
133
+
134
+ #: admin/pages/additionally.php:115
135
+ msgid ""
136
+ "The first item in the toolbar goes wordpress logo and external links to "
137
+ "wordpress.org, WP forums and documentation."
138
+ msgstr ""
139
+ "Первый элемент в панели инструментов идет логотип wordpress и внешние ссылки "
140
+ "на wordpress.org, WP форумах и документации."
141
+
142
+ #: admin/pages/additionally.php:115
143
+ msgid "Removes all links to wordpress.org from the toolbar."
144
+ msgstr "Удаляет все ссылки на wordpress.org с панели инструментов."
145
+
146
+ #: admin/pages/additionally.php:121
147
+ msgid "Revisions"
148
+ msgstr "Ревизии"
149
+
150
+ #: admin/pages/additionally.php:121
151
+ msgid ""
152
+ "Editorial (or revision) in WordPress are long-standing. They allow you to "
153
+ "save a backup copy of the record or page whenever a change is made, and then "
154
+ "view all versions with the ability to restore any of them."
155
+ msgstr ""
156
+ "Редакции (или ревизии) в WordPress, давно. Они позволяют вам сохранить "
157
+ "резервную копию на запись или на страницу всякий раз, когда вы внесли "
158
+ "изменения в редакторе Wordpress. В дальнейшем вы можете просмотреть все "
159
+ "версии с возможностью восстановить любую из них."
160
+
161
+ #: admin/pages/additionally.php:128
162
+ msgid "Disable revision"
163
+ msgstr "Отключить ревизии"
164
+
165
+ #: admin/pages/additionally.php:141
166
+ msgid "Limit Post Revisions"
167
+ msgstr "Установить лимит ревизий"
168
+
169
+ #: admin/pages/additionally.php:142
170
+ msgid ""
171
+ "WordPress automatically saves revisions when you are working on posts and "
172
+ "pages. These can begin to add up pretty quick. By default, there is no limit "
173
+ "in place. We have seen posts with over 1,000 revisions. Multiply this by 50 "
174
+ "pages and suddenly you have over 50,000 revisions sitting in your database. "
175
+ "The problem with this is that you will most likely never use them and they "
176
+ "can start slowing down your database as well as using disk space.\n"
177
+ "So we recommend either disabling or limiting your revisions. "
178
+ msgstr ""
179
+ "WordPress автоматически сохраняет изменения, когда вы работаете над "
180
+ "сообщениями и страницами. Они могут начать складываться довольно быстро. По "
181
+ "умолчанию, ограничений нет. Мы видели сообщения с более чем 1000 версиями. "
182
+ "Умножьте это на 50 страниц, и у вас будет более 50 000 исправлений, сидящих "
183
+ "в вашей базе данных. Проблема заключается в том, что вы, скорее всего, "
184
+ "никогда не будете их использовать, и они могут начать замедлять работу вашей "
185
+ "базы данных, а также использовать дисковое пространство.\n"
186
+ "Поэтому мы рекомендуем либо отключать, либо ограничивать ваши изменения."
187
+
188
+ #: admin/pages/additionally.php:144
189
+ msgid ""
190
+ "Warning! In the wp-config.php file, a constant WP_POST_REVISIONS is found, "
191
+ "it determines the number of revisions. Delete it so you can change this "
192
+ "value through the admin panel."
193
+ msgstr ""
194
+ "Предупреждение! В файле wp-config.php найдена константа WP_POST_REVISIONS, "
195
+ "она определяет количество ревизий. Удалите ее, чтобы вы могли изменить это "
196
+ "значение через панель администратора."
197
+
198
+ #: admin/pages/defence.php:72
199
+ msgid "This page contains the security configuration settings for your site."
200
+ msgstr ""
201
+ "Эта страница содержит параметры конфигурации безопасности для вашего сайта."
202
+
203
+ #: admin/pages/defence.php:96
204
+ msgid "Remove meta generator"
205
+ msgstr "Удалить meta generator"
206
+
207
+ #: admin/pages/defence.php:96 admin/pages/defence.php:105
208
+ #: admin/pages/defence.php:114 admin/pages/defence.php:123
209
+ #: admin/pages/double-pages.php:96 admin/pages/double-pages.php:105
210
+ #: admin/pages/double-pages.php:123 admin/pages/double-pages.php:132
211
+ #: admin/pages/double-pages.php:141 admin/pages/general.php:98
212
+ #: admin/pages/general.php:107 admin/pages/general.php:134
213
+ #: admin/pages/general.php:142 admin/pages/general.php:151
214
+ #: admin/pages/general.php:160 admin/pages/general.php:169
215
+ #: admin/pages/general.php:178 admin/pages/seo.php:96 admin/pages/seo.php:105
216
+ #: admin/pages/seo.php:114 admin/pages/seo.php:171 admin/pages/seo.php:193
217
+ #: admin/pages/seo.php:216 admin/pages/seo.php:225 admin/pages/seo.php:234
218
+ msgid "Recommended"
219
+ msgstr "Рекомендовано"
220
+
221
+ #: admin/pages/defence.php:97
222
+ msgid ""
223
+ "Allows attacker to learn the version of WP installed on the site. This meta "
224
+ "tag has no useful function."
225
+ msgstr ""
226
+ "Позволяет злоумышленнику узнать версию Wordpress, установленую на вашем "
227
+ "сайте. Этот мета-тег не несет никакой пользы."
228
+
229
+ #: admin/pages/defence.php:97
230
+ #, php-format
231
+ msgid "Removes the meta tag from the %s section"
232
+ msgstr "Удаляет мета-тег из раздел %s"
233
+
234
+ #: admin/pages/defence.php:105
235
+ msgid "Hide author login"
236
+ msgstr "Убрать возможность узнать логин автора"
237
+
238
+ #: admin/pages/defence.php:106
239
+ msgid ""
240
+ "An attacker can find out the author's login, using a similar request to get "
241
+ "your site. mysite.com/?author=1"
242
+ msgstr ""
243
+ "Злоумышленник может узнать логин автора, с помощью подобного get запроса "
244
+ "mysite.com/?author=1"
245
+
246
+ #: admin/pages/defence.php:106
247
+ msgid "Sets the redirect to exclude the possibility of obtaining a login."
248
+ msgstr ""
249
+ "Предотвращает возможность узнать логин автора, устанавливая перенаправление."
250
+
251
+ #: admin/pages/defence.php:114
252
+ msgid "Hide errors when logging into the site"
253
+ msgstr "Спрятать ошибки при входе на сайт"
254
+
255
+ #: admin/pages/defence.php:115
256
+ msgid ""
257
+ "WP by default shows whether you entered a wrong login or incorrect password, "
258
+ "which allows attackers to understand if there is a certain user on the site, "
259
+ "and then start searching through the passwords."
260
+ msgstr ""
261
+ "Wordpress по умолчанию показывает, ввели ли вы неправильный логин или "
262
+ "неправильный пароль, что дает злоумышленникам понять, существует ли "
263
+ "определенный пользователь на сайте, а после начать перебор паролей."
264
+
265
+ #: admin/pages/defence.php:115
266
+ msgid ""
267
+ "Changes in the text of the error so that attackers could not find the login."
268
+ msgstr ""
269
+ "Меняет текст ошибки так, чтобы злоумышленники не смогли подобрать логин."
270
+
271
+ #: admin/pages/defence.php:123
272
+ msgid "Disable X-Pingback"
273
+ msgstr "Убрать ссылку на X-Pingback и возможность спамить pingback-ами"
274
+
275
+ #: admin/pages/defence.php:124
276
+ msgid ""
277
+ "A pingback is basically an automated comment that gets created when another "
278
+ "blog links to you. A self-pingback is created when you link to an article "
279
+ "within your own blog. Pingbacks are essentially nothing more than spam and "
280
+ "simply waste resources."
281
+ msgstr ""
282
+ "Pingback по-существу автоматизированных комментарий, который создается, "
283
+ "когда другой блог ссылается на вас. Self-pingback создается, когда вы "
284
+ "оставили ссылку на статью в своем блоге. Pingbacks по существу являются не "
285
+ "более чем спам и пустая трата ресурсов вашего сайта."
286
+
287
+ #: admin/pages/defence.php:124
288
+ msgid "Removes the server responses a reference to the xmlrpc file."
289
+ msgstr "Удаляет ссылку на xmlrpc-файл и ответ сервера."
290
+
291
+ #: admin/pages/double-pages.php:72
292
+ msgid "This page contains settings for setting up duplicate pages."
293
+ msgstr "Эта страница содержит параметры для настройки дублирования страниц."
294
+
295
+ #: admin/pages/double-pages.php:96
296
+ msgid "Remove archives date"
297
+ msgstr "Удалить архивы дат"
298
+
299
+ #: admin/pages/double-pages.php:97
300
+ #, php-format
301
+ msgid ""
302
+ "Many duplicates in date archives. Imagine, in addition, that your article "
303
+ "will be displayed in the main and in the category, you will still receive at "
304
+ "least 3 duplicates: in archives by year, month and date, for example %s."
305
+ msgstr ""
306
+ "Огромное количество дублей в архивах дат. Представьте, кроме того, что Ваша "
307
+ "статья будет выводиться на главной и в категории, Вы еще получите как "
308
+ "минимум 3 дубля: в архивах по году, месяцу и дате, например %s."
309
+
310
+ #: admin/pages/double-pages.php:97
311
+ msgid "Removes all pages with the date archives and puts a redirect."
312
+ msgstr "Удаляет полностью архивы дат и ставит редирект."
313
+
314
+ #: admin/pages/double-pages.php:105
315
+ msgid "Remove author archives "
316
+ msgstr "Удалить архивы автора"
317
+
318
+ #: admin/pages/double-pages.php:106
319
+ #, php-format
320
+ msgid ""
321
+ "If the site is only filled by you - a mandatory item. Allows you to get rid "
322
+ "of duplicates on user archives, for example %s."
323
+ msgstr ""
324
+ "Если сайт заполняете только вы - это функция обязательна. Позволяет вам "
325
+ "избавиться от дубликатов страниц автора, например %s."
326
+
327
+ #: admin/pages/double-pages.php:106
328
+ msgid "Removes all pages with the author archives and puts a redirect."
329
+ msgstr "Удаляет все страницы из архивов автора и ставит перенаправление."
330
+
331
+ #: admin/pages/double-pages.php:114
332
+ msgid "Remove archives tag"
333
+ msgstr "Удалить метки архивов"
334
+
335
+ #: admin/pages/double-pages.php:115
336
+ msgid ""
337
+ "If you use tags only for the block Similar records, or do not use them at "
338
+ "all - it will be more correct to close them to avoid duplicates."
339
+ msgstr ""
340
+ "Если вы используете теги только для виджета \"Похожие записи\", либо не "
341
+ "используете их совсем - правильнее будет их закрыть, чтобы избежать дублей."
342
+
343
+ #: admin/pages/double-pages.php:115
344
+ msgid "Removes all pages with the tag archives and puts a redirect."
345
+ msgstr "Ставит редирект со страниц тегов на главную."
346
+
347
+ #: admin/pages/double-pages.php:123
348
+ msgid "Remove attachment pages"
349
+ msgstr "Удалить страницы вложений"
350
+
351
+ #: admin/pages/double-pages.php:124
352
+ msgid ""
353
+ "Every of the pictures has its own page on the site. Such pages are "
354
+ "successfully indexed and create duplicates. The site can have thousands of "
355
+ "same-type attachment pages."
356
+ msgstr ""
357
+ "Каждая загруженная картинка имеет свою страничку на сайте, состоящую только "
358
+ "из одной картинки. Такие страницы успешно индексируются и создают дубли. На "
359
+ "сайте могут быть тысячи однотипных страниц вложений."
360
+
361
+ #: admin/pages/double-pages.php:124
362
+ msgid "Removes attachment pages and puts a redirect."
363
+ msgstr "Удаляет страницы вложений и ставит редирект на запись."
364
+
365
+ #: admin/pages/double-pages.php:132
366
+ msgid "Remove post pagination"
367
+ msgstr "Удалить постраничную навигацию записей"
368
+
369
+ #: admin/pages/double-pages.php:133
370
+ #, php-format
371
+ msgid ""
372
+ "In WordPress, any post can be divided into parts (pages), each part will "
373
+ "have its own address. But this functionality is rarely used, but it can "
374
+ "create trouble for you. For example, you can add a number to the address of "
375
+ "any entry of your blog, %s - the post itself will open, which will be a "
376
+ "duplicate. You can substitute any number."
377
+ msgstr ""
378
+ "В WordPress любое содержание можно разделить на части (страницы), каждая "
379
+ "часть будет иметь свой собственный адрес. Эта функциональность используется "
380
+ "редко, но это может создать проблемы для вас. Например вы можете добавить "
381
+ "номер в адрес любой записи вашего блога, %s - откроет текущую страницу, "
382
+ "которая будет дублироваться."
383
+
384
+ #: admin/pages/double-pages.php:133
385
+ #, php-format
386
+ msgid "Removes the pagination from the post and puts a redirect. Example: %s"
387
+ msgstr ""
388
+ "Удаление постраничную навигацию из записи и устанавливет перенаправление. "
389
+ "Пример: %s"
390
+
391
+ #: admin/pages/double-pages.php:141
392
+ msgid "Remove ?replytocom"
393
+ msgstr "Удалить ?replytocom"
394
+
395
+ #: admin/pages/double-pages.php:142
396
+ #, php-format
397
+ msgid ""
398
+ "WordPress adds %s to the link \"Reply\" in the comments, if you use "
399
+ "hierarchical comments."
400
+ msgstr ""
401
+ "WordPress добавляет %s к ссылке «Ответ» в комментариях, если вы используете "
402
+ "иерархические комментарии."
403
+
404
+ #: admin/pages/double-pages.php:142
405
+ msgid "?relpytocom remove and and puts a redirect."
406
+ msgstr "Удаляет ?relpytocom и ставит перенаправление."
407
+
408
+ #: admin/pages/general.php:74
409
+ msgid "On this settings page, you can optimize the source code of the page."
410
+ msgstr ""
411
+ "На этой странице настроек вы можете оптимизировать исходный код страницы."
412
+
413
+ #: admin/pages/general.php:98
414
+ msgid "Remove REST API Links"
415
+ msgstr "Отключить Rest API"
416
+
417
+ #: admin/pages/general.php:99
418
+ msgid ""
419
+ "The WordPress REST API provides API endpoints for WordPress data types that "
420
+ "allow developers to interact with sites remotely by sending and receiving "
421
+ "JSON (JavaScript Object Notation) objects. However, a lot of sites don’t use "
422
+ "this, and therefore in most cases, it is just unnecessary code."
423
+ msgstr ""
424
+ "WordPress REST API предоставляет API для работы с WordPress данными, это "
425
+ "позволяет разработчикам взаимодействовать с сайтами удаленно, посредством "
426
+ "отправки и получения данных в формате JSON (JavaScript Object Notation). "
427
+ "Однако многие сайты не используют это, и поэтому в большинстве случаев, это "
428
+ "только ненужный код."
429
+
430
+ #: admin/pages/general.php:99
431
+ msgid ""
432
+ "Removes REST API link tag from the front end and the REST API header link "
433
+ "from page requests."
434
+ msgstr "Отключает REST API и удаляет все ссылки из исходного кода страницы."
435
+
436
+ #: admin/pages/general.php:107
437
+ msgid "Disable Emojis"
438
+ msgstr "Отключить Emojis (эмоции)"
439
+
440
+ #: admin/pages/general.php:108
441
+ msgid ""
442
+ "Emojis are fun and all, but if you are aren’t using them they actually load "
443
+ "a JavaScript file (wp-emoji-release.min.js) on every page of your website. "
444
+ "For a lot of businesses, this is not needed and simply adds load time to "
445
+ "your site. So we recommend disabling this."
446
+ msgstr ""
447
+ "Emojis это смайлы (эмоции), если вы не используете их на своем сайте, в "
448
+ "исходном коде страницы будет загружаться JavaScript файл (wp-emoji-release."
449
+ "min.js), на каждой странице вашего веб-сайта. Для многих сайтов это не "
450
+ "требуется и просто увеличивает время загрузки страницы. Поэтому мы "
451
+ "рекомендуем отключить это."
452
+
453
+ #: admin/pages/general.php:108
454
+ msgid "Removes WordPress Emojis JavaScript file (wp-emoji-release.min.js)."
455
+ msgstr "Удаляет код Emojis из исходного кода страницы"
456
+
457
+ #: admin/pages/general.php:116
458
+ msgid "Remove jQuery Migrate"
459
+ msgstr "Удалить jQuery Migrate"
460
+
461
+ #: admin/pages/general.php:117
462
+ msgid ""
463
+ "They started adding jQuery migrate in WordPress 3.6. Most up-to-date "
464
+ "frontend code and plugins don’t require jquery-migrate.min.js. In most "
465
+ "cases, this simply adds unnecessary load to your site. You can see this "
466
+ "running if you launch Chrome Devtools console."
467
+ msgstr ""
468
+ "jQuery миграция появилась в WordPress 3.6. Большинство современных веб-"
469
+ "интерфейсов и плагинов не требуют jquery-migrate.min.js. В большинстве "
470
+ "случаев это просто ненужная нагрузка на ваш сайт. "
471
+
472
+ #: admin/pages/general.php:117
473
+ msgid "Removes jQuery Migrate JavaScript file (jquery-migrate.min.js)."
474
+ msgstr "Удаляет подключаемый файл (jquery-migrate.min.js)."
475
+
476
+ #: admin/pages/general.php:117
477
+ msgid "Warning! If there is a broke on your site, disable this option!"
478
+ msgstr ""
479
+ "Предупреждение! Если у вас появились проблемы в работе сайта или плагинов, "
480
+ "отключите эту опцию!"
481
+
482
+ #: admin/pages/general.php:125
483
+ msgid "Disable Embeds"
484
+ msgstr "Отключить Embeds"
485
+
486
+ #: admin/pages/general.php:126
487
+ msgid ""
488
+ "Embeds were released with WordPress 4.4. This is basically the magic that "
489
+ "auto converts your YouTube videos, Tweets, and URLs into pretty previews "
490
+ "while you are editing. However, this actually loads a JavaScript file (wp-"
491
+ "embed.min.js) on every page of your website. If you don’t care about the "
492
+ "auto converting preview (which we don’t), you can disable this across your "
493
+ "site."
494
+ msgstr ""
495
+ "Встраиваемые объекты были добавлены в WordPress 4.4. Эта функция "
496
+ "автоматически преобразуют YouTube, Tweets, и URL-адреса в объекты для "
497
+ "удобного просмотра (плеер, картинки и т.д.). Для того, чтобы объекты "
498
+ "автоматически преобразовывались на вашем сайте, на каждой странице "
499
+ "подключается код JavaScript (wp-embed.min.js). Если вы не используете "
500
+ "функции автоматического преобразования встраиваемых объектов, то можете "
501
+ "отключить эту функцию."
502
+
503
+ #: admin/pages/general.php:126
504
+ msgid "Removes WordPress Embed JavaScript file (wp-embed.min.js)"
505
+ msgstr ""
506
+ "Удаляет JavaScript код отвечающий за встраиваемые объекты (wp-embed.min.js)"
507
+
508
+ #: admin/pages/general.php:134
509
+ msgid "Remove dns-prefetch"
510
+ msgstr "Удалить dns-prefetch"
511
+
512
+ #: admin/pages/general.php:135
513
+ #, php-format
514
+ msgid ""
515
+ "Since version 4.6.1 in WordPress there are new links in the section %s this "
516
+ "type of: "
517
+ msgstr ""
518
+ "Начиная с версии 4.6.1 в WordPress появляются новые ссылки в секции %s "
519
+ "пример:"
520
+
521
+ #: admin/pages/general.php:135
522
+ #, php-format
523
+ msgid "Removes dns-prefetch links from the %s section"
524
+ msgstr "Удаляет тег link dns-prefetch из секции %s"
525
+
526
+ #: admin/pages/general.php:142
527
+ msgid "Remove RSD Link"
528
+ msgstr "Удаляет RSD ссылку"
529
+
530
+ #: admin/pages/general.php:143
531
+ msgid ""
532
+ "The above link is used by blog clients. If you edit your site from your "
533
+ "browser then you don’t need this. It is also used by some 3rd party "
534
+ "applications that utilize XML-RPC requests. In most cases, this is just "
535
+ "unnecessary code."
536
+ msgstr ""
537
+ "Эта ссылка используется клиентами блога. Если вы редактируете сайт из вашего "
538
+ "браузера, то вам не нужно это. Она также используется в некоторых "
539
+ "приложениях, которые используют XML-RPC-запросы. В большинстве случаев это "
540
+ "только ненужный код."
541
+
542
+ #: admin/pages/general.php:143
543
+ msgid "Remove RSD (Real Simple Discovery) link tag."
544
+ msgstr "Удаляет RSD link тег"
545
+
546
+ #: admin/pages/general.php:151
547
+ msgid "Remove wlwmanifest Link"
548
+ msgstr "Удалить wlwmanifest Link"
549
+
550
+ #: admin/pages/general.php:152
551
+ msgid ""
552
+ "This link is actually used by Windows Live Writer. If you don’t know use "
553
+ "Windows Live Writer, which we are guessing you don’t, this is just "
554
+ "unnecessary code."
555
+ msgstr ""
556
+ "Эта ссылка используется фактически Windows Live Writer. Если вы не знаете, "
557
+ "как использовать Windows Live Writer, то это только ненужный код."
558
+
559
+ #: admin/pages/general.php:152
560
+ msgid "Remove wlwmanifest (Windows Live Writer) link tag."
561
+ msgstr "Удаляет тег link wlwmanifest (Windows Live Writer)."
562
+
563
+ #: admin/pages/general.php:160
564
+ msgid "Remove Shortlink"
565
+ msgstr "Удалить короткие ссылки"
566
+
567
+ #: admin/pages/general.php:161
568
+ #, php-format
569
+ msgid ""
570
+ "By default, the following tag shows up in every WordPress install. %s This "
571
+ "is used for a shortlink to your pages and posts. However, if you are already "
572
+ "using pretty permalinks, such as domain.com/post, then there is no reason to "
573
+ "keep this, it is just unnecessary code."
574
+ msgstr ""
575
+ "По умолчанию следующий тег печатается на каждой странице ваших записей и "
576
+ "страниц. %s Это используется, как короткая ссылка на вашу статью. Если вы "
577
+ "используете постоянные ссылки, то это не нужный код."
578
+
579
+ #: admin/pages/general.php:161
580
+ msgid "Remove Shortlink link tag."
581
+ msgstr "Удаляет тег link shortlink."
582
+
583
+ #: admin/pages/general.php:169
584
+ msgid "Remove links to previous, next post"
585
+ msgstr "Удалить ссылки следующая, предыдущая запись"
586
+
587
+ #: admin/pages/general.php:170
588
+ msgid ""
589
+ "If you use Wordpress as a CMS, then you can delete these links, they can "
590
+ "only come in handy for a blog."
591
+ msgstr ""
592
+ "Если вы используете Wordpress как CMS (а не блог), то вы можете удалить эти "
593
+ "ссылки, но для блога они могут быть полезны."
594
+
595
+ #: admin/pages/general.php:170
596
+ msgid ""
597
+ "Remove the previous and next post links within the wp_head of your wordpress "
598
+ "theme."
599
+ msgstr ""
600
+ "Удаляет ссылки предидущая и следующая запись в head вашей темы wordpress."
601
+
602
+ #: admin/pages/general.php:178
603
+ msgid "Remove .recentcomments styles"
604
+ msgstr "Удалить стили .recentcomments"
605
+
606
+ #: admin/pages/general.php:179
607
+ msgid ""
608
+ "WP by default for the widget \"recent comments\" prescribes in the code "
609
+ "styles that are almost impossible to change, because to them apply! "
610
+ "important."
611
+ msgstr ""
612
+ "Wordpress по умолчанию для виджета \"Последние комментари\" прописывает в "
613
+ "стилях код, которые почти невозможно изменить, потому что к ним применяются "
614
+ "значение !important."
615
+
616
+ #: admin/pages/general.php:179
617
+ msgid "Removes .recentcomments styles from head section."
618
+ msgstr "Удаляет .recentcomments стили из head секции."
619
+
620
+ #: admin/pages/general.php:187
621
+ msgid "HTML minify"
622
+ msgstr "Html сжатие"
623
+
624
+ #: admin/pages/general.php:188
625
+ msgid ""
626
+ "Reduces the weight of the page by removing line breaks, tabs, spaces, etc."
627
+ msgstr ""
628
+ "Уменьшает вес страницы путем удаления разрывов строк, вкладок, пробелов и т. "
629
+ "Д."
630
+
631
+ #: admin/pages/general.php:188
632
+ msgid "Minify pages."
633
+ msgstr "Минимизировать страницы."
634
+
635
+ #: admin/pages/quick-start.php:80
636
+ msgid ""
637
+ "On this page you can quickly configure the plug-in without going into "
638
+ "details."
639
+ msgstr ""
640
+ "На этой странице вы можете быстро настроить плагин, не вдаваясь в "
641
+ "подробности."
642
+
643
+ #: admin/pages/quick-start.php:174
644
+ msgid "Recommended Mode"
645
+ msgstr "Рекомендуемый режим"
646
+
647
+ #: admin/pages/quick-start.php:175
648
+ msgid "Code Clearing"
649
+ msgstr "Очистка кода"
650
+
651
+ #: admin/pages/quick-start.php:176
652
+ msgid "Security"
653
+ msgstr "Безопасность"
654
+
655
+ #: admin/pages/quick-start.php:177
656
+ msgid "Seo optimization"
657
+ msgstr "Оптимизация SEO"
658
+
659
+ #: admin/pages/quick-start.php:178
660
+ msgid "Reset all settings"
661
+ msgstr "Сбросить все настройки"
662
+
663
+ #: admin/pages/quick-start.php:185
664
+ msgid "Settings successfully updated!"
665
+ msgstr "Настройки успешно обновлены!"
666
+
667
+ #: admin/pages/quick-start.php:188
668
+ msgid ""
669
+ "During the setup, an unknown error occurred, please try again or contact the "
670
+ "plug-in support."
671
+ msgstr ""
672
+ "Во время установки произошла неизвестная ошибка, повторите попытку или "
673
+ "обратитесь в службу поддержки плагинов."
674
+
675
+ #: admin/pages/quick-start.php:191
676
+ msgid ""
677
+ "This is the quick plug-in setup mode. Use it if you do not want to "
678
+ "understand the settings or do not understand what settings you need to use."
679
+ msgstr ""
680
+ "Это режим быстрой настройки плагина. Используйте его, если вы не хотите "
681
+ "разбираться в настройках или не понимаете, какие настройки вам нужны."
682
+
683
+ #: admin/pages/quick-start.php:192
684
+ msgid "Select mode"
685
+ msgstr "Выберите режим"
686
+
687
+ #: admin/pages/quick-start.php:194
688
+ msgid ""
689
+ "After selecting the mode, the plug-in automatically activates the necessary "
690
+ "settings for the mode."
691
+ msgstr ""
692
+ "Выбрав режим, плагин автоматически активирует необходимые настройки, для "
693
+ "выполнения этого режима."
694
+
695
+ #: admin/pages/quick-start.php:202
696
+ msgid "Ok"
697
+ msgstr "Принять"
698
+
699
+ #: admin/pages/quick-start.php:203
700
+ msgid "Cancel"
701
+ msgstr "Отмена"
702
+
703
+ #: admin/pages/quick-start.php:213
704
+ msgid ""
705
+ "If you faced with any issues, please follow the steps below to get quickly "
706
+ "quality support:"
707
+ msgstr ""
708
+ "Если вы столкнулись с какими-либо проблемами, выполните следующие действия, "
709
+ "чтобы быстро получить качественную поддержку:"
710
+
711
+ #: admin/pages/quick-start.php:216
712
+ msgid ""
713
+ "Generate a debug report which will contains inforamtion about your "
714
+ "configuratin and installed plugins"
715
+ msgstr ""
716
+ "Создайте отчет об ошибках, который будет содержать информацию о вашей "
717
+ "конфигурации и установленных плагинах."
718
+
719
+ #: admin/pages/quick-start.php:219
720
+ msgid "Generate Debug Report"
721
+ msgstr "Сгенерировать отчет об ошибках"
722
+
723
+ #: admin/pages/quick-start.php:223
724
+ msgid ""
725
+ "Send a message to <b>wordpress.webraftic@gmail.com</b> include the debug "
726
+ "report into the message body."
727
+ msgstr ""
728
+ "Отправьте ваше сообщение на <b>wordpress.webraftic@gmail.com</b>, к "
729
+ "сообщению прикрепите отчет об ошибках"
730
+
731
+ #: admin/pages/quick-start.php:226
732
+ msgid "We guarantee to respond you within 7 business day."
733
+ msgstr "Мы гарантируем ответ на ваш вопрос в течении 7 дней."
734
+
735
+ #: admin/pages/seo.php:72
736
+ msgid "This page contains important settings for SEO optimization."
737
+ msgstr "Эта страница содержит важные настройки SEO оптимизации."
738
+
739
+ #: admin/pages/seo.php:96
740
+ msgid "Automatically set the alt attribute"
741
+ msgstr "Автоматически устанавливать атрибут alt"
742
+
743
+ #: admin/pages/seo.php:97
744
+ msgid ""
745
+ "The alt attribute is mandatory, so most SEO experts say. If you missed or "
746
+ "did not fill it at all, it will be automatically assigned and will be equal "
747
+ "to the title of the article."
748
+ msgstr ""
749
+ "Атрибут alt является обязательным, поэтому большинство SEO экспертов "
750
+ "говорят. Если вы пропустили, или не заполнили его, он будет автоматически "
751
+ "задан из названия статьи."
752
+
753
+ #: admin/pages/seo.php:97
754
+ #, php-format
755
+ msgid "Replaces the %s, on attribute with an article name %s"
756
+ msgstr "Заменяет %s, на атрибут с названием статьи %s"
757
+
758
+ #: admin/pages/seo.php:105
759
+ msgid "Replace external links in comments on the JavaScript code"
760
+ msgstr "Заменить внешние ссылки в комментариях на JavaScript код"
761
+
762
+ #: admin/pages/seo.php:106
763
+ msgid ""
764
+ "Superfluous external links from comments, which can be typed from a dozen "
765
+ "and more for one article, do not bring anything good for promotion."
766
+ msgstr ""
767
+ "Внешние ссылки в комментариях, которых может быть десятки или больше на "
768
+ "одной странице, могут ухудшить продвижение вашего сайта."
769
+
770
+ #: admin/pages/seo.php:106
771
+ #, php-format
772
+ msgid "Replaces the links of this kind of %s, on links of this kind %s"
773
+ msgstr ""
774
+ "Заменяет ссылки %s, на span тег и устанавливает переход с помощью JavaScript "
775
+ "%s"
776
+
777
+ #: admin/pages/seo.php:114
778
+ msgid "Replace external links from comment authors on the JavaScript code"
779
+ msgstr "Заменить внешние ссылки от авторов комментариев на код JavaScript"
780
+
781
+ #: admin/pages/seo.php:115
782
+ msgid ""
783
+ "Up to 90 percent of comments in the blog can be left for the sake of an "
784
+ "external link. Even nofollow from page weight loss here does not help."
785
+ msgstr ""
786
+ "До 90 процентов комментариев в блоге оставляют ради внешней ссылки. Не "
787
+ "поможет даже nofollow от потери веса страницы."
788
+
789
+ #: admin/pages/seo.php:115
790
+ msgid ""
791
+ "Replaces the links of the authors of comments on the JavaScript code, it is "
792
+ "impossible to distinguish it from usual links."
793
+ msgstr ""
794
+ "Заменяет ссылки авторов комментариев на JavaScript код, его невозможно "
795
+ "отличить от обычной ссылки."
796
+
797
+ #: admin/pages/seo.php:115
798
+ msgid "In some Wordpress topics this may not work."
799
+ msgstr "В некоторых темах Wordpress это может не сработать."
800
+
801
+ #: admin/pages/seo.php:123
802
+ msgid "Create right robots.txt"
803
+ msgstr "Создайте правильный robots.txt"
804
+
805
+ #: admin/pages/seo.php:124
806
+ msgid ""
807
+ "After installation, WP does not contain a robots.txt file and create it "
808
+ "manually. We re-read about 30 different articles, instructions from Yandex "
809
+ "and Google to create the perfect robots.txt"
810
+ msgstr ""
811
+ "После установки WP не содержит файл robots.txt и создает его вручную. Мы "
812
+ "перечитывали около 30 различных статей, инструкции от Yandex и Google, чтобы "
813
+ "создать идеальный файл robots.txt"
814
+
815
+ #: admin/pages/seo.php:124
816
+ msgid "Automatically creates the perfect robots.txt file"
817
+ msgstr "Автоматически создает идеальный robots.txt"
818
+
819
+ #: admin/pages/seo.php:141
820
+ msgid "You can edit the robots.txt file in the box below:"
821
+ msgstr "Вы можете отредактировать файл robots.txt в поле ниже:"
822
+
823
+ #: admin/pages/seo.php:152
824
+ msgid "Redirect Http to Https"
825
+ msgstr "Перенаправление Http на Https"
826
+
827
+ #: admin/pages/seo.php:153
828
+ msgid ""
829
+ "If your site uses an SSL certificate, check this box to enable redirection "
830
+ "from http to https."
831
+ msgstr ""
832
+ "Если ваш сайт использует сертификат SSL, установите этот флажок, чтобы "
833
+ "включить перенаправление с http на https."
834
+
835
+ #: admin/pages/seo.php:153
836
+ msgid "Puts the redirect from http to https."
837
+ msgstr "Передает перенаправление с http на https."
838
+
839
+ #: admin/pages/seo.php:153
840
+ msgid "* Warning! Before activation, make sure your site is open https."
841
+ msgstr ""
842
+ "* Внимание! Перед активацией убедитесь, что ваш сайт открывается по https."
843
+
844
+ #: admin/pages/seo.php:159
845
+ msgid "Server headers and response"
846
+ msgstr "Заголовки серверов и ответ"
847
+
848
+ #: admin/pages/seo.php:159
849
+ msgid ""
850
+ "WordPress does not know how to give the Last Modified header in the server's "
851
+ "responses. You can do this using the settings below."
852
+ msgstr ""
853
+ "WordPress не знает, как отдать заголовок Last Modified. Вы можете сделать "
854
+ "это с помощью параметров ниже."
855
+
856
+ #: admin/pages/seo.php:171
857
+ msgid "Automatically insert the Last Modified header"
858
+ msgstr "Автоматически вставлять заголовок Last Modified"
859
+
860
+ #: admin/pages/seo.php:185
861
+ msgid "Exclude pages:"
862
+ msgstr "Исключить страницы:"
863
+
864
+ #: admin/pages/seo.php:186
865
+ #, php-format
866
+ msgid ""
867
+ "You can specify a page mask, for example: %s or %s. All pages that contain "
868
+ "the string will be excluded. Each exclude must begin with a new line."
869
+ msgstr ""
870
+ "Можно указать маску страницы, например: %s или %s. Все страницы, которые "
871
+ "содержат эти строки, будут исключены. Каждое исключение должно начинаться с "
872
+ "новой строки."
873
+
874
+ #: admin/pages/seo.php:193
875
+ msgid "Return an If-Modified-Since responce"
876
+ msgstr "Возвращать заголовок If-Modified-Since"
877
+
878
+ #: admin/pages/seo.php:204
879
+ msgid "For the Yoast SEO plugin"
880
+ msgstr "Для плагина Yoast SEO"
881
+
882
+ #: admin/pages/seo.php:204
883
+ msgid ""
884
+ "These settings will help you eliminate some problems associated with the "
885
+ "popular Yoast SEO plugin"
886
+ msgstr ""
887
+ "Эти параметры помогут вам устранить некоторые проблемы, связанные с "
888
+ "популярной Yoast SEO plugin"
889
+
890
+ #: admin/pages/seo.php:216
891
+ msgid "Remove duplicate names in breadcrumbs WP SEO by Yoast"
892
+ msgstr "Удалить дубли имен в хлебных крошках WP SEO Yoast"
893
+
894
+ #: admin/pages/seo.php:217
895
+ msgid ""
896
+ "The last element in the breadcrumbs in the Yoast SEO plugin duplicates the "
897
+ "title of the article. Some SEO-specialists consider this duplication to be "
898
+ "superfluous."
899
+ msgstr ""
900
+ "Последний элемент в хлебных крошках Yoast SEO дублирует название статьи. "
901
+ "Некоторые SEO-специалисты считают это дублирование излишним."
902
+
903
+ #: admin/pages/seo.php:217
904
+ msgid ""
905
+ "Removes duplication of the name in the breadcrumbs of the WP SEO plugin from "
906
+ "Yoast."
907
+ msgstr "Удаляет последний элемент в хлебных крошках Yoast SEO."
908
+
909
+ #: admin/pages/seo.php:225
910
+ #, php-format
911
+ msgid "Remove the tag %s from XML site map"
912
+ msgstr "Удаляет тег %s из XML карты сайта плагин Yoast SEO."
913
+
914
+ #: admin/pages/seo.php:226
915
+ msgid ""
916
+ "Yandex.Webmaster swears on a standard XML card from the plugin Yoast, tk. it "
917
+ "has a specific tag"
918
+ msgstr ""
919
+ "Яндекс вебмастер ругается на стандартной карты XML из плагина Yoast SEO, из-"
920
+ "за определенного тега "
921
+
922
+ #: admin/pages/seo.php:226
923
+ #, php-format
924
+ msgid "Remove the tag %s from XML site map of the plugin Yoast SEO."
925
+ msgstr "Удаляет тег %s из XML карта сайта плагин Yoast SEO."
926
+
927
+ #: admin/pages/seo.php:226
928
+ msgid ""
929
+ "Attention! After activation, turn off the site map and enable it back to "
930
+ "regenerate it."
931
+ msgstr ""
932
+ "Внимание! После активации, выключите карту сайта и включите ее обратно, "
933
+ "чтобы обновить ее."
934
+
935
+ #: admin/pages/seo.php:226
936
+ msgid "In older versions of Yoast SEO may not work - update the plugin Yoast"
937
+ msgstr ""
938
+ "В более старых версиях Yoast SEO не может работать - обновите плагин Yoast "
939
+ "SEO"
940
+
941
+ #: admin/pages/seo.php:234
942
+ #, php-format
943
+ msgid "Remove comment from %s section"
944
+ msgstr "Удалить комментарии из секции %s"
945
+
946
+ #: admin/pages/seo.php:235
947
+ #, php-format
948
+ msgid "The Yoast SEO plugin displays a comment of the form %s in %s section"
949
+ msgstr "Yoast SEO плагин отображает комментарий формы %s в секции %s"
950
+
951
+ #: admin/pages/seo.php:235
952
+ #, php-format
953
+ msgid "Removes the Yoast SEO plugin comment of their section %s"
954
+ msgstr "Удаляет комментрии Yoast SEO из %s"
955
+
956
+ #: includes/class.core.php:393
957
+ msgid "<strong>ERROR</strong>: Wrong login or password"
958
+ msgstr "<strong>Ошибка</strong>: Неправильный логин или пароль"
959
+
960
+ #: includes/class.zip-archive.php:10
961
+ msgid "The ZipArchive class does not exist in this version of php."
962
+ msgstr "Класса ZipArchive не существует в этой версии php."
963
+
964
+ #~ msgid ""
965
+ #~ "You are using the old version of PHP, please update the version of PHP to "
966
+ #~ "5.3 and higher. You must deactivate the \"Clearfy - unused features\" "
967
+ #~ "plugin, since it will not work with the old version of php."
968
+ #~ msgstr ""
969
+ #~ "Вы используете старую версию PHP, пожалуйста, обновите версию PHP до 5.3 "
970
+ #~ "и выше. Вы должны деактивировать плагин «Clearfy - неиспользуемые "
971
+ #~ "функции», так как он не будет работать со старой версией php."
972
+
973
+ #~ msgid ""
974
+ #~ "You do not have sufficient permissions to activate plugins for this site."
975
+ #~ msgstr ""
976
+ #~ "У вас недостаточно прав для того, чтобы активировать плагины на этом "
977
+ #~ "сайте."
978
+
979
+ #~ msgid ""
980
+ #~ "* It works with the standard comment form, if in your subject the form is "
981
+ #~ "spelled out manually-most likely it will not work!"
982
+ #~ msgstr ""
983
+ #~ "* Он работает со стандартной формой комментария, если в вашем предмете "
984
+ #~ "форма изложена вручную - скорее всего, она не сработает!"
985
+
986
+ #~ msgid ""
987
+ #~ "Works with the standard comment form, if the form is manually written in "
988
+ #~ "your theme - it probably will not work!"
989
+ #~ msgstr ""
990
+ #~ "Работает со стандартной формой комментирования, если в Вашей теме форма "
991
+ #~ "прописана вручную - скорей всего не сработает!"
992
+
993
+ #~ msgid "Support"
994
+ #~ msgstr "Поддержка"
995
+
996
+ #~ msgid "Urls pack"
997
+ #~ msgstr "URL-адреса"
998
+
999
+ #~ msgid "Tasks"
1000
+ #~ msgstr "Задачи"
1001
+
1002
+ #~ msgid ""
1003
+ #~ "By default, WordPress generates all types of different RSS feeds for your "
1004
+ #~ "site. While RSS feeds can be useful if you are running a blog, businesses "
1005
+ #~ "might not always utilize these. Not every site out there has a blog.\n"
1006
+ #~ "<br><b>Clearfy</b>: Removes a link to the RSS-feed from the &lt;head&gt; "
1007
+ #~ "section, closes and puts the redirect from all RSS-feeds."
1008
+ #~ msgstr ""
1009
+ #~ "По умолчанию WordPress генерирует различные виды RSS-каналов для вашего "
1010
+ #~ "сайта. Иногда RSS-каналы могут быть полезны, если вы используете блог "
1011
+ #~ "например, но если у вас обычный одностаничник, то RSS для вас будет "
1012
+ #~ "бесполезен. <br><b>Clearfy</b>: Удаляет ссылку на RSS-канал из раздела "
1013
+ #~ "&lt;head&gt;, закрывает и ставит перенаправления от всех RSS-каналов."
1014
+
1015
+ #~ msgid ""
1016
+ #~ "Tired of spam in the comments? Do visitors leave \"blank\" comments for "
1017
+ #~ "the sake of a link to their site?\n"
1018
+ #~ "<br><b>Clearfy</b>: Removes the \"Site\" field from the comment form.\n"
1019
+ #~ "<br>--<br><span style=\"color:#dd2b19\"> * Works with the standard "
1020
+ #~ "comment form, if the form is manually written in your theme - it probably "
1021
+ #~ "will not work!</span>\n"
1022
+ #~ msgstr ""
1023
+ #~ "Надоел спам в комментариях? Посетители оставляют «пустые» комментарии "
1024
+ #~ "ради ссылки на свой сайт?\n"
1025
+ #~ "<br><b>Clearfy</b>: Убирает поле «Сайт» из формы комментирования.\n"
1026
+ #~ "<br>--<br><span style=\"color:#dd2b19\"> * Работает со стандартной формой "
1027
+ #~ "комментирования, если в Вашей теме форма прописана вручную - скорей всего "
1028
+ #~ "не сработает!</span>\n"
1029
+
1030
+ #~ msgid ""
1031
+ #~ "The first item in the toolbar goes wordpress logo and external links to "
1032
+ #~ "wordpress.org, WP forums and documentation.\n"
1033
+ #~ "\t\t<br><b>Clearfy</b>: Removes all links to wordpress.org from the "
1034
+ #~ "toolbar."
1035
+ #~ msgstr ""
1036
+ #~ "Первый элемент в панели инструментов идет логотип wordpress и внешние "
1037
+ #~ "ссылки на wordpress.org, WP форумах и документации.<br><b>Clearfy</b>: "
1038
+ #~ "удаляет все ссылки на wordpress.org с панели инструментов."
1039
+
1040
+ #~ msgid ""
1041
+ #~ "Remove meta generator <span class=\"wbcr-clearfy-recomended-text"
1042
+ #~ "\">(Recommended)</span>"
1043
+ #~ msgstr ""
1044
+ #~ "Удалить meta generator <span class=\"wbcr-clearfy-recomended-text"
1045
+ #~ "\">(рекомендуется)</span>"
1046
+
1047
+ #~ msgid ""
1048
+ #~ "Allows attacker to learn the version of WP installed on the site. This "
1049
+ #~ "meta tag has no useful function.\n"
1050
+ #~ "<br><b>Clearfy</b>: Removes the meta tag from the &lt;head&gt; section"
1051
+ #~ msgstr ""
1052
+ #~ "Позволяет злоумышленнику узнать версию Wordpress, установленую на вашем "
1053
+ #~ "сайте. Этот мета-тег не несет никакой пользы.<br><b>Clearfy</b>: удаляет "
1054
+ #~ "мета-тег из раздел &lt;head&gt;"
1055
+
1056
+ #~ msgid ""
1057
+ #~ "Hide author login <span class=\"wbcr-clearfy-recomended-text"
1058
+ #~ "\">(Recommended)</span>"
1059
+ #~ msgstr ""
1060
+ #~ "Убрать возможность узнать логин автора<span class=\"wbcr-clearfy-"
1061
+ #~ "recomended-text\">(Рекомендовано)</span>"
1062
+
1063
+ #~ msgid ""
1064
+ #~ "An attacker can find out the author's login, using a similar request to "
1065
+ #~ "get your site. mysite.com/?author=1\n"
1066
+ #~ "\t\t\t<br><b>Clearfy</b>: Sets the redirect to exclude the possibility of "
1067
+ #~ "obtaining a login."
1068
+ #~ msgstr ""
1069
+ #~ "Злоумышленник может узнать логин автора, с помощью подобного get запроса "
1070
+ #~ "mysite.com/?author=1\n"
1071
+ #~ "<br><b>Clearfy</b>: Предотвращает возможность узнать логин автора, "
1072
+ #~ "устанавливая перенаправление."
1073
+
1074
+ #~ msgid ""
1075
+ #~ "Hide errors when logging into the site <span class=\"wbcr-clearfy-"
1076
+ #~ "recomended-text\">(Recommended)</span>"
1077
+ #~ msgstr ""
1078
+ #~ "Спрятать ошибки при входе на сайт <span class=\"wbcr-clearfy-recomended-"
1079
+ #~ "text\">(Рекомендовано)</span>"
1080
+
1081
+ #~ msgid ""
1082
+ #~ "WP by default shows whether you entered a wrong login or incorrect "
1083
+ #~ "password, which allows attackers to understand if there is a certain user "
1084
+ #~ "on the site, and then start searching through the passwords.\n"
1085
+ #~ "<br><b>Clearfy</b>: Changes in the text of the error so that attackers "
1086
+ #~ "could not find the login."
1087
+ #~ msgstr ""
1088
+ #~ "Wordpress по умолчанию показывает, ввели ли вы неправильный логин или "
1089
+ #~ "неправильный пароль, что дает злоумышленникам понять, существует ли "
1090
+ #~ "определенный пользователь на сайте, а после начать перебор паролей.\n"
1091
+ #~ "<br><b>Clearfy</b>: Меняет текст ошибки так, чтобы злоумышленники не "
1092
+ #~ "смогли подобрать логин."
1093
+
1094
+ #~ msgid ""
1095
+ #~ "Disable X-Pingback <span class=\"wbcr-clearfy-recomended-text"
1096
+ #~ "\">(Recommended)</span>"
1097
+ #~ msgstr ""
1098
+ #~ "Убрать ссылку на X-Pingback и возможность спамить pingback-ами <span "
1099
+ #~ "class=\"wbcr-clearfy-recomended-text\">(Рекомендовано)</span>"
1100
+
1101
+ #~ msgid ""
1102
+ #~ "A pingback is basically an automated comment that gets created when "
1103
+ #~ "another blog links to you. A self-pingback is created when you link to an "
1104
+ #~ "article within your own blog. Pingbacks are essentially nothing more than "
1105
+ #~ "spam and simply waste resources.\n"
1106
+ #~ "\t\t<br><b>Clearfy</b>: Removes the server responses a reference to the "
1107
+ #~ "xmlrpc file."
1108
+ #~ msgstr ""
1109
+ #~ "Pingback по-существу автоматизированных комментарий, который создается, "
1110
+ #~ "когда другой блог ссылается на вас. Self-pingback создается, когда вы "
1111
+ #~ "оставили ссылку на статью в своем блоге. Pingbacks по существу являются "
1112
+ #~ "не более чем спам и пустая трата ресурсов вашего сайта.<br><b>Clearfy</"
1113
+ #~ "b>: Удаляет ссылку на xmlrpc-файл и ответ сервера."
1114
+
1115
+ #~ msgid ""
1116
+ #~ "Remove archives date <span class=\"wbcr-clearfy-recomended-text"
1117
+ #~ "\">(Recommended)</span>"
1118
+ #~ msgstr ""
1119
+ #~ "Удалить архивы дат <span class=\"wbcr-clearfy-recomended-text"
1120
+ #~ "\">(Рекомендовано)</span>"
1121
+
1122
+ #~ msgid ""
1123
+ #~ "Many duplicates in date archives. Imagine, in addition, that your article "
1124
+ #~ "will be displayed in the main and in the category, you will still receive "
1125
+ #~ "at least 3 duplicates: in archives by year, month and date, for example / "
1126
+ #~ "2016/2016/02 / / 2016/02/15.\n"
1127
+ #~ "<br><b>Clearfy</b>: Removes all pages with the date archives and puts a "
1128
+ #~ "redirect."
1129
+ #~ msgstr ""
1130
+ #~ "Огромное количество дублей в архивах дат. Представьте, кроме того, что "
1131
+ #~ "Ваша статья будет выводиться на главной и в категории, Вы еще получите "
1132
+ #~ "как минимум 3 дубля: в архивах по году, месяцу и дате, "
1133
+ #~ "например /2016/ /2016/02/ /2016/02/15.\n"
1134
+ #~ "<br><b>Clearfy</b>: Удаляет полностью архивы дат и ставит редирект."
1135
+
1136
+ #~ msgid ""
1137
+ #~ "Remove author archives <span class=\"wbcr-clearfy-recomended-text"
1138
+ #~ "\">(Recommended)</span>"
1139
+ #~ msgstr ""
1140
+ #~ "Удалить архивы автора <span class=\"wbcr-clearfy-recomended-text"
1141
+ #~ "\">(Рекомендовано)</span>"
1142
+
1143
+ #~ msgid ""
1144
+ #~ "If the site is only filled by you - a mandatory item. Allows you to get "
1145
+ #~ "rid of duplicates on user archives, for example /author/admin/.\n"
1146
+ #~ "<br><b>Clearfy</b>: Removes all pages with the author archives and puts a "
1147
+ #~ "redirect."
1148
+ #~ msgstr ""
1149
+ #~ "Если сайт заполняете только вы - это функция обязательна. Позволяет вам "
1150
+ #~ "избавиться от дубликатов страниц автора, например /author/admin /.\n"
1151
+ #~ "<br><b>Clearfy</b>: удаляет все страницы из архивов автора и ставит "
1152
+ #~ "перенаправление."
1153
+
1154
+ #~ msgid ""
1155
+ #~ "If you use tags only for the block Similar records, or do not use them at "
1156
+ #~ "all - it will be more correct to close them to avoid duplicates.\n"
1157
+ #~ "<br><b>Clearfy</b>: Removes all pages with the tag archives and puts a "
1158
+ #~ "redirect."
1159
+ #~ msgstr ""
1160
+ #~ "Если вы используете теги только для виджета \"Похожие записи\", либо не "
1161
+ #~ "используете их совсем - правильнее будет их закрыть, чтобы избежать "
1162
+ #~ "дублей.\n"
1163
+ #~ "<br><b>Clearfy</b>: Ставит редирект со страниц тегов на главную."
1164
+
1165
+ #~ msgid ""
1166
+ #~ "Remove attachment pages <span class=\"wbcr-clearfy-recomended-text"
1167
+ #~ "\">(Recommended)</span>"
1168
+ #~ msgstr ""
1169
+ #~ "Удалить страницы вложений <span class=\"wbcr-clearfy-recomended-text"
1170
+ #~ "\">(Рекомендовано)</span>"
1171
+
1172
+ #~ msgid ""
1173
+ #~ "Every of the pictures has its own page on the site. Such pages are "
1174
+ #~ "successfully indexed and create duplicates. The site can have thousands "
1175
+ #~ "of same-type attachment pages.\n"
1176
+ #~ "<br><b>Clearfy</b>: Removes attachment pages and puts a redirect."
1177
+ #~ msgstr ""
1178
+ #~ "Каждая загруженная картинка имеет свою страничку на сайте, состоящую "
1179
+ #~ "только из одной картинки. Такие страницы успешно индексируются и создают "
1180
+ #~ "дубли. На сайте могут быть тысячи однотипных страниц вложений.\n"
1181
+ #~ "<br><b>Clearfy</b>: Удаляет страницы вложений и ставит редирект на запись."
1182
+
1183
+ #~ msgid ""
1184
+ #~ "Remove post pagination <span class=\"wbcr-clearfy-recomended-text"
1185
+ #~ "\">(Recommended)</span>"
1186
+ #~ msgstr ""
1187
+ #~ "Удалить постраничную навигацию записей <span class=\"wbcr-clearfy-"
1188
+ #~ "recomended-text\">(Рекомендовано)</span>"
1189
+
1190
+ #~ msgid ""
1191
+ #~ "In WordPress, any post can be divided into parts (pages), each part will "
1192
+ #~ "have its own address. But this functionality is rarely used, but it can "
1193
+ #~ "create trouble for you. For example, you can add a number to the address "
1194
+ #~ "of any entry of your blog, /privet-mir/1/ - the post itself will open, "
1195
+ #~ "which will be a duplicate. You can substitute any number.\n"
1196
+ #~ "<br><b>Clearfy</b>: Removes the pagination from the post and puts a "
1197
+ #~ "redirect. Example: /post-name/number"
1198
+ #~ msgstr ""
1199
+ #~ "В WordPress любое содержание можно разделить на части (страницы), каждая "
1200
+ #~ "часть будет иметь свой собственный адрес. Эта функциональность "
1201
+ #~ "используется редко, но это может создать проблемы для вас. Например вы "
1202
+ #~ "можете добавить номер в адрес любой записи вашего блога, /hello-world/1/ "
1203
+ #~ "- откроет текущую страницу, которая будет дублироваться.\n"
1204
+ #~ " <br><b>Clearfy</b>: предотвращает создание пагинации для страницы и "
1205
+ #~ "ставит перенаправление на ссылки такого типа: /privet-mir/1/ "
1206
+
1207
+ #~ msgid ""
1208
+ #~ "Remove ?replytocom <span class=\"wbcr-clearfy-recomended-text"
1209
+ #~ "\">(Recommended)</span>"
1210
+ #~ msgstr ""
1211
+ #~ "Удалить ?replytocom <span class=\"wbcr-clearfy-recomended-text"
1212
+ #~ "\">(Рекомендовано)</span>"
1213
+
1214
+ #~ msgid ""
1215
+ #~ "WordPress adds ?replytocom to the link \"Reply\" in the comments, if you "
1216
+ #~ "use hierarchical comments.\n"
1217
+ #~ "<br><b>Clearfy</b>: ?relpytocom remove and and puts a redirect."
1218
+ #~ msgstr ""
1219
+ #~ "WordPress добавляет ?replytocom к ссылке «Ответ» в комментариях, если вы "
1220
+ #~ "используете иерархические комментарии.\n"
1221
+ #~ "<br><b>Clearfy</b>: удаляет ?relpytocom и ставит перенаправление."
1222
+
1223
+ #~ msgid ""
1224
+ #~ "Remove REST API Links <span class=\"wbcr-clearfy-recomended-text"
1225
+ #~ "\">(Recommended)</span>"
1226
+ #~ msgstr ""
1227
+ #~ "Удалите остальные API ссылки <span class=\"wbcr-clearfy-recomended-text"
1228
+ #~ "\">(рекомендуется)</span>"
1229
+
1230
+ #~ msgid ""
1231
+ #~ "The WordPress REST API provides API endpoints for WordPress data types "
1232
+ #~ "that allow developers to interact with sites remotely by sending and "
1233
+ #~ "receiving JSON (JavaScript Object Notation) objects. However, a lot of "
1234
+ #~ "sites don’t use this, and therefore in most cases, it is just unnecessary "
1235
+ #~ "code.\n"
1236
+ #~ "<br><b>Clearfy:</b> Removes REST API link tag from the front end and the "
1237
+ #~ "REST API header link from page requests."
1238
+ #~ msgstr ""
1239
+ #~ "WordPress REST API предоставляет API для работы с WordPress данными, это "
1240
+ #~ "позволяет разработчикам взаимодействовать с сайтами удаленно, посредством "
1241
+ #~ "отправки и получения данных в формате JSON (JavaScript Object Notation). "
1242
+ #~ "Однако многие сайты не используют это, и поэтому в большинстве случаев, "
1243
+ #~ "это только ненужный код.\n"
1244
+ #~ "<br><b>Clearfy:</b> Отключает REST API и удаляет все ссылки из исходного "
1245
+ #~ "кода страницы."
1246
+
1247
+ #~ msgid ""
1248
+ #~ "Disable Emojis <span class=\"wbcr-clearfy-recomended-text"
1249
+ #~ "\">(Recommended)</span>"
1250
+ #~ msgstr ""
1251
+ #~ "Отключить Emojis (эмоции)<span class=\"wbcr-clearfy-recomended-text"
1252
+ #~ "\">(Рекомендовано)</span>"
1253
+
1254
+ #~ msgid ""
1255
+ #~ "Emojis are fun and all, but if you are aren’t using them they actually "
1256
+ #~ "load a JavaScript file (wp-emoji-release.min.js) on every page of your "
1257
+ #~ "website. For a lot of businesses, this is not needed and simply adds load "
1258
+ #~ "time to your site. So we recommend disabling this.\n"
1259
+ #~ "<br><b>Clearfy:</b> Removes WordPress Emojis JavaScript file (wp-emoji-"
1260
+ #~ "release.min.js)."
1261
+ #~ msgstr ""
1262
+ #~ "Emojis это смайлы (эмоции), если вы не используете их на своем сайте, в "
1263
+ #~ "исходном коде страницы будет загружаться JavaScript файл (wp-emoji-"
1264
+ #~ "release.min.js), на каждой странице вашего веб-сайта. Для многих сайтов "
1265
+ #~ "это не требуется и просто увеличивает время загрузки страницы. Поэтому мы "
1266
+ #~ "рекомендуем отключить это.\n"
1267
+ #~ "<br><b>Clearfy:</b> Удаляет код Emojis из исходного кода страницы"
1268
+
1269
+ #~ msgid ""
1270
+ #~ "Remove dns-prefetch <span class=\"wbcr-clearfy-recomended-text"
1271
+ #~ "\">(Recommended)</span>"
1272
+ #~ msgstr ""
1273
+ #~ "Удалить dns-prefetch <span class=\"wbcr-clearfy-recomended-text"
1274
+ #~ "\">(Рекомендовано)</span>"
1275
+
1276
+ #~ msgid ""
1277
+ #~ "Since version 4.6.1 in WordPress there are new links in the section &lt;"
1278
+ #~ "head&gt; this type of: <code>&lt;link rel=\"dns-prefetch\" href=\"//s.w."
1279
+ #~ "org\"&gt;</code>\n"
1280
+ #~ "<br><b>Clearfy</b>: Removes dns-prefetch links from the &lt;head&gt; "
1281
+ #~ "section"
1282
+ #~ msgstr ""
1283
+ #~ "Начиная с версии 4.6.1 в WordPress появляются новые ссылки в секции &lt;"
1284
+ #~ "head&gt; пример: <code>&lt;link rel=\"dns-prefetch\" href = \"//s.w.org"
1285
+ #~ "\"&gt;</code>\n"
1286
+ #~ "<br><b>Clearfy</b>: Удаляет ссылки из секции &lt;head&gt;"
1287
+
1288
+ #~ msgid ""
1289
+ #~ "Remove RSD Link <span class=\"wbcr-clearfy-recomended-text"
1290
+ #~ "\">(Recommended)</span>"
1291
+ #~ msgstr ""
1292
+ #~ "Удаляет RSD ссылку <span class=\"wbcr-clearfy-recomended-text"
1293
+ #~ "\">(Рекомендовано)</span>"
1294
+
1295
+ #~ msgid ""
1296
+ #~ "The above link is used by blog clients. If you edit your site from your "
1297
+ #~ "browser then you don’t need this. It is also used by some 3rd party "
1298
+ #~ "applications that utilize XML-RPC requests. In most cases, this is just "
1299
+ #~ "unnecessary code.<br><code>&lt;link rel=\"EditURI\" type=\"application/rsd"
1300
+ #~ "+xml\" title=\"RSD\" href=\"https://yourdomain.com/xmlrpc.php?rsd\"&gt;</"
1301
+ #~ "code>\n"
1302
+ #~ "<br><b>Clearfy</b>: Remove RSD (Real Simple Discovery) link tag."
1303
+ #~ msgstr ""
1304
+ #~ "Эта ссылка используется клиентами блога. Если вы редактируете сайт из "
1305
+ #~ "вашего браузера, то вам не нужно это. Она также используется в некоторых "
1306
+ #~ "приложениях, которые используют XML-RPC-запросы. В большинстве случаев "
1307
+ #~ "это только ненужный код.<br> Пример: <code>&lt;link rel=\"EditURI\" type="
1308
+ #~ "\"application/rsd+xml\" title=\"RSD\" href=\"https://yourdomain.com/"
1309
+ #~ "xmlrpc.php?rsd\"&gt;</code>\n"
1310
+ #~ "<br><b>Clearfy</b>: Удаляет RSD link тег"
1311
+
1312
+ #~ msgid ""
1313
+ #~ "Remove wlwmanifest Link <span class=\"wbcr-clearfy-recomended-text"
1314
+ #~ "\">(Recommended)</span>"
1315
+ #~ msgstr ""
1316
+ #~ "Удалить wlwmanifest Link <span class=\"wbcr-clearfy-recomended-text"
1317
+ #~ "\">(рекомендуется)</span>"
1318
+
1319
+ #~ msgid ""
1320
+ #~ "<code>&lt;link rel=\"wlwmanifest\" type=\"application/wlwmanifest+xml\" "
1321
+ #~ "href=\"https://yourdomain.com/wp-includes/wlwmanifest.xml\"&gt;</"
1322
+ #~ "code><br>This link is actually used by Windows Live Writer. If you don’t "
1323
+ #~ "know use Windows Live Writer, which we are guessing you don’t, this is "
1324
+ #~ "just unnecessary code.\n"
1325
+ #~ "<br><b>Clearfy</b>: Remove wlwmanifest (Windows Live Writer) link tag."
1326
+ #~ msgstr ""
1327
+ #~ "<code>&lt;link rel=\"wlwmanifest\" type=\"application/wlwmanifest+xml\" "
1328
+ #~ "href=\"https://yourdomain.com/wp-includes/wlwmanifest.xml\"&gt;</"
1329
+ #~ "code><br>Эта ссылка используется фактически Windows Live Writer. Если вы "
1330
+ #~ "не знаете, как использовать Windows Live Writer, то это только ненужный "
1331
+ #~ "код.\n"
1332
+ #~ "<br><b>Clearfy</b>: Удаляет тег link wlwmanifest (Windows Live Writer)."
1333
+
1334
+ #~ msgid ""
1335
+ #~ "Remove Shortlink <span class=\"wbcr-clearfy-recomended-text"
1336
+ #~ "\">(Recommended)</span>"
1337
+ #~ msgstr ""
1338
+ #~ "Удалить короткие ссылки <span class=\"wbcr-clearfy-recomended-text"
1339
+ #~ "\">(Рекомендовано)</span>"
1340
+
1341
+ #~ msgid ""
1342
+ #~ "By default, the following tag shows up in every WordPress install."
1343
+ #~ "<br><code>&lt;link rel=\"shortlink\" href=\"https://domain.com?p=712\"&gt;"
1344
+ #~ "</code><br>This is used for a shortlink to your pages and posts. However, "
1345
+ #~ "if you are already using pretty permalinks, such as domain.com/post, then "
1346
+ #~ "there is no reason to keep this, it is just unnecessary code.\n"
1347
+ #~ "<br><b>Clearfy</b>: Remove Shortlink link tag."
1348
+ #~ msgstr ""
1349
+ #~ "По умолчанию следующий тег печатается на каждой странице ваших записей и "
1350
+ #~ "страниц.<br><code>&lt;link rel=\"shortlink\" href=\"https://domain.com?"
1351
+ #~ "p=712\"&gt;</code><br>Это используется, как короткая ссылка на вашу "
1352
+ #~ "статью. Если вы используете постоянные ссылки, то это не нужный код.\n"
1353
+ #~ "<br><b>Clearfy</b>: Удаляет тег link shortlink."
1354
+
1355
+ #~ msgid ""
1356
+ #~ "Remove links to previous, next post <span class=\"wbcr-clearfy-recomended-"
1357
+ #~ "text\">(Recommended)</span>"
1358
+ #~ msgstr ""
1359
+ #~ "Удалить ссылки следующая, предыдущая запись <span class=\"wbcr-clearfy-"
1360
+ #~ "recomended-text\">(Рекомендовано)</span>"
1361
+
1362
+ #~ msgid ""
1363
+ #~ "If you use Wordpress as a CMS, then you can delete these links, they can "
1364
+ #~ "only come in handy for a blog.\n"
1365
+ #~ "<br><b>Clearfy</b>: Remove the previous and next post links within the "
1366
+ #~ "wp_head of your wordpress theme."
1367
+ #~ msgstr ""
1368
+ #~ "Если вы используете Wordpress как CMS (а не блог), то вы можете удалить "
1369
+ #~ "эти ссылки, но для блога они могут быть полезны.<br><b>Clearfy</b>: "
1370
+ #~ "Удаляет ссылки предидущая и следующая запись в head вашей темы wordpress."
1371
+
1372
+ #~ msgid ""
1373
+ #~ "Remove .recentcomments styles <span class=\"wbcr-clearfy-recomended-text"
1374
+ #~ "\">(Recommended)</span>"
1375
+ #~ msgstr ""
1376
+ #~ "Удалить стили .recentcomments <span class=\"wbcr-clearfy-recomended-text"
1377
+ #~ "\">(Рекомендовано)</span>"
1378
+
1379
+ #~ msgid ""
1380
+ #~ "WP by default for the widget \"recent comments\" prescribes in the code "
1381
+ #~ "styles that are almost impossible to change, because to them apply! "
1382
+ #~ "important.\n"
1383
+ #~ "<br><b>Clearfy</b>: Removes .recentcomments styles from head section."
1384
+ #~ msgstr ""
1385
+ #~ "Wordpress по умолчанию для виджета \"Последние комментари\" прописывает в "
1386
+ #~ "стилях код, которые почти невозможно изменить, потому что к ним "
1387
+ #~ "применяются значение !important.\n"
1388
+ #~ "<br><b>Clearfy</b>: удаляет .recentcomments стили из head секции."
1389
+
1390
+ #~ msgid ""
1391
+ #~ "Automatically set the alt attribute <span class=\"wbcr-clearfy-recomended-"
1392
+ #~ "text\">(Recommended)</span>"
1393
+ #~ msgstr ""
1394
+ #~ "Автоматически устанавливать атрибут alt <span class=\"wbcr-clearfy-"
1395
+ #~ "recomended-text\">(Рекомендовано)</span>"
1396
+
1397
+ #~ msgid ""
1398
+ #~ "The alt attribute is mandatory, so most SEO experts say. If you missed or "
1399
+ #~ "did not fill it at all, it will be automatically assigned and will be "
1400
+ #~ "equal to the title of the article.\n"
1401
+ #~ "\t\t\t\t<br><b>Clearfy</b>: Replaces the <code>&lt;img scr=\"\" alt="
1402
+ #~ "\"\"&gt;</code>, on attribute with an article name <code>&lt;img scr=\"\" "
1403
+ #~ "alt=\"Hello world\"&gt;</code>"
1404
+ #~ msgstr ""
1405
+ #~ "Атрибут alt является обязательным, поэтому большинство SEO экспертов "
1406
+ #~ "говорят. Если вы пропустили, или не заполнили его, он будет автоматически "
1407
+ #~ "задан из названия статьи.\n"
1408
+ #~ "<br><b>Clearfy</b>: Заменяет <code>&lt;img scr=\"\" alt=\"\"&gt;</code>, "
1409
+ #~ "на атрибут с названием статьи <code>&lt;img scr=\"\" alt=\"Hello world"
1410
+ #~ "\"&gt;</code>"
1411
+
1412
+ #~ msgid ""
1413
+ #~ "Replace external links in comments on the JavaScript code <span class="
1414
+ #~ "\"wbcr-clearfy-recomended-text\">(Recommended)</span>"
1415
+ #~ msgstr ""
1416
+ #~ "Заменить внешние ссылки в комментариях на JavaScript код <span class="
1417
+ #~ "\"wbcr-clearfy-recomended-text\">(Рекомендовано)</span>"
1418
+
1419
+ #~ msgid ""
1420
+ #~ "Superfluous external links from comments, which can be typed from a dozen "
1421
+ #~ "and more for one article, do not bring anything good for promotion.\n"
1422
+ #~ "<br><b>Clearfy</b>: Replaces the links of this kind of <code>&lt;a href="
1423
+ #~ "\"http://yourdomain.com\" rel=\"nofollow\"&gt;example&lt;/a&gt;</code>, "
1424
+ #~ "on links of this kind <code>&lt;span class=\"wbcr-clearfy-pseoudo-link\" "
1425
+ #~ "data-uri=\"http://yourdomain.com\"&gt;example&lt;/span&gt;</code>"
1426
+ #~ msgstr ""
1427
+ #~ "Внешние ссылки в комментариях, которых может быть десятки или больше на "
1428
+ #~ "одной странице, могут ухудшить продвижение вашего сайта.\n"
1429
+ #~ "\n"
1430
+ #~ "<br><b>Clearfy</b>: Заменяет ссылки <code>&lt;a href=\"http://yourdomain."
1431
+ #~ "com\" rel=\"nofollow\"&gt;example&lt;/a&gt;</code> , на span тег и "
1432
+ #~ "устанавливает переход с помощью JavaScript<code>&lt;span class=\"wbcr-"
1433
+ #~ "clearfy-pseoudo-link\" data-uri=\"http://yourdomain.com\"&gt;example&lt;/"
1434
+ #~ "span&gt;</code>"
1435
+
1436
+ #~ msgid ""
1437
+ #~ "Replace external links from comment authors on the JavaScript code <span "
1438
+ #~ "class=\"wbcr-clearfy-recomended-text\">(Recommended)</span>"
1439
+ #~ msgstr ""
1440
+ #~ "Заменить внешние ссылки от авторов комментариев на код JavaScript <span "
1441
+ #~ "class=\"wbcr-clearfy-recomended-text\">(Recommended)</span>"
1442
+
1443
+ #~ msgid ""
1444
+ #~ "Up to 90 percent of comments in the blog can be left for the sake of an "
1445
+ #~ "external link. Even nofollow from page weight loss here does not help.\n"
1446
+ #~ "<br><b>Clearfy</b>: Replaces the links of the authors of comments on the "
1447
+ #~ "JavaScript code, it is impossible to distinguish it from usual links.\n"
1448
+ #~ "<br>--<br><i>In some Wordpress topics this may not work.</i>"
1449
+ #~ msgstr ""
1450
+ #~ "До 90 процентов комментариев в блоге оставляют ради внешней ссылки. Не "
1451
+ #~ "поможет даже nofollow от потери веса страницы.\n"
1452
+ #~ "<br><b>Clearfy</b>: Заменяет ссылки авторов комментариев на JavaScript "
1453
+ #~ "код, его невозможно отличить от обычной ссылки.\n"
1454
+ #~ "<br>--<br><i>В некоторых темах Wordpress это может не сработать.</i>"
1455
+
1456
+ #~ msgid ""
1457
+ #~ "Automatically insert the Last Modified header <span class=\"wbcr-clearfy-"
1458
+ #~ "recomended-text\">(Recommended)</span>"
1459
+ #~ msgstr ""
1460
+ #~ "Автоматически вставлять заголовок Last Modified <span class=\"wbcr-"
1461
+ #~ "clearfy-recomended-text\">(Рекомендовано)</span>"
1462
+
1463
+ #~ msgid ""
1464
+ #~ "You can specify a page mask, for example: /s= or /manager/. All pages "
1465
+ #~ "that contain the string will be excluded. Each exclude must begin with a "
1466
+ #~ "new line."
1467
+ #~ msgstr ""
1468
+ #~ "Можно указать маску страницы, например: /s = или /manager/. Все страницы, "
1469
+ #~ "которые содержат эти строки, будут исключены. Каждое исключение должно "
1470
+ #~ "начинаться с новой строки."
1471
+
1472
+ #~ msgid ""
1473
+ #~ "Return an If-Modified-Since responce <span class=\"wbcr-clearfy-"
1474
+ #~ "recomended-text\">(Recommended)</span>"
1475
+ #~ msgstr ""
1476
+ #~ "Возвращать заголовок If-Modified-Since <span class=\"wbcr-clearfy-"
1477
+ #~ "recomended-text\">(Recommended)</span>"
1478
+
1479
+ #~ msgid ""
1480
+ #~ "Remove duplicate names in breadcrumbs WP SEO by Yoast <span class=\"wbcr-"
1481
+ #~ "clearfy-recomended-text\">(Recommended)</span>"
1482
+ #~ msgstr ""
1483
+ #~ "Удалить дубли имен в хлебных крошках WP SEO Yoast <span class=\"wbcr-"
1484
+ #~ "clearfy-recomended-text\">(Рекомендовано)</span>"
1485
+
1486
+ #~ msgid ""
1487
+ #~ "The last element in the breadcrumbs in the Yoast SEO plugin duplicates "
1488
+ #~ "the title of the article. Some SEO-specialists consider this duplication "
1489
+ #~ "to be superfluous.\n"
1490
+ #~ "<br><b>Clearfy</b>: Removes duplication of the name in the breadcrumbs of "
1491
+ #~ "the WP SEO plugin from Yoast."
1492
+ #~ msgstr ""
1493
+ #~ "Последний элемент в хлебных крошках Yoast SEO дублирует название статьи. "
1494
+ #~ "Некоторые SEO-специалисты считают это дублирование излишним.\n"
1495
+ #~ "<br><b>Clearfy</b>: Удаляет последний элемент в хлебных крошках Yoast SEO."
1496
+
1497
+ #~ msgid ""
1498
+ #~ "Remove the tag &lt;image:image&gt; from XML site map <span class=\"wbcr-"
1499
+ #~ "clearfy-recomended-text\">(Recommended)</span>"
1500
+ #~ msgstr ""
1501
+ #~ "Удалить тег &lt;image:image&gt; из XML карты сайта <span class=\"wbcr-"
1502
+ #~ "clearfy-recomended-text\">(Рекомендовано)</span>"
1503
+
1504
+ #~ msgid ""
1505
+ #~ "Yandex.Webmaster swears on a standard XML card from the plugin Yoast, tk. "
1506
+ #~ "it has a specific tag &lt;image:image&gt;.\n"
1507
+ #~ "<br><b>Clearfy</b>: Remove the tag &lt;image:image&gt; from XML site map "
1508
+ #~ "of the plugin Yoast SEO.\n"
1509
+ #~ "<br>--<br><span style=\"color:#dd2b19\">Attention! After activation, turn "
1510
+ #~ "off the site map and enable it back to regenerate it.</span>\n"
1511
+ #~ "<br><span style=\"color:#dd2b19\">* In older versions of Yoast SEO may "
1512
+ #~ "not work - update the plugin Yoast</span>"
1513
+ #~ msgstr ""
1514
+ #~ "Яндекс вебмастер ругается на стандартной карты XML из плагина Yoast SEO, "
1515
+ #~ "из-за определенного тега &lt;image:image&gt;.\n"
1516
+ #~ "<br><b>Clearfy</b>: Удаляет тег &lt;image:image&gt; из XML карта сайта "
1517
+ #~ "плагин Yoast SEO.\n"
1518
+ #~ "<br>--<br><span style=\"color:#dd2b19\">Внимание! После активации, "
1519
+ #~ "выключите карту сайта и включите ее обратно, чтобы обновить ее.</span>\n"
1520
+ #~ "<br><span style=\"color:#dd2b19\">* В более старых версиях Yoast SEO не "
1521
+ #~ "может работать - обновите плагин Yoast SEO</span>"
1522
+
1523
+ #~ msgid ""
1524
+ #~ "Remove comment from &lt;head&gt; section <span class=\"wbcr-clearfy-"
1525
+ #~ "recomended-text\">(Recommended)</span>"
1526
+ #~ msgstr ""
1527
+ #~ "Удалить комментарии из секции &lt;head&gt; <span class=\"wbcr-clearfy-"
1528
+ #~ "recomended-text\">(Рекомендовано)</span>"
1529
+
1530
+ #~ msgid ""
1531
+ #~ "The Yoast SEO plugin displays a comment of the form &lt;!-- This site is "
1532
+ #~ "optimized with the Yoast SEO plugin v3.1.1 - https://yoast.com/wordpress/"
1533
+ #~ "plugins/seo/ --&gt; in &lt;head&gt; section\n"
1534
+ #~ "<br><b>Clearfy</b>: Removes the Yoast SEO plugin comment of their section "
1535
+ #~ "&lt;head&gt;."
1536
+ #~ msgstr ""
1537
+ #~ "Yoast SEO плагин отображает комментарий формы &lt;!-- This site is "
1538
+ #~ "optimized with the Yoast SEO plugin v3.1.1 - https://yoast.com/wordpress/"
1539
+ #~ "plugins/seo/ --&gt; в секции &lt;head&gt;\n"
1540
+ #~ "<br><b>Clearfy</b>: Удаляет комментрии Yoast SEO из &lt;head&gt; ."
1541
+
1542
+ #~ msgid "Exclude pages:</span>"
1543
+ #~ msgstr "</span>"
libs/factory/bootstrap/assets/flat/css/bootstrap.accordion.css ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Light Weight jQuery Accordions
3
+ */
4
+
5
+ .factory-bootstrap-329 .factory-accordion {
6
+ margin: 0 0 30px;
7
+ border-top: 1px solid #DDD;
8
+ border-right: 1px solid #DDD;
9
+ border-left: 1px solid #DDD;
10
+ -webkit-border-radius: 4px;
11
+ -moz-border-radius: 4px;
12
+ border-radius: 4px;
13
+ }
14
+ .factory-bootstrap-329 .factory-accordion > h3 {
15
+ border-bottom: 1px solid #DDD;
16
+ cursor: pointer;
17
+ padding: 8px 15px;
18
+ margin: 0;
19
+ }
20
+ .factory-bootstrap-329 .factory-accordion > div {
21
+ display: none;
22
+ margin:0;
23
+ border-bottom: 1px solid #DDD;
24
+ }
25
+ .factory-bootstrap-329 .factory-accordion-item {
26
+ display: none;
27
+ }
28
+ .factory-bootstrap-329 .inner-factory-accordion-item {
29
+ padding: 10px 0;
30
+ }
31
+ .factory-bootstrap-329 .factory-accordion > h3.active:hover {
32
+ cursor: default;
33
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.blue.css ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .btn-primary {
2
+ background: #e1a948;
3
+ border-color: #d39323;
4
+ color: white;
5
+ -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15);
6
+ box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15);
7
+ }
8
+ .factory-bootstrap-329 .btn-primary:hover,
9
+ .factory-bootstrap-329 .btn-primary:focus {
10
+ background: #db9825;
11
+ border-color: #bd831f;
12
+ color: white;
13
+ -webkit-box-shadow: inset 0 1px 0 #e8be74, 0 1px 0 rgba(0, 0, 0, 0.15);
14
+ box-shadow: inset 0 1px 0 #e8be74, 0 1px 0 rgba(0, 0, 0, 0.15);
15
+ }
16
+ .factory-bootstrap-329 .btn-primary:active {
17
+ background: #db9825;
18
+ border-color: #bd831f;
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-329 .btn-primary[disabled],
24
+ .factory-bootstrap-329 .btn-primary:disabled {
25
+ color: #d1cdc7 !important;
26
+ background: #db9825 !important;
27
+ border-color: #bd831f !important;
28
+ text-shadow: none !important;
29
+ }
30
+
31
+ .factory-bootstrap-329 .btn-group .btn.active.value {
32
+ background-color: #e1a948;
33
+ -webkit-box-shadow: inset 0 1px 2px #d39323;
34
+ box-shadow: inset 0 1px 2px #d39323;
35
+ border-top: 1px solid #d39323;
36
+ border-bottom: 1px solid #d39323;
37
+ border-left: 1px solid #d39323;
38
+ }
39
+
40
+ .factory-bootstrap-329 .pagination > .active > a,
41
+ .factory-bootstrap-329 .pagination > .active > span,
42
+ .factory-bootstrap-329 .pagination > .active > a:hover,
43
+ .factory-bootstrap-329 .pagination > .active > span:hover,
44
+ .factory-bootstrap-329 .pagination > .active > a:focus,
45
+ .factory-bootstrap-329 .pagination > .active > span:focus {
46
+ background-color: #e1a948;
47
+ border-color: #d39323;
48
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.coffee.css ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .btn-primary {
2
+ background: #c7a589;
3
+ border-color: #b78a66;
4
+ color: white;
5
+ -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15);
6
+ box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15);
7
+ }
8
+ .factory-bootstrap-329 .btn-primary:hover,
9
+ .factory-bootstrap-329 .btn-primary:focus {
10
+ background: #ba906d;
11
+ border-color: #ae7d55;
12
+ color: white;
13
+ -webkit-box-shadow: inset 0 1px 0 #d7bfac, 0 1px 0 rgba(0, 0, 0, 0.15);
14
+ box-shadow: inset 0 1px 0 #d7bfac, 0 1px 0 rgba(0, 0, 0, 0.15);
15
+ }
16
+ .factory-bootstrap-329 .btn-primary:active {
17
+ background: #ba906d;
18
+ border-color: #ae7d55;
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-329 .btn-primary[disabled],
24
+ .factory-bootstrap-329 .btn-primary:disabled {
25
+ color: #d1cbc7 !important;
26
+ background: #ba906d !important;
27
+ border-color: #ae7d55 !important;
28
+ text-shadow: none !important;
29
+ }
30
+
31
+ .factory-bootstrap-329 .btn-group .btn.active.value {
32
+ background-color: #c7a589;
33
+ -webkit-box-shadow: inset 0 1px 2px #b78a66;
34
+ box-shadow: inset 0 1px 2px #b78a66;
35
+ border-top: 1px solid #b78a66;
36
+ border-bottom: 1px solid #b78a66;
37
+ border-left: 1px solid #b78a66;
38
+ }
39
+
40
+ .factory-bootstrap-329 .pagination > .active > a,
41
+ .factory-bootstrap-329 .pagination > .active > span,
42
+ .factory-bootstrap-329 .pagination > .active > a:hover,
43
+ .factory-bootstrap-329 .pagination > .active > span:hover,
44
+ .factory-bootstrap-329 .pagination > .active > a:focus,
45
+ .factory-bootstrap-329 .pagination > .active > span:focus {
46
+ background-color: #c7a589;
47
+ border-color: #b78a66;
48
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.core.css ADDED
@@ -0,0 +1,7532 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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-329 article,
18
+ .factory-bootstrap-329 aside,
19
+ .factory-bootstrap-329 details,
20
+ .factory-bootstrap-329 figcaption,
21
+ .factory-bootstrap-329 figure,
22
+ .factory-bootstrap-329 footer,
23
+ .factory-bootstrap-329 header,
24
+ .factory-bootstrap-329 hgroup,
25
+ .factory-bootstrap-329 main,
26
+ .factory-bootstrap-329 nav,
27
+ .factory-bootstrap-329 section,
28
+ .factory-bootstrap-329 summary {
29
+ display: block;
30
+ }
31
+
32
+ .factory-bootstrap-329 audio,
33
+ .factory-bootstrap-329 canvas,
34
+ .factory-bootstrap-329 video {
35
+ display: inline-block;
36
+ }
37
+
38
+ .factory-bootstrap-329 audio:not([controls]) {
39
+ display: none;
40
+ height: 0;
41
+ }
42
+
43
+ .factory-bootstrap-329 [hidden],
44
+ .factory-bootstrap-329 template {
45
+ display: none;
46
+ }
47
+
48
+ .factory-bootstrap-329 body {
49
+ margin: 0;
50
+ }
51
+
52
+ .factory-bootstrap-329 a {
53
+ background: transparent;
54
+ }
55
+
56
+ .factory-bootstrap-329 a:focus {
57
+ outline: thin dotted;
58
+ }
59
+
60
+ .factory-bootstrap-329 a:active,
61
+ .factory-bootstrap-329 a:hover {
62
+ outline: 0;
63
+ }
64
+
65
+ .factory-bootstrap-329 h1 {
66
+ margin: 0.67em 0;
67
+ font-size: 2em;
68
+ }
69
+
70
+ .factory-bootstrap-329 abbr[title] {
71
+ border-bottom: 1px dotted;
72
+ }
73
+
74
+ .factory-bootstrap-329 b,
75
+ .factory-bootstrap-329 strong {
76
+ font-weight: bold;
77
+ }
78
+
79
+ .factory-bootstrap-329 dfn {
80
+ font-style: italic;
81
+ }
82
+
83
+ .factory-bootstrap-329 hr {
84
+ height: 0;
85
+ -moz-box-sizing: content-box;
86
+ box-sizing: content-box;
87
+ }
88
+
89
+ .factory-bootstrap-329 mark {
90
+ color: #000;
91
+ background: #ff0;
92
+ }
93
+
94
+ .factory-bootstrap-329 code,
95
+ .factory-bootstrap-329 kbd,
96
+ .factory-bootstrap-329 pre,
97
+ .factory-bootstrap-329 samp {
98
+ font-family: monospace, serif;
99
+ font-size: 1em;
100
+ }
101
+
102
+ .factory-bootstrap-329 pre {
103
+ white-space: pre-wrap;
104
+ }
105
+
106
+ .factory-bootstrap-329 q {
107
+ quotes: "\201C" "\201D" "\2018" "\2019";
108
+ }
109
+
110
+ .factory-bootstrap-329 small {
111
+ font-size: 80%;
112
+ }
113
+
114
+ .factory-bootstrap-329 sub,
115
+ .factory-bootstrap-329 sup {
116
+ position: relative;
117
+ font-size: 75%;
118
+ line-height: 0;
119
+ vertical-align: baseline;
120
+ }
121
+
122
+ .factory-bootstrap-329 sup {
123
+ top: -0.5em;
124
+ }
125
+
126
+ .factory-bootstrap-329 sub {
127
+ bottom: -0.25em;
128
+ }
129
+
130
+ .factory-bootstrap-329 img {
131
+ border: 0;
132
+ }
133
+
134
+ .factory-bootstrap-329 svg:not(:root) {
135
+ overflow: hidden;
136
+ }
137
+
138
+ .factory-bootstrap-329 figure {
139
+ margin: 0;
140
+ }
141
+
142
+ .factory-bootstrap-329 fieldset {
143
+ padding: 0.35em 0.625em 0.75em;
144
+ margin: 0 2px;
145
+ border: 1px solid #c0c0c0;
146
+ }
147
+
148
+ .factory-bootstrap-329 legend {
149
+ padding: 0;
150
+ border: 0;
151
+ }
152
+
153
+ .factory-bootstrap-329 button,
154
+ .factory-bootstrap-329 input,
155
+ .factory-bootstrap-329 select,
156
+ .factory-bootstrap-329 textarea {
157
+ margin: 0;
158
+ font-family: inherit;
159
+ font-size: 100%;
160
+ }
161
+
162
+ .factory-bootstrap-329 button,
163
+ .factory-bootstrap-329 input {
164
+ line-height: normal;
165
+ }
166
+
167
+ .factory-bootstrap-329 button,
168
+ .factory-bootstrap-329 select {
169
+ text-transform: none;
170
+ }
171
+ .factory-bootstrap-329 select {
172
+ padding-right: 4px !important;
173
+ }
174
+
175
+ .factory-bootstrap-329 button,
176
+ html .factory-bootstrap-329 input[type="button"],
177
+ .factory-bootstrap-329 input[type="reset"],
178
+ .factory-bootstrap-329 input[type="submit"] {
179
+ cursor: pointer;
180
+ -webkit-appearance: button;
181
+ }
182
+
183
+ .factory-bootstrap-329 button[disabled],
184
+ html .factory-bootstrap-329 input[disabled] {
185
+ cursor: default;
186
+ }
187
+
188
+ .factory-bootstrap-329 input[type="checkbox"],
189
+ .factory-bootstrap-329 input[type="radio"] {
190
+ padding: 0;
191
+ box-sizing: border-box;
192
+ }
193
+
194
+ .factory-bootstrap-329 input[type="search"] {
195
+ -webkit-box-sizing: content-box;
196
+ -moz-box-sizing: content-box;
197
+ box-sizing: content-box;
198
+ -webkit-appearance: textfield;
199
+ }
200
+
201
+ .factory-bootstrap-329 input[type="search"]::-webkit-search-cancel-button,
202
+ .factory-bootstrap-329 input[type="search"]::-webkit-search-decoration {
203
+ -webkit-appearance: none;
204
+ }
205
+
206
+ .factory-bootstrap-329 button::-moz-focus-inner,
207
+ .factory-bootstrap-329 input::-moz-focus-inner {
208
+ padding: 0;
209
+ border: 0;
210
+ }
211
+
212
+ .factory-bootstrap-329 textarea {
213
+ overflow: auto;
214
+ vertical-align: top;
215
+ }
216
+
217
+ .factory-bootstrap-329 table {
218
+ border-collapse: collapse;
219
+ border-spacing: 0;
220
+ }
221
+
222
+ @media print {
223
+ .factory-bootstrap-329 * {
224
+ color: #000 !important;
225
+ text-shadow: none !important;
226
+ background: transparent !important;
227
+ box-shadow: none !important;
228
+ }
229
+ .factory-bootstrap-329 a,
230
+ .factory-bootstrap-329 a:visited {
231
+ text-decoration: underline;
232
+ }
233
+ .factory-bootstrap-329 a[href]:after {
234
+ content: " (" attr(href) ")";
235
+ }
236
+ .factory-bootstrap-329 abbr[title]:after {
237
+ content: " (" attr(title) ")";
238
+ }
239
+ .factory-bootstrap-329 a[href^="javascript:"]:after,
240
+ .factory-bootstrap-329 a[href^="#"]:after {
241
+ content: "";
242
+ }
243
+ .factory-bootstrap-329 pre,
244
+ .factory-bootstrap-329 blockquote {
245
+ border: 1px solid #999;
246
+ page-break-inside: avoid;
247
+ }
248
+ .factory-bootstrap-329 thead {
249
+ display: table-header-group;
250
+ }
251
+ .factory-bootstrap-329 tr,
252
+ .factory-bootstrap-329 img {
253
+ page-break-inside: avoid;
254
+ }
255
+ .factory-bootstrap-329 img {
256
+ max-width: 100% !important;
257
+ }
258
+ @page {
259
+ margin: 2cm .5cm;
260
+ }
261
+ .factory-bootstrap-329 p,
262
+ .factory-bootstrap-329 h2,
263
+ .factory-bootstrap-329 h3 {
264
+ orphans: 3;
265
+ widows: 3;
266
+ }
267
+ .factory-bootstrap-329 h2,
268
+ .factory-bootstrap-329 h3 {
269
+ page-break-after: avoid;
270
+ }
271
+ .factory-bootstrap-329 select {
272
+ background: #fff !important;
273
+ }
274
+ .factory-bootstrap-329 .navbar {
275
+ display: none;
276
+ }
277
+ .factory-bootstrap-329 .table td,
278
+ .factory-bootstrap-329 .table th {
279
+ background-color: #fff !important;
280
+ }
281
+ .factory-bootstrap-329 .btn > .caret,
282
+ .factory-bootstrap-329 .dropup > .btn > .caret {
283
+ border-top-color: #000 !important;
284
+ }
285
+ .factory-bootstrap-329 .label {
286
+ border: 1px solid #000;
287
+ }
288
+ .factory-bootstrap-329 .table {
289
+ border-collapse: collapse !important;
290
+ }
291
+ .factory-bootstrap-329 .table-bordered th,
292
+ .factory-bootstrap-329 .table-bordered td {
293
+ border: 1px solid #ddd !important;
294
+ }
295
+ }
296
+
297
+ .factory-bootstrap-329 *,
298
+ .factory-bootstrap-329 *:before,
299
+ .factory-bootstrap-329 *:after {
300
+ -webkit-box-sizing: border-box;
301
+ -moz-box-sizing: border-box;
302
+ box-sizing: border-box;
303
+ }
304
+
305
+ html .factory-bootstrap-329 {
306
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
307
+ }
308
+
309
+ .factory-bootstrap-329 body {
310
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
311
+ font-size: 14px;
312
+ line-height: 1.428571429;
313
+ color: #333333;
314
+ background-color: #ffffff;
315
+ }
316
+
317
+ .factory-bootstrap-329 input,
318
+ .factory-bootstrap-329 button,
319
+ .factory-bootstrap-329 select,
320
+ .factory-bootstrap-329 textarea {
321
+ font-family: inherit;
322
+ font-size: inherit;
323
+ line-height: inherit;
324
+ }
325
+
326
+ .factory-bootstrap-329 img {
327
+ vertical-align: middle;
328
+ }
329
+
330
+ .factory-bootstrap-329 .img-responsive {
331
+ display: block;
332
+ height: auto;
333
+ max-width: 100%;
334
+ }
335
+
336
+ .factory-bootstrap-329 .img-rounded {
337
+ border-radius: 6px;
338
+ }
339
+
340
+ .factory-bootstrap-329 .img-thumbnail {
341
+ display: inline-block;
342
+ height: auto;
343
+ max-width: 100%;
344
+ padding: 4px;
345
+ line-height: 1.428571429;
346
+ background-color: #ffffff;
347
+ border: 1px solid #dddddd;
348
+ border-radius: 4px;
349
+ -webkit-transition: all 0.2s ease-in-out;
350
+ transition: all 0.2s ease-in-out;
351
+ }
352
+
353
+ .factory-bootstrap-329 .img-circle {
354
+ border-radius: 50%;
355
+ }
356
+
357
+ .factory-bootstrap-329 hr {
358
+ margin-top: 20px;
359
+ margin-bottom: 20px;
360
+ border: 0;
361
+ border-top: 1px solid #eeeeee;
362
+ }
363
+
364
+ .factory-bootstrap-329 .sr-only {
365
+ position: absolute;
366
+ width: 1px;
367
+ height: 1px;
368
+ padding: 0;
369
+ margin: -1px;
370
+ overflow: hidden;
371
+ clip: rect(0, 0, 0, 0);
372
+ border: 0;
373
+ }
374
+
375
+ .factory-bootstrap-329 h1,
376
+ .factory-bootstrap-329 h2,
377
+ .factory-bootstrap-329 h3,
378
+ .factory-bootstrap-329 h4,
379
+ .factory-bootstrap-329 h5,
380
+ .factory-bootstrap-329 h6,
381
+ .factory-bootstrap-329 .h1,
382
+ .factory-bootstrap-329 .h2,
383
+ .factory-bootstrap-329 .h3,
384
+ .factory-bootstrap-329 .h4,
385
+ .factory-bootstrap-329 .h5,
386
+ .factory-bootstrap-329 .h6 {
387
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
388
+ font-weight: 500;
389
+ line-height: 1.1;
390
+ color: inherit;
391
+ }
392
+
393
+ .factory-bootstrap-329 h1 small,
394
+ .factory-bootstrap-329 h2 small,
395
+ .factory-bootstrap-329 h3 small,
396
+ .factory-bootstrap-329 h4 small,
397
+ .factory-bootstrap-329 h5 small,
398
+ .factory-bootstrap-329 h6 small,
399
+ .factory-bootstrap-329 .h1 small,
400
+ .factory-bootstrap-329 .h2 small,
401
+ .factory-bootstrap-329 .h3 small,
402
+ .factory-bootstrap-329 .h4 small,
403
+ .factory-bootstrap-329 .h5 small,
404
+ .factory-bootstrap-329 .h6 small,
405
+ .factory-bootstrap-329 h1 .small,
406
+ .factory-bootstrap-329 h2 .small,
407
+ .factory-bootstrap-329 h3 .small,
408
+ .factory-bootstrap-329 h4 .small,
409
+ .factory-bootstrap-329 h5 .small,
410
+ .factory-bootstrap-329 h6 .small,
411
+ .factory-bootstrap-329 .h1 .small,
412
+ .factory-bootstrap-329 .h2 .small,
413
+ .factory-bootstrap-329 .h3 .small,
414
+ .factory-bootstrap-329 .h4 .small,
415
+ .factory-bootstrap-329 .h5 .small,
416
+ .factory-bootstrap-329 .h6 .small {
417
+ font-weight: normal;
418
+ line-height: 1;
419
+ color: #999999;
420
+ }
421
+
422
+ .factory-bootstrap-329 h1,
423
+ .factory-bootstrap-329 h2,
424
+ .factory-bootstrap-329 h3 {
425
+ margin-top: 20px;
426
+ margin-bottom: 10px;
427
+ }
428
+
429
+ .factory-bootstrap-329 h1 small,
430
+ .factory-bootstrap-329 h2 small,
431
+ .factory-bootstrap-329 h3 small,
432
+ .factory-bootstrap-329 h1 .small,
433
+ .factory-bootstrap-329 h2 .small,
434
+ .factory-bootstrap-329 h3 .small {
435
+ font-size: 65%;
436
+ }
437
+
438
+ .factory-bootstrap-329 h4,
439
+ .factory-bootstrap-329 h5,
440
+ .factory-bootstrap-329 h6 {
441
+ margin-top: 10px;
442
+ margin-bottom: 10px;
443
+ }
444
+
445
+ .factory-bootstrap-329 h4 small,
446
+ .factory-bootstrap-329 h5 small,
447
+ .factory-bootstrap-329 h6 small,
448
+ .factory-bootstrap-329 h4 .small,
449
+ .factory-bootstrap-329 h5 .small,
450
+ .factory-bootstrap-329 h6 .small {
451
+ font-size: 75%;
452
+ }
453
+
454
+ .factory-bootstrap-329 h1,
455
+ .factory-bootstrap-329 .h1 {
456
+ font-size: 36px;
457
+ }
458
+
459
+ .factory-bootstrap-329 h2,
460
+ .factory-bootstrap-329 .h2 {
461
+ font-size: 30px;
462
+ }
463
+
464
+ .factory-bootstrap-329 h3,
465
+ .factory-bootstrap-329 .h3 {
466
+ font-size: 24px;
467
+ }
468
+
469
+ .factory-bootstrap-329 h4,
470
+ .factory-bootstrap-329 .h4 {
471
+ font-size: 18px;
472
+ }
473
+
474
+ .factory-bootstrap-329 h5,
475
+ .factory-bootstrap-329 .h5 {
476
+ font-size: 14px;
477
+ }
478
+
479
+ .factory-bootstrap-329 h6,
480
+ .factory-bootstrap-329 .h6 {
481
+ font-size: 12px;
482
+ }
483
+
484
+ .factory-bootstrap-329 p {
485
+ margin: 0 0 10px;
486
+ }
487
+
488
+ .factory-bootstrap-329 .lead {
489
+ margin-bottom: 20px;
490
+ font-size: 16px;
491
+ font-weight: 200;
492
+ line-height: 1.4;
493
+ }
494
+
495
+ @media (min-width: 768px) {
496
+ .lead {
497
+ font-size: 21px;
498
+ }
499
+ }
500
+
501
+ .factory-bootstrap-329 small,
502
+ .factory-bootstrap-329 .small {
503
+ font-size: 85%;
504
+ }
505
+
506
+ .factory-bootstrap-329 cite {
507
+ font-style: normal;
508
+ }
509
+
510
+ .factory-bootstrap-329 .text-muted {
511
+ color: #999999;
512
+ }
513
+
514
+ .factory-bootstrap-329 .text-primary {
515
+ color: #428bca;
516
+ }
517
+
518
+ .factory-bootstrap-329 .text-primary:hover {
519
+ color: #3071a9;
520
+ }
521
+
522
+ .factory-bootstrap-329 .text-warning {
523
+ color: #8a6d3b;
524
+ }
525
+
526
+ .factory-bootstrap-329 .text-warning:hover {
527
+ color: #66512c;
528
+ }
529
+
530
+ .factory-bootstrap-329 .text-danger {
531
+ color: #a94442;
532
+ }
533
+
534
+ .factory-bootstrap-329 .text-danger:hover {
535
+ color: #843534;
536
+ }
537
+
538
+ .factory-bootstrap-329 .text-success {
539
+ color: #3c763d;
540
+ }
541
+
542
+ .factory-bootstrap-329 .text-success:hover {
543
+ color: #2b542c;
544
+ }
545
+
546
+ .factory-bootstrap-329 .text-info {
547
+ color: #31708f;
548
+ }
549
+
550
+ .factory-bootstrap-329 .text-info:hover {
551
+ color: #245269;
552
+ }
553
+
554
+ .factory-bootstrap-329 .text-left {
555
+ text-align: left;
556
+ }
557
+
558
+ .factory-bootstrap-329 .text-right {
559
+ text-align: right;
560
+ }
561
+
562
+ .factory-bootstrap-329 .text-center {
563
+ text-align: center;
564
+ }
565
+
566
+ .factory-bootstrap-329 .page-header {
567
+ padding-bottom: 9px;
568
+ margin: 40px 0 20px;
569
+ border-bottom: 1px solid #eeeeee;
570
+ }
571
+
572
+ .factory-bootstrap-329 ul,
573
+ .factory-bootstrap-329 ol {
574
+ margin-top: 0;
575
+ margin-bottom: 10px;
576
+ }
577
+
578
+ .factory-bootstrap-329 ul ul,
579
+ .factory-bootstrap-329 ol ul,
580
+ .factory-bootstrap-329 ul ol,
581
+ .factory-bootstrap-329 ol ol {
582
+ margin-bottom: 0;
583
+ }
584
+
585
+ .factory-bootstrap-329 .list-unstyled {
586
+ padding-left: 0;
587
+ list-style: none;
588
+ }
589
+
590
+ .factory-bootstrap-329 .list-inline {
591
+ padding-left: 0;
592
+ list-style: none;
593
+ }
594
+
595
+ .factory-bootstrap-329 .list-inline > li {
596
+ display: inline-block;
597
+ padding-right: 5px;
598
+ padding-left: 5px;
599
+ }
600
+
601
+ .factory-bootstrap-329 .list-inline > li:first-child {
602
+ padding-left: 0;
603
+ }
604
+
605
+ .factory-bootstrap-329 dl {
606
+ margin-top: 0;
607
+ margin-bottom: 20px;
608
+ }
609
+
610
+ .factory-bootstrap-329 dt,
611
+ .factory-bootstrap-329 dd {
612
+ line-height: 1.428571429;
613
+ }
614
+
615
+ .factory-bootstrap-329 dt {
616
+ font-weight: bold;
617
+ }
618
+
619
+ .factory-bootstrap-329 dd {
620
+ margin-left: 0;
621
+ }
622
+
623
+ @media (min-width: 768px) {
624
+ .dl-horizontal dt {
625
+ float: left;
626
+ width: 160px;
627
+ overflow: hidden;
628
+ clear: left;
629
+ text-align: right;
630
+ text-overflow: ellipsis;
631
+ white-space: nowrap;
632
+ }
633
+ .dl-horizontal dd {
634
+ margin-left: 180px;
635
+ }
636
+ .dl-horizontal dd:before,
637
+ .dl-horizontal dd:after {
638
+ display: table;
639
+ content: " ";
640
+ }
641
+ .dl-horizontal dd:after {
642
+ clear: both;
643
+ }
644
+ .dl-horizontal dd:before,
645
+ .dl-horizontal dd:after {
646
+ display: table;
647
+ content: " ";
648
+ }
649
+ .dl-horizontal dd:after {
650
+ clear: both;
651
+ }
652
+ }
653
+
654
+ .factory-bootstrap-329 abbr[title],
655
+ .factory-bootstrap-329 abbr[data-original-title] {
656
+ cursor: help;
657
+ border-bottom: 1px dotted #999999;
658
+ }
659
+
660
+ .factory-bootstrap-329 .initialism {
661
+ font-size: 90%;
662
+ text-transform: uppercase;
663
+ }
664
+
665
+ .factory-bootstrap-329 blockquote {
666
+ padding: 10px 20px;
667
+ margin: 0 0 20px;
668
+ border-left: 5px solid #eeeeee;
669
+ }
670
+
671
+ .factory-bootstrap-329 blockquote p {
672
+ font-size: 17.5px;
673
+ font-weight: 300;
674
+ line-height: 1.25;
675
+ }
676
+
677
+ .factory-bootstrap-329 blockquote p:last-child {
678
+ margin-bottom: 0;
679
+ }
680
+
681
+ .factory-bootstrap-329 blockquote small,
682
+ .factory-bootstrap-329 blockquote .small {
683
+ display: block;
684
+ line-height: 1.428571429;
685
+ color: #999999;
686
+ }
687
+
688
+ .factory-bootstrap-329 blockquote small:before,
689
+ .factory-bootstrap-329 blockquote .small:before {
690
+ content: '\2014 \00A0';
691
+ }
692
+
693
+ .factory-bootstrap-329 blockquote.pull-right {
694
+ padding-right: 15px;
695
+ padding-left: 0;
696
+ border-right: 5px solid #eeeeee;
697
+ border-left: 0;
698
+ }
699
+
700
+ .factory-bootstrap-329 blockquote.pull-right p,
701
+ .factory-bootstrap-329 blockquote.pull-right small,
702
+ .factory-bootstrap-329 blockquote.pull-right .small {
703
+ text-align: right;
704
+ }
705
+
706
+ .factory-bootstrap-329 blockquote.pull-right small:before,
707
+ .factory-bootstrap-329 blockquote.pull-right .small:before {
708
+ content: '';
709
+ }
710
+
711
+ .factory-bootstrap-329 blockquote.pull-right small:after,
712
+ .factory-bootstrap-329 blockquote.pull-right .small:after {
713
+ content: '\00A0 \2014';
714
+ }
715
+
716
+ .factory-bootstrap-329 blockquote:before,
717
+ .factory-bootstrap-329 blockquote:after {
718
+ content: "";
719
+ }
720
+
721
+ .factory-bootstrap-329 address {
722
+ margin-bottom: 20px;
723
+ font-style: normal;
724
+ line-height: 1.428571429;
725
+ }
726
+
727
+ .factory-bootstrap-329 code,
728
+ .factory-bootstrap-329 kbd,
729
+ .factory-bootstrap-329 pre,
730
+ .factory-bootstrap-329 samp {
731
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
732
+ }
733
+
734
+ .factory-bootstrap-329 code {
735
+ padding: 2px 4px;
736
+ font-size: 90%;
737
+ color: #c7254e;
738
+ white-space: nowrap;
739
+ background-color: #f9f2f4;
740
+ border-radius: 4px;
741
+ }
742
+
743
+ .factory-bootstrap-329 pre {
744
+ display: block;
745
+ padding: 9.5px;
746
+ margin: 0 0 10px;
747
+ font-size: 13px;
748
+ line-height: 1.428571429;
749
+ color: #333333;
750
+ word-break: break-all;
751
+ word-wrap: break-word;
752
+ background-color: #f5f5f5;
753
+ border: 1px solid #cccccc;
754
+ border-radius: 4px;
755
+ }
756
+
757
+ .factory-bootstrap-329 pre code {
758
+ padding: 0;
759
+ font-size: inherit;
760
+ color: inherit;
761
+ white-space: pre-wrap;
762
+ background-color: transparent;
763
+ border-radius: 0;
764
+ }
765
+
766
+ .factory-bootstrap-329 .pre-scrollable {
767
+ max-height: 340px;
768
+ overflow-y: scroll;
769
+ }
770
+
771
+ .factory-bootstrap-329 .container {
772
+ padding-right: 15px;
773
+ padding-left: 15px;
774
+ margin-right: auto;
775
+ margin-left: auto;
776
+ }
777
+
778
+ .factory-bootstrap-329 .container:before,
779
+ .factory-bootstrap-329 .container:after {
780
+ display: table;
781
+ content: " ";
782
+ }
783
+
784
+ .factory-bootstrap-329 .container:after {
785
+ clear: both;
786
+ }
787
+
788
+ .factory-bootstrap-329 .container:before,
789
+ .factory-bootstrap-329 .container:after {
790
+ display: table;
791
+ content: " ";
792
+ }
793
+
794
+ .factory-bootstrap-329 .container:after {
795
+ clear: both;
796
+ }
797
+
798
+ @media (min-width: 768px) {
799
+ .container {
800
+ width: 750px;
801
+ }
802
+ }
803
+
804
+ @media (min-width: 992px) {
805
+ .container {
806
+ width: 970px;
807
+ }
808
+ }
809
+
810
+ @media (min-width: 1200px) {
811
+ .container {
812
+ width: 1170px;
813
+ }
814
+ }
815
+
816
+ .factory-bootstrap-329 .row {
817
+ margin-right: -15px;
818
+ margin-left: -15px;
819
+ }
820
+
821
+ .factory-bootstrap-329 .row:before,
822
+ .factory-bootstrap-329 .row:after {
823
+ display: table;
824
+ content: " ";
825
+ }
826
+
827
+ .factory-bootstrap-329 .row:after {
828
+ clear: both;
829
+ }
830
+
831
+ .factory-bootstrap-329 .row:before,
832
+ .factory-bootstrap-329 .row:after {
833
+ display: table;
834
+ content: " ";
835
+ }
836
+
837
+ .factory-bootstrap-329 .row:after {
838
+ clear: both;
839
+ }
840
+
841
+ .factory-bootstrap-329 .col-xs-1,
842
+ .factory-bootstrap-329 .col-sm-1,
843
+ .factory-bootstrap-329 .col-md-1,
844
+ .factory-bootstrap-329 .col-lg-1,
845
+ .factory-bootstrap-329 .col-xs-2,
846
+ .factory-bootstrap-329 .col-sm-2,
847
+ .factory-bootstrap-329 .col-md-2,
848
+ .factory-bootstrap-329 .col-lg-2,
849
+ .factory-bootstrap-329 .col-xs-3,
850
+ .factory-bootstrap-329 .col-sm-3,
851
+ .factory-bootstrap-329 .col-md-3,
852
+ .factory-bootstrap-329 .col-lg-3,
853
+ .factory-bootstrap-329 .col-xs-4,
854
+ .factory-bootstrap-329 .col-sm-4,
855
+ .factory-bootstrap-329 .col-md-4,
856
+ .factory-bootstrap-329 .col-lg-4,
857
+ .factory-bootstrap-329 .col-xs-5,
858
+ .factory-bootstrap-329 .col-sm-5,
859
+ .factory-bootstrap-329 .col-md-5,
860
+ .factory-bootstrap-329 .col-lg-5,
861
+ .factory-bootstrap-329 .col-xs-6,
862
+ .factory-bootstrap-329 .col-sm-6,
863
+ .factory-bootstrap-329 .col-md-6,
864
+ .factory-bootstrap-329 .col-lg-6,
865
+ .factory-bootstrap-329 .col-xs-7,
866
+ .factory-bootstrap-329 .col-sm-7,
867
+ .factory-bootstrap-329 .col-md-7,
868
+ .factory-bootstrap-329 .col-lg-7,
869
+ .factory-bootstrap-329 .col-xs-8,
870
+ .factory-bootstrap-329 .col-sm-8,
871
+ .factory-bootstrap-329 .col-md-8,
872
+ .factory-bootstrap-329 .col-lg-8,
873
+ .factory-bootstrap-329 .col-xs-9,
874
+ .factory-bootstrap-329 .col-sm-9,
875
+ .factory-bootstrap-329 .col-md-9,
876
+ .factory-bootstrap-329 .col-lg-9,
877
+ .factory-bootstrap-329 .col-xs-10,
878
+ .factory-bootstrap-329 .col-sm-10,
879
+ .factory-bootstrap-329 .col-md-10,
880
+ .factory-bootstrap-329 .col-lg-10,
881
+ .factory-bootstrap-329 .col-xs-11,
882
+ .factory-bootstrap-329 .col-sm-11,
883
+ .factory-bootstrap-329 .col-md-11,
884
+ .factory-bootstrap-329 .col-lg-11,
885
+ .factory-bootstrap-329 .col-xs-12,
886
+ .factory-bootstrap-329 .col-sm-12,
887
+ .factory-bootstrap-329 .col-md-12,
888
+ .factory-bootstrap-329 .col-lg-12 {
889
+ position: relative;
890
+ min-height: 1px;
891
+ padding-right: 15px;
892
+ padding-left: 15px;
893
+ }
894
+
895
+ .factory-bootstrap-329 .col-xs-1,
896
+ .factory-bootstrap-329 .col-xs-2,
897
+ .factory-bootstrap-329 .col-xs-3,
898
+ .factory-bootstrap-329 .col-xs-4,
899
+ .factory-bootstrap-329 .col-xs-5,
900
+ .factory-bootstrap-329 .col-xs-6,
901
+ .factory-bootstrap-329 .col-xs-7,
902
+ .factory-bootstrap-329 .col-xs-8,
903
+ .factory-bootstrap-329 .col-xs-9,
904
+ .factory-bootstrap-329 .col-xs-10,
905
+ .factory-bootstrap-329 .col-xs-11,
906
+ .factory-bootstrap-329 .col-xs-12 {
907
+ float: left;
908
+ }
909
+
910
+ .factory-bootstrap-329 .col-xs-12 {
911
+ width: 100%;
912
+ }
913
+
914
+ .factory-bootstrap-329 .col-xs-11 {
915
+ width: 91.66666666666666%;
916
+ }
917
+
918
+ .factory-bootstrap-329 .col-xs-10 {
919
+ width: 83.33333333333334%;
920
+ }
921
+
922
+ .factory-bootstrap-329 .col-xs-9 {
923
+ width: 75%;
924
+ }
925
+
926
+ .factory-bootstrap-329 .col-xs-8 {
927
+ width: 66.66666666666666%;
928
+ }
929
+
930
+ .factory-bootstrap-329 .col-xs-7 {
931
+ width: 58.333333333333336%;
932
+ }
933
+
934
+ .factory-bootstrap-329 .col-xs-6 {
935
+ width: 50%;
936
+ }
937
+
938
+ .factory-bootstrap-329 .col-xs-5 {
939
+ width: 41.66666666666667%;
940
+ }
941
+
942
+ .factory-bootstrap-329 .col-xs-4 {
943
+ width: 33.33333333333333%;
944
+ }
945
+
946
+ .factory-bootstrap-329 .col-xs-3 {
947
+ width: 25%;
948
+ }
949
+
950
+ .factory-bootstrap-329 .col-xs-2 {
951
+ width: 16.666666666666664%;
952
+ }
953
+
954
+ .factory-bootstrap-329 .col-xs-1 {
955
+ width: 8.333333333333332%;
956
+ }
957
+
958
+ .factory-bootstrap-329 .col-xs-pull-12 {
959
+ right: 100%;
960
+ }
961
+
962
+ .factory-bootstrap-329 .col-xs-pull-11 {
963
+ right: 91.66666666666666%;
964
+ }
965
+
966
+ .factory-bootstrap-329 .col-xs-pull-10 {
967
+ right: 83.33333333333334%;
968
+ }
969
+
970
+ .factory-bootstrap-329 .col-xs-pull-9 {
971
+ right: 75%;
972
+ }
973
+
974
+ .factory-bootstrap-329 .col-xs-pull-8 {
975
+ right: 66.66666666666666%;
976
+ }
977
+
978
+ .factory-bootstrap-329 .col-xs-pull-7 {
979
+ right: 58.333333333333336%;
980
+ }
981
+
982
+ .factory-bootstrap-329 .col-xs-pull-6 {
983
+ right: 50%;
984
+ }
985
+
986
+ .factory-bootstrap-329 .col-xs-pull-5 {
987
+ right: 41.66666666666667%;
988
+ }
989
+
990
+ .factory-bootstrap-329 .col-xs-pull-4 {
991
+ right: 33.33333333333333%;
992
+ }
993
+
994
+ .factory-bootstrap-329 .col-xs-pull-3 {
995
+ right: 25%;
996
+ }
997
+
998
+ .factory-bootstrap-329 .col-xs-pull-2 {
999
+ right: 16.666666666666664%;
1000
+ }
1001
+
1002
+ .factory-bootstrap-329 .col-xs-pull-1 {
1003
+ right: 8.333333333333332%;
1004
+ }
1005
+
1006
+ .factory-bootstrap-329 .col-xs-pull-0 {
1007
+ right: 0;
1008
+ }
1009
+
1010
+ .factory-bootstrap-329 .col-xs-push-12 {
1011
+ left: 100%;
1012
+ }
1013
+
1014
+ .factory-bootstrap-329 .col-xs-push-11 {
1015
+ left: 91.66666666666666%;
1016
+ }
1017
+
1018
+ .factory-bootstrap-329 .col-xs-push-10 {
1019
+ left: 83.33333333333334%;
1020
+ }
1021
+
1022
+ .factory-bootstrap-329 .col-xs-push-9 {
1023
+ left: 75%;
1024
+ }
1025
+
1026
+ .factory-bootstrap-329 .col-xs-push-8 {
1027
+ left: 66.66666666666666%;
1028
+ }
1029
+
1030
+ .factory-bootstrap-329 .col-xs-push-7 {
1031
+ left: 58.333333333333336%;
1032
+ }
1033
+
1034
+ .factory-bootstrap-329 .col-xs-push-6 {
1035
+ left: 50%;
1036
+ }
1037
+
1038
+ .factory-bootstrap-329 .col-xs-push-5 {
1039
+ left: 41.66666666666667%;
1040
+ }
1041
+
1042
+ .factory-bootstrap-329 .col-xs-push-4 {
1043
+ left: 33.33333333333333%;
1044
+ }
1045
+
1046
+ .factory-bootstrap-329 .col-xs-push-3 {
1047
+ left: 25%;
1048
+ }
1049
+
1050
+ .factory-bootstrap-329 .col-xs-push-2 {
1051
+ left: 16.666666666666664%;
1052
+ }
1053
+
1054
+ .factory-bootstrap-329 .col-xs-push-1 {
1055
+ left: 8.333333333333332%;
1056
+ }
1057
+
1058
+ .factory-bootstrap-329 .col-xs-push-0 {
1059
+ left: 0;
1060
+ }
1061
+
1062
+ .factory-bootstrap-329 .col-xs-offset-12 {
1063
+ margin-left: 100%;
1064
+ }
1065
+
1066
+ .factory-bootstrap-329 .col-xs-offset-11 {
1067
+ margin-left: 91.66666666666666%;
1068
+ }
1069
+
1070
+ .factory-bootstrap-329 .col-xs-offset-10 {
1071
+ margin-left: 83.33333333333334%;
1072
+ }
1073
+
1074
+ .factory-bootstrap-329 .col-xs-offset-9 {
1075
+ margin-left: 75%;
1076
+ }
1077
+
1078
+ .factory-bootstrap-329 .col-xs-offset-8 {
1079
+ margin-left: 66.66666666666666%;
1080
+ }
1081
+
1082
+ .factory-bootstrap-329 .col-xs-offset-7 {
1083
+ margin-left: 58.333333333333336%;
1084
+ }
1085
+
1086
+ .factory-bootstrap-329 .col-xs-offset-6 {
1087
+ margin-left: 50%;
1088
+ }
1089
+
1090
+ .factory-bootstrap-329 .col-xs-offset-5 {
1091
+ margin-left: 41.66666666666667%;
1092
+ }
1093
+
1094
+ .factory-bootstrap-329 .col-xs-offset-4 {
1095
+ margin-left: 33.33333333333333%;
1096
+ }
1097
+
1098
+ .factory-bootstrap-329 .col-xs-offset-3 {
1099
+ margin-left: 25%;
1100
+ }
1101
+
1102
+ .factory-bootstrap-329 .col-xs-offset-2 {
1103
+ margin-left: 16.666666666666664%;
1104
+ }
1105
+
1106
+ .factory-bootstrap-329 .col-xs-offset-1 {
1107
+ margin-left: 8.333333333333332%;
1108
+ }
1109
+
1110
+ .factory-bootstrap-329 .col-xs-offset-0 {
1111
+ margin-left: 0;
1112
+ }
1113
+
1114
+ @media (min-width: 768px) {
1115
+ .col-sm-1,
1116
+ .col-sm-2,
1117
+ .col-sm-3,
1118
+ .col-sm-4,
1119
+ .col-sm-5,
1120
+ .col-sm-6,
1121
+ .col-sm-7,
1122
+ .col-sm-8,
1123
+ .col-sm-9,
1124
+ .col-sm-10,
1125
+ .col-sm-11,
1126
+ .col-sm-12 {
1127
+ float: left;
1128
+ }
1129
+ .col-sm-12 {
1130
+ width: 100%;
1131
+ }
1132
+ .col-sm-11 {
1133
+ width: 91.66666666666666%;
1134
+ }
1135
+ .col-sm-10 {
1136
+ width: 83.33333333333334%;
1137
+ }
1138
+ .col-sm-9 {
1139
+ width: 75%;
1140
+ }
1141
+ .col-sm-8 {
1142
+ width: 66.66666666666666%;
1143
+ }
1144
+ .col-sm-7 {
1145
+ width: 58.333333333333336%;
1146
+ }
1147
+ .col-sm-6 {
1148
+ width: 50%;
1149
+ }
1150
+ .col-sm-5 {
1151
+ width: 41.66666666666667%;
1152
+ }
1153
+ .col-sm-4 {
1154
+ width: 33.33333333333333%;
1155
+ }
1156
+ .col-sm-3 {
1157
+ width: 25%;
1158
+ }
1159
+ .col-sm-2 {
1160
+ width: 16.666666666666664%;
1161
+ }
1162
+ .col-sm-1 {
1163
+ width: 8.333333333333332%;
1164
+ }
1165
+ .col-sm-pull-12 {
1166
+ right: 100%;
1167
+ }
1168
+ .col-sm-pull-11 {
1169
+ right: 91.66666666666666%;
1170
+ }
1171
+ .col-sm-pull-10 {
1172
+ right: 83.33333333333334%;
1173
+ }
1174
+ .col-sm-pull-9 {
1175
+ right: 75%;
1176
+ }
1177
+ .col-sm-pull-8 {
1178
+ right: 66.66666666666666%;
1179
+ }
1180
+ .col-sm-pull-7 {
1181
+ right: 58.333333333333336%;
1182
+ }
1183
+ .col-sm-pull-6 {
1184
+ right: 50%;
1185
+ }
1186
+ .col-sm-pull-5 {
1187
+ right: 41.66666666666667%;
1188
+ }
1189
+ .col-sm-pull-4 {
1190
+ right: 33.33333333333333%;
1191
+ }
1192
+ .col-sm-pull-3 {
1193
+ right: 25%;
1194
+ }
1195
+ .col-sm-pull-2 {
1196
+ right: 16.666666666666664%;
1197
+ }
1198
+ .col-sm-pull-1 {
1199
+ right: 8.333333333333332%;
1200
+ }
1201
+ .col-sm-pull-0 {
1202
+ right: 0;
1203
+ }
1204
+ .col-sm-push-12 {
1205
+ left: 100%;
1206
+ }
1207
+ .col-sm-push-11 {
1208
+ left: 91.66666666666666%;
1209
+ }
1210
+ .col-sm-push-10 {
1211
+ left: 83.33333333333334%;
1212
+ }
1213
+ .col-sm-push-9 {
1214
+ left: 75%;
1215
+ }
1216
+ .col-sm-push-8 {
1217
+ left: 66.66666666666666%;
1218
+ }
1219
+ .col-sm-push-7 {
1220
+ left: 58.333333333333336%;
1221
+ }
1222
+ .col-sm-push-6 {
1223
+ left: 50%;
1224
+ }
1225
+ .col-sm-push-5 {
1226
+ left: 41.66666666666667%;
1227
+ }
1228
+ .col-sm-push-4 {
1229
+ left: 33.33333333333333%;
1230
+ }
1231
+ .col-sm-push-3 {
1232
+ left: 25%;
1233
+ }
1234
+ .col-sm-push-2 {
1235
+ left: 16.666666666666664%;
1236
+ }
1237
+ .col-sm-push-1 {
1238
+ left: 8.333333333333332%;
1239
+ }
1240
+ .col-sm-push-0 {
1241
+ left: 0;
1242
+ }
1243
+ .col-sm-offset-12 {
1244
+ margin-left: 100%;
1245
+ }
1246
+ .col-sm-offset-11 {
1247
+ margin-left: 91.66666666666666%;
1248
+ }
1249
+ .col-sm-offset-10 {
1250
+ margin-left: 83.33333333333334%;
1251
+ }
1252
+ .col-sm-offset-9 {
1253
+ margin-left: 75%;
1254
+ }
1255
+ .col-sm-offset-8 {
1256
+ margin-left: 66.66666666666666%;
1257
+ }
1258
+ .col-sm-offset-7 {
1259
+ margin-left: 58.333333333333336%;
1260
+ }
1261
+ .col-sm-offset-6 {
1262
+ margin-left: 50%;
1263
+ }
1264
+ .col-sm-offset-5 {
1265
+ margin-left: 41.66666666666667%;
1266
+ }
1267
+ .col-sm-offset-4 {
1268
+ margin-left: 33.33333333333333%;
1269
+ }
1270
+ .col-sm-offset-3 {
1271
+ margin-left: 25%;
1272
+ }
1273
+ .col-sm-offset-2 {
1274
+ margin-left: 16.666666666666664%;
1275
+ }
1276
+ .col-sm-offset-1 {
1277
+ margin-left: 8.333333333333332%;
1278
+ }
1279
+ .col-sm-offset-0 {
1280
+ margin-left: 0;
1281
+ }
1282
+ }
1283
+
1284
+ @media (min-width: 992px) {
1285
+ .col-md-1,
1286
+ .col-md-2,
1287
+ .col-md-3,
1288
+ .col-md-4,
1289
+ .col-md-5,
1290
+ .col-md-6,
1291
+ .col-md-7,
1292
+ .col-md-8,
1293
+ .col-md-9,
1294
+ .col-md-10,
1295
+ .col-md-11,
1296
+ .col-md-12 {
1297
+ float: left;
1298
+ }
1299
+ .col-md-12 {
1300
+ width: 100%;
1301
+ }
1302
+ .col-md-11 {
1303
+ width: 91.66666666666666%;
1304
+ }
1305
+ .col-md-10 {
1306
+ width: 83.33333333333334%;
1307
+ }
1308
+ .col-md-9 {
1309
+ width: 75%;
1310
+ }
1311
+ .col-md-8 {
1312
+ width: 66.66666666666666%;
1313
+ }
1314
+ .col-md-7 {
1315
+ width: 58.333333333333336%;
1316
+ }
1317
+ .col-md-6 {
1318
+ width: 50%;
1319
+ }
1320
+ .col-md-5 {
1321
+ width: 41.66666666666667%;
1322
+ }
1323
+ .col-md-4 {
1324
+ width: 33.33333333333333%;
1325
+ }
1326
+ .col-md-3 {
1327
+ width: 25%;
1328
+ }
1329
+ .col-md-2 {
1330
+ width: 16.666666666666664%;
1331
+ }
1332
+ .col-md-1 {
1333
+ width: 8.333333333333332%;
1334
+ }
1335
+ .col-md-pull-12 {
1336
+ right: 100%;
1337
+ }
1338
+ .col-md-pull-11 {
1339
+ right: 91.66666666666666%;
1340
+ }
1341
+ .col-md-pull-10 {
1342
+ right: 83.33333333333334%;
1343
+ }
1344
+ .col-md-pull-9 {
1345
+ right: 75%;
1346
+ }
1347
+ .col-md-pull-8 {
1348
+ right: 66.66666666666666%;
1349
+ }
1350
+ .col-md-pull-7 {
1351
+ right: 58.333333333333336%;
1352
+ }
1353
+ .col-md-pull-6 {
1354
+ right: 50%;
1355
+ }
1356
+ .col-md-pull-5 {
1357
+ right: 41.66666666666667%;
1358
+ }
1359
+ .col-md-pull-4 {
1360
+ right: 33.33333333333333%;
1361
+ }
1362
+ .col-md-pull-3 {
1363
+ right: 25%;
1364
+ }
1365
+ .col-md-pull-2 {
1366
+ right: 16.666666666666664%;
1367
+ }
1368
+ .col-md-pull-1 {
1369
+ right: 8.333333333333332%;
1370
+ }
1371
+ .col-md-pull-0 {
1372
+ right: 0;
1373
+ }
1374
+ .col-md-push-12 {
1375
+ left: 100%;
1376
+ }
1377
+ .col-md-push-11 {
1378
+ left: 91.66666666666666%;
1379
+ }
1380
+ .col-md-push-10 {
1381
+ left: 83.33333333333334%;
1382
+ }
1383
+ .col-md-push-9 {
1384
+ left: 75%;
1385
+ }
1386
+ .col-md-push-8 {
1387
+ left: 66.66666666666666%;
1388
+ }
1389
+ .col-md-push-7 {
1390
+ left: 58.333333333333336%;
1391
+ }
1392
+ .col-md-push-6 {
1393
+ left: 50%;
1394
+ }
1395
+ .col-md-push-5 {
1396
+ left: 41.66666666666667%;
1397
+ }
1398
+ .col-md-push-4 {
1399
+ left: 33.33333333333333%;
1400
+ }
1401
+ .col-md-push-3 {
1402
+ left: 25%;
1403
+ }
1404
+ .col-md-push-2 {
1405
+ left: 16.666666666666664%;
1406
+ }
1407
+ .col-md-push-1 {
1408
+ left: 8.333333333333332%;
1409
+ }
1410
+ .col-md-push-0 {
1411
+ left: 0;
1412
+ }
1413
+ .col-md-offset-12 {
1414
+ margin-left: 100%;
1415
+ }
1416
+ .col-md-offset-11 {
1417
+ margin-left: 91.66666666666666%;
1418
+ }
1419
+ .col-md-offset-10 {
1420
+ margin-left: 83.33333333333334%;
1421
+ }
1422
+ .col-md-offset-9 {
1423
+ margin-left: 75%;
1424
+ }
1425
+ .col-md-offset-8 {
1426
+ margin-left: 66.66666666666666%;
1427
+ }
1428
+ .col-md-offset-7 {
1429
+ margin-left: 58.333333333333336%;
1430
+ }
1431
+ .col-md-offset-6 {
1432
+ margin-left: 50%;
1433
+ }
1434
+ .col-md-offset-5 {
1435
+ margin-left: 41.66666666666667%;
1436
+ }
1437
+ .col-md-offset-4 {
1438
+ margin-left: 33.33333333333333%;
1439
+ }
1440
+ .col-md-offset-3 {
1441
+ margin-left: 25%;
1442
+ }
1443
+ .col-md-offset-2 {
1444
+ margin-left: 16.666666666666664%;
1445
+ }
1446
+ .col-md-offset-1 {
1447
+ margin-left: 8.333333333333332%;
1448
+ }
1449
+ .col-md-offset-0 {
1450
+ margin-left: 0;
1451
+ }
1452
+ }
1453
+
1454
+ @media (min-width: 1200px) {
1455
+ .col-lg-1,
1456
+ .col-lg-2,
1457
+ .col-lg-3,
1458
+ .col-lg-4,
1459
+ .col-lg-5,
1460
+ .col-lg-6,
1461
+ .col-lg-7,
1462
+ .col-lg-8,
1463
+ .col-lg-9,
1464
+ .col-lg-10,
1465
+ .col-lg-11,
1466
+ .col-lg-12 {
1467
+ float: left;
1468
+ }
1469
+ .col-lg-12 {
1470
+ width: 100%;
1471
+ }
1472
+ .col-lg-11 {
1473
+ width: 91.66666666666666%;
1474
+ }
1475
+ .col-lg-10 {
1476
+ width: 83.33333333333334%;
1477
+ }
1478
+ .col-lg-9 {
1479
+ width: 75%;
1480
+ }
1481
+ .col-lg-8 {
1482
+ width: 66.66666666666666%;
1483
+ }
1484
+ .col-lg-7 {
1485
+ width: 58.333333333333336%;
1486
+ }
1487
+ .col-lg-6 {
1488
+ width: 50%;
1489
+ }
1490
+ .col-lg-5 {
1491
+ width: 41.66666666666667%;
1492
+ }
1493
+ .col-lg-4 {
1494
+ width: 33.33333333333333%;
1495
+ }
1496
+ .col-lg-3 {
1497
+ width: 25%;
1498
+ }
1499
+ .col-lg-2 {
1500
+ width: 16.666666666666664%;
1501
+ }
1502
+ .col-lg-1 {
1503
+ width: 8.333333333333332%;
1504
+ }
1505
+ .col-lg-pull-12 {
1506
+ right: 100%;
1507
+ }
1508
+ .col-lg-pull-11 {
1509
+ right: 91.66666666666666%;
1510
+ }
1511
+ .col-lg-pull-10 {
1512
+ right: 83.33333333333334%;
1513
+ }
1514
+ .col-lg-pull-9 {
1515
+ right: 75%;
1516
+ }
1517
+ .col-lg-pull-8 {
1518
+ right: 66.66666666666666%;
1519
+ }
1520
+ .col-lg-pull-7 {
1521
+ right: 58.333333333333336%;
1522
+ }
1523
+ .col-lg-pull-6 {
1524
+ right: 50%;
1525
+ }
1526
+ .col-lg-pull-5 {
1527
+ right: 41.66666666666667%;
1528
+ }
1529
+ .col-lg-pull-4 {
1530
+ right: 33.33333333333333%;
1531
+ }
1532
+ .col-lg-pull-3 {
1533
+ right: 25%;
1534
+ }
1535
+ .col-lg-pull-2 {
1536
+ right: 16.666666666666664%;
1537
+ }
1538
+ .col-lg-pull-1 {
1539
+ right: 8.333333333333332%;
1540
+ }
1541
+ .col-lg-pull-0 {
1542
+ right: 0;
1543
+ }
1544
+ .col-lg-push-12 {
1545
+ left: 100%;
1546
+ }
1547
+ .col-lg-push-11 {
1548
+ left: 91.66666666666666%;
1549
+ }
1550
+ .col-lg-push-10 {
1551
+ left: 83.33333333333334%;
1552
+ }
1553
+ .col-lg-push-9 {
1554
+ left: 75%;
1555
+ }
1556
+ .col-lg-push-8 {
1557
+ left: 66.66666666666666%;
1558
+ }
1559
+ .col-lg-push-7 {
1560
+ left: 58.333333333333336%;
1561
+ }
1562
+ .col-lg-push-6 {
1563
+ left: 50%;
1564
+ }
1565
+ .col-lg-push-5 {
1566
+ left: 41.66666666666667%;
1567
+ }
1568
+ .col-lg-push-4 {
1569
+ left: 33.33333333333333%;
1570
+ }
1571
+ .col-lg-push-3 {
1572
+ left: 25%;
1573
+ }
1574
+ .col-lg-push-2 {
1575
+ left: 16.666666666666664%;
1576
+ }
1577
+ .col-lg-push-1 {
1578
+ left: 8.333333333333332%;
1579
+ }
1580
+ .col-lg-push-0 {
1581
+ left: 0;
1582
+ }
1583
+ .col-lg-offset-12 {
1584
+ margin-left: 100%;
1585
+ }
1586
+ .col-lg-offset-11 {
1587
+ margin-left: 91.66666666666666%;
1588
+ }
1589
+ .col-lg-offset-10 {
1590
+ margin-left: 83.33333333333334%;
1591
+ }
1592
+ .col-lg-offset-9 {
1593
+ margin-left: 75%;
1594
+ }
1595
+ .col-lg-offset-8 {
1596
+ margin-left: 66.66666666666666%;
1597
+ }
1598
+ .col-lg-offset-7 {
1599
+ margin-left: 58.333333333333336%;
1600
+ }
1601
+ .col-lg-offset-6 {
1602
+ margin-left: 50%;
1603
+ }
1604
+ .col-lg-offset-5 {
1605
+ margin-left: 41.66666666666667%;
1606
+ }
1607
+ .col-lg-offset-4 {
1608
+ margin-left: 33.33333333333333%;
1609
+ }
1610
+ .col-lg-offset-3 {
1611
+ margin-left: 25%;
1612
+ }
1613
+ .col-lg-offset-2 {
1614
+ margin-left: 16.666666666666664%;
1615
+ }
1616
+ .col-lg-offset-1 {
1617
+ margin-left: 8.333333333333332%;
1618
+ }
1619
+ .col-lg-offset-0 {
1620
+ margin-left: 0;
1621
+ }
1622
+ }
1623
+
1624
+ .factory-bootstrap-329 table {
1625
+ max-width: 100%;
1626
+ background-color: transparent;
1627
+ }
1628
+
1629
+ .factory-bootstrap-329 th {
1630
+ text-align: left;
1631
+ }
1632
+
1633
+ .factory-bootstrap-329 .table {
1634
+ width: 100%;
1635
+ margin-bottom: 20px;
1636
+ }
1637
+
1638
+ .factory-bootstrap-329 .table > thead > tr > th,
1639
+ .factory-bootstrap-329 .table > tbody > tr > th,
1640
+ .factory-bootstrap-329 .table > tfoot > tr > th,
1641
+ .factory-bootstrap-329 .table > thead > tr > td,
1642
+ .factory-bootstrap-329 .table > tbody > tr > td,
1643
+ .factory-bootstrap-329 .table > tfoot > tr > td {
1644
+ padding: 8px;
1645
+ line-height: 1.428571429;
1646
+ vertical-align: top;
1647
+ border-top: 1px solid #dddddd;
1648
+ }
1649
+
1650
+ .factory-bootstrap-329 .table > thead > tr > th {
1651
+ vertical-align: bottom;
1652
+ border-bottom: 2px solid #dddddd;
1653
+ }
1654
+
1655
+ .factory-bootstrap-329 .table > caption + thead > tr:first-child > th,
1656
+ .factory-bootstrap-329 .table > colgroup + thead > tr:first-child > th,
1657
+ .factory-bootstrap-329 .table > thead:first-child > tr:first-child > th,
1658
+ .factory-bootstrap-329 .table > caption + thead > tr:first-child > td,
1659
+ .factory-bootstrap-329 .table > colgroup + thead > tr:first-child > td,
1660
+ .factory-bootstrap-329 .table > thead:first-child > tr:first-child > td {
1661
+ border-top: 0;
1662
+ }
1663
+
1664
+ .factory-bootstrap-329 .table > tbody + tbody {
1665
+ border-top: 2px solid #dddddd;
1666
+ }
1667
+
1668
+ .factory-bootstrap-329 .table .table {
1669
+ background-color: #ffffff;
1670
+ }
1671
+
1672
+ .factory-bootstrap-329 .table-condensed > thead > tr > th,
1673
+ .factory-bootstrap-329 .table-condensed > tbody > tr > th,
1674
+ .factory-bootstrap-329 .table-condensed > tfoot > tr > th,
1675
+ .factory-bootstrap-329 .table-condensed > thead > tr > td,
1676
+ .factory-bootstrap-329 .table-condensed > tbody > tr > td,
1677
+ .factory-bootstrap-329 .table-condensed > tfoot > tr > td {
1678
+ padding: 5px;
1679
+ }
1680
+
1681
+ .factory-bootstrap-329 .table-bordered {
1682
+ border: 1px solid #dddddd;
1683
+ }
1684
+
1685
+ .factory-bootstrap-329 .table-bordered > thead > tr > th,
1686
+ .factory-bootstrap-329 .table-bordered > tbody > tr > th,
1687
+ .factory-bootstrap-329 .table-bordered > tfoot > tr > th,
1688
+ .factory-bootstrap-329 .table-bordered > thead > tr > td,
1689
+ .factory-bootstrap-329 .table-bordered > tbody > tr > td,
1690
+ .factory-bootstrap-329 .table-bordered > tfoot > tr > td {
1691
+ border: 1px solid #dddddd;
1692
+ }
1693
+
1694
+ .factory-bootstrap-329 .table-bordered > thead > tr > th,
1695
+ .factory-bootstrap-329 .table-bordered > thead > tr > td {
1696
+ border-bottom-width: 2px;
1697
+ }
1698
+
1699
+ .factory-bootstrap-329 .table-striped > tbody > tr:nth-child(odd) > td,
1700
+ .factory-bootstrap-329 .table-striped > tbody > tr:nth-child(odd) > th {
1701
+ background-color: #f9f9f9;
1702
+ }
1703
+
1704
+ .factory-bootstrap-329 .table-hover > tbody > tr:hover > td,
1705
+ .factory-bootstrap-329 .table-hover > tbody > tr:hover > th {
1706
+ background-color: #f5f5f5;
1707
+ }
1708
+
1709
+ .factory-bootstrap-329 table col[class*="col-"] {
1710
+ position: static;
1711
+ display: table-column;
1712
+ float: none;
1713
+ }
1714
+
1715
+ .factory-bootstrap-329 table td[class*="col-"],
1716
+ .factory-bootstrap-329 table th[class*="col-"] {
1717
+ display: table-cell;
1718
+ float: none;
1719
+ }
1720
+
1721
+ .factory-bootstrap-329 .table > thead > tr > .active,
1722
+ .factory-bootstrap-329 .table > tbody > tr > .active,
1723
+ .factory-bootstrap-329 .table > tfoot > tr > .active,
1724
+ .factory-bootstrap-329 .table > thead > .active > td,
1725
+ .factory-bootstrap-329 .table > tbody > .active > td,
1726
+ .factory-bootstrap-329 .table > tfoot > .active > td,
1727
+ .factory-bootstrap-329 .table > thead > .active > th,
1728
+ .factory-bootstrap-329 .table > tbody > .active > th,
1729
+ .factory-bootstrap-329 .table > tfoot > .active > th {
1730
+ background-color: #f5f5f5;
1731
+ }
1732
+
1733
+ .factory-bootstrap-329 .table-hover > tbody > tr > .active:hover,
1734
+ .factory-bootstrap-329 .table-hover > tbody > .active:hover > td,
1735
+ .factory-bootstrap-329 .table-hover > tbody > .active:hover > th {
1736
+ background-color: #e8e8e8;
1737
+ }
1738
+
1739
+ .factory-bootstrap-329 .table > thead > tr > .success,
1740
+ .factory-bootstrap-329 .table > tbody > tr > .success,
1741
+ .factory-bootstrap-329 .table > tfoot > tr > .success,
1742
+ .factory-bootstrap-329 .table > thead > .success > td,
1743
+ .factory-bootstrap-329 .table > tbody > .success > td,
1744
+ .factory-bootstrap-329 .table > tfoot > .success > td,
1745
+ .factory-bootstrap-329 .table > thead > .success > th,
1746
+ .factory-bootstrap-329 .table > tbody > .success > th,
1747
+ .factory-bootstrap-329 .table > tfoot > .success > th {
1748
+ background-color: #dff0d8;
1749
+ }
1750
+
1751
+ .factory-bootstrap-329 .table-hover > tbody > tr > .success:hover,
1752
+ .factory-bootstrap-329 .table-hover > tbody > .success:hover > td,
1753
+ .factory-bootstrap-329 .table-hover > tbody > .success:hover > th {
1754
+ background-color: #d0e9c6;
1755
+ }
1756
+
1757
+ .factory-bootstrap-329 .table > thead > tr > .danger,
1758
+ .factory-bootstrap-329 .table > tbody > tr > .danger,
1759
+ .factory-bootstrap-329 .table > tfoot > tr > .danger,
1760
+ .factory-bootstrap-329 .table > thead > .danger > td,
1761
+ .factory-bootstrap-329 .table > tbody > .danger > td,
1762
+ .factory-bootstrap-329 .table > tfoot > .danger > td,
1763
+ .factory-bootstrap-329 .table > thead > .danger > th,
1764
+ .factory-bootstrap-329 .table > tbody > .danger > th,
1765
+ .factory-bootstrap-329 .table > tfoot > .danger > th {
1766
+ background-color: #f2dede;
1767
+ }
1768
+
1769
+ .factory-bootstrap-329 .table-hover > tbody > tr > .danger:hover,
1770
+ .factory-bootstrap-329 .table-hover > tbody > .danger:hover > td,
1771
+ .factory-bootstrap-329 .table-hover > tbody > .danger:hover > th {
1772
+ background-color: #ebcccc;
1773
+ }
1774
+
1775
+ .factory-bootstrap-329 .table > thead > tr > .warning,
1776
+ .factory-bootstrap-329 .table > tbody > tr > .warning,
1777
+ .factory-bootstrap-329 .table > tfoot > tr > .warning,
1778
+ .factory-bootstrap-329 .table > thead > .warning > td,
1779
+ .factory-bootstrap-329 .table > tbody > .warning > td,
1780
+ .factory-bootstrap-329 .table > tfoot > .warning > td,
1781
+ .factory-bootstrap-329 .table > thead > .warning > th,
1782
+ .factory-bootstrap-329 .table > tbody > .warning > th,
1783
+ .factory-bootstrap-329 .table > tfoot > .warning > th {
1784
+ background-color: #fcf8e3;
1785
+ }
1786
+
1787
+ .factory-bootstrap-329 .table-hover > tbody > tr > .warning:hover,
1788
+ .factory-bootstrap-329 .table-hover > tbody > .warning:hover > td,
1789
+ .factory-bootstrap-329 .table-hover > tbody > .warning:hover > th {
1790
+ background-color: #faf2cc;
1791
+ }
1792
+
1793
+ @media (max-width: 767px) {
1794
+ .table-responsive {
1795
+ width: 100%;
1796
+ margin-bottom: 15px;
1797
+ overflow-x: scroll;
1798
+ overflow-y: hidden;
1799
+ border: 1px solid #dddddd;
1800
+ -ms-overflow-style: -ms-autohiding-scrollbar;
1801
+ -webkit-overflow-scrolling: touch;
1802
+ }
1803
+ .table-responsive > .table {
1804
+ margin-bottom: 0;
1805
+ }
1806
+ .table-responsive > .table > thead > tr > th,
1807
+ .table-responsive > .table > tbody > tr > th,
1808
+ .table-responsive > .table > tfoot > tr > th,
1809
+ .table-responsive > .table > thead > tr > td,
1810
+ .table-responsive > .table > tbody > tr > td,
1811
+ .table-responsive > .table > tfoot > tr > td {
1812
+ white-space: nowrap;
1813
+ }
1814
+ .table-responsive > .table-bordered {
1815
+ border: 0;
1816
+ }
1817
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
1818
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
1819
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
1820
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
1821
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
1822
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
1823
+ border-left: 0;
1824
+ }
1825
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
1826
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
1827
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
1828
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
1829
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
1830
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
1831
+ border-right: 0;
1832
+ }
1833
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
1834
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
1835
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
1836
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
1837
+ border-bottom: 0;
1838
+ }
1839
+ }
1840
+
1841
+ .factory-bootstrap-329 fieldset {
1842
+ padding: 0;
1843
+ margin: 0;
1844
+ border: 0;
1845
+ }
1846
+
1847
+ .factory-bootstrap-329 legend {
1848
+ display: block;
1849
+ width: 100%;
1850
+ padding: 0;
1851
+ margin-bottom: 20px;
1852
+ font-size: 21px;
1853
+ line-height: inherit;
1854
+ color: #333333;
1855
+ border: 0;
1856
+ border-bottom: 1px solid #e5e5e5;
1857
+ -moz-box-sizing: content-box;
1858
+ box-sizing: content-box;
1859
+ }
1860
+
1861
+ .factory-bootstrap-329 label {
1862
+ display: inline-block;
1863
+ margin-bottom: 5px;
1864
+ font-weight: bold;
1865
+ }
1866
+
1867
+ .factory-bootstrap-329 input[type="search"] {
1868
+ -webkit-box-sizing: border-box;
1869
+ -moz-box-sizing: border-box;
1870
+ box-sizing: border-box;
1871
+ }
1872
+
1873
+ .factory-bootstrap-329 input[type="radio"],
1874
+ .factory-bootstrap-329 input[type="checkbox"] {
1875
+ margin: 4px 0 0;
1876
+ margin-top: 1px \9;
1877
+ /* IE8-9 */
1878
+
1879
+ line-height: normal;
1880
+ }
1881
+
1882
+ .factory-bootstrap-329 input[type="file"] {
1883
+ display: block;
1884
+ }
1885
+
1886
+ .factory-bootstrap-329 select[multiple],
1887
+ .factory-bootstrap-329 select[size] {
1888
+ height: auto;
1889
+ }
1890
+
1891
+ .factory-bootstrap-329 select optgroup {
1892
+ font-family: inherit;
1893
+ font-size: inherit;
1894
+ font-style: inherit;
1895
+ }
1896
+
1897
+ .factory-bootstrap-329 input[type="file"]:focus,
1898
+ .factory-bootstrap-329 input[type="radio"]:focus,
1899
+ .factory-bootstrap-329 input[type="checkbox"]:focus {
1900
+ outline: thin dotted;
1901
+ outline: 5px auto -webkit-focus-ring-color;
1902
+ outline-offset: -2px;
1903
+ }
1904
+
1905
+ .factory-bootstrap-329 input[type="number"]::-webkit-outer-spin-button,
1906
+ .factory-bootstrap-329 input[type="number"]::-webkit-inner-spin-button {
1907
+ height: auto;
1908
+ }
1909
+
1910
+ .factory-bootstrap-329 output {
1911
+ display: block;
1912
+ padding-top: 7px;
1913
+ font-size: 14px;
1914
+ line-height: 1.428571429;
1915
+ color: #555555;
1916
+ vertical-align: middle;
1917
+ }
1918
+
1919
+ .factory-bootstrap-329 .form-control {
1920
+ display: block;
1921
+ width: 100%;
1922
+ height: 34px;
1923
+ padding: 6px 12px;
1924
+ font-size: 14px;
1925
+ line-height: 1.428571429;
1926
+ color: #555555;
1927
+ vertical-align: middle;
1928
+ background-color: #ffffff;
1929
+ background-image: none;
1930
+ border: 1px solid #cccccc;
1931
+ border-radius: 3px;
1932
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1933
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1934
+ -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
1935
+ transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
1936
+ }
1937
+
1938
+ .factory-bootstrap-329 .form-control:focus {
1939
+ border-color: #66afe9;
1940
+ outline: 0;
1941
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1942
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1943
+ }
1944
+
1945
+ .factory-bootstrap-329 .form-control:-moz-placeholder {
1946
+ color: #999999;
1947
+ }
1948
+
1949
+ .factory-bootstrap-329 .form-control::-moz-placeholder {
1950
+ color: #999999;
1951
+ opacity: 1;
1952
+ }
1953
+
1954
+ .factory-bootstrap-329 .form-control:-ms-input-placeholder {
1955
+ color: #999999;
1956
+ }
1957
+
1958
+ .factory-bootstrap-329 .form-control::-webkit-input-placeholder {
1959
+ color: #999999;
1960
+ }
1961
+
1962
+ .factory-bootstrap-329 .form-control[disabled],
1963
+ .factory-bootstrap-329 .form-control[readonly],
1964
+ .factory-bootstrap-329 fieldset[disabled] .form-control {
1965
+ cursor: not-allowed;
1966
+ background-color: #eeeeee;
1967
+ }
1968
+
1969
+ .factory-bootstrap-329 textarea.form-control {
1970
+ height: auto;
1971
+ }
1972
+
1973
+ .factory-bootstrap-329 .form-group {
1974
+ margin-bottom: 15px;
1975
+ }
1976
+
1977
+ .factory-bootstrap-329 .radio,
1978
+ .factory-bootstrap-329 .checkbox {
1979
+ display: block;
1980
+ min-height: 20px;
1981
+ padding-left: 20px;
1982
+ margin-top: 10px;
1983
+ margin-bottom: 10px;
1984
+ vertical-align: middle;
1985
+ }
1986
+
1987
+ .factory-bootstrap-329 .radio label,
1988
+ .factory-bootstrap-329 .checkbox label {
1989
+ display: inline;
1990
+ margin-bottom: 0;
1991
+ font-weight: normal;
1992
+ cursor: pointer;
1993
+ }
1994
+
1995
+ .factory-bootstrap-329 .radio input[type="radio"],
1996
+ .factory-bootstrap-329 .radio-inline input[type="radio"],
1997
+ .factory-bootstrap-329 .checkbox input[type="checkbox"],
1998
+ .factory-bootstrap-329 .checkbox-inline input[type="checkbox"] {
1999
+ float: left;
2000
+ margin-left: -20px;
2001
+ }
2002
+
2003
+ .factory-bootstrap-329 .radio + .radio,
2004
+ .factory-bootstrap-329 .checkbox + .checkbox {
2005
+ margin-top: -5px;
2006
+ }
2007
+
2008
+ .factory-bootstrap-329 .radio-inline,
2009
+ .factory-bootstrap-329 .checkbox-inline {
2010
+ display: inline-block;
2011
+ padding-left: 20px;
2012
+ margin-bottom: 0;
2013
+ font-weight: normal;
2014
+ vertical-align: middle;
2015
+ cursor: pointer;
2016
+ }
2017
+
2018
+ .factory-bootstrap-329 .radio-inline + .radio-inline,
2019
+ .factory-bootstrap-329 .checkbox-inline + .checkbox-inline {
2020
+ margin-top: 0;
2021
+ margin-left: 10px;
2022
+ }
2023
+
2024
+ .factory-bootstrap-329 input[type="radio"][disabled],
2025
+ .factory-bootstrap-329 input[type="checkbox"][disabled],
2026
+ .factory-bootstrap-329 .radio[disabled],
2027
+ .factory-bootstrap-329 .radio-inline[disabled],
2028
+ .factory-bootstrap-329 .checkbox[disabled],
2029
+ .factory-bootstrap-329 .checkbox-inline[disabled],
2030
+ .factory-bootstrap-329 fieldset[disabled] input[type="radio"],
2031
+ .factory-bootstrap-329 fieldset[disabled] input[type="checkbox"],
2032
+ .factory-bootstrap-329 fieldset[disabled] .radio,
2033
+ .factory-bootstrap-329 fieldset[disabled] .radio-inline,
2034
+ .factory-bootstrap-329 fieldset[disabled] .checkbox,
2035
+ .factory-bootstrap-329 fieldset[disabled] .checkbox-inline {
2036
+ cursor: not-allowed;
2037
+ }
2038
+
2039
+ .factory-bootstrap-329 .input-sm {
2040
+ height: 30px;
2041
+ padding: 5px 10px;
2042
+ font-size: 12px;
2043
+ line-height: 1.5;
2044
+ border-radius: 3px;
2045
+ }
2046
+
2047
+ .factory-bootstrap-329 select.input-sm {
2048
+ height: 30px;
2049
+ line-height: 30px;
2050
+ }
2051
+
2052
+ .factory-bootstrap-329 textarea.input-sm {
2053
+ height: auto;
2054
+ }
2055
+
2056
+ .factory-bootstrap-329 .input-lg {
2057
+ height: 46px;
2058
+ padding: 10px 16px;
2059
+ font-size: 18px;
2060
+ line-height: 1.33;
2061
+ border-radius: 6px;
2062
+ }
2063
+
2064
+ .factory-bootstrap-329 select.input-lg {
2065
+ height: 46px;
2066
+ line-height: 46px;
2067
+ }
2068
+
2069
+ .factory-bootstrap-329 textarea.input-lg {
2070
+ height: auto;
2071
+ }
2072
+
2073
+ .factory-bootstrap-329 .has-warning .help-block,
2074
+ .factory-bootstrap-329 .has-warning .control-label,
2075
+ .factory-bootstrap-329 .has-warning .radio,
2076
+ .factory-bootstrap-329 .has-warning .checkbox,
2077
+ .factory-bootstrap-329 .has-warning .radio-inline,
2078
+ .factory-bootstrap-329 .has-warning .checkbox-inline {
2079
+ color: #8a6d3b;
2080
+ }
2081
+
2082
+ .factory-bootstrap-329 .has-warning .form-control {
2083
+ border-color: #8a6d3b;
2084
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2085
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2086
+ }
2087
+
2088
+ .factory-bootstrap-329 .has-warning .form-control:focus {
2089
+ border-color: #66512c;
2090
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
2091
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
2092
+ }
2093
+
2094
+ .factory-bootstrap-329 .has-warning .input-group-addon {
2095
+ color: #8a6d3b;
2096
+ background-color: #fcf8e3;
2097
+ border-color: #8a6d3b;
2098
+ }
2099
+
2100
+ .factory-bootstrap-329 .has-error .help-block,
2101
+ .factory-bootstrap-329 .has-error .control-label,
2102
+ .factory-bootstrap-329 .has-error .radio,
2103
+ .factory-bootstrap-329 .has-error .checkbox,
2104
+ .factory-bootstrap-329 .has-error .radio-inline,
2105
+ .factory-bootstrap-329 .has-error .checkbox-inline {
2106
+ color: #a94442;
2107
+ }
2108
+
2109
+ .factory-bootstrap-329 .controls {
2110
+ display: block;
2111
+ }
2112
+
2113
+ .factory-bootstrap-329 .has-error .form-control {
2114
+ border-color: #a94442;
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
+ }
2118
+
2119
+ .factory-bootstrap-329 .has-error .form-control:focus {
2120
+ border-color: #843534;
2121
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
2122
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
2123
+ }
2124
+
2125
+ .factory-bootstrap-329 .has-error .input-group-addon {
2126
+ color: #a94442;
2127
+ background-color: #f2dede;
2128
+ border-color: #a94442;
2129
+ }
2130
+
2131
+ .factory-bootstrap-329 .has-success .help-block,
2132
+ .factory-bootstrap-329 .has-success .control-label,
2133
+ .factory-bootstrap-329 .has-success .radio,
2134
+ .factory-bootstrap-329 .has-success .checkbox,
2135
+ .factory-bootstrap-329 .has-success .radio-inline,
2136
+ .factory-bootstrap-329 .has-success .checkbox-inline {
2137
+ color: #3c763d;
2138
+ }
2139
+
2140
+ .factory-bootstrap-329 .has-success .form-control {
2141
+ border-color: #3c763d;
2142
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2143
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2144
+ }
2145
+
2146
+ .factory-bootstrap-329 .has-success .form-control:focus {
2147
+ border-color: #2b542c;
2148
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
2149
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
2150
+ }
2151
+
2152
+ .factory-bootstrap-329 .has-success .input-group-addon {
2153
+ color: #3c763d;
2154
+ background-color: #dff0d8;
2155
+ border-color: #3c763d;
2156
+ }
2157
+
2158
+ .factory-bootstrap-329 .form-control-static {
2159
+ margin-bottom: 0;
2160
+ }
2161
+
2162
+ .factory-bootstrap-329 .help-block {
2163
+ display: block;
2164
+ margin-top: 5px;
2165
+ margin-bottom: 10px;
2166
+ color: #737373;
2167
+ font-weight: normal;
2168
+ }
2169
+
2170
+ @media (min-width: 768px) {
2171
+ .form-inline .form-group {
2172
+ display: inline-block;
2173
+ margin-bottom: 0;
2174
+ vertical-align: middle;
2175
+ }
2176
+ .form-inline .form-control {
2177
+ display: inline-block;
2178
+ }
2179
+ .form-inline select.form-control {
2180
+ width: auto;
2181
+ }
2182
+ .form-inline .radio,
2183
+ .form-inline .checkbox {
2184
+ display: inline-block;
2185
+ padding-left: 0;
2186
+ margin-top: 0;
2187
+ margin-bottom: 0;
2188
+ }
2189
+ .form-inline .radio input[type="radio"],
2190
+ .form-inline .checkbox input[type="checkbox"] {
2191
+ float: none;
2192
+ margin-left: 0;
2193
+ }
2194
+ }
2195
+
2196
+ .factory-bootstrap-329 .form-horizontal .control-label,
2197
+ .factory-bootstrap-329 .form-horizontal .radio,
2198
+ .factory-bootstrap-329 .form-horizontal .checkbox,
2199
+ .factory-bootstrap-329 .form-horizontal .radio-inline,
2200
+ .factory-bootstrap-329 .form-horizontal .checkbox-inline {
2201
+ padding-top: 7px;
2202
+ margin-top: 0;
2203
+ margin-bottom: 0;
2204
+ }
2205
+ .factory-bootstrap-329 .form-horizontal .control-label {
2206
+ max-width: 200px;
2207
+ }
2208
+
2209
+ .factory-bootstrap-329 .form-horizontal .radio,
2210
+ .factory-bootstrap-329 .form-horizontal .checkbox {
2211
+ min-height: 27px;
2212
+ }
2213
+
2214
+ .factory-bootstrap-329 .form-horizontal .form-group {
2215
+ margin-right: -15px;
2216
+ margin-left: -15px;
2217
+ }
2218
+
2219
+ .factory-bootstrap-329 .form-horizontal .form-group:before,
2220
+ .factory-bootstrap-329 .form-horizontal .form-group:after {
2221
+ display: table;
2222
+ content: " ";
2223
+ }
2224
+
2225
+ .factory-bootstrap-329 .form-horizontal .form-group:after {
2226
+ clear: both;
2227
+ }
2228
+
2229
+ .factory-bootstrap-329 .form-horizontal .form-group:before,
2230
+ .factory-bootstrap-329 .form-horizontal .form-group:after {
2231
+ display: table;
2232
+ content: " ";
2233
+ }
2234
+
2235
+ .factory-bootstrap-329 .form-horizontal .form-group:after {
2236
+ clear: both;
2237
+ }
2238
+
2239
+ .factory-bootstrap-329 .form-horizontal .form-control-static {
2240
+ padding-top: 7px;
2241
+ }
2242
+
2243
+ @media (min-width: 768px) {
2244
+ .form-horizontal .control-label {
2245
+ text-align: right;
2246
+ }
2247
+ }
2248
+
2249
+ .factory-bootstrap-329 .btn {
2250
+ display: inline-block;
2251
+ padding: 5px 12px 5px 12px;
2252
+ margin-bottom: 0;
2253
+ font-size: 13px;
2254
+ font-weight: normal;
2255
+ line-height: 1.428571429;
2256
+ text-align: center;
2257
+ white-space: nowrap;
2258
+ vertical-align: middle;
2259
+ cursor: pointer;
2260
+ background-image: none;
2261
+ border: 1px solid transparent;
2262
+ border-radius: 3px;
2263
+ -webkit-user-select: none;
2264
+ -moz-user-select: none;
2265
+ -ms-user-select: none;
2266
+ -o-user-select: none;
2267
+ user-select: none;
2268
+ }
2269
+
2270
+ .factory-bootstrap-329 .btn:focus {
2271
+ outline: thin dotted;
2272
+ outline: 5px auto -webkit-focus-ring-color;
2273
+ outline-offset: -2px;
2274
+ }
2275
+ .factory-bootstrap-329 .btn {
2276
+ text-decoration: none;
2277
+ }
2278
+
2279
+ .factory-bootstrap-329 .btn:hover,
2280
+ .factory-bootstrap-329 .btn:focus {
2281
+ color: #333333;
2282
+ text-decoration: none;
2283
+ }
2284
+
2285
+ .factory-bootstrap-329 .btn.disabled,
2286
+ .factory-bootstrap-329 .btn[disabled],
2287
+ .factory-bootstrap-329 fieldset[disabled] .btn {
2288
+ pointer-events: none;
2289
+ cursor: not-allowed;
2290
+ opacity: 0.65;
2291
+ filter: alpha(opacity=65);
2292
+ -webkit-box-shadow: none;
2293
+ box-shadow: none;
2294
+ }
2295
+
2296
+ .factory-bootstrap-329 .btn-default {
2297
+ color: #333333;
2298
+ background-color: #ffffff;
2299
+ border-color: #cccccc;
2300
+ }
2301
+
2302
+ .factory-bootstrap-329 .btn-default:hover,
2303
+ .factory-bootstrap-329 .btn-default:focus,
2304
+ .factory-bootstrap-329 .btn-default:active,
2305
+ .factory-bootstrap-329 .btn-default.active,
2306
+ .factory-bootstrap-329 .open .dropdown-toggle.btn-default {
2307
+ background: #fafafa;
2308
+ border-color: #999;
2309
+ color: #222;
2310
+ }
2311
+
2312
+ .factory-bootstrap-329 .btn-default:active,
2313
+ .factory-bootstrap-329 .btn-default.active,
2314
+ .factory-bootstrap-329 .open .dropdown-toggle.btn-default {
2315
+ background-image: none;
2316
+ }
2317
+
2318
+ .factory-bootstrap-329 .btn-default.disabled,
2319
+ .factory-bootstrap-329 .btn-default[disabled],
2320
+ .factory-bootstrap-329 fieldset[disabled] .btn-default,
2321
+ .factory-bootstrap-329 .btn-default.disabled:hover,
2322
+ .factory-bootstrap-329 .btn-default[disabled]:hover,
2323
+ .factory-bootstrap-329 fieldset[disabled] .btn-default:hover,
2324
+ .factory-bootstrap-329 .btn-default.disabled:focus,
2325
+ .factory-bootstrap-329 .btn-default[disabled]:focus,
2326
+ .factory-bootstrap-329 fieldset[disabled] .btn-default:focus,
2327
+ .factory-bootstrap-329 .btn-default.disabled:active,
2328
+ .factory-bootstrap-329 .btn-default[disabled]:active,
2329
+ .factory-bootstrap-329 fieldset[disabled] .btn-default:active,
2330
+ .factory-bootstrap-329 .btn-default.disabled.active,
2331
+ .factory-bootstrap-329 .btn-default[disabled].active,
2332
+ .factory-bootstrap-329 fieldset[disabled] .btn-default.active {
2333
+ background-color: #ffffff;
2334
+ border-color: #cccccc;
2335
+ }
2336
+
2337
+ .factory-bootstrap-329 .btn-default .badge {
2338
+ color: #ffffff;
2339
+ background-color: #fff;
2340
+ }
2341
+
2342
+ .factory-bootstrap-329 .btn-primary {
2343
+ color: #ffffff;
2344
+ background-color: #428bca;
2345
+ border-color: #357ebd;
2346
+ }
2347
+
2348
+ .factory-bootstrap-329 .btn-primary:hover,
2349
+ .factory-bootstrap-329 .btn-primary:focus,
2350
+ .factory-bootstrap-329 .btn-primary:active,
2351
+ .factory-bootstrap-329 .btn-primary.active,
2352
+ .factory-bootstrap-329 .open .dropdown-toggle.btn-primary {
2353
+ color: #ffffff;
2354
+ background-color: #3276b1;
2355
+ border-color: #285e8e;
2356
+ }
2357
+
2358
+ .factory-bootstrap-329 .btn-primary:active,
2359
+ .factory-bootstrap-329 .btn-primary.active,
2360
+ .factory-bootstrap-329 .open .dropdown-toggle.btn-primary {
2361
+ background-image: none;
2362
+ }
2363
+
2364
+ .factory-bootstrap-329 .btn-primary.disabled,
2365
+ .factory-bootstrap-329 .btn-primary[disabled],
2366
+ .factory-bootstrap-329 fieldset[disabled] .btn-primary,
2367
+ .factory-bootstrap-329 .btn-primary.disabled:hover,
2368
+ .factory-bootstrap-329 .btn-primary[disabled]:hover,
2369
+ .factory-bootstrap-329 fieldset[disabled] .btn-primary:hover,
2370
+ .factory-bootstrap-329 .btn-primary.disabled:focus,
2371
+ .factory-bootstrap-329 .btn-primary[disabled]:focus,
2372
+ .factory-bootstrap-329 fieldset[disabled] .btn-primary:focus,
2373
+ .factory-bootstrap-329 .btn-primary.disabled:active,
2374
+ .factory-bootstrap-329 .btn-primary[disabled]:active,
2375
+ .factory-bootstrap-329 fieldset[disabled] .btn-primary:active,
2376
+ .factory-bootstrap-329 .btn-primary.disabled.active,
2377
+ .factory-bootstrap-329 .btn-primary[disabled].active,
2378
+ .factory-bootstrap-329 fieldset[disabled] .btn-primary.active {
2379
+ background-color: #428bca;
2380
+ border-color: #357ebd;
2381
+ }
2382
+
2383
+ .factory-bootstrap-329 .btn-primary .badge {
2384
+ color: #428bca;
2385
+ background-color: #fff;
2386
+ }
2387
+
2388
+ .factory-bootstrap-329 .btn-warning {
2389
+ color: #ffffff;
2390
+ background-color: #f0ad4e;
2391
+ border-color: #eea236;
2392
+ }
2393
+
2394
+ .factory-bootstrap-329 .btn-warning:hover,
2395
+ .factory-bootstrap-329 .btn-warning:focus,
2396
+ .factory-bootstrap-329 .btn-warning:active,
2397
+ .factory-bootstrap-329 .btn-warning.active,
2398
+ .factory-bootstrap-329 .open .dropdown-toggle.btn-warning {
2399
+ color: #ffffff;
2400
+ background-color: #ed9c28;
2401
+ border-color: #d58512;
2402
+ }
2403
+
2404
+ .factory-bootstrap-329 .btn-warning:active,
2405
+ .factory-bootstrap-329 .btn-warning.active,
2406
+ .factory-bootstrap-329 .open .dropdown-toggle.btn-warning {
2407
+ background-image: none;
2408
+ }
2409
+
2410
+ .factory-bootstrap-329 .btn-warning.disabled,
2411
+ .factory-bootstrap-329 .btn-warning[disabled],
2412
+ .factory-bootstrap-329 fieldset[disabled] .btn-warning,
2413
+ .factory-bootstrap-329 .btn-warning.disabled:hover,
2414
+ .factory-bootstrap-329 .btn-warning[disabled]:hover,
2415
+ .factory-bootstrap-329 fieldset[disabled] .btn-warning:hover,
2416
+ .factory-bootstrap-329 .btn-warning.disabled:focus,
2417
+ .factory-bootstrap-329 .btn-warning[disabled]:focus,
2418
+ .factory-bootstrap-329 fieldset[disabled] .btn-warning:focus,
2419
+ .factory-bootstrap-329 .btn-warning.disabled:active,
2420
+ .factory-bootstrap-329 .btn-warning[disabled]:active,
2421
+ .factory-bootstrap-329 fieldset[disabled] .btn-warning:active,
2422
+ .factory-bootstrap-329 .btn-warning.disabled.active,
2423
+ .factory-bootstrap-329 .btn-warning[disabled].active,
2424
+ .factory-bootstrap-329 fieldset[disabled] .btn-warning.active {
2425
+ background-color: #f0ad4e;
2426
+ border-color: #eea236;
2427
+ }
2428
+
2429
+ .factory-bootstrap-329 .btn-warning .badge {
2430
+ color: #f0ad4e;
2431
+ background-color: #fff;
2432
+ }
2433
+
2434
+ .factory-bootstrap-329 .btn-success {
2435
+ color: #ffffff;
2436
+ background-color: #5cb85c;
2437
+ border-color: #4cae4c;
2438
+ }
2439
+
2440
+ .factory-bootstrap-329 .btn-success:hover,
2441
+ .factory-bootstrap-329 .btn-success:focus,
2442
+ .factory-bootstrap-329 .btn-success:active,
2443
+ .factory-bootstrap-329 .btn-success.active,
2444
+ .factory-bootstrap-329 .open .dropdown-toggle.btn-success {
2445
+ color: #ffffff;
2446
+ background-color: #47a447;
2447
+ border-color: #398439;
2448
+ }
2449
+
2450
+ .factory-bootstrap-329 .btn-success:active,
2451
+ .factory-bootstrap-329 .btn-success.active,
2452
+ .factory-bootstrap-329 .open .dropdown-toggle.btn-success {
2453
+ background-image: none;
2454
+ }
2455
+
2456
+ .factory-bootstrap-329 .btn-success.disabled,
2457
+ .factory-bootstrap-329 .btn-success[disabled],
2458
+ .factory-bootstrap-329 fieldset[disabled] .btn-success,
2459
+ .factory-bootstrap-329 .btn-success.disabled:hover,
2460
+ .factory-bootstrap-329 .btn-success[disabled]:hover,
2461
+ .factory-bootstrap-329 fieldset[disabled] .btn-success:hover,
2462
+ .factory-bootstrap-329 .btn-success.disabled:focus,
2463
+ .factory-bootstrap-329 .btn-success[disabled]:focus,
2464
+ .factory-bootstrap-329 fieldset[disabled] .btn-success:focus,
2465
+ .factory-bootstrap-329 .btn-success.disabled:active,
2466
+ .factory-bootstrap-329 .btn-success[disabled]:active,
2467
+ .factory-bootstrap-329 fieldset[disabled] .btn-success:active,
2468
+ .factory-bootstrap-329 .btn-success.disabled.active,
2469
+ .factory-bootstrap-329 .btn-success[disabled].active,
2470
+ .factory-bootstrap-329 fieldset[disabled] .btn-success.active {
2471
+ background-color: #5cb85c;
2472
+ border-color: #4cae4c;
2473
+ }
2474
+
2475
+ .factory-bootstrap-329 .btn-success .badge {
2476
+ color: #5cb85c;
2477
+ background-color: #fff;
2478
+ }
2479
+
2480
+ .factory-bootstrap-329 .btn-info {
2481
+ color: #ffffff;
2482
+ background-color: #5bc0de;
2483
+ border-color: #46b8da;
2484
+ }
2485
+
2486
+ .factory-bootstrap-329 .btn-info:hover,
2487
+ .factory-bootstrap-329 .btn-info:focus,
2488
+ .factory-bootstrap-329 .btn-info:active,
2489
+ .factory-bootstrap-329 .btn-info.active,
2490
+ .factory-bootstrap-329 .open .dropdown-toggle.btn-info {
2491
+ color: #ffffff;
2492
+ background-color: #39b3d7;
2493
+ border-color: #269abc;
2494
+ }
2495
+
2496
+ .factory-bootstrap-329 .btn-info:active,
2497
+ .factory-bootstrap-329 .btn-info.active,
2498
+ .factory-bootstrap-329 .open .dropdown-toggle.btn-info {
2499
+ background-image: none;
2500
+ }
2501
+
2502
+ .factory-bootstrap-329 .btn-info.disabled,
2503
+ .factory-bootstrap-329 .btn-info[disabled],
2504
+ .factory-bootstrap-329 fieldset[disabled] .btn-info,
2505
+ .factory-bootstrap-329 .btn-info.disabled:hover,
2506
+ .factory-bootstrap-329 .btn-info[disabled]:hover,
2507
+ .factory-bootstrap-329 fieldset[disabled] .btn-info:hover,
2508
+ .factory-bootstrap-329 .btn-info.disabled:focus,
2509
+ .factory-bootstrap-329 .btn-info[disabled]:focus,
2510
+ .factory-bootstrap-329 fieldset[disabled] .btn-info:focus,
2511
+ .factory-bootstrap-329 .btn-info.disabled:active,
2512
+ .factory-bootstrap-329 .btn-info[disabled]:active,
2513
+ .factory-bootstrap-329 fieldset[disabled] .btn-info:active,
2514
+ .factory-bootstrap-329 .btn-info.disabled.active,
2515
+ .factory-bootstrap-329 .btn-info[disabled].active,
2516
+ .factory-bootstrap-329 fieldset[disabled] .btn-info.active {
2517
+ background-color: #5bc0de;
2518
+ border-color: #46b8da;
2519
+ }
2520
+
2521
+ .factory-bootstrap-329 .btn-info .badge {
2522
+ color: #5bc0de;
2523
+ background-color: #fff;
2524
+ }
2525
+
2526
+ .factory-bootstrap-329 .btn-link {
2527
+ font-weight: normal;
2528
+ color: #428bca;
2529
+ cursor: pointer;
2530
+ border-radius: 0;
2531
+ }
2532
+
2533
+ .factory-bootstrap-329 .btn-link,
2534
+ .factory-bootstrap-329 .btn-link:active,
2535
+ .factory-bootstrap-329 .btn-link[disabled],
2536
+ .factory-bootstrap-329 fieldset[disabled] .btn-link {
2537
+ background-color: transparent;
2538
+ -webkit-box-shadow: none;
2539
+ box-shadow: none;
2540
+ }
2541
+
2542
+ .factory-bootstrap-329 .btn-link,
2543
+ .factory-bootstrap-329 .btn-link:hover,
2544
+ .factory-bootstrap-329 .btn-link:focus,
2545
+ .factory-bootstrap-329 .btn-link:active {
2546
+ border-color: transparent;
2547
+ }
2548
+
2549
+ .factory-bootstrap-329 .btn-link:hover,
2550
+ .factory-bootstrap-329 .btn-link:focus {
2551
+ color: #2a6496;
2552
+ text-decoration: underline;
2553
+ background-color: transparent;
2554
+ }
2555
+
2556
+ .factory-bootstrap-329 .btn-link[disabled]:hover,
2557
+ .factory-bootstrap-329 fieldset[disabled] .btn-link:hover,
2558
+ .factory-bootstrap-329 .btn-link[disabled]:focus,
2559
+ .factory-bootstrap-329 fieldset[disabled] .btn-link:focus {
2560
+ color: #999999;
2561
+ text-decoration: none;
2562
+ }
2563
+
2564
+ .factory-bootstrap-329 .btn-lg {
2565
+ padding: 10px 16px;
2566
+ font-size: 18px;
2567
+ line-height: 1.33;
2568
+ border-radius: 6px;
2569
+ }
2570
+
2571
+ .factory-bootstrap-329 .btn-sm {
2572
+ padding: 5px 10px;
2573
+ font-size: 12px;
2574
+ line-height: 1.5;
2575
+ border-radius: 3px;
2576
+ }
2577
+
2578
+ .factory-bootstrap-329 .btn-xs {
2579
+ padding: 1px 5px;
2580
+ font-size: 12px;
2581
+ line-height: 1.5;
2582
+ border-radius: 3px;
2583
+ }
2584
+
2585
+ .factory-bootstrap-329 .btn-block {
2586
+ display: block;
2587
+ width: 100%;
2588
+ padding-right: 0;
2589
+ padding-left: 0;
2590
+ }
2591
+
2592
+ .factory-bootstrap-329 .btn-block + .btn-block {
2593
+ margin-top: 5px;
2594
+ }
2595
+
2596
+ .factory-bootstrap-329 input[type="submit"].btn-block,
2597
+ .factory-bootstrap-329 input[type="reset"].btn-block,
2598
+ .factory-bootstrap-329 input[type="button"].btn-block {
2599
+ width: 100%;
2600
+ }
2601
+
2602
+ .factory-bootstrap-329 .fade {
2603
+ opacity: 0;
2604
+ -webkit-transition: opacity 0.15s linear;
2605
+ transition: opacity 0.15s linear;
2606
+ }
2607
+
2608
+ .factory-bootstrap-329 .fade.in {
2609
+ opacity: 1;
2610
+ }
2611
+
2612
+ .factory-bootstrap-329 .collapse {
2613
+ display: none;
2614
+ }
2615
+
2616
+ .factory-bootstrap-329 .collapse.in {
2617
+ display: block;
2618
+ }
2619
+
2620
+ .factory-bootstrap-329 .collapsing {
2621
+ position: relative;
2622
+ height: 0;
2623
+ overflow: hidden;
2624
+ -webkit-transition: height 0.35s ease;
2625
+ transition: height 0.35s ease;
2626
+ }
2627
+
2628
+ @font-face {
2629
+ font-family: 'Glyphicons Halflings';
2630
+ src: url('../fonts/glyphicons-halflings-regular.eot');
2631
+ 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');
2632
+ }
2633
+
2634
+ .factory-bootstrap-329 .glyphicon {
2635
+ position: relative;
2636
+ top: 1px;
2637
+ display: inline-block;
2638
+ font-family: 'Glyphicons Halflings';
2639
+ -webkit-font-smoothing: antialiased;
2640
+ font-style: normal;
2641
+ font-weight: normal;
2642
+ line-height: 1;
2643
+ -moz-osx-font-smoothing: grayscale;
2644
+ }
2645
+
2646
+ .factory-bootstrap-329 .glyphicon:empty {
2647
+ width: 1em;
2648
+ }
2649
+
2650
+ .factory-bootstrap-329 .glyphicon-asterisk:before {
2651
+ content: "\2a";
2652
+ }
2653
+
2654
+ .factory-bootstrap-329 .glyphicon-plus:before {
2655
+ content: "\2b";
2656
+ }
2657
+
2658
+ .factory-bootstrap-329 .glyphicon-euro:before {
2659
+ content: "\20ac";
2660
+ }
2661
+
2662
+ .factory-bootstrap-329 .glyphicon-minus:before {
2663
+ content: "\2212";
2664
+ }
2665
+
2666
+ .factory-bootstrap-329 .glyphicon-cloud:before {
2667
+ content: "\2601";
2668
+ }
2669
+
2670
+ .factory-bootstrap-329 .glyphicon-envelope:before {
2671
+ content: "\2709";
2672
+ }
2673
+
2674
+ .factory-bootstrap-329 .glyphicon-pencil:before {
2675
+ content: "\270f";
2676
+ }
2677
+
2678
+ .factory-bootstrap-329 .glyphicon-glass:before {
2679
+ content: "\e001";
2680
+ }
2681
+
2682
+ .factory-bootstrap-329 .glyphicon-music:before {
2683
+ content: "\e002";
2684
+ }
2685
+
2686
+ .factory-bootstrap-329 .glyphicon-search:before {
2687
+ content: "\e003";
2688
+ }
2689
+
2690
+ .factory-bootstrap-329 .glyphicon-heart:before {
2691
+ content: "\e005";
2692
+ }
2693
+
2694
+ .factory-bootstrap-329 .glyphicon-star:before {
2695
+ content: "\e006";
2696
+ }
2697
+
2698
+ .factory-bootstrap-329 .glyphicon-star-empty:before {
2699
+ content: "\e007";
2700
+ }
2701
+
2702
+ .factory-bootstrap-329 .glyphicon-user:before {
2703
+ content: "\e008";
2704
+ }
2705
+
2706
+ .factory-bootstrap-329 .glyphicon-film:before {
2707
+ content: "\e009";
2708
+ }
2709
+
2710
+ .factory-bootstrap-329 .glyphicon-th-large:before {
2711
+ content: "\e010";
2712
+ }
2713
+
2714
+ .factory-bootstrap-329 .glyphicon-th:before {
2715
+ content: "\e011";
2716
+ }
2717
+
2718
+ .factory-bootstrap-329 .glyphicon-th-list:before {
2719
+ content: "\e012";
2720
+ }
2721
+
2722
+ .factory-bootstrap-329 .glyphicon-ok:before {
2723
+ content: "\e013";
2724
+ }
2725
+
2726
+ .factory-bootstrap-329 .glyphicon-remove:before {
2727
+ content: "\e014";
2728
+ }
2729
+
2730
+ .factory-bootstrap-329 .glyphicon-zoom-in:before {
2731
+ content: "\e015";
2732
+ }
2733
+
2734
+ .factory-bootstrap-329 .glyphicon-zoom-out:before {
2735
+ content: "\e016";
2736
+ }
2737
+
2738
+ .factory-bootstrap-329 .glyphicon-off:before {
2739
+ content: "\e017";
2740
+ }
2741
+
2742
+ .factory-bootstrap-329 .glyphicon-signal:before {
2743
+ content: "\e018";
2744
+ }
2745
+
2746
+ .factory-bootstrap-329 .glyphicon-cog:before {
2747
+ content: "\e019";
2748
+ }
2749
+
2750
+ .factory-bootstrap-329 .glyphicon-trash:before {
2751
+ content: "\e020";
2752
+ }
2753
+
2754
+ .factory-bootstrap-329 .glyphicon-home:before {
2755
+ content: "\e021";
2756
+ }
2757
+
2758
+ .factory-bootstrap-329 .glyphicon-file:before {
2759
+ content: "\e022";
2760
+ }
2761
+
2762
+ .factory-bootstrap-329 .glyphicon-time:before {
2763
+ content: "\e023";
2764
+ }
2765
+
2766
+ .factory-bootstrap-329 .glyphicon-road:before {
2767
+ content: "\e024";
2768
+ }
2769
+
2770
+ .factory-bootstrap-329 .glyphicon-download-alt:before {
2771
+ content: "\e025";
2772
+ }
2773
+
2774
+ .factory-bootstrap-329 .glyphicon-download:before {
2775
+ content: "\e026";
2776
+ }
2777
+
2778
+ .factory-bootstrap-329 .glyphicon-upload:before {
2779
+ content: "\e027";
2780
+ }
2781
+
2782
+ .factory-bootstrap-329 .glyphicon-inbox:before {
2783
+ content: "\e028";
2784
+ }
2785
+
2786
+ .factory-bootstrap-329 .glyphicon-play-circle:before {
2787
+ content: "\e029";
2788
+ }
2789
+
2790
+ .factory-bootstrap-329 .glyphicon-repeat:before {
2791
+ content: "\e030";
2792
+ }
2793
+
2794
+ .factory-bootstrap-329 .glyphicon-refresh:before {
2795
+ content: "\e031";
2796
+ }
2797
+
2798
+ .factory-bootstrap-329 .glyphicon-list-alt:before {
2799
+ content: "\e032";
2800
+ }
2801
+
2802
+ .factory-bootstrap-329 .glyphicon-lock:before {
2803
+ content: "\e033";
2804
+ }
2805
+
2806
+ .factory-bootstrap-329 .glyphicon-flag:before {
2807
+ content: "\e034";
2808
+ }
2809
+
2810
+ .factory-bootstrap-329 .glyphicon-headphones:before {
2811
+ content: "\e035";
2812
+ }
2813
+
2814
+ .factory-bootstrap-329 .glyphicon-volume-off:before {
2815
+ content: "\e036";
2816
+ }
2817
+
2818
+ .factory-bootstrap-329 .glyphicon-volume-down:before {
2819
+ content: "\e037";
2820
+ }
2821
+
2822
+ .factory-bootstrap-329 .glyphicon-volume-up:before {
2823
+ content: "\e038";
2824
+ }
2825
+
2826
+ .factory-bootstrap-329 .glyphicon-qrcode:before {
2827
+ content: "\e039";
2828
+ }
2829
+
2830
+ .factory-bootstrap-329 .glyphicon-barcode:before {
2831
+ content: "\e040";
2832
+ }
2833
+
2834
+ .factory-bootstrap-329 .glyphicon-tag:before {
2835
+ content: "\e041";
2836
+ }
2837
+
2838
+ .factory-bootstrap-329 .glyphicon-tags:before {
2839
+ content: "\e042";
2840
+ }
2841
+
2842
+ .factory-bootstrap-329 .glyphicon-book:before {
2843
+ content: "\e043";
2844
+ }
2845
+
2846
+ .factory-bootstrap-329 .glyphicon-bookmark:before {
2847
+ content: "\e044";
2848
+ }
2849
+
2850
+ .factory-bootstrap-329 .glyphicon-print:before {
2851
+ content: "\e045";
2852
+ }
2853
+
2854
+ .factory-bootstrap-329 .glyphicon-camera:before {
2855
+ content: "\e046";
2856
+ }
2857
+
2858
+ .factory-bootstrap-329 .glyphicon-font:before {
2859
+ content: "\e047";
2860
+ }
2861
+
2862
+ .factory-bootstrap-329 .glyphicon-bold:before {
2863
+ content: "\e048";
2864
+ }
2865
+
2866
+ .factory-bootstrap-329 .glyphicon-italic:before {
2867
+ content: "\e049";
2868
+ }
2869
+
2870
+ .factory-bootstrap-329 .glyphicon-text-height:before {
2871
+ content: "\e050";
2872
+ }
2873
+
2874
+ .factory-bootstrap-329 .glyphicon-text-width:before {
2875
+ content: "\e051";
2876
+ }
2877
+
2878
+ .factory-bootstrap-329 .glyphicon-align-left:before {
2879
+ content: "\e052";
2880
+ }
2881
+
2882
+ .factory-bootstrap-329 .glyphicon-align-center:before {
2883
+ content: "\e053";
2884
+ }
2885
+
2886
+ .factory-bootstrap-329 .glyphicon-align-right:before {
2887
+ content: "\e054";
2888
+ }
2889
+
2890
+ .factory-bootstrap-329 .glyphicon-align-justify:before {
2891
+ content: "\e055";
2892
+ }
2893
+
2894
+ .factory-bootstrap-329 .glyphicon-list:before {
2895
+ content: "\e056";
2896
+ }
2897
+
2898
+ .factory-bootstrap-329 .glyphicon-indent-left:before {
2899
+ content: "\e057";
2900
+ }
2901
+
2902
+ .factory-bootstrap-329 .glyphicon-indent-right:before {
2903
+ content: "\e058";
2904
+ }
2905
+
2906
+ .factory-bootstrap-329 .glyphicon-facetime-video:before {
2907
+ content: "\e059";
2908
+ }
2909
+
2910
+ .factory-bootstrap-329 .glyphicon-picture:before {
2911
+ content: "\e060";
2912
+ }
2913
+
2914
+ .factory-bootstrap-329 .glyphicon-map-marker:before {
2915
+ content: "\e062";
2916
+ }
2917
+
2918
+ .factory-bootstrap-329 .glyphicon-adjust:before {
2919
+ content: "\e063";
2920
+ }
2921
+
2922
+ .factory-bootstrap-329 .glyphicon-tint:before {
2923
+ content: "\e064";
2924
+ }
2925
+
2926
+ .factory-bootstrap-329 .glyphicon-edit:before {
2927
+ content: "\e065";
2928
+ }
2929
+
2930
+ .factory-bootstrap-329 .glyphicon-share:before {
2931
+ content: "\e066";
2932
+ }
2933
+
2934
+ .factory-bootstrap-329 .glyphicon-check:before {
2935
+ content: "\e067";
2936
+ }
2937
+
2938
+ .factory-bootstrap-329 .glyphicon-move:before {
2939
+ content: "\e068";
2940
+ }
2941
+
2942
+ .factory-bootstrap-329 .glyphicon-step-backward:before {
2943
+ content: "\e069";
2944
+ }
2945
+
2946
+ .factory-bootstrap-329 .glyphicon-fast-backward:before {
2947
+ content: "\e070";
2948
+ }
2949
+
2950
+ .factory-bootstrap-329 .glyphicon-backward:before {
2951
+ content: "\e071";
2952
+ }
2953
+
2954
+ .factory-bootstrap-329 .glyphicon-play:before {
2955
+ content: "\e072";
2956
+ }
2957
+
2958
+ .factory-bootstrap-329 .glyphicon-pause:before {
2959
+ content: "\e073";
2960
+ }
2961
+
2962
+ .factory-bootstrap-329 .glyphicon-stop:before {
2963
+ content: "\e074";
2964
+ }
2965
+
2966
+ .factory-bootstrap-329 .glyphicon-forward:before {
2967
+ content: "\e075";
2968
+ }
2969
+
2970
+ .factory-bootstrap-329 .glyphicon-fast-forward:before {
2971
+ content: "\e076";
2972
+ }
2973
+
2974
+ .factory-bootstrap-329 .glyphicon-step-forward:before {
2975
+ content: "\e077";
2976
+ }
2977
+
2978
+ .factory-bootstrap-329 .glyphicon-eject:before {
2979
+ content: "\e078";
2980
+ }
2981
+
2982
+ .factory-bootstrap-329 .glyphicon-chevron-left:before {
2983
+ content: "\e079";
2984
+ }
2985
+
2986
+ .factory-bootstrap-329 .glyphicon-chevron-right:before {
2987
+ content: "\e080";
2988
+ }
2989
+
2990
+ .factory-bootstrap-329 .glyphicon-plus-sign:before {
2991
+ content: "\e081";
2992
+ }
2993
+
2994
+ .factory-bootstrap-329 .glyphicon-minus-sign:before {
2995
+ content: "\e082";
2996
+ }
2997
+
2998
+ .factory-bootstrap-329 .glyphicon-remove-sign:before {
2999
+ content: "\e083";
3000
+ }
3001
+
3002
+ .factory-bootstrap-329 .glyphicon-ok-sign:before {
3003
+ content: "\e084";
3004
+ }
3005
+
3006
+ .factory-bootstrap-329 .glyphicon-question-sign:before {
3007
+ content: "\e085";
3008
+ }
3009
+
3010
+ .factory-bootstrap-329 .glyphicon-info-sign:before {
3011
+ content: "\e086";
3012
+ }
3013
+
3014
+ .factory-bootstrap-329 .glyphicon-screenshot:before {
3015
+ content: "\e087";
3016
+ }
3017
+
3018
+ .factory-bootstrap-329 .glyphicon-remove-circle:before {
3019
+ content: "\e088";
3020
+ }
3021
+
3022
+ .factory-bootstrap-329 .glyphicon-ok-circle:before {
3023
+ content: "\e089";
3024
+ }
3025
+
3026
+ .factory-bootstrap-329 .glyphicon-ban-circle:before {
3027
+ content: "\e090";
3028
+ }
3029
+
3030
+ .factory-bootstrap-329 .glyphicon-arrow-left:before {
3031
+ content: "\e091";
3032
+ }
3033
+
3034
+ .factory-bootstrap-329 .glyphicon-arrow-right:before {
3035
+ content: "\e092";
3036
+ }
3037
+
3038
+ .factory-bootstrap-329 .glyphicon-arrow-up:before {
3039
+ content: "\e093";
3040
+ }
3041
+
3042
+ .factory-bootstrap-329 .glyphicon-arrow-down:before {
3043
+ content: "\e094";
3044
+ }
3045
+
3046
+ .factory-bootstrap-329 .glyphicon-share-alt:before {
3047
+ content: "\e095";
3048
+ }
3049
+
3050
+ .factory-bootstrap-329 .glyphicon-resize-full:before {
3051
+ content: "\e096";
3052
+ }
3053
+
3054
+ .factory-bootstrap-329 .glyphicon-resize-small:before {
3055
+ content: "\e097";
3056
+ }
3057
+
3058
+ .factory-bootstrap-329 .glyphicon-exclamation-sign:before {
3059
+ content: "\e101";
3060
+ }
3061
+
3062
+ .factory-bootstrap-329 .glyphicon-gift:before {
3063
+ content: "\e102";
3064
+ }
3065
+
3066
+ .factory-bootstrap-329 .glyphicon-leaf:before {
3067
+ content: "\e103";
3068
+ }
3069
+
3070
+ .factory-bootstrap-329 .glyphicon-fire:before {
3071
+ content: "\e104";
3072
+ }
3073
+
3074
+ .factory-bootstrap-329 .glyphicon-eye-open:before {
3075
+ content: "\e105";
3076
+ }
3077
+
3078
+ .factory-bootstrap-329 .glyphicon-eye-close:before {
3079
+ content: "\e106";
3080
+ }
3081
+
3082
+ .factory-bootstrap-329 .glyphicon-warning-sign:before {
3083
+ content: "\e107";
3084
+ }
3085
+
3086
+ .factory-bootstrap-329 .glyphicon-plane:before {
3087
+ content: "\e108";
3088
+ }
3089
+
3090
+ .factory-bootstrap-329 .glyphicon-calendar:before {
3091
+ content: "\e109";
3092
+ }
3093
+
3094
+ .factory-bootstrap-329 .glyphicon-random:before {
3095
+ content: "\e110";
3096
+ }
3097
+
3098
+ .factory-bootstrap-329 .glyphicon-comment:before {
3099
+ content: "\e111";
3100
+ }
3101
+
3102
+ .factory-bootstrap-329 .glyphicon-magnet:before {
3103
+ content: "\e112";
3104
+ }
3105
+
3106
+ .factory-bootstrap-329 .glyphicon-chevron-up:before {
3107
+ content: "\e113";
3108
+ }
3109
+
3110
+ .factory-bootstrap-329 .glyphicon-chevron-down:before {
3111
+ content: "\e114";
3112
+ }
3113
+
3114
+ .factory-bootstrap-329 .glyphicon-retweet:before {
3115
+ content: "\e115";
3116
+ }
3117
+
3118
+ .factory-bootstrap-329 .glyphicon-shopping-cart:before {
3119
+ content: "\e116";
3120
+ }
3121
+
3122
+ .factory-bootstrap-329 .glyphicon-folder-close:before {
3123
+ content: "\e117";
3124
+ }
3125
+
3126
+ .factory-bootstrap-329 .glyphicon-folder-open:before {
3127
+ content: "\e118";
3128
+ }
3129
+
3130
+ .factory-bootstrap-329 .glyphicon-resize-vertical:before {
3131
+ content: "\e119";
3132
+ }
3133
+
3134
+ .factory-bootstrap-329 .glyphicon-resize-horizontal:before {
3135
+ content: "\e120";
3136
+ }
3137
+
3138
+ .factory-bootstrap-329 .glyphicon-hdd:before {
3139
+ content: "\e121";
3140
+ }
3141
+
3142
+ .factory-bootstrap-329 .glyphicon-bullhorn:before {
3143
+ content: "\e122";
3144
+ }
3145
+
3146
+ .factory-bootstrap-329 .glyphicon-bell:before {
3147
+ content: "\e123";
3148
+ }
3149
+
3150
+ .factory-bootstrap-329 .glyphicon-certificate:before {
3151
+ content: "\e124";
3152
+ }
3153
+
3154
+ .factory-bootstrap-329 .glyphicon-thumbs-up:before {
3155
+ content: "\e125";
3156
+ }
3157
+
3158
+ .factory-bootstrap-329 .glyphicon-thumbs-down:before {
3159
+ content: "\e126";
3160
+ }
3161
+
3162
+ .factory-bootstrap-329 .glyphicon-hand-right:before {
3163
+ content: "\e127";
3164
+ }
3165
+
3166
+ .factory-bootstrap-329 .glyphicon-hand-left:before {
3167
+ content: "\e128";
3168
+ }
3169
+
3170
+ .factory-bootstrap-329 .glyphicon-hand-up:before {
3171
+ content: "\e129";
3172
+ }
3173
+
3174
+ .factory-bootstrap-329 .glyphicon-hand-down:before {
3175
+ content: "\e130";
3176
+ }
3177
+
3178
+ .factory-bootstrap-329 .glyphicon-circle-arrow-right:before {
3179
+ content: "\e131";
3180
+ }
3181
+
3182
+ .factory-bootstrap-329 .glyphicon-circle-arrow-left:before {
3183
+ content: "\e132";
3184
+ }
3185
+
3186
+ .factory-bootstrap-329 .glyphicon-circle-arrow-up:before {
3187
+ content: "\e133";
3188
+ }
3189
+
3190
+ .factory-bootstrap-329 .glyphicon-circle-arrow-down:before {
3191
+ content: "\e134";
3192
+ }
3193
+
3194
+ .factory-bootstrap-329 .glyphicon-globe:before {
3195
+ content: "\e135";
3196
+ }
3197
+
3198
+ .factory-bootstrap-329 .glyphicon-wrench:before {
3199
+ content: "\e136";
3200
+ }
3201
+
3202
+ .factory-bootstrap-329 .glyphicon-tasks:before {
3203
+ content: "\e137";
3204
+ }
3205
+
3206
+ .factory-bootstrap-329 .glyphicon-filter:before {
3207
+ content: "\e138";
3208
+ }
3209
+
3210
+ .factory-bootstrap-329 .glyphicon-briefcase:before {
3211
+ content: "\e139";
3212
+ }
3213
+
3214
+ .factory-bootstrap-329 .glyphicon-fullscreen:before {
3215
+ content: "\e140";
3216
+ }
3217
+
3218
+ .factory-bootstrap-329 .glyphicon-dashboard:before {
3219
+ content: "\e141";
3220
+ }
3221
+
3222
+ .factory-bootstrap-329 .glyphicon-paperclip:before {
3223
+ content: "\e142";
3224
+ }
3225
+
3226
+ .factory-bootstrap-329 .glyphicon-heart-empty:before {
3227
+ content: "\e143";
3228
+ }
3229
+
3230
+ .factory-bootstrap-329 .glyphicon-link:before {
3231
+ content: "\e144";
3232
+ }
3233
+
3234
+ .factory-bootstrap-329 .glyphicon-phone:before {
3235
+ content: "\e145";
3236
+ }
3237
+
3238
+ .factory-bootstrap-329 .glyphicon-pushpin:before {
3239
+ content: "\e146";
3240
+ }
3241
+
3242
+ .factory-bootstrap-329 .glyphicon-usd:before {
3243
+ content: "\e148";
3244
+ }
3245
+
3246
+ .factory-bootstrap-329 .glyphicon-gbp:before {
3247
+ content: "\e149";
3248
+ }
3249
+
3250
+ .factory-bootstrap-329 .glyphicon-sort:before {
3251
+ content: "\e150";
3252
+ }
3253
+
3254
+ .factory-bootstrap-329 .glyphicon-sort-by-alphabet:before {
3255
+ content: "\e151";
3256
+ }
3257
+
3258
+ .factory-bootstrap-329 .glyphicon-sort-by-alphabet-alt:before {
3259
+ content: "\e152";
3260
+ }
3261
+
3262
+ .factory-bootstrap-329 .glyphicon-sort-by-order:before {
3263
+ content: "\e153";
3264
+ }
3265
+
3266
+ .factory-bootstrap-329 .glyphicon-sort-by-order-alt:before {
3267
+ content: "\e154";
3268
+ }
3269
+
3270
+ .factory-bootstrap-329 .glyphicon-sort-by-attributes:before {
3271
+ content: "\e155";
3272
+ }
3273
+
3274
+ .factory-bootstrap-329 .glyphicon-sort-by-attributes-alt:before {
3275
+ content: "\e156";
3276
+ }
3277
+
3278
+ .factory-bootstrap-329 .glyphicon-unchecked:before {
3279
+ content: "\e157";
3280
+ }
3281
+
3282
+ .factory-bootstrap-329 .glyphicon-expand:before {
3283
+ content: "\e158";
3284
+ }
3285
+
3286
+ .factory-bootstrap-329 .glyphicon-collapse-down:before {
3287
+ content: "\e159";
3288
+ }
3289
+
3290
+ .factory-bootstrap-329 .glyphicon-collapse-up:before {
3291
+ content: "\e160";
3292
+ }
3293
+
3294
+ .factory-bootstrap-329 .glyphicon-log-in:before {
3295
+ content: "\e161";
3296
+ }
3297
+
3298
+ .factory-bootstrap-329 .glyphicon-flash:before {
3299
+ content: "\e162";
3300
+ }
3301
+
3302
+ .factory-bootstrap-329 .glyphicon-log-out:before {
3303
+ content: "\e163";
3304
+ }
3305
+
3306
+ .factory-bootstrap-329 .glyphicon-new-window:before {
3307
+ content: "\e164";
3308
+ }
3309
+
3310
+ .factory-bootstrap-329 .glyphicon-record:before {
3311
+ content: "\e165";
3312
+ }
3313
+
3314
+ .factory-bootstrap-329 .glyphicon-save:before {
3315
+ content: "\e166";
3316
+ }
3317
+
3318
+ .factory-bootstrap-329 .glyphicon-open:before {
3319
+ content: "\e167";
3320
+ }
3321
+
3322
+ .factory-bootstrap-329 .glyphicon-saved:before {
3323
+ content: "\e168";
3324
+ }
3325
+
3326
+ .factory-bootstrap-329 .glyphicon-import:before {
3327
+ content: "\e169";
3328
+ }
3329
+
3330
+ .factory-bootstrap-329 .glyphicon-export:before {
3331
+ content: "\e170";
3332
+ }
3333
+
3334
+ .factory-bootstrap-329 .glyphicon-send:before {
3335
+ content: "\e171";
3336
+ }
3337
+
3338
+ .factory-bootstrap-329 .glyphicon-floppy-disk:before {
3339
+ content: "\e172";
3340
+ }
3341
+
3342
+ .factory-bootstrap-329 .glyphicon-floppy-saved:before {
3343
+ content: "\e173";
3344
+ }
3345
+
3346
+ .factory-bootstrap-329 .glyphicon-floppy-remove:before {
3347
+ content: "\e174";
3348
+ }
3349
+
3350
+ .factory-bootstrap-329 .glyphicon-floppy-save:before {
3351
+ content: "\e175";
3352
+ }
3353
+
3354
+ .factory-bootstrap-329 .glyphicon-floppy-open:before {
3355
+ content: "\e176";
3356
+ }
3357
+
3358
+ .factory-bootstrap-329 .glyphicon-credit-card:before {
3359
+ content: "\e177";
3360
+ }
3361
+
3362
+ .factory-bootstrap-329 .glyphicon-transfer:before {
3363
+ content: "\e178";
3364
+ }
3365
+
3366
+ .factory-bootstrap-329 .glyphicon-cutlery:before {
3367
+ content: "\e179";
3368
+ }
3369
+
3370
+ .factory-bootstrap-329 .glyphicon-header:before {
3371
+ content: "\e180";
3372
+ }
3373
+
3374
+ .factory-bootstrap-329 .glyphicon-compressed:before {
3375
+ content: "\e181";
3376
+ }
3377
+
3378
+ .factory-bootstrap-329 .glyphicon-earphone:before {
3379
+ content: "\e182";
3380
+ }
3381
+
3382
+ .factory-bootstrap-329 .glyphicon-phone-alt:before {
3383
+ content: "\e183";
3384
+ }
3385
+
3386
+ .factory-bootstrap-329 .glyphicon-tower:before {
3387
+ content: "\e184";
3388
+ }
3389
+
3390
+ .factory-bootstrap-329 .glyphicon-stats:before {
3391
+ content: "\e185";
3392
+ }
3393
+
3394
+ .factory-bootstrap-329 .glyphicon-sd-video:before {
3395
+ content: "\e186";
3396
+ }
3397
+
3398
+ .factory-bootstrap-329 .glyphicon-hd-video:before {
3399
+ content: "\e187";
3400
+ }
3401
+
3402
+ .factory-bootstrap-329 .glyphicon-subtitles:before {
3403
+ content: "\e188";
3404
+ }
3405
+
3406
+ .factory-bootstrap-329 .glyphicon-sound-stereo:before {
3407
+ content: "\e189";
3408
+ }
3409
+
3410
+ .factory-bootstrap-329 .glyphicon-sound-dolby:before {
3411
+ content: "\e190";
3412
+ }
3413
+
3414
+ .factory-bootstrap-329 .glyphicon-sound-5-1:before {
3415
+ content: "\e191";
3416
+ }
3417
+
3418
+ .factory-bootstrap-329 .glyphicon-sound-6-1:before {
3419
+ content: "\e192";
3420
+ }
3421
+
3422
+ .factory-bootstrap-329 .glyphicon-sound-7-1:before {
3423
+ content: "\e193";
3424
+ }
3425
+
3426
+ .factory-bootstrap-329 .glyphicon-copyright-mark:before {
3427
+ content: "\e194";
3428
+ }
3429
+
3430
+ .factory-bootstrap-329 .glyphicon-registration-mark:before {
3431
+ content: "\e195";
3432
+ }
3433
+
3434
+ .factory-bootstrap-329 .glyphicon-cloud-download:before {
3435
+ content: "\e197";
3436
+ }
3437
+
3438
+ .factory-bootstrap-329 .glyphicon-cloud-upload:before {
3439
+ content: "\e198";
3440
+ }
3441
+
3442
+ .factory-bootstrap-329 .glyphicon-tree-conifer:before {
3443
+ content: "\e199";
3444
+ }
3445
+
3446
+ .factory-bootstrap-329 .glyphicon-tree-deciduous:before {
3447
+ content: "\e200";
3448
+ }
3449
+
3450
+ .factory-bootstrap-329 .caret {
3451
+ display: inline-block;
3452
+ width: 0;
3453
+ height: 0;
3454
+ margin-left: 2px;
3455
+ vertical-align: middle;
3456
+ border-top: 4px solid;
3457
+ border-right: 4px solid transparent;
3458
+ border-left: 4px solid transparent;
3459
+ }
3460
+
3461
+ .factory-bootstrap-329 .dropdown {
3462
+ position: relative;
3463
+ }
3464
+
3465
+ .factory-bootstrap-329 .dropdown-toggle:focus {
3466
+ outline: 0;
3467
+ }
3468
+
3469
+ .factory-bootstrap-329 .dropdown-menu {
3470
+ position: absolute;
3471
+ top: 100%;
3472
+ left: 0;
3473
+ z-index: 1000;
3474
+ display: none;
3475
+ float: left;
3476
+ min-width: 160px;
3477
+ padding: 5px 0;
3478
+ margin: 2px 0 0;
3479
+ font-size: 14px;
3480
+ list-style: none;
3481
+ background-color: #ffffff;
3482
+ border: 1px solid #cccccc;
3483
+ border: 1px solid rgba(0, 0, 0, 0.15);
3484
+ border-radius: 4px;
3485
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3486
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3487
+ background-clip: padding-box;
3488
+ }
3489
+
3490
+ .factory-bootstrap-329 .dropdown-menu.pull-right {
3491
+ right: 0;
3492
+ left: auto;
3493
+ }
3494
+
3495
+ .factory-bootstrap-329 .dropdown-menu .divider {
3496
+ height: 1px;
3497
+ margin: 9px 0;
3498
+ overflow: hidden;
3499
+ background-color: #e5e5e5;
3500
+ }
3501
+
3502
+ .factory-bootstrap-329 .dropdown-menu > li > a {
3503
+ display: block;
3504
+ padding: 3px 20px;
3505
+ clear: both;
3506
+ font-weight: normal;
3507
+ line-height: 1.428571429;
3508
+ color: #333333;
3509
+ white-space: nowrap;
3510
+ }
3511
+
3512
+ .factory-bootstrap-329 .dropdown-menu > li > a:hover,
3513
+ .factory-bootstrap-329 .dropdown-menu > li > a:focus {
3514
+ color: #262626;
3515
+ text-decoration: none;
3516
+ background-color: #f5f5f5;
3517
+ }
3518
+
3519
+ .factory-bootstrap-329 .dropdown-menu > .active > a,
3520
+ .factory-bootstrap-329 .dropdown-menu > .active > a:hover,
3521
+ .factory-bootstrap-329 .dropdown-menu > .active > a:focus {
3522
+ color: #ffffff;
3523
+ text-decoration: none;
3524
+ background-color: #428bca;
3525
+ outline: 0;
3526
+ }
3527
+
3528
+ .factory-bootstrap-329 .dropdown-menu > .disabled > a,
3529
+ .factory-bootstrap-329 .dropdown-menu > .disabled > a:hover,
3530
+ .factory-bootstrap-329 .dropdown-menu > .disabled > a:focus {
3531
+ color: #999999;
3532
+ }
3533
+
3534
+ .factory-bootstrap-329 .dropdown-menu > .disabled > a:hover,
3535
+ .factory-bootstrap-329 .dropdown-menu > .disabled > a:focus {
3536
+ text-decoration: none;
3537
+ cursor: not-allowed;
3538
+ background-color: transparent;
3539
+ background-image: none;
3540
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
3541
+ }
3542
+
3543
+ .factory-bootstrap-329 .open > .dropdown-menu {
3544
+ display: block;
3545
+ }
3546
+
3547
+ .factory-bootstrap-329 .open > a {
3548
+ outline: 0;
3549
+ }
3550
+
3551
+ .factory-bootstrap-329 .dropdown-header {
3552
+ display: block;
3553
+ padding: 3px 20px;
3554
+ font-size: 12px;
3555
+ line-height: 1.428571429;
3556
+ color: #999999;
3557
+ }
3558
+
3559
+ .factory-bootstrap-329 .dropdown-backdrop {
3560
+ position: fixed;
3561
+ top: 0;
3562
+ right: 0;
3563
+ bottom: 0;
3564
+ left: 0;
3565
+ z-index: 990;
3566
+ }
3567
+
3568
+ .factory-bootstrap-329 .pull-right > .dropdown-menu {
3569
+ right: 0;
3570
+ left: auto;
3571
+ }
3572
+
3573
+ .factory-bootstrap-329 .dropup .caret,
3574
+ .factory-bootstrap-329 .navbar-fixed-bottom .dropdown .caret {
3575
+ border-top: 0;
3576
+ border-bottom: 4px solid;
3577
+ content: "";
3578
+ }
3579
+
3580
+ .factory-bootstrap-329 .dropup .dropdown-menu,
3581
+ .factory-bootstrap-329 .navbar-fixed-bottom .dropdown .dropdown-menu {
3582
+ top: auto;
3583
+ bottom: 100%;
3584
+ margin-bottom: 1px;
3585
+ }
3586
+
3587
+ @media (min-width: 768px) {
3588
+ .navbar-right .dropdown-menu {
3589
+ right: 0;
3590
+ left: auto;
3591
+ }
3592
+ }
3593
+
3594
+ .factory-bootstrap-329 .btn-group,
3595
+ .factory-bootstrap-329 .btn-group-vertical {
3596
+ position: relative;
3597
+ display: inline-block;
3598
+ vertical-align: middle;
3599
+ }
3600
+
3601
+ .factory-bootstrap-329 .btn-group > .btn,
3602
+ .factory-bootstrap-329 .btn-group-vertical > .btn {
3603
+ position: relative;
3604
+ float: left;
3605
+ }
3606
+
3607
+ .factory-bootstrap-329 .btn-group > .btn:hover,
3608
+ .factory-bootstrap-329 .btn-group-vertical > .btn:hover,
3609
+ .factory-bootstrap-329 .btn-group > .btn:focus,
3610
+ .factory-bootstrap-329 .btn-group-vertical > .btn:focus,
3611
+ .factory-bootstrap-329 .btn-group > .btn:active,
3612
+ .factory-bootstrap-329 .btn-group-vertical > .btn:active,
3613
+ .factory-bootstrap-329 .btn-group > .btn.active,
3614
+ .factory-bootstrap-329 .btn-group-vertical > .btn.active {
3615
+ z-index: 2;
3616
+ }
3617
+
3618
+ .factory-bootstrap-329 .btn-group > .btn:focus,
3619
+ .factory-bootstrap-329 .btn-group-vertical > .btn:focus {
3620
+ outline: none;
3621
+ }
3622
+
3623
+ .factory-bootstrap-329 .btn-group .btn + .btn,
3624
+ .factory-bootstrap-329 .btn-group .btn + .btn-group,
3625
+ .factory-bootstrap-329 .btn-group .btn-group + .btn,
3626
+ .factory-bootstrap-329 .btn-group .btn-group + .btn-group {
3627
+ margin-left: -1px;
3628
+ }
3629
+
3630
+ .factory-bootstrap-329 .btn-toolbar:before,
3631
+ .factory-bootstrap-329 .btn-toolbar:after {
3632
+ display: table;
3633
+ content: " ";
3634
+ }
3635
+
3636
+ .factory-bootstrap-329 .btn-toolbar:after {
3637
+ clear: both;
3638
+ }
3639
+
3640
+ .factory-bootstrap-329 .btn-toolbar:before,
3641
+ .factory-bootstrap-329 .btn-toolbar:after {
3642
+ display: table;
3643
+ content: " ";
3644
+ }
3645
+
3646
+ .factory-bootstrap-329 .btn-toolbar:after {
3647
+ clear: both;
3648
+ }
3649
+
3650
+ .factory-bootstrap-329 .btn-toolbar .btn-group {
3651
+ float: left;
3652
+ }
3653
+
3654
+ .factory-bootstrap-329 .btn-toolbar > .btn + .btn,
3655
+ .factory-bootstrap-329 .btn-toolbar > .btn-group + .btn,
3656
+ .factory-bootstrap-329 .btn-toolbar > .btn + .btn-group,
3657
+ .factory-bootstrap-329 .btn-toolbar > .btn-group + .btn-group {
3658
+ margin-left: 5px;
3659
+ }
3660
+
3661
+ .factory-bootstrap-329 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3662
+ border-radius: 0;
3663
+ }
3664
+
3665
+ .factory-bootstrap-329 .btn-group > .btn:first-child {
3666
+ margin-left: 0;
3667
+ }
3668
+
3669
+ .factory-bootstrap-329 .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3670
+ border-top-right-radius: 0;
3671
+ border-bottom-right-radius: 0;
3672
+ }
3673
+
3674
+ .factory-bootstrap-329 .btn-group > .btn:last-child:not(:first-child),
3675
+ .factory-bootstrap-329 .btn-group > .dropdown-toggle:not(:first-child) {
3676
+ border-bottom-left-radius: 0;
3677
+ border-top-left-radius: 0;
3678
+ }
3679
+
3680
+ .factory-bootstrap-329 .btn-group > .btn-group {
3681
+ float: left;
3682
+ }
3683
+
3684
+ .factory-bootstrap-329 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3685
+ border-radius: 0;
3686
+ }
3687
+
3688
+ .factory-bootstrap-329 .btn-group > .btn-group:first-child > .btn:last-child,
3689
+ .factory-bootstrap-329 .btn-group > .btn-group:first-child > .dropdown-toggle {
3690
+ border-top-right-radius: 0;
3691
+ border-bottom-right-radius: 0;
3692
+ }
3693
+
3694
+ .factory-bootstrap-329 .btn-group > .btn-group:last-child > .btn:first-child {
3695
+ border-bottom-left-radius: 0;
3696
+ border-top-left-radius: 0;
3697
+ }
3698
+
3699
+ .factory-bootstrap-329 .btn-group .dropdown-toggle:active,
3700
+ .factory-bootstrap-329 .btn-group.open .dropdown-toggle {
3701
+ outline: 0;
3702
+ }
3703
+
3704
+ .factory-bootstrap-329 .btn-group-xs > .btn {
3705
+ padding: 1px 5px;
3706
+ font-size: 12px;
3707
+ line-height: 1.5;
3708
+ border-radius: 3px;
3709
+ }
3710
+
3711
+ .factory-bootstrap-329 .btn-group-sm > .btn {
3712
+ padding: 5px 10px;
3713
+ font-size: 12px;
3714
+ line-height: 1.5;
3715
+ border-radius: 3px;
3716
+ }
3717
+
3718
+ .factory-bootstrap-329 .btn-group-lg > .btn {
3719
+ padding: 10px 16px;
3720
+ font-size: 18px;
3721
+ line-height: 1.33;
3722
+ border-radius: 6px;
3723
+ }
3724
+
3725
+ .factory-bootstrap-329 .btn-group > .btn + .dropdown-toggle {
3726
+ padding-right: 8px;
3727
+ padding-left: 8px;
3728
+ }
3729
+
3730
+ .factory-bootstrap-329 .btn-group > .btn-lg + .dropdown-toggle {
3731
+ padding-right: 12px;
3732
+ padding-left: 12px;
3733
+ }
3734
+
3735
+ .factory-bootstrap-329 .btn-group.open .dropdown-toggle {
3736
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3737
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3738
+ }
3739
+
3740
+ .factory-bootstrap-329 .btn-group.open .dropdown-toggle.btn-link {
3741
+ -webkit-box-shadow: none;
3742
+ box-shadow: none;
3743
+ }
3744
+
3745
+ .factory-bootstrap-329 .btn-group {
3746
+ border: 4px solid #f9f9f9;
3747
+ border-radius: 4px;
3748
+ }
3749
+ .factory-bootstrap-329 .btn-group .btn.active.value {
3750
+ text-shadow: none;
3751
+ color: #fff;
3752
+ background-color: #33aad5;
3753
+ -webkit-box-shadow: inset 0 1px 1px #0074a2;
3754
+ box-shadow: inset 0 1px 3px #0074a2;
3755
+ border-top: 1px solid #0074a2;
3756
+ border-bottom: 1px solid #0074a2;
3757
+ border-left: 1px solid #0074a2;
3758
+ }
3759
+
3760
+ .factory-bootstrap-329 .btn .caret {
3761
+ margin-left: 0;
3762
+ }
3763
+
3764
+ .factory-bootstrap-329 .btn-lg .caret {
3765
+ border-width: 5px 5px 0;
3766
+ border-bottom-width: 0;
3767
+ }
3768
+
3769
+ .factory-bootstrap-329 .dropup .btn-lg .caret {
3770
+ border-width: 0 5px 5px;
3771
+ }
3772
+
3773
+ .factory-bootstrap-329 .btn-group-vertical > .btn,
3774
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group,
3775
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group > .btn {
3776
+ display: block;
3777
+ float: none;
3778
+ width: 100%;
3779
+ max-width: 100%;
3780
+ }
3781
+
3782
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group:before,
3783
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group:after {
3784
+ display: table;
3785
+ content: " ";
3786
+ }
3787
+
3788
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group:after {
3789
+ clear: both;
3790
+ }
3791
+
3792
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group:before,
3793
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group:after {
3794
+ display: table;
3795
+ content: " ";
3796
+ }
3797
+
3798
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group:after {
3799
+ clear: both;
3800
+ }
3801
+
3802
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group > .btn {
3803
+ float: none;
3804
+ }
3805
+
3806
+ .factory-bootstrap-329 .btn-group-vertical > .btn + .btn,
3807
+ .factory-bootstrap-329 .btn-group-vertical > .btn + .btn-group,
3808
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group + .btn,
3809
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group + .btn-group {
3810
+ margin-top: -1px;
3811
+ margin-left: 0;
3812
+ }
3813
+
3814
+ .factory-bootstrap-329 .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3815
+ border-radius: 0;
3816
+ }
3817
+
3818
+ .factory-bootstrap-329 .btn-group-vertical > .btn:first-child:not(:last-child) {
3819
+ border-top-right-radius: 4px;
3820
+ border-bottom-right-radius: 0;
3821
+ border-bottom-left-radius: 0;
3822
+ }
3823
+
3824
+ .factory-bootstrap-329 .btn-group-vertical > .btn:last-child:not(:first-child) {
3825
+ border-top-right-radius: 0;
3826
+ border-bottom-left-radius: 4px;
3827
+ border-top-left-radius: 0;
3828
+ }
3829
+
3830
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3831
+ border-radius: 0;
3832
+ }
3833
+
3834
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group:first-child > .btn:last-child,
3835
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group:first-child > .dropdown-toggle {
3836
+ border-bottom-right-radius: 0;
3837
+ border-bottom-left-radius: 0;
3838
+ }
3839
+
3840
+ .factory-bootstrap-329 .btn-group-vertical > .btn-group:last-child > .btn:first-child {
3841
+ border-top-right-radius: 0;
3842
+ border-top-left-radius: 0;
3843
+ }
3844
+
3845
+ .factory-bootstrap-329 .btn-group-justified {
3846
+ display: table;
3847
+ width: 100%;
3848
+ border-collapse: separate;
3849
+ table-layout: fixed;
3850
+ }
3851
+
3852
+ .factory-bootstrap-329 .btn-group-justified > .btn,
3853
+ .factory-bootstrap-329 .btn-group-justified > .btn-group {
3854
+ display: table-cell;
3855
+ float: none;
3856
+ width: 1%;
3857
+ }
3858
+
3859
+ .factory-bootstrap-329 .btn-group-justified > .btn-group .btn {
3860
+ width: 100%;
3861
+ }
3862
+
3863
+ [data-toggle="buttons"] > .btn > input[type="radio"],
3864
+ [data-toggle="buttons"] > .btn > input[type="checkbox"] {
3865
+ display: none;
3866
+ }
3867
+
3868
+ .factory-bootstrap-329 .input-group {
3869
+ position: relative;
3870
+ display: table;
3871
+ border-collapse: separate;
3872
+ }
3873
+
3874
+ .factory-bootstrap-329 .input-group[class*="col-"] {
3875
+ float: none;
3876
+ padding-right: 0;
3877
+ padding-left: 0;
3878
+ }
3879
+
3880
+ .factory-bootstrap-329 .input-group .form-control {
3881
+ width: 100%;
3882
+ margin-bottom: 0;
3883
+ }
3884
+
3885
+ .factory-bootstrap-329 .input-group-lg > .form-control,
3886
+ .factory-bootstrap-329 .input-group-lg > .input-group-addon,
3887
+ .factory-bootstrap-329 .input-group-lg > .input-group-btn > .btn {
3888
+ height: 46px;
3889
+ padding: 10px 16px;
3890
+ font-size: 18px;
3891
+ line-height: 1.33;
3892
+ border-radius: 6px;
3893
+ }
3894
+
3895
+ .factory-bootstrap-329 select.input-group-lg > .form-control,
3896
+ .factory-bootstrap-329 select.input-group-lg > .input-group-addon,
3897
+ .factory-bootstrap-329 select.input-group-lg > .input-group-btn > .btn {
3898
+ height: 46px;
3899
+ line-height: 46px;
3900
+ }
3901
+
3902
+ .factory-bootstrap-329 textarea.input-group-lg > .form-control,
3903
+ .factory-bootstrap-329 textarea.input-group-lg > .input-group-addon,
3904
+ .factory-bootstrap-329 textarea.input-group-lg > .input-group-btn > .btn {
3905
+ height: auto;
3906
+ }
3907
+
3908
+ .factory-bootstrap-329 .input-group-sm > .form-control,
3909
+ .factory-bootstrap-329 .input-group-sm > .input-group-addon,
3910
+ .factory-bootstrap-329 .input-group-sm > .input-group-btn > .btn {
3911
+ height: 30px;
3912
+ padding: 5px 10px;
3913
+ font-size: 12px;
3914
+ line-height: 1.5;
3915
+ border-radius: 3px;
3916
+ }
3917
+
3918
+ .factory-bootstrap-329 select.input-group-sm > .form-control,
3919
+ .factory-bootstrap-329 select.input-group-sm > .input-group-addon,
3920
+ .factory-bootstrap-329 select.input-group-sm > .input-group-btn > .btn {
3921
+ height: 30px;
3922
+ line-height: 30px;
3923
+ }
3924
+
3925
+ .factory-bootstrap-329 textarea.input-group-sm > .form-control,
3926
+ .factory-bootstrap-329 textarea.input-group-sm > .input-group-addon,
3927
+ .factory-bootstrap-329 textarea.input-group-sm > .input-group-btn > .btn {
3928
+ height: auto;
3929
+ }
3930
+
3931
+ .factory-bootstrap-329 .input-group-addon,
3932
+ .factory-bootstrap-329 .input-group-btn,
3933
+ .factory-bootstrap-329 .input-group .form-control {
3934
+ display: table-cell;
3935
+ }
3936
+
3937
+ .factory-bootstrap-329 .input-group-addon:not(:first-child):not(:last-child),
3938
+ .factory-bootstrap-329 .input-group-btn:not(:first-child):not(:last-child),
3939
+ .factory-bootstrap-329 .input-group .form-control:not(:first-child):not(:last-child) {
3940
+ border-radius: 0;
3941
+ }
3942
+
3943
+ .factory-bootstrap-329 .input-group-addon,
3944
+ .factory-bootstrap-329 .input-group-btn {
3945
+ width: 1%;
3946
+ white-space: nowrap;
3947
+ vertical-align: middle;
3948
+ }
3949
+
3950
+ .factory-bootstrap-329 .input-group-addon {
3951
+ padding: 6px 12px;
3952
+ font-size: 14px;
3953
+ font-weight: normal;
3954
+ line-height: 1;
3955
+ color: #555555;
3956
+ text-align: center;
3957
+ background-color: #eeeeee;
3958
+ border: 1px solid #cccccc;
3959
+ border-radius: 4px;
3960
+ }
3961
+
3962
+ .factory-bootstrap-329 .input-group-addon.input-sm {
3963
+ padding: 5px 10px;
3964
+ font-size: 12px;
3965
+ border-radius: 3px;
3966
+ }
3967
+
3968
+ .factory-bootstrap-329 .input-group-addon.input-lg {
3969
+ padding: 10px 16px;
3970
+ font-size: 18px;
3971
+ border-radius: 6px;
3972
+ }
3973
+
3974
+ .factory-bootstrap-329 .input-group-addon input[type="radio"],
3975
+ .factory-bootstrap-329 .input-group-addon input[type="checkbox"] {
3976
+ margin-top: 0;
3977
+ }
3978
+
3979
+ .factory-bootstrap-329 .input-group .form-control:first-child,
3980
+ .factory-bootstrap-329 .input-group-addon:first-child,
3981
+ .factory-bootstrap-329 .input-group-btn:first-child > .btn,
3982
+ .factory-bootstrap-329 .input-group-btn:first-child > .dropdown-toggle,
3983
+ .factory-bootstrap-329 .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
3984
+ border-top-right-radius: 0;
3985
+ border-bottom-right-radius: 0;
3986
+ }
3987
+
3988
+ .factory-bootstrap-329 .input-group-addon:first-child {
3989
+ border-right: 0;
3990
+ }
3991
+
3992
+ .factory-bootstrap-329 .input-group .form-control:last-child,
3993
+ .factory-bootstrap-329 .input-group-addon:last-child,
3994
+ .factory-bootstrap-329 .input-group-btn:last-child > .btn,
3995
+ .factory-bootstrap-329 .input-group-btn:last-child > .dropdown-toggle,
3996
+ .factory-bootstrap-329 .input-group-btn:first-child > .btn:not(:first-child) {
3997
+ border-bottom-left-radius: 0;
3998
+ border-top-left-radius: 0;
3999
+ }
4000
+
4001
+ .factory-bootstrap-329 .input-group-addon:last-child {
4002
+ border-left: 0;
4003
+ }
4004
+
4005
+ .factory-bootstrap-329 .input-group-btn {
4006
+ position: relative;
4007
+ white-space: nowrap;
4008
+ }
4009
+
4010
+ .factory-bootstrap-329 .input-group-btn:first-child > .btn {
4011
+ margin-right: -1px;
4012
+ }
4013
+
4014
+ .factory-bootstrap-329 .input-group-btn:last-child > .btn {
4015
+ margin-left: -1px;
4016
+ }
4017
+
4018
+ .factory-bootstrap-329 .input-group-btn > .btn {
4019
+ position: relative;
4020
+ }
4021
+
4022
+ .factory-bootstrap-329 .input-group-btn > .btn + .btn {
4023
+ margin-left: -4px;
4024
+ }
4025
+
4026
+ .factory-bootstrap-329 .input-group-btn > .btn:hover,
4027
+ .factory-bootstrap-329 .input-group-btn > .btn:active {
4028
+ z-index: 2;
4029
+ }
4030
+
4031
+ .factory-bootstrap-329 .nav {
4032
+ padding-left: 0;
4033
+ margin-bottom: 0;
4034
+ list-style: none;
4035
+ }
4036
+
4037
+ .factory-bootstrap-329 .nav:before,
4038
+ .factory-bootstrap-329 .nav:after {
4039
+ display: table;
4040
+ content: " ";
4041
+ }
4042
+
4043
+ .factory-bootstrap-329 .nav:after {
4044
+ clear: both;
4045
+ }
4046
+
4047
+ .factory-bootstrap-329 .nav:before,
4048
+ .factory-bootstrap-329 .nav:after {
4049
+ display: table;
4050
+ content: " ";
4051
+ }
4052
+
4053
+ .factory-bootstrap-329 .nav:after {
4054
+ clear: both;
4055
+ }
4056
+
4057
+ .factory-bootstrap-329 .nav > li {
4058
+ position: relative;
4059
+ display: block;
4060
+ }
4061
+
4062
+ .factory-bootstrap-329 .nav > li > a {
4063
+ position: relative;
4064
+ display: block;
4065
+ padding: 10px 15px;
4066
+ }
4067
+
4068
+ .factory-bootstrap-329 .nav > li > a:hover,
4069
+ .factory-bootstrap-329 .nav > li > a:focus {
4070
+ text-decoration: none;
4071
+ background-color: #eeeeee;
4072
+ }
4073
+
4074
+ .factory-bootstrap-329 .nav > li.disabled > a {
4075
+ color: #999999;
4076
+ }
4077
+
4078
+ .factory-bootstrap-329 .nav > li.disabled > a:hover,
4079
+ .factory-bootstrap-329 .nav > li.disabled > a:focus {
4080
+ color: #999999;
4081
+ text-decoration: none;
4082
+ cursor: not-allowed;
4083
+ background-color: transparent;
4084
+ }
4085
+
4086
+ .factory-bootstrap-329 .nav .open > a,
4087
+ .factory-bootstrap-329 .nav .open > a:hover,
4088
+ .factory-bootstrap-329 .nav .open > a:focus {
4089
+ background-color: #eeeeee;
4090
+ border-color: #428bca;
4091
+ }
4092
+
4093
+ .factory-bootstrap-329 .nav .nav-divider {
4094
+ height: 1px;
4095
+ margin: 9px 0;
4096
+ overflow: hidden;
4097
+ background-color: #e5e5e5;
4098
+ }
4099
+
4100
+ .factory-bootstrap-329 .nav > li > a > img {
4101
+ max-width: none;
4102
+ }
4103
+
4104
+ .factory-bootstrap-329 .nav-tabs {
4105
+ border-bottom: 1px solid #dddddd;
4106
+ }
4107
+
4108
+ .factory-bootstrap-329 .nav-tabs > li {
4109
+ float: left;
4110
+ margin-bottom: -1px;
4111
+ }
4112
+
4113
+ .factory-bootstrap-329 .nav-tabs > li > a {
4114
+ margin-right: 2px;
4115
+ line-height: 1.428571429;
4116
+ border: 1px solid transparent;
4117
+ border-radius: 4px 4px 0 0;
4118
+ }
4119
+
4120
+ .factory-bootstrap-329 .nav-tabs > li > a:hover {
4121
+ border-color: #eeeeee #eeeeee #dddddd;
4122
+ }
4123
+
4124
+ .factory-bootstrap-329 .nav-tabs > li.active > a,
4125
+ .factory-bootstrap-329 .nav-tabs > li.active > a:hover,
4126
+ .factory-bootstrap-329 .nav-tabs > li.active > a:focus {
4127
+ color: #555555;
4128
+ cursor: default;
4129
+ background-color: #ffffff;
4130
+ border: 1px solid #dddddd;
4131
+ border-bottom-color: transparent;
4132
+ }
4133
+
4134
+ .factory-bootstrap-329 .nav-tabs.nav-justified {
4135
+ width: 100%;
4136
+ border-bottom: 0;
4137
+ }
4138
+
4139
+ .factory-bootstrap-329 .nav-tabs.nav-justified > li {
4140
+ float: none;
4141
+ }
4142
+
4143
+ .factory-bootstrap-329 .nav-tabs.nav-justified > li > a {
4144
+ margin-bottom: 5px;
4145
+ text-align: center;
4146
+ }
4147
+
4148
+ .factory-bootstrap-329 .nav-tabs.nav-justified > .dropdown .dropdown-menu {
4149
+ top: auto;
4150
+ left: auto;
4151
+ }
4152
+
4153
+ @media (min-width: 768px) {
4154
+ .nav-tabs.nav-justified > li {
4155
+ display: table-cell;
4156
+ width: 1%;
4157
+ }
4158
+ .nav-tabs.nav-justified > li > a {
4159
+ margin-bottom: 0;
4160
+ }
4161
+ }
4162
+
4163
+ .factory-bootstrap-329 .nav-tabs.nav-justified > li > a {
4164
+ margin-right: 0;
4165
+ border-radius: 4px;
4166
+ }
4167
+
4168
+ .factory-bootstrap-329 .nav-tabs.nav-justified > .active > a,
4169
+ .factory-bootstrap-329 .nav-tabs.nav-justified > .active > a:hover,
4170
+ .factory-bootstrap-329 .nav-tabs.nav-justified > .active > a:focus {
4171
+ border: 1px solid #dddddd;
4172
+ }
4173
+
4174
+ @media (min-width: 768px) {
4175
+ .nav-tabs.nav-justified > li > a {
4176
+ border-bottom: 1px solid #dddddd;
4177
+ border-radius: 4px 4px 0 0;
4178
+ }
4179
+ .nav-tabs.nav-justified > .active > a,
4180
+ .nav-tabs.nav-justified > .active > a:hover,
4181
+ .nav-tabs.nav-justified > .active > a:focus {
4182
+ border-bottom-color: #ffffff;
4183
+ }
4184
+ }
4185
+
4186
+ .factory-bootstrap-329 .nav-pills > li {
4187
+ float: left;
4188
+ }
4189
+
4190
+ .factory-bootstrap-329 .nav-pills > li > a {
4191
+ border-radius: 4px;
4192
+ }
4193
+
4194
+ .factory-bootstrap-329 .nav-pills > li + li {
4195
+ margin-left: 2px;
4196
+ }
4197
+
4198
+ .factory-bootstrap-329 .nav-pills > li.active > a,
4199
+ .factory-bootstrap-329 .nav-pills > li.active > a:hover,
4200
+ .factory-bootstrap-329 .nav-pills > li.active > a:focus {
4201
+ color: #ffffff;
4202
+ background-color: #428bca;
4203
+ }
4204
+
4205
+ .factory-bootstrap-329 .nav-stacked > li {
4206
+ float: none;
4207
+ }
4208
+
4209
+ .factory-bootstrap-329 .nav-stacked > li + li {
4210
+ margin-top: 2px;
4211
+ margin-left: 0;
4212
+ }
4213
+
4214
+ .factory-bootstrap-329 .nav-justified {
4215
+ width: 100%;
4216
+ }
4217
+
4218
+ .factory-bootstrap-329 .nav-justified > li {
4219
+ float: none;
4220
+ }
4221
+
4222
+ .factory-bootstrap-329 .nav-justified > li > a {
4223
+ margin-bottom: 5px;
4224
+ text-align: center;
4225
+ }
4226
+
4227
+ .factory-bootstrap-329 .nav-justified > .dropdown .dropdown-menu {
4228
+ top: auto;
4229
+ left: auto;
4230
+ }
4231
+
4232
+ @media (min-width: 768px) {
4233
+ .nav-justified > li {
4234
+ display: table-cell;
4235
+ width: 1%;
4236
+ }
4237
+ .nav-justified > li > a {
4238
+ margin-bottom: 0;
4239
+ }
4240
+ }
4241
+
4242
+ .factory-bootstrap-329 .nav-tabs-justified {
4243
+ border-bottom: 0;
4244
+ }
4245
+
4246
+ .factory-bootstrap-329 .nav-tabs-justified > li > a {
4247
+ margin-right: 0;
4248
+ border-radius: 4px;
4249
+ }
4250
+
4251
+ .factory-bootstrap-329 .nav-tabs-justified > .active > a,
4252
+ .factory-bootstrap-329 .nav-tabs-justified > .active > a:hover,
4253
+ .factory-bootstrap-329 .nav-tabs-justified > .active > a:focus {
4254
+ border: 1px solid #dddddd;
4255
+ }
4256
+
4257
+ @media (min-width: 768px) {
4258
+ .nav-tabs-justified > li > a {
4259
+ border-bottom: 1px solid #dddddd;
4260
+ border-radius: 4px 4px 0 0;
4261
+ }
4262
+ .nav-tabs-justified > .active > a,
4263
+ .nav-tabs-justified > .active > a:hover,
4264
+ .nav-tabs-justified > .active > a:focus {
4265
+ border-bottom-color: #ffffff;
4266
+ }
4267
+ }
4268
+
4269
+ .factory-bootstrap-329 .tab-content > .tab-pane {
4270
+ display: none;
4271
+ }
4272
+
4273
+ .factory-bootstrap-329 .tab-content > .active {
4274
+ display: block;
4275
+ }
4276
+
4277
+ .factory-bootstrap-329 .nav-tabs .dropdown-menu {
4278
+ margin-top: -1px;
4279
+ border-top-right-radius: 0;
4280
+ border-top-left-radius: 0;
4281
+ }
4282
+
4283
+ .factory-bootstrap-329 .navbar {
4284
+ position: relative;
4285
+ min-height: 50px;
4286
+ margin-bottom: 20px;
4287
+ border: 1px solid transparent;
4288
+ }
4289
+
4290
+ .factory-bootstrap-329 .navbar:before,
4291
+ .factory-bootstrap-329 .navbar:after {
4292
+ display: table;
4293
+ content: " ";
4294
+ }
4295
+
4296
+ .factory-bootstrap-329 .navbar:after {
4297
+ clear: both;
4298
+ }
4299
+
4300
+ .factory-bootstrap-329 .navbar:before,
4301
+ .factory-bootstrap-329 .navbar:after {
4302
+ display: table;
4303
+ content: " ";
4304
+ }
4305
+
4306
+ .factory-bootstrap-329 .navbar:after {
4307
+ clear: both;
4308
+ }
4309
+
4310
+ @media (min-width: 768px) {
4311
+ .navbar {
4312
+ border-radius: 4px;
4313
+ }
4314
+ }
4315
+
4316
+ .factory-bootstrap-329 .navbar-header:before,
4317
+ .factory-bootstrap-329 .navbar-header:after {
4318
+ display: table;
4319
+ content: " ";
4320
+ }
4321
+
4322
+ .factory-bootstrap-329 .navbar-header:after {
4323
+ clear: both;
4324
+ }
4325
+
4326
+ .factory-bootstrap-329 .navbar-header:before,
4327
+ .factory-bootstrap-329 .navbar-header:after {
4328
+ display: table;
4329
+ content: " ";
4330
+ }
4331
+
4332
+ .factory-bootstrap-329 .navbar-header:after {
4333
+ clear: both;
4334
+ }
4335
+
4336
+ @media (min-width: 768px) {
4337
+ .navbar-header {
4338
+ float: left;
4339
+ }
4340
+ }
4341
+
4342
+ .factory-bootstrap-329 .navbar-collapse {
4343
+ max-height: 340px;
4344
+ padding-right: 15px;
4345
+ padding-left: 15px;
4346
+ overflow-x: visible;
4347
+ border-top: 1px solid transparent;
4348
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
4349
+ -webkit-overflow-scrolling: touch;
4350
+ }
4351
+
4352
+ .factory-bootstrap-329 .navbar-collapse:before,
4353
+ .factory-bootstrap-329 .navbar-collapse:after {
4354
+ display: table;
4355
+ content: " ";
4356
+ }
4357
+
4358
+ .factory-bootstrap-329 .navbar-collapse:after {
4359
+ clear: both;
4360
+ }
4361
+
4362
+ .factory-bootstrap-329 .navbar-collapse:before,
4363
+ .factory-bootstrap-329 .navbar-collapse:after {
4364
+ display: table;
4365
+ content: " ";
4366
+ }
4367
+
4368
+ .factory-bootstrap-329 .navbar-collapse:after {
4369
+ clear: both;
4370
+ }
4371
+
4372
+ .factory-bootstrap-329 .navbar-collapse.in {
4373
+ overflow-y: auto;
4374
+ }
4375
+
4376
+ @media (min-width: 768px) {
4377
+ .navbar-collapse {
4378
+ width: auto;
4379
+ border-top: 0;
4380
+ box-shadow: none;
4381
+ }
4382
+ .navbar-collapse.collapse {
4383
+ display: block !important;
4384
+ height: auto !important;
4385
+ padding-bottom: 0;
4386
+ overflow: visible !important;
4387
+ }
4388
+ .navbar-collapse.in {
4389
+ overflow-y: visible;
4390
+ }
4391
+ .navbar-fixed-top .navbar-collapse,
4392
+ .navbar-static-top .navbar-collapse,
4393
+ .navbar-fixed-bottom .navbar-collapse {
4394
+ padding-right: 0;
4395
+ padding-left: 0;
4396
+ }
4397
+ }
4398
+
4399
+ .factory-bootstrap-329 .container > .navbar-header,
4400
+ .factory-bootstrap-329 .container > .navbar-collapse {
4401
+ margin-right: -15px;
4402
+ margin-left: -15px;
4403
+ }
4404
+
4405
+ @media (min-width: 768px) {
4406
+ .container > .navbar-header,
4407
+ .container > .navbar-collapse {
4408
+ margin-right: 0;
4409
+ margin-left: 0;
4410
+ }
4411
+ }
4412
+
4413
+ .factory-bootstrap-329 .navbar-static-top {
4414
+ z-index: 1000;
4415
+ border-width: 0 0 1px;
4416
+ }
4417
+
4418
+ @media (min-width: 768px) {
4419
+ .navbar-static-top {
4420
+ border-radius: 0;
4421
+ }
4422
+ }
4423
+
4424
+ .factory-bootstrap-329 .navbar-fixed-top,
4425
+ .factory-bootstrap-329 .navbar-fixed-bottom {
4426
+ position: fixed;
4427
+ right: 0;
4428
+ left: 0;
4429
+ z-index: 1030;
4430
+ }
4431
+
4432
+ @media (min-width: 768px) {
4433
+ .navbar-fixed-top,
4434
+ .navbar-fixed-bottom {
4435
+ border-radius: 0;
4436
+ }
4437
+ }
4438
+
4439
+ .factory-bootstrap-329 .navbar-fixed-top {
4440
+ top: 0;
4441
+ border-width: 0 0 1px;
4442
+ }
4443
+
4444
+ .factory-bootstrap-329 .navbar-fixed-bottom {
4445
+ bottom: 0;
4446
+ margin-bottom: 0;
4447
+ border-width: 1px 0 0;
4448
+ }
4449
+
4450
+ .factory-bootstrap-329 .navbar-brand {
4451
+ float: left;
4452
+ padding: 15px 15px;
4453
+ font-size: 18px;
4454
+ line-height: 20px;
4455
+ }
4456
+
4457
+ .factory-bootstrap-329 .navbar-brand:hover,
4458
+ .factory-bootstrap-329 .navbar-brand:focus {
4459
+ text-decoration: none;
4460
+ }
4461
+
4462
+ @media (min-width: 768px) {
4463
+ .navbar > .container .navbar-brand {
4464
+ margin-left: -15px;
4465
+ }
4466
+ }
4467
+
4468
+ .factory-bootstrap-329 .navbar-toggle {
4469
+ position: relative;
4470
+ float: right;
4471
+ padding: 9px 10px;
4472
+ margin-top: 8px;
4473
+ margin-right: 15px;
4474
+ margin-bottom: 8px;
4475
+ background-color: transparent;
4476
+ background-image: none;
4477
+ border: 1px solid transparent;
4478
+ border-radius: 4px;
4479
+ }
4480
+
4481
+ .factory-bootstrap-329 .navbar-toggle .icon-bar {
4482
+ display: block;
4483
+ width: 22px;
4484
+ height: 2px;
4485
+ border-radius: 1px;
4486
+ }
4487
+
4488
+ .factory-bootstrap-329 .navbar-toggle .icon-bar + .icon-bar {
4489
+ margin-top: 4px;
4490
+ }
4491
+
4492
+ @media (min-width: 768px) {
4493
+ .navbar-toggle {
4494
+ display: none;
4495
+ }
4496
+ }
4497
+
4498
+ .factory-bootstrap-329 .navbar-nav {
4499
+ margin: 7.5px -15px;
4500
+ }
4501
+
4502
+ .factory-bootstrap-329 .navbar-nav > li > a {
4503
+ padding-top: 10px;
4504
+ padding-bottom: 10px;
4505
+ line-height: 20px;
4506
+ }
4507
+
4508
+ @media (max-width: 767px) {
4509
+ .navbar-nav .open .dropdown-menu {
4510
+ position: static;
4511
+ float: none;
4512
+ width: auto;
4513
+ margin-top: 0;
4514
+ background-color: transparent;
4515
+ border: 0;
4516
+ box-shadow: none;
4517
+ }
4518
+ .navbar-nav .open .dropdown-menu > li > a,
4519
+ .navbar-nav .open .dropdown-menu .dropdown-header {
4520
+ padding: 5px 15px 5px 25px;
4521
+ }
4522
+ .navbar-nav .open .dropdown-menu > li > a {
4523
+ line-height: 20px;
4524
+ }
4525
+ .navbar-nav .open .dropdown-menu > li > a:hover,
4526
+ .navbar-nav .open .dropdown-menu > li > a:focus {
4527
+ background-image: none;
4528
+ }
4529
+ }
4530
+
4531
+ @media (min-width: 768px) {
4532
+ .navbar-nav {
4533
+ float: left;
4534
+ margin: 0;
4535
+ }
4536
+ .navbar-nav > li {
4537
+ float: left;
4538
+ }
4539
+ .navbar-nav > li > a {
4540
+ padding-top: 15px;
4541
+ padding-bottom: 15px;
4542
+ }
4543
+ .navbar-nav.navbar-right:last-child {
4544
+ margin-right: -15px;
4545
+ }
4546
+ }
4547
+
4548
+ @media (min-width: 768px) {
4549
+ .navbar-left {
4550
+ float: left !important;
4551
+ }
4552
+ .navbar-right {
4553
+ float: right !important;
4554
+ }
4555
+ }
4556
+
4557
+ .factory-bootstrap-329 .navbar-form {
4558
+ padding: 10px 15px;
4559
+ margin-top: 8px;
4560
+ margin-right: -15px;
4561
+ margin-bottom: 8px;
4562
+ margin-left: -15px;
4563
+ border-top: 1px solid transparent;
4564
+ border-bottom: 1px solid transparent;
4565
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4566
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4567
+ }
4568
+
4569
+ @media (min-width: 768px) {
4570
+ .navbar-form .form-group {
4571
+ display: inline-block;
4572
+ margin-bottom: 0;
4573
+ vertical-align: middle;
4574
+ }
4575
+ .navbar-form .form-control {
4576
+ display: inline-block;
4577
+ }
4578
+ .navbar-form select.form-control {
4579
+ width: auto;
4580
+ }
4581
+ .navbar-form .radio,
4582
+ .navbar-form .checkbox {
4583
+ display: inline-block;
4584
+ padding-left: 0;
4585
+ margin-top: 0;
4586
+ margin-bottom: 0;
4587
+ }
4588
+ .navbar-form .radio input[type="radio"],
4589
+ .navbar-form .checkbox input[type="checkbox"] {
4590
+ float: none;
4591
+ margin-left: 0;
4592
+ }
4593
+ }
4594
+
4595
+ @media (max-width: 767px) {
4596
+ .navbar-form .form-group {
4597
+ margin-bottom: 5px;
4598
+ }
4599
+ }
4600
+
4601
+ @media (min-width: 768px) {
4602
+ .navbar-form {
4603
+ width: auto;
4604
+ padding-top: 0;
4605
+ padding-bottom: 0;
4606
+ margin-right: 0;
4607
+ margin-left: 0;
4608
+ border: 0;
4609
+ -webkit-box-shadow: none;
4610
+ box-shadow: none;
4611
+ }
4612
+ .navbar-form.navbar-right:last-child {
4613
+ margin-right: -15px;
4614
+ }
4615
+ }
4616
+
4617
+ .factory-bootstrap-329 .navbar-nav > li > .dropdown-menu {
4618
+ margin-top: 0;
4619
+ border-top-right-radius: 0;
4620
+ border-top-left-radius: 0;
4621
+ }
4622
+
4623
+ .factory-bootstrap-329 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4624
+ border-bottom-right-radius: 0;
4625
+ border-bottom-left-radius: 0;
4626
+ }
4627
+
4628
+ .factory-bootstrap-329 .navbar-nav.pull-right > li > .dropdown-menu,
4629
+ .factory-bootstrap-329 .navbar-nav > li > .dropdown-menu.pull-right {
4630
+ right: 0;
4631
+ left: auto;
4632
+ }
4633
+
4634
+ .factory-bootstrap-329 .navbar-btn {
4635
+ margin-top: 8px;
4636
+ margin-bottom: 8px;
4637
+ }
4638
+
4639
+ .factory-bootstrap-329 .navbar-btn.btn-sm {
4640
+ margin-top: 10px;
4641
+ margin-bottom: 10px;
4642
+ }
4643
+
4644
+ .factory-bootstrap-329 .navbar-btn.btn-xs {
4645
+ margin-top: 14px;
4646
+ margin-bottom: 14px;
4647
+ }
4648
+
4649
+ .factory-bootstrap-329 .navbar-text {
4650
+ margin-top: 15px;
4651
+ margin-bottom: 15px;
4652
+ }
4653
+
4654
+ @media (min-width: 768px) {
4655
+ .navbar-text {
4656
+ float: left;
4657
+ margin-right: 15px;
4658
+ margin-left: 15px;
4659
+ }
4660
+ .navbar-text.navbar-right:last-child {
4661
+ margin-right: 0;
4662
+ }
4663
+ }
4664
+
4665
+ .factory-bootstrap-329 .navbar-default {
4666
+ background-color: #f8f8f8;
4667
+ border-color: #e7e7e7;
4668
+ }
4669
+
4670
+ .factory-bootstrap-329 .navbar-default .navbar-brand {
4671
+ color: #777777;
4672
+ }
4673
+
4674
+ .factory-bootstrap-329 .navbar-default .navbar-brand:hover,
4675
+ .factory-bootstrap-329 .navbar-default .navbar-brand:focus {
4676
+ color: #5e5e5e;
4677
+ background-color: transparent;
4678
+ }
4679
+
4680
+ .factory-bootstrap-329 .navbar-default .navbar-text {
4681
+ color: #777777;
4682
+ }
4683
+
4684
+ .factory-bootstrap-329 .navbar-default .navbar-nav > li > a {
4685
+ color: #777777;
4686
+ }
4687
+
4688
+ .factory-bootstrap-329 .navbar-default .navbar-nav > li > a:hover,
4689
+ .factory-bootstrap-329 .navbar-default .navbar-nav > li > a:focus {
4690
+ color: #333333;
4691
+ background-color: transparent;
4692
+ }
4693
+
4694
+ .factory-bootstrap-329 .navbar-default .navbar-nav > .active > a,
4695
+ .factory-bootstrap-329 .navbar-default .navbar-nav > .active > a:hover,
4696
+ .factory-bootstrap-329 .navbar-default .navbar-nav > .active > a:focus {
4697
+ color: #555555;
4698
+ background-color: #e7e7e7;
4699
+ }
4700
+
4701
+ .factory-bootstrap-329 .navbar-default .navbar-nav > .disabled > a,
4702
+ .factory-bootstrap-329 .navbar-default .navbar-nav > .disabled > a:hover,
4703
+ .factory-bootstrap-329 .navbar-default .navbar-nav > .disabled > a:focus {
4704
+ color: #cccccc;
4705
+ background-color: transparent;
4706
+ }
4707
+
4708
+ .factory-bootstrap-329 .navbar-default .navbar-toggle {
4709
+ border-color: #dddddd;
4710
+ }
4711
+
4712
+ .factory-bootstrap-329 .navbar-default .navbar-toggle:hover,
4713
+ .factory-bootstrap-329 .navbar-default .navbar-toggle:focus {
4714
+ background-color: #dddddd;
4715
+ }
4716
+
4717
+ .factory-bootstrap-329 .navbar-default .navbar-toggle .icon-bar {
4718
+ background-color: #cccccc;
4719
+ }
4720
+
4721
+ .factory-bootstrap-329 .navbar-default .navbar-collapse,
4722
+ .factory-bootstrap-329 .navbar-default .navbar-form {
4723
+ border-color: #e7e7e7;
4724
+ }
4725
+
4726
+ .factory-bootstrap-329 .navbar-default .navbar-nav > .open > a,
4727
+ .factory-bootstrap-329 .navbar-default .navbar-nav > .open > a:hover,
4728
+ .factory-bootstrap-329 .navbar-default .navbar-nav > .open > a:focus {
4729
+ color: #555555;
4730
+ background-color: #e7e7e7;
4731
+ }
4732
+
4733
+ @media (max-width: 767px) {
4734
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
4735
+ color: #777777;
4736
+ }
4737
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
4738
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
4739
+ color: #333333;
4740
+ background-color: transparent;
4741
+ }
4742
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4743
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4744
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4745
+ color: #555555;
4746
+ background-color: #e7e7e7;
4747
+ }
4748
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4749
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4750
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4751
+ color: #cccccc;
4752
+ background-color: transparent;
4753
+ }
4754
+ }
4755
+
4756
+ .factory-bootstrap-329 .navbar-default .navbar-link {
4757
+ color: #777777;
4758
+ }
4759
+
4760
+ .factory-bootstrap-329 .navbar-default .navbar-link:hover {
4761
+ color: #333333;
4762
+ }
4763
+
4764
+ .factory-bootstrap-329 .navbar-inverse {
4765
+ background-color: #222222;
4766
+ border-color: #080808;
4767
+ }
4768
+
4769
+ .factory-bootstrap-329 .navbar-inverse .navbar-brand {
4770
+ color: #999999;
4771
+ }
4772
+
4773
+ .factory-bootstrap-329 .navbar-inverse .navbar-brand:hover,
4774
+ .factory-bootstrap-329 .navbar-inverse .navbar-brand:focus {
4775
+ color: #ffffff;
4776
+ background-color: transparent;
4777
+ }
4778
+
4779
+ .factory-bootstrap-329 .navbar-inverse .navbar-text {
4780
+ color: #999999;
4781
+ }
4782
+
4783
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > li > a {
4784
+ color: #999999;
4785
+ }
4786
+
4787
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > li > a:hover,
4788
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > li > a:focus {
4789
+ color: #ffffff;
4790
+ background-color: transparent;
4791
+ }
4792
+
4793
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > .active > a,
4794
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > .active > a:hover,
4795
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > .active > a:focus {
4796
+ color: #ffffff;
4797
+ background-color: #080808;
4798
+ }
4799
+
4800
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > .disabled > a,
4801
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > .disabled > a:hover,
4802
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > .disabled > a:focus {
4803
+ color: #444444;
4804
+ background-color: transparent;
4805
+ }
4806
+
4807
+ .factory-bootstrap-329 .navbar-inverse .navbar-toggle {
4808
+ border-color: #333333;
4809
+ }
4810
+
4811
+ .factory-bootstrap-329 .navbar-inverse .navbar-toggle:hover,
4812
+ .factory-bootstrap-329 .navbar-inverse .navbar-toggle:focus {
4813
+ background-color: #333333;
4814
+ }
4815
+
4816
+ .factory-bootstrap-329 .navbar-inverse .navbar-toggle .icon-bar {
4817
+ background-color: #ffffff;
4818
+ }
4819
+
4820
+ .factory-bootstrap-329 .navbar-inverse .navbar-collapse,
4821
+ .factory-bootstrap-329 .navbar-inverse .navbar-form {
4822
+ border-color: #101010;
4823
+ }
4824
+
4825
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > .open > a,
4826
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > .open > a:hover,
4827
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > .open > a:focus {
4828
+ color: #ffffff;
4829
+ background-color: #080808;
4830
+ }
4831
+
4832
+ @media (max-width: 767px) {
4833
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4834
+ border-color: #080808;
4835
+ }
4836
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4837
+ background-color: #080808;
4838
+ }
4839
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4840
+ color: #999999;
4841
+ }
4842
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4843
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4844
+ color: #ffffff;
4845
+ background-color: transparent;
4846
+ }
4847
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4848
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4849
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4850
+ color: #ffffff;
4851
+ background-color: #080808;
4852
+ }
4853
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4854
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4855
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4856
+ color: #444444;
4857
+ background-color: transparent;
4858
+ }
4859
+ }
4860
+
4861
+ .factory-bootstrap-329 .navbar-inverse .navbar-link {
4862
+ color: #999999;
4863
+ }
4864
+
4865
+ .factory-bootstrap-329 .navbar-inverse .navbar-link:hover {
4866
+ color: #ffffff;
4867
+ }
4868
+
4869
+ .factory-bootstrap-329 .breadcrumb {
4870
+ padding: 8px 15px;
4871
+ margin-bottom: 20px;
4872
+ list-style: none;
4873
+ background-color: #f5f5f5;
4874
+ border-radius: 4px;
4875
+ }
4876
+
4877
+ .factory-bootstrap-329 .breadcrumb > li {
4878
+ display: inline-block;
4879
+ }
4880
+
4881
+ .factory-bootstrap-329 .breadcrumb > li + li:before {
4882
+ padding: 0 5px;
4883
+ color: #cccccc;
4884
+ content: "/\00a0";
4885
+ }
4886
+
4887
+ .factory-bootstrap-329 .breadcrumb > .active {
4888
+ color: #999999;
4889
+ }
4890
+
4891
+ .factory-bootstrap-329 .pagination {
4892
+ display: inline-block;
4893
+ padding-left: 0;
4894
+ margin: 20px 0;
4895
+ border-radius: 4px;
4896
+ }
4897
+
4898
+ .factory-bootstrap-329 .pagination > li {
4899
+ display: inline;
4900
+ }
4901
+
4902
+ .factory-bootstrap-329 .pagination > li > a,
4903
+ .factory-bootstrap-329 .pagination > li > span {
4904
+ position: relative;
4905
+ float: left;
4906
+ padding: 6px 12px;
4907
+ margin-left: -1px;
4908
+ line-height: 1.428571429;
4909
+ text-decoration: none;
4910
+ background-color: #ffffff;
4911
+ border: 1px solid #dddddd;
4912
+ }
4913
+
4914
+ .factory-bootstrap-329 .pagination > li:first-child > a,
4915
+ .factory-bootstrap-329 .pagination > li:first-child > span {
4916
+ margin-left: 0;
4917
+ border-bottom-left-radius: 4px;
4918
+ border-top-left-radius: 4px;
4919
+ }
4920
+
4921
+ .factory-bootstrap-329 .pagination > li:last-child > a,
4922
+ .factory-bootstrap-329 .pagination > li:last-child > span {
4923
+ border-top-right-radius: 4px;
4924
+ border-bottom-right-radius: 4px;
4925
+ }
4926
+
4927
+ .factory-bootstrap-329 .pagination > li > a:hover,
4928
+ .factory-bootstrap-329 .pagination > li > span:hover,
4929
+ .factory-bootstrap-329 .pagination > li > a:focus,
4930
+ .factory-bootstrap-329 .pagination > li > span:focus {
4931
+ background-color: #eeeeee;
4932
+ }
4933
+
4934
+ .factory-bootstrap-329 .pagination > .active > a,
4935
+ .factory-bootstrap-329 .pagination > .active > span,
4936
+ .factory-bootstrap-329 .pagination > .active > a:hover,
4937
+ .factory-bootstrap-329 .pagination > .active > span:hover,
4938
+ .factory-bootstrap-329 .pagination > .active > a:focus,
4939
+ .factory-bootstrap-329 .pagination > .active > span:focus {
4940
+ z-index: 2;
4941
+ color: #ffffff;
4942
+ cursor: default;
4943
+ background-color: #1e8cbe;
4944
+ border-color: #0074a2;
4945
+ }
4946
+
4947
+ .factory-bootstrap-329 .pagination > .disabled > span,
4948
+ .factory-bootstrap-329 .pagination > .disabled > span:hover,
4949
+ .factory-bootstrap-329 .pagination > .disabled > span:focus,
4950
+ .factory-bootstrap-329 .pagination > .disabled > a,
4951
+ .factory-bootstrap-329 .pagination > .disabled > a:hover,
4952
+ .factory-bootstrap-329 .pagination > .disabled > a:focus {
4953
+ color: #999999;
4954
+ cursor: not-allowed;
4955
+ background-color: #ffffff;
4956
+ border-color: #dddddd;
4957
+ }
4958
+
4959
+ .factory-bootstrap-329 .pagination-lg > li > a,
4960
+ .factory-bootstrap-329 .pagination-lg > li > span {
4961
+ padding: 10px 16px;
4962
+ font-size: 18px;
4963
+ }
4964
+
4965
+ .factory-bootstrap-329 .pagination-lg > li:first-child > a,
4966
+ .factory-bootstrap-329 .pagination-lg > li:first-child > span {
4967
+ border-bottom-left-radius: 6px;
4968
+ border-top-left-radius: 6px;
4969
+ }
4970
+
4971
+ .factory-bootstrap-329 .pagination-lg > li:last-child > a,
4972
+ .factory-bootstrap-329 .pagination-lg > li:last-child > span {
4973
+ border-top-right-radius: 6px;
4974
+ border-bottom-right-radius: 6px;
4975
+ }
4976
+
4977
+ .factory-bootstrap-329 .pagination-sm > li > a,
4978
+ .factory-bootstrap-329 .pagination-sm > li > span {
4979
+ padding: 5px 10px;
4980
+ font-size: 12px;
4981
+ }
4982
+
4983
+ .factory-bootstrap-329 .pagination-sm > li:first-child > a,
4984
+ .factory-bootstrap-329 .pagination-sm > li:first-child > span {
4985
+ border-bottom-left-radius: 3px;
4986
+ border-top-left-radius: 3px;
4987
+ }
4988
+
4989
+ .factory-bootstrap-329 .pagination-sm > li:last-child > a,
4990
+ .factory-bootstrap-329 .pagination-sm > li:last-child > span {
4991
+ border-top-right-radius: 3px;
4992
+ border-bottom-right-radius: 3px;
4993
+ }
4994
+
4995
+ .factory-bootstrap-329 .pager {
4996
+ padding-left: 0;
4997
+ margin: 20px 0;
4998
+ text-align: center;
4999
+ list-style: none;
5000
+ }
5001
+
5002
+ .factory-bootstrap-329 .pager:before,
5003
+ .factory-bootstrap-329 .pager:after {
5004
+ display: table;
5005
+ content: " ";
5006
+ }
5007
+
5008
+ .factory-bootstrap-329 .pager:after {
5009
+ clear: both;
5010
+ }
5011
+
5012
+ .factory-bootstrap-329 .pager:before,
5013
+ .factory-bootstrap-329 .pager:after {
5014
+ display: table;
5015
+ content: " ";
5016
+ }
5017
+
5018
+ .factory-bootstrap-329 .pager:after {
5019
+ clear: both;
5020
+ }
5021
+
5022
+ .factory-bootstrap-329 .pager li {
5023
+ display: inline;
5024
+ }
5025
+
5026
+ .factory-bootstrap-329 .pager li > a,
5027
+ .factory-bootstrap-329 .pager li > span {
5028
+ display: inline-block;
5029
+ padding: 5px 14px;
5030
+ background-color: #ffffff;
5031
+ border: 1px solid #dddddd;
5032
+ border-radius: 15px;
5033
+ }
5034
+
5035
+ .factory-bootstrap-329 .pager li > a:hover,
5036
+ .factory-bootstrap-329 .pager li > a:focus {
5037
+ text-decoration: none;
5038
+ background-color: #eeeeee;
5039
+ }
5040
+
5041
+ .factory-bootstrap-329 .pager .next > a,
5042
+ .factory-bootstrap-329 .pager .next > span {
5043
+ float: right;
5044
+ }
5045
+
5046
+ .factory-bootstrap-329 .pager .previous > a,
5047
+ .factory-bootstrap-329 .pager .previous > span {
5048
+ float: left;
5049
+ }
5050
+
5051
+ .factory-bootstrap-329 .pager .disabled > a,
5052
+ .factory-bootstrap-329 .pager .disabled > a:hover,
5053
+ .factory-bootstrap-329 .pager .disabled > a:focus,
5054
+ .factory-bootstrap-329 .pager .disabled > span {
5055
+ color: #999999;
5056
+ cursor: not-allowed;
5057
+ background-color: #ffffff;
5058
+ }
5059
+
5060
+ .factory-bootstrap-329 .label {
5061
+ display: inline;
5062
+ padding: .2em .6em .3em;
5063
+ font-size: 75%;
5064
+ font-weight: bold;
5065
+ line-height: 1;
5066
+ color: #ffffff;
5067
+ text-align: center;
5068
+ white-space: nowrap;
5069
+ vertical-align: baseline;
5070
+ border-radius: .25em;
5071
+ }
5072
+
5073
+ .factory-bootstrap-329 .label[href]:hover,
5074
+ .factory-bootstrap-329 .label[href]:focus {
5075
+ color: #ffffff;
5076
+ text-decoration: none;
5077
+ cursor: pointer;
5078
+ }
5079
+
5080
+ .factory-bootstrap-329 .label:empty {
5081
+ display: none;
5082
+ }
5083
+
5084
+ .factory-bootstrap-329 .btn .label {
5085
+ position: relative;
5086
+ top: -1px;
5087
+ }
5088
+
5089
+ .factory-bootstrap-329 .label-default {
5090
+ background-color: #999999;
5091
+ }
5092
+
5093
+ .factory-bootstrap-329 .label-default[href]:hover,
5094
+ .factory-bootstrap-329 .label-default[href]:focus {
5095
+ background-color: #808080;
5096
+ }
5097
+
5098
+ .factory-bootstrap-329 .label-primary {
5099
+ background-color: #428bca;
5100
+ }
5101
+
5102
+ .factory-bootstrap-329 .label-primary[href]:hover,
5103
+ .factory-bootstrap-329 .label-primary[href]:focus {
5104
+ background-color: #3071a9;
5105
+ }
5106
+
5107
+ .factory-bootstrap-329 .label-success {
5108
+ background-color: #5cb85c;
5109
+ }
5110
+
5111
+ .factory-bootstrap-329 .label-success[href]:hover,
5112
+ .factory-bootstrap-329 .label-success[href]:focus {
5113
+ background-color: #449d44;
5114
+ }
5115
+
5116
+ .factory-bootstrap-329 .label-info {
5117
+ background-color: #5bc0de;
5118
+ }
5119
+
5120
+ .factory-bootstrap-329 .label-info[href]:hover,
5121
+ .factory-bootstrap-329 .label-info[href]:focus {
5122
+ background-color: #31b0d5;
5123
+ }
5124
+
5125
+ .factory-bootstrap-329 .label-warning {
5126
+ background-color: #f0ad4e;
5127
+ }
5128
+
5129
+ .factory-bootstrap-329 .label-warning[href]:hover,
5130
+ .factory-bootstrap-329 .label-warning[href]:focus {
5131
+ background-color: #ec971f;
5132
+ }
5133
+
5134
+ .factory-bootstrap-329 .label-danger {
5135
+ background-color: #d9534f;
5136
+ }
5137
+
5138
+ .factory-bootstrap-329 .label-danger[href]:hover,
5139
+ .factory-bootstrap-329 .label-danger[href]:focus {
5140
+ background-color: #c9302c;
5141
+ }
5142
+
5143
+ .factory-bootstrap-329 .badge {
5144
+ display: inline-block;
5145
+ min-width: 10px;
5146
+ padding: 3px 7px;
5147
+ font-size: 12px;
5148
+ font-weight: bold;
5149
+ line-height: 1;
5150
+ color: #ffffff;
5151
+ text-align: center;
5152
+ white-space: nowrap;
5153
+ vertical-align: baseline;
5154
+ background-color: #999999;
5155
+ border-radius: 10px;
5156
+ }
5157
+
5158
+ .factory-bootstrap-329 .badge:empty {
5159
+ display: none;
5160
+ }
5161
+
5162
+ .factory-bootstrap-329 .btn .badge {
5163
+ position: relative;
5164
+ top: -1px;
5165
+ }
5166
+
5167
+ .factory-bootstrap-329 a.badge:hover,
5168
+ .factory-bootstrap-329 a.badge:focus {
5169
+ color: #ffffff;
5170
+ text-decoration: none;
5171
+ cursor: pointer;
5172
+ }
5173
+
5174
+ .factory-bootstrap-329 a.list-group-item.active > .badge,
5175
+ .factory-bootstrap-329 .nav-pills > .active > a > .badge {
5176
+ color: #428bca;
5177
+ background-color: #ffffff;
5178
+ }
5179
+
5180
+ .factory-bootstrap-329 .nav-pills > li > a > .badge {
5181
+ margin-left: 3px;
5182
+ }
5183
+
5184
+ .factory-bootstrap-329 .jumbotron {
5185
+ padding: 30px;
5186
+ margin-bottom: 30px;
5187
+ font-size: 21px;
5188
+ font-weight: 200;
5189
+ line-height: 2.1428571435;
5190
+ color: inherit;
5191
+ background-color: #eeeeee;
5192
+ }
5193
+
5194
+ .factory-bootstrap-329 .jumbotron h1,
5195
+ .factory-bootstrap-329 .jumbotron .h1 {
5196
+ line-height: 1;
5197
+ color: inherit;
5198
+ }
5199
+
5200
+ .factory-bootstrap-329 .jumbotron p {
5201
+ line-height: 1.4;
5202
+ }
5203
+
5204
+ .factory-bootstrap-329 .container .jumbotron {
5205
+ border-radius: 6px;
5206
+ }
5207
+
5208
+ .factory-bootstrap-329 .jumbotron .container {
5209
+ max-width: 100%;
5210
+ }
5211
+
5212
+ @media screen and (min-width: 768px) {
5213
+ .jumbotron {
5214
+ padding-top: 48px;
5215
+ padding-bottom: 48px;
5216
+ }
5217
+ .container .jumbotron {
5218
+ padding-right: 60px;
5219
+ padding-left: 60px;
5220
+ }
5221
+ .jumbotron h1,
5222
+ .jumbotron .h1 {
5223
+ font-size: 63px;
5224
+ }
5225
+ }
5226
+
5227
+ .factory-bootstrap-329 .thumbnail {
5228
+ display: block;
5229
+ padding: 4px;
5230
+ margin-bottom: 20px;
5231
+ line-height: 1.428571429;
5232
+ background-color: #ffffff;
5233
+ border: 1px solid #dddddd;
5234
+ border-radius: 4px;
5235
+ -webkit-transition: all 0.2s ease-in-out;
5236
+ transition: all 0.2s ease-in-out;
5237
+ }
5238
+
5239
+ .factory-bootstrap-329 .thumbnail > img,
5240
+ .factory-bootstrap-329 .thumbnail a > img {
5241
+ display: block;
5242
+ height: auto;
5243
+ max-width: 100%;
5244
+ margin-right: auto;
5245
+ margin-left: auto;
5246
+ }
5247
+
5248
+ .factory-bootstrap-329 a.thumbnail:hover,
5249
+ .factory-bootstrap-329 a.thumbnail:focus,
5250
+ .factory-bootstrap-329 a.thumbnail.active {
5251
+ border-color: #428bca;
5252
+ }
5253
+
5254
+ .factory-bootstrap-329 .thumbnail .caption {
5255
+ padding: 9px;
5256
+ color: #333333;
5257
+ }
5258
+
5259
+ .factory-bootstrap-329 .alert {
5260
+ padding: 15px;
5261
+ margin-bottom: 20px;
5262
+ border: 1px solid transparent;
5263
+ border-radius: 4px;
5264
+ }
5265
+
5266
+ .factory-bootstrap-329 .alert h4 {
5267
+ margin-top: 0;
5268
+ color: inherit;
5269
+ }
5270
+
5271
+ .factory-bootstrap-329 .alert .alert-link {
5272
+ font-weight: bold;
5273
+ }
5274
+
5275
+ .factory-bootstrap-329 .alert > p,
5276
+ .factory-bootstrap-329 .alert > ul {
5277
+ margin-bottom: 0;
5278
+ }
5279
+
5280
+ .factory-bootstrap-329 .alert > p + p {
5281
+ margin-top: 5px;
5282
+ }
5283
+
5284
+ .factory-bootstrap-329 .alert-dismissable {
5285
+ padding-right: 35px;
5286
+ }
5287
+
5288
+ .factory-bootstrap-329 .alert-dismissable .close {
5289
+ position: relative;
5290
+ top: -2px;
5291
+ right: -21px;
5292
+ color: inherit;
5293
+ }
5294
+
5295
+ .factory-bootstrap-329 .alert-info {
5296
+ color: #31708f;
5297
+ background-color: #d9edf7;
5298
+ border-color: #bce8f1;
5299
+ }
5300
+
5301
+ .factory-bootstrap-329 .alert-info hr {
5302
+ border-top-color: #a6e1ec;
5303
+ }
5304
+
5305
+ .factory-bootstrap-329 .alert-info .alert-link {
5306
+ color: #245269;
5307
+ }
5308
+
5309
+ @-webkit-keyframes progress-bar-stripes {
5310
+ from {
5311
+ background-position: 40px 0;
5312
+ }
5313
+ to {
5314
+ background-position: 0 0;
5315
+ }
5316
+ }
5317
+
5318
+ @keyframes progress-bar-stripes {
5319
+ from {
5320
+ background-position: 40px 0;
5321
+ }
5322
+ to {
5323
+ background-position: 0 0;
5324
+ }
5325
+ }
5326
+
5327
+ .factory-bootstrap-329 .progress {
5328
+ height: 20px;
5329
+ margin-bottom: 20px;
5330
+ overflow: hidden;
5331
+ background-color: #f5f5f5;
5332
+ border-radius: 4px;
5333
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5334
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5335
+ }
5336
+
5337
+ .factory-bootstrap-329 .progress-bar {
5338
+ float: left;
5339
+ width: 0;
5340
+ height: 100%;
5341
+ font-size: 12px;
5342
+ line-height: 20px;
5343
+ color: #ffffff;
5344
+ text-align: center;
5345
+ background-color: #2ea2cc;
5346
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5347
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5348
+ -webkit-transition: width 0.6s ease;
5349
+ transition: width 0.6s ease;
5350
+ }
5351
+
5352
+ .factory-bootstrap-329 .progress-striped .progress-bar {
5353
+ 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);
5354
+ 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);
5355
+ background-size: 40px 40px;
5356
+ }
5357
+
5358
+ .factory-bootstrap-329 .progress.active .progress-bar {
5359
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
5360
+ animation: progress-bar-stripes 2s linear infinite;
5361
+ }
5362
+
5363
+ .factory-bootstrap-329 .progress-bar-success {
5364
+ background-color: #5cb85c;
5365
+ }
5366
+
5367
+ .factory-bootstrap-329 .progress-striped .progress-bar-success {
5368
+ 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);
5369
+ 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);
5370
+ }
5371
+
5372
+ .factory-bootstrap-329 .progress-bar-info {
5373
+ background-color: #5bc0de;
5374
+ }
5375
+
5376
+ .factory-bootstrap-329 .progress-striped .progress-bar-info {
5377
+ 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);
5378
+ 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);
5379
+ }
5380
+
5381
+ .factory-bootstrap-329 .progress-bar-warning {
5382
+ background-color: #f0ad4e;
5383
+ }
5384
+
5385
+ .factory-bootstrap-329 .progress-striped .progress-bar-warning {
5386
+ 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);
5387
+ 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);
5388
+ }
5389
+
5390
+ .factory-bootstrap-329 .progress-bar-danger {
5391
+ background-color: #d9534f;
5392
+ }
5393
+
5394
+ .factory-bootstrap-329 .progress-striped .progress-bar-danger {
5395
+ 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);
5396
+ 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);
5397
+ }
5398
+
5399
+ .factory-bootstrap-329 .media,
5400
+ .factory-bootstrap-329 .media-body {
5401
+ overflow: hidden;
5402
+ zoom: 1;
5403
+ }
5404
+
5405
+ .factory-bootstrap-329 .media,
5406
+ .factory-bootstrap-329 .media .media {
5407
+ margin-top: 15px;
5408
+ }
5409
+
5410
+ .factory-bootstrap-329 .media:first-child {
5411
+ margin-top: 0;
5412
+ }
5413
+
5414
+ .factory-bootstrap-329 .media-object {
5415
+ display: block;
5416
+ }
5417
+
5418
+ .factory-bootstrap-329 .media-heading {
5419
+ margin: 0 0 5px;
5420
+ }
5421
+
5422
+ .factory-bootstrap-329 .media > .pull-left {
5423
+ margin-right: 10px;
5424
+ }
5425
+
5426
+ .factory-bootstrap-329 .media > .pull-right {
5427
+ margin-left: 10px;
5428
+ }
5429
+
5430
+ .factory-bootstrap-329 .media-list {
5431
+ padding-left: 0;
5432
+ list-style: none;
5433
+ }
5434
+
5435
+ .factory-bootstrap-329 .list-group {
5436
+ padding-left: 0;
5437
+ margin-bottom: 20px;
5438
+ }
5439
+
5440
+ .factory-bootstrap-329 .list-group-item {
5441
+ position: relative;
5442
+ display: block;
5443
+ padding: 10px 15px;
5444
+ margin-bottom: -1px;
5445
+ background-color: #ffffff;
5446
+ border: 1px solid #dddddd;
5447
+ }
5448
+
5449
+ .factory-bootstrap-329 .list-group-item:first-child {
5450
+ border-top-right-radius: 4px;
5451
+ border-top-left-radius: 4px;
5452
+ }
5453
+
5454
+ .factory-bootstrap-329 .list-group-item:last-child {
5455
+ margin-bottom: 0;
5456
+ border-bottom-right-radius: 4px;
5457
+ border-bottom-left-radius: 4px;
5458
+ }
5459
+
5460
+ .factory-bootstrap-329 .list-group-item > .badge {
5461
+ float: right;
5462
+ }
5463
+
5464
+ .factory-bootstrap-329 .list-group-item > .badge + .badge {
5465
+ margin-right: 5px;
5466
+ }
5467
+
5468
+ .factory-bootstrap-329 a.list-group-item {
5469
+ color: #555555;
5470
+ }
5471
+
5472
+ .factory-bootstrap-329 a.list-group-item .list-group-item-heading {
5473
+ color: #333333;
5474
+ }
5475
+
5476
+ .factory-bootstrap-329 a.list-group-item:hover,
5477
+ .factory-bootstrap-329 a.list-group-item:focus {
5478
+ text-decoration: none;
5479
+ background-color: #f5f5f5;
5480
+ }
5481
+
5482
+ .factory-bootstrap-329 a.list-group-item.active,
5483
+ .factory-bootstrap-329 a.list-group-item.active:hover,
5484
+ .factory-bootstrap-329 a.list-group-item.active:focus {
5485
+ z-index: 2;
5486
+ color: #ffffff;
5487
+ background-color: #428bca;
5488
+ border-color: #428bca;
5489
+ }
5490
+
5491
+ .factory-bootstrap-329 a.list-group-item.active .list-group-item-heading,
5492
+ .factory-bootstrap-329 a.list-group-item.active:hover .list-group-item-heading,
5493
+ .factory-bootstrap-329 a.list-group-item.active:focus .list-group-item-heading {
5494
+ color: inherit;
5495
+ }
5496
+
5497
+ .factory-bootstrap-329 a.list-group-item.active .list-group-item-text,
5498
+ .factory-bootstrap-329 a.list-group-item.active:hover .list-group-item-text,
5499
+ .factory-bootstrap-329 a.list-group-item.active:focus .list-group-item-text {
5500
+ color: #e1edf7;
5501
+ }
5502
+
5503
+ .factory-bootstrap-329 .list-group-item-heading {
5504
+ margin-top: 0;
5505
+ margin-bottom: 5px;
5506
+ }
5507
+
5508
+ .factory-bootstrap-329 .list-group-item-text {
5509
+ margin-bottom: 0;
5510
+ line-height: 1.3;
5511
+ }
5512
+
5513
+ .factory-bootstrap-329 .panel {
5514
+ margin-bottom: 20px;
5515
+ background-color: #ffffff;
5516
+ border: 1px solid transparent;
5517
+ border-radius: 4px;
5518
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5519
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5520
+ }
5521
+
5522
+ .factory-bootstrap-329 .panel-body {
5523
+ padding: 15px;
5524
+ }
5525
+
5526
+ .factory-bootstrap-329 .panel-body:before,
5527
+ .factory-bootstrap-329 .panel-body:after {
5528
+ display: table;
5529
+ content: " ";
5530
+ }
5531
+
5532
+ .factory-bootstrap-329 .panel-body:after {
5533
+ clear: both;
5534
+ }
5535
+
5536
+ .factory-bootstrap-329 .panel-body:before,
5537
+ .factory-bootstrap-329 .panel-body:after {
5538
+ display: table;
5539
+ content: " ";
5540
+ }
5541
+
5542
+ .factory-bootstrap-329 .panel-body:after {
5543
+ clear: both;
5544
+ }
5545
+
5546
+ .factory-bootstrap-329 .panel > .list-group {
5547
+ margin-bottom: 0;
5548
+ }
5549
+
5550
+ .factory-bootstrap-329 .panel > .list-group .list-group-item {
5551
+ border-width: 1px 0;
5552
+ }
5553
+
5554
+ .factory-bootstrap-329 .panel > .list-group .list-group-item:first-child {
5555
+ border-top-right-radius: 0;
5556
+ border-top-left-radius: 0;
5557
+ }
5558
+
5559
+ .factory-bootstrap-329 .panel > .list-group .list-group-item:last-child {
5560
+ border-bottom: 0;
5561
+ }
5562
+
5563
+ .factory-bootstrap-329 .panel-heading + .list-group .list-group-item:first-child {
5564
+ border-top-width: 0;
5565
+ }
5566
+
5567
+ .factory-bootstrap-329 .panel > .table,
5568
+ .factory-bootstrap-329 .panel > .table-responsive > .table {
5569
+ margin-bottom: 0;
5570
+ }
5571
+
5572
+ .factory-bootstrap-329 .panel > .panel-body + .table,
5573
+ .factory-bootstrap-329 .panel > .panel-body + .table-responsive {
5574
+ border-top: 1px solid #dddddd;
5575
+ }
5576
+
5577
+ .factory-bootstrap-329 .panel > .table > tbody:first-child th,
5578
+ .factory-bootstrap-329 .panel > .table > tbody:first-child td {
5579
+ border-top: 0;
5580
+ }
5581
+
5582
+ .factory-bootstrap-329 .panel > .table-bordered,
5583
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered {
5584
+ border: 0;
5585
+ }
5586
+
5587
+ .factory-bootstrap-329 .panel > .table-bordered > thead > tr > th:first-child,
5588
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
5589
+ .factory-bootstrap-329 .panel > .table-bordered > tbody > tr > th:first-child,
5590
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
5591
+ .factory-bootstrap-329 .panel > .table-bordered > tfoot > tr > th:first-child,
5592
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
5593
+ .factory-bootstrap-329 .panel > .table-bordered > thead > tr > td:first-child,
5594
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
5595
+ .factory-bootstrap-329 .panel > .table-bordered > tbody > tr > td:first-child,
5596
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
5597
+ .factory-bootstrap-329 .panel > .table-bordered > tfoot > tr > td:first-child,
5598
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
5599
+ border-left: 0;
5600
+ }
5601
+
5602
+ .factory-bootstrap-329 .panel > .table-bordered > thead > tr > th:last-child,
5603
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
5604
+ .factory-bootstrap-329 .panel > .table-bordered > tbody > tr > th:last-child,
5605
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
5606
+ .factory-bootstrap-329 .panel > .table-bordered > tfoot > tr > th:last-child,
5607
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
5608
+ .factory-bootstrap-329 .panel > .table-bordered > thead > tr > td:last-child,
5609
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
5610
+ .factory-bootstrap-329 .panel > .table-bordered > tbody > tr > td:last-child,
5611
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
5612
+ .factory-bootstrap-329 .panel > .table-bordered > tfoot > tr > td:last-child,
5613
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
5614
+ border-right: 0;
5615
+ }
5616
+
5617
+ .factory-bootstrap-329 .panel > .table-bordered > thead > tr:last-child > th,
5618
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > thead > tr:last-child > th,
5619
+ .factory-bootstrap-329 .panel > .table-bordered > tbody > tr:last-child > th,
5620
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5621
+ .factory-bootstrap-329 .panel > .table-bordered > tfoot > tr:last-child > th,
5622
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th,
5623
+ .factory-bootstrap-329 .panel > .table-bordered > thead > tr:last-child > td,
5624
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > thead > tr:last-child > td,
5625
+ .factory-bootstrap-329 .panel > .table-bordered > tbody > tr:last-child > td,
5626
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
5627
+ .factory-bootstrap-329 .panel > .table-bordered > tfoot > tr:last-child > td,
5628
+ .factory-bootstrap-329 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td {
5629
+ border-bottom: 0;
5630
+ }
5631
+
5632
+ .factory-bootstrap-329 .panel > .table-responsive {
5633
+ margin-bottom: 0;
5634
+ border: 0;
5635
+ }
5636
+
5637
+ .factory-bootstrap-329 .panel-heading {
5638
+ padding: 10px 15px;
5639
+ border-bottom: 1px solid transparent;
5640
+ border-top-right-radius: 3px;
5641
+ border-top-left-radius: 3px;
5642
+ }
5643
+
5644
+ .factory-bootstrap-329 .panel-heading > .dropdown .dropdown-toggle {
5645
+ color: inherit;
5646
+ }
5647
+
5648
+ .factory-bootstrap-329 .panel-title {
5649
+ margin-top: 0;
5650
+ margin-bottom: 0;
5651
+ font-size: 16px;
5652
+ color: inherit;
5653
+ }
5654
+
5655
+ .factory-bootstrap-329 .panel-title > a {
5656
+ color: inherit;
5657
+ }
5658
+
5659
+ .factory-bootstrap-329 .panel-footer {
5660
+ padding: 10px 15px;
5661
+ background-color: #f5f5f5;
5662
+ border-top: 1px solid #dddddd;
5663
+ border-bottom-right-radius: 3px;
5664
+ border-bottom-left-radius: 3px;
5665
+ }
5666
+
5667
+ .factory-bootstrap-329 .panel-group .panel {
5668
+ margin-bottom: 0;
5669
+ overflow: hidden;
5670
+ border-radius: 4px;
5671
+ }
5672
+
5673
+ .factory-bootstrap-329 .panel-group .panel + .panel {
5674
+ margin-top: 5px;
5675
+ }
5676
+
5677
+ .factory-bootstrap-329 .panel-group .panel-heading {
5678
+ border-bottom: 0;
5679
+ }
5680
+
5681
+ .factory-bootstrap-329 .panel-group .panel-heading + .panel-collapse .panel-body {
5682
+ border-top: 1px solid #dddddd;
5683
+ }
5684
+
5685
+ .factory-bootstrap-329 .panel-group .panel-footer {
5686
+ border-top: 0;
5687
+ }
5688
+
5689
+ .factory-bootstrap-329 .panel-group .panel-footer + .panel-collapse .panel-body {
5690
+ border-bottom: 1px solid #dddddd;
5691
+ }
5692
+
5693
+ .factory-bootstrap-329 .panel-default {
5694
+ border-color: #dddddd;
5695
+ }
5696
+
5697
+ .factory-bootstrap-329 .panel-default > .panel-heading {
5698
+ color: #333333;
5699
+ background-color: #f5f5f5;
5700
+ border-color: #dddddd;
5701
+ }
5702
+
5703
+ .factory-bootstrap-329 .panel-default > .panel-heading + .panel-collapse .panel-body {
5704
+ border-top-color: #dddddd;
5705
+ }
5706
+
5707
+ .factory-bootstrap-329 .panel-default > .panel-footer + .panel-collapse .panel-body {
5708
+ border-bottom-color: #dddddd;
5709
+ }
5710
+
5711
+ .factory-bootstrap-329 .panel-primary {
5712
+ border-color: #428bca;
5713
+ }
5714
+
5715
+ .factory-bootstrap-329 .panel-primary > .panel-heading {
5716
+ color: #ffffff;
5717
+ background-color: #428bca;
5718
+ border-color: #428bca;
5719
+ }
5720
+
5721
+ .factory-bootstrap-329 .panel-primary > .panel-heading + .panel-collapse .panel-body {
5722
+ border-top-color: #428bca;
5723
+ }
5724
+
5725
+ .factory-bootstrap-329 .panel-primary > .panel-footer + .panel-collapse .panel-body {
5726
+ border-bottom-color: #428bca;
5727
+ }
5728
+
5729
+ .factory-bootstrap-329 .panel-success {
5730
+ border-color: #d6e9c6;
5731
+ }
5732
+
5733
+ .factory-bootstrap-329 .panel-success > .panel-heading {
5734
+ color: #3c763d;
5735
+ background-color: #dff0d8;
5736
+ border-color: #d6e9c6;
5737
+ }
5738
+
5739
+ .factory-bootstrap-329 .panel-success > .panel-heading + .panel-collapse .panel-body {
5740
+ border-top-color: #d6e9c6;
5741
+ }
5742
+
5743
+ .factory-bootstrap-329 .panel-success > .panel-footer + .panel-collapse .panel-body {
5744
+ border-bottom-color: #d6e9c6;
5745
+ }
5746
+
5747
+ .factory-bootstrap-329 .panel-warning {
5748
+ border-color: #faebcc;
5749
+ }
5750
+
5751
+ .factory-bootstrap-329 .panel-warning > .panel-heading {
5752
+ color: #8a6d3b;
5753
+ background-color: #fcf8e3;
5754
+ border-color: #faebcc;
5755
+ }
5756
+
5757
+ .factory-bootstrap-329 .panel-warning > .panel-heading + .panel-collapse .panel-body {
5758
+ border-top-color: #faebcc;
5759
+ }
5760
+
5761
+ .factory-bootstrap-329 .panel-warning > .panel-footer + .panel-collapse .panel-body {
5762
+ border-bottom-color: #faebcc;
5763
+ }
5764
+
5765
+ .factory-bootstrap-329 .panel-danger {
5766
+ border-color: #ebccd1;
5767
+ }
5768
+
5769
+ .factory-bootstrap-329 .panel-danger > .panel-heading {
5770
+ color: #a94442;
5771
+ background-color: #f2dede;
5772
+ border-color: #ebccd1;
5773
+ }
5774
+
5775
+ .factory-bootstrap-329 .panel-danger > .panel-heading + .panel-collapse .panel-body {
5776
+ border-top-color: #ebccd1;
5777
+ }
5778
+
5779
+ .factory-bootstrap-329 .panel-danger > .panel-footer + .panel-collapse .panel-body {
5780
+ border-bottom-color: #ebccd1;
5781
+ }
5782
+
5783
+ .factory-bootstrap-329 .panel-info {
5784
+ border-color: #bce8f1;
5785
+ }
5786
+
5787
+ .factory-bootstrap-329 .panel-info > .panel-heading {
5788
+ color: #31708f;
5789
+ background-color: #d9edf7;
5790
+ border-color: #bce8f1;
5791
+ }
5792
+
5793
+ .factory-bootstrap-329 .panel-info > .panel-heading + .panel-collapse .panel-body {
5794
+ border-top-color: #bce8f1;
5795
+ }
5796
+
5797
+ .factory-bootstrap-329 .panel-info > .panel-footer + .panel-collapse .panel-body {
5798
+ border-bottom-color: #bce8f1;
5799
+ }
5800
+
5801
+ .factory-bootstrap-329 .well {
5802
+ min-height: 20px;
5803
+ padding: 19px;
5804
+ margin-bottom: 20px;
5805
+ background-color: #f5f5f5;
5806
+ border: 1px solid #e3e3e3;
5807
+ border-radius: 4px;
5808
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5809
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5810
+ }
5811
+
5812
+ .factory-bootstrap-329 .well blockquote {
5813
+ border-color: #ddd;
5814
+ border-color: rgba(0, 0, 0, 0.15);
5815
+ }
5816
+
5817
+ .factory-bootstrap-329 .well-lg {
5818
+ padding: 24px;
5819
+ border-radius: 6px;
5820
+ }
5821
+
5822
+ .factory-bootstrap-329 .well-sm {
5823
+ padding: 9px;
5824
+ border-radius: 3px;
5825
+ }
5826
+
5827
+ .factory-bootstrap-329 .close {
5828
+ float: right;
5829
+ font-size: 14px;
5830
+ font-weight: bold;
5831
+ line-height: 1;
5832
+ color: #000000;
5833
+ text-shadow: 0 1px 0 #ffffff;
5834
+ opacity: 0.3;
5835
+ filter: alpha(opacity=30);
5836
+ }
5837
+ .factory-bootstrap-329 .alert .close {
5838
+ position: relative;
5839
+ top: -8px;
5840
+ right: -7px;
5841
+ }
5842
+
5843
+ .factory-bootstrap-329 .close:hover,
5844
+ .factory-bootstrap-329 .close:focus {
5845
+ color: #000000;
5846
+ text-decoration: none;
5847
+ cursor: pointer;
5848
+ opacity: 0.5;
5849
+ filter: alpha(opacity=50);
5850
+ }
5851
+
5852
+ .factory-bootstrap-329 button.close {
5853
+ padding: 0;
5854
+ cursor: pointer;
5855
+ background: transparent;
5856
+ border: 0;
5857
+ -webkit-appearance: none;
5858
+ }
5859
+
5860
+ .factory-bootstrap-329 .modal-open {
5861
+ overflow: hidden;
5862
+ }
5863
+
5864
+ .factory-bootstrap-329 .modal {
5865
+ position: fixed;
5866
+ top: 0;
5867
+ right: 0;
5868
+ bottom: 0;
5869
+ left: 0;
5870
+ z-index: 1040;
5871
+ display: none;
5872
+ overflow: auto;
5873
+ overflow-y: scroll;
5874
+ width: auto;
5875
+ margin-left: 0px;
5876
+ background-color: transparent;
5877
+ border: 0px;
5878
+ }
5879
+
5880
+ .factory-bootstrap-329 .modal.fade .modal-dialog {
5881
+ -webkit-transform: translate(0, -25%);
5882
+ -ms-transform: translate(0, -25%);
5883
+ transform: translate(0, -25%);
5884
+ -webkit-transition: -webkit-transform 0.3s ease-out;
5885
+ -moz-transition: -moz-transform 0.3s ease-out;
5886
+ -o-transition: -o-transform 0.3s ease-out;
5887
+ transition: transform 0.3s ease-out;
5888
+ }
5889
+
5890
+ .factory-bootstrap-329 .modal.in .modal-dialog {
5891
+ -webkit-transform: translate(0, 0);
5892
+ -ms-transform: translate(0, 0);
5893
+ transform: translate(0, 0);
5894
+ }
5895
+
5896
+ .factory-bootstrap-329 .modal-dialog {
5897
+ position: relative;
5898
+ z-index: 1050;
5899
+ width: auto;
5900
+ margin: 10px;
5901
+ }
5902
+
5903
+ .factory-bootstrap-329 .modal-content {
5904
+ position: relative;
5905
+ background-color: #ffffff;
5906
+ border: 1px solid #999999;
5907
+ border: 1px solid rgba(0, 0, 0, 0.2);
5908
+ border-radius: 6px;
5909
+ outline: none;
5910
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5911
+ box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5912
+ background-clip: padding-box;
5913
+ }
5914
+
5915
+ .factory-bootstrap-329 .modal-backdrop,
5916
+ .factory-bootstrap-329-modal-backdrop {
5917
+ position: fixed;
5918
+ top: 0;
5919
+ right: 0;
5920
+ bottom: 0;
5921
+ left: 0;
5922
+ z-index: 1030;
5923
+ background-color: #000000;
5924
+ }
5925
+
5926
+ .factory-bootstrap-329 .modal-backdrop.fade,
5927
+ .factory-bootstrap-329-modal-backdrop.fade {
5928
+ opacity: 0;
5929
+ filter: alpha(opacity=0);
5930
+ }
5931
+
5932
+ .factory-bootstrap-329 .modal-backdrop.in,
5933
+ .factory-bootstrap-329-modal-backdrop.in {
5934
+ opacity: 0.5;
5935
+ filter: alpha(opacity=50);
5936
+ }
5937
+
5938
+ .factory-bootstrap-329 .modal-header {
5939
+ min-height: 16.428571429px;
5940
+ padding: 15px;
5941
+ border-bottom: 1px solid #e5e5e5;
5942
+ }
5943
+
5944
+ .factory-bootstrap-329 .modal-header .close {
5945
+ margin-top: -2px;
5946
+ }
5947
+
5948
+ .factory-bootstrap-329 .modal-title {
5949
+ margin: 0;
5950
+ line-height: 1.428571429;
5951
+ }
5952
+
5953
+ .factory-bootstrap-329 .modal-body {
5954
+ position: relative;
5955
+ padding: 20px;
5956
+ max-height: none;
5957
+ }
5958
+
5959
+ .factory-bootstrap-329 .modal-footer {
5960
+ padding: 19px 20px 20px;
5961
+ margin-top: 15px;
5962
+ text-align: right;
5963
+ border-top: 1px solid #e5e5e5;
5964
+ }
5965
+
5966
+ .factory-bootstrap-329 .modal-footer:before,
5967
+ .factory-bootstrap-329 .modal-footer:after {
5968
+ display: table;
5969
+ content: " ";
5970
+ }
5971
+
5972
+ .factory-bootstrap-329 .modal-footer:after {
5973
+ clear: both;
5974
+ }
5975
+
5976
+ .factory-bootstrap-329 .modal-footer:before,
5977
+ .factory-bootstrap-329 .modal-footer:after {
5978
+ display: table;
5979
+ content: " ";
5980
+ }
5981
+
5982
+ .factory-bootstrap-329 .modal-footer:after {
5983
+ clear: both;
5984
+ }
5985
+
5986
+ .factory-bootstrap-329 .modal-footer .btn + .btn {
5987
+ margin-bottom: 0;
5988
+ margin-left: 5px;
5989
+ }
5990
+
5991
+ .factory-bootstrap-329 .modal-footer .btn-group .btn + .btn {
5992
+ margin-left: -1px;
5993
+ }
5994
+
5995
+ .factory-bootstrap-329 .modal-footer .btn-block + .btn-block {
5996
+ margin-left: 0;
5997
+ }
5998
+
5999
+ @media screen and (min-width: 768px) {
6000
+ .factory-bootstrap-329 .modal-dialog {
6001
+ width: 600px;
6002
+ margin: 30px auto;
6003
+ }
6004
+ .factory-bootstrap-329 .modal-content {
6005
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
6006
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
6007
+ }
6008
+ }
6009
+
6010
+ .factory-bootstrap-329 .tooltip {
6011
+ position: absolute;
6012
+ z-index: 1030;
6013
+ display: block;
6014
+ font-size: 12px;
6015
+ line-height: 1.4;
6016
+ opacity: 0;
6017
+ filter: alpha(opacity=0);
6018
+ visibility: visible;
6019
+ }
6020
+
6021
+ .factory-bootstrap-329 .tooltip.in {
6022
+ opacity: 0.9;
6023
+ filter: alpha(opacity=90);
6024
+ }
6025
+
6026
+ .factory-bootstrap-329 .tooltip.top {
6027
+ padding: 5px 0;
6028
+ margin-top: -3px;
6029
+ }
6030
+
6031
+ .factory-bootstrap-329 .tooltip.right {
6032
+ padding: 0 5px;
6033
+ margin-left: 3px;
6034
+ }
6035
+
6036
+ .factory-bootstrap-329 .tooltip.bottom {
6037
+ padding: 5px 0;
6038
+ margin-top: 3px;
6039
+ }
6040
+
6041
+ .factory-bootstrap-329 .tooltip.left {
6042
+ padding: 0 5px;
6043
+ margin-left: -3px;
6044
+ }
6045
+
6046
+ .factory-bootstrap-329 .tooltip-inner {
6047
+ max-width: 200px;
6048
+ padding: 3px 8px;
6049
+ color: #ffffff;
6050
+ text-align: center;
6051
+ text-decoration: none;
6052
+ background-color: #000000;
6053
+ border-radius: 4px;
6054
+ }
6055
+
6056
+ .factory-bootstrap-329 .tooltip-arrow {
6057
+ position: absolute;
6058
+ width: 0;
6059
+ height: 0;
6060
+ border-color: transparent;
6061
+ border-style: solid;
6062
+ }
6063
+
6064
+ .factory-bootstrap-329 .tooltip.top .tooltip-arrow {
6065
+ bottom: 0;
6066
+ left: 50%;
6067
+ margin-left: -5px;
6068
+ border-top-color: #000000;
6069
+ border-width: 5px 5px 0;
6070
+ }
6071
+
6072
+ .factory-bootstrap-329 .tooltip.top-left .tooltip-arrow {
6073
+ bottom: 0;
6074
+ left: 5px;
6075
+ border-top-color: #000000;
6076
+ border-width: 5px 5px 0;
6077
+ }
6078
+
6079
+ .factory-bootstrap-329 .tooltip.top-right .tooltip-arrow {
6080
+ right: 5px;
6081
+ bottom: 0;
6082
+ border-top-color: #000000;
6083
+ border-width: 5px 5px 0;
6084
+ }
6085
+
6086
+ .factory-bootstrap-329 .tooltip.right .tooltip-arrow {
6087
+ top: 50%;
6088
+ left: 0;
6089
+ margin-top: -5px;
6090
+ border-right-color: #000000;
6091
+ border-width: 5px 5px 5px 0;
6092
+ }
6093
+
6094
+ .factory-bootstrap-329 .tooltip.left .tooltip-arrow {
6095
+ top: 50%;
6096
+ right: 0;
6097
+ margin-top: -5px;
6098
+ border-left-color: #000000;
6099
+ border-width: 5px 0 5px 5px;
6100
+ }
6101
+
6102
+ .factory-bootstrap-329 .tooltip.bottom .tooltip-arrow {
6103
+ top: 0;
6104
+ left: 50%;
6105
+ margin-left: -5px;
6106
+ border-bottom-color: #000000;
6107
+ border-width: 0 5px 5px;
6108
+ }
6109
+
6110
+ .factory-bootstrap-329 .tooltip.bottom-left .tooltip-arrow {
6111
+ top: 0;
6112
+ left: 5px;
6113
+ border-bottom-color: #000000;
6114
+ border-width: 0 5px 5px;
6115
+ }
6116
+
6117
+ .factory-bootstrap-329 .tooltip.bottom-right .tooltip-arrow {
6118
+ top: 0;
6119
+ right: 5px;
6120
+ border-bottom-color: #000000;
6121
+ border-width: 0 5px 5px;
6122
+ }
6123
+
6124
+ .factory-bootstrap-329 .popover {
6125
+ position: absolute;
6126
+ top: 0;
6127
+ left: 0;
6128
+ z-index: 1010;
6129
+ display: none;
6130
+ max-width: 276px;
6131
+ padding: 1px;
6132
+ text-align: left;
6133
+ white-space: normal;
6134
+ background-color: #ffffff;
6135
+ border: 1px solid #cccccc;
6136
+ border: 1px solid rgba(0, 0, 0, 0.2);
6137
+ border-radius: 6px;
6138
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6139
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6140
+ background-clip: padding-box;
6141
+ }
6142
+
6143
+ .factory-bootstrap-329 .popover.top {
6144
+ margin-top: -10px;
6145
+ }
6146
+
6147
+ .factory-bootstrap-329 .popover.right {
6148
+ margin-left: 10px;
6149
+ }
6150
+
6151
+ .factory-bootstrap-329 .popover.bottom {
6152
+ margin-top: 10px;
6153
+ }
6154
+
6155
+ .factory-bootstrap-329 .popover.left {
6156
+ margin-left: -10px;
6157
+ }
6158
+
6159
+ .factory-bootstrap-329 .popover-title {
6160
+ padding: 8px 14px;
6161
+ margin: 0;
6162
+ font-size: 14px;
6163
+ font-weight: normal;
6164
+ line-height: 18px;
6165
+ background-color: #f7f7f7;
6166
+ border-bottom: 1px solid #ebebeb;
6167
+ border-radius: 5px 5px 0 0;
6168
+ }
6169
+
6170
+ .factory-bootstrap-329 .popover-content {
6171
+ padding: 9px 14px;
6172
+ }
6173
+
6174
+ .factory-bootstrap-329 .popover .arrow,
6175
+ .factory-bootstrap-329 .popover .arrow:after {
6176
+ position: absolute;
6177
+ display: block;
6178
+ width: 0;
6179
+ height: 0;
6180
+ border-color: transparent;
6181
+ border-style: solid;
6182
+ }
6183
+
6184
+ .factory-bootstrap-329 .popover .arrow {
6185
+ border-width: 11px;
6186
+ }
6187
+
6188
+ .factory-bootstrap-329 .popover .arrow:after {
6189
+ border-width: 10px;
6190
+ content: "";
6191
+ }
6192
+
6193
+ .factory-bootstrap-329 .popover.top .arrow {
6194
+ bottom: -11px;
6195
+ left: 50%;
6196
+ margin-left: -11px;
6197
+ border-top-color: #999999;
6198
+ border-top-color: rgba(0, 0, 0, 0.25);
6199
+ border-bottom-width: 0;
6200
+ }
6201
+
6202
+ .factory-bootstrap-329 .popover.top .arrow:after {
6203
+ bottom: 1px;
6204
+ margin-left: -10px;
6205
+ border-top-color: #ffffff;
6206
+ border-bottom-width: 0;
6207
+ content: " ";
6208
+ }
6209
+
6210
+ .factory-bootstrap-329 .popover.right .arrow {
6211
+ top: 50%;
6212
+ left: -11px;
6213
+ margin-top: -11px;
6214
+ border-right-color: #999999;
6215
+ border-right-color: rgba(0, 0, 0, 0.25);
6216
+ border-left-width: 0;
6217
+ }
6218
+
6219
+ .factory-bootstrap-329 .popover.right .arrow:after {
6220
+ bottom: -10px;
6221
+ left: 1px;
6222
+ border-right-color: #ffffff;
6223
+ border-left-width: 0;
6224
+ content: " ";
6225
+ }
6226
+
6227
+ .factory-bootstrap-329 .popover.bottom .arrow {
6228
+ top: -11px;
6229
+ left: 50%;
6230
+ margin-left: -11px;
6231
+ border-bottom-color: #999999;
6232
+ border-bottom-color: rgba(0, 0, 0, 0.25);
6233
+ border-top-width: 0;
6234
+ }
6235
+
6236
+ .factory-bootstrap-329 .popover.bottom .arrow:after {
6237
+ top: 1px;
6238
+ margin-left: -10px;
6239
+ border-bottom-color: #ffffff;
6240
+ border-top-width: 0;
6241
+ content: " ";
6242
+ }
6243
+
6244
+ .factory-bootstrap-329 .popover.left .arrow {
6245
+ top: 50%;
6246
+ right: -11px;
6247
+ margin-top: -11px;
6248
+ border-left-color: #999999;
6249
+ border-left-color: rgba(0, 0, 0, 0.25);
6250
+ border-right-width: 0;
6251
+ }
6252
+
6253
+ .factory-bootstrap-329 .popover.left .arrow:after {
6254
+ right: 1px;
6255
+ bottom: -10px;
6256
+ border-left-color: #ffffff;
6257
+ border-right-width: 0;
6258
+ content: " ";
6259
+ }
6260
+
6261
+ .factory-bootstrap-329 .carousel {
6262
+ position: relative;
6263
+ }
6264
+
6265
+ .factory-bootstrap-329 .carousel-inner {
6266
+ position: relative;
6267
+ width: 100%;
6268
+ overflow: hidden;
6269
+ }
6270
+
6271
+ .factory-bootstrap-329 .carousel-inner > .item {
6272
+ position: relative;
6273
+ display: none;
6274
+ -webkit-transition: 0.6s ease-in-out left;
6275
+ transition: 0.6s ease-in-out left;
6276
+ }
6277
+
6278
+ .factory-bootstrap-329 .carousel-inner > .item > img,
6279
+ .factory-bootstrap-329 .carousel-inner > .item > a > img {
6280
+ display: block;
6281
+ height: auto;
6282
+ max-width: 100%;
6283
+ line-height: 1;
6284
+ }
6285
+
6286
+ .factory-bootstrap-329 .carousel-inner > .active,
6287
+ .factory-bootstrap-329 .carousel-inner > .next,
6288
+ .factory-bootstrap-329 .carousel-inner > .prev {
6289
+ display: block;
6290
+ }
6291
+
6292
+ .factory-bootstrap-329 .carousel-inner > .active {
6293
+ left: 0;
6294
+ }
6295
+
6296
+ .factory-bootstrap-329 .carousel-inner > .next,
6297
+ .factory-bootstrap-329 .carousel-inner > .prev {
6298
+ position: absolute;
6299
+ top: 0;
6300
+ width: 100%;
6301
+ }
6302
+
6303
+ .factory-bootstrap-329 .carousel-inner > .next {
6304
+ left: 100%;
6305
+ }
6306
+
6307
+ .factory-bootstrap-329 .carousel-inner > .prev {
6308
+ left: -100%;
6309
+ }
6310
+
6311
+ .factory-bootstrap-329 .carousel-inner > .next.left,
6312
+ .factory-bootstrap-329 .carousel-inner > .prev.right {
6313
+ left: 0;
6314
+ }
6315
+
6316
+ .factory-bootstrap-329 .carousel-inner > .active.left {
6317
+ left: -100%;
6318
+ }
6319
+
6320
+ .factory-bootstrap-329 .carousel-inner > .active.right {
6321
+ left: 100%;
6322
+ }
6323
+
6324
+ .factory-bootstrap-329 .carousel-control {
6325
+ position: absolute;
6326
+ top: 0;
6327
+ bottom: 0;
6328
+ left: 0;
6329
+ width: 15%;
6330
+ font-size: 20px;
6331
+ color: #ffffff;
6332
+ text-align: center;
6333
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6334
+ opacity: 0.5;
6335
+ filter: alpha(opacity=50);
6336
+ }
6337
+
6338
+ .factory-bootstrap-329 .carousel-control.left {
6339
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%));
6340
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);
6341
+ background-repeat: repeat-x;
6342
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
6343
+ }
6344
+
6345
+ .factory-bootstrap-329 .carousel-control.right {
6346
+ right: 0;
6347
+ left: auto;
6348
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%));
6349
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);
6350
+ background-repeat: repeat-x;
6351
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
6352
+ }
6353
+
6354
+ .factory-bootstrap-329 .carousel-control:hover,
6355
+ .factory-bootstrap-329 .carousel-control:focus {
6356
+ color: #ffffff;
6357
+ text-decoration: none;
6358
+ outline: none;
6359
+ opacity: 0.9;
6360
+ filter: alpha(opacity=90);
6361
+ }
6362
+
6363
+ .factory-bootstrap-329 .carousel-control .icon-prev,
6364
+ .factory-bootstrap-329 .carousel-control .icon-next,
6365
+ .factory-bootstrap-329 .carousel-control .glyphicon-chevron-left,
6366
+ .factory-bootstrap-329 .carousel-control .glyphicon-chevron-right {
6367
+ position: absolute;
6368
+ top: 50%;
6369
+ z-index: 5;
6370
+ display: inline-block;
6371
+ }
6372
+
6373
+ .factory-bootstrap-329 .carousel-control .icon-prev,
6374
+ .factory-bootstrap-329 .carousel-control .glyphicon-chevron-left {
6375
+ left: 50%;
6376
+ }
6377
+
6378
+ .factory-bootstrap-329 .carousel-control .icon-next,
6379
+ .factory-bootstrap-329 .carousel-control .glyphicon-chevron-right {
6380
+ right: 50%;
6381
+ }
6382
+
6383
+ .factory-bootstrap-329 .carousel-control .icon-prev,
6384
+ .factory-bootstrap-329 .carousel-control .icon-next {
6385
+ width: 20px;
6386
+ height: 20px;
6387
+ margin-top: -10px;
6388
+ margin-left: -10px;
6389
+ font-family: serif;
6390
+ }
6391
+
6392
+ .factory-bootstrap-329 .carousel-control .icon-prev:before {
6393
+ content: '\2039';
6394
+ }
6395
+
6396
+ .factory-bootstrap-329 .carousel-control .icon-next:before {
6397
+ content: '\203a';
6398
+ }
6399
+
6400
+ .factory-bootstrap-329 .carousel-indicators {
6401
+ position: absolute;
6402
+ bottom: 10px;
6403
+ left: 50%;
6404
+ z-index: 15;
6405
+ width: 60%;
6406
+ padding-left: 0;
6407
+ margin-left: -30%;
6408
+ text-align: center;
6409
+ list-style: none;
6410
+ }
6411
+
6412
+ .factory-bootstrap-329 .carousel-indicators li {
6413
+ display: inline-block;
6414
+ width: 10px;
6415
+ height: 10px;
6416
+ margin: 1px;
6417
+ text-indent: -999px;
6418
+ cursor: pointer;
6419
+ background-color: #000 \9;
6420
+ background-color: rgba(0, 0, 0, 0);
6421
+ border: 1px solid #ffffff;
6422
+ border-radius: 10px;
6423
+ }
6424
+
6425
+ .factory-bootstrap-329 .carousel-indicators .active {
6426
+ width: 12px;
6427
+ height: 12px;
6428
+ margin: 0;
6429
+ background-color: #ffffff;
6430
+ }
6431
+
6432
+ .factory-bootstrap-329 .carousel-caption {
6433
+ position: absolute;
6434
+ right: 15%;
6435
+ bottom: 20px;
6436
+ left: 15%;
6437
+ z-index: 10;
6438
+ padding-top: 20px;
6439
+ padding-bottom: 20px;
6440
+ color: #ffffff;
6441
+ text-align: center;
6442
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6443
+ }
6444
+
6445
+ .factory-bootstrap-329 .carousel-caption .btn {
6446
+ text-shadow: none;
6447
+ }
6448
+
6449
+ @media screen and (min-width: 768px) {
6450
+ .carousel-control .glyphicons-chevron-left,
6451
+ .carousel-control .glyphicons-chevron-right,
6452
+ .carousel-control .icon-prev,
6453
+ .carousel-control .icon-next {
6454
+ width: 30px;
6455
+ height: 30px;
6456
+ margin-top: -15px;
6457
+ margin-left: -15px;
6458
+ font-size: 30px;
6459
+ }
6460
+ .carousel-caption {
6461
+ right: 20%;
6462
+ left: 20%;
6463
+ padding-bottom: 30px;
6464
+ }
6465
+ .carousel-indicators {
6466
+ bottom: 20px;
6467
+ }
6468
+ }
6469
+
6470
+ .factory-bootstrap-329 .clearfix:before,
6471
+ .factory-bootstrap-329 .clearfix:after {
6472
+ display: table;
6473
+ content: " ";
6474
+ }
6475
+
6476
+ .factory-bootstrap-329 .clearfix:after {
6477
+ clear: both;
6478
+ }
6479
+
6480
+ .factory-bootstrap-329 .center-block {
6481
+ display: block;
6482
+ margin-right: auto;
6483
+ margin-left: auto;
6484
+ }
6485
+
6486
+ .factory-bootstrap-329 .pull-right {
6487
+ float: right !important;
6488
+ }
6489
+
6490
+ .factory-bootstrap-329 .pull-left {
6491
+ float: left !important;
6492
+ }
6493
+
6494
+ .factory-bootstrap-329 .hide {
6495
+ display: none !important;
6496
+ }
6497
+
6498
+ .factory-bootstrap-329 .show {
6499
+ display: block !important;
6500
+ }
6501
+
6502
+ .factory-bootstrap-329 .invisible {
6503
+ visibility: hidden;
6504
+ }
6505
+
6506
+ .factory-bootstrap-329 .text-hide {
6507
+ font: 0/0 a;
6508
+ color: transparent;
6509
+ text-shadow: none;
6510
+ background-color: transparent;
6511
+ border: 0;
6512
+ }
6513
+
6514
+ .factory-bootstrap-329 .hidden {
6515
+ display: none !important;
6516
+ visibility: hidden !important;
6517
+ }
6518
+
6519
+ .factory-bootstrap-329 .affix {
6520
+ position: fixed;
6521
+ }
6522
+
6523
+ @-ms-viewport {
6524
+ width: device-width;
6525
+ }
6526
+
6527
+ .factory-bootstrap-329 .visible-xs,
6528
+ .factory-bootstrap-329 tr.visible-xs,
6529
+ .factory-bootstrap-329 th.visible-xs,
6530
+ .factory-bootstrap-329 td.visible-xs {
6531
+ display: none !important;
6532
+ }
6533
+
6534
+ @media (max-width: 767px) {
6535
+ .visible-xs {
6536
+ display: block !important;
6537
+ }
6538
+ table.visible-xs {
6539
+ display: table;
6540
+ }
6541
+ tr.visible-xs {
6542
+ display: table-row !important;
6543
+ }
6544
+ th.visible-xs,
6545
+ td.visible-xs {
6546
+ display: table-cell !important;
6547
+ }
6548
+ }
6549
+
6550
+ @media (min-width: 768px) and (max-width: 991px) {
6551
+ .visible-xs.visible-sm {
6552
+ display: block !important;
6553
+ }
6554
+ table.visible-xs.visible-sm {
6555
+ display: table;
6556
+ }
6557
+ tr.visible-xs.visible-sm {
6558
+ display: table-row !important;
6559
+ }
6560
+ th.visible-xs.visible-sm,
6561
+ td.visible-xs.visible-sm {
6562
+ display: table-cell !important;
6563
+ }
6564
+ }
6565
+
6566
+ @media (min-width: 992px) and (max-width: 1199px) {
6567
+ .visible-xs.visible-md {
6568
+ display: block !important;
6569
+ }
6570
+ table.visible-xs.visible-md {
6571
+ display: table;
6572
+ }
6573
+ tr.visible-xs.visible-md {
6574
+ display: table-row !important;
6575
+ }
6576
+ th.visible-xs.visible-md,
6577
+ td.visible-xs.visible-md {
6578
+ display: table-cell !important;
6579
+ }
6580
+ }
6581
+
6582
+ @media (min-width: 1200px) {
6583
+ .visible-xs.visible-lg {
6584
+ display: block !important;
6585
+ }
6586
+ table.visible-xs.visible-lg {
6587
+ display: table;
6588
+ }
6589
+ tr.visible-xs.visible-lg {
6590
+ display: table-row !important;
6591
+ }
6592
+ th.visible-xs.visible-lg,
6593
+ td.visible-xs.visible-lg {
6594
+ display: table-cell !important;
6595
+ }
6596
+ }
6597
+
6598
+ .factory-bootstrap-329 .visible-sm,
6599
+ .factory-bootstrap-329 tr.visible-sm,
6600
+ .factory-bootstrap-329 th.visible-sm,
6601
+ .factory-bootstrap-329 td.visible-sm {
6602
+ display: none !important;
6603
+ }
6604
+
6605
+ @media (max-width: 767px) {
6606
+ .visible-sm.visible-xs {
6607
+ display: block !important;
6608
+ }
6609
+ table.visible-sm.visible-xs {
6610
+ display: table;
6611
+ }
6612
+ tr.visible-sm.visible-xs {
6613
+ display: table-row !important;
6614
+ }
6615
+ th.visible-sm.visible-xs,
6616
+ td.visible-sm.visible-xs {
6617
+ display: table-cell !important;
6618
+ }
6619
+ }
6620
+
6621
+ @media (min-width: 768px) and (max-width: 991px) {
6622
+ .visible-sm {
6623
+ display: block !important;
6624
+ }
6625
+ table.visible-sm {
6626
+ display: table;
6627
+ }
6628
+ tr.visible-sm {
6629
+ display: table-row !important;
6630
+ }
6631
+ th.visible-sm,
6632
+ td.visible-sm {
6633
+ display: table-cell !important;
6634
+ }
6635
+ }
6636
+
6637
+ @media (min-width: 992px) and (max-width: 1199px) {
6638
+ .visible-sm.visible-md {
6639
+ display: block !important;
6640
+ }
6641
+ table.visible-sm.visible-md {
6642
+ display: table;
6643
+ }
6644
+ tr.visible-sm.visible-md {
6645
+ display: table-row !important;
6646
+ }
6647
+ th.visible-sm.visible-md,
6648
+ td.visible-sm.visible-md {
6649
+ display: table-cell !important;
6650
+ }
6651
+ }
6652
+
6653
+ @media (min-width: 1200px) {
6654
+ .visible-sm.visible-lg {
6655
+ display: block !important;
6656
+ }
6657
+ table.visible-sm.visible-lg {
6658
+ display: table;
6659
+ }
6660
+ tr.visible-sm.visible-lg {
6661
+ display: table-row !important;
6662
+ }
6663
+ th.visible-sm.visible-lg,
6664
+ td.visible-sm.visible-lg {
6665
+ display: table-cell !important;
6666
+ }
6667
+ }
6668
+
6669
+ .factory-bootstrap-329 .visible-md,
6670
+ .factory-bootstrap-329 tr.visible-md,
6671
+ .factory-bootstrap-329 th.visible-md,
6672
+ .factory-bootstrap-329 td.visible-md {
6673
+ display: none !important;
6674
+ }
6675
+
6676
+ @media (max-width: 767px) {
6677
+ .visible-md.visible-xs {
6678
+ display: block !important;
6679
+ }
6680
+ table.visible-md.visible-xs {
6681
+ display: table;
6682
+ }
6683
+ tr.visible-md.visible-xs {
6684
+ display: table-row !important;
6685
+ }
6686
+ th.visible-md.visible-xs,
6687
+ td.visible-md.visible-xs {
6688
+ display: table-cell !important;
6689
+ }
6690
+ }
6691
+
6692
+ @media (min-width: 768px) and (max-width: 991px) {
6693
+ .visible-md.visible-sm {
6694
+ display: block !important;
6695
+ }
6696
+ table.visible-md.visible-sm {
6697
+ display: table;
6698
+ }
6699
+ tr.visible-md.visible-sm {
6700
+ display: table-row !important;
6701
+ }
6702
+ th.visible-md.visible-sm,
6703
+ td.visible-md.visible-sm {
6704
+ display: table-cell !important;
6705
+ }
6706
+ }
6707
+
6708
+ @media (min-width: 992px) and (max-width: 1199px) {
6709
+ .visible-md {
6710
+ display: block !important;
6711
+ }
6712
+ table.visible-md {
6713
+ display: table;
6714
+ }
6715
+ tr.visible-md {
6716
+ display: table-row !important;
6717
+ }
6718
+ th.visible-md,
6719
+ td.visible-md {
6720
+ display: table-cell !important;
6721
+ }
6722
+ }
6723
+
6724
+ @media (min-width: 1200px) {
6725
+ .visible-md.visible-lg {
6726
+ display: block !important;
6727
+ }
6728
+ table.visible-md.visible-lg {
6729
+ display: table;
6730
+ }
6731
+ tr.visible-md.visible-lg {
6732
+ display: table-row !important;
6733
+ }
6734
+ th.visible-md.visible-lg,
6735
+ td.visible-md.visible-lg {
6736
+ display: table-cell !important;
6737
+ }
6738
+ }
6739
+
6740
+ .factory-bootstrap-329 .visible-lg,
6741
+ .factory-bootstrap-329 tr.visible-lg,
6742
+ .factory-bootstrap-329 th.visible-lg,
6743
+ .factory-bootstrap-329 td.visible-lg {
6744
+ display: none !important;
6745
+ }
6746
+
6747
+ @media (max-width: 767px) {
6748
+ .visible-lg.visible-xs {
6749
+ display: block !important;
6750
+ }
6751
+ table.visible-lg.visible-xs {
6752
+ display: table;
6753
+ }
6754
+ tr.visible-lg.visible-xs {
6755
+ display: table-row !important;
6756
+ }
6757
+ th.visible-lg.visible-xs,
6758
+ td.visible-lg.visible-xs {
6759
+ display: table-cell !important;
6760
+ }
6761
+ }
6762
+
6763
+ @media (min-width: 768px) and (max-width: 991px) {
6764
+ .visible-lg.visible-sm {
6765
+ display: block !important;
6766
+ }
6767
+ table.visible-lg.visible-sm {
6768
+ display: table;
6769
+ }
6770
+ tr.visible-lg.visible-sm {
6771
+ display: table-row !important;
6772
+ }
6773
+ th.visible-lg.visible-sm,
6774
+ td.visible-lg.visible-sm {
6775
+ display: table-cell !important;
6776
+ }
6777
+ }
6778
+
6779
+ @media (min-width: 992px) and (max-width: 1199px) {
6780
+ .visible-lg.visible-md {
6781
+ display: block !important;
6782
+ }
6783
+ table.visible-lg.visible-md {
6784
+ display: table;
6785
+ }
6786
+ tr.visible-lg.visible-md {
6787
+ display: table-row !important;
6788
+ }
6789
+ th.visible-lg.visible-md,
6790
+ td.visible-lg.visible-md {
6791
+ display: table-cell !important;
6792
+ }
6793
+ }
6794
+
6795
+ @media (min-width: 1200px) {
6796
+ .visible-lg {
6797
+ display: block !important;
6798
+ }
6799
+ table.visible-lg {
6800
+ display: table;
6801
+ }
6802
+ tr.visible-lg {
6803
+ display: table-row !important;
6804
+ }
6805
+ th.visible-lg,
6806
+ td.visible-lg {
6807
+ display: table-cell !important;
6808
+ }
6809
+ }
6810
+
6811
+ .factory-bootstrap-329 .hidden-xs {
6812
+ display: block !important;
6813
+ }
6814
+
6815
+ .factory-bootstrap-329 table.hidden-xs {
6816
+ display: table;
6817
+ }
6818
+
6819
+ .factory-bootstrap-329 tr.hidden-xs {
6820
+ display: table-row !important;
6821
+ }
6822
+
6823
+ .factory-bootstrap-329 th.hidden-xs,
6824
+ .factory-bootstrap-329 td.hidden-xs {
6825
+ display: table-cell !important;
6826
+ }
6827
+
6828
+ @media (max-width: 767px) {
6829
+ .hidden-xs,
6830
+ tr.hidden-xs,
6831
+ th.hidden-xs,
6832
+ td.hidden-xs {
6833
+ display: none !important;
6834
+ }
6835
+ }
6836
+
6837
+ @media (min-width: 768px) and (max-width: 991px) {
6838
+ .hidden-xs.hidden-sm,
6839
+ tr.hidden-xs.hidden-sm,
6840
+ th.hidden-xs.hidden-sm,
6841
+ td.hidden-xs.hidden-sm {
6842
+ display: none !important;
6843
+ }
6844
+ }
6845
+
6846
+ @media (min-width: 992px) and (max-width: 1199px) {
6847
+ .hidden-xs.hidden-md,
6848
+ tr.hidden-xs.hidden-md,
6849
+ th.hidden-xs.hidden-md,
6850
+ td.hidden-xs.hidden-md {
6851
+ display: none !important;
6852
+ }
6853
+ }
6854
+
6855
+ @media (min-width: 1200px) {
6856
+ .hidden-xs.hidden-lg,
6857
+ tr.hidden-xs.hidden-lg,
6858
+ th.hidden-xs.hidden-lg,
6859
+ td.hidden-xs.hidden-lg {
6860
+ display: none !important;
6861
+ }
6862
+ }
6863
+
6864
+ .factory-bootstrap-329 .hidden-sm {
6865
+ display: block !important;
6866
+ }
6867
+
6868
+ .factory-bootstrap-329 table.hidden-sm {
6869
+ display: table;
6870
+ }
6871
+
6872
+ .factory-bootstrap-329 tr.hidden-sm {
6873
+ display: table-row !important;
6874
+ }
6875
+
6876
+ .factory-bootstrap-329 th.hidden-sm,
6877
+ .factory-bootstrap-329 td.hidden-sm {
6878
+ display: table-cell !important;
6879
+ }
6880
+
6881
+ @media (max-width: 767px) {
6882
+ .hidden-sm.hidden-xs,
6883
+ tr.hidden-sm.hidden-xs,
6884
+ th.hidden-sm.hidden-xs,
6885
+ td.hidden-sm.hidden-xs {
6886
+ display: none !important;
6887
+ }
6888
+ }
6889
+
6890
+ @media (min-width: 768px) and (max-width: 991px) {
6891
+ .hidden-sm,
6892
+ tr.hidden-sm,
6893
+ th.hidden-sm,
6894
+ td.hidden-sm {
6895
+ display: none !important;
6896
+ }
6897
+ }
6898
+
6899
+ @media (min-width: 992px) and (max-width: 1199px) {
6900
+ .hidden-sm.hidden-md,
6901
+ tr.hidden-sm.hidden-md,
6902
+ th.hidden-sm.hidden-md,
6903
+ td.hidden-sm.hidden-md {
6904
+ display: none !important;
6905
+ }
6906
+ }
6907
+
6908
+ @media (min-width: 1200px) {
6909
+ .hidden-sm.hidden-lg,
6910
+ tr.hidden-sm.hidden-lg,
6911
+ th.hidden-sm.hidden-lg,
6912
+ td.hidden-sm.hidden-lg {
6913
+ display: none !important;
6914
+ }
6915
+ }
6916
+
6917
+ .factory-bootstrap-329 .hidden-md {
6918
+ display: block !important;
6919
+ }
6920
+
6921
+ .factory-bootstrap-329 table.hidden-md {
6922
+ display: table;
6923
+ }
6924
+
6925
+ .factory-bootstrap-329 tr.hidden-md {
6926
+ display: table-row !important;
6927
+ }
6928
+
6929
+ .factory-bootstrap-329 th.hidden-md,
6930
+ .factory-bootstrap-329 td.hidden-md {
6931
+ display: table-cell !important;
6932
+ }
6933
+
6934
+ @media (max-width: 767px) {
6935
+ .hidden-md.hidden-xs,
6936
+ tr.hidden-md.hidden-xs,
6937
+ th.hidden-md.hidden-xs,
6938
+ td.hidden-md.hidden-xs {
6939
+ display: none !important;
6940
+ }
6941
+ }
6942
+
6943
+ @media (min-width: 768px) and (max-width: 991px) {
6944
+ .hidden-md.hidden-sm,
6945
+ tr.hidden-md.hidden-sm,
6946
+ th.hidden-md.hidden-sm,
6947
+ td.hidden-md.hidden-sm {
6948
+ display: none !important;
6949
+ }
6950
+ }
6951
+
6952
+ @media (min-width: 992px) and (max-width: 1199px) {
6953
+ .hidden-md,
6954
+ tr.hidden-md,
6955
+ th.hidden-md,
6956
+ td.hidden-md {
6957
+ display: none !important;
6958
+ }
6959
+ }
6960
+
6961
+ @media (min-width: 1200px) {
6962
+ .hidden-md.hidden-lg,
6963
+ tr.hidden-md.hidden-lg,
6964
+ th.hidden-md.hidden-lg,
6965
+ td.hidden-md.hidden-lg {
6966
+ display: none !important;
6967
+ }
6968
+ }
6969
+
6970
+ .factory-bootstrap-329 .hidden-lg {
6971
+ display: block !important;
6972
+ }
6973
+
6974
+ .factory-bootstrap-329 table.hidden-lg {
6975
+ display: table;
6976
+ }
6977
+
6978
+ .factory-bootstrap-329 tr.hidden-lg {
6979
+ display: table-row !important;
6980
+ }
6981
+
6982
+ .factory-bootstrap-329 th.hidden-lg,
6983
+ .factory-bootstrap-329 td.hidden-lg {
6984
+ display: table-cell !important;
6985
+ }
6986
+
6987
+ @media (max-width: 767px) {
6988
+ .factory-bootstrap-329 .hidden-lg.hidden-xs,
6989
+ .factory-bootstrap-329 tr.hidden-lg.hidden-xs,
6990
+ .factory-bootstrap-329 th.hidden-lg.hidden-xs,
6991
+ .factory-bootstrap-329 td.hidden-lg.hidden-xs {
6992
+ display: none !important;
6993
+ }
6994
+ }
6995
+
6996
+ @media (min-width: 768px) and (max-width: 991px) {
6997
+ .factory-bootstrap-329 .hidden-lg.hidden-sm,
6998
+ .factory-bootstrap-329 tr.hidden-lg.hidden-sm,
6999
+ .factory-bootstrap-329 th.hidden-lg.hidden-sm,
7000
+ .factory-bootstrap-329 td.hidden-lg.hidden-sm {
7001
+ display: none !important;
7002
+ }
7003
+ }
7004
+
7005
+ @media (min-width: 992px) and (max-width: 1199px) {
7006
+ .factory-bootstrap-329 .hidden-lg.hidden-md,
7007
+ .factory-bootstrap-329 tr.hidden-lg.hidden-md,
7008
+ .factory-bootstrap-329 th.hidden-lg.hidden-md,
7009
+ .factory-bootstrap-329 td.hidden-lg.hidden-md {
7010
+ display: none !important;
7011
+ }
7012
+ }
7013
+
7014
+ @media (min-width: 1200px) {
7015
+ .factory-bootstrap-329 .hidden-lg,
7016
+ .factory-bootstrap-329 tr.hidden-lg,
7017
+ .factory-bootstrap-329 th.hidden-lg,
7018
+ .factory-bootstrap-329 td.hidden-lg {
7019
+ display: none !important;
7020
+ }
7021
+ }
7022
+
7023
+ .factory-bootstrap-329 .visible-print,
7024
+ .factory-bootstrap-329 tr.visible-print,
7025
+ .factory-bootstrap-329 th.visible-print,
7026
+ .factory-bootstrap-329 td.visible-print {
7027
+ display: none !important;
7028
+ }
7029
+
7030
+ @media print {
7031
+ .factory-bootstrap-329 .visible-print {
7032
+ display: block !important;
7033
+ }
7034
+ .factory-bootstrap-329 table.visible-print {
7035
+ display: table;
7036
+ }
7037
+ .factory-bootstrap-329 tr.visible-print {
7038
+ display: table-row !important;
7039
+ }
7040
+ .factory-bootstrap-329 th.visible-print,
7041
+ .factory-bootstrap-329 td.visible-print {
7042
+ display: table-cell !important;
7043
+ }
7044
+ .factory-bootstrap-329 .hidden-print,
7045
+ .factory-bootstrap-329 tr.hidden-print,
7046
+ .factory-bootstrap-329 th.hidden-print,
7047
+ .factory-bootstrap-329 td.hidden-print {
7048
+ display: none !important;
7049
+ }
7050
+ }
7051
+
7052
+ /*!
7053
+ * Factory Default Bootstrap Theme
7054
+ *
7055
+ * The code is based on Bootstrap v2.1.1
7056
+ *
7057
+ * Bootstrap v3.0.3 (http://getbootstrap.com)
7058
+ * Copyright 2013 Twitter, Inc.
7059
+ * Licensed under http://www.apache.org/licenses/LICENSE-2.0
7060
+ *
7061
+ * @author Paul Kashtanoff <paul@byonepress.com>
7062
+ * @copyright (c) 2013, OnePress Ltd
7063
+ *
7064
+ * @package factory-bootstrap
7065
+ * @since 1.0.0
7066
+ */
7067
+
7068
+
7069
+ .factory-bootstrap-329 .btn-default,
7070
+ .factory-bootstrap-329 .btn-primary,
7071
+ .factory-bootstrap-329 .btn-success,
7072
+ .factory-bootstrap-329 .btn-info,
7073
+ .factory-bootstrap-329 .btn-warning,
7074
+ .factory-bootstrap-329 .btn-danger {
7075
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
7076
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
7077
+ }
7078
+
7079
+ .factory-bootstrap-329 .btn-default:active,
7080
+ .factory-bootstrap-329 .btn-primary:active,
7081
+ .factory-bootstrap-329 .btn-success:active,
7082
+ .factory-bootstrap-329 .btn-info:active,
7083
+ .factory-bootstrap-329 .btn-warning:active,
7084
+ .factory-bootstrap-329 .btn-danger:active,
7085
+ .factory-bootstrap-329 .btn-default.active,
7086
+ .factory-bootstrap-329 .btn-primary.active,
7087
+ .factory-bootstrap-329 .btn-success.active,
7088
+ .factory-bootstrap-329 .btn-info.active,
7089
+ .factory-bootstrap-329 .btn-warning.active,
7090
+ .factory-bootstrap-329 .btn-danger.active {
7091
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
7092
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
7093
+ }
7094
+
7095
+ .factory-bootstrap-329 .btn:active,
7096
+ .factory-bootstrap-329 .btn.active {
7097
+ background-image: none;
7098
+ }
7099
+
7100
+ .factory-bootstrap-329 .btn-default {
7101
+ background: #fafafa;
7102
+ color: #555;
7103
+ border-color: #ccc;
7104
+ background: #f7f7f7;
7105
+ -webkit-box-shadow: inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);
7106
+ box-shadow: inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);
7107
+ vertical-align: top;
7108
+ }
7109
+
7110
+ .factory-bootstrap-329 .btn-default:active,
7111
+ .factory-bootstrap-329 .btn-default.active {
7112
+ background-color: #fff;
7113
+ border-color: #dbdbdb;
7114
+ }
7115
+
7116
+ .factory-bootstrap-329 .btn-gold {
7117
+ font-weight:bold;
7118
+ padding: 7px 12px;
7119
+ cursor:pointer;
7120
+ line-height:16px;
7121
+ display:inline-block;
7122
+ border-radius: 2px;
7123
+ -moz-border-radius: 2px;/*gecko - mozilla*/
7124
+ -webkit-border-radius: 2px; /*new webkit - Chrome and Safari*/
7125
+ box-shadow: #e3e3e3 0 1px 1px;
7126
+ -moz-box-shadow: 0px 1px 1px rgba(000,000,000,0.1), inset 0px 1px 1px rgba(255,255,255,0.7);
7127
+ -webkit-box-shadow: 0px 1px 1px rgba(000,000,000,0.1), inset 0px 1px 1px rgba(255,255,255,0.7);
7128
+ text-shadow: 1px 1px 0px #ffe8b2;
7129
+ color: #7c5d1b;
7130
+ border: 1px solid #d6a437;
7131
+ background: #feeb80; /*fallback for non-CSS3 browsers*/
7132
+ }
7133
+
7134
+ .factory-bootstrap-329 .btn-gold:hover,
7135
+ .factory-bootstrap-329 .btn-gold:focus {
7136
+ background: #fef0a1;
7137
+ }
7138
+
7139
+ .factory-bootstrap-329 .btn-gold:active,
7140
+ .factory-bootstrap-329 .btn-gold.active {
7141
+ background: #fef0a1;
7142
+ -webkit-box-shadow: inset 0 3px 8px 0 #f8ba36;
7143
+ box-shadow: inset 0 3px 8px 0 #f8ba36;
7144
+ }
7145
+
7146
+ .factory-bootstrap-329 .btn-primary {
7147
+ background: #2ea2cc;
7148
+ border-color: #0074a2;
7149
+ -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);
7150
+ box-shadow: inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);
7151
+ color: #fff;
7152
+ text-decoration: none;
7153
+ }
7154
+
7155
+ .factory-bootstrap-329 .btn-primary:hover,
7156
+ .factory-bootstrap-329 .btn-primary:focus {
7157
+ background: #1e8cbe;
7158
+ border-color: #0074a2;
7159
+ -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,.6);
7160
+ box-shadow: inset 0 1px 0 rgba(120,200,230,.6);
7161
+ color: #fff;
7162
+ }
7163
+
7164
+ .factory-bootstrap-329 .btn-primary:active,
7165
+ .factory-bootstrap-329 .btn-primary.active {
7166
+ background-color: #2d6ca2;
7167
+ border-color: #2b669a;
7168
+ }
7169
+
7170
+ .factory-bootstrap-329 .btn-success {
7171
+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
7172
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
7173
+ background-repeat: repeat-x;
7174
+ border-color: #3e8f3e;
7175
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
7176
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
7177
+ }
7178
+
7179
+ .factory-bootstrap-329 .btn-success:hover,
7180
+ .factory-bootstrap-329 .btn-success:focus {
7181
+ background-color: #419641;
7182
+ background-position: 0 -15px;
7183
+ }
7184
+
7185
+ .factory-bootstrap-329 .btn-success:active,
7186
+ .factory-bootstrap-329 .btn-success.active {
7187
+ background-color: #419641;
7188
+ border-color: #3e8f3e;
7189
+ }
7190
+
7191
+ .factory-bootstrap-329 .btn-warning {
7192
+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
7193
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
7194
+ background-repeat: repeat-x;
7195
+ border-color: #e38d13;
7196
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
7197
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
7198
+ }
7199
+
7200
+ .factory-bootstrap-329 .btn-warning:hover,
7201
+ .factory-bootstrap-329 .btn-warning:focus {
7202
+ background-color: #eb9316;
7203
+ background-position: 0 -15px;
7204
+ }
7205
+
7206
+ .factory-bootstrap-329 .btn-warning:active,
7207
+ .factory-bootstrap-329 .btn-warning.active {
7208
+ background-color: #eb9316;
7209
+ border-color: #e38d13;
7210
+ }
7211
+
7212
+ .factory-bootstrap-329 .btn-danger {
7213
+ color: #ffffff;
7214
+ background: #d9534f;
7215
+ border-color: #d43f3a;
7216
+ }
7217
+
7218
+ .factory-bootstrap-329 .btn-danger:hover,
7219
+ .factory-bootstrap-329 .btn-danger:focus,
7220
+ .factory-bootstrap-329 .btn-danger:active,
7221
+ .factory-bootstrap-329 .btn-danger.active,
7222
+ .factory-bootstrap-329 .open .dropdown-toggle.btn-danger {
7223
+ color: #ffffff;
7224
+ background-color: #d2322d;
7225
+ border-color: #ac2925;
7226
+ }
7227
+
7228
+ .factory-bootstrap-329 .btn-info {
7229
+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
7230
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
7231
+ background-repeat: repeat-x;
7232
+ border-color: #28a4c9;
7233
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
7234
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
7235
+ }
7236
+
7237
+ .factory-bootstrap-329 .btn-info:hover,
7238
+ .factory-bootstrap-329 .btn-info:focus {
7239
+ background-color: #2aabd2;
7240
+ background-position: 0 -15px;
7241
+ }
7242
+
7243
+ .factory-bootstrap-329 .btn-info:active,
7244
+ .factory-bootstrap-329 .btn-info.active {
7245
+ background-color: #2aabd2;
7246
+ border-color: #28a4c9;
7247
+ }
7248
+
7249
+ .factory-bootstrap-329 .thumbnail,
7250
+ .factory-bootstrap-329 .img-thumbnail {
7251
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
7252
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
7253
+ }
7254
+
7255
+ .factory-bootstrap-329 .dropdown-menu > li > a:hover,
7256
+ .factory-bootstrap-329 .dropdown-menu > li > a:focus {
7257
+ background-color: #e8e8e8;
7258
+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
7259
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
7260
+ background-repeat: repeat-x;
7261
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
7262
+ }
7263
+
7264
+ .factory-bootstrap-329 .dropdown-menu > .active > a,
7265
+ .factory-bootstrap-329 .dropdown-menu > .active > a:hover,
7266
+ .factory-bootstrap-329 .dropdown-menu > .active > a:focus {
7267
+ background-color: #357ebd;
7268
+ background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
7269
+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
7270
+ background-repeat: repeat-x;
7271
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
7272
+ }
7273
+
7274
+ .factory-bootstrap-329 .navbar-default {
7275
+ background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
7276
+ background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
7277
+ background-repeat: repeat-x;
7278
+ border-radius: 4px;
7279
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
7280
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
7281
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
7282
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
7283
+ }
7284
+
7285
+ .factory-bootstrap-329 .navbar-default .navbar-nav > .active > a {
7286
+ background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
7287
+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
7288
+ background-repeat: repeat-x;
7289
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
7290
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
7291
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
7292
+ }
7293
+
7294
+ .factory-bootstrap-329 .navbar-brand,
7295
+ .factory-bootstrap-329 .navbar-nav > li > a {
7296
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
7297
+ }
7298
+
7299
+ .factory-bootstrap-329 .navbar-inverse {
7300
+ background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);
7301
+ background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);
7302
+ background-repeat: repeat-x;
7303
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
7304
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
7305
+ }
7306
+
7307
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > .active > a {
7308
+ background-image: -webkit-linear-gradient(top, #222222 0%, #282828 100%);
7309
+ background-image: linear-gradient(to bottom, #222222 0%, #282828 100%);
7310
+ background-repeat: repeat-x;
7311
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
7312
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
7313
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
7314
+ }
7315
+
7316
+ .factory-bootstrap-329 .navbar-inverse .navbar-brand,
7317
+ .factory-bootstrap-329 .navbar-inverse .navbar-nav > li > a {
7318
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
7319
+ }
7320
+
7321
+ .factory-bootstrap-329 .navbar-static-top,
7322
+ .factory-bootstrap-329 .navbar-fixed-top,
7323
+ .factory-bootstrap-329 .navbar-fixed-bottom {
7324
+ border-radius: 0;
7325
+ }
7326
+
7327
+ .factory-bootstrap-329 .alert {
7328
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
7329
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
7330
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
7331
+ }
7332
+ .factory-bootstrap-329 .alert .actions {
7333
+ padding-top: 10px;
7334
+ }
7335
+ .factory-bootstrap-329 .alert-success {
7336
+ color: #3c763d;
7337
+ background-color: #dff0d8;
7338
+ border-bottom: 2px solid #c8e5bc;
7339
+ }
7340
+
7341
+ .factory-bootstrap-329 .alert-info {
7342
+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
7343
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
7344
+ background-repeat: repeat-x;
7345
+ border-color: #9acfea;
7346
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
7347
+ }
7348
+
7349
+ .factory-bootstrap-329 .alert {
7350
+ text-shadow: none;
7351
+ box-shadow: none;
7352
+
7353
+ margin: 0px;
7354
+ margin-top: 10px;
7355
+ margin-bottom: 10px;
7356
+ padding: 10px;
7357
+ }
7358
+
7359
+ .factory-bootstrap-329 .alert-warning,
7360
+ .factory-bootstrap-329 .alert-normal {
7361
+ background: #fcf8e3;
7362
+ border: 0px;
7363
+ color: #8a6d3b;
7364
+ border: 1px solid #b8823b;
7365
+ }
7366
+
7367
+ .factory-bootstrap-329 .alert-danger {
7368
+ background: #cf4944;
7369
+ color: #fff;
7370
+ border-bottom: 2px solid #b23e3a;
7371
+ }
7372
+
7373
+ .factory-bootstrap-329 .alert-error a:not(.btn),
7374
+ .factory-bootstrap-329 .alert-danger a:not(.btn) {
7375
+ color: #fff;
7376
+ }
7377
+
7378
+ .factory-bootstrap-329 .progress {
7379
+ background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
7380
+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
7381
+ background-repeat: repeat-x;
7382
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
7383
+ }
7384
+
7385
+ .factory-bootstrap-329 .progress-bar {
7386
+ background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
7387
+ background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
7388
+ background-repeat: repeat-x;
7389
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
7390
+ }
7391
+
7392
+ .factory-bootstrap-329 .progress-bar-success {
7393
+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
7394
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
7395
+ background-repeat: repeat-x;
7396
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
7397
+ }
7398
+
7399
+ .factory-bootstrap-329 .progress-bar-info {
7400
+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
7401
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
7402
+ background-repeat: repeat-x;
7403
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
7404
+ }
7405
+
7406
+ .factory-bootstrap-329 .progress-bar-warning {
7407
+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
7408
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
7409
+ background-repeat: repeat-x;
7410
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
7411
+ }
7412
+
7413
+ .factory-bootstrap-329 .progress-bar-danger {
7414
+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
7415
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
7416
+ background-repeat: repeat-x;
7417
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
7418
+ }
7419
+
7420
+ .factory-bootstrap-329 .list-group {
7421
+ border-radius: 4px;
7422
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
7423
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
7424
+ }
7425
+
7426
+ .factory-bootstrap-329 .list-group-item.active,
7427
+ .factory-bootstrap-329 .list-group-item.active:hover,
7428
+ .factory-bootstrap-329 .list-group-item.active:focus {
7429
+ text-shadow: 0 -1px 0 #3071a9;
7430
+ background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
7431
+ background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
7432
+ background-repeat: repeat-x;
7433
+ border-color: #3278b3;
7434
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
7435
+ }
7436
+
7437
+ .factory-bootstrap-329 .panel {
7438
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
7439
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
7440
+ }
7441
+
7442
+ .factory-bootstrap-329 .panel-default > .panel-heading {
7443
+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
7444
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
7445
+ background-repeat: repeat-x;
7446
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
7447
+ }
7448
+
7449
+ .factory-bootstrap-329 .panel-primary > .panel-heading {
7450
+ background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
7451
+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
7452
+ background-repeat: repeat-x;
7453
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
7454
+ }
7455
+
7456
+ .factory-bootstrap-329 .panel-success > .panel-heading {
7457
+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
7458
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
7459
+ background-repeat: repeat-x;
7460
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
7461
+ }
7462
+
7463
+ .factory-bootstrap-329 .panel-info > .panel-heading {
7464
+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
7465
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
7466
+ background-repeat: repeat-x;
7467
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
7468
+ }
7469
+
7470
+ .factory-bootstrap-329 .panel-warning > .panel-heading {
7471
+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
7472
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
7473
+ background-repeat: repeat-x;
7474
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
7475
+ }
7476
+
7477
+ .factory-bootstrap-329 .panel-danger > .panel-heading {
7478
+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
7479
+ background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
7480
+ background-repeat: repeat-x;
7481
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
7482
+ }
7483
+
7484
+ .factory-bootstrap-329 .well {
7485
+ background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
7486
+ background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
7487
+ background-repeat: repeat-x;
7488
+ border-color: #dcdcdc;
7489
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
7490
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
7491
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
7492
+ }
7493
+
7494
+ /**
7495
+ * Extra
7496
+ */
7497
+
7498
+ .factory-bootstrap-329 .factory-after {
7499
+ margin-left: 7px;
7500
+ display: inline-block;
7501
+ }
7502
+
7503
+ .factory-bootstrap-329 .factory-hidden {
7504
+ display: none;
7505
+ }
7506
+
7507
+ .factory-bootstrap-329 .factory-ajax-loader {
7508
+ width: 25px;
7509
+ height: 25px;
7510
+ background: url("../assets/images/loader-sm-tr.gif")
7511
+ }
7512
+
7513
+ .factory-control-error {
7514
+
7515
+ background-color: rgba(0,0,0,0.8);
7516
+ white-space: normal;
7517
+ z-index: 10;
7518
+ font-weight: normal;
7519
+ line-height: 150%;
7520
+ border-radius: 4px;
7521
+ color: #fff;
7522
+ font-size: 13px;
7523
+ margin-top: 5px;
7524
+
7525
+ padding: 4px 10px 3px 10px;
7526
+ max-width: 500px;
7527
+ display: inline-block;
7528
+ }
7529
+
7530
+ .factory-control-error i {
7531
+ margin: 0 7px 0 1px;
7532
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.datepicker.css ADDED
@@ -0,0 +1,782 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Datepicker for Bootstrap v1.5.0-dev (https://github.com/eternicode/bootstrap-datepicker)
3
+ *
4
+ * Copyright 2012 Stefan Petre
5
+ * Improvements by Andrew Rowls
6
+ * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
7
+ */
8
+ .datepicker {
9
+ border-radius: 4px;
10
+ direction: ltr;
11
+ }
12
+ .datepicker-inline {
13
+ width: 220px;
14
+ }
15
+ .datepicker.datepicker-rtl {
16
+ direction: rtl;
17
+ }
18
+ .datepicker.datepicker-rtl table tr td span {
19
+ float: right;
20
+ }
21
+ .datepicker-dropdown {
22
+ top: 0;
23
+ left: 0;
24
+ }
25
+ .datepicker-dropdown:before {
26
+ content: '';
27
+ display: inline-block;
28
+ border-left: 7px solid transparent;
29
+ border-right: 7px solid transparent;
30
+ border-bottom: 7px solid #ccc;
31
+ border-top: 0;
32
+ border-bottom-color: rgba(0, 0, 0, 0.2);
33
+ position: absolute;
34
+ }
35
+ .datepicker-dropdown:after {
36
+ content: '';
37
+ display: inline-block;
38
+ border-left: 6px solid transparent;
39
+ border-right: 6px solid transparent;
40
+ border-bottom: 6px solid #fff;
41
+ border-top: 0;
42
+ position: absolute;
43
+ }
44
+ .datepicker-dropdown.datepicker-orient-left:before {
45
+ left: 6px;
46
+ }
47
+ .datepicker-dropdown.datepicker-orient-left:after {
48
+ left: 7px;
49
+ }
50
+ .datepicker-dropdown.datepicker-orient-right:before {
51
+ right: 6px;
52
+ }
53
+ .datepicker-dropdown.datepicker-orient-right:after {
54
+ right: 7px;
55
+ }
56
+ .datepicker-dropdown.datepicker-orient-top:before {
57
+ top: -7px;
58
+ }
59
+ .datepicker-dropdown.datepicker-orient-top:after {
60
+ top: -6px;
61
+ }
62
+ .datepicker-dropdown.datepicker-orient-bottom:before {
63
+ bottom: -7px;
64
+ border-bottom: 0;
65
+ border-top: 7px solid #999;
66
+ }
67
+ .datepicker-dropdown.datepicker-orient-bottom:after {
68
+ bottom: -6px;
69
+ border-bottom: 0;
70
+ border-top: 6px solid #fff;
71
+ }
72
+ .datepicker > div {
73
+ display: none;
74
+ }
75
+ .datepicker.days .datepicker-days,
76
+ .datepicker.months .datepicker-months,
77
+ .datepicker.years .datepicker-years {
78
+ display: block;
79
+ }
80
+ .datepicker table {
81
+ margin: 0;
82
+ -webkit-touch-callout: none;
83
+ -webkit-user-select: none;
84
+ -khtml-user-select: none;
85
+ -moz-user-select: none;
86
+ -ms-user-select: none;
87
+ user-select: none;
88
+ }
89
+ .datepicker table tr td,
90
+ .datepicker table tr th {
91
+ text-align: center;
92
+ width: 30px;
93
+ height: 30px;
94
+ border-radius: 4px;
95
+ border: none;
96
+ }
97
+ .table-striped .datepicker table tr td,
98
+ .table-striped .datepicker table tr th {
99
+ background-color: transparent;
100
+ }
101
+ .datepicker table tr td.day:hover,
102
+ .datepicker table tr td.day.focused {
103
+ background: #eeeeee;
104
+ cursor: pointer;
105
+ }
106
+ .datepicker table tr td.old,
107
+ .datepicker table tr td.new {
108
+ color: #999999;
109
+ }
110
+ .datepicker table tr td.disabled,
111
+ .datepicker table tr td.disabled:hover {
112
+ background: none;
113
+ color: #999999;
114
+ cursor: default;
115
+ }
116
+ .datepicker table tr td.today,
117
+ .datepicker table tr td.today:hover,
118
+ .datepicker table tr td.today.disabled,
119
+ .datepicker table tr td.today.disabled:hover {
120
+ color: #000000;
121
+ background-color: #ffdb99;
122
+ border-color: #ffb733;
123
+ }
124
+ .datepicker table tr td.today:hover,
125
+ .datepicker table tr td.today:hover:hover,
126
+ .datepicker table tr td.today.disabled:hover,
127
+ .datepicker table tr td.today.disabled:hover:hover,
128
+ .datepicker table tr td.today:focus,
129
+ .datepicker table tr td.today:hover:focus,
130
+ .datepicker table tr td.today.disabled:focus,
131
+ .datepicker table tr td.today.disabled:hover:focus,
132
+ .datepicker table tr td.today:active,
133
+ .datepicker table tr td.today:hover:active,
134
+ .datepicker table tr td.today.disabled:active,
135
+ .datepicker table tr td.today.disabled:hover:active,
136
+ .datepicker table tr td.today.active,
137
+ .datepicker table tr td.today:hover.active,
138
+ .datepicker table tr td.today.disabled.active,
139
+ .datepicker table tr td.today.disabled:hover.active,
140
+ .open .dropdown-toggle.datepicker table tr td.today,
141
+ .open .dropdown-toggle.datepicker table tr td.today:hover,
142
+ .open .dropdown-toggle.datepicker table tr td.today.disabled,
143
+ .open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
144
+ color: #000000;
145
+ background-color: #ffcd70;
146
+ border-color: #f59e00;
147
+ }
148
+ .datepicker table tr td.today:active,
149
+ .datepicker table tr td.today:hover:active,
150
+ .datepicker table tr td.today.disabled:active,
151
+ .datepicker table tr td.today.disabled:hover:active,
152
+ .datepicker table tr td.today.active,
153
+ .datepicker table tr td.today:hover.active,
154
+ .datepicker table tr td.today.disabled.active,
155
+ .datepicker table tr td.today.disabled:hover.active,
156
+ .open .dropdown-toggle.datepicker table tr td.today,
157
+ .open .dropdown-toggle.datepicker table tr td.today:hover,
158
+ .open .dropdown-toggle.datepicker table tr td.today.disabled,
159
+ .open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
160
+ background-image: none;
161
+ }
162
+ .datepicker table tr td.today.disabled,
163
+ .datepicker table tr td.today:hover.disabled,
164
+ .datepicker table tr td.today.disabled.disabled,
165
+ .datepicker table tr td.today.disabled:hover.disabled,
166
+ .datepicker table tr td.today[disabled],
167
+ .datepicker table tr td.today:hover[disabled],
168
+ .datepicker table tr td.today.disabled[disabled],
169
+ .datepicker table tr td.today.disabled:hover[disabled],
170
+ fieldset[disabled] .datepicker table tr td.today,
171
+ fieldset[disabled] .datepicker table tr td.today:hover,
172
+ fieldset[disabled] .datepicker table tr td.today.disabled,
173
+ fieldset[disabled] .datepicker table tr td.today.disabled:hover,
174
+ .datepicker table tr td.today.disabled:hover,
175
+ .datepicker table tr td.today:hover.disabled:hover,
176
+ .datepicker table tr td.today.disabled.disabled:hover,
177
+ .datepicker table tr td.today.disabled:hover.disabled:hover,
178
+ .datepicker table tr td.today[disabled]:hover,
179
+ .datepicker table tr td.today:hover[disabled]:hover,
180
+ .datepicker table tr td.today.disabled[disabled]:hover,
181
+ .datepicker table tr td.today.disabled:hover[disabled]:hover,
182
+ fieldset[disabled] .datepicker table tr td.today:hover,
183
+ fieldset[disabled] .datepicker table tr td.today:hover:hover,
184
+ fieldset[disabled] .datepicker table tr td.today.disabled:hover,
185
+ fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover,
186
+ .datepicker table tr td.today.disabled:focus,
187
+ .datepicker table tr td.today:hover.disabled:focus,
188
+ .datepicker table tr td.today.disabled.disabled:focus,
189
+ .datepicker table tr td.today.disabled:hover.disabled:focus,
190
+ .datepicker table tr td.today[disabled]:focus,
191
+ .datepicker table tr td.today:hover[disabled]:focus,
192
+ .datepicker table tr td.today.disabled[disabled]:focus,
193
+ .datepicker table tr td.today.disabled:hover[disabled]:focus,
194
+ fieldset[disabled] .datepicker table tr td.today:focus,
195
+ fieldset[disabled] .datepicker table tr td.today:hover:focus,
196
+ fieldset[disabled] .datepicker table tr td.today.disabled:focus,
197
+ fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus,
198
+ .datepicker table tr td.today.disabled:active,
199
+ .datepicker table tr td.today:hover.disabled:active,
200
+ .datepicker table tr td.today.disabled.disabled:active,
201
+ .datepicker table tr td.today.disabled:hover.disabled:active,
202
+ .datepicker table tr td.today[disabled]:active,
203
+ .datepicker table tr td.today:hover[disabled]:active,
204
+ .datepicker table tr td.today.disabled[disabled]:active,
205
+ .datepicker table tr td.today.disabled:hover[disabled]:active,
206
+ fieldset[disabled] .datepicker table tr td.today:active,
207
+ fieldset[disabled] .datepicker table tr td.today:hover:active,
208
+ fieldset[disabled] .datepicker table tr td.today.disabled:active,
209
+ fieldset[disabled] .datepicker table tr td.today.disabled:hover:active,
210
+ .datepicker table tr td.today.disabled.active,
211
+ .datepicker table tr td.today:hover.disabled.active,
212
+ .datepicker table tr td.today.disabled.disabled.active,
213
+ .datepicker table tr td.today.disabled:hover.disabled.active,
214
+ .datepicker table tr td.today[disabled].active,
215
+ .datepicker table tr td.today:hover[disabled].active,
216
+ .datepicker table tr td.today.disabled[disabled].active,
217
+ .datepicker table tr td.today.disabled:hover[disabled].active,
218
+ fieldset[disabled] .datepicker table tr td.today.active,
219
+ fieldset[disabled] .datepicker table tr td.today:hover.active,
220
+ fieldset[disabled] .datepicker table tr td.today.disabled.active,
221
+ fieldset[disabled] .datepicker table tr td.today.disabled:hover.active {
222
+ background-color: #ffdb99;
223
+ border-color: #ffb733;
224
+ }
225
+ .datepicker table tr td.today:hover:hover {
226
+ color: #000;
227
+ }
228
+ .datepicker table tr td.today.active:hover {
229
+ color: #fff;
230
+ }
231
+ .datepicker table tr td.range,
232
+ .datepicker table tr td.range:hover,
233
+ .datepicker table tr td.range.disabled,
234
+ .datepicker table tr td.range.disabled:hover {
235
+ background: #eeeeee;
236
+ border-radius: 0;
237
+ }
238
+ .datepicker table tr td.range.today,
239
+ .datepicker table tr td.range.today:hover,
240
+ .datepicker table tr td.range.today.disabled,
241
+ .datepicker table tr td.range.today.disabled:hover {
242
+ color: #000000;
243
+ background-color: #f7ca77;
244
+ border-color: #f1a417;
245
+ border-radius: 0;
246
+ }
247
+ .datepicker table tr td.range.today:hover,
248
+ .datepicker table tr td.range.today:hover:hover,
249
+ .datepicker table tr td.range.today.disabled:hover,
250
+ .datepicker table tr td.range.today.disabled:hover:hover,
251
+ .datepicker table tr td.range.today:focus,
252
+ .datepicker table tr td.range.today:hover:focus,
253
+ .datepicker table tr td.range.today.disabled:focus,
254
+ .datepicker table tr td.range.today.disabled:hover:focus,
255
+ .datepicker table tr td.range.today:active,
256
+ .datepicker table tr td.range.today:hover:active,
257
+ .datepicker table tr td.range.today.disabled:active,
258
+ .datepicker table tr td.range.today.disabled:hover:active,
259
+ .datepicker table tr td.range.today.active,
260
+ .datepicker table tr td.range.today:hover.active,
261
+ .datepicker table tr td.range.today.disabled.active,
262
+ .datepicker table tr td.range.today.disabled:hover.active,
263
+ .open .dropdown-toggle.datepicker table tr td.range.today,
264
+ .open .dropdown-toggle.datepicker table tr td.range.today:hover,
265
+ .open .dropdown-toggle.datepicker table tr td.range.today.disabled,
266
+ .open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
267
+ color: #000000;
268
+ background-color: #f4bb51;
269
+ border-color: #bf800c;
270
+ }
271
+ .datepicker table tr td.range.today:active,
272
+ .datepicker table tr td.range.today:hover:active,
273
+ .datepicker table tr td.range.today.disabled:active,
274
+ .datepicker table tr td.range.today.disabled:hover:active,
275
+ .datepicker table tr td.range.today.active,
276
+ .datepicker table tr td.range.today:hover.active,
277
+ .datepicker table tr td.range.today.disabled.active,
278
+ .datepicker table tr td.range.today.disabled:hover.active,
279
+ .open .dropdown-toggle.datepicker table tr td.range.today,
280
+ .open .dropdown-toggle.datepicker table tr td.range.today:hover,
281
+ .open .dropdown-toggle.datepicker table tr td.range.today.disabled,
282
+ .open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
283
+ background-image: none;
284
+ }
285
+ .datepicker table tr td.range.today.disabled,
286
+ .datepicker table tr td.range.today:hover.disabled,
287
+ .datepicker table tr td.range.today.disabled.disabled,
288
+ .datepicker table tr td.range.today.disabled:hover.disabled,
289
+ .datepicker table tr td.range.today[disabled],
290
+ .datepicker table tr td.range.today:hover[disabled],
291
+ .datepicker table tr td.range.today.disabled[disabled],
292
+ .datepicker table tr td.range.today.disabled:hover[disabled],
293
+ fieldset[disabled] .datepicker table tr td.range.today,
294
+ fieldset[disabled] .datepicker table tr td.range.today:hover,
295
+ fieldset[disabled] .datepicker table tr td.range.today.disabled,
296
+ fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
297
+ .datepicker table tr td.range.today.disabled:hover,
298
+ .datepicker table tr td.range.today:hover.disabled:hover,
299
+ .datepicker table tr td.range.today.disabled.disabled:hover,
300
+ .datepicker table tr td.range.today.disabled:hover.disabled:hover,
301
+ .datepicker table tr td.range.today[disabled]:hover,
302
+ .datepicker table tr td.range.today:hover[disabled]:hover,
303
+ .datepicker table tr td.range.today.disabled[disabled]:hover,
304
+ .datepicker table tr td.range.today.disabled:hover[disabled]:hover,
305
+ fieldset[disabled] .datepicker table tr td.range.today:hover,
306
+ fieldset[disabled] .datepicker table tr td.range.today:hover:hover,
307
+ fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
308
+ fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover,
309
+ .datepicker table tr td.range.today.disabled:focus,
310
+ .datepicker table tr td.range.today:hover.disabled:focus,
311
+ .datepicker table tr td.range.today.disabled.disabled:focus,
312
+ .datepicker table tr td.range.today.disabled:hover.disabled:focus,
313
+ .datepicker table tr td.range.today[disabled]:focus,
314
+ .datepicker table tr td.range.today:hover[disabled]:focus,
315
+ .datepicker table tr td.range.today.disabled[disabled]:focus,
316
+ .datepicker table tr td.range.today.disabled:hover[disabled]:focus,
317
+ fieldset[disabled] .datepicker table tr td.range.today:focus,
318
+ fieldset[disabled] .datepicker table tr td.range.today:hover:focus,
319
+ fieldset[disabled] .datepicker table tr td.range.today.disabled:focus,
320
+ fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus,
321
+ .datepicker table tr td.range.today.disabled:active,
322
+ .datepicker table tr td.range.today:hover.disabled:active,
323
+ .datepicker table tr td.range.today.disabled.disabled:active,
324
+ .datepicker table tr td.range.today.disabled:hover.disabled:active,
325
+ .datepicker table tr td.range.today[disabled]:active,
326
+ .datepicker table tr td.range.today:hover[disabled]:active,
327
+ .datepicker table tr td.range.today.disabled[disabled]:active,
328
+ .datepicker table tr td.range.today.disabled:hover[disabled]:active,
329
+ fieldset[disabled] .datepicker table tr td.range.today:active,
330
+ fieldset[disabled] .datepicker table tr td.range.today:hover:active,
331
+ fieldset[disabled] .datepicker table tr td.range.today.disabled:active,
332
+ fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active,
333
+ .datepicker table tr td.range.today.disabled.active,
334
+ .datepicker table tr td.range.today:hover.disabled.active,
335
+ .datepicker table tr td.range.today.disabled.disabled.active,
336
+ .datepicker table tr td.range.today.disabled:hover.disabled.active,
337
+ .datepicker table tr td.range.today[disabled].active,
338
+ .datepicker table tr td.range.today:hover[disabled].active,
339
+ .datepicker table tr td.range.today.disabled[disabled].active,
340
+ .datepicker table tr td.range.today.disabled:hover[disabled].active,
341
+ fieldset[disabled] .datepicker table tr td.range.today.active,
342
+ fieldset[disabled] .datepicker table tr td.range.today:hover.active,
343
+ fieldset[disabled] .datepicker table tr td.range.today.disabled.active,
344
+ fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active {
345
+ background-color: #f7ca77;
346
+ border-color: #f1a417;
347
+ }
348
+ .datepicker table tr td.selected,
349
+ .datepicker table tr td.selected:hover,
350
+ .datepicker table tr td.selected.disabled,
351
+ .datepicker table tr td.selected.disabled:hover {
352
+ color: #ffffff;
353
+ background-color: #999999;
354
+ border-color: #555555;
355
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
356
+ }
357
+ .datepicker table tr td.selected:hover,
358
+ .datepicker table tr td.selected:hover:hover,
359
+ .datepicker table tr td.selected.disabled:hover,
360
+ .datepicker table tr td.selected.disabled:hover:hover,
361
+ .datepicker table tr td.selected:focus,
362
+ .datepicker table tr td.selected:hover:focus,
363
+ .datepicker table tr td.selected.disabled:focus,
364
+ .datepicker table tr td.selected.disabled:hover:focus,
365
+ .datepicker table tr td.selected:active,
366
+ .datepicker table tr td.selected:hover:active,
367
+ .datepicker table tr td.selected.disabled:active,
368
+ .datepicker table tr td.selected.disabled:hover:active,
369
+ .datepicker table tr td.selected.active,
370
+ .datepicker table tr td.selected:hover.active,
371
+ .datepicker table tr td.selected.disabled.active,
372
+ .datepicker table tr td.selected.disabled:hover.active,
373
+ .open .dropdown-toggle.datepicker table tr td.selected,
374
+ .open .dropdown-toggle.datepicker table tr td.selected:hover,
375
+ .open .dropdown-toggle.datepicker table tr td.selected.disabled,
376
+ .open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
377
+ color: #ffffff;
378
+ background-color: #858585;
379
+ border-color: #373737;
380
+ }
381
+ .datepicker table tr td.selected:active,
382
+ .datepicker table tr td.selected:hover:active,
383
+ .datepicker table tr td.selected.disabled:active,
384
+ .datepicker table tr td.selected.disabled:hover:active,
385
+ .datepicker table tr td.selected.active,
386
+ .datepicker table tr td.selected:hover.active,
387
+ .datepicker table tr td.selected.disabled.active,
388
+ .datepicker table tr td.selected.disabled:hover.active,
389
+ .open .dropdown-toggle.datepicker table tr td.selected,
390
+ .open .dropdown-toggle.datepicker table tr td.selected:hover,
391
+ .open .dropdown-toggle.datepicker table tr td.selected.disabled,
392
+ .open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
393
+ background-image: none;
394
+ }
395
+ .datepicker table tr td.selected.disabled,
396
+ .datepicker table tr td.selected:hover.disabled,
397
+ .datepicker table tr td.selected.disabled.disabled,
398
+ .datepicker table tr td.selected.disabled:hover.disabled,
399
+ .datepicker table tr td.selected[disabled],
400
+ .datepicker table tr td.selected:hover[disabled],
401
+ .datepicker table tr td.selected.disabled[disabled],
402
+ .datepicker table tr td.selected.disabled:hover[disabled],
403
+ fieldset[disabled] .datepicker table tr td.selected,
404
+ fieldset[disabled] .datepicker table tr td.selected:hover,
405
+ fieldset[disabled] .datepicker table tr td.selected.disabled,
406
+ fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
407
+ .datepicker table tr td.selected.disabled:hover,
408
+ .datepicker table tr td.selected:hover.disabled:hover,
409
+ .datepicker table tr td.selected.disabled.disabled:hover,
410
+ .datepicker table tr td.selected.disabled:hover.disabled:hover,
411
+ .datepicker table tr td.selected[disabled]:hover,
412
+ .datepicker table tr td.selected:hover[disabled]:hover,
413
+ .datepicker table tr td.selected.disabled[disabled]:hover,
414
+ .datepicker table tr td.selected.disabled:hover[disabled]:hover,
415
+ fieldset[disabled] .datepicker table tr td.selected:hover,
416
+ fieldset[disabled] .datepicker table tr td.selected:hover:hover,
417
+ fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
418
+ fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover,
419
+ .datepicker table tr td.selected.disabled:focus,
420
+ .datepicker table tr td.selected:hover.disabled:focus,
421
+ .datepicker table tr td.selected.disabled.disabled:focus,
422
+ .datepicker table tr td.selected.disabled:hover.disabled:focus,
423
+ .datepicker table tr td.selected[disabled]:focus,
424
+ .datepicker table tr td.selected:hover[disabled]:focus,
425
+ .datepicker table tr td.selected.disabled[disabled]:focus,
426
+ .datepicker table tr td.selected.disabled:hover[disabled]:focus,
427
+ fieldset[disabled] .datepicker table tr td.selected:focus,
428
+ fieldset[disabled] .datepicker table tr td.selected:hover:focus,
429
+ fieldset[disabled] .datepicker table tr td.selected.disabled:focus,
430
+ fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus,
431
+ .datepicker table tr td.selected.disabled:active,
432
+ .datepicker table tr td.selected:hover.disabled:active,
433
+ .datepicker table tr td.selected.disabled.disabled:active,
434
+ .datepicker table tr td.selected.disabled:hover.disabled:active,
435
+ .datepicker table tr td.selected[disabled]:active,
436
+ .datepicker table tr td.selected:hover[disabled]:active,
437
+ .datepicker table tr td.selected.disabled[disabled]:active,
438
+ .datepicker table tr td.selected.disabled:hover[disabled]:active,
439
+ fieldset[disabled] .datepicker table tr td.selected:active,
440
+ fieldset[disabled] .datepicker table tr td.selected:hover:active,
441
+ fieldset[disabled] .datepicker table tr td.selected.disabled:active,
442
+ fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active,
443
+ .datepicker table tr td.selected.disabled.active,
444
+ .datepicker table tr td.selected:hover.disabled.active,
445
+ .datepicker table tr td.selected.disabled.disabled.active,
446
+ .datepicker table tr td.selected.disabled:hover.disabled.active,
447
+ .datepicker table tr td.selected[disabled].active,
448
+ .datepicker table tr td.selected:hover[disabled].active,
449
+ .datepicker table tr td.selected.disabled[disabled].active,
450
+ .datepicker table tr td.selected.disabled:hover[disabled].active,
451
+ fieldset[disabled] .datepicker table tr td.selected.active,
452
+ fieldset[disabled] .datepicker table tr td.selected:hover.active,
453
+ fieldset[disabled] .datepicker table tr td.selected.disabled.active,
454
+ fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active {
455
+ background-color: #999999;
456
+ border-color: #555555;
457
+ }
458
+ .datepicker table tr td.active,
459
+ .datepicker table tr td.active:hover,
460
+ .datepicker table tr td.active.disabled,
461
+ .datepicker table tr td.active.disabled:hover {
462
+ color: #ffffff;
463
+ background-color: #428bca;
464
+ border-color: #357ebd;
465
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
466
+ }
467
+ .datepicker table tr td.active:hover,
468
+ .datepicker table tr td.active:hover:hover,
469
+ .datepicker table tr td.active.disabled:hover,
470
+ .datepicker table tr td.active.disabled:hover:hover,
471
+ .datepicker table tr td.active:focus,
472
+ .datepicker table tr td.active:hover:focus,
473
+ .datepicker table tr td.active.disabled:focus,
474
+ .datepicker table tr td.active.disabled:hover:focus,
475
+ .datepicker table tr td.active:active,
476
+ .datepicker table tr td.active:hover:active,
477
+ .datepicker table tr td.active.disabled:active,
478
+ .datepicker table tr td.active.disabled:hover:active,
479
+ .datepicker table tr td.active.active,
480
+ .datepicker table tr td.active:hover.active,
481
+ .datepicker table tr td.active.disabled.active,
482
+ .datepicker table tr td.active.disabled:hover.active,
483
+ .open .dropdown-toggle.datepicker table tr td.active,
484
+ .open .dropdown-toggle.datepicker table tr td.active:hover,
485
+ .open .dropdown-toggle.datepicker table tr td.active.disabled,
486
+ .open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
487
+ color: #ffffff;
488
+ background-color: #3276b1;
489
+ border-color: #285e8e;
490
+ }
491
+ .datepicker table tr td.active:active,
492
+ .datepicker table tr td.active:hover:active,
493
+ .datepicker table tr td.active.disabled:active,
494
+ .datepicker table tr td.active.disabled:hover:active,
495
+ .datepicker table tr td.active.active,
496
+ .datepicker table tr td.active:hover.active,
497
+ .datepicker table tr td.active.disabled.active,
498
+ .datepicker table tr td.active.disabled:hover.active,
499
+ .open .dropdown-toggle.datepicker table tr td.active,
500
+ .open .dropdown-toggle.datepicker table tr td.active:hover,
501
+ .open .dropdown-toggle.datepicker table tr td.active.disabled,
502
+ .open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
503
+ background-image: none;
504
+ }
505
+ .datepicker table tr td.active.disabled,
506
+ .datepicker table tr td.active:hover.disabled,
507
+ .datepicker table tr td.active.disabled.disabled,
508
+ .datepicker table tr td.active.disabled:hover.disabled,
509
+ .datepicker table tr td.active[disabled],
510
+ .datepicker table tr td.active:hover[disabled],
511
+ .datepicker table tr td.active.disabled[disabled],
512
+ .datepicker table tr td.active.disabled:hover[disabled],
513
+ fieldset[disabled] .datepicker table tr td.active,
514
+ fieldset[disabled] .datepicker table tr td.active:hover,
515
+ fieldset[disabled] .datepicker table tr td.active.disabled,
516
+ fieldset[disabled] .datepicker table tr td.active.disabled:hover,
517
+ .datepicker table tr td.active.disabled:hover,
518
+ .datepicker table tr td.active:hover.disabled:hover,
519
+ .datepicker table tr td.active.disabled.disabled:hover,
520
+ .datepicker table tr td.active.disabled:hover.disabled:hover,
521
+ .datepicker table tr td.active[disabled]:hover,
522
+ .datepicker table tr td.active:hover[disabled]:hover,
523
+ .datepicker table tr td.active.disabled[disabled]:hover,
524
+ .datepicker table tr td.active.disabled:hover[disabled]:hover,
525
+ fieldset[disabled] .datepicker table tr td.active:hover,
526
+ fieldset[disabled] .datepicker table tr td.active:hover:hover,
527
+ fieldset[disabled] .datepicker table tr td.active.disabled:hover,
528
+ fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover,
529
+ .datepicker table tr td.active.disabled:focus,
530
+ .datepicker table tr td.active:hover.disabled:focus,
531
+ .datepicker table tr td.active.disabled.disabled:focus,
532
+ .datepicker table tr td.active.disabled:hover.disabled:focus,
533
+ .datepicker table tr td.active[disabled]:focus,
534
+ .datepicker table tr td.active:hover[disabled]:focus,
535
+ .datepicker table tr td.active.disabled[disabled]:focus,
536
+ .datepicker table tr td.active.disabled:hover[disabled]:focus,
537
+ fieldset[disabled] .datepicker table tr td.active:focus,
538
+ fieldset[disabled] .datepicker table tr td.active:hover:focus,
539
+ fieldset[disabled] .datepicker table tr td.active.disabled:focus,
540
+ fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus,
541
+ .datepicker table tr td.active.disabled:active,
542
+ .datepicker table tr td.active:hover.disabled:active,
543
+ .datepicker table tr td.active.disabled.disabled:active,
544
+ .datepicker table tr td.active.disabled:hover.disabled:active,
545
+ .datepicker table tr td.active[disabled]:active,
546
+ .datepicker table tr td.active:hover[disabled]:active,
547
+ .datepicker table tr td.active.disabled[disabled]:active,
548
+ .datepicker table tr td.active.disabled:hover[disabled]:active,
549
+ fieldset[disabled] .datepicker table tr td.active:active,
550
+ fieldset[disabled] .datepicker table tr td.active:hover:active,
551
+ fieldset[disabled] .datepicker table tr td.active.disabled:active,
552
+ fieldset[disabled] .datepicker table tr td.active.disabled:hover:active,
553
+ .datepicker table tr td.active.disabled.active,
554
+ .datepicker table tr td.active:hover.disabled.active,
555
+ .datepicker table tr td.active.disabled.disabled.active,
556
+ .datepicker table tr td.active.disabled:hover.disabled.active,
557
+ .datepicker table tr td.active[disabled].active,
558
+ .datepicker table tr td.active:hover[disabled].active,
559
+ .datepicker table tr td.active.disabled[disabled].active,
560
+ .datepicker table tr td.active.disabled:hover[disabled].active,
561
+ fieldset[disabled] .datepicker table tr td.active.active,
562
+ fieldset[disabled] .datepicker table tr td.active:hover.active,
563
+ fieldset[disabled] .datepicker table tr td.active.disabled.active,
564
+ fieldset[disabled] .datepicker table tr td.active.disabled:hover.active {
565
+ background-color: #428bca;
566
+ border-color: #357ebd;
567
+ }
568
+ .datepicker table tr td span {
569
+ display: block;
570
+ width: 23%;
571
+ height: 54px;
572
+ line-height: 54px;
573
+ float: left;
574
+ margin: 1%;
575
+ cursor: pointer;
576
+ border-radius: 4px;
577
+ }
578
+ .datepicker table tr td span:hover {
579
+ background: #eeeeee;
580
+ }
581
+ .datepicker table tr td span.disabled,
582
+ .datepicker table tr td span.disabled:hover {
583
+ background: none;
584
+ color: #999999;
585
+ cursor: default;
586
+ }
587
+ .datepicker table tr td span.active,
588
+ .datepicker table tr td span.active:hover,
589
+ .datepicker table tr td span.active.disabled,
590
+ .datepicker table tr td span.active.disabled:hover {
591
+ color: #ffffff;
592
+ background-color: #428bca;
593
+ border-color: #357ebd;
594
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
595
+ }
596
+ .datepicker table tr td span.active:hover,
597
+ .datepicker table tr td span.active:hover:hover,
598
+ .datepicker table tr td span.active.disabled:hover,
599
+ .datepicker table tr td span.active.disabled:hover:hover,
600
+ .datepicker table tr td span.active:focus,
601
+ .datepicker table tr td span.active:hover:focus,
602
+ .datepicker table tr td span.active.disabled:focus,
603
+ .datepicker table tr td span.active.disabled:hover:focus,
604
+ .datepicker table tr td span.active:active,
605
+ .datepicker table tr td span.active:hover:active,
606
+ .datepicker table tr td span.active.disabled:active,
607
+ .datepicker table tr td span.active.disabled:hover:active,
608
+ .datepicker table tr td span.active.active,
609
+ .datepicker table tr td span.active:hover.active,
610
+ .datepicker table tr td span.active.disabled.active,
611
+ .datepicker table tr td span.active.disabled:hover.active,
612
+ .open .dropdown-toggle.datepicker table tr td span.active,
613
+ .open .dropdown-toggle.datepicker table tr td span.active:hover,
614
+ .open .dropdown-toggle.datepicker table tr td span.active.disabled,
615
+ .open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
616
+ color: #ffffff;
617
+ background-color: #3276b1;
618
+ border-color: #285e8e;
619
+ }
620
+ .datepicker table tr td span.active:active,
621
+ .datepicker table tr td span.active:hover:active,
622
+ .datepicker table tr td span.active.disabled:active,
623
+ .datepicker table tr td span.active.disabled:hover:active,
624
+ .datepicker table tr td span.active.active,
625
+ .datepicker table tr td span.active:hover.active,
626
+ .datepicker table tr td span.active.disabled.active,
627
+ .datepicker table tr td span.active.disabled:hover.active,
628
+ .open .dropdown-toggle.datepicker table tr td span.active,
629
+ .open .dropdown-toggle.datepicker table tr td span.active:hover,
630
+ .open .dropdown-toggle.datepicker table tr td span.active.disabled,
631
+ .open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
632
+ background-image: none;
633
+ }
634
+ .datepicker table tr td span.active.disabled,
635
+ .datepicker table tr td span.active:hover.disabled,
636
+ .datepicker table tr td span.active.disabled.disabled,
637
+ .datepicker table tr td span.active.disabled:hover.disabled,
638
+ .datepicker table tr td span.active[disabled],
639
+ .datepicker table tr td span.active:hover[disabled],
640
+ .datepicker table tr td span.active.disabled[disabled],
641
+ .datepicker table tr td span.active.disabled:hover[disabled],
642
+ fieldset[disabled] .datepicker table tr td span.active,
643
+ fieldset[disabled] .datepicker table tr td span.active:hover,
644
+ fieldset[disabled] .datepicker table tr td span.active.disabled,
645
+ fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
646
+ .datepicker table tr td span.active.disabled:hover,
647
+ .datepicker table tr td span.active:hover.disabled:hover,
648
+ .datepicker table tr td span.active.disabled.disabled:hover,
649
+ .datepicker table tr td span.active.disabled:hover.disabled:hover,
650
+ .datepicker table tr td span.active[disabled]:hover,
651
+ .datepicker table tr td span.active:hover[disabled]:hover,
652
+ .datepicker table tr td span.active.disabled[disabled]:hover,
653
+ .datepicker table tr td span.active.disabled:hover[disabled]:hover,
654
+ fieldset[disabled] .datepicker table tr td span.active:hover,
655
+ fieldset[disabled] .datepicker table tr td span.active:hover:hover,
656
+ fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
657
+ fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,
658
+ .datepicker table tr td span.active.disabled:focus,
659
+ .datepicker table tr td span.active:hover.disabled:focus,
660
+ .datepicker table tr td span.active.disabled.disabled:focus,
661
+ .datepicker table tr td span.active.disabled:hover.disabled:focus,
662
+ .datepicker table tr td span.active[disabled]:focus,
663
+ .datepicker table tr td span.active:hover[disabled]:focus,
664
+ .datepicker table tr td span.active.disabled[disabled]:focus,
665
+ .datepicker table tr td span.active.disabled:hover[disabled]:focus,
666
+ fieldset[disabled] .datepicker table tr td span.active:focus,
667
+ fieldset[disabled] .datepicker table tr td span.active:hover:focus,
668
+ fieldset[disabled] .datepicker table tr td span.active.disabled:focus,
669
+ fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,
670
+ .datepicker table tr td span.active.disabled:active,
671
+ .datepicker table tr td span.active:hover.disabled:active,
672
+ .datepicker table tr td span.active.disabled.disabled:active,
673
+ .datepicker table tr td span.active.disabled:hover.disabled:active,
674
+ .datepicker table tr td span.active[disabled]:active,
675
+ .datepicker table tr td span.active:hover[disabled]:active,
676
+ .datepicker table tr td span.active.disabled[disabled]:active,
677
+ .datepicker table tr td span.active.disabled:hover[disabled]:active,
678
+ fieldset[disabled] .datepicker table tr td span.active:active,
679
+ fieldset[disabled] .datepicker table tr td span.active:hover:active,
680
+ fieldset[disabled] .datepicker table tr td span.active.disabled:active,
681
+ fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active,
682
+ .datepicker table tr td span.active.disabled.active,
683
+ .datepicker table tr td span.active:hover.disabled.active,
684
+ .datepicker table tr td span.active.disabled.disabled.active,
685
+ .datepicker table tr td span.active.disabled:hover.disabled.active,
686
+ .datepicker table tr td span.active[disabled].active,
687
+ .datepicker table tr td span.active:hover[disabled].active,
688
+ .datepicker table tr td span.active.disabled[disabled].active,
689
+ .datepicker table tr td span.active.disabled:hover[disabled].active,
690
+ fieldset[disabled] .datepicker table tr td span.active.active,
691
+ fieldset[disabled] .datepicker table tr td span.active:hover.active,
692
+ fieldset[disabled] .datepicker table tr td span.active.disabled.active,
693
+ fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active {
694
+ background-color: #428bca;
695
+ border-color: #357ebd;
696
+ }
697
+ .datepicker table tr td span.old,
698
+ .datepicker table tr td span.new {
699
+ color: #999999;
700
+ }
701
+ .datepicker .datepicker-switch {
702
+ width: 145px;
703
+ }
704
+ .datepicker thead tr:first-child th,
705
+ .datepicker tfoot tr th {
706
+ cursor: pointer;
707
+ }
708
+ .datepicker thead tr:first-child th:hover,
709
+ .datepicker tfoot tr th:hover {
710
+ background: #eeeeee;
711
+ }
712
+ .datepicker .cw {
713
+ font-size: 10px;
714
+ width: 12px;
715
+ padding: 0 2px 0 5px;
716
+ vertical-align: middle;
717
+ }
718
+ .datepicker thead tr:first-child .cw {
719
+ cursor: default;
720
+ background-color: transparent;
721
+ }
722
+ .input-group.date .input-group-addon {
723
+ cursor: pointer;
724
+ }
725
+ .input-daterange {
726
+ width: 100%;
727
+ }
728
+ .input-daterange input {
729
+ text-align: center;
730
+ }
731
+ .input-daterange input:first-child {
732
+ border-radius: 3px 0 0 3px;
733
+ }
734
+ .input-daterange input:last-child {
735
+ border-radius: 0 3px 3px 0;
736
+ }
737
+ .input-daterange .input-group-addon {
738
+ width: auto;
739
+ min-width: 16px;
740
+ padding: 4px 5px;
741
+ font-weight: normal;
742
+ line-height: 1.42857143;
743
+ text-align: center;
744
+ text-shadow: 0 1px 0 #fff;
745
+ vertical-align: middle;
746
+ background-color: #eeeeee;
747
+ border: solid #cccccc;
748
+ border-width: 1px 0;
749
+ margin-left: -5px;
750
+ margin-right: -5px;
751
+ }
752
+ .datepicker.dropdown-menu {
753
+ position: absolute;
754
+ top: 100%;
755
+ left: 0;
756
+ z-index: 1000;
757
+ float: left;
758
+ display: none;
759
+ min-width: 160px;
760
+ list-style: none;
761
+ background-color: #ffffff;
762
+ border: 1px solid #ccc;
763
+ border: 1px solid rgba(0, 0, 0, 0.2);
764
+ border-radius: 5px;
765
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
766
+ -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
767
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
768
+ -webkit-background-clip: padding-box;
769
+ -moz-background-clip: padding;
770
+ background-clip: padding-box;
771
+ *border-right-width: 2px;
772
+ *border-bottom-width: 2px;
773
+ color: #333333;
774
+ font-size: 13px;
775
+ line-height: 1.42857143;
776
+ }
777
+ .datepicker.dropdown-menu th,
778
+ .datepicker.datepicker-inline th,
779
+ .datepicker.dropdown-menu td,
780
+ .datepicker.datepicker-inline td {
781
+ padding: 0px 5px;
782
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.ectoplasm.css ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .btn-primary {
2
+ background: #a3b745;
3
+ border-color: #839237;
4
+ color: white;
5
+ -webkit-box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15);
6
+ box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15);
7
+ }
8
+ .factory-bootstrap-329 .btn-primary:hover,
9
+ .factory-bootstrap-329 .btn-primary:focus {
10
+ background: #89993a;
11
+ border-color: #727f30;
12
+ color: white;
13
+ -webkit-box-shadow: inset 0 1px 0 #b7c669, 0 1px 0 rgba(0, 0, 0, 0.15);
14
+ box-shadow: inset 0 1px 0 #b7c669, 0 1px 0 rgba(0, 0, 0, 0.15);
15
+ }
16
+ .factory-bootstrap-329 .btn-primary:active {
17
+ background: #89993a;
18
+ border-color: #727f30;
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-329 .btn-primary[disabled],
24
+ .factory-bootstrap-329 .btn-primary:disabled {
25
+ color: #cfd1c7 !important;
26
+ background: #89993a !important;
27
+ border-color: #727f30 !important;
28
+ text-shadow: none !important;
29
+ }
30
+
31
+ .factory-bootstrap-329 .btn-group .btn.active.value {
32
+ background-color: #a3b745;
33
+ -webkit-box-shadow: inset 0 1px 2px #839237;
34
+ box-shadow: inset 0 1px 2px #839237;
35
+ border-top: 1px solid #839237;
36
+ border-bottom: 1px solid #839237;
37
+ border-left: 1px solid #839237;
38
+ }
39
+
40
+ .factory-bootstrap-329 .pagination > .active > a,
41
+ .factory-bootstrap-329 .pagination > .active > span,
42
+ .factory-bootstrap-329 .pagination > .active > a:hover,
43
+ .factory-bootstrap-329 .pagination > .active > span:hover,
44
+ .factory-bootstrap-329 .pagination > .active > a:focus,
45
+ .factory-bootstrap-329 .pagination > .active > span:focus {
46
+ background-color: #a3b745;
47
+ border-color: #839237;
48
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.form-group.css ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Form Groups
3
+ */
4
+
5
+ .factory-bootstrap-329 .factory-form-group .factory-legend {
6
+ padding: 9px 12px;
7
+ background-color: #f9f9f9;
8
+ }
9
+ .factory-bootstrap-329 .factory-form-group .factory-title {
10
+ font-weight: bold;
11
+ font-size: 14px;
12
+ line-height: 14px;
13
+ color: #555;
14
+ margin: 0px;
15
+ }
16
+ .factory-bootstrap-329 .factory-form-group .factory-hint {
17
+ margin: 0px;
18
+ font-size: 12px;
19
+ line-height: 16px;
20
+ margin-top: 6px;
21
+ }
22
+ .factory-bootstrap-329 .factory-form-group + .factory-form-group {
23
+ margin-top: 30px;
24
+ }
25
+ .factory-bootstrap-329 .factory-form-group legend + .control-group {
26
+ margin-top: 0px;
27
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.form-metabox.css ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Form Metaboxes
3
+ */
4
+
5
+ .factory-form-metabox {
6
+ padding: 15px 10px 10px 10px;
7
+ }
8
+ .factory-form-metabox .control-group:last-child {
9
+ margin-bottom: 0px;
10
+ }
11
+
12
+ /**
13
+ * Side form metaboxes
14
+ */
15
+
16
+ #side-sortables .factory-bootstrap-329 .control-label {
17
+ float: left;
18
+ width: 100%;
19
+ text-align: left;
20
+ position: relative;
21
+ top: 1px;
22
+ }
23
+ #side-sortables .factory-bootstrap-329 .control-icon {
24
+ float: left;
25
+ margin: 0 6px 0 0;
26
+ }
27
+ #side-sortables .factory-bootstrap-329 input
28
+ {
29
+ float: right;
30
+ position: relative;
31
+ top: -25px;
32
+ }
33
+ #side-sortables .factory-bootstrap-329 .help-block {
34
+
35
+ }
36
+ #side-sortables .factory-bootstrap-329 .col-sm-10 {
37
+ margin: 0px;
38
+ width: 100%;
39
+ }
40
+ #side-sortables .factory-bootstrap-329 .form-group {
41
+ float: none;
42
+ margin-top: 0px;
43
+ width: auto;
44
+ overflow: auto;
45
+ }
46
+ #side-sortables .factory-bootstrap-329 .form-group {
47
+ margin-bottom: 0px;
48
+ border-top: 1px solid #f7f7f7;
49
+ padding-top: 15px;
50
+ margin-top: 15px;
51
+ }
52
+ #side-sortables .factory-bootstrap-329 .form-group:first-child {
53
+ border-top: 0px;
54
+ padding-top: 0px;
55
+ margin-top: 0px;
56
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.light.css ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .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-329 .btn-primary:hover,
9
+ .factory-bootstrap-329 .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-329 .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-329 .btn-primary[disabled],
24
+ .factory-bootstrap-329 .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-329 .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-329 .pagination > .active > a,
41
+ .factory-bootstrap-329 .pagination > .active > span,
42
+ .factory-bootstrap-329 .pagination > .active > a:hover,
43
+ .factory-bootstrap-329 .pagination > .active > span:hover,
44
+ .factory-bootstrap-329 .pagination > .active > a:focus,
45
+ .factory-bootstrap-329 .pagination > .active > span:focus {
46
+ background-color: #04a4cc;
47
+ border-color: #037c9a;
48
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.midnight.css ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .btn-primary {
2
+ background: #e14d43;
3
+ border-color: #d02a21;
4
+ color: white;
5
+ -webkit-box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15);
6
+ box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15);
7
+ }
8
+ .factory-bootstrap-329 .btn-primary:hover,
9
+ .factory-bootstrap-329 .btn-primary:focus {
10
+ background: #d92c23;
11
+ border-color: #ba251e;
12
+ color: white;
13
+ -webkit-box-shadow: inset 0 1px 0 #e8756f, 0 1px 0 rgba(0, 0, 0, 0.15);
14
+ box-shadow: inset 0 1px 0 #e8756f, 0 1px 0 rgba(0, 0, 0, 0.15);
15
+ }
16
+ .factory-bootstrap-329 .btn-primary:active {
17
+ background: #d92c23;
18
+ border-color: #ba251e;
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-329 .btn-primary[disabled],
24
+ .factory-bootstrap-329 .btn-primary:disabled {
25
+ color: #d1c7c7 !important;
26
+ background: #d92c23 !important;
27
+ border-color: #ba251e !important;
28
+ text-shadow: none !important;
29
+ }
30
+
31
+ .factory-bootstrap-329 .btn-group .btn.active.value {
32
+ background-color: #e14d43;
33
+ -webkit-box-shadow: inset 0 1px 2px #d02a21;
34
+ box-shadow: inset 0 1px 2px #d02a21;
35
+ border-top: 1px solid #d02a21;
36
+ border-bottom: 1px solid #d02a21;
37
+ border-left: 1px solid #d02a21;
38
+ }
39
+
40
+ .factory-bootstrap-329 .pagination > .active > a,
41
+ .factory-bootstrap-329 .pagination > .active > span,
42
+ .factory-bootstrap-329 .pagination > .active > a:hover,
43
+ .factory-bootstrap-329 .pagination > .active > span:hover,
44
+ .factory-bootstrap-329 .pagination > .active > a:focus,
45
+ .factory-bootstrap-329 .pagination > .active > span:focus {
46
+ background-color: #e14d43;
47
+ border-color: #d02a21;
48
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.ocean.css ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .btn-primary {
2
+ background: #9ebaa0;
3
+ border-color: #80a583;
4
+ color: white;
5
+ -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15);
6
+ box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15);
7
+ }
8
+ .factory-bootstrap-329 .btn-primary:hover,
9
+ .factory-bootstrap-329 .btn-primary:focus {
10
+ background: #86a988;
11
+ border-color: #719a74;
12
+ color: white;
13
+ -webkit-box-shadow: inset 0 1px 0 #bccfbd, 0 1px 0 rgba(0, 0, 0, 0.15);
14
+ box-shadow: inset 0 1px 0 #bccfbd, 0 1px 0 rgba(0, 0, 0, 0.15);
15
+ }
16
+ .factory-bootstrap-329 .btn-primary:active {
17
+ background: #86a988;
18
+ border-color: #719a74;
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-329 .btn-primary[disabled],
24
+ .factory-bootstrap-329 .btn-primary:disabled {
25
+ color: #c7d1c8 !important;
26
+ background: #86a988 !important;
27
+ border-color: #719a74 !important;
28
+ text-shadow: none !important;
29
+ }
30
+
31
+ .factory-bootstrap-329 .btn-group .btn.active.value {
32
+ background-color: #9ebaa0;
33
+ -webkit-box-shadow: inset 0 1px 2px #80a583;
34
+ box-shadow: inset 0 1px 2px #80a583;
35
+ border-top: 1px solid #80a583;
36
+ border-bottom: 1px solid #80a583;
37
+ border-left: 1px solid #80a583;
38
+ }
39
+
40
+ .factory-bootstrap-329 .pagination > .active > a,
41
+ .factory-bootstrap-329 .pagination > .active > span,
42
+ .factory-bootstrap-329 .pagination > .active > a:hover,
43
+ .factory-bootstrap-329 .pagination > .active > span:hover,
44
+ .factory-bootstrap-329 .pagination > .active > a:focus,
45
+ .factory-bootstrap-329 .pagination > .active > span:focus {
46
+ background-color: #9ebaa0;
47
+ border-color: #80a583;
48
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.separator.css ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Separator
3
+ */
4
+ .factory-bootstrap-329 .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/bootstrap.sunrise.css ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .btn-primary {
2
+ background: #dd823b;
3
+ border-color: #c36822;
4
+ color: white;
5
+ -webkit-box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15);
6
+ box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15);
7
+ }
8
+ .factory-bootstrap-329 .btn-primary:hover,
9
+ .factory-bootstrap-329 .btn-primary:focus {
10
+ background: #cc6c23;
11
+ border-color: #ad5c1e;
12
+ color: white;
13
+ -webkit-box-shadow: inset 0 1px 0 #e59d66, 0 1px 0 rgba(0, 0, 0, 0.15);
14
+ box-shadow: inset 0 1px 0 #e59d66, 0 1px 0 rgba(0, 0, 0, 0.15);
15
+ }
16
+ .factory-bootstrap-329 .btn-primary:active {
17
+ background: #cc6c23;
18
+ border-color: #ad5c1e;
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-329 .btn-primary[disabled],
24
+ .factory-bootstrap-329 .btn-primary:disabled {
25
+ color: #d1cbc7 !important;
26
+ background: #cc6c23 !important;
27
+ border-color: #ad5c1e !important;
28
+ text-shadow: none !important;
29
+ }
30
+
31
+ .factory-bootstrap-329 .btn-group .btn.active.value {
32
+ background-color: #dd823b;
33
+ -webkit-box-shadow: inset 0 1px 2px #c36822;
34
+ box-shadow: inset 0 1px 2px #c36822;
35
+ border-top: 1px solid #c36822;
36
+ border-bottom: 1px solid #c36822;
37
+ border-left: 1px solid #c36822;
38
+ }
39
+
40
+ .factory-bootstrap-329 .pagination > .active > a,
41
+ .factory-bootstrap-329 .pagination > .active > span,
42
+ .factory-bootstrap-329 .pagination > .active > a:hover,
43
+ .factory-bootstrap-329 .pagination > .active > span:hover,
44
+ .factory-bootstrap-329 .pagination > .active > a:focus,
45
+ .factory-bootstrap-329 .pagination > .active > span:focus {
46
+ background-color: #dd823b;
47
+ border-color: #c36822;
48
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.tab.css ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Tabs
3
+ */
4
+
5
+ .factory-bootstrap-329 .factory-tab {
6
+ overflow: hidden;
7
+ margin-bottom: 25px;
8
+ }
9
+ .factory-bootstrap-329 .form-group {
10
+ overflow: hidden;
11
+ }
12
+ .factory-bootstrap-329 .factory-tab + .form-group {
13
+ margin-top: 30px;
14
+ }
15
+ .factory-bootstrap-329 .nav-tabs a {
16
+ text-decoration: none;
17
+ }
18
+ .factory-bootstrap-329 .factory-align-horizontal .nav-tabs {
19
+ border-bottom: 0px;
20
+ }
21
+ .factory-bootstrap-329 .factory-align-vertical .factory-headers {
22
+ float: left;
23
+ width: 150px;
24
+ }
25
+ .factory-bootstrap-329 .factory-align-vertical .factory-headers .nav-tabs {
26
+ border-bottom: 0px;
27
+ display: block;
28
+ margin: 0px;
29
+ -webkit-border-bottom-left-radius: 4px;
30
+ -moz-border-radius-bottomleft: 4px;
31
+ border-bottom-left-radius: 4px;
32
+ }
33
+ .factory-bootstrap-329 .factory-tab .factory-bodies {
34
+ background-color: #fff;
35
+ -webkit-border-radius: 0 3px 3px 3px;
36
+ -moz-border-radius: 0 3px 3px 3px;
37
+ border-radius: 0 3px 3px 3px;
38
+ border: 1px solid #DDD;
39
+ padding: 30px 15px 25px 10px;
40
+ }
41
+ .factory-bootstrap-329 .factory-align-vertical .factory-bodies {
42
+ min-height: 250px;
43
+ margin-left: 150px;
44
+
45
+ }
46
+ .factory-bootstrap-329 .factory-align-vertical .factory-bodies .actory-tab-item {
47
+ clear: both;
48
+ }
49
+ .factory-bootstrap-329 .form-horizontal .factory-align-vertical .form-group {
50
+ margin-left: -5px;
51
+ }
52
+ .factory-bootstrap-329 .factory-align-vertical .nav-tabs li {
53
+ float: none;
54
+ }
55
+ .factory-bootstrap-329 .factory-align-vertical .nav-tabs li a {
56
+ margin-right: -1px;
57
+ margin-bottom: 0px;
58
+ position: relative;
59
+ z-index: 10;
60
+ padding: 10px 0 9px 15px;
61
+
62
+ -webkit-border-radius: 3px;
63
+ -webkit-border-top-right-radius: 0px;
64
+ -webkit-border-bottom-right-radius: 0px;
65
+ -moz-border-radius: 3px;
66
+ -moz-border-radius-topright: 0px;
67
+ -moz-border-radius-bottomright: 0px;
68
+ border-radius: 3px;
69
+ border-top-right-radius: 0px;
70
+ border-bottom-right-radius: 0px;
71
+ }
72
+ .factory-bootstrap-329 .factory-align-vertical .nav-tabs > .active > a
73
+ {
74
+ border: 1px solid #DDD !important;
75
+ border-right: 1px solid #fff !important;
76
+ }
77
+ .factory-bootstrap-329 .factory-align-vertical .nav-tabs > li a:hover
78
+ {
79
+ color: #21759B;
80
+ z-index: 5;
81
+ border-color: transparent;
82
+ }
83
+ .factory-bootstrap-329 .factory-align-vertical .control-label {
84
+ width: 20%;
85
+ max-width: 140px;
86
+ }
87
+ .factory-bootstrap-329 .factory-align-vertical .factory-tab-item {
88
+
89
+ }
90
+ .factory-bootstrap-329 .factory-align-vertical .control-group {
91
+ width: 80%;
92
+ }
93
+ .factory-bootstrap-329 .factory-align-vertical .control-group input[type=text],
94
+ .factory-bootstrap-329 .factory-align-vertical .control-group textarea
95
+ {
96
+ width: 90%;
97
+ }
libs/factory/bootstrap/assets/flat/css/bootstrap.wp-editor.css ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * WP Editor
3
+ */
4
+
5
+ .factory-bootstrap-329 .wp-editor-wrap * {
6
+ -webkit-box-sizing: content-box;
7
+ -moz-box-sizing: content-box;
8
+ box-sizing: content-box;
9
+ }
10
+ .factory-bootstrap-329 .wp-editor-wrap .button,
11
+ .factory-bootstrap-329 .wp-editor-wrap textarea,
12
+ .factory-bootstrap-329 .wp-editor-wrap input {
13
+ -webkit-box-sizing: border-box;
14
+ -moz-box-sizing: border-box;
15
+ box-sizing: border-box;
16
+ }
17
+ .factory-bootstrap-329 .switch-tmce,
18
+ .factory-bootstrap-329 .switch-html {
19
+ color: #777;
20
+ }
21
+ .factory-bootstrap-329 .tmce-active .switch-tmce,
22
+ .factory-bootstrap-329 .html-active .switch-html {
23
+ color: #555;
24
+ }
25
+ .factory-bootstrap-329 .switch-tmce:hover,
26
+ .factory-bootstrap-329 .switch-html:hover {
27
+ color: #777;
28
+ }
libs/factory/bootstrap/assets/flat/css/control.checkbox.css ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #side-sortables .factory-bootstrap-329 .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
+ .factory-bootstrap-329 .factory-buttons-way {
10
+ border: 3px solid #f9f9f9;
11
+ border-radius: 4px;
12
+ }
13
+ .factory-bootstrap-329 .factory-buttons-way button {
14
+ padding-left: 10px;
15
+ padding-right: 10px;
16
+ }
17
+ .factory-bootstrap-329 .factory-buttons-way .factory-on.active {
18
+ text-shadow: none;
19
+ color: #fff;
20
+ background-color: #33aad5;
21
+ -webkit-box-shadow: inset 0 1px 1px #0074a2;
22
+ box-shadow: inset 0 1px 3px #0074a2;
23
+ border-top: 1px solid #0074a2;
24
+ border-bottom: 1px solid #0074a2;
25
+ border-left: 1px solid #0074a2;
26
+ }
27
+
28
+
29
+ .factory-bootstrap-329 .factory-checkbox-tumbler-hint {
30
+ margin-top: 5px;
31
+ }
32
+ .factory-bootstrap-329 .factory-checkbox-tumbler-hint .factory-tumbler-content {
33
+ display: inline-block;
34
+ background-color: #ffffdd;
35
+ padding: 1px 5px;
36
+ }
37
+
38
+ .admin-color-light .factory-bootstrap-329 .factory-buttons-way .factory-on.active {
39
+ background-color: #04a4cc;
40
+ -webkit-box-shadow: inset 0 1px 2px #037c9a;
41
+ box-shadow: inset 0 1px 2px #037c9a;
42
+ border-top: 1px solid #037c9a;
43
+ border-bottom: 1px solid #037c9a;
44
+ border-left: 1px solid #037c9a;
45
+ }
46
+ .admin-color-blue .factory-bootstrap-329 .factory-buttons-way .factory-on.active {
47
+ background-color: #e1a948;
48
+ -webkit-box-shadow: inset 0 1px 2px #d39323;
49
+ box-shadow: inset 0 1px 2px #d39323;
50
+ border-top: 1px solid #d39323;
51
+ border-bottom: 1px solid #d39323;
52
+ border-left: 1px solid #d39323;
53
+ }
54
+ .admin-color-coffee .factory-bootstrap-329 .factory-buttons-way .factory-on.active {
55
+ background-color: #c7a589;
56
+ -webkit-box-shadow: inset 0 1px 2px #b78a66;
57
+ box-shadow: inset 0 1px 2px #b78a66;
58
+ border-top: 1px solid #b78a66;
59
+ border-bottom: 1px solid #b78a66;
60
+ border-left: 1px solid #b78a66;
61
+ }
62
+ .admin-color-ectoplasm .factory-bootstrap-329 .factory-buttons-way .factory-on.active {
63
+ background-color: #a3b745;
64
+ -webkit-box-shadow: inset 0 1px 2px #839237;
65
+ box-shadow: inset 0 1px 2px #839237;
66
+ border-top: 1px solid #839237;
67
+ border-bottom: 1px solid #839237;
68
+ border-left: 1px solid #839237;
69
+ }
70
+ .admin-color-midnight .factory-bootstrap-329 .factory-buttons-way .factory-on.active {
71
+ background-color: #e14d43;
72
+ -webkit-box-shadow: inset 0 1px 2px #d02a21;
73
+ box-shadow: inset 0 1px 2px #d02a21;
74
+ border-top: 1px solid #d02a21;
75
+ border-bottom: 1px solid #d02a21;
76
+ border-left: 1px solid #d02a21;
77
+ }
78
+ .admin-color-ocean .factory-bootstrap-329 .factory-buttons-way .factory-on.active {
79
+ background-color: #9ebaa0;
80
+ -webkit-box-shadow: inset 0 1px 2px #80a583;
81
+ box-shadow: inset 0 1px 2px #80a583;
82
+ border-top: 1px solid #80a583;
83
+ border-bottom: 1px solid #80a583;
84
+ border-left: 1px solid #80a583;
85
+ }
86
+ .admin-color-sunrise .factory-bootstrap-329 .factory-buttons-way .factory-on.active {
87
+ background-color: #dd823b;
88
+ -webkit-box-shadow: inset 0 1px 2px #c36822;
89
+ box-shadow: inset 0 1px 2px #c36822;
90
+ border-top: 1px solid #c36822;
91
+ border-bottom: 1px solid #c36822;
92
+ border-left: 1px solid #c36822;
93
+ }
libs/factory/bootstrap/assets/flat/css/control.color-and-opacity.css ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .factory-color-and-opacity .factory-preview-wrap {
2
+
3
+ }
4
+
5
+ .factory-bootstrap-329 .factory-control-row {
6
+ padding-left: 105px;
7
+ position: relative;
8
+ }
9
+ .factory-bootstrap-329 .factory-control-row .factory-color-wrap {
10
+ position: absolute;
11
+ left: 0px;
12
+ top: 0px;
13
+ }
14
+ .factory-bootstrap-329 .factory-control-row .factory-opacity-wrap {
15
+ width: 100%;
16
+ }
17
+
18
+ .factory-bootstrap-329 .factory-picker-target {
19
+
20
+ }
21
+
22
+ .factory-bootstrap-329 .iris-picker {
23
+ margin-top: 10px;
24
+ }
libs/factory/bootstrap/assets/flat/css/control.color.css ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .factory-color {
2
+ position: relative;
3
+ }
4
+
5
+ .factory-bootstrap-329 .factory-color .factory-color-hex {
6
+ display: inline-block;
7
+ width: 65px;
8
+ text-align: left;
9
+ vertical-align: top;
10
+ border-radius: 0px;
11
+ border-top-right-radius: 3px;
12
+ border-bottom-right-radius: 3px;
13
+ border-radius: 3px;
14
+ z-index: 1;
15
+ position: relative;
16
+ margin-left: 26px;
17
+ border-top-left-radius: 0px;
18
+ border-bottom-left-radius: 0px;
19
+ }
20
+
21
+ .factory-bootstrap-329 .factory-color .factory-pattern,
22
+ .factory-bootstrap-329 .factory-color .factory-background {
23
+ cursor: pointer;
24
+ }
25
+
26
+ .factory-bootstrap-329 .factory-color .factory-pattern,
27
+ .factory-bootstrap-329 .factory-color .factory-background {
28
+ height: 26px;
29
+ width: 26px;
30
+ position: absolute;
31
+ border-radius: 5px;
32
+ background: transparent url('../../images/color_picker_pattern.jpg') center center repeat;
33
+ -moz-box-sizing: border-box;
34
+ box-sizing: border-box;
35
+ border-bottom: 2px solid rgba(0, 0, 0, 0.34);
36
+ z-index: 1;
37
+ border-top-right-radius: 0px !important;
38
+ border-bottom-right-radius: 0px !important;
39
+ }
40
+
41
+ .factory-bootstrap-329 .factory-color .factory-background {
42
+ z-index: 2;
43
+ border-radius: 3px;
44
+ }
libs/factory/bootstrap/assets/flat/css/control.dropdown-and-colors.css ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .factory-dropdown-and-colors .factory-colors-wrap,
2
+ .factory-bootstrap-329 .factory-dropdown-and-colors .factory-dropdown-wrap {
3
+ display: inline-block;
4
+ }
5
+
6
+ .factory-bootstrap-329 .factory-dropdown-and-colors .factory-dropdown-wrap {
7
+ min-width: 200px;
8
+ max-width: 300px;
9
+ }
10
+
11
+ /*.factory-bootstrap-329 .factory-from-radio-label, .factory-bootstrap-329 .factory-from-radio-label > span {
12
+ -webkit-transition: all 0.3s;
13
+ -moz-transition: all 0.3s;
14
+ -o-transition: all 0.3s;
15
+ transition: all 0.3s;
16
+ }*/
libs/factory/bootstrap/assets/flat/css/control.dropdown.css ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Dropdown As Buttons
3
+ */
4
+
5
+ .factory-bootstrap-329 .factory-dropdown.factory-buttons-way .fa {
6
+ margin-right: 6px;
7
+ position: relative;
8
+ }
9
+ .factory-bootstrap-329 .factory-dropdown.factory-buttons-way {
10
+ border: 0px;
11
+ border-radius: 0px;
12
+ }
13
+
14
+ .factory-bootstrap-329 .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-329 .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-329 .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-329 .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-329 .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-329 .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-329 .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-329 .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-329 .factory-dropdown.factory-ddslick-way .dd-select {
84
+ background-color: #fff !important;
85
+ }
86
+ .factory-bootstrap-329 .factory-dropdown.factory-ddslick-way label {
87
+ margin-bottom: 1px;
88
+ }
89
+ .factory-bootstrap-329 .factory-dropdown.factory-ddslick-way .dd-option,
90
+ .factory-bootstrap-329 .factory-dropdown.factory-ddslick-way .dd-selected {
91
+ padding: 8px 12px 8px 11px !important;
92
+ }
libs/factory/bootstrap/assets/flat/css/control.fonts.css ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .factory-font .factory-control-row {
2
+ padding:0;
3
+ vertical-align: top;
4
+ }
5
+ .factory-bootstrap-329 .factory-font .factory-color-wrap {
6
+ position:static;
7
+ display:inline-block;
8
+ vertical-align: top;
9
+ }
10
+ .factory-bootstrap-329 .factory-font .factory-size-wrap {
11
+ display:inline-block;
12
+ width: 70px;
13
+ vertical-align: top;
14
+ }
15
+ .factory-bootstrap-329 .iris-picker {
16
+ margin-top: 10px;
17
+ }
18
+ .factory-bootstrap-329 .factory-font .factory-family-wrap {
19
+ padding-bottom: 10px;
20
+ }
21
+
22
+ .factory-bootstrap-329 .factory-font .chosen-results {
23
+ max-height: 150px;
24
+ }
libs/factory/bootstrap/assets/flat/css/control.integer.css ADDED
@@ -0,0 +1 @@
 
1
+
libs/factory/bootstrap/assets/flat/css/control.list.css ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ .factory-bootstrap-329 .factory-list li input {
3
+ margin: 0 5px 0 0;
4
+ position: relative;
5
+ top: 1px;
6
+ outline: none !important;
7
+ }
8
+ .factory-bootstrap-329 .factory-list li span {
9
+ vertical-align: bottom;
10
+ line-height: 100%;
11
+ }
12
+
13
+ /* erorrs */
14
+
15
+ .factory-bootstrap-329 .factory-list .factory-error {
16
+ position: relative;
17
+ display: inline-block;
18
+ }
19
+ .factory-bootstrap-329 .factory-list .factory-error i {
20
+ color: #f47665;
21
+ margin: 0 7px 0 1px;
22
+ cursor: help;
23
+ }
24
+ .factory-bootstrap-329 .factory-list .factory-error-text {
25
+ display: none;
26
+ position: absolute;
27
+ width: 300px;
28
+ }
29
+ .factory-bootstrap-329 .factory-list .factory-error-text,
30
+ .factory-bootstrap-329 .factory-list-error {
31
+ background-color: rgba(0,0,0,0.8);
32
+ white-space: normal;
33
+ z-index: 10;
34
+ padding: 10px 12px 12px 12px;
35
+ font-weight: normal;
36
+ line-height: 150%;
37
+ border-radius: 4px;
38
+ color: #fff;
39
+ font-size: 13px;
40
+ margin-top: 2px;
41
+ }
42
+ .factory-bootstrap-329 .factory-list-error {
43
+ padding: 5px 10px;
44
+ max-width: 500px;
45
+ display: inline-block;
46
+ }
47
+ .factory-bootstrap-329 .factory-list-error i {
48
+ margin: 0 7px 0 1px;
49
+ }
50
+ .factory-bootstrap-329 .factory-list .factory-error-text a {
51
+ color: #fff;
52
+ font-weight: bold;
53
+ }
54
+ .factory-bootstrap-329 .factory-list .factory-has-error:hover .factory-error-text {
55
+ display: block;
56
+ }
57
+ .factory-bootstrap-329 .factory-list .factory-has-error {
58
+ cursor: default;
59
+ }
60
+ .opanda-connect-buttons .opanda-has-error .opanda-error {
61
+ display: inline-block;
62
+ }
63
+
64
+ .factory-bootstrap-329 .factory-checklist-way.factory-empty {
65
+ font-style: italic;
66
+ margin-top: 7px;
67
+ }
libs/factory/bootstrap/assets/flat/css/control.pattern.css ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Pattern Control
3
+ *
4
+ * @author Alex Kovalev <alex@byonepress.com>
5
+ * @author Paul Kashtanoff <paul@byonepress.com>
6
+ * @copyright (c) 2013-2014, OnePress Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 3.1.0
10
+ */
11
+
12
+ .factory-bootstrap-329 .factory-pattern .factory-pattern-controls {
13
+ vertical-align: middle;
14
+ }
15
+
16
+ /**
17
+ * Preview
18
+ */
19
+
20
+ .factory-bootstrap-329 .factory-pattern .factory-preview-wrap {
21
+ display: inline-block;
22
+ vertical-align: middle;
23
+ }
24
+ .factory-bootstrap-329 .factory-pattern .factory-preview {
25
+ width: 100px;
26
+ height: 26px;
27
+ background:transparent url('../assets/images/color_picker_pattern.jpg') repeat;
28
+ border:0;
29
+ border-radius:3px;
30
+ cursor:pointer;
31
+ -moz-box-sizing: border-box;
32
+ box-sizing: border-box;
33
+ border-bottom: 2px solid rgba(0,0,0,0.34) !important;
34
+ position: relative;
35
+
36
+ }
37
+ .factory-bootstrap-329 .factory-pattern .factory-preview.factory-empty {
38
+ background:transparent url('../assets/images/color_picker_pattern.jpg') repeat !important;
39
+ }
40
+
41
+ /**
42
+ * Preview Arrow
43
+ */
44
+
45
+ .factory-bootstrap-329 .factory-pattern .factory-preview span {
46
+ position:absolute;
47
+ top:0;
48
+ left:76px;
49
+ background: #111111;
50
+ width: 26px;
51
+ height: 26px;
52
+ border-radius:0 3px 3px 0;
53
+ -moz-border-radius:0 3px 3px 0;
54
+ -webkit-border-radius:0 3px 3px 0;
55
+ z-index:99;
56
+ border-bottom: 2px solid #000;
57
+ }
58
+ .factory-bootstrap-329 .factory-pattern .factory-preview span:hover {
59
+ background: #161616;
60
+ }
61
+ .factory-bootstrap-329 .factory-pattern .factory-preview span:after {
62
+ content: '';
63
+ width: 0;
64
+ height: 0;
65
+ border: transparent solid 5px;
66
+ border-top-color: #96a6a6;
67
+ position: absolute;
68
+ top: 10px;
69
+ right: 7px;
70
+ z-index: 1;
71
+ }
72
+ .factory-bootstrap-329 .factory-pattern.factory-patterns-panel-active .factory-preview span:after {
73
+ border-top-color: transparent;
74
+ border-bottom-color: #96a6a6;
75
+ top: 4px;
76
+ }
77
+
78
+ /**
79
+ * Color Picker
80
+ */
81
+
82
+ .factory-bootstrap-329 .factory-pattern .factory-color-panel {
83
+ padding: 10px;
84
+ margin-top: 10px;
85
+ background: rgba(255,255,255,0.04);
86
+ border-radius: 3px;
87
+ display: none;
88
+ }
89
+ .factory-bootstrap-329 .factory-pattern.factory-color-panel-active .factory-color-panel {
90
+ display: block;
91
+ }
92
+ .factory-bootstrap-329 .factory-pattern .factory-color-label {
93
+ margin-right: 5px;
94
+ }
95
+ .factory-bootstrap-329 .factory-pattern .factory-color-label,
96
+ .factory-bootstrap-329 .factory-pattern .factory-color {
97
+ display: inline-block;
98
+ vertical-align: middle;
99
+ }
100
+ .factory-bootstrap-329 .factory-pattern .factory-color-panel .factory-hint {
101
+ margin-top: 7px;
102
+ }
103
+
104
+ /**
105
+ * Available Patterns
106
+ */
107
+
108
+ .factory-bootstrap-329 .factory-pattern .factory-patterns-panel {
109
+ display: none;
110
+ margin-top: 10px;
111
+ padding: 2px 0 0;
112
+ border-top: 1px solid #272727;
113
+ overflow: visible;
114
+ }
115
+ .factory-bootstrap-329 .factory-pattern .factory-patterns-group {
116
+ clear: both;
117
+ padding: 2px 0 0;
118
+ border-bottom: 1px solid #272727;
119
+ padding-bottom: 10px;
120
+ }
121
+ .factory-bootstrap-329 .factory-pattern .factory-patterns-group-title {
122
+ margin-top: 10px;
123
+ }
124
+ .factory-bootstrap-329 .factory-pattern .factory-patterns-row {
125
+ padding-top: 10px;
126
+ }
127
+ .factory-bootstrap-329 .factory-pattern.factory-patterns-panel-active .factory-patterns-panel {
128
+ display: block;
129
+ }
130
+ .factory-bootstrap-329 .factory-pattern .factory-patterns-item,
131
+ .factory-bootstrap-329 .factory-pattern .factory-patterns-item div {
132
+ width: 46px;
133
+ height: 46px;
134
+ }
135
+ .factory-bootstrap-329 .factory-pattern .factory-patterns-item {
136
+ display: inline-block;
137
+ cursor: pointer;
138
+ position: relative;
139
+ vertical-align: top;
140
+ }
141
+ .factory-bootstrap-329 .factory-pattern .factory-patterns-item + .factory-patterns-item {
142
+ margin-left: 10px;
143
+ }
144
+ .factory-bootstrap-329 .factory-pattern .factory-patterns-item div {
145
+ position: absolute;
146
+ border-radius: 100%;
147
+ border: 4px solid #333;
148
+ }
149
+ .factory-bootstrap-329 .factory-pattern .factory-patterns-item:hover .factory-pattern-holder {
150
+ width: 64px;
151
+ height: 64px;
152
+ top: -10px;
153
+ left: -10px;
154
+ border: 1px solid #333;
155
+ z-index: 10;
156
+ }
157
+ .factory-bootstrap-329 .factory-pattern .factory-no-preview {
158
+ background: #2f2f2f;
159
+ line-height: 46px;
160
+ border-radius: 100%;
161
+ text-align: center;
162
+ font-size: 20px;
163
+ }
164
+ .factory-bootstrap-329 .factory-pattern .factory-no-preview:hover {
165
+ background: #333;
166
+ }
167
+
168
+
169
+ /**
170
+ * Control Buttons
171
+ */
172
+
173
+ .factory-bootstrap-329 .factory-pattern .factory-button .fa {
174
+ font-size: 14px;
175
+ margin-right: 1px;
176
+ }
177
+ .factory-bootstrap-329 .factory-pattern .factory-button span {
178
+ position: relative;
179
+ top: -1px;
180
+ }
181
+ .factory-bootstrap-329 .factory-pattern .factory-button + .factory-button {
182
+ margin-left: 3px;
183
+ }
184
+ .factory-bootstrap-329 .factory-pattern .factory-change-color-btn {
185
+ margin-left: 5px;
186
+ }
187
+
libs/factory/bootstrap/assets/flat/css/control.radio-colors.css ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .factory-bootstrap-329 .factory-from-radio-label, .factory-bootstrap-329 .factory-from-radio-label > span {
2
+ -webkit-transition: all 0.3s;
3
+ -moz-transition: all 0.3s;
4
+ -o-transition: all 0.3s;
5
+ transition: all 0.3s;
6
+ }
7
+
8
+ .factory-bootstrap-329 .factory-from-radio-label {
9
+ position: relative;
10
+ width: 30px;
11
+ height: 30px;
12
+ border-radius: 3px;
13
+ background-color: #fff;
14
+ border: 1px solid rgba(0, 0, 0, 0.1);
15
+ }
16
+
17
+ .factory-bootstrap-329 .factory-from-radio-label:hover {
18
+ background-color: #f5f2f2;
19
+ border: 1px solid rgba(0, 0, 0, 0.2);
20
+ }
21
+
22
+ .factory-bootstrap-329 .factory-from-radio-label > span {
23
+ display: block;
24
+ position: absolute;
25
+ top: 2px;
26
+ left: 2px;
27
+ right: 2px;
28
+ bottom: 2px;
29
+ text-indent: -9999px;
30
+ background-color: #fff;
31
+ }
32
+
33
+ .factory-bootstrap-329 .factory-from-radio-label .factory-radio-color:checked + span {
34
+ border: 5px solid #fff;
35
+ }
36
+
37
+ .factory-bootstrap-329 .factory-radio-color {
38
+ opacity: 0;
39
+ }
libs/factory/bootstrap/assets/flat/css/holder.conrol-group.css ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * jQuery Control gropup holder
3
+ */
4
+
5
+ .factory-control-group .factory-header {
6
+ margin-bottom: 7px;
7
+ display: block;
8
+ }
9
+ .factory-control-group-nav {
10
+ width:284px;
11
+ margin:10px 8px;
12
+ }
13
+ .factory-control-group-nav li{
14
+ display:inline-block;
15
+ padding:8px 15px;
16
+ margin:0;
17
+ background-color: #444;
18
+ color:#fff;
19
+ border-radius:2px;
20
+ -moz-border-radius:2px;
21
+ -webkit-border-radius:2px;
22
+ cursor:pointer;
23
+ }
24
+ .factory-control-group-nav li.current{
25
+ background-color: #222;
26
+ }
27
+ .factory-control-group-item {
28
+ display:none;
29
+ }
30
+ .factory-control-group-item.current {
31
+ display:block;
32
+ }
libs/factory/bootstrap/assets/flat/css/holder.more-link.css ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * More Link
3
+ */
4
+
5
+ .factory-bootstrap-329 .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-329 .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-329 .factory-tab .factory-more-link-show:hover {
19
+ border-color: #d54e21;
20
+ }
21
+ .factory-bootstrap-329 .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-329 .factory-tab .factory-more-link-hide:hover {
31
+ color: #999;
32
+ }
libs/factory/bootstrap/assets/flat/css/plugin.chosen.css ADDED
@@ -0,0 +1,494 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ Chosen, a Select Box Enhancer for jQuery and Prototype
3
+ by Patrick Filler for Harvest, http://getharvest.com
4
+
5
+ Version 1.1.0
6
+ Full source at https://github.com/harvesthq/chosen
7
+ Copyright (c) 2011 Harvest http://getharvest.com
8
+
9
+ MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
+ This file is generated by `grunt build`, do not edit it by hand.
11
+ */
12
+
13
+ /* @group Base */
14
+ .chosen-container {
15
+ position: relative;
16
+ display: inline-block;
17
+ vertical-align: middle;
18
+ font-size: 13px;
19
+ zoom: 1;
20
+ *display: inline;
21
+ -webkit-user-select: none;
22
+ -moz-user-select: none;
23
+ user-select: none;
24
+ }
25
+
26
+ .chosen-container .chosen-drop {
27
+ position: absolute;
28
+ top: 100%;
29
+ left: -9999px;
30
+ z-index: 1010;
31
+ -webkit-box-sizing: border-box;
32
+ -moz-box-sizing: border-box;
33
+ box-sizing: border-box;
34
+ width: 100%;
35
+ border: 1px solid #aaa;
36
+ border-top: 0;
37
+ background: #fff;
38
+ box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
39
+ }
40
+
41
+ .chosen-container.chosen-with-drop .chosen-drop {
42
+ left: 0;
43
+ }
44
+
45
+ .chosen-container a {
46
+ cursor: pointer;
47
+ }
48
+
49
+ /* @end */
50
+ /* @group Single Chosen */
51
+ .chosen-container-single .chosen-single {
52
+ position: relative;
53
+ display: block;
54
+ overflow: hidden;
55
+ padding: 0 0 0 8px;
56
+ height: 23px;
57
+ border: 1px solid #aaa;
58
+ border-radius: 5px;
59
+ background-color: #fff;
60
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
61
+ background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
62
+ background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
63
+ background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
64
+ background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
65
+ background-clip: padding-box;
66
+ box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
67
+ color: #444;
68
+ text-decoration: none;
69
+ white-space: nowrap;
70
+ line-height: 24px;
71
+ -moz-box-sizing: border-box;
72
+ box-sizing: border-box;
73
+ }
74
+
75
+ .chosen-container-single .chosen-default {
76
+ color: #999;
77
+ }
78
+
79
+ .chosen-container-single .chosen-single span {
80
+ display: block;
81
+ overflow: hidden;
82
+ margin-right: 26px;
83
+ text-overflow: ellipsis;
84
+ white-space: nowrap;
85
+ }
86
+
87
+ .chosen-container-single .chosen-single-with-deselect span {
88
+ margin-right: 38px;
89
+ }
90
+
91
+ .chosen-container-single .chosen-single abbr {
92
+ position: absolute;
93
+ top: 6px;
94
+ right: 26px;
95
+ display: block;
96
+ width: 12px;
97
+ height: 12px;
98
+ background: url('../../images/chosen-sprite.png') -42px 1px no-repeat;
99
+ font-size: 1px;
100
+ }
101
+
102
+ .chosen-container-single .chosen-single abbr:hover {
103
+ background-position: -42px -10px;
104
+ }
105
+
106
+ .chosen-container-single.chosen-disabled .chosen-single abbr:hover {
107
+ background-position: -42px -10px;
108
+ }
109
+
110
+ .chosen-container-single .chosen-single div {
111
+ position: absolute;
112
+ top: 0;
113
+ right: 0;
114
+ display: block;
115
+ width: 18px;
116
+ height: 100%;
117
+ }
118
+
119
+ .chosen-container-single .chosen-single div b {
120
+ display: block;
121
+ width: 100%;
122
+ height: 100%;
123
+ background: url('../../images/chosen-sprite.png') no-repeat 0px 2px;
124
+ }
125
+
126
+ .chosen-container-single .chosen-search {
127
+ position: relative;
128
+ z-index: 1010;
129
+ margin: 0;
130
+ padding: 3px 4px;
131
+ white-space: nowrap;
132
+ }
133
+
134
+ .chosen-container-single .chosen-search input[type="text"] {
135
+ -webkit-box-sizing: border-box;
136
+ -moz-box-sizing: border-box;
137
+ box-sizing: border-box;
138
+ margin: 1px 0;
139
+ padding: 4px 20px 4px 5px;
140
+ width: 100%;
141
+ height: auto;
142
+ outline: 0;
143
+ border: 1px solid #aaa;
144
+ background: white url('../../images/chosen-sprite.png') no-repeat 100% -20px;
145
+ font-size: 1em;
146
+ font-family: sans-serif;
147
+ line-height: normal;
148
+ border-radius: 0;
149
+ }
150
+
151
+ .chosen-container-single .chosen-drop {
152
+ margin-top: -1px;
153
+ border-radius: 0 0 4px 4px;
154
+ background-clip: padding-box;
155
+ }
156
+
157
+ .chosen-container-single.chosen-container-single-nosearch .chosen-search {
158
+ position: absolute;
159
+ left: -9999px;
160
+ }
161
+
162
+ /* @end */
163
+ /* @group Results */
164
+ .chosen-container .chosen-results {
165
+ position: relative;
166
+ overflow-x: hidden;
167
+ overflow-y: auto;
168
+ margin: 0 4px 4px 0;
169
+ padding: 0 0 0 4px;
170
+ max-height: 240px;
171
+ -webkit-overflow-scrolling: touch;
172
+ }
173
+
174
+ .chosen-container .chosen-results li {
175
+ display: none;
176
+ margin: 0;
177
+ padding: 5px 6px;
178
+ list-style: none;
179
+ line-height: 15px;
180
+ -webkit-touch-callout: none;
181
+ }
182
+
183
+ .chosen-container .chosen-results li.active-result {
184
+ display: list-item;
185
+ cursor: pointer;
186
+ }
187
+
188
+ .chosen-container .chosen-results li.disabled-result {
189
+ display: list-item;
190
+ color: #ccc;
191
+ cursor: default;
192
+ }
193
+
194
+ .chosen-container .chosen-results li.highlighted {
195
+ background-color: #3875d7;
196
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
197
+ background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);
198
+ background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);
199
+ background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);
200
+ background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
201
+ color: #fff;
202
+ }
203
+
204
+ .chosen-container .chosen-results li.no-results {
205
+ display: list-item;
206
+ background: #f4f4f4;
207
+ }
208
+
209
+ .chosen-container .chosen-results li.group-result {
210
+ display: list-item;
211
+ font-weight: bold;
212
+ cursor: default;
213
+ }
214
+
215
+ .chosen-container .chosen-results li.group-option {
216
+ padding-left: 15px;
217
+ }
218
+
219
+ .chosen-container .chosen-results li em {
220
+ font-style: normal;
221
+ text-decoration: underline;
222
+ }
223
+
224
+ /* @end */
225
+ /* @group Multi Chosen */
226
+ .chosen-container-multi .chosen-choices {
227
+ position: relative;
228
+ overflow: hidden;
229
+ -webkit-box-sizing: border-box;
230
+ -moz-box-sizing: border-box;
231
+ box-sizing: border-box;
232
+ margin: 0;
233
+ padding: 0;
234
+ width: 100%;
235
+ height: auto !important;
236
+ height: 1%;
237
+ border: 1px solid #aaa;
238
+ background-color: #fff;
239
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
240
+ background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
241
+ background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
242
+ background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
243
+ background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);
244
+ cursor: text;
245
+ }
246
+
247
+ .chosen-container-multi .chosen-choices li {
248
+ float: left;
249
+ list-style: none;
250
+ }
251
+
252
+ .chosen-container-multi .chosen-choices li.search-field {
253
+ margin: 0;
254
+ padding: 0;
255
+ white-space: nowrap;
256
+ }
257
+
258
+ .chosen-container-multi .chosen-choices li.search-field input[type="text"] {
259
+ margin: 1px 0;
260
+ padding: 5px;
261
+ height: 15px;
262
+ outline: 0;
263
+ border: 0 !important;
264
+ background: transparent !important;
265
+ box-shadow: none;
266
+ color: #666;
267
+ font-size: 100%;
268
+ font-family: sans-serif;
269
+ line-height: normal;
270
+ border-radius: 0;
271
+ }
272
+
273
+ .chosen-container-multi .chosen-choices li.search-field .default {
274
+ color: #999;
275
+ }
276
+
277
+ .chosen-container-multi .chosen-choices li.search-choice {
278
+ position: relative;
279
+ margin: 3px 0 3px 5px;
280
+ padding: 3px 20px 3px 5px;
281
+ border: 1px solid #aaa;
282
+ border-radius: 3px;
283
+ background-color: #e4e4e4;
284
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
285
+ background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
286
+ background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
287
+ background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
288
+ background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
289
+ background-clip: padding-box;
290
+ box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
291
+ color: #333;
292
+ line-height: 13px;
293
+ cursor: default;
294
+ }
295
+
296
+ .chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
297
+ position: absolute;
298
+ top: 4px;
299
+ right: 3px;
300
+ display: block;
301
+ width: 12px;
302
+ height: 12px;
303
+ background: url('../../images/chosen-sprite.png') -42px 1px no-repeat;
304
+ font-size: 1px;
305
+ }
306
+
307
+ .chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
308
+ background-position: -42px -10px;
309
+ }
310
+
311
+ .chosen-container-multi .chosen-choices li.search-choice-disabled {
312
+ padding-right: 5px;
313
+ border: 1px solid #ccc;
314
+ background-color: #e4e4e4;
315
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
316
+ background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
317
+ background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
318
+ background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
319
+ background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
320
+ color: #666;
321
+ }
322
+
323
+ .chosen-container-multi .chosen-choices li.search-choice-focus {
324
+ background: #d4d4d4;
325
+ }
326
+
327
+ .chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
328
+ background-position: -42px -10px;
329
+ }
330
+
331
+ .chosen-container-multi .chosen-results {
332
+ margin: 0;
333
+ padding: 0;
334
+ }
335
+
336
+ .chosen-container-multi .chosen-drop .result-selected {
337
+ display: list-item;
338
+ color: #ccc;
339
+ cursor: default;
340
+ }
341
+
342
+ /* @end */
343
+ /* @group Active */
344
+ .chosen-container-active .chosen-single {
345
+ border: 1px solid #5897fb;
346
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
347
+ }
348
+
349
+ .chosen-container-active.chosen-with-drop .chosen-single {
350
+ border: 1px solid #aaa;
351
+ -moz-border-radius-bottomright: 0;
352
+ border-bottom-right-radius: 0;
353
+ -moz-border-radius-bottomleft: 0;
354
+ border-bottom-left-radius: 0;
355
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));
356
+ background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%);
357
+ background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%);
358
+ background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%);
359
+ background-image: linear-gradient(#eeeeee 20%, #ffffff 80%);
360
+ box-shadow: 0 1px 0 #fff inset;
361
+ }
362
+
363
+ .chosen-container-active.chosen-with-drop .chosen-single div {
364
+ border-left: none;
365
+ background: transparent;
366
+ }
367
+
368
+ .chosen-container-active.chosen-with-drop .chosen-single div b {
369
+ background-position: -18px 2px;
370
+ }
371
+
372
+ .chosen-container-active .chosen-choices {
373
+ border: 1px solid #5897fb;
374
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
375
+ }
376
+
377
+ .chosen-container-active .chosen-choices li.search-field input[type="text"] {
378
+ color: #111 !important;
379
+ }
380
+
381
+ /* @end */
382
+ /* @group Disabled Support */
383
+ .chosen-disabled {
384
+ opacity: 0.5 !important;
385
+ cursor: default;
386
+ }
387
+
388
+ .chosen-disabled .chosen-single {
389
+ cursor: default;
390
+ }
391
+
392
+ .chosen-disabled .chosen-choices .search-choice .search-choice-close {
393
+ cursor: default;
394
+ }
395
+
396
+ /* @end */
397
+ /* @group Right to Left */
398
+ .chosen-rtl {
399
+ text-align: right;
400
+ }
401
+
402
+ .chosen-rtl .chosen-single {
403
+ overflow: visible;
404
+ padding: 0 8px 0 0;
405
+ }
406
+
407
+ .chosen-rtl .chosen-single span {
408
+ margin-right: 0;
409
+ margin-left: 26px;
410
+ direction: rtl;
411
+ }
412
+
413
+ .chosen-rtl .chosen-single-with-deselect span {
414
+ margin-left: 38px;
415
+ }
416
+
417
+ .chosen-rtl .chosen-single div {
418
+ right: auto;
419
+ left: 3px;
420
+ }
421
+
422
+ .chosen-rtl .chosen-single abbr {
423
+ right: auto;
424
+ left: 26px;
425
+ }
426
+
427
+ .chosen-rtl .chosen-choices li {
428
+ float: right;
429
+ }
430
+
431
+ .chosen-rtl .chosen-choices li.search-field input[type="text"] {
432
+ direction: rtl;
433
+ }
434
+
435
+ .chosen-rtl .chosen-choices li.search-choice {
436
+ margin: 3px 5px 3px 0;
437
+ padding: 3px 5px 3px 19px;
438
+ }
439
+
440
+ .chosen-rtl .chosen-choices li.search-choice .search-choice-close {
441
+ right: auto;
442
+ left: 4px;
443
+ }
444
+
445
+ .chosen-rtl.chosen-container-single-nosearch .chosen-search,
446
+ .chosen-rtl .chosen-drop {
447
+ left: 9999px;
448
+ }
449
+
450
+ .chosen-rtl.chosen-container-single .chosen-results {
451
+ margin: 0 0 4px 4px;
452
+ padding: 0 4px 0 0;
453
+ }
454
+
455
+ .chosen-rtl .chosen-results li.group-option {
456
+ padding-right: 15px;
457
+ padding-left: 0;
458
+ }
459
+
460
+ .chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
461
+ border-right: none;
462
+ }
463
+
464
+ .chosen-rtl .chosen-search input[type="text"] {
465
+ padding: 4px 5px 4px 20px;
466
+ background: white url('../../images/chosen-sprite.png') no-repeat -30px -20px;
467
+ direction: rtl;
468
+ }
469
+
470
+ .chosen-rtl.chosen-container-single .chosen-single div b {
471
+ background-position: 6px 2px;
472
+ }
473
+
474
+ .chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
475
+ background-position: -12px 2px;
476
+ }
477
+
478
+ /* @end */
479
+ /* @group Retina compatibility */
480
+ @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) {
481
+ .chosen-rtl .chosen-search input[type="text"],
482
+ .chosen-container-single .chosen-single abbr,
483
+ .chosen-container-single .chosen-single div b,
484
+ .chosen-container-single .chosen-search input[type="text"],
485
+ .chosen-container-multi .chosen-choices .search-choice .search-choice-close,
486
+ .chosen-container .chosen-results-scroll-down span,
487
+ .chosen-container .chosen-results-scroll-up span {
488
+ background-image: url('../../images/chosen-sprite@2x.png') !important;
489
+ background-size: 52px 37px !important;
490
+ background-repeat: no-repeat !important;
491
+ }
492
+ }
493
+
494
+ /* @end */
libs/factory/bootstrap/assets/flat/css/plugin.gradient-picker.css ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * jQuery gradient generator
3
+ */
4
+ .factory-bootstrap-329 .factory-gradient-picker-wrap {
5
+ margin-bottom: 20px;
6
+ }
7
+
8
+ .factory-bootstrap-329 .gradientPicker-preview {
9
+ width: 100%;
10
+ height: 30px;
11
+ border-radius: 3px;
12
+ background: transparent url('../../images/color_picker_pattern.jpg') repeat;
13
+ }
14
+
15
+ .factory-bootstrap-329 .factory-color-picker-container {
16
+ display: none;
17
+ padding-top: 15px;
18
+ }
19
+
20
+ .factory-bootstrap-329 .factory-point,
21
+ .factory-bootstrap-329 .factory-point-color {
22
+ position: absolute;
23
+ width: 10px;
24
+ height: 10px;
25
+ border: 0;
26
+ font-size: 0;
27
+ border-radius: 50% 50% 100% 100%;
28
+ -moz-border-radius: 50% 50% 100% 100%;
29
+ -webkit-border-radius: 50% 50% 100% 100%;
30
+ cursor: pointer;
31
+ overflow: hidden;
32
+ }
33
+
34
+ .factory-bootstrap-329 .factory-point-color {
35
+ border-radius: 0px;
36
+ }
37
+
38
+ .factory-bootstrap-329 .factory-point {
39
+ background: transparent url('../../images/color_picker_pattern.jpg') repeat;
40
+ }
41
+
42
+ .factory-bootstrap-329 .factory-current-point {
43
+ -ms-transform: rotate(180deg);
44
+ -webkit-transform: rotate(180deg);
45
+ transform: rotate(180deg);
46
+ }
47
+
48
+ .factory-bootstrap-329 .factory-points {
49
+ position: relative;
50
+ height: 10px;
51
+ width: 100%;
52
+ cursor: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUeNq8VAEKwCAITOn%2FX3ZzTBCxUicTBsvsOO9EIKJhAwCe5H0H4xBvLQgOegV8yZ8AZwJHc8zKI4c53bk6IGNqMH3GCJuMlkeG4p4G1e5Lq1KXatmCM7AdrbLLq7FC0agycx7oXOmk8%2FY%2FPNjRR7s6ZFHFqY5AcasLFDPtpAC7WH7aNkxgO9gdLNv3oWdKiKXX7r8bu6rlJcAA9ZRfMt5oHoIAAAAASUVORK5CYII%3D') 5 0, pointer;
53
+ }
54
+
55
+ .factory-bootstrap-329 .gradientPicker-iris-wrap {
56
+ display: none;
57
+ position: absolute;
58
+ left: 0;
59
+ top: 78px;
60
+ width: 212px;
61
+ height: 212px;
62
+ background: #111;
63
+ border: 1px solid #222;
64
+ border-radius: 5px;
65
+ -moz-border-radius: 5px;
66
+ -webkit-border-radius: 5px;
67
+ z-index: 9999;
68
+
69
+ }
70
+
71
+ .factory-bootstrap-329 .gradientPicker-iris-wrap .iris-border, .factory-bootstrap-329 .gradientPicker-iris-wrap .iris-picker {
72
+ border: 0;
73
+ background: #111;
74
+ }
75
+
76
+ /* Preset Gradients */
77
+
78
+ .factory-bootstrap-329 .gradientPicker-pallets {
79
+ padding: 8px 0px 3px 0px;
80
+ margin-bottom: 10px;
81
+ border-bottom: 1px solid #323232;
82
+ border-top: 1px solid #323232;
83
+ font-size: 0px;
84
+ line-height: 0px;
85
+ text-align: center;
86
+ }
87
+
88
+ .factory-bootstrap-329 .factory-preset-gradient,
89
+ .factory-bootstrap-329 .factory-secondary-color {
90
+ width: 22px;
91
+ height: 22px;
92
+ border-radius: 100%;
93
+ }
94
+
95
+ .factory-bootstrap-329 .factory-preset-gradient {
96
+ display: inline-block;
97
+ cursor: pointer;
98
+ margin-bottom: 3px;
99
+ position: relative;
100
+ }
101
+
102
+ .factory-bootstrap-329 .factory-preset-gradient:hover {
103
+ opacity: 0.9;
104
+ }
105
+
106
+ .factory-bootstrap-329 .factory-preset-gradient + .factory-preset-gradient {
107
+ margin-left: 5px;
108
+ }
109
+
110
+ .factory-bootstrap-329 .factory-secondary-color-wrap {
111
+ width: 11px;
112
+ height: 22px;
113
+ position: absolute;
114
+ overflow: hidden;
115
+ right: 0px;
116
+ }
117
+
118
+ .factory-bootstrap-329 .factory-secondary-color {
119
+ position: absolute;
120
+ left: -11px;
121
+ background-color: red;
122
+ }
123
+
124
+ .factory-bootstrap-329 .gradientPicker-filldirection {
125
+ width: 200px;
126
+ margin-top: 5px;
127
+ }
128
+
129
+ .factory-bootstrap-329 .gradientPicker-ptConfig .color-chooser {
130
+ float: left;
131
+ }
132
+
133
+ /**
134
+ * Color
135
+ */
136
+
137
+ .factory-bootstrap-329 .factory-color-picker-container .factory-slider {
138
+ padding-left: 75px;
139
+ padding-right: 60px;
140
+ position: relative;
141
+ }
142
+
143
+ .factory-bootstrap-329 .factory-color-picker-container .factory-color-hex {
144
+ top: 0;
145
+ left: 0;
146
+ position: absolute;
147
+ width: 65px;
148
+ }
149
+
libs/factory/bootstrap/assets/flat/css/plugin.nouislider.css ADDED
@@ -0,0 +1 @@
 
1
+ .noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-user-select:none;-ms-touch-action:none;-ms-user-select:none;-moz-user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-base{width:100%;height:100%;position:relative}.noUi-origin{position:absolute;right:0;top:0;left:0;bottom:0}.noUi-handle{position:relative;z-index:1}.noUi-stacking .noUi-handle{z-index:10}.noUi-stacking+.noUi-origin{*z-index:-1}.noUi-state-tap .noUi-origin{-webkit-transition:left .3s,top .3s;transition:left .3s,top .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;left:-17px;top:-6px}.noUi-horizontal.noUi-extended{padding:0 15px}.noUi-horizontal.noUi-extended .noUi-origin{right:-15px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;left:-6px;top:-17px}.noUi-vertical.noUi-extended{padding:15px 0}.noUi-vertical.noUi-extended .noUi-origin{bottom:-15px}.noUi-background{background:#FAFAFA;box-shadow:inset 0 1px 1px #f0f0f0}.noUi-connect{background:#3FB8AF;box-shadow:inset 0 0 3px rgba(51,51,51,.45);-webkit-transition:background 450ms;transition:background 450ms}.noUi-origin{border-radius:2px}.noUi-target{border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0,0 3px 6px -5px #BBB}.noUi-target.noUi-connect{box-shadow:inset 0 0 3px rgba(51,51,51,.45),0 3px 6px -5px #BBB}.noUi-dragable{cursor:w-resize}.noUi-vertical .noUi-dragable{cursor:n-resize}.noUi-handle{border:1px solid #D9D9D9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #EBEBEB,0 3px 6px -3px #BBB}.noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#E8E7E6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect,[disabled].noUi-connect{background:#B8B8B8}[disabled] .noUi-handle{cursor:not-allowed}
libs/factory/bootstrap/assets/flat/css/plugin.paddings-editor.css ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * jQuery Paddings
3
+ *
4
+ * @uses plugin.nouislider
5
+ */
6
+
7
+ .factory-bootstrap-329 .factory-paddings-editor {
8
+ padding-left: 135px;
9
+ height: 90px;
10
+ position: relative;
11
+ }
12
+
13
+ .factory-bootstrap-329 .factory-paddings-editor .factory-rectangle {
14
+ width: 120px;
15
+ height: 90px;
16
+ border-radius: 10px;
17
+ background-color: #a6b6b6;
18
+ position: relative;
19
+ overflow: hidden;
20
+ cursor: pointer;
21
+ -moz-box-sizing: content-box;
22
+ box-sizing: content-box;
23
+ position: absolute;
24
+ top: 0px;
25
+ left: 0px;
26
+ }
27
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side {
28
+ width: 100%;
29
+ height: 100%;
30
+ position: absolute;
31
+ }
32
+
33
+
34
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side-center {
35
+ width: 30px;
36
+ height: 30px;
37
+ border-radius: 100%;
38
+ background-color: #bac9c9;
39
+ position: absolute;
40
+ top: 30px;
41
+ left: 45px;
42
+ -moz-box-sizing: content-box;
43
+ box-sizing: content-box;
44
+ }
45
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side-center:hover {
46
+ background-color: #c0cece;
47
+ }
48
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side-center.factory-active {
49
+ background-color: #829595;
50
+ }
51
+
52
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side-top {
53
+ height: 30px; /* = ( rectangle_height - center_button_height ) / 2 */
54
+ top: 0px;
55
+ left: 0px;
56
+ }
57
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side-right {
58
+ width: 45px; /* = ( rectangle_width - center_button_width ) / 2 */
59
+ top: 0px;
60
+ right: 0px;
61
+ }
62
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side-bottom {
63
+ height: 30px; /* = ( rectangle_height - center_button_height ) / 2 */
64
+ bottom: 0px;
65
+ left: 0px;
66
+ }
67
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side-left {
68
+ width: 45px; /* = ( rectangle_width - center_button_width ) / 2 */
69
+ top: 0px;
70
+ left: 0px;
71
+ }
72
+
73
+ .factory-bootstrap-329 .factory-paddings-editor .factory-rectangle .factory-visible-value {
74
+ color: #1b1f1f;
75
+ background-color: rgba(255,255,255,0.3);
76
+ border-radius: 3px;
77
+ padding: 2px;
78
+ line-height: 13px;
79
+ display: inline-block;
80
+ }
81
+ .factory-bootstrap-329 .factory-paddings-editor .factory-rectangle .factory-side.factory-active .factory-visible-value {
82
+ background-color: rgba(255,255,255,0.3);
83
+ border-radius: 3px;
84
+ padding: 2px;
85
+ line-height: 13px;
86
+ display: inline-block;
87
+ }
88
+ .factory-bootstrap-329 .factory-paddings-editor .factory-visible-value em {
89
+ font-style: normal;
90
+ }
91
+
92
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side-top,
93
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side-bottom {
94
+ text-align: center;
95
+ line-height: 30px; /* = side_height */
96
+ }
97
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side-left,
98
+ .factory-bootstrap-329 .factory-paddings-editor .factory-side-right {
99
+ line-height: 90px; /* = side_height */
100
+ text-align: center;
101
+ }
102
+
103
+ .factory-bootstrap-329 .factory-paddings-editor .factory-slider-container {
104
+ font-style: italic;
105
+ }
106
+ .factory-bootstrap-329 .factory-paddings-editor .factory-slider {
107
+ padding-right: 0px;
108
+ margin-top: 7px
109
+ }
libs/factory/bootstrap/assets/images/chosen-sprite.png ADDED
Binary file
libs/factory/bootstrap/assets/images/chosen-sprite@2x.png ADDED
Binary file
libs/factory/bootstrap/assets/images/color_picker_pattern.jpg ADDED
Binary file
libs/factory/bootstrap/assets/images/drop-menu_arrow.png ADDED
Binary file
libs/factory/bootstrap/assets/images/loader-sm-f6f6f6.gif ADDED
Binary file
libs/factory/bootstrap/assets/images/loader-sm-tr.gif ADDED
Binary file
libs/factory/bootstrap/assets/images/no-pattern-background-control.png ADDED
Binary file
libs/factory/bootstrap/assets/js/bootstrap.accordion.js ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Light Weight jQuery Accordions
3
+ */
4
+
5
+ ;(function ( $, window, document, undefined ) {
6
+ "use strict"; // jshint ;_;
7
+
8
+ $.fn.factoryBootstrap329_accordion = function(){
9
+ return this.each(function () {
10
+ var $self = $(this);
11
+ var startAnimation = false;
12
+
13
+ $('.'+$self.attr('class')+' > div:first').show();
14
+ $('.'+$self.attr('class')+' > div:first')
15
+ .add('.'+$self.attr('class')+' > h3:first')
16
+ .addClass('active');
17
+
18
+ $('.'+$self.attr('class')+' > h3').on('click', function() {
19
+ var selfOn = $(this);
20
+ var target = selfOn.next();
21
+
22
+ if(!selfOn.hasClass('active') && !startAnimation){
23
+ startAnimation = true;
24
+ selfOn.parent().children('div').slideUp(500);
25
+
26
+ $('.'+$self.attr('class')+' > h3').removeClass('active');
27
+ selfOn.addClass('active');
28
+ target.addClass('active').slideDown({
29
+ duration: 500,
30
+ complete: function(){
31
+ startAnimation = false;
32
+ $self.trigger('shown.bs.accordion', [selfOn]);
33
+ },
34
+ progress: function() {
35
+ $self.trigger('progress.bs.accordion', [selfOn]);
36
+ }
37
+ });
38
+ }
39
+
40
+ return false;
41
+ });
42
+ });
43
+ }
44
+
45
+ $(function(){
46
+ $('.factory-bootstrap-329 .factory-accordion').factoryBootstrap329_accordion();
47
+ });
48
+
49
+ })( jQuery, window, document );
libs/factory/bootstrap/assets/js/bootstrap.affix.js ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ /* ========================================================================
3
+ * Bootstrap: affix.js v3.0.3
4
+ * http://getbootstrap.com/javascript/#affix
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
+
22
+ +function ($) { "use strict";
23
+
24
+ // AFFIX CLASS DEFINITION
25
+ // ======================
26
+
27
+ var Affix = function (element, options) {
28
+ this.options = $.extend({}, Affix.DEFAULTS, options)
29
+ this.$window = $(window)
30
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
31
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
32
+
33
+ this.$element = $(element)
34
+ this.affixed =
35
+ this.unpin = null
36
+
37
+ this.checkPosition()
38
+ }
39
+
40
+ Affix.RESET = 'affix affix-top affix-bottom'
41
+
42
+ Affix.DEFAULTS = {
43
+ offset: 0
44
+ }
45
+
46
+ Affix.prototype.checkPositionWithEventLoop = function () {
47
+ setTimeout($.proxy(this.checkPosition, this), 1)
48
+ }
49
+
50
+ Affix.prototype.checkPosition = function () {
51
+ if (!this.$element.is(':visible')) return
52
+
53
+ var scrollHeight = $(document).height()
54
+ var scrollTop = this.$window.scrollTop()
55
+ var position = this.$element.offset()
56
+ var offset = this.options.offset
57
+ var offsetTop = offset.top
58
+ var offsetBottom = offset.bottom
59
+
60
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
61
+ if (typeof offsetTop == 'function') offsetTop = offset.top()
62
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
63
+
64
+ var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
65
+ offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
66
+ offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
67
+
68
+ if (this.affixed === affix) return
69
+ if (this.unpin) this.$element.css('top', '')
70
+
71
+ this.affixed = affix
72
+ this.unpin = affix == 'bottom' ? position.top - scrollTop : null
73
+
74
+ this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : ''))
75
+
76
+ if (affix == 'bottom') {
77
+ this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() })
78
+ }
79
+ }
80
+
81
+
82
+ // AFFIX PLUGIN DEFINITION
83
+ // =======================
84
+
85
+ var old = $.fn.affix
86
+
87
+ $.fn.affix = function (option) {
88
+ return this.each(function () {
89
+ var $this = $(this)
90
+ var data = $this.data('bs.affix')
91
+ var options = typeof option == 'object' && option
92
+
93
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
94
+ if (typeof option == 'string') data[option]()
95
+ })
96
+ }
97
+
98
+ $.fn.affix.Constructor = Affix
99
+
100
+
101
+ // AFFIX NO CONFLICT
102
+ // =================
103
+
104
+ $.fn.affix.noConflict = function () {
105
+ $.fn.affix = old
106
+ return this
107
+ }
108
+
109
+
110
+ // AFFIX DATA-API
111
+ // ==============
112
+
113
+ $(window).on('load', function () {
114
+ $('[data-spy="affix"]').each(function () {
115
+ var $spy = $(this)
116
+ var data = $spy.data()
117
+
118
+ data.offset = data.offset || {}
119
+
120
+ if (data.offsetBottom) data.offset.bottom = data.offsetBottom
121
+ if (data.offsetTop) data.offset.top = data.offsetTop
122
+
123
+ $spy.affix(data)
124
+ })
125
+ })
126
+
127
+ }(jQuery);
libs/factory/bootstrap/assets/js/bootstrap.alert.js ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ========================================================================
2
+ * Bootstrap: alert.js v3.0.3
3
+ * http://getbootstrap.com/javascript/#alerts
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
+ // ALERT CLASS DEFINITION
24
+ // ======================
25
+
26
+ var dismiss = '[data-dismiss="alert"]'
27
+ var Alert = function (el) {
28
+ $(el).on('click', dismiss, this.close)
29
+ }
30
+
31
+ Alert.prototype.close = function (e) {
32
+ var $this = $(this)
33
+ var selector = $this.attr('data-target')
34
+
35
+ if (!selector) {
36
+ selector = $this.attr('href')
37
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
38
+ }
39
+
40
+ var $parent = $(selector)
41
+
42
+ if (e) e.preventDefault()
43
+
44
+ if (!$parent.length) {
45
+ $parent = $this.hasClass('alert') ? $this : $this.parent()
46
+ }
47
+
48
+ $parent.trigger(e = $.Event('close.bs.alert'))
49
+
50
+ if (e.isDefaultPrevented()) return
51
+
52
+ $parent.removeClass('in')
53
+
54
+ function removeElement() {
55
+ $parent.trigger('closed.bs.alert').remove()
56
+ }
57
+
58
+ $.support.transition && $parent.hasClass('fade') ?
59
+ $parent
60
+ .one($.support.transition.end, removeElement)
61
+ .emulateTransitionEnd(150) :
62
+ removeElement()
63
+ }
64
+
65
+
66
+ // ALERT PLUGIN DEFINITION
67
+ // =======================
68
+
69
+ var old = $.fn.alert
70
+
71
+ $.fn.alert = function (option) {
72
+ return this.each(function () {
73
+ var $this = $(this)
74
+ var data = $this.data('bs.alert')
75
+
76
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
77
+ if (typeof option == 'string') data[option].call($this)
78
+ })
79
+ }
80
+
81
+ $.fn.alert.Constructor = Alert
82
+
83
+
84
+ // ALERT NO CONFLICT
85
+ // =================
86
+
87
+ $.fn.alert.noConflict = function () {
88
+ $.fn.alert = old
89
+ return this
90
+ }
91
+
92
+
93
+ // ALERT DATA-API
94
+ // ==============
95
+
96
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
97
+
98
+ }(jQuery);
libs/factory/bootstrap/assets/js/bootstrap.button.js ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ========================================================================
2
+ * Bootstrap: button.js v3.0.3
3
+ * http://getbootstrap.com/javascript/#buttons
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
+ // BUTTON PUBLIC CLASS DEFINITION
24
+ // ==============================
25
+
26
+ var Button = function (element, options) {
27
+ this.$element = $(element)
28
+ this.options = $.extend({}, Button.DEFAULTS, options)
29
+ }
30
+
31
+ Button.DEFAULTS = {
32
+ loadingText: 'loading...'
33
+ }
34
+
35
+ Button.prototype.setState = function (state) {
36
+ var d = 'disabled'
37
+ var $el = this.$element
38
+ var val = $el.is('input') ? 'val' : 'html'
39
+ var data = $el.data()
40
+
41
+ state = state + 'Text'
42
+
43
+ if (!data.resetText) $el.data('resetText', $el[val]())
44
+
45
+ $el[val](data[state] || this.options[state])
46
+
47
+ // push to event loop to allow forms to submit
48
+ setTimeout(function () {
49
+ state == 'loadingText' ?
50
+ $el.addClass(d).attr(d, d) :
51
+ $el.removeClass(d).removeAttr(d);
52
+ }, 0)
53
+ }
54
+
55
+ Button.prototype.toggle = function () {
56
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
57
+ var changed = true
58
+
59
+ if ($parent.length) {
60
+ var $input = this.$element.find('input')
61
+ if ($input.prop('type') === 'radio') {
62
+ // see if clicking on current one
63
+ if ($input.prop('checked') && this.$element.hasClass('active'))
64
+ changed = false
65
+ else
66
+ $parent.find('.active').removeClass('active')
67
+ }
68
+ if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
69
+ }
70
+
71
+ if (changed) this.$element.toggleClass('active')
72
+ }
73
+
74
+
75
+ // BUTTON PLUGIN DEFINITION
76
+ // ========================
77
+
78
+ var old = $.fn.button
79
+
80
+ $.fn.button = function (option) {
81
+ return this.each(function () {
82
+ var $this = $(this)
83
+ var data = $this.data('bs.button')
84
+ var options = typeof option == 'object' && option
85
+
86
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
87
+
88
+ if (option == 'toggle') data.toggle()
89
+ else if (option) data.setState(option)
90
+ })
91
+ }
92
+
93
+ $.fn.button.Constructor = Button
94
+
95
+
96
+ // BUTTON NO CONFLICT
97
+ // ==================
98
+
99
+ $.fn.button.noConflict = function () {
100
+ $.fn.button = old
101
+ return this
102
+ }
103
+
104
+
105
+ // BUTTON DATA-API
106
+ // ===============
107
+
108
+ $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
109
+ var $btn = $(e.target)
110
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
111
+ $btn.button('toggle')
112
+ e.preventDefault()
113
+ })
114
+
115
+ }(jQuery);
libs/factory/bootstrap/assets/js/bootstrap.carousel.js ADDED
@@ -0,0 +1,217 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ========================================================================
2
+ * Bootstrap: carousel.js v3.0.3
3
+ * http://getbootstrap.com/javascript/#carousel
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
+ // CAROUSEL CLASS DEFINITION
24
+ // =========================
25
+
26
+ var Carousel = function (element, options) {
27
+ this.$element = $(element)
28
+ this.$indicators = this.$element.find('.carousel-indicators')
29
+ this.options = options
30
+ this.paused =
31
+ this.sliding =
32
+ this.interval =
33
+ this.$active =
34
+ this.$items = null
35
+
36
+ this.options.pause == 'hover' && this.$element
37
+ .on('mouseenter', $.proxy(this.pause, this))
38
+ .on('mouseleave', $.proxy(this.cycle, this))
39
+ }
40
+
41
+ Carousel.DEFAULTS = {
42
+ interval: 5000
43
+ , pause: 'hover'
44
+ , wrap: true
45
+ }
46
+
47
+ Carousel.prototype.cycle = function (e) {
48
+ e || (this.paused = false)
49
+
50
+ this.interval && clearInterval(this.interval)
51
+
52
+ this.options.interval
53
+ && !this.paused
54
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
55
+
56
+ return this
57
+ }
58
+
59
+ Carousel.prototype.getActiveIndex = function () {
60
+ this.$active = this.$element.find('.item.active')
61
+ this.$items = this.$active.parent().children()
62
+
63
+ return this.$items.index(this.$active)
64
+ }
65
+
66
+ Carousel.prototype.to = function (pos) {
67
+ var that = this
68
+ var activeIndex = this.getActiveIndex()
69
+
70
+ if (pos > (this.$items.length - 1) || pos < 0) return
71
+
72
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
73
+ if (activeIndex == pos) return this.pause().cycle()
74
+
75
+ return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
76
+ }
77
+
78
+ Carousel.prototype.pause = function (e) {
79
+ e || (this.paused = true)
80
+
81
+ if (this.$element.find('.next, .prev').length && $.support.transition.end) {
82
+ this.$element.trigger($.support.transition.end)
83
+ this.cycle(true)
84
+ }
85
+
86
+ this.interval = clearInterval(this.interval)
87
+
88
+ return this
89
+ }
90
+
91
+ Carousel.prototype.next = function () {
92
+ if (this.sliding) return
93
+ return this.slide('next')
94
+ }
95
+
96
+ Carousel.prototype.prev = function () {
97
+ if (this.sliding) return
98
+ return this.slide('prev')
99
+ }
100
+
101
+ Carousel.prototype.slide = function (type, next) {
102
+ var $active = this.$element.find('.item.active')
103
+ var $next = next || $active[type]()
104
+ var isCycling = this.interval
105
+ var direction = type == 'next' ? 'left' : 'right'
106
+ var fallback = type == 'next' ? 'first' : 'last'
107
+ var that = this
108
+
109
+ if (!$next.length) {
110
+ if (!this.options.wrap) return
111
+ $next = this.$element.find('.item')[fallback]()
112
+ }
113
+
114
+ this.sliding = true
115
+
116
+ isCycling && this.pause()
117
+
118
+ var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
119
+
120
+ if ($next.hasClass('active')) return
121
+
122
+ if (this.$indicators.length) {
123
+ this.$indicators.find('.active').removeClass('active')
124
+ this.$element.one('slid.bs.carousel', function () {
125
+ var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
126
+ $nextIndicator && $nextIndicator.addClass('active')
127
+ })
128
+ }
129
+
130
+ if ($.support.transition && this.$element.hasClass('slide')) {
131
+ this.$element.trigger(e)
132
+ if (e.isDefaultPrevented()) return
133
+ $next.addClass(type)
134
+ $next[0].offsetWidth // force reflow
135
+ $active.addClass(direction)
136
+ $next.addClass(direction)
137
+ $active
138
+ .one($.support.transition.end, function () {
139
+ $next.removeClass([type, direction].join(' ')).addClass('active')
140
+ $active.removeClass(['active', direction].join(' '))
141
+ that.sliding = false
142
+ setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
143
+ })
144
+ .emulateTransitionEnd(600)
145
+ } else {
146
+ this.$element.trigger(e)
147
+ if (e.isDefaultPrevented()) return
148
+ $active.removeClass('active')
149
+ $next.addClass('active')
150
+ this.sliding = false
151
+ this.$element.trigger('slid.bs.carousel')
152
+ }
153
+
154
+ isCycling && this.cycle()
155
+
156
+ return this
157
+ }
158
+
159
+
160
+ // CAROUSEL PLUGIN DEFINITION
161
+ // ==========================
162
+
163
+ var old = $.fn.carousel
164
+
165
+ $.fn.carousel = function (option) {
166
+ return this.each(function () {
167
+ var $this = $(this)
168
+ var data = $this.data('bs.carousel')
169
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
170
+ var action = typeof option == 'string' ? option : options.slide
171
+
172
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
173
+ if (typeof option == 'number') data.to(option)
174
+ else if (action) data[action]()
175
+ else if (options.interval) data.pause().cycle()
176
+ })
177
+ }
178
+
179
+ $.fn.carousel.Constructor = Carousel
180
+
181
+
182
+ // CAROUSEL NO CONFLICT
183
+ // ====================
184
+
185
+ $.fn.carousel.noConflict = function () {
186
+ $.fn.carousel = old
187
+ return this
188
+ }
189
+
190
+
191
+ // CAROUSEL DATA-API
192
+ // =================
193
+
194
+ $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
195
+ var $this = $(this), href
196
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
197
+ var options = $.extend({}, $target.data(), $this.data())
198
+ var slideIndex = $this.attr('data-slide-to')
199
+ if (slideIndex) options.interval = false
200
+
201
+ $target.carousel(options)
202
+
203
+ if (slideIndex = $this.attr('data-slide-to')) {
204
+ $target.data('bs.carousel').to(slideIndex)
205
+ }
206
+
207
+ e.preventDefault()
208
+ })
209
+
210
+ $(window).on('load', function () {
211
+ $('[data-ride="carousel"]').each(function () {
212
+ var $carousel = $(this)
213
+ $carousel.carousel($carousel.data())
214
+ })
215
+ })
216
+
217
+ }(jQuery);
libs/factory/bootstrap/assets/js/bootstrap.collapse.js ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ========================================================================
2
+ * Bootstrap: collapse.js v3.0.3
3
+ * http://getbootstrap.com/javascript/#collapse
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
+ // COLLAPSE PUBLIC CLASS DEFINITION
24
+ // ================================
25
+
26
+ var Collapse = function (element, options) {
27
+ this.$element = $(element)
28
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
29
+ this.transitioning = null
30
+
31
+ if (this.options.parent) this.$parent = $(this.options.parent)
32
+ if (this.options.toggle) this.toggle()
33
+ }
34
+
35
+ Collapse.DEFAULTS = {
36
+ toggle: true
37
+ }
38
+
39
+ Collapse.prototype.dimension = function () {
40
+ var hasWidth = this.$element.hasClass('width')
41
+ return hasWidth ? 'width' : 'height'
42
+ }
43
+
44
+ Collapse.prototype.show = function () {
45
+ if (this.transitioning || this.$element.hasClass('in')) return
46
+
47
+ var startEvent = $.Event('show.bs.collapse')
48
+ this.$element.trigger(startEvent)
49
+ if (startEvent.isDefaultPrevented()) return
50
+
51
+ var actives = this.$parent && this.$parent.find('> .panel > .in')
52
+
53
+ if (actives && actives.length) {
54
+ var hasData = actives.data('bs.collapse')
55
+ if (hasData && hasData.transitioning) return
56
+ actives.collapse('hide')
57
+ hasData || actives.data('bs.collapse', null)
58
+ }
59
+
60
+ var dimension = this.dimension()
61
+
62
+ this.$element
63
+ .removeClass('collapse')
64
+ .addClass('collapsing')
65
+ [dimension](0)
66
+
67
+ this.transitioning = 1
68
+
69
+ var complete = function () {
70
+ this.$element
71
+ .removeClass('collapsing')
72
+ .addClass('in')
73
+ [dimension]('auto')
74
+ this.transitioning = 0
75
+ this.$element.trigger('shown.bs.collapse')
76
+ }
77
+
78
+ if (!$.support.transition) return complete.call(this)
79
+
80
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
81
+
82
+ this.$element
83
+ .one($.support.transition.end, $.proxy(complete, this))
84
+ .emulateTransitionEnd(350)
85
+ [dimension](this.$element[0][scrollSize])
86
+ }
87
+
88
+ Collapse.prototype.hide = function () {
89
+ if (this.transitioning || !this.$element.hasClass('in')) return
90
+
91
+ var startEvent = $.Event('hide.bs.collapse')
92
+ this.$element.trigger(startEvent)
93
+ if (startEvent.isDefaultPrevented()) return
94
+
95
+ var dimension = this.dimension()
96
+
97
+ this.$element
98
+ [dimension](this.$element[dimension]())
99
+ [0].offsetHeight
100
+
101
+ this.$element
102
+ .addClass('collapsing')
103
+ .removeClass('collapse')
104
+ .removeClass('in')
105
+
106
+ this.transitioning = 1
107
+
108
+ var complete = function () {
109
+ this.transitioning = 0
110
+ this.$element
111
+ .trigger('hidden.bs.collapse')
112
+ .removeClass('collapsing')
113
+ .addClass('collapse')
114
+ }
115
+
116
+ if (!$.support.transition) return complete.call(this)
117
+
118
+ this.$element
119
+ [dimension](0)
120
+ .one($.support.transition.end, $.proxy(complete, this))
121
+ .emulateTransitionEnd(350)
122
+ }
123
+
124
+ Collapse.prototype.toggle = function () {
125
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
126
+ }
127
+
128
+
129
+ // COLLAPSE PLUGIN DEFINITION
130
+ // ==========================
131
+
132
+ $.fn.factoryBootstrap329_collapse = function (option) {
133
+ return this.each(function () {
134
+ var $this = $(this)
135
+ var data = $this.data('bs.collapse')
136
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
137
+
138
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
139
+ if (typeof option == 'string') data[option]()
140
+ })
141
+ }
142
+
143
+ $.fn.factoryBootstrap329_collapse.Constructor = Collapse
144
+
145
+ // COLLAPSE DATA-API
146
+ // =================
147
+
148
+ $(document).on('click.bs.collapse.data-api', '[data-toggle=factory-collapse]', function (e) {
149
+ var $this = $(this), href
150
+ var target = $this.attr('data-target')
151
+ || e.preventDefault()
152
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
153
+ var $target = $(target)
154
+ var data = $target.data('bs.collapse')
155
+ var option = data ? 'toggle' : $this.data()
156
+ var parent = $this.attr('data-parent')
157
+ var $parent = parent && $(parent)
158
+
159
+ if (!data || !data.transitioning) {
160
+ if ($parent) $parent.find('[data-toggle=factory-collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
161
+ $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
162
+ }
163
+
164
+ $target.collapse(option)
165
+ })
166
+
167
+ }(jQuery);
libs/factory/bootstrap/assets/js/bootstrap.datepicker.js ADDED
@@ -0,0 +1,1966 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Datepicker for Bootstrap v1.5.0-dev (https://github.com/eternicode/bootstrap-datepicker)
3
+ *
4
+ * Copyright 2012 Stefan Petre
5
+ * Improvements by Andrew Rowls
6
+ * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
7
+ */
8
+ (function($, undefined) {
9
+
10
+ function UTCDate() {
11
+ return new Date(Date.UTC.apply(Date, arguments));
12
+ }
13
+
14
+ function UTCToday() {
15
+ var today = new Date();
16
+ return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());
17
+ }
18
+
19
+ function isUTCEquals(date1, date2) {
20
+ return (
21
+ date1.getUTCFullYear() === date2.getUTCFullYear() &&
22
+ date1.getUTCMonth() === date2.getUTCMonth() &&
23
+ date1.getUTCDate() === date2.getUTCDate()
24
+ );
25
+ }
26
+
27
+ function alias(method) {
28
+ return function() {
29
+ return this[method].apply(this, arguments);
30
+ };
31
+ }
32
+
33
+ var DateArray = (function() {
34
+ var extras = {
35
+ get: function(i) {
36
+ return this.slice(i)[0];
37
+ },
38
+ contains: function(d) {
39
+ // Array.indexOf is not cross-browser;
40
+ // $.inArray doesn't work with Dates
41
+ var val = d && d.valueOf();
42
+ for( var i = 0, l = this.length; i < l; i++ ) {
43
+ if( this[i].valueOf() === val ) {
44
+ return i;
45
+ }
46
+ }
47
+ return -1;
48
+ },
49
+ remove: function(i) {
50
+ this.splice(i, 1);
51
+ },
52
+ replace: function(new_array) {
53
+ if( !new_array ) {
54
+ return;
55
+ }
56
+ if( !$.isArray(new_array) ) {
57
+ new_array = [new_array];
58
+ }
59
+ this.clear();
60
+ this.push.apply(this, new_array);
61
+ },
62
+ clear: function() {
63
+ this.length = 0;
64
+ },
65
+ copy: function() {
66
+ var a = new DateArray();
67
+ a.replace(this);
68
+ return a;
69
+ }
70
+ };
71
+
72
+ return function() {
73
+ var a = [];
74
+ a.push.apply(a, arguments);
75
+ $.extend(a, extras);
76
+ return a;
77
+ };
78
+ })();
79
+
80
+ // Picker object
81
+
82
+ var Datepicker = function(element, options) {
83
+ this._process_options(options);
84
+
85
+ this.dates = new DateArray();
86
+ this.viewDate = this.o.defaultViewDate;
87
+ this.focusDate = null;
88
+
89
+ this.element = $(element);
90
+ this.isInline = false;
91
+ this.isInput = this.element.is('input');
92
+ this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .btn') : false;
93
+ this.hasInput = this.component && this.element.find('input').length;
94
+ if( this.component && this.component.length === 0 ) {
95
+ this.component = false;
96
+ }
97
+
98
+ this.picker = $(DPGlobal.template);
99
+ this._buildEvents();
100
+ this._attachEvents();
101
+
102
+ if( this.isInline ) {
103
+ this.picker.addClass('datepicker-inline').appendTo(this.element);
104
+ }
105
+ else {
106
+ this.picker.addClass('datepicker-dropdown dropdown-menu');
107
+ }
108
+
109
+ if( this.o.rtl ) {
110
+ this.picker.addClass('datepicker-rtl');
111
+ }
112
+
113
+ this.viewMode = this.o.startView;
114
+
115
+ if( this.o.calendarWeeks ) {
116
+ this.picker.find('tfoot .today, tfoot .clear')
117
+ .attr('colspan', function(i, val) {
118
+ return parseInt(val) + 1;
119
+ });
120
+ }
121
+
122
+ this._allow_update = false;
123
+
124
+ this.setStartDate(this._o.startDate);
125
+ this.setEndDate(this._o.endDate);
126
+ this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled);
127
+ this.setDatesDisabled(this.o.datesDisabled);
128
+
129
+ this.fillDow();
130
+ this.fillMonths();
131
+
132
+ this._allow_update = true;
133
+
134
+ this.update();
135
+ this.showMode();
136
+
137
+ if( this.isInline ) {
138
+ this.show();
139
+ }
140
+ };
141
+
142
+ Datepicker.prototype = {
143
+ constructor: Datepicker,
144
+
145
+ _process_options: function(opts) {
146
+ // Store raw options for reference
147
+ this._o = $.extend({}, this._o, opts);
148
+ // Processed options
149
+ var o = this.o = $.extend({}, this._o);
150
+
151
+ // Check if "de-DE" style date is available, if not language should
152
+ // fallback to 2 letter code eg "de"
153
+ var lang = o.language;
154
+ if( !dates[lang] ) {
155
+ lang = lang.split('-')[0];
156
+ if( !dates[lang] ) {
157
+ lang = defaults.language;
158
+ }
159
+ }
160
+ o.language = lang;
161
+
162
+ switch( o.startView ) {
163
+ case 2:
164
+ case 'decade':
165
+ o.startView = 2;
166
+ break;
167
+ case 1:
168
+ case 'year':
169
+ o.startView = 1;
170
+ break;
171
+ default:
172
+ o.startView = 0;
173
+ }
174
+
175
+ switch( o.minViewMode ) {
176
+ case 1:
177
+ case 'months':
178
+ o.minViewMode = 1;
179
+ break;
180
+ case 2:
181
+ case 'years':
182
+ o.minViewMode = 2;
183
+ break;
184
+ default:
185
+ o.minViewMode = 0;
186
+ }
187
+
188
+ o.startView = Math.max(o.startView, o.minViewMode);
189
+
190
+ // true, false, or Number > 0
191
+ if( o.multidate !== true ) {
192
+ o.multidate = Number(o.multidate) || false;
193
+ if( o.multidate !== false ) {
194
+ o.multidate = Math.max(0, o.multidate);
195
+ }
196
+ }
197
+ o.multidateSeparator = String(o.multidateSeparator);
198
+
199
+ o.weekStart %= 7;
200
+ o.weekEnd = ((o.weekStart + 6) % 7);
201
+
202
+ var format = DPGlobal.parseFormat(o.format);
203
+ if( o.startDate !== -Infinity ) {
204
+ if( !!o.startDate ) {
205
+ if( o.startDate instanceof Date ) {
206
+ o.startDate = this._local_to_utc(this._zero_time(o.startDate));
207
+ } else {
208
+ o.startDate = DPGlobal.parseDate(o.startDate, format, o.language);
209
+ }
210
+ }
211
+ else {
212
+ o.startDate = -Infinity;
213
+ }
214
+ }
215
+ if( o.endDate !== Infinity ) {
216
+ if( !!o.endDate ) {
217
+ if( o.endDate instanceof Date ) {
218
+ o.endDate = this._local_to_utc(this._zero_time(o.endDate));
219
+ } else {
220
+ o.endDate = DPGlobal.parseDate(o.endDate, format, o.language);
221
+ }
222
+ }
223
+ else {
224
+ o.endDate = Infinity;
225
+ }
226
+ }
227
+
228
+ o.daysOfWeekDisabled = o.daysOfWeekDisabled || [];
229
+ if( !$.isArray(o.daysOfWeekDisabled) ) {
230
+ o.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\s]*/);
231
+ }
232
+ o.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function(d) {
233
+ return parseInt(d, 10);
234
+ });
235
+
236
+ o.datesDisabled = o.datesDisabled || [];
237
+ if( !$.isArray(o.datesDisabled) ) {
238
+ var datesDisabled = [];
239
+ datesDisabled.push(DPGlobal.parseDate(o.datesDisabled, format, o.language));
240
+ o.datesDisabled = datesDisabled;
241
+ }
242
+ o.datesDisabled = $.map(o.datesDisabled, function(d) {
243
+ return DPGlobal.parseDate(d, format, o.language);
244
+ });
245
+
246
+ var plc = String(o.orientation).toLowerCase().split(/\s+/g),
247
+ _plc = o.orientation.toLowerCase();
248
+ plc = $.grep(plc, function(word) {
249
+ return /^auto|left|right|top|bottom$/.test(word);
250
+ });
251
+ o.orientation = {
252
+ x: 'auto',
253
+ y: 'auto'
254
+ };
255
+ if( !_plc || _plc === 'auto' ) {
256
+ ;
257
+ }// no action
258
+ else if( plc.length === 1 ) {
259
+ switch( plc[0] ) {
260
+ case 'top':
261
+ case 'bottom':
262
+ o.orientation.y = plc[0];
263
+ break;
264
+ case 'left':
265
+ case 'right':
266
+ o.orientation.x = plc[0];
267
+ break;
268
+ }
269
+ }
270
+ else {
271
+ _plc = $.grep(plc, function(word) {
272
+ return /^left|right$/.test(word);
273
+ });
274
+ o.orientation.x = _plc[0] || 'auto';
275
+
276
+ _plc = $.grep(plc, function(word) {
277
+ return /^top|bottom$/.test(word);
278
+ });
279
+ o.orientation.y = _plc[0] || 'auto';
280
+ }
281
+ if( o.defaultViewDate ) {
282
+ var year = o.defaultViewDate.year || new Date().getFullYear();
283
+ var month = o.defaultViewDate.month || 0;
284
+ var day = o.defaultViewDate.day || 1;
285
+ o.defaultViewDate = UTCDate(year, month, day);
286
+ } else {
287
+ o.defaultViewDate = UTCToday();
288
+ }
289
+ o.showOnFocus = o.showOnFocus !== undefined ? o.showOnFocus : true;
290
+ },
291
+ _events: [],
292
+ _secondaryEvents: [],
293
+ _applyEvents: function(evs) {
294
+ for( var i = 0, el, ch, ev; i < evs.length; i++ ) {
295
+ el = evs[i][0];
296
+ if( evs[i].length === 2 ) {
297
+ ch = undefined;
298
+ ev = evs[i][1];
299
+ }
300
+ else if( evs[i].length === 3 ) {
301
+ ch = evs[i][1];
302
+ ev = evs[i][2];
303
+ }
304
+ el.on(ev, ch);
305
+ }
306
+ },
307
+ _unapplyEvents: function(evs) {
308
+ for( var i = 0, el, ev, ch; i < evs.length; i++ ) {
309
+ el = evs[i][0];
310
+ if( evs[i].length === 2 ) {
311
+ ch = undefined;
312
+ ev = evs[i][1];
313
+ }
314
+ else if( evs[i].length === 3 ) {
315
+ ch = evs[i][1];
316
+ ev = evs[i][2];
317
+ }
318
+ el.off(ev, ch);
319
+ }
320
+ },
321
+ _buildEvents: function() {
322
+ var events = {
323
+ keyup: $.proxy(function(e) {
324
+ if( $.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1 ) {
325
+ this.update();
326
+ }
327
+ }, this),
328
+ keydown: $.proxy(this.keydown, this),
329
+ paste: $.proxy(this.paste, this)
330
+ };
331
+
332
+ if( this.o.showOnFocus === true ) {
333
+ events.focus = $.proxy(this.show, this);
334
+ }
335
+
336
+ if( this.isInput ) { // single input
337
+ this._events = [
338
+ [this.element, events]
339
+ ];
340
+ }
341
+ else if( this.component && this.hasInput ) { // component: input + button
342
+ this._events = [
343
+ // For components that are not readonly, allow keyboard nav
344
+ [this.element.find('input'), events],
345
+ [
346
+ this.component, {
347
+ click: $.proxy(this.show, this)
348
+ }
349
+ ]
350
+ ];
351
+ }
352
+ else if( this.element.is('div') ) { // inline datepicker
353
+ this.isInline = true;
354
+ }
355
+ else {
356
+ this._events = [
357
+ [
358
+ this.element, {
359
+ click: $.proxy(this.show, this)
360
+ }
361
+ ]
362
+ ];
363
+ }
364
+ this._events.push(
365
+ // Component: listen for blur on element descendants
366
+ [
367
+ this.element, '*', {
368
+ blur: $.proxy(function(e) {
369
+ this._focused_from = e.target;
370
+ }, this)
371
+ }
372
+ ],
373
+ // Input: listen for blur on element
374
+ [
375
+ this.element, {
376
+ blur: $.proxy(function(e) {
377
+ this._focused_from = e.target;
378
+ }, this)
379
+ }
380
+ ]
381
+ );
382
+
383
+ if( this.o.immediateUpdates ) {
384
+ // Trigger input updates immediately on changed year/month
385
+ this._events.push([
386
+ this.element, {
387
+ 'changeYear changeMonth': $.proxy(function(e) {
388
+ this.update(e.date);
389
+ }, this)
390
+ }
391
+ ]);
392
+ }
393
+
394
+ this._secondaryEvents = [
395
+ [
396
+ this.picker, {
397
+ click: $.proxy(this.click, this)
398
+ }
399
+ ],
400
+ [
401
+ $(window), {
402
+ resize: $.proxy(this.place, this)
403
+ }
404
+ ],
405
+ [
406
+ $(document), {
407
+ mousedown: $.proxy(function(e) {
408
+ // Clicked outside the datepicker, hide it
409
+ if( !(
410
+ this.element.is(e.target) ||
411
+ this.element.find(e.target).length ||
412
+ this.picker.is(e.target) ||
413
+ this.picker.find(e.target).length
414
+ ) ) {
415
+ $(this.picker).hide();
416
+ }
417
+ }, this)
418
+ }
419
+ ]
420
+ ];
421
+ },
422
+ _attachEvents: function() {
423
+ this._detachEvents();
424
+ this._applyEvents(this._events);
425
+ },
426
+ _detachEvents: function() {
427
+ this._unapplyEvents(this._events);
428
+ },
429
+ _attachSecondaryEvents: function() {
430
+ this._detachSecondaryEvents();
431
+ this._applyEvents(this._secondaryEvents);
432
+ },
433
+ _detachSecondaryEvents: function() {
434
+ this._unapplyEvents(this._secondaryEvents);
435
+ },
436
+ _trigger: function(event, altdate) {
437
+ var date = altdate || this.dates.get(-1),
438
+ local_date = this._utc_to_local(date);
439
+
440
+ this.element.trigger({
441
+ type: event,
442
+ date: local_date,
443
+ dates: $.map(this.dates, this._utc_to_local),
444
+ format: $.proxy(function(ix, format) {
445
+ if( arguments.length === 0 ) {
446
+ ix = this.dates.length - 1;
447
+ format = this.o.format;
448
+ }
449
+ else if( typeof ix === 'string' ) {
450
+ format = ix;
451
+ ix = this.dates.length - 1;
452
+ }
453
+ format = format || this.o.format;
454
+ var date = this.dates.get(ix);
455
+ return DPGlobal.formatDate(date, format, this.o.language);
456
+ }, this)
457
+ });
458
+ },
459
+
460
+ show: function() {
461
+ if( this.element.attr('readonly') && this.o.enableOnReadonly === false ) {
462
+ return;
463
+ }
464
+ if( !this.isInline ) {
465
+ this.picker.appendTo(this.o.container);
466
+ }
467
+ this.place();
468
+ this.picker.show();
469
+ this._attachSecondaryEvents();
470
+ this._trigger('show');
471
+ if( (window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard ) {
472
+ $(this.element).blur();
473
+ }
474
+ return this;
475
+ },
476
+
477
+ hide: function() {
478
+ if( this.isInline ) {
479
+ return this;
480
+ }
481
+ if( !this.picker.is(':visible') ) {
482
+ return this;
483
+ }
484
+ this.focusDate = null;
485
+ this.picker.hide().detach();
486
+ this._detachSecondaryEvents();
487
+ this.viewMode = this.o.startView;
488
+ this.showMode();
489
+
490
+ if(
491
+ this.o.forceParse &&
492
+ (
493
+ this.isInput && this.element.val() ||
494
+ this.hasInput && this.element.find('input').val()
495
+ )
496
+ ) {
497
+ this.setValue();
498
+ }
499
+ this._trigger('hide');
500
+ return this;
501
+ },
502
+
503
+ remove: function() {
504
+ this.hide();
505
+ this._detachEvents();
506
+ this._detachSecondaryEvents();
507
+ this.picker.remove();
508
+ delete this.element.data().datepicker;
509
+ if( !this.isInput ) {
510
+ delete this.element.data().date;
511
+ }
512
+ return this;
513
+ },
514
+
515
+ paste: function(evt) {
516
+ var dateString;
517
+ if( evt.originalEvent.clipboardData && evt.originalEvent.clipboardData.types
518
+ && $.inArray('text/plain', evt.originalEvent.clipboardData.types) !== -1 ) {
519
+ dateString = evt.originalEvent.clipboardData.getData('text/plain');
520
+ }
521
+ else if( window.clipboardData ) {
522
+ dateString = window.clipboardData.getData('Text');
523
+ }
524
+ else {
525
+ return;
526
+ }
527
+ this.setDate(dateString);
528
+ this.update();
529
+ evt.preventDefault();
530
+ },
531
+
532
+ _utc_to_local: function(utc) {
533
+ return utc && new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000));
534
+ },
535
+ _local_to_utc: function(local) {
536
+ return local && new Date(local.getTime() - (local.getTimezoneOffset() * 60000));
537
+ },
538
+ _zero_time: function(local) {
539
+ return local && new Date(local.getFullYear(), local.getMonth(), local.getDate());
540
+ },
541
+ _zero_utc_time: function(utc) {
542
+ return utc && new Date(Date.UTC(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate()));
543
+ },
544
+
545
+ getDates: function() {
546
+ return $.map(this.dates, this._utc_to_local);
547
+ },
548
+
549
+ getUTCDates: function() {
550
+ return $.map(this.dates, function(d) {
551
+ return new Date(d);
552
+ });
553
+ },
554
+
555
+ getDate: function() {
556
+ return this._utc_to_local(this.getUTCDate());
557
+ },
558
+
559
+ getUTCDate: function() {
560
+ var selected_date = this.dates.get(-1);
561
+ if( typeof selected_date !== 'undefined' ) {
562
+ return new Date(selected_date);
563
+ } else {
564
+ return null;
565
+ }
566
+ },
567
+
568
+ clearDates: function() {
569
+ var element;
570
+ if( this.isInput ) {
571
+ element = this.element;
572
+ } else if( this.component ) {
573
+ element = this.element.find('input');
574
+ }
575
+
576
+ if( element ) {
577
+ element.val('').change();
578
+ }
579
+
580
+ this.update();
581
+ this._trigger('changeDate');
582
+
583
+ if( this.o.autoclose ) {
584
+ this.hide();
585
+ }
586
+ },
587
+ setDates: function() {
588
+ var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
589
+ this.update.apply(this, args);
590
+ this._trigger('changeDate');
591
+ this.setValue();
592
+ return this;
593
+ },
594
+
595
+ setUTCDates: function() {
596
+ var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
597
+ this.update.apply(this, $.map(args, this._utc_to_local));
598
+ this._trigger('changeDate');
599
+ this.setValue();
600
+ return this;
601
+ },
602
+
603
+ setDate: alias('setDates'),
604
+ setUTCDate: alias('setUTCDates'),
605
+
606
+ setValue: function() {
607
+ var formatted = this.getFormattedDate();
608
+ if( !this.isInput ) {
609
+ if( this.component ) {
610
+ this.element.find('input').val(formatted).change();
611
+ }
612
+ }
613
+ else {
614
+ this.element.val(formatted).change();
615
+ }
616
+ return this;
617
+ },
618
+
619
+ getFormattedDate: function(format) {
620
+ if( format === undefined ) {
621
+ format = this.o.format;
622
+ }
623
+
624
+ var lang = this.o.language;
625
+ return $.map(this.dates, function(d) {
626
+ return DPGlobal.formatDate(d, format, lang);
627
+ }).join(this.o.multidateSeparator);
628
+ },
629
+
630
+ setStartDate: function(startDate) {
631
+ this._process_options({startDate: startDate});
632
+ this.update();
633
+ this.updateNavArrows();
634
+ return this;
635
+ },
636
+
637
+ setEndDate: function(endDate) {
638
+ this._process_options({endDate: endDate});
639
+ this.update();
640
+ this.updateNavArrows();
641
+ return this;
642
+ },
643
+
644
+ setDaysOfWeekDisabled: function(daysOfWeekDisabled) {
645
+ this._process_options({daysOfWeekDisabled: daysOfWeekDisabled});
646
+ this.update();
647
+ this.updateNavArrows();
648
+ return this;
649
+ },
650
+
651
+ setDatesDisabled: function(datesDisabled) {
652
+ this._process_options({datesDisabled: datesDisabled});
653
+ this.update();
654
+ this.updateNavArrows();
655
+ },
656
+
657
+ place: function() {
658
+ if( this.isInline ) {
659
+ return this;
660
+ }
661
+ var calendarWidth = this.picker.outerWidth(),
662
+ calendarHeight = this.picker.outerHeight(),
663
+ visualPadding = 10,
664
+ windowWidth = $(this.o.container).width(),
665
+ windowHeight = $(this.o.container).height(),
666
+ scrollTop = $(this.o.container).scrollTop(),
667
+ appendOffset = $(this.o.container).offset();
668
+
669
+ var parentsZindex = [];
670
+ this.element.parents().each(function() {
671
+ var itemZIndex = $(this).css('z-index');
672
+ if( itemZIndex !== 'auto' && itemZIndex !== 0 ) {
673
+ parentsZindex.push(parseInt(itemZIndex));
674
+ }
675
+ });
676
+ var zIndex = Math.max.apply(Math, parentsZindex) + 10;
677
+ var offset = this.component ? this.component.parent().offset() : this.element.offset();
678
+ var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);
679
+ var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);
680
+ var left = offset.left - appendOffset.left,
681
+ top = offset.top - appendOffset.top;
682
+
683
+ this.picker.removeClass(
684
+ 'datepicker-orient-top datepicker-orient-bottom ' +
685
+ 'datepicker-orient-right datepicker-orient-left'
686
+ );
687
+
688
+ if( this.o.orientation.x !== 'auto' ) {
689
+ this.picker.addClass('datepicker-orient-' + this.o.orientation.x);
690
+ if( this.o.orientation.x === 'right' ) {
691
+ left -= calendarWidth - width;
692
+ }
693
+ }
694
+ // auto x orientation is best-placement: if it crosses a window
695
+ // edge, fudge it sideways
696
+ else {
697
+ if( offset.left < 0 ) {
698
+ // component is outside the window on the left side. Move it into visible range
699
+ this.picker.addClass('datepicker-orient-left');
700
+ left -= offset.left - visualPadding;
701
+ } else if( left + calendarWidth > windowWidth ) {
702
+ // the calendar passes the widow right edge. Align it to component right side
703
+ this.picker.addClass('datepicker-orient-right');
704
+ left = offset.left + width - calendarWidth;
705
+ } else {
706
+ // Default to left
707
+ this.picker.addClass('datepicker-orient-left');
708
+ }
709
+ }
710
+
711
+ // auto y orientation is best-situation: top or bottom, no fudging,
712
+ // decision based on which shows more of the calendar
713
+ var yorient = this.o.orientation.y,
714
+ top_overflow, bottom_overflow;
715
+ if( yorient === 'auto' ) {
716
+ top_overflow = -scrollTop + top - calendarHeight;
717
+ bottom_overflow = scrollTop + windowHeight - (top + height + calendarHeight);
718
+ if( Math.max(top_overflow, bottom_overflow) === bottom_overflow ) {
719
+ yorient = 'top';
720
+ } else {
721
+ yorient = 'bottom';
722
+ }
723
+ }
724
+ this.picker.addClass('datepicker-orient-' + yorient);
725
+ if( yorient === 'top' ) {
726
+ top += height;
727
+ } else {
728
+ top -= calendarHeight + parseInt(this.picker.css('padding-top'));
729
+ }
730
+
731
+ if( this.o.rtl ) {
732
+ var right = windowWidth - (left + width);
733
+ this.picker.css({
734
+ top: top,
735
+ right: right,
736
+ zIndex: zIndex
737
+ });
738
+ } else {
739
+ this.picker.css({
740
+ top: top,
741
+ left: left,
742
+ zIndex: zIndex
743
+ });
744
+ }
745
+ return this;
746
+ },
747
+
748
+ _allow_update: true,
749
+ update: function() {
750
+ if( !this._allow_update ) {
751
+ return this;
752
+ }
753
+
754
+ var oldDates = this.dates.copy(),
755
+ dates = [],
756
+ fromArgs = false;
757
+ if( arguments.length ) {
758
+ $.each(arguments, $.proxy(function(i, date) {
759
+ if( date instanceof Date ) {
760
+ date = this._local_to_utc(date);
761
+ }
762
+ dates.push(date);
763
+ }, this));
764
+ fromArgs = true;
765
+ }
766
+ else {
767
+ dates = this.isInput
768
+ ? this.element.val()
769
+ : this.element.data('date') || this.element.find('input').val();
770
+ if( dates && this.o.multidate ) {
771
+ dates = dates.split(this.o.multidateSeparator);
772
+ } else {
773
+ dates = [dates];
774
+ }
775
+ delete this.element.data().date;
776
+ }
777
+
778
+ dates = $.map(dates, $.proxy(function(date) {
779
+ return DPGlobal.parseDate(date, this.o.format, this.o.language);
780
+ }, this));
781
+ dates = $.grep(dates, $.proxy(function(date) {
782
+ return (
783
+ date < this.o.startDate ||
784
+ date > this.o.endDate || !date
785
+ );
786
+ }, this), true);
787
+ this.dates.replace(dates);
788
+
789
+ if( this.dates.length ) {
790
+ this.viewDate = new Date(this.dates.get(-1));
791
+ } else if( this.viewDate < this.o.startDate ) {
792
+ this.viewDate = new Date(this.o.startDate);
793
+ } else if( this.viewDate > this.o.endDate ) {
794
+ this.viewDate = new Date(this.o.endDate);
795
+ }
796
+
797
+ if( fromArgs ) {
798
+ // setting date by clicking
799
+ this.setValue();
800
+ }
801
+ else if( dates.length ) {
802
+ // setting date by typing
803
+ if( String(oldDates) !== String(this.dates) ) {
804
+ this._trigger('changeDate');
805
+ }
806
+ }
807
+ if( !this.dates.length && oldDates.length ) {
808
+ this._trigger('clearDate');
809
+ }
810
+
811
+ this.fill();
812
+ return this;
813
+ },
814
+
815
+ fillDow: function() {
816
+ var dowCnt = this.o.weekStart,
817
+ html = '<tr>';
818
+ if( this.o.calendarWeeks ) {
819
+ this.picker.find('.datepicker-days thead tr:first-child .datepicker-switch')
820
+ .attr('colspan', function(i, val) {
821
+ return parseInt(val) + 1;
822
+ });
823
+ var cell = '<th class="cw">&#160;</th>';
824
+ html += cell;
825
+ }
826
+ while( dowCnt < this.o.weekStart + 7 ) {
827
+ html += '<th class="dow">' + dates[this.o.language].daysMin[(dowCnt++) % 7] + '</th>';
828
+ }
829
+ html += '</tr>';
830
+ this.picker.find('.datepicker-days thead').append(html);
831
+ },
832
+
833
+ fillMonths: function() {
834
+ var html = '',
835
+ i = 0;
836
+ while( i < 12 ) {
837
+ html += '<span class="month">' + dates[this.o.language].monthsShort[i++] + '</span>';
838
+ }
839
+ this.picker.find('.datepicker-months td').html(html);
840
+ },
841
+
842
+ setRange: function(range) {
843
+ if( !range || !range.length ) {
844
+ delete this.range;
845
+ } else {
846
+ this.range = $.map(range, function(d) {
847
+ return d.valueOf();
848
+ });
849
+ }
850
+ this.fill();
851
+ },
852
+
853
+ getClassNames: function(date) {
854
+ var cls = [],
855
+ year = this.viewDate.getUTCFullYear(),
856
+ month = this.viewDate.getUTCMonth(),
857
+ today = new Date();
858
+ if( date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month) ) {
859
+ cls.push('old');
860
+ }
861
+ else if( date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month) ) {
862
+ cls.push('new');
863
+ }
864
+ if( this.focusDate && date.valueOf() === this.focusDate.valueOf() ) {
865
+ cls.push('focused');
866
+ }
867
+ // Compare internal UTC date with local today, not UTC today
868
+ if( this.o.todayHighlight &&
869
+ date.getUTCFullYear() === today.getFullYear() &&
870
+ date.getUTCMonth() === today.getMonth() &&
871
+ date.getUTCDate() === today.getDate() ) {
872
+ cls.push('today');
873
+ }
874
+ if( this.dates.contains(date) !== -1 ) {
875
+ cls.push('active');
876
+ }
877
+ if( date.valueOf() < this.o.startDate || date.valueOf() > this.o.endDate ||
878
+ $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1 ) {
879
+ cls.push('disabled');
880
+ }
881
+ if( this.o.datesDisabled.length > 0 &&
882
+ $.grep(this.o.datesDisabled, function(d) {
883
+ return isUTCEquals(date, d);
884
+ }).length > 0 ) {
885
+ cls.push('disabled', 'disabled-date');
886
+ }
887
+
888
+ if( this.range ) {
889
+ if( date > this.range[0] && date < this.range[this.range.length - 1] ) {
890
+ cls.push('range');
891
+ }
892
+ if( $.inArray(date.valueOf(), this.range) !== -1 ) {
893
+ cls.push('selected');
894
+ }
895
+ }
896
+ return cls;
897
+ },
898
+
899
+ fill: function() {
900
+ var d = new Date(this.viewDate),
901
+ year = d.getUTCFullYear(),
902
+ month = d.getUTCMonth(),
903
+ startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,
904
+ startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,
905
+ endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,
906
+ endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,
907
+ todaytxt = dates[this.o.language].today || dates['en'].today || '',
908
+ cleartxt = dates[this.o.language].clear || dates['en'].clear || '',
909
+ tooltip;
910
+ if( isNaN(year) || isNaN(month) ) {
911
+ return;
912
+ }
913
+ this.picker.find('.datepicker-days thead .datepicker-switch')
914
+ .text(dates[this.o.language].months[month] + ' ' + year);
915
+ this.picker.find('tfoot .today')
916
+ .text(todaytxt)
917
+ .toggle(this.o.todayBtn !== false);
918
+ this.picker.find('tfoot .clear')
919
+ .text(cleartxt)
920
+ .toggle(this.o.clearBtn !== false);
921
+ this.updateNavArrows();
922
+ this.fillMonths();
923
+ var prevMonth = UTCDate(year, month - 1, 28),
924
+ day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());
925
+ prevMonth.setUTCDate(day);
926
+ prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7) % 7);
927
+ var nextMonth = new Date(prevMonth);
928
+ nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
929
+ nextMonth = nextMonth.valueOf();
930
+ var html = [];
931
+ var clsName;
932
+ while( prevMonth.valueOf() < nextMonth ) {
933
+ if( prevMonth.getUTCDay() === this.o.weekStart ) {
934
+ html.push('<tr>');
935
+ if( this.o.calendarWeeks ) {
936
+ // ISO 8601: First week contains first thursday.
937
+ // ISO also states week starts on Monday, but we can be more abstract here.
938
+ var
939
+ // Start of current week: based on weekstart/current date
940
+ ws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),
941
+ // Thursday of this week
942
+ th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),
943
+ // First Thursday of year, year from thursday
944
+ yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),
945
+ // Calendar week: ms between thursdays, div ms per day, div 7 days
946
+ calWeek = (th - yth) / 864e5 / 7 + 1;
947
+ html.push('<td class="cw">' + calWeek + '</td>');
948
+
949
+ }
950
+ }
951
+ clsName = this.getClassNames(prevMonth);
952
+ clsName.push('day');
953
+
954
+ if( this.o.beforeShowDay !== $.noop ) {
955
+ var before = this.o.beforeShowDay(this._utc_to_local(prevMonth));
956
+ if( before === undefined ) {
957
+ before = {};
958
+ } else if( typeof(before) === 'boolean' ) {
959
+ before = {enabled: before};
960
+ } else if( typeof(before) === 'string' ) {
961
+ before = {classes: before};
962
+ }
963
+ if( before.enabled === false ) {
964
+ clsName.push('disabled');
965
+ }
966
+ if( before.classes ) {
967
+ clsName = clsName.concat(before.classes.split(/\s+/));
968
+ }
969
+ if( before.tooltip ) {
970
+ tooltip = before.tooltip;
971
+ }
972
+ }
973
+
974
+ clsName = $.unique(clsName);
975
+ html.push('<td class="' + clsName.join(' ') + '"' + (tooltip
976
+ ? ' title="' + tooltip + '"'
977
+ : '') + '>' + prevMonth.getUTCDate() + '</td>');
978
+ tooltip = null;
979
+ if( prevMonth.getUTCDay() === this.o.weekEnd ) {
980
+ html.push('</tr>');
981
+ }
982
+ prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);
983
+ }
984
+ this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
985
+
986
+ var months = this.picker.find('.datepicker-months')
987
+ .find('th:eq(1)')
988
+ .text(year)
989
+ .end()
990
+ .find('span').removeClass('active');
991
+
992
+ $.each(this.dates, function(i, d) {
993
+ if( d.getUTCFullYear() === year ) {
994
+ months.eq(d.getUTCMonth()).addClass('active');
995
+ }
996
+ });
997
+
998
+ if( year < startYear || year > endYear ) {
999
+ months.addClass('disabled');
1000
+ }
1001
+ if( year === startYear ) {
1002
+ months.slice(0, startMonth).addClass('disabled');
1003
+ }
1004
+ if( year === endYear ) {
1005
+ months.slice(endMonth + 1).addClass('disabled');
1006
+ }
1007
+
1008
+ if( this.o.beforeShowMonth !== $.noop ) {
1009
+ var that = this;
1010
+ $.each(months, function(i, month) {
1011
+ if( !$(month).hasClass('disabled') ) {
1012
+ var moDate = new Date(year, i, 1);
1013
+ var before = that.o.beforeShowMonth(moDate);
1014
+ if( before === false ) {
1015
+ $(month).addClass('disabled');
1016
+ }
1017
+ }
1018
+ });
1019
+ }
1020
+
1021
+ html = '';
1022
+ year = parseInt(year / 10, 10) * 10;
1023
+ var yearCont = this.picker.find('.datepicker-years')
1024
+ .find('th:eq(1)')
1025
+ .text(year + '-' + (year + 9))
1026
+ .end()
1027
+ .find('td');
1028
+ year -= 1;
1029
+ var years = $.map(this.dates, function(d) {
1030
+ return d.getUTCFullYear();
1031
+ }),
1032
+ classes;
1033
+ for( var i = -1; i < 11; i++ ) {
1034
+ classes = ['year'];
1035
+ if( i === -1 ) {
1036
+ classes.push('old');
1037
+ } else if( i === 10 ) {
1038
+ classes.push('new');
1039
+ }
1040
+ if( $.inArray(year, years) !== -1 ) {
1041
+ classes.push('active');
1042
+ }
1043
+ if( year < startYear || year > endYear ) {
1044
+ classes.push('disabled');
1045
+ }
1046
+ html += '<span class="' + classes.join(' ') + '">' + year + '</span>';
1047
+ year += 1;
1048
+ }
1049
+ yearCont.html(html);
1050
+ },
1051
+
1052
+ updateNavArrows: function() {
1053
+ if( !this._allow_update ) {
1054
+ return;
1055
+ }
1056
+
1057
+ var d = new Date(this.viewDate),
1058
+ year = d.getUTCFullYear(),
1059
+ month = d.getUTCMonth();
1060
+ switch( this.viewMode ) {
1061
+ case 0:
1062
+ if( this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth() ) {
1063
+ this.picker.find('.prev').css({visibility: 'hidden'});
1064
+ }
1065
+ else {
1066
+ this.picker.find('.prev').css({visibility: 'visible'});
1067
+ }
1068
+ if( this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth() ) {
1069
+ this.picker.find('.next').css({visibility: 'hidden'});
1070
+ }
1071
+ else {
1072
+ this.picker.find('.next').css({visibility: 'visible'});
1073
+ }
1074
+ break;
1075
+ case 1:
1076
+ case 2:
1077
+ if( this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() ) {
1078
+ this.picker.find('.prev').css({visibility: 'hidden'});
1079
+ }
1080
+ else {
1081
+ this.picker.find('.prev').css({visibility: 'visible'});
1082
+ }
1083
+ if( this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() ) {
1084
+ this.picker.find('.next').css({visibility: 'hidden'});
1085
+ }
1086
+ else {
1087
+ this.picker.find('.next').css({visibility: 'visible'});
1088
+ }
1089
+ break;
1090
+ }
1091
+ },
1092
+
1093
+ click: function(e) {
1094
+ e.preventDefault();
1095
+ var target = $(e.target).closest('span, td, th'),
1096
+ year, month, day;
1097
+ if( target.length === 1 ) {
1098
+ switch( target[0].nodeName.toLowerCase() ) {
1099
+ case 'th':
1100
+ switch( target[0].className ) {
1101
+ case 'datepicker-switch':
1102
+ this.showMode(1);
1103
+ break;
1104
+ case 'prev':
1105
+ case 'next':
1106
+ var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev'
1107
+ ? -1
1108
+ : 1);
1109
+ switch( this.viewMode ) {
1110
+ case 0:
1111
+ this.viewDate = this.moveMonth(this.viewDate, dir);
1112
+ this._trigger('changeMonth', this.viewDate);
1113
+ break;
1114
+ case 1:
1115
+ case 2:
1116
+ this.viewDate = this.moveYear(this.viewDate, dir);
1117
+ if( this.viewMode === 1 ) {
1118
+ this._trigger('changeYear', this.viewDate);
1119
+ }
1120
+ break;
1121
+ }
1122
+ this.fill();
1123
+ break;
1124
+ case 'today':
1125
+ var date = new Date();
1126
+ date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
1127
+
1128
+ this.showMode(-2);
1129
+ var which = this.o.todayBtn === 'linked' ? null : 'view';
1130
+ this._setDate(date, which);
1131
+ break;
1132
+ case 'clear':
1133
+ this.clearDates();
1134
+ break;
1135
+ }
1136
+ break;
1137
+ case 'span':
1138
+ if( !target.hasClass('disabled') ) {
1139
+ this.viewDate.setUTCDate(1);
1140
+ if( target.hasClass('month') ) {
1141
+ day = 1;
1142
+ month = target.parent().find('span').index(target);
1143
+ year = this.viewDate.getUTCFullYear();
1144
+ this.viewDate.setUTCMonth(month);
1145
+ this._trigger('changeMonth', this.viewDate);
1146
+ if( this.o.minViewMode === 1 ) {
1147
+ this._setDate(UTCDate(year, month, day));
1148
+ this.showMode();
1149
+ } else {
1150
+ this.showMode(-1);
1151
+ }
1152
+ }
1153
+ else {
1154
+ day = 1;
1155
+ month = 0;
1156
+ year = parseInt(target.text(), 10) || 0;
1157
+ this.viewDate.setUTCFullYear(year);
1158
+ this._trigger('changeYear', this.viewDate);
1159
+ if( this.o.minViewMode === 2 ) {
1160
+ this._setDate(UTCDate(year, month, day));
1161
+ }
1162
+ this.showMode(-1);
1163
+ }
1164
+ this.fill();
1165
+ }
1166
+ break;
1167
+ case 'td':
1168
+ if( target.hasClass('day') && !target.hasClass('disabled') ) {
1169
+ day = parseInt(target.text(), 10) || 1;
1170
+ year = this.viewDate.getUTCFullYear();
1171
+ month = this.viewDate.getUTCMonth();
1172
+ if( target.hasClass('old') ) {
1173
+ if( month === 0 ) {
1174
+ month = 11;
1175
+ year -= 1;
1176
+ }
1177
+ else {
1178
+ month -= 1;
1179
+ }
1180
+ }
1181
+ else if( target.hasClass('new') ) {
1182
+ if( month === 11 ) {
1183
+ month = 0;
1184
+ year += 1;
1185
+ }
1186
+ else {
1187
+ month += 1;
1188
+ }
1189
+ }
1190
+ this._setDate(UTCDate(year, month, day));
1191
+ }
1192
+ break;
1193
+ }
1194
+ }
1195
+ if( this.picker.is(':visible') && this._focused_from ) {
1196
+ $(this._focused_from).focus();
1197
+ }
1198
+ delete this._focused_from;
1199
+ },
1200
+
1201
+ _toggle_multidate: function(date) {
1202
+ var ix = this.dates.contains(date);
1203
+ if( !date ) {
1204
+ this.dates.clear();
1205
+ }
1206
+
1207
+ if( ix !== -1 ) {
1208
+ if( this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive ) {
1209
+ this.dates.remove(ix);
1210
+ }
1211
+ } else if( this.o.multidate === false ) {
1212
+ this.dates.clear();
1213
+ this.dates.push(date);
1214
+ }
1215
+ else {
1216
+ this.dates.push(date);
1217
+ }
1218
+
1219
+ if( typeof this.o.multidate === 'number' ) {
1220
+ while( this.dates.length > this.o.multidate ) {
1221
+ this.dates.remove(0);
1222
+ }
1223
+ }
1224
+ },
1225
+
1226
+ _setDate: function(date, which) {
1227
+ if( !which || which === 'date' ) {
1228
+ this._toggle_multidate(date && new Date(date));
1229
+ }
1230
+ if( !which || which === 'view' ) {
1231
+ this.viewDate = date && new Date(date);
1232
+ }
1233
+
1234
+ this.fill();
1235
+ this.setValue();
1236
+ if( !which || which !== 'view' ) {
1237
+ this._trigger('changeDate');
1238
+ }
1239
+ var element;
1240
+ if( this.isInput ) {
1241
+ element = this.element;
1242
+ }
1243
+ else if( this.component ) {
1244
+ element = this.element.find('input');
1245
+ }
1246
+ if( element ) {
1247
+ element.change();
1248
+ }
1249
+ if( this.o.autoclose && (!which || which === 'date') ) {
1250
+ this.hide();
1251
+ }
1252
+ },
1253
+
1254
+ moveMonth: function(date, dir) {
1255
+ if( !date ) {
1256
+ return undefined;
1257
+ }
1258
+ if( !dir ) {
1259
+ return date;
1260
+ }
1261
+ var new_date = new Date(date.valueOf()),
1262
+ day = new_date.getUTCDate(),
1263
+ month = new_date.getUTCMonth(),
1264
+ mag = Math.abs(dir),
1265
+ new_month, test;
1266
+ dir = dir > 0 ? 1 : -1;
1267
+ if( mag === 1 ) {
1268
+ test = dir === -1
1269
+ // If going back one month, make sure month is not current month
1270
+ // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)
1271
+ ? function() {
1272
+ return new_date.getUTCMonth() === month;
1273
+ }
1274
+ // If going forward one month, make sure month is as expected
1275
+ // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)
1276
+ : function() {
1277
+ return new_date.getUTCMonth() !== new_month;
1278
+ };
1279
+ new_month = month + dir;
1280
+ new_date.setUTCMonth(new_month);
1281
+ // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11
1282
+ if( new_month < 0 || new_month > 11 ) {
1283
+ new_month = (new_month + 12) % 12;
1284
+ }
1285
+ }
1286
+ else {
1287
+ // For magnitudes >1, move one month at a time...
1288
+ for( var i = 0; i < mag; i++ )
1289
+ // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...
1290
+ {
1291
+ new_date = this.moveMonth(new_date, dir);
1292
+ }
1293
+ // ...then reset the day, keeping it in the new month
1294
+ new_month = new_date.getUTCMonth();
1295
+ new_date.setUTCDate(day);
1296
+ test = function() {
1297
+ return new_month !== new_date.getUTCMonth();
1298
+ };
1299
+ }
1300
+ // Common date-resetting loop -- if date is beyond end of month, make it
1301
+ // end of month
1302
+ while( test() ) {
1303
+ new_date.setUTCDate(--day);
1304
+ new_date.setUTCMonth(new_month);
1305
+ }
1306
+ return new_date;
1307
+ },
1308
+
1309
+ moveYear: function(date, dir) {
1310
+ return this.moveMonth(date, dir * 12);
1311
+ },
1312
+
1313
+ dateWithinRange: function(date) {
1314
+ return date >= this.o.startDate && date <= this.o.endDate;
1315
+ },
1316
+
1317
+ keydown: function(e) {
1318
+ if( !this.picker.is(':visible') ) {
1319
+ if( e.keyCode === 40 || e.keyCode === 27 ) // allow down to re-show picker
1320
+ {
1321
+ this.show();
1322
+ }
1323
+ return;
1324
+ }
1325
+ var dateChanged = false,
1326
+ dir, newDate, newViewDate,
1327
+ focusDate = this.focusDate || this.viewDate;
1328
+ switch( e.keyCode ) {
1329
+ case 27: // escape
1330
+ if( this.focusDate ) {
1331
+ this.focusDate = null;
1332
+ this.viewDate = this.dates.get(-1) || this.viewDate;
1333
+ this.fill();
1334
+ }
1335
+ else {
1336
+ this.hide();
1337
+ }
1338
+ e.preventDefault();
1339
+ break;
1340
+ case 37: // left
1341
+ case 39: // right
1342
+ if( !this.o.keyboardNavigation ) {
1343
+ break;
1344
+ }
1345
+ dir = e.keyCode === 37 ? -1 : 1;
1346
+ if( e.ctrlKey ) {
1347
+ newDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir);
1348
+ newViewDate = this.moveYear(focusDate, dir);
1349
+ this._trigger('changeYear', this.viewDate);
1350
+ }
1351
+ else if( e.shiftKey ) {
1352
+ newDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir);
1353
+ newViewDate = this.moveMonth(focusDate, dir);
1354
+ this._trigger('changeMonth', this.viewDate);
1355
+ }
1356
+ else {
1357
+ newDate = new Date(this.dates.get(-1) || UTCToday());
1358
+ newDate.setUTCDate(newDate.getUTCDate() + dir);
1359
+ newViewDate = new Date(focusDate);
1360
+ newViewDate.setUTCDate(focusDate.getUTCDate() + dir);
1361
+ }
1362
+ if( this.dateWithinRange(newViewDate) ) {
1363
+ this.focusDate = this.viewDate = newViewDate;
1364
+ this.setValue();
1365
+ this.fill();
1366
+ e.preventDefault();
1367
+ }
1368
+ break;
1369
+ case 38: // up
1370
+ case 40: // down
1371
+ if( !this.o.keyboardNavigation ) {
1372
+ break;
1373
+ }
1374
+ dir = e.keyCode === 38 ? -1 : 1;
1375
+ if( e.ctrlKey ) {
1376
+ newDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir);
1377
+ newViewDate = this.moveYear(focusDate, dir);
1378
+ this._trigger('changeYear', this.viewDate);
1379
+ }
1380
+ else if( e.shiftKey ) {
1381
+ newDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir);
1382
+ newViewDate = this.moveMonth(focusDate, dir);
1383
+ this._trigger('changeMonth', this.viewDate);
1384
+ }
1385
+ else {
1386
+ newDate = new Date(this.dates.get(-1) || UTCToday());
1387
+ newDate.setUTCDate(newDate.getUTCDate() + dir * 7);
1388
+ newViewDate = new Date(focusDate);
1389
+ newViewDate.setUTCDate(focusDate.getUTCDate() + dir * 7);
1390
+ }
1391
+ if( this.dateWithinRange(newViewDate) ) {
1392
+ this.focusDate = this.viewDate = newViewDate;
1393
+ this.setValue();
1394
+ this.fill();
1395
+ e.preventDefault();
1396
+ }
1397
+ break;
1398
+ case 32: // spacebar
1399
+ // Spacebar is used in manually typing dates in some formats.
1400
+ // As such, its behavior should not be hijacked.
1401
+ break;
1402
+ case 13: // enter
1403
+ focusDate = this.focusDate || this.dates.get(-1) || this.viewDate;
1404
+ if( this.o.keyboardNavigation ) {
1405
+ this._toggle_multidate(focusDate);
1406
+ dateChanged = true;
1407
+ }
1408
+ this.focusDate = null;
1409
+ this.viewDate = this.dates.get(-1) || this.viewDate;
1410
+ this.setValue();
1411
+ this.fill();
1412
+ if( this.picker.is(':visible') ) {
1413
+ e.preventDefault();
1414
+ if( typeof e.stopPropagation === 'function' ) {
1415
+ e.stopPropagation(); // All modern browsers, IE9+
1416
+ } else {
1417
+ e.cancelBubble = true; // IE6,7,8 ignore "stopPropagation"
1418
+ }
1419
+ if( this.o.autoclose ) {
1420
+ this.hide();
1421
+ }
1422
+ }
1423
+ break;
1424
+ case 9: // tab
1425
+ this.focusDate = null;
1426
+ this.viewDate = this.dates.get(-1) || this.viewDate;
1427
+ this.fill();
1428
+ this.hide();
1429
+ break;
1430
+ }
1431
+ if( dateChanged ) {
1432
+ if( this.dates.length ) {
1433
+ this._trigger('changeDate');
1434
+ } else {
1435
+ this._trigger('clearDate');
1436
+ }
1437
+ var element;
1438
+ if( this.isInput ) {
1439
+ element = this.element;
1440
+ }
1441
+ else if( this.component ) {
1442
+ element = this.element.find('input');
1443
+ }
1444
+ if( element ) {
1445
+ element.change();
1446
+ }
1447
+ }
1448
+ },
1449
+
1450
+ showMode: function(dir) {
1451
+ if( dir ) {
1452
+ this.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + dir));
1453
+ }
1454
+ this.picker
1455
+ .children('div')
1456
+ .hide()
1457
+ .filter('.datepicker-' + DPGlobal.modes[this.viewMode].clsName)
1458
+ .css('display', 'block');
1459
+ this.updateNavArrows();
1460
+ }
1461
+ };
1462
+
1463
+ var DateRangePicker = function(element, options) {
1464
+ this.element = $(element);
1465
+ this.inputs = $.map(options.inputs, function(i) {
1466
+ return i.jquery ? i[0] : i;
1467
+ });
1468
+ delete options.inputs;
1469
+
1470
+ datepickerPlugin.call($(this.inputs), options)
1471
+ .on('changeDate', $.proxy(this.dateUpdated, this));
1472
+
1473
+ this.pickers = $.map(this.inputs, function(i) {
1474
+ return $(i).data('datepicker');
1475
+ });
1476
+ this.updateDates();
1477
+ };
1478
+ DateRangePicker.prototype = {
1479
+ updateDates: function() {
1480
+ this.dates = $.map(this.pickers, function(i) {
1481
+ return i.getUTCDate();
1482
+ });
1483
+ this.updateRanges();
1484
+ },
1485
+ updateRanges: function() {
1486
+ var range = $.map(this.dates, function(d) {
1487
+ return d.valueOf();
1488
+ });
1489
+ $.each(this.pickers, function(i, p) {
1490
+ p.setRange(range);
1491
+ });
1492
+ },
1493
+ dateUpdated: function(e) {
1494
+ // `this.updating` is a workaround for preventing infinite recursion
1495
+ // between `changeDate` triggering and `setUTCDate` calling. Until
1496
+ // there is a better mechanism.
1497
+ if( this.updating ) {
1498
+ return;
1499
+ }
1500
+ this.updating = true;
1501
+
1502
+ var dp = $(e.target).data('datepicker'),
1503
+ new_date = dp.getUTCDate(),
1504
+ i = $.inArray(e.target, this.inputs),
1505
+ j = i - 1,
1506
+ k = i + 1,
1507
+ l = this.inputs.length;
1508
+ if( i === -1 ) {
1509
+ return;
1510
+ }
1511
+
1512
+ $.each(this.pickers, function(i, p) {
1513
+ if( !p.getUTCDate() ) {
1514
+ p.setUTCDate(new_date);
1515
+ }
1516
+ });
1517
+
1518
+ if( new_date < this.dates[j] ) {
1519
+ // Date being moved earlier/left
1520
+ while( j >= 0 && new_date < this.dates[j] ) {
1521
+ this.pickers[j--].setUTCDate(new_date);
1522
+ }
1523
+ }
1524
+ else if( new_date > this.dates[k] ) {
1525
+ // Date being moved later/right
1526
+ while( k < l && new_date > this.dates[k] ) {
1527
+ this.pickers[k++].setUTCDate(new_date);
1528
+ }
1529
+ }
1530
+ this.updateDates();
1531
+
1532
+ delete this.updating;
1533
+ },
1534
+ remove: function() {
1535
+ $.map(this.pickers, function(p) {
1536
+ p.remove();
1537
+ });
1538
+ delete this.element.data().datepicker;
1539
+ }
1540
+ };
1541
+
1542
+ function opts_from_el(el, prefix) {
1543
+ // Derive options from element data-attrs
1544
+ var data = $(el).data(),
1545
+ out = {}, inkey,
1546
+ replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');
1547
+ prefix = new RegExp('^' + prefix.toLowerCase());
1548
+ function re_lower(_, a) {
1549
+ return a.toLowerCase();
1550
+ }
1551
+
1552
+ for( var key in data ) {
1553
+ if( prefix.test(key) ) {
1554
+ inkey = key.replace(replace, re_lower);
1555
+ out[inkey] = data[key];
1556
+ }
1557
+ }
1558
+ return out;
1559
+ }
1560
+
1561
+ function opts_from_locale(lang) {
1562
+ // Derive options from locale plugins
1563
+ var out = {};
1564
+ // Check if "de-DE" style date is available, if not language should
1565
+ // fallback to 2 letter code eg "de"
1566
+ if( !dates[lang] ) {
1567
+ lang = lang.split('-')[0];
1568
+ if( !dates[lang] ) {
1569
+ return;
1570
+ }
1571
+ }
1572
+ var d = dates[lang];
1573
+ $.each(locale_opts, function(i, k) {
1574
+ if( k in d ) {
1575
+ out[k] = d[k];
1576
+ }
1577
+ });
1578
+ return out;
1579
+ }
1580
+
1581
+ var old = $.fn.datepicker;
1582
+ var datepickerPlugin = function(option) {
1583
+ var args = Array.apply(null, arguments);
1584
+ args.shift();
1585
+ var internal_return;
1586
+ this.each(function() {
1587
+ var $this = $(this),
1588
+ data = $this.data('datepicker'),
1589
+ options = typeof option === 'object' && option;
1590
+ if( !data ) {
1591
+ var elopts = opts_from_el(this, 'date'),
1592
+ // Preliminary otions
1593
+ xopts = $.extend({}, defaults, elopts, options),
1594
+ locopts = opts_from_locale(xopts.language),
1595
+ // Options priority: js args, data-attrs, locales, defaults
1596
+ opts = $.extend({}, defaults, locopts, elopts, options);
1597
+ if( $this.hasClass('input-daterange') || opts.inputs ) {
1598
+ var ropts = {
1599
+ inputs: opts.inputs || $this.find('input').toArray()
1600
+ };
1601
+ $this.data('datepicker', (data = new DateRangePicker(this, $.extend(opts, ropts))));
1602
+ }
1603
+ else {
1604
+ $this.data('datepicker', (data = new Datepicker(this, opts)));
1605
+ }
1606
+ }
1607
+ if( typeof option === 'string' && typeof data[option] === 'function' ) {
1608
+ internal_return = data[option].apply(data, args);
1609
+ if( internal_return !== undefined ) {
1610
+ return false;
1611
+ }
1612
+ }
1613
+ });
1614
+ if( internal_return !== undefined ) {
1615
+ return internal_return;
1616
+ } else {
1617
+ return this;
1618
+ }
1619
+ };
1620
+ $.fn.datepicker = datepickerPlugin;
1621
+
1622
+ var defaults = $.fn.datepicker.defaults = {
1623
+ autoclose: false,
1624
+ beforeShowDay: $.noop,
1625
+ beforeShowMonth: $.noop,
1626
+ calendarWeeks: false,
1627
+ clearBtn: false,
1628
+ toggleActive: false,
1629
+ daysOfWeekDisabled: [],
1630
+ datesDisabled: [],
1631
+ endDate: Infinity,
1632
+ forceParse: true,
1633
+ format: 'mm/dd/yyyy',
1634
+ keyboardNavigation: true,
1635
+ language: 'en',
1636
+ minViewMode: 0,
1637
+ multidate: false,
1638
+ multidateSeparator: ',',
1639
+ orientation: "auto",
1640
+ rtl: false,
1641
+ startDate: -Infinity,
1642
+ startView: 0,
1643
+ todayBtn: false,
1644
+ todayHighlight: false,
1645
+ weekStart: 0,
1646
+ disableTouchKeyboard: false,
1647
+ enableOnReadonly: true,
1648
+ container: 'body',
1649
+ immediateUpdates: false
1650
+ };
1651
+ var locale_opts = $.fn.datepicker.locale_opts = [
1652
+ 'format',
1653
+ 'rtl',
1654
+ 'weekStart'
1655
+ ];
1656
+ $.fn.datepicker.Constructor = Datepicker;
1657
+ var dates = $.fn.datepicker.dates = {
1658
+ en: {
1659
+ days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
1660
+ daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
1661
+ daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
1662
+ months: [
1663
+ "January",
1664
+ "February",
1665
+ "March",
1666
+ "April",
1667
+ "May",
1668
+ "June",
1669
+ "July",
1670
+ "August",
1671
+ "September",
1672
+ "October",
1673
+ "November",
1674
+ "December"
1675
+ ],
1676
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
1677
+ today: "Today",
1678
+ clear: "Clear"
1679
+ },
1680
+ ru: {
1681
+ days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"],
1682
+ daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб"],
1683
+ daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
1684
+ months: [
1685
+ "Январь",
1686
+ "Февраль",
1687
+ "Март",
1688
+ "Апрель",
1689
+ "Май",
1690
+ "Июнь",
1691
+ "Июль",
1692
+ "Август",
1693
+ "Сентябрь",
1694
+ "Октябрь",
1695
+ "Ноябрь",
1696
+ "Декабрь"
1697
+ ],
1698
+ monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
1699
+ today: "Сегодня",
1700
+ clear: "Очистить",
1701
+ format: "dd/mm/yyyy",
1702
+ weekStart: 1,
1703
+ monthsTitle: 'Месяцы'
1704
+ }
1705
+ };
1706
+
1707
+ var DPGlobal = {
1708
+ modes: [
1709
+ {
1710
+ clsName: 'days',
1711
+ navFnc: 'Month',
1712
+ navStep: 1
1713
+ },
1714
+ {
1715
+ clsName: 'months',
1716
+ navFnc: 'FullYear',
1717
+ navStep: 1
1718
+ },
1719
+ {
1720
+ clsName: 'years',
1721
+ navFnc: 'FullYear',
1722
+ navStep: 10
1723
+ }
1724
+ ],
1725
+ isLeapYear: function(year) {
1726
+ return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));
1727
+ },
1728
+ getDaysInMonth: function(year, month) {
1729
+ return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
1730
+ },
1731
+ validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,
1732
+ nonpunctuation: /[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,
1733
+ parseFormat: function(format) {
1734
+ // IE treats \0 as a string end in inputs (truncating the value),
1735
+ // so it's a bad format delimiter, anyway
1736
+ var separators = format.replace(this.validParts, '\0').split('\0'),
1737
+ parts = format.match(this.validParts);
1738
+ if( !separators || !separators.length || !parts || parts.length === 0 ) {
1739
+ throw new Error("Invalid date format.");
1740
+ }
1741
+ return {
1742
+ separators: separators,
1743
+ parts: parts
1744
+ };
1745
+ },
1746
+ parseDate: function(date, format, language) {
1747
+ if( !date ) {
1748
+ return undefined;
1749
+ }
1750
+ if( date instanceof Date ) {
1751
+ return date;
1752
+ }
1753
+ if( typeof format === 'string' ) {
1754
+ format = DPGlobal.parseFormat(format);
1755
+ }
1756
+ var part_re = /([\-+]\d+)([dmwy])/,
1757
+ parts = date.match(/([\-+]\d+)([dmwy])/g),
1758
+ part, dir, i;
1759
+ if( /^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(date) ) {
1760
+ date = new Date();
1761
+ for( i = 0; i < parts.length; i++ ) {
1762
+ part = part_re.exec(parts[i]);
1763
+ dir = parseInt(part[1]);
1764
+ switch( part[2] ) {
1765
+ case 'd':
1766
+ date.setUTCDate(date.getUTCDate() + dir);
1767
+ break;
1768
+ case 'm':
1769
+ date = Datepicker.prototype.moveMonth.call(Datepicker.prototype, date, dir);
1770
+ break;
1771
+ case 'w':
1772
+ date.setUTCDate(date.getUTCDate() + dir * 7);
1773
+ break;
1774
+ case 'y':
1775
+ date = Datepicker.prototype.moveYear.call(Datepicker.prototype, date, dir);
1776
+ break;
1777
+ }
1778
+ }
1779
+ return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0);
1780
+ }
1781
+ parts = date && date.match(this.nonpunctuation) || [];
1782
+ date = new Date();
1783
+ var parsed = {},
1784
+ setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],
1785
+ setters_map = {
1786
+ yyyy: function(d, v) {
1787
+ return d.setUTCFullYear(v);
1788
+ },
1789
+ yy: function(d, v) {
1790
+ return d.setUTCFullYear(2000 + v);
1791
+ },
1792
+ m: function(d, v) {
1793
+ if( isNaN(d) ) {
1794
+ return d;
1795
+ }
1796
+ v -= 1;
1797
+ while( v < 0 ) {
1798
+ v += 12;
1799
+ }
1800
+ v %= 12;
1801
+ d.setUTCMonth(v);
1802
+ while( d.getUTCMonth() !== v ) {
1803
+ d.setUTCDate(d.getUTCDate() - 1);
1804
+ }
1805
+ return d;
1806
+ },
1807
+ d: function(d, v) {
1808
+ return d.setUTCDate(v);
1809
+ }
1810
+ },
1811
+ val, filtered;
1812
+ setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
1813
+ setters_map['dd'] = setters_map['d'];
1814
+ date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
1815
+ var fparts = format.parts.slice();
1816
+ // Remove noop parts
1817
+ if( parts.length !== fparts.length ) {
1818
+ fparts = $(fparts).filter(function(i, p) {
1819
+ return $.inArray(p, setters_order) !== -1;
1820
+ }).toArray();
1821
+ }
1822
+ // Process remainder
1823
+ function match_part() {
1824
+ var m = this.slice(0, parts[i].length),
1825
+ p = parts[i].slice(0, m.length);
1826
+ return m.toLowerCase() === p.toLowerCase();
1827
+ }
1828
+
1829
+ if( parts.length === fparts.length ) {
1830
+ var cnt;
1831
+ for( i = 0, cnt = fparts.length; i < cnt; i++ ) {
1832
+ val = parseInt(parts[i], 10);
1833
+ part = fparts[i];
1834
+ if( isNaN(val) ) {
1835
+ switch( part ) {
1836
+ case 'MM':
1837
+ filtered = $(dates[language].months).filter(match_part);
1838
+ val = $.inArray(filtered[0], dates[language].months) + 1;
1839
+ break;
1840
+ case 'M':
1841
+ filtered = $(dates[language].monthsShort).filter(match_part);
1842
+ val = $.inArray(filtered[0], dates[language].monthsShort) + 1;
1843
+ break;
1844
+ }
1845
+ }
1846
+ parsed[part] = val;
1847
+ }
1848
+ var _date, s;
1849
+ for( i = 0; i < setters_order.length; i++ ) {
1850
+ s = setters_order[i];
1851
+ if( s in parsed && !isNaN(parsed[s]) ) {
1852
+ _date = new Date(date);
1853
+ setters_map[s](_date, parsed[s]);
1854
+ if( !isNaN(_date) ) {
1855
+ date = _date;
1856
+ }
1857
+ }
1858
+ }
1859
+ }
1860
+ return date;
1861
+ },
1862
+ formatDate: function(date, format, language) {
1863
+ if( !date ) {
1864
+ return '';
1865
+ }
1866
+ if( typeof format === 'string' ) {
1867
+ format = DPGlobal.parseFormat(format);
1868
+ }
1869
+ var val = {
1870
+ d: date.getUTCDate(),
1871
+ D: dates[language].daysShort[date.getUTCDay()],
1872
+ DD: dates[language].days[date.getUTCDay()],
1873
+ m: date.getUTCMonth() + 1,
1874
+ M: dates[language].monthsShort[date.getUTCMonth()],
1875
+ MM: dates[language].months[date.getUTCMonth()],
1876
+ yy: date.getUTCFullYear().toString().substring(2),
1877
+ yyyy: date.getUTCFullYear()
1878
+ };
1879
+ val.dd = (val.d < 10 ? '0' : '') + val.d;
1880
+ val.mm = (val.m < 10 ? '0' : '') + val.m;
1881
+ date = [];
1882
+ var seps = $.extend([], format.separators);
1883
+ for( var i = 0, cnt = format.parts.length; i <= cnt; i++ ) {
1884
+ if( seps.length ) {
1885
+ date.push(seps.shift());
1886
+ }
1887
+ date.push(val[format.parts[i]]);
1888
+ }
1889
+ return date.join('');
1890
+ },
1891
+ headTemplate: '<thead>' +
1892
+ '<tr>' +
1893
+ '<th class="prev">&#171;</th>' +
1894
+ '<th colspan="5" class="datepicker-switch"></th>' +
1895
+ '<th class="next">&#187;</th>' +
1896
+ '</tr>' +
1897
+ '</thead>',
1898
+ contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
1899
+ footTemplate: '<tfoot>' +
1900
+ '<tr>' +
1901
+ '<th colspan="7" class="today"></th>' +
1902
+ '</tr>' +
1903
+ '<tr>' +
1904
+ '<th colspan="7" class="clear"></th>' +
1905
+ '</tr>' +
1906
+ '</tfoot>'
1907
+ };
1908
+ DPGlobal.template = '<div class="datepicker">' +
1909
+ '<div class="datepicker-days">' +
1910
+ '<table class=" table-condensed">' +
1911
+ DPGlobal.headTemplate +
1912
+ '<tbody></tbody>' +
1913
+ DPGlobal.footTemplate +
1914
+ '</table>' +
1915
+ '</div>' +
1916
+ '<div class="datepicker-months">' +
1917
+ '<table class="table-condensed">' +
1918
+ DPGlobal.headTemplate +
1919
+ DPGlobal.contTemplate +
1920
+ DPGlobal.footTemplate +
1921
+ '</table>' +
1922
+ '</div>' +
1923
+ '<div class="datepicker-years">' +
1924
+ '<table class="table-condensed">' +
1925
+ DPGlobal.headTemplate +
1926
+ DPGlobal.contTemplate +
1927
+ DPGlobal.footTemplate +
1928
+ '</table>' +
1929
+ '</div>' +
1930
+ '</div>';
1931
+
1932
+ $.fn.datepicker.DPGlobal = DPGlobal;
1933
+
1934
+ /* DATEPICKER NO CONFLICT
1935
+ * =================== */
1936
+
1937
+ $.fn.datepicker.noConflict = function() {
1938
+ $.fn.datepicker = old;
1939
+ return this;
1940
+ };
1941
+
1942
+ /* DATEPICKER VERSION
1943
+ * =================== */
1944
+ $.fn.datepicker.version = "1.4.1-dev";
1945
+
1946
+ /* DATEPICKER DATA-API
1947
+ * ================== */
1948
+
1949
+ $(document).on(
1950
+ 'focus.datepicker.data-api click.datepicker.data-api',
1951
+ '[data-provide="datepicker"]',
1952
+ function(e) {
1953
+ var $this = $(this);
1954
+ if( $this.data('datepicker') ) {
1955
+ return;
1956
+ }
1957
+ e.preventDefault();
1958
+ // component click requires us to explicitly show it
1959
+ datepickerPlugin.call($this, 'show');
1960
+ }
1961
+ );
1962
+ $(function() {
1963
+ datepickerPlugin.call($('[data-provide="datepicker-inline"]'));
1964
+ });
1965
+
1966
+ }(window.jQuery));
libs/factory/bootstrap/assets/js/bootstrap.dropdown.js ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.factoryBootstrap329_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.factoryBootstrap329_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.modal.js ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ========================================================================
2
+ * Bootstrap: modal.js v3.0.3
3
+ * http://getbootstrap.com/javascript/#modals
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
+ // MODAL CLASS DEFINITION
24
+ // ======================
25
+
26
+ var Modal = function (element, options) {
27
+ this.options = options
28
+ this.$element = $(element)
29
+ this.$backdrop =
30
+ this.isShown = null
31
+
32
+ if (this.options.remote) this.$element.load(this.options.remote)
33
+ }
34
+
35
+ Modal.DEFAULTS = {
36
+ backdrop: true
37
+ , keyboard: true
38
+ , show: true
39
+ }
40
+
41
+ Modal.prototype.toggle = function (_relatedTarget) {
42
+ return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
43
+ }
44
+
45
+ Modal.prototype.show = function (_relatedTarget) {
46
+ var that = this
47
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
48
+
49
+ this.$element.trigger(e)
50
+
51
+ if (this.isShown || e.isDefaultPrevented()) return
52
+
53
+ this.isShown = true
54
+
55
+ this.escape()
56
+
57
+ this.$element.on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
58
+
59
+ this.backdrop(function () {
60
+ var transition = $.support.transition && that.$element.hasClass('fade')
61
+
62
+ if (!that.$element.parent().length) {
63
+ that.$element.appendTo(document.body) // don't move modals dom position
64
+ }
65
+
66
+ that.$element.show()
67
+
68
+ if (transition) {
69
+ that.$element[0].offsetWidth // force reflow
70
+ }
71
+
72
+ that.$element
73
+ .addClass('in')
74
+ .attr('aria-hidden', false)
75
+
76
+ that.enforceFocus()
77
+
78
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
79
+
80
+ transition ?
81
+ that.$element.find('.modal-dialog') // wait for modal to slide in
82
+ .one($.support.transition.end, function () {
83
+ that.$element.focus().trigger(e)
84
+ })
85
+ .emulateTransitionEnd(300) :
86
+ that.$element.focus().trigger(e)
87
+ })
88
+ }
89
+
90
+ Modal.prototype.hide = function (e) {
91
+ if (e) e.preventDefault()
92
+
93
+ e = $.Event('hide.bs.modal')
94
+
95
+ this.$element.trigger(e)
96
+
97
+ if (!this.isShown || e.isDefaultPrevented()) return
98
+
99
+ this.isShown = false
100
+
101
+ this.escape()
102
+
103
+ $(document).off('focusin.bs.modal')
104
+
105
+ this.$element
106
+ .removeClass('in')
107
+ .attr('aria-hidden', true)
108
+ .off('click.dismiss.modal')
109
+
110
+ $.support.transition && this.$element.hasClass('fade') ?
111
+ this.$element
112
+ .one($.support.transition.end, $.proxy(this.hideModal, this))
113
+ .emulateTransitionEnd(300) :
114
+ this.hideModal()
115
+ }
116
+
117
+ Modal.prototype.enforceFocus = function () {
118
+ $(document)
119
+ .off('focusin.bs.modal') // guard against infinite focus loop
120
+ .on('focusin.bs.modal', $.proxy(function (e) {
121
+ if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
122
+ this.$element.focus()
123
+ }
124
+ }, this))
125
+ }
126
+
127
+ Modal.prototype.escape = function () {
128
+ if (this.isShown && this.options.keyboard) {
129
+ this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
130
+ e.which == 27 && this.hide();
131
+ }, this))
132
+ } else if (!this.isShown) {
133
+ this.$element.off('keyup.dismiss.bs.modal')
134
+ }
135
+ }
136
+
137
+ Modal.prototype.hideModal = function () {
138
+ var that = this
139
+ this.$element.hide()
140
+ this.backdrop(function () {
141
+ that.removeBackdrop()
142
+ that.$element.trigger('hidden.bs.modal')
143
+ })
144
+ }
145
+
146
+ Modal.prototype.removeBackdrop = function () {
147
+ this.$backdrop && this.$backdrop.remove()
148
+ this.$backdrop = null
149
+ }
150
+
151
+ Modal.prototype.backdrop = function (callback) {
152
+ var that = this
153
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
154
+
155
+ if (this.isShown && this.options.backdrop) {
156
+ var doAnimate = $.support.transition && animate
157
+
158
+ this.$backdrop = $('<div class="factory-bootstrap-329-modal-backdrop ' + animate + '" />')
159
+ .appendTo(document.body)
160
+
161
+ this.$element.on('click.dismiss.modal', $.proxy(function (e) {
162
+ if (e.target !== e.currentTarget) return
163
+ this.options.backdrop == 'static'
164
+ ? this.$element[0].focus.call(this.$element[0])
165
+ : this.hide.call(this)
166
+ }, this))
167
+
168
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
169
+
170
+ this.$backdrop.addClass('in')
171
+
172
+ if (!callback) return
173
+
174
+ doAnimate ?
175
+ this.$backdrop
176
+ .one($.support.transition.end, callback)
177
+ .emulateTransitionEnd(150) :
178
+ callback()
179
+
180
+ } else if (!this.isShown && this.$backdrop) {
181
+ this.$backdrop.removeClass('in')
182
+
183
+ $.support.transition && this.$element.hasClass('fade')?
184
+ this.$backdrop
185
+ .one($.support.transition.end, callback)
186
+ .emulateTransitionEnd(150) :
187
+ callback()
188
+
189
+ } else if (callback) {
190
+ callback()
191
+ }
192
+ }
193
+
194
+
195
+ // MODAL PLUGIN DEFINITION
196
+ // =======================
197
+
198
+ var old = $.fn.factoryBootstrap329_modal
199
+
200
+ $.fn.factoryBootstrap329_modal = function (option, _relatedTarget) {
201
+ return this.each(function () {
202
+ var $this = $(this)
203
+ var data = $this.data('bs.modal')
204
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
205
+
206
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
207
+ if (typeof option == 'string') data[option](_relatedTarget)
208
+ else if (options.show) data.show(_relatedTarget)
209
+ })
210
+ }
211
+
212
+ $.fn.factoryBootstrap329_modal.Constructor = Modal
213
+
214
+
215
+ // MODAL NO CONFLICT
216
+ // =================
217
+
218
+ $.fn.factoryBootstrap329_modal.noConflict = function () {
219
+ $.fn.factoryBootstrap329_modal = old
220
+ return this
221
+ }
222
+
223
+
224
+ // MODAL DATA-API
225
+ // ==============
226
+
227
+ $(document).on('click.bs.modal.data-api', '[data-toggle="factory-modal"]', function (e) {
228
+ var $this = $(this)
229
+ var href = $this.attr('href')
230
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
231
+ var option = $target.data('factory-modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
232
+
233
+ e.preventDefault()
234
+
235
+ $target
236
+ .factoryBootstrap329_modal(option, this)
237
+ .one('hide', function () {
238
+ $this.is(':visible') && $this.focus()
239
+ })
240
+ })
241
+
242
+ $(document)
243
+ .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
244
+ .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
245
+
246
+ }(jQuery);
libs/factory/bootstrap/assets/js/bootstrap.popover.js ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ========================================================================
2
+ * Bootstrap: popover.js v3.0.3
3
+ * http://getbootstrap.com/javascript/#popovers
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
+ // POPOVER PUBLIC CLASS DEFINITION
24
+ // ===============================
25
+
26
+ var Popover = function (element, options) {
27
+ this.init('popover', element, options)
28
+ }
29
+
30
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
31
+
32
+ Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {
33
+ placement: 'right'
34
+ , trigger: 'click'
35
+ , content: ''
36
+ , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
37
+ })
38
+
39
+
40
+ // NOTE: POPOVER EXTENDS tooltip.js
41
+ // ================================
42
+
43
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
44
+
45
+ Popover.prototype.constructor = Popover
46
+
47
+ Popover.prototype.getDefaults = function () {
48
+ return Popover.DEFAULTS
49
+ }
50
+
51
+ Popover.prototype.setContent = function () {
52
+ var $tip = this.tip()
53
+ var title = this.getTitle()
54
+ var content = this.getContent()
55
+
56
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
57
+ $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
58
+
59
+ $tip.removeClass('fade top bottom left right in')
60
+
61
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
62
+ // this manually by checking the contents.
63
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
64
+ }
65
+
66
+ Popover.prototype.hasContent = function () {
67
+ return this.getTitle() || this.getContent()
68
+ }
69
+
70
+ Popover.prototype.getContent = function () {
71
+ var $e = this.$element
72
+ var o = this.options
73
+
74
+ return $e.attr('data-content')
75
+ || (typeof o.content == 'function' ?
76
+ o.content.call($e[0]) :
77
+ o.content)
78
+ }
79
+
80
+ Popover.prototype.arrow = function () {
81
+ return this.$arrow = this.$arrow || this.tip().find('.arrow')
82
+ }
83
+
84
+ Popover.prototype.tip = function () {
85
+ if (!this.$tip) this.$tip = $(this.options.template)
86
+ return this.$tip
87
+ }
88
+
89
+
90
+ // POPOVER PLUGIN DEFINITION
91
+ // =========================
92
+
93
+ var old = $.fn.popover
94
+
95
+ $.fn.popover = function (option) {
96
+ return this.each(function () {
97
+ var $this = $(this)
98
+ var data = $this.data('bs.popover')
99
+ var options = typeof option == 'object' && option
100
+
101
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
102
+ if (typeof option == 'string') data[option]()
103
+ })
104
+ }
105
+
106
+ $.fn.popover.Constructor = Popover
107
+
108
+
109
+ // POPOVER NO CONFLICT
110
+ // ===================
111
+
112
+ $.fn.popover.noConflict = function () {
113
+ $.fn.popover = old
114
+ return this
115
+ }
116
+
117
+ }(jQuery);
libs/factory/bootstrap/assets/js/bootstrap.scrollspy.js ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ========================================================================
2
+ * Bootstrap: scrollspy.js v3.0.3
3
+ * http://getbootstrap.com/javascript/#scrollspy
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
+ // SCROLLSPY CLASS DEFINITION
24
+ // ==========================
25
+
26
+ function ScrollSpy(element, options) {
27
+ var href
28
+ var process = $.proxy(this.process, this)
29
+
30
+ this.$element = $(element).is('body') ? $(window) : $(element)
31
+ this.$body = $('body')
32
+ this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
33
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
34
+ this.selector = (this.options.target
35
+ || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
36
+ || '') + ' .nav li > a'
37
+ this.offsets = $([])
38
+ this.targets = $([])
39
+ this.activeTarget = null
40
+
41
+ this.refresh()
42
+ this.process()
43
+ }
44
+
45
+ ScrollSpy.DEFAULTS = {
46
+ offset: 10
47
+ }
48
+
49
+ ScrollSpy.prototype.refresh = function () {
50
+ var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
51
+
52
+ this.offsets = $([])
53
+ this.targets = $([])
54
+
55
+ var self = this
56
+ var $targets = this.$body
57
+ .find(this.selector)
58
+ .map(function () {
59
+ var $el = $(this)
60
+ var href = $el.data('target') || $el.attr('href')
61
+ var $href = /^#\w/.test(href) && $(href)
62
+
63
+ return ($href
64
+ && $href.length
65
+ && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
66
+ })
67
+ .sort(function (a, b) { return a[0] - b[0] })
68
+ .each(function () {
69
+ self.offsets.push(this[0])
70
+ self.targets.push(this[1])
71
+ })
72
+ }
73
+
74
+ ScrollSpy.prototype.process = function () {
75
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
76
+ var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
77
+ var maxScroll = scrollHeight - this.$scrollElement.height()
78
+ var offsets = this.offsets
79
+ var targets = this.targets
80
+ var activeTarget = this.activeTarget
81
+ var i
82
+
83
+ if (scrollTop >= maxScroll) {
84
+ return activeTarget != (i = targets.last()[0]) && this.activate(i)
85
+ }
86
+
87
+ for (i = offsets.length; i--;) {
88
+ activeTarget != targets[i]
89
+ && scrollTop >= offsets[i]
90
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
91
+ && this.activate( targets[i] )
92
+ }
93
+ }
94
+
95
+ ScrollSpy.prototype.activate = function (target) {
96
+ this.activeTarget = target
97
+
98
+ $(this.selector)
99
+ .parents('.active')
100
+ .removeClass('active')
101
+
102
+ var selector = this.selector
103
+ + '[data-target="' + target + '"],'
104
+ + this.selector + '[href="' + target + '"]'
105
+
106
+ var active = $(selector)
107
+ .parents('li')
108
+ .addClass('active')
109
+
110
+ if (active.parent('.dropdown-menu').length) {
111
+ active = active
112
+ .closest('li.dropdown')
113
+ .addClass('active')
114
+ }
115
+
116
+ active.trigger('activate.bs.scrollspy')
117
+ }
118
+
119
+
120
+ // SCROLLSPY PLUGIN DEFINITION
121
+ // ===========================
122
+
123
+ var old = $.fn.scrollspy
124
+
125
+ $.fn.scrollspy = function (option) {
126
+ return this.each(function () {
127
+ var $this = $(this)
128
+ var data = $this.data('bs.scrollspy')
129
+ var options = typeof option == 'object' && option
130
+
131
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
132
+ if (typeof option == 'string') data[option]()
133
+ })
134
+ }
135
+
136
+ $.fn.scrollspy.Constructor = ScrollSpy
137
+
138
+
139
+ // SCROLLSPY NO CONFLICT
140
+ // =====================
141
+
142
+ $.fn.scrollspy.noConflict = function () {
143
+ $.fn.scrollspy = old
144
+ return this
145
+ }
146
+
147
+
148
+ // SCROLLSPY DATA-API
149
+ // ==================
150
+
151
+ $(window).on('load', function () {
152
+ $('[data-spy="scroll"]').each(function () {
153
+ var $spy = $(this)
154
+ $spy.scrollspy($spy.data())
155
+ })
156
+ })
157
+
158
+ }(jQuery);
libs/factory/bootstrap/assets/js/bootstrap.tab.js ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ========================================================================
2
+ * Bootstrap: tab.js v3.0.3
3
+ * http://getbootstrap.com/javascript/#tabs
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
+ // TAB CLASS DEFINITION
24
+ // ====================
25
+
26
+ var Tab = function (element) {
27
+ this.element = $(element)
28
+ }
29
+
30
+ Tab.prototype.show = function () {
31
+ var $this = this.element
32
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
33
+ var selector = $this.data('target')
34
+
35
+ if (!selector) {
36
+ selector = $this.attr('href')
37
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
38
+ }
39
+
40
+ if ($this.parent('li').hasClass('active')) return
41
+
42
+ var previous = $ul.find('.active:last a')[0]
43
+ var e = $.Event('show.bs.tab', {
44
+ relatedTarget: previous
45
+ })
46
+
47
+ $this.trigger(e)
48
+
49
+ if (e.isDefaultPrevented()) return
50
+
51
+ var $target = $(selector)
52
+
53
+ this.activate($this.parent('li'), $ul)
54
+ this.activate($target, $target.parent(), function () {
55
+ $this.trigger({
56
+ type: 'shown.bs.tab'
57
+ , relatedTarget: previous
58
+ })
59
+ })
60
+ }
61
+
62
+ Tab.prototype.activate = function (element, container, callback) {
63
+ var $active = container.find('> .active')
64
+ var transition = callback
65
+ && $.support.transition
66
+ && $active.hasClass('fade')
67
+
68
+ function next() {
69
+ $active
70
+ .removeClass('active')
71
+ .find('> .dropdown-menu > .active')
72
+ .removeClass('active')
73
+
74
+ element.addClass('active')
75
+
76
+ if (transition) {
77
+ element[0].offsetWidth // reflow for transition
78
+ element.addClass('in')
79
+ } else {
80
+ element.removeClass('fade')
81
+ }
82
+
83
+ if (element.parent('.dropdown-menu')) {
84
+ element.closest('li.dropdown').addClass('active')
85
+ }
86
+
87
+ callback && callback()
88
+ }
89
+
90
+ transition ?
91
+ $active
92
+ .one($.support.transition.end, next)
93
+ .emulateTransitionEnd(150) :
94
+ next()
95
+
96
+ $active.removeClass('in')
97
+ }
98
+
99
+
100
+ // TAB PLUGIN DEFINITION
101
+ // =====================
102
+
103
+ var old = $.fn.tab
104
+
105
+ $.fn.tab = function ( option ) {
106
+ return this.each(function () {
107
+ var $this = $(this)
108
+ var data = $this.data('bs.tab')
109
+
110
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
111
+ if (typeof option == 'string') data[option]()
112
+ })
113
+ }
114
+
115
+ $.fn.tab.Constructor = Tab
116
+
117
+
118
+ // TAB NO CONFLICT
119
+ // ===============
120
+
121
+ $.fn.tab.noConflict = function () {
122
+ $.fn.tab = old
123
+ return this
124
+ }
125
+
126
+
127
+ // TAB DATA-API
128
+ // ============
129
+
130
+ $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
131
+ e.preventDefault()
132
+ $(this).tab('show')
133
+ })
134
+
135
+ }(jQuery);
libs/factory/bootstrap/assets/js/bootstrap.tooltip.js ADDED
@@ -0,0 +1,386 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
22
+ +function ($) { "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
+ , placement: 'top'
41
+ , selector: false
42
+ , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
43
+ , trigger: 'hover focus'
44
+ , title: ''
45
+ , delay: 0
46
+ , html: false
47
+ , container: false
48
+ }
49
+
50
+ Tooltip.prototype.init = function (type, element, options) {
51
+ this.enabled = true
52
+ this.type = type
53
+ this.$element = $(element)
54
+ this.options = this.getOptions(options)
55
+
56
+ var triggers = this.options.trigger.split(' ')
57
+
58
+ for (var i = triggers.length; i--;) {
59
+ var trigger = triggers[i]
60
+
61
+ if (trigger == 'click') {
62
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
63
+ } else if (trigger != 'manual') {
64
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
65
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
66
+
67
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
68
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
69
+ }
70
+ }
71
+
72
+ this.options.selector ?
73
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
74
+ this.fixTitle()
75
+ }
76
+
77
+ Tooltip.prototype.getDefaults = function () {
78
+ return Tooltip.DEFAULTS
79
+ }
80
+
81
+ Tooltip.prototype.getOptions = function (options) {
82
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
83
+
84
+ if (options.delay && typeof options.delay == 'number') {
85
+ options.delay = {
86
+ show: options.delay
87
+ , hide: options.delay
88
+ }
89
+ }
90
+
91
+ return options
92
+ }
93
+
94
+ Tooltip.prototype.getDelegateOptions = function () {
95
+ var options = {}
96
+ var defaults = this.getDefaults()
97
+
98
+ this._options && $.each(this._options, function (key, value) {
99
+ if (defaults[key] != value) options[key] = value
100
+ })
101
+
102
+ return options
103
+ }
104
+
105
+ Tooltip.prototype.enter = function (obj) {
106
+ var self = obj instanceof this.constructor ?
107
+ obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
108
+
109
+ clearTimeout(self.timeout)
110
+
111
+ self.hoverState = 'in'
112
+
113
+ if (!self.options.delay || !self.options.delay.show) return self.show()
114
+
115
+ self.timeout = setTimeout(function () {
116
+ if (self.hoverState == 'in') self.show()
117
+ }, self.options.delay.show)
118
+ }
119
+
120
+ Tooltip.prototype.leave = function (obj) {
121
+ var self = obj instanceof this.constructor ?
122
+ obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
123
+
124
+ clearTimeout(self.timeout)
125
+
126
+ self.hoverState = 'out'
127
+
128
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
129
+
130
+ self.timeout = setTimeout(function () {
131
+ if (self.hoverState == 'out') self.hide()
132
+ }, self.options.delay.hide)
133
+ }
134
+
135
+ Tooltip.prototype.show = function () {
136
+ var e = $.Event('show.bs.'+ this.type)
137
+
138
+ if (this.hasContent() && this.enabled) {
139
+ this.$element.trigger(e)
140
+
141
+ if (e.isDefaultPrevented()) return
142
+
143
+ var $tip = this.tip()
144
+
145
+ this.setContent()
146
+
147
+ if (this.options.animation) $tip.addClass('fade')
148
+
149
+ var placement = typeof this.options.placement == 'function' ?
150
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
151
+ this.options.placement
152
+
153
+ var autoToken = /\s?auto?\s?/i
154
+ var autoPlace = autoToken.test(placement)
155
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
156
+
157
+ $tip
158
+ .detach()
159
+ .css({ top: 0, left: 0, display: 'block' })
160
+ .addClass(placement)
161
+
162
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
163
+
164
+ var pos = this.getPosition()
165
+ var actualWidth = $tip[0].offsetWidth
166
+ var actualHeight = $tip[0].offsetHeight
167
+
168
+ if (autoPlace) {
169
+ var $parent = this.$element.parent()
170
+
171
+ var orgPlacement = placement
172
+ var docScroll = document.documentElement.scrollTop || document.body.scrollTop
173
+ var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()
174
+ var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
175
+ var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left
176
+
177
+ placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
178
+ placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
179
+ placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
180
+ placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
181
+ placement
182
+
183
+ $tip
184
+ .removeClass(orgPlacement)
185
+ .addClass(placement)
186
+ }
187
+
188
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
189
+
190
+ this.applyPlacement(calculatedOffset, placement)
191
+ this.$element.trigger('shown.bs.' + this.type)
192
+ }
193
+ }
194
+
195
+ Tooltip.prototype.applyPlacement = function(offset, placement) {
196
+ var replace
197
+ var $tip = this.tip()
198
+ var width = $tip[0].offsetWidth
199
+ var height = $tip[0].offsetHeight
200
+
201
+ // manually read margins because getBoundingClientRect includes difference
202
+ var marginTop = parseInt($tip.css('margin-top'), 10)
203
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
204
+
205
+ // we must check for NaN for ie 8/9
206
+ if (isNaN(marginTop)) marginTop = 0
207
+ if (isNaN(marginLeft)) marginLeft = 0
208
+
209
+ offset.top = offset.top + marginTop
210
+ offset.left = offset.left + marginLeft
211
+
212
+ $tip
213
+ .offset(offset)
214
+ .addClass('in')
215
+
216
+ // check to see if placing tip in new offset caused the tip to resize itself
217
+ var actualWidth = $tip[0].offsetWidth
218
+ var actualHeight = $tip[0].offsetHeight
219
+
220
+ if (placement == 'top' && actualHeight != height) {
221
+ replace = true
222
+ offset.top = offset.top + height - actualHeight
223
+ }
224
+
225
+ if (/bottom|top/.test(placement)) {
226
+ var delta = 0
227
+
228
+ if (offset.left < 0) {
229
+ delta = offset.left * -2
230
+ offset.left = 0
231
+
232
+ $tip.offset(offset)
233
+
234
+ actualWidth = $tip[0].offsetWidth
235
+ actualHeight = $tip[0].offsetHeight
236
+ }
237
+
238
+ this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
239
+ } else {
240
+ this.replaceArrow(actualHeight - height, actualHeight, 'top')
241
+ }
242
+
243
+ if (replace) $tip.offset(offset)
244
+ }
245
+
246
+ Tooltip.prototype.replaceArrow = function(delta, dimension, position) {
247
+ this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
248
+ }
249
+
250
+ Tooltip.prototype.setContent = function () {
251
+ var $tip = this.tip()
252
+ var title = this.getTitle()
253
+
254
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
255
+ $tip.removeClass('fade in top bottom left right')
256
+ }
257
+
258
+ Tooltip.prototype.hide = function () {
259
+ var that = this
260
+ var $tip = this.tip()
261
+ var e = $.Event('hide.bs.' + this.type)
262
+
263
+ function complete() {
264
+ if (that.hoverState != 'in') $tip.detach()
265
+ }
266
+
267
+ this.$element.trigger(e)
268
+
269
+ if (e.isDefaultPrevented()) return
270
+
271
+ $tip.removeClass('in')
272
+
273
+ $.support.transition && this.$tip.hasClass('fade') ?
274
+ $tip
275
+ .one($.support.transition.end, complete)
276
+ .emulateTransitionEnd(150) :
277
+ complete()
278
+
279
+ this.$element.trigger('hidden.bs.' + this.type)
280
+
281
+ return this
282
+ }
283
+
284
+ Tooltip.prototype.fixTitle = function () {
285
+ var $e = this.$element
286
+ if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
287
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
288
+ }
289
+ }
290
+
291
+ Tooltip.prototype.hasContent = function () {
292
+ return this.getTitle()
293
+ }
294
+
295
+ Tooltip.prototype.getPosition = function () {
296
+ var el = this.$element[0]
297
+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
298
+ width: el.offsetWidth
299
+ , height: el.offsetHeight
300
+ }, this.$element.offset())
301
+ }
302
+
303
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
304
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
305
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
306
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
307
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
308
+ }
309
+
310
+ Tooltip.prototype.getTitle = function () {
311
+ var title
312
+ var $e = this.$element
313
+ var o = this.options
314
+
315
+ title = $e.attr('data-original-title')
316
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
317
+
318
+ return title
319
+ }
320
+
321
+ Tooltip.prototype.tip = function () {
322
+ return this.$tip = this.$tip || $(this.options.template)
323
+ }
324
+
325
+ Tooltip.prototype.arrow = function () {
326
+ return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
327
+ }
328
+
329
+ Tooltip.prototype.validate = function () {
330
+ if (!this.$element[0].parentNode) {
331
+ this.hide()
332
+ this.$element = null
333
+ this.options = null
334
+ }
335
+ }
336
+
337
+ Tooltip.prototype.enable = function () {
338
+ this.enabled = true
339
+ }
340
+
341
+ Tooltip.prototype.disable = function () {
342
+ this.enabled = false
343
+ }
344
+
345
+ Tooltip.prototype.toggleEnabled = function () {
346
+ this.enabled = !this.enabled
347
+ }
348
+
349
+ Tooltip.prototype.toggle = function (e) {
350
+ var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
351
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
352
+ }
353
+
354
+ Tooltip.prototype.destroy = function () {
355
+ this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
356
+ }
357
+
358
+
359
+ // TOOLTIP PLUGIN DEFINITION
360
+ // =========================
361
+
362
+ var old = $.fn.tooltip
363
+
364
+ $.fn.tooltip = function (option) {
365
+ return this.each(function () {
366
+ var $this = $(this)
367
+ var data = $this.data('bs.tooltip')
368
+ var options = typeof option == 'object' && option
369
+
370
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
371
+ if (typeof option == 'string') data[option]()
372
+ })
373
+ }
374
+
375
+ $.fn.tooltip.Constructor = Tooltip
376
+
377
+
378
+ // TOOLTIP NO CONFLICT
379
+ // ===================
380
+
381
+ $.fn.tooltip.noConflict = function () {
382
+ $.fn.tooltip = old
383
+ return this
384
+ }
385
+
386
+ }(jQuery);
libs/factory/bootstrap/assets/js/bootstrap.transition.js ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ========================================================================
2
+ * Bootstrap: transition.js v3.0.3
3
+ * http://getbootstrap.com/javascript/#transitions
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
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
24
+ // ============================================================
25
+
26
+ function transitionEnd() {
27
+ var el = document.createElement('bootstrap')
28
+
29
+ var transEndEventNames = {
30
+ 'WebkitTransition' : 'webkitTransitionEnd'
31
+ , 'MozTransition' : 'transitionend'
32
+ , 'OTransition' : 'oTransitionEnd otransitionend'
33
+ , 'transition' : 'transitionend'
34
+ }
35
+
36
+ for (var name in transEndEventNames) {
37
+ if (el.style[name] !== undefined) {
38
+ return { end: transEndEventNames[name] }
39
+ }
40
+ }
41
+ }
42
+
43
+ // http://blog.alexmaccaw.com/css-transitions
44
+ $.fn.emulateTransitionEnd = function (duration) {
45
+ var called = false, $el = this
46
+ $(this).one($.support.transition.end, function () { called = true })
47
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
48
+ setTimeout(callback, duration)
49
+ return this
50
+ }
51
+
52
+ $(function () {
53
+ $.support.transition = transitionEnd()
54
+ });
55
+
56
+ // issue #SLWP-49
57
+ $(function () {
58
+ $(function () {
59
+ $.support.transition = transitionEnd();
60
+ });
61
+ });
62
+
63
+ }(jQuery);
libs/factory/bootstrap/assets/js/control.checkbox.js ADDED
@@ -0,0 +1,290 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.factoryBootstrap329_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.factoryBootstrap329_checkboxControl.Constructor = CheckboxControl;
282
+
283
+ // AUTO CREATING
284
+ // ================================
285
+
286
+ $(function() {
287
+ $(".factory-bootstrap-329 .factory-checkbox.factory-buttons-way").factoryBootstrap329_checkboxControl();
288
+ });
289
+
290
+ }(jQuery) );
libs/factory/bootstrap/assets/js/control.color-and-opacity.js ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( $, undef ){
2
+ $(function(){
3
+
4
+ $(function(){
5
+
6
+ $(".factory-bootstrap-329 .factory-color-and-opacity").each(function(){
7
+ var $colorOpacityControl = $(this);
8
+
9
+ var $colorControl = $colorOpacityControl.find('.factory-color');
10
+ var $integerControl = $colorOpacityControl.find('.factory-integer');
11
+
12
+
13
+ // apply to change opacity of the preview
14
+ $integerControl.change(function(){
15
+ var opacityValue = $integerControl.find(".factory-result").val() / 100;
16
+
17
+
18
+ $colorControl.find('.factory-background').css('opacity', opacityValue );
19
+
20
+
21
+ });
22
+
23
+ $integerControl.change();
24
+
25
+ $integerControl.on("click.color.factory", function(e){
26
+ e.stopPropagation();
27
+ });
28
+ });
29
+ });
30
+
31
+ });
32
+ }( jQuery ) );
libs/factory/bootstrap/assets/js/control.color.js ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Factory Botstrap Color Control
3
+ *
4
+ * @uses plugin.iris.js
5
+ *
6
+ * @author Paul Kashtanoff <paul@byonepress.com>
7
+ * @copyright (c) 2013-2014, OnePress Ltd
8
+ *
9
+ * @package factory-forms
10
+ * @since 3.1.0
11
+ */
12
+
13
+ ;( function( $ ){
14
+
15
+ $.widget( "factoryBootstrap329.colorControl", {
16
+
17
+ _create: function() {
18
+
19
+ this.$element = this.element;
20
+ this.$picker = this.$element.find('.factory-color-hex');
21
+ this.$preview = this.$element.find('.factory-preview');
22
+ this.$background = this.$element.find('.factory-background');
23
+
24
+ this._init();
25
+ },
26
+
27
+ _init: function( event ) {
28
+ var self = this;
29
+
30
+ var irisOptions = {
31
+ width: 216,
32
+ palettes: ['#16a086', '#27ae61', '#2a80b9', '#8f44ad', '#2d3e50', '#f49c14', '#c1392b', '#bec3c7'],
33
+ hide: true,
34
+ change: function(event, ui) {
35
+ self.$background.css({ background: ui.color.toString() });
36
+
37
+ self.$element.trigger('change.color.factory', [ ui.color.toString() ]);
38
+ self.$element.trigger('updated.color.factory', [ ui.color.toString() ]);
39
+ }
40
+ };
41
+
42
+ var picketTarget = this.$element.data('picker-target');
43
+ if ( picketTarget ) irisOptions.target = $(picketTarget);
44
+
45
+ this.$picker.factoryBootstrap329_iris(irisOptions);
46
+ this.$picker.off('focus');
47
+
48
+ $(document).on("click.color.factory", function(){
49
+ self.$picker.factoryBootstrap329_iris("hide");
50
+ });
51
+
52
+ this.$picker.add(this.$background).on("click.color.factory", function(e){
53
+ e.stopPropagation();
54
+ self.$picker.factoryBootstrap329_iris("show");
55
+ });
56
+ },
57
+
58
+ togglePicker: function() {
59
+ if( this.$element.hasClass('factory-picker-active') ) this.hidePicker();
60
+ else this.showPicker();
61
+ },
62
+
63
+ hidePicker: function() {
64
+ this.$element.removeClass('factory-picker-active');
65
+ this.$picker.factoryBootstrap329_iris( 'hide' );
66
+ },
67
+
68
+ showPicker: function() {
69
+ this.$element.addClass('factory-picker-active');
70
+ this.$picker.factoryBootstrap329_iris( 'show' );
71
+ },
72
+
73
+ getValue: function() {
74
+ return this.$picker.val();
75
+ },
76
+
77
+ setValue: function( value, trigger ) {
78
+ this.$picker.val(value);
79
+ if ( trigger ) self.$picker.trigger('change');
80
+ }
81
+ });
82
+
83
+ $(function(){
84
+ $.widget.bridge( "factoryBootstrap329_colorControl", $.factoryBootstrap329.colorControl );
85
+ $(".factory-bootstrap-329 .factory-color").factoryBootstrap329_colorControl({});
86
+ });
87
+
88
+ }( jQuery ) );
libs/factory/bootstrap/assets/js/control.dropdown-and-colors.js ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function($) {
2
+
3
+ var dropdownAndColors = function(element) {
4
+ var $this = $(element);
5
+ var radioControlsWrap = $this.find('.factory-colors-inner-wrap');
6
+
7
+ $this.find('select').change(function() {
8
+ var selected = $this.find('select option:selected'),
9
+ colors = selected.data('colors');
10
+
11
+ radioControlsWrap.html('');
12
+
13
+ var radioName = radioControlsWrap.data('radio-name');
14
+
15
+ if( !radioName || !colors.length ) {
16
+ $this.fadeOut();
17
+ return;
18
+ }
19
+
20
+ for( var i = 0; i < colors.length; i++ ) {
21
+ var colorItem = colors[i];
22
+
23
+ var radioItem = $('<span class="factory-form-radio-item">' +
24
+ '<label class="factory-from-radio-label">' +
25
+ '<input type="radio" name="' + radioName + '" class="factory-radio-color" value="' + colorItem[0] + '" checked="checked">' +
26
+ '<span style="background-color:' + colorItem[1] + '"></span>' +
27
+ '</label></span>');
28
+
29
+ radioControlsWrap.append(radioItem);
30
+ }
31
+ });
32
+ };
33
+
34
+ $.fn.factoryBootstrap329_dropdownAndColors = function(option) {
35
+ // call an method
36
+ if( typeof option === "string" ) {
37
+ var data = $(this).data('factory.dropdownAndColors.control');
38
+ if( !data ) {
39
+ return null;
40
+ }
41
+ return data[option]();
42
+ }
43
+
44
+ // creating an object
45
+ else {
46
+ return this.each(function() {
47
+ var $this = $(this);
48
+ var data = $this.data('factory.dropdownAndColors.control');
49
+ if( !data ) {
50
+ $this.data('factory.dropdownAndColors.control', (data = new dropdownAndColors(this)));
51
+ }
52
+ });
53
+ }
54
+ };
55
+
56
+ $.fn.factoryBootstrap329_dropdownAndColors.Constructor = dropdownAndColors;
57
+
58
+ $(function() {
59
+ $(".factory-bootstrap-329 .factory-dropdown-and-colors").factoryBootstrap329_dropdownAndColors();
60
+ });
61
+
62
+ }(jQuery) );
libs/factory/bootstrap/assets/js/control.dropdown.js ADDED
@@ -0,0 +1,355 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.factoryBootstrap329_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.factoryBootstrap329_dropdownControl.Constructor = DropdownControl;
347
+
348
+ // AUTO CREATING
349
+ // ================================
350
+
351
+ $(function() {
352
+ $(".factory-bootstrap-329 .factory-dropdown").factoryBootstrap329_dropdownControl();
353
+ });
354
+
355
+ }(jQuery) );
libs/factory/bootstrap/assets/js/control.fonts.js ADDED
@@ -0,0 +1,196 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Font Control
3
+ *
4
+ * @author Paul Kashtanoff <paul@byonepress.com>
5
+ * @copyright (c) 2013-2014, OnePress Ltd
6
+ *
7
+ * @package factory-forms
8
+ * @since 3.1.0
9
+ */
10
+ ;( function( $ ){
11
+
12
+ $.widget( "factoryBootstrap329.fontControl", {
13
+
14
+ _create: function() {
15
+
16
+ this.$element = this.element;
17
+
18
+ this.$family = this.$element.find(".factory-family-wrap select");
19
+ this.$googleFontData = this.$element.find(".factory-google-font-data");
20
+
21
+ this.fontSelectorName = this.$family.attr('name');
22
+
23
+ this.googleFontsOptions = {
24
+ frameName: this.element.data('google-fonts-frame-name')
25
+ };
26
+
27
+ if ( !this.googleFontsOptions.frameName )
28
+ this.googleFontsOptions.frameName = 'preview';
29
+
30
+ this._initUI();
31
+ this._bindEvents();
32
+ },
33
+
34
+ _initUI: function() {
35
+ this.$family.chosen();
36
+ },
37
+
38
+ _bindEvents: function() {
39
+ var self = this;
40
+
41
+ this.$family.change(function( data ){
42
+ var $option = self._getCurrentOption();
43
+ var isGoogleFont = $option.data('google-font');
44
+
45
+ if ( isGoogleFont ) {
46
+
47
+ var family = $option.data('family');
48
+ var variants = $option.data('variants').split(',');
49
+ var subsets = $option.data('subsets').split(',');
50
+
51
+ self._loadGoogleFont( family, variants, subsets );
52
+ } else {
53
+ self.$googleFontData.val("");
54
+ }
55
+ });
56
+ },
57
+
58
+ _getCurrentOption: function() {
59
+ var value = this.$family.val();
60
+ return this._getOptionByValue( value );
61
+ },
62
+
63
+ _getOptionByValue: function( value ) {
64
+ var $option = this.$family.find("option[value='" + value + "']");
65
+ return $option;
66
+ },
67
+
68
+ _loadGoogleFont: function( family, variants, subsets ) {
69
+
70
+ // these filters allow extrenal apps to manage which variants
71
+ // and subsets have to be laoded and which should be skipped
72
+
73
+ var variants = this._filterGoogleFontVariantsBeforeLoading( family, variants, subsets );
74
+ var subsets = this._filterGoogleFontSubsetsBeforeLoading( family, variants, subsets );
75
+
76
+ this.$googleFontData.val(this._encode64(JSON.stringify({
77
+ name: family,
78
+ styles: variants,
79
+ subsets: subsets
80
+ })));
81
+
82
+ // the target is a place (current window or an iframe)
83
+ // where the font should be loaded
84
+
85
+ var $target = this._getTargetToLoadGoogleFont();
86
+
87
+ // the id is used to prevent loading multiple
88
+ // fonts for a single font control
89
+
90
+ var linkId = this.fontSelectorName + "-font-loader";
91
+
92
+ // removes the previous link with the same id
93
+
94
+ var $link = $target.find('#' + linkId);
95
+ if ( $target.find('#' + linkId).length > 0 ) {
96
+ $link.remove();
97
+ }
98
+
99
+ // builds an URL for loading the font
100
+
101
+ var url = 'http://fonts.googleapis.com/css';
102
+
103
+ if ( variants && variants.length ) family = family + ":" + variants.join(",");
104
+ url = url + '?family=' + family;
105
+
106
+ if ( subsets && subsets.length ) url = url + '&subset=' + subsets.join(",");
107
+
108
+ $('<link id="' + linkId + '" rel="stylesheet" type="text/css" href="' + url + '" >').appendTo( $target );
109
+ },
110
+
111
+ /**
112
+ * Calls external filters to modify the list of the google font variants to be loaded.
113
+ * @since 3.2.8
114
+ */
115
+ _filterGoogleFontVariantsBeforeLoading: function( family, variants, subsets ) {
116
+ var self = this;
117
+ $(document).trigger('factory-filter-google-font-variants', [variants, self.$element, family, subsets]);
118
+ return variants;
119
+ },
120
+
121
+ /**
122
+ * Calls external filters to modify the list of the google font subsets to be loaded.
123
+ * @since 3.2.8
124
+ */
125
+ _filterGoogleFontSubsetsBeforeLoading: function( family, variants, subsets ) {
126
+ var self = this;
127
+ $(document).trigger('factory-filter-google-font-subsets', [subsets, self.$element, variants, subsets]);
128
+ return subsets;
129
+ },
130
+
131
+ /**
132
+ * Returns a target element where the google font link element should be appended.
133
+ * @since 3.2.8
134
+ */
135
+ _getTargetToLoadGoogleFont: function() {
136
+
137
+ var frameName = this.googleFontsOptions.frameName;
138
+ var $target = $('head');
139
+
140
+ if ( frameName ) {
141
+
142
+ var $frame = $('iframe[name="' + frameName + '"]');
143
+ if ( $frame.length === 0 ) return console.error('The preview container not found.');
144
+
145
+ $target = $frame.contents().find('head');
146
+ }
147
+
148
+ return $target;
149
+ },
150
+
151
+ _base64KeyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
152
+
153
+ _encode64: function(input) {
154
+ input = escape(input);
155
+ var output = "";
156
+ var chr1, chr2, chr3 = "";
157
+ var enc1, enc2, enc3, enc4 = "";
158
+ var i = 0;
159
+
160
+ do {
161
+ chr1 = input.charCodeAt(i++);
162
+ chr2 = input.charCodeAt(i++);
163
+ chr3 = input.charCodeAt(i++);
164
+
165
+ enc1 = chr1 >> 2;
166
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
167
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
168
+ enc4 = chr3 & 63;
169
+
170
+ if (isNaN(chr2)) {
171
+ enc3 = enc4 = 64;
172
+ } else if (isNaN(chr3)) {
173
+ enc4 = 64;
174
+ }
175
+
176
+ output = output +
177
+ this._base64KeyStr.charAt(enc1) +
178
+ this._base64KeyStr.charAt(enc2) +
179
+ this._base64KeyStr.charAt(enc3) +
180
+ this._base64KeyStr.charAt(enc4);
181
+
182
+ chr1 = chr2 = chr3 = "";
183
+ enc1 = enc2 = enc3 = enc4 = "";
184
+
185
+ } while (i < input.length);
186
+
187
+ return output;
188
+ }
189
+ });
190
+
191
+ $(function(){
192
+ $.widget.bridge( "factoryBootstrap329_fontControl", $.factoryBootstrap329.fontControl );
193
+ $(".factory-bootstrap-329 .factory-font").factoryBootstrap329_fontControl({});
194
+ });
195
+
196
+ }( jQuery ) );
libs/factory/bootstrap/assets/js/control.gradient.js ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( $ ){
2
+
3
+ // GRADIENT CONTROL CLASS DEFINITION
4
+ // ================================
5
+
6
+ var GradientControl = function (el) {
7
+ this.$element = $(el);
8
+ this.$picker = this.$element.find(".factory-gradient-picker");
9
+ this.$result = this.$element.find(".factory-result");
10
+
11
+ this.init();
12
+ };
13
+
14
+ GradientControl.prototype.init = function() {
15
+ var self = this;
16
+
17
+ var directions = this.$element.data('directions');
18
+ var points = this.$element.data('points');
19
+ var arrPoints = points ? points.split(',') : [];
20
+
21
+ this.$picker.gradientPicker({
22
+ change: function(points, styles) {
23
+ self.$result.val(styles).trigger('keyup');
24
+ },
25
+ fillDirection: directions,
26
+ controlPoints: arrPoints
27
+ });
28
+ };
29
+
30
+ // GRADIENT CONTROL DEFINITION
31
+ // ================================
32
+
33
+ $.fn.factoryBootstrap329_gradientControl = function (option) {
34
+ return this.each(function () {
35
+ var $this = $(this);
36
+ var data = $this.data('factory.gradient-control');
37
+ if (!data) $this.data('factory.gradient-control', (data = new GradientControl(this)));
38
+ if (typeof option === 'string') data[option].call(data);
39
+ });
40
+ };
41
+
42
+ $.fn.factoryBootstrap329_gradientControl.Constructor = GradientControl;
43
+
44
+ // GRADIENT CREATING
45
+ // ================================
46
+
47
+ $(function(){
48
+ $(".factory-bootstrap-329 .factory-gradient").factoryBootstrap329_gradientControl();
49
+ });
50
+
51
+ }( jQuery ) );
libs/factory/bootstrap/assets/js/control.integer.js ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( $ ){
2
+
3
+ // INTEGER CONTROL CLASS DEFINITION
4
+ // ================================
5
+
6
+ var IntegerControl = function (el) {
7
+ this.$element = $(el);
8
+
9
+ if ( this.$element.hasClass('factory-has-slider') ) {
10
+ this.createSlider();
11
+ }
12
+ };
13
+
14
+ IntegerControl.prototype.createSlider = function() {
15
+ var self = this;
16
+
17
+ var $container = this.$element.find(".factory-slider-container");
18
+ this.$bar = $container.find(".factory-bar");
19
+
20
+ this.$result = $container.find(".factory-result");
21
+ this.$visibleValue = $container.find(".factory-visible-value");
22
+
23
+ this.units = $container.data('units');
24
+ this.rangeStart = $container.data('range-start');
25
+ this.rangeEnd = $container.data('range-end');
26
+ this.step = $container.data('step');
27
+ if ( !this.step ) this.step = 1;
28
+
29
+ var value = this.$result.val();
30
+
31
+ var setValue = function( value ) {
32
+ self.setValue( value );
33
+ }
34
+
35
+ this.$bar.noUiSlider({
36
+ start: parseInt( value ),
37
+ range: {min: self.rangeStart, max: self.rangeEnd},
38
+ connect: "lower",
39
+ step: self.step
40
+ });
41
+
42
+ this.$bar.on("slide set", function(){
43
+ self.setValue( parseInt( self.$bar.val() ) );
44
+ });
45
+ };
46
+
47
+ IntegerControl.prototype.setValue = function ( value, force) {
48
+ this.$result.val( value );
49
+
50
+ if ( this.$visibleValue.length > 0 ) {
51
+ if ( this.units ) this.$visibleValue.text(value + this.units);
52
+ else this.$visibleValue.text(value);
53
+ }
54
+
55
+ if ( force ) {
56
+ this.$bar.noUiSlider({ start: value }, true);
57
+ }
58
+
59
+ this.$result.trigger('keyup');
60
+ this.$element.trigger('change');
61
+ };
62
+
63
+ IntegerControl.prototype.getValue = function () {
64
+ return this.$result.val();
65
+ };
66
+
67
+ IntegerControl.prototype.api = function () {
68
+ return this;
69
+ };
70
+
71
+ // INTEGER CONTROL DEFINITION
72
+ // ================================
73
+
74
+ $.fn.factoryBootstrap329_integerControl = function (option) {
75
+
76
+ // call an method
77
+ if ( typeof option === "string" ) {
78
+ var data = $(this).data('factory.integer-control');
79
+ if ( !data ) return null;
80
+ return data[option]();
81
+ }
82
+
83
+ // creating an object
84
+ else {
85
+ return this.each(function () {
86
+ var $this = $(this);
87
+ var data = $this.data('factory.integer-control');
88
+ if (!data) $this.data('factory.integer-control', (data = new IntegerControl(this)));
89
+ });
90
+ }
91
+ };
92
+
93
+ $.fn.factoryBootstrap329_integerControl.Constructor = IntegerControl;
94
+
95
+ // AUTO CREATING
96
+ // ================================
97
+
98
+ $(function(){
99
+ $(".factory-bootstrap-329 .factory-integer").factoryBootstrap329_integerControl();
100
+ });
101
+
102
+ }( jQuery ) );
libs/factory/bootstrap/assets/js/control.list.js ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.factoryBootstrap329_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.factoryBootstrap329_listControl.Constructor = list;
136
+
137
+ $(function(){
138
+ $(".factory-bootstrap-329 .factory-list").factoryBootstrap329_listControl();
139
+ });
140
+
141
+ }( jQuery ) );
libs/factory/bootstrap/assets/js/control.pattern.js ADDED
@@ -0,0 +1,218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Pattern Control
3
+ *
4
+ * @author Alex Kovalev <alex@byonepress.com>
5
+ * @author Paul Kashtanoff <paul@byonepress.com>
6
+ * @copyright (c) 2013-2014, OnePress Ltd
7
+ *
8
+ * @package factory-forms
9
+ * @since 3.1.0
10
+ */
11
+ ;( function( $ ){
12
+
13
+ $.widget( "factoryBootstrap329.patternControl", {
14
+
15
+ _create: function() {
16
+
17
+ this.$element = this.element;
18
+ this.$preview = this.$element.find(".factory-preview");
19
+
20
+ this.$patternResult = this.$element.find(".factory-pattern-result");
21
+ this.$colorResult = this.$element.find(".factory-color-result");
22
+
23
+ this.$patterns = this.$element.find(".factory-patterns-panel");
24
+ this.$patternItems = this.$element.find(".factory-patterns-item");
25
+
26
+ this.$btnUpload = this.$element.find(".factory-upload-btn");
27
+
28
+ this.$btnChangeColor = this.$element.find(".factory-change-color-btn");
29
+ this.$colorPanel = this.$element.find(".factory-color-panel");
30
+ this.$colorContol = this.$element.find(".factory-color");
31
+
32
+ this._initMainPanel();
33
+ this._initColorPickerPanel();
34
+ this._initPatternsPanel();
35
+ },
36
+
37
+ /**
38
+ * Inits the Main Panel with the dropdown and buttons.
39
+ *
40
+ * @since 3.1.0
41
+ * @return void
42
+ */
43
+ _initMainPanel: function( ) {
44
+ var self = this;
45
+
46
+ // a click on a preview opens the patterns panel
47
+
48
+ this.$preview.on('click', function(){
49
+
50
+ self.togglePatternsPanel();
51
+ return false;
52
+ });
53
+
54
+ // the button showing the panel to a pattern change color
55
+
56
+ this.$btnChangeColor.on('click', function(){
57
+
58
+ self.toggleColorPanel();
59
+ return false;
60
+ });
61
+ },
62
+
63
+ /**
64
+ * Toggles the panel with which the user can choose another color for a pattern.
65
+ *
66
+ * @since 3.1.0
67
+ * @returns void
68
+ */
69
+ togglePatternsPanel: function() {
70
+
71
+ if ( this.$element.hasClass('factory-patterns-panel-active') ) this.hidePatternsPanel();
72
+ else this.showPatternsPanel();
73
+ },
74
+
75
+ /**
76
+ * Hides the panel with which the user can choose another color for a pattern.
77
+ *
78
+ * @since 3.1.0
79
+ * @returns void
80
+ */
81
+ hidePatternsPanel: function() {
82
+
83
+ this.$element.removeClass('factory-patterns-panel-active');
84
+ },
85
+
86
+ /**
87
+ * Shows the panel with which the user can choose another color for a pattern.
88
+ *
89
+ * @since 3.1.0
90
+ * @returns void
91
+ */
92
+ showPatternsPanel: function() {
93
+
94
+ this.$element.addClass('factory-patterns-panel-active');
95
+ },
96
+
97
+ /**
98
+ * Returns true if the pattern has the color options set.
99
+ *
100
+ * @since 3.1.0
101
+ * @returns bool
102
+ */
103
+ hasColor: function() {
104
+
105
+ return this.$element.hasClass('factory-color-panel-active');
106
+ },
107
+
108
+ /**
109
+ * Toggles the panel with which the user can choose another color for a pattern.
110
+ *
111
+ * @since 3.1.0
112
+ * @returns void
113
+ */
114
+ toggleColorPanel: function() {
115
+
116
+ if ( this.hasColor() ) this.hideColorPanel();
117
+ else this.showColorPanel();
118
+ },
119
+
120
+ /**
121
+ * Hides the panel with which the user can choose another color for a pattern.
122
+ *
123
+ * @since 3.1.0
124
+ * @returns void
125
+ */
126
+ hideColorPanel: function() {
127
+
128
+ this.$element.removeClass('factory-color-panel-active');
129
+ this.$btnChangeColor.removeClass('button-active');
130
+ this.$colorResult.val('');
131
+ this.$colorResult.trigger('change');
132
+ this.$element.trigger('change');
133
+ },
134
+
135
+ /**
136
+ * Shows the panel with which the user can choose another color for a pattern.
137
+ *
138
+ * @since 3.1.0
139
+ * @returns void
140
+ */
141
+ showColorPanel: function() {
142
+
143
+ this.$element.addClass('factory-color-panel-active');
144
+ this.$btnChangeColor.addClass('button-active');
145
+ this.$colorResult.val( this.$colorContol.factoryBootstrap329_colorControl('getValue') );
146
+ this.$colorResult.trigger('change');
147
+ this.$element.trigger('change');
148
+ },
149
+
150
+ /**
151
+ * Inits the Color Picker panel.
152
+ *
153
+ * @since 3.1.0
154
+ * @return void
155
+ */
156
+ _initColorPickerPanel: function() {
157
+ var self = this;
158
+
159
+ this.$colorContol.bind('updated.color.factory', function( e, color ){
160
+ self.$colorResult.val( color );
161
+ return false;
162
+ });
163
+ },
164
+
165
+ /**
166
+ * Inits the Patterns Panel.
167
+ *
168
+ * @since 3.1.0
169
+ * @return void
170
+ */
171
+ _initPatternsPanel: function() {
172
+ var self = this;
173
+
174
+ // the upload button
175
+
176
+ var _custom_media = true,
177
+ _orig_send_attachment = wp.media.editor.send.attachment;
178
+
179
+ this.$btnUpload.on('click', function(){
180
+
181
+ _custom_media = true;
182
+ wp.media.editor.send.attachment = function(props, attachment){
183
+ if ( _custom_media ) {
184
+ self.$preview.css({background:'url('+attachment.url+') repeat', border:'0', fontSize:'0'});
185
+ self.$patternResult.attr('value', attachment.url).trigger('change');
186
+ } else {
187
+ return _orig_send_attachment.apply( this, [props, attachment] );
188
+ };
189
+ }
190
+
191
+ wp.media.editor.open( self.$btnUpload );
192
+ $('.add_media').on('click', function(){
193
+ _custom_media = false;
194
+ });
195
+
196
+ return false;
197
+ });
198
+
199
+ // selecting a pattern
200
+
201
+ this.$patternItems.on('click', function(){
202
+
203
+ if( $(this).data('pattern') ) {
204
+ var puthImage = $(this).data('pattern');
205
+ self.$preview.removeClass('factory-empty');
206
+ self.$preview.css({ background: 'url('+puthImage+') repeat' });
207
+ self.$patternResult.attr('value', puthImage).trigger('change');
208
+ }
209
+ });
210
+ }
211
+ });
212
+
213
+ $(function(){
214
+ $.widget.bridge( "factoryBootstrap329_patternControl", $.factoryBootstrap329.patternControl );
215
+ $(".factory-bootstrap-329 .factory-pattern").factoryBootstrap329_patternControl({});
216
+ });
217
+
218
+ }( jQuery ) );
libs/factory/bootstrap/assets/js/global.color-functions.js ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Конвертирует hex в rgb
3
+ */
4
+ function hexToRgb(hex) {
5
+ // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
6
+ var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
7
+ hex = hex.replace(shorthandRegex, function(m, r, g, b) {
8
+ return r + r + g + g + b + b;
9
+ });
10
+
11
+ var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
12
+ return result ? {
13
+ r: parseInt(result[1], 16),
14
+ g: parseInt(result[2], 16),
15
+ b: parseInt(result[3], 16)
16
+ } : null;
17
+ }
18
+
19
+ /**
20
+ * Конвертирует rgb в hex
21
+ */
22
+ function rgb2hex(rgb){
23
+ rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
24
+ return "#" +
25
+ ("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +
26
+ ("0" + parseInt(rgb[2],10).toString(16)).slice(-2) +
27
+ ("0" + parseInt(rgb[3],10).toString(16)).slice(-2);
28
+ }
libs/factory/bootstrap/assets/js/holder.conrol-group.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ *jQuery Control group holder
3
+ */
4
+ (function( $ ) {
5
+ $(document).ready(function(){
6
+ $('.factory-control-group-nav-label').on('click', function(){
7
+ var parent = $(this).parents('.factory-control-group');
8
+
9
+ if( !$(this).hasClass('active') ) {
10
+ $('.factory-control-group-nav-label', parent).add('.factory-control-group-item', parent).removeClass('current');
11
+ $('.factory-control-is-active', parent).val(0);
12
+
13
+ $(this).add($("." + $(this).data('control-id'), parent)).addClass('current');
14
+ parent.children('input[type="hidden"]').val($(this).data('control-name')).trigger('change');
15
+ $('.factory-control-is-active', $("." + $(this).data('control-id'), parent)).val(1);
16
+ }
17
+ return false;
18
+ });
19
+ });
20
+ }(jQuery));
libs/factory/bootstrap/assets/js/holder.more-link.js ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Factory More Link
3
+ */
4
+
5
+ ;(function ( $, window, document, undefined ) {
6
+ "use strict"; // jshint ;_;
7
+
8
+ var pluginName = 'factoryBootstrap329_moreLink';
9
+
10
+ $.fn[pluginName] = function ( param1, param2 ) {
11
+
12
+ return this.each(function () {
13
+ var $this = $(this);
14
+
15
+ $this.find(".factory-more-link-show").click(function(){
16
+ $( $(this).attr('href') ).fadeIn();
17
+ $(this).hide();
18
+ return false;
19
+ });
20
+
21
+ $this.find(".factory-more-link-hide").click(function(){
22
+ var content = $( $(this).attr('href') );
23
+ content.fadeOut(300, function(){
24
+ content.parents(".factory-more-link").find(".factory-more-link-show").show();
25
+ });
26
+ return false;
27
+ });
28
+ });
29
+ };
30
+
31
+ // auto init
32
+
33
+ $(function(){
34
+ $('.factory-bootstrap-329 .factory-more-link').factoryBootstrap329_moreLink();
35
+ });
36
+
37
+ })( jQuery, window, document );
libs/factory/bootstrap/assets/js/plugin.chosen.js ADDED
@@ -0,0 +1,1211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ Chosen, a Select Box Enhancer for jQuery and Prototype
3
+ by Patrick Filler for Harvest, http://getharvest.com
4
+
5
+ Version 1.1.0
6
+ Full source at https://github.com/harvesthq/chosen
7
+ Copyright (c) 2011 Harvest http://getharvest.com
8
+
9
+ MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
+ This file is generated by `grunt build`, do not edit it by hand.
11
+ */
12
+
13
+ (function() {
14
+ var $, AbstractChosen, Chosen, SelectParser, _ref,
15
+ __hasProp = {}.hasOwnProperty,
16
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
17
+
18
+ SelectParser = (function() {
19
+ function SelectParser() {
20
+ this.options_index = 0;
21
+ this.parsed = [];
22
+ }
23
+
24
+ SelectParser.prototype.add_node = function(child) {
25
+ if (child.nodeName.toUpperCase() === "OPTGROUP") {
26
+ return this.add_group(child);
27
+ } else {
28
+ return this.add_option(child);
29
+ }
30
+ };
31
+
32
+ SelectParser.prototype.add_group = function(group) {
33
+ var group_position, option, _i, _len, _ref, _results;
34
+ group_position = this.parsed.length;
35
+ this.parsed.push({
36
+ array_index: group_position,
37
+ group: true,
38
+ label: this.escapeExpression(group.label),
39
+ children: 0,
40
+ disabled: group.disabled
41
+ });
42
+ _ref = group.childNodes;
43
+ _results = [];
44
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
45
+ option = _ref[_i];
46
+ _results.push(this.add_option(option, group_position, group.disabled));
47
+ }
48
+ return _results;
49
+ };
50
+
51
+ SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
52
+ if (option.nodeName.toUpperCase() === "OPTION") {
53
+ if (option.text !== "") {
54
+ if (group_position != null) {
55
+ this.parsed[group_position].children += 1;
56
+ }
57
+ this.parsed.push({
58
+ array_index: this.parsed.length,
59
+ options_index: this.options_index,
60
+ value: option.value,
61
+ text: option.text,
62
+ html: option.innerHTML,
63
+ selected: option.selected,
64
+ disabled: group_disabled === true ? group_disabled : option.disabled,
65
+ group_array_index: group_position,
66
+ classes: option.className,
67
+ style: option.style.cssText
68
+ });
69
+ } else {
70
+ this.parsed.push({
71
+ array_index: this.parsed.length,
72
+ options_index: this.options_index,
73
+ empty: true
74
+ });
75
+ }
76
+ return this.options_index += 1;
77
+ }
78
+ };
79
+
80
+ SelectParser.prototype.escapeExpression = function(text) {
81
+ var map, unsafe_chars;
82
+ if ((text == null) || text === false) {
83
+ return "";
84
+ }
85
+ if (!/[\&\<\>\"\'\`]/.test(text)) {
86
+ return text;
87
+ }
88
+ map = {
89
+ "<": "&lt;",
90
+ ">": "&gt;",
91
+ '"': "&quot;",
92
+ "'": "&#x27;",
93
+ "`": "&#x60;"
94
+ };
95
+ unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g;
96
+ return text.replace(unsafe_chars, function(chr) {
97
+ return map[chr] || "&amp;";
98
+ });
99
+ };
100
+
101
+ return SelectParser;
102
+
103
+ })();
104
+
105
+ SelectParser.select_to_array = function(select) {
106
+ var child, parser, _i, _len, _ref;
107
+ parser = new SelectParser();
108
+ _ref = select.childNodes;
109
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
110
+ child = _ref[_i];
111
+ parser.add_node(child);
112
+ }
113
+ return parser.parsed;
114
+ };
115
+
116
+ AbstractChosen = (function() {
117
+ function AbstractChosen(form_field, options) {
118
+ this.form_field = form_field;
119
+ this.options = options != null ? options : {};
120
+ if (!AbstractChosen.browser_is_supported()) {
121
+ return;
122
+ }
123
+ this.is_multiple = this.form_field.multiple;
124
+ this.set_default_text();
125
+ this.set_default_values();
126
+ this.setup();
127
+ this.set_up_html();
128
+ this.register_observers();
129
+ }
130
+
131
+ AbstractChosen.prototype.set_default_values = function() {
132
+ var _this = this;
133
+ this.click_test_action = function(evt) {
134
+ return _this.test_active_click(evt);
135
+ };
136
+ this.activate_action = function(evt) {
137
+ return _this.activate_field(evt);
138
+ };
139
+ this.active_field = false;
140
+ this.mouse_on_container = false;
141
+ this.results_showing = false;
142
+ this.result_highlighted = null;
143
+ this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false;
144
+ this.disable_search_threshold = this.options.disable_search_threshold || 0;
145
+ this.disable_search = this.options.disable_search || false;
146
+ this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;
147
+ this.group_search = this.options.group_search != null ? this.options.group_search : true;
148
+ this.search_contains = this.options.search_contains || false;
149
+ this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true;
150
+ this.max_selected_options = this.options.max_selected_options || Infinity;
151
+ this.inherit_select_classes = this.options.inherit_select_classes || false;
152
+ this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;
153
+ return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;
154
+ };
155
+
156
+ AbstractChosen.prototype.set_default_text = function() {
157
+ if (this.form_field.getAttribute("data-placeholder")) {
158
+ this.default_text = this.form_field.getAttribute("data-placeholder");
159
+ } else if (this.is_multiple) {
160
+ this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;
161
+ } else {
162
+ this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;
163
+ }
164
+ return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text;
165
+ };
166
+
167
+ AbstractChosen.prototype.mouse_enter = function() {
168
+ return this.mouse_on_container = true;
169
+ };
170
+
171
+ AbstractChosen.prototype.mouse_leave = function() {
172
+ return this.mouse_on_container = false;
173
+ };
174
+
175
+ AbstractChosen.prototype.input_focus = function(evt) {
176
+ var _this = this;
177
+ if (this.is_multiple) {
178
+ if (!this.active_field) {
179
+ return setTimeout((function() {
180
+ return _this.container_mousedown();
181
+ }), 50);
182
+ }
183
+ } else {
184
+ if (!this.active_field) {
185
+ return this.activate_field();
186
+ }
187
+ }
188
+ };
189
+
190
+ AbstractChosen.prototype.input_blur = function(evt) {
191
+ var _this = this;
192
+ if (!this.mouse_on_container) {
193
+ this.active_field = false;
194
+ return setTimeout((function() {
195
+ return _this.blur_test();
196
+ }), 100);
197
+ }
198
+ };
199
+
200
+ AbstractChosen.prototype.results_option_build = function(options) {
201
+ var content, data, _i, _len, _ref;
202
+ content = '';
203
+ _ref = this.results_data;
204
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
205
+ data = _ref[_i];
206
+ if (data.group) {
207
+ content += this.result_add_group(data);
208
+ } else {
209
+ content += this.result_add_option(data);
210
+ }
211
+ if (options != null ? options.first : void 0) {
212
+ if (data.selected && this.is_multiple) {
213
+ this.choice_build(data);
214
+ } else if (data.selected && !this.is_multiple) {
215
+ this.single_set_selected_text(data.text);
216
+ }
217
+ }
218
+ }
219
+ return content;
220
+ };
221
+
222
+ AbstractChosen.prototype.result_add_option = function(option) {
223
+ var classes, option_el;
224
+ if (!option.search_match) {
225
+ return '';
226
+ }
227
+ if (!this.include_option_in_results(option)) {
228
+ return '';
229
+ }
230
+ classes = [];
231
+ if (!option.disabled && !(option.selected && this.is_multiple)) {
232
+ classes.push("active-result");
233
+ }
234
+ if (option.disabled && !(option.selected && this.is_multiple)) {
235
+ classes.push("disabled-result");
236
+ }
237
+ if (option.selected) {
238
+ classes.push("result-selected");
239
+ }
240
+ if (option.group_array_index != null) {
241
+ classes.push("group-option");
242
+ }
243
+ if (option.classes !== "") {
244
+ classes.push(option.classes);
245
+ }
246
+ option_el = document.createElement("li");
247
+ option_el.className = classes.join(" ");
248
+ option_el.style.cssText = option.style;
249
+ option_el.setAttribute("data-option-array-index", option.array_index);
250
+ option_el.innerHTML = option.search_text;
251
+ return this.outerHTML(option_el);
252
+ };
253
+
254
+ AbstractChosen.prototype.result_add_group = function(group) {
255
+ var group_el;
256
+ if (!(group.search_match || group.group_match)) {
257
+ return '';
258
+ }
259
+ if (!(group.active_options > 0)) {
260
+ return '';
261
+ }
262
+ group_el = document.createElement("li");
263
+ group_el.className = "group-result";
264
+ group_el.innerHTML = group.search_text;
265
+ return this.outerHTML(group_el);
266
+ };
267
+
268
+ AbstractChosen.prototype.results_update_field = function() {
269
+ this.set_default_text();
270
+ if (!this.is_multiple) {
271
+ this.results_reset_cleanup();
272
+ }
273
+ this.result_clear_highlight();
274
+ this.results_build();
275
+ if (this.results_showing) {
276
+ return this.winnow_results();
277
+ }
278
+ };
279
+
280
+ AbstractChosen.prototype.reset_single_select_options = function() {
281
+ var result, _i, _len, _ref, _results;
282
+ _ref = this.results_data;
283
+ _results = [];
284
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
285
+ result = _ref[_i];
286
+ if (result.selected) {
287
+ _results.push(result.selected = false);
288
+ } else {
289
+ _results.push(void 0);
290
+ }
291
+ }
292
+ return _results;
293
+ };
294
+
295
+ AbstractChosen.prototype.results_toggle = function() {
296
+ if (this.results_showing) {
297
+ return this.results_hide();
298
+ } else {
299
+ return this.results_show();
300
+ }
301
+ };
302
+
303
+ AbstractChosen.prototype.results_search = function(evt) {
304
+ if (this.results_showing) {
305
+ return this.winnow_results();
306
+ } else {
307
+ return this.results_show();
308
+ }
309
+ };
310
+
311
+ AbstractChosen.prototype.winnow_results = function() {
312
+ var escapedSearchText, option, regex, regexAnchor, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref;
313
+ this.no_results_clear();
314
+ results = 0;
315
+ searchText = this.get_search_text();
316
+ escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
317
+ regexAnchor = this.search_contains ? "" : "^";
318
+ regex = new RegExp(regexAnchor + escapedSearchText, 'i');
319
+ zregex = new RegExp(escapedSearchText, 'i');
320
+ _ref = this.results_data;
321
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
322
+ option = _ref[_i];
323
+ option.search_match = false;
324
+ results_group = null;
325
+ if (this.include_option_in_results(option)) {
326
+ if (option.group) {
327
+ option.group_match = false;
328
+ option.active_options = 0;
329
+ }
330
+ if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {
331
+ results_group = this.results_data[option.group_array_index];
332
+ if (results_group.active_options === 0 && results_group.search_match) {
333
+ results += 1;
334
+ }
335
+ results_group.active_options += 1;
336
+ }
337
+ if (!(option.group && !this.group_search)) {
338
+ option.search_text = option.group ? option.label : option.html;
339
+ option.search_match = this.search_string_match(option.search_text, regex);
340
+ if (option.search_match && !option.group) {
341
+ results += 1;
342
+ }
343
+ if (option.search_match) {
344
+ if (searchText.length) {
345
+ startpos = option.search_text.search(zregex);
346
+ text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length);
347
+ option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
348
+ }
349
+ if (results_group != null) {
350
+ results_group.group_match = true;
351
+ }
352
+ } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {
353
+ option.search_match = true;
354
+ }
355
+ }
356
+ }
357
+ }
358
+ this.result_clear_highlight();
359
+ if (results < 1 && searchText.length) {
360
+ this.update_results_content("");
361
+ return this.no_results(searchText);
362
+ } else {
363
+ this.update_results_content(this.results_option_build());
364
+ return this.winnow_results_set_highlight();
365
+ }
366
+ };
367
+
368
+ AbstractChosen.prototype.search_string_match = function(search_string, regex) {
369
+ var part, parts, _i, _len;
370
+ if (regex.test(search_string)) {
371
+ return true;
372
+ } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) {
373
+ parts = search_string.replace(/\[|\]/g, "").split(" ");
374
+ if (parts.length) {
375
+ for (_i = 0, _len = parts.length; _i < _len; _i++) {
376
+ part = parts[_i];
377
+ if (regex.test(part)) {
378
+ return true;
379
+ }
380
+ }
381
+ }
382
+ }
383
+ };
384
+
385
+ AbstractChosen.prototype.choices_count = function() {
386
+ var option, _i, _len, _ref;
387
+ if (this.selected_option_count != null) {
388
+ return this.selected_option_count;
389
+ }
390
+ this.selected_option_count = 0;
391
+ _ref = this.form_field.options;
392
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
393
+ option = _ref[_i];
394
+ if (option.selected) {
395
+ this.selected_option_count += 1;
396
+ }
397
+ }
398
+ return this.selected_option_count;
399
+ };
400
+
401
+ AbstractChosen.prototype.choices_click = function(evt) {
402
+ evt.preventDefault();
403
+ if (!(this.results_showing || this.is_disabled)) {
404
+ return this.results_show();
405
+ }
406
+ };
407
+
408
+ AbstractChosen.prototype.keyup_checker = function(evt) {
409
+ var stroke, _ref;
410
+ stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
411
+ this.search_field_scale();
412
+ switch (stroke) {
413
+ case 8:
414
+ if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
415
+ return this.keydown_backstroke();
416
+ } else if (!this.pending_backstroke) {
417
+ this.result_clear_highlight();
418
+ return this.results_search();
419
+ }
420
+ break;
421
+ case 13:
422
+ evt.preventDefault();
423
+ if (this.results_showing) {
424
+ return this.result_select(evt);
425
+ }
426
+ break;
427
+ case 27:
428
+ if (this.results_showing) {
429
+ this.results_hide();
430
+ }
431
+ return true;
432
+ case 9:
433
+ case 38:
434
+ case 40:
435
+ case 16:
436
+ case 91:
437
+ case 17:
438
+ break;
439
+ default:
440
+ return this.results_search();
441
+ }
442
+ };
443
+
444
+ AbstractChosen.prototype.clipboard_event_checker = function(evt) {
445
+ var _this = this;
446
+ return setTimeout((function() {
447
+ return _this.results_search();
448
+ }), 50);
449
+ };
450
+
451
+ AbstractChosen.prototype.container_width = function() {
452
+ if (this.options.width != null) {
453
+ return this.options.width;
454
+ } else {
455
+ return "" + this.form_field.offsetWidth + "px";
456
+ }
457
+ };
458
+
459
+ AbstractChosen.prototype.include_option_in_results = function(option) {
460
+ if (this.is_multiple && (!this.display_selected_options && option.selected)) {
461
+ return false;
462
+ }
463
+ if (!this.display_disabled_options && option.disabled) {
464
+ return false;
465
+ }
466
+ if (option.empty) {
467
+ return false;
468
+ }
469
+ return true;
470
+ };
471
+
472
+ AbstractChosen.prototype.search_results_touchstart = function(evt) {
473
+ this.touch_started = true;
474
+ return this.search_results_mouseover(evt);
475
+ };
476
+
477
+ AbstractChosen.prototype.search_results_touchmove = function(evt) {
478
+ this.touch_started = false;
479
+ return this.search_results_mouseout(evt);
480
+ };
481
+
482
+ AbstractChosen.prototype.search_results_touchend = function(evt) {
483
+ if (this.touch_started) {
484
+ return this.search_results_mouseup(evt);
485
+ }
486
+ };
487
+
488
+ AbstractChosen.prototype.outerHTML = function(element) {
489
+ var tmp;
490
+ if (element.outerHTML) {
491
+ return element.outerHTML;
492
+ }
493
+ tmp = document.createElement("div");
494
+ tmp.appendChild(element);
495
+ return tmp.innerHTML;
496
+ };
497
+
498
+ AbstractChosen.browser_is_supported = function() {
499
+ if (window.navigator.appName === "Microsoft Internet Explorer") {
500
+ return document.documentMode >= 8;
501
+ }
502
+ if (/iP(od|hone)/i.test(window.navigator.userAgent)) {
503
+ return false;
504
+ }
505
+ if (/Android/i.test(window.navigator.userAgent)) {
506
+ if (/Mobile/i.test(window.navigator.userAgent)) {
507
+ return false;
508
+ }
509
+ }
510
+ return true;
511
+ };
512
+
513
+ AbstractChosen.default_multiple_text = "Select Some Options";
514
+
515
+ AbstractChosen.default_single_text = "Select an Option";
516
+
517
+ AbstractChosen.default_no_result_text = "No results match";
518
+
519
+ return AbstractChosen;
520
+
521
+ })();
522
+
523
+ $ = jQuery;
524
+
525
+ $.fn.extend({
526
+ chosen: function(options) {
527
+ if (!AbstractChosen.browser_is_supported()) {
528
+ return this;
529
+ }
530
+ return this.each(function(input_field) {
531
+ var $this, chosen;
532
+ $this = $(this);
533
+ chosen = $this.data('chosen');
534
+ if (options === 'destroy' && chosen) {
535
+ chosen.destroy();
536
+ } else if (!chosen) {
537
+ $this.data('chosen', new Chosen(this, options));
538
+ }
539
+ });
540
+ }
541
+ });
542
+
543
+ Chosen = (function(_super) {
544
+ __extends(Chosen, _super);
545
+
546
+ function Chosen() {
547
+ _ref = Chosen.__super__.constructor.apply(this, arguments);
548
+ return _ref;
549
+ }
550
+
551
+ Chosen.prototype.setup = function() {
552
+ this.form_field_jq = $(this.form_field);
553
+ this.current_selectedIndex = this.form_field.selectedIndex;
554
+ return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl");
555
+ };
556
+
557
+ Chosen.prototype.set_up_html = function() {
558
+ var container_classes, container_props;
559
+ container_classes = ["chosen-container"];
560
+ container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single"));
561
+ if (this.inherit_select_classes && this.form_field.className) {
562
+ container_classes.push(this.form_field.className);
563
+ }
564
+ if (this.is_rtl) {
565
+ container_classes.push("chosen-rtl");
566
+ }
567
+ container_props = {
568
+ 'class': container_classes.join(' '),
569
+ 'style': "width: " + (this.container_width()) + ";",
570
+ 'title': this.form_field.title
571
+ };
572
+ if (this.form_field.id.length) {
573
+ container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
574
+ }
575
+ this.container = $("<div />", container_props);
576
+ if (this.is_multiple) {
577
+ this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>');
578
+ } else {
579
+ this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>');
580
+ }
581
+ this.form_field_jq.hide().after(this.container);
582
+ this.dropdown = this.container.find('div.chosen-drop').first();
583
+ this.search_field = this.container.find('input').first();
584
+ this.search_results = this.container.find('ul.chosen-results').first();
585
+ this.search_field_scale();
586
+ this.search_no_results = this.container.find('li.no-results').first();
587
+ if (this.is_multiple) {
588
+ this.search_choices = this.container.find('ul.chosen-choices').first();
589
+ this.search_container = this.container.find('li.search-field').first();
590
+ } else {
591
+ this.search_container = this.container.find('div.chosen-search').first();
592
+ this.selected_item = this.container.find('.chosen-single').first();
593
+ }
594
+ this.results_build();
595
+ this.set_tab_index();
596
+ this.set_label_behavior();
597
+ return this.form_field_jq.trigger("chosen:ready", {
598
+ chosen: this
599
+ });
600
+ };
601
+
602
+ Chosen.prototype.register_observers = function() {
603
+ var _this = this;
604
+ this.container.bind('mousedown.chosen', function(evt) {
605
+ _this.container_mousedown(evt);
606
+ });
607
+ this.container.bind('mouseup.chosen', function(evt) {
608
+ _this.container_mouseup(evt);
609
+ });
610
+ this.container.bind('mouseenter.chosen', function(evt) {
611
+ _this.mouse_enter(evt);
612
+ });
613
+ this.container.bind('mouseleave.chosen', function(evt) {
614
+ _this.mouse_leave(evt);
615
+ });
616
+ this.search_results.bind('mouseup.chosen', function(evt) {
617
+ _this.search_results_mouseup(evt);
618
+ });
619
+ this.search_results.bind('mouseover.chosen', function(evt) {
620
+ _this.search_results_mouseover(evt);
621
+ });
622
+ this.search_results.bind('mouseout.chosen', function(evt) {
623
+ _this.search_results_mouseout(evt);
624
+ });
625
+ this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) {
626
+ _this.search_results_mousewheel(evt);
627
+ });
628
+ this.search_results.bind('touchstart.chosen', function(evt) {
629
+ _this.search_results_touchstart(evt);
630
+ });
631
+ this.search_results.bind('touchmove.chosen', function(evt) {
632
+ _this.search_results_touchmove(evt);
633
+ });
634
+ this.search_results.bind('touchend.chosen', function(evt) {
635
+ _this.search_results_touchend(evt);
636
+ });
637
+ this.form_field_jq.bind("chosen:updated.chosen", function(evt) {
638
+ _this.results_update_field(evt);
639
+ });
640
+ this.form_field_jq.bind("chosen:activate.chosen", function(evt) {
641
+ _this.activate_field(evt);
642
+ });
643
+ this.form_field_jq.bind("chosen:open.chosen", function(evt) {
644
+ _this.container_mousedown(evt);
645
+ });
646
+ this.form_field_jq.bind("chosen:close.chosen", function(evt) {
647
+ _this.input_blur(evt);
648
+ });
649
+ this.search_field.bind('blur.chosen', function(evt) {
650
+ _this.input_blur(evt);
651
+ });
652
+ this.search_field.bind('keyup.chosen', function(evt) {
653
+ _this.keyup_checker(evt);
654
+ });
655
+ this.search_field.bind('keydown.chosen', function(evt) {
656
+ _this.keydown_checker(evt);
657
+ });
658
+ this.search_field.bind('focus.chosen', function(evt) {
659
+ _this.input_focus(evt);
660
+ });
661
+ this.search_field.bind('cut.chosen', function(evt) {
662
+ _this.clipboard_event_checker(evt);
663
+ });
664
+ this.search_field.bind('paste.chosen', function(evt) {
665
+ _this.clipboard_event_checker(evt);
666
+ });
667
+ if (this.is_multiple) {
668
+ return this.search_choices.bind('click.chosen', function(evt) {
669
+ _this.choices_click(evt);
670
+ });
671
+ } else {
672
+ return this.container.bind('click.chosen', function(evt) {
673
+ evt.preventDefault();
674
+ });
675
+ }
676
+ };
677
+
678
+ Chosen.prototype.destroy = function() {
679
+ $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action);
680
+ if (this.search_field[0].tabIndex) {
681
+ this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
682
+ }
683
+ this.container.remove();
684
+ this.form_field_jq.removeData('chosen');
685
+ return this.form_field_jq.show();
686
+ };
687
+
688
+ Chosen.prototype.search_field_disabled = function() {
689
+ this.is_disabled = this.form_field_jq[0].disabled;
690
+ if (this.is_disabled) {
691
+ this.container.addClass('chosen-disabled');
692
+ this.search_field[0].disabled = true;
693
+ if (!this.is_multiple) {
694
+ this.selected_item.unbind("focus.chosen", this.activate_action);
695
+ }
696
+ return this.close_field();
697
+ } else {
698
+ this.container.removeClass('chosen-disabled');
699
+ this.search_field[0].disabled = false;
700
+ if (!this.is_multiple) {
701
+ return this.selected_item.bind("focus.chosen", this.activate_action);
702
+ }
703
+ }
704
+ };
705
+
706
+ Chosen.prototype.container_mousedown = function(evt) {
707
+ if (!this.is_disabled) {
708
+ if (evt && evt.type === "mousedown" && !this.results_showing) {
709
+ evt.preventDefault();
710
+ }
711
+ if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
712
+ if (!this.active_field) {
713
+ if (this.is_multiple) {
714
+ this.search_field.val("");
715
+ }
716
+ $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action);
717
+ this.results_show();
718
+ } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
719
+ evt.preventDefault();
720
+ this.results_toggle();
721
+ }
722
+ return this.activate_field();
723
+ }
724
+ }
725
+ };
726
+
727
+ Chosen.prototype.container_mouseup = function(evt) {
728
+ if (evt.target.nodeName === "ABBR" && !this.is_disabled) {
729
+ return this.results_reset(evt);
730
+ }
731
+ };
732
+
733
+ Chosen.prototype.search_results_mousewheel = function(evt) {
734
+ var delta;
735
+ if (evt.originalEvent) {
736
+ delta = -evt.originalEvent.wheelDelta || evt.originalEvent.detail;
737
+ }
738
+ if (delta != null) {
739
+ evt.preventDefault();
740
+ if (evt.type === 'DOMMouseScroll') {
741
+ delta = delta * 40;
742
+ }
743
+ return this.search_results.scrollTop(delta + this.search_results.scrollTop());
744
+ }
745
+ };
746
+
747
+ Chosen.prototype.blur_test = function(evt) {
748
+ if (!this.active_field && this.container.hasClass("chosen-container-active")) {
749
+ return this.close_field();
750
+ }
751
+ };
752
+
753
+ Chosen.prototype.close_field = function() {
754
+ $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action);
755
+ this.active_field = false;
756
+ this.results_hide();
757
+ this.container.removeClass("chosen-container-active");
758
+ this.clear_backstroke();
759
+ this.show_search_field_default();
760
+ return this.search_field_scale();
761
+ };
762
+
763
+ Chosen.prototype.activate_field = function() {
764
+ this.container.addClass("chosen-container-active");
765
+ this.active_field = true;
766
+ this.search_field.val(this.search_field.val());
767
+ return this.search_field.focus();
768
+ };
769
+
770
+ Chosen.prototype.test_active_click = function(evt) {
771
+ var active_container;
772
+ active_container = $(evt.target).closest('.chosen-container');
773
+ if (active_container.length && this.container[0] === active_container[0]) {
774
+ return this.active_field = true;
775
+ } else {
776
+ return this.close_field();
777
+ }
778
+ };
779
+
780
+ Chosen.prototype.results_build = function() {
781
+ this.parsing = true;
782
+ this.selected_option_count = null;
783
+ this.results_data = SelectParser.select_to_array(this.form_field);
784
+ if (this.is_multiple) {
785
+ this.search_choices.find("li.search-choice").remove();
786
+ } else if (!this.is_multiple) {
787
+ this.single_set_selected_text();
788
+ if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
789
+ this.search_field[0].readOnly = true;
790
+ this.container.addClass("chosen-container-single-nosearch");
791
+ } else {
792
+ this.search_field[0].readOnly = false;
793
+ this.container.removeClass("chosen-container-single-nosearch");
794
+ }
795
+ }
796
+ this.update_results_content(this.results_option_build({
797
+ first: true
798
+ }));
799
+ this.search_field_disabled();
800
+ this.show_search_field_default();
801
+ this.search_field_scale();
802
+ return this.parsing = false;
803
+ };
804
+
805
+ Chosen.prototype.result_do_highlight = function(el) {
806
+ var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
807
+ if (el.length) {
808
+ this.result_clear_highlight();
809
+ this.result_highlight = el;
810
+ this.result_highlight.addClass("highlighted");
811
+ maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
812
+ visible_top = this.search_results.scrollTop();
813
+ visible_bottom = maxHeight + visible_top;
814
+ high_top = this.result_highlight.position().top + this.search_results.scrollTop();
815
+ high_bottom = high_top + this.result_highlight.outerHeight();
816
+ if (high_bottom >= visible_bottom) {
817
+ return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
818
+ } else if (high_top < visible_top) {
819
+ return this.search_results.scrollTop(high_top);
820
+ }
821
+ }
822
+ };
823
+
824
+ Chosen.prototype.result_clear_highlight = function() {
825
+ if (this.result_highlight) {
826
+ this.result_highlight.removeClass("highlighted");
827
+ }
828
+ return this.result_highlight = null;
829
+ };
830
+
831
+ Chosen.prototype.results_show = function() {
832
+ if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
833
+ this.form_field_jq.trigger("chosen:maxselected", {
834
+ chosen: this
835
+ });
836
+ return false;
837
+ }
838
+ this.container.addClass("chosen-with-drop");
839
+ this.results_showing = true;
840
+ this.search_field.focus();
841
+ this.search_field.val(this.search_field.val());
842
+ this.winnow_results();
843
+ return this.form_field_jq.trigger("chosen:showing_dropdown", {
844
+ chosen: this
845
+ });
846
+ };
847
+
848
+ Chosen.prototype.update_results_content = function(content) {
849
+ return this.search_results.html(content);
850
+ };
851
+
852
+ Chosen.prototype.results_hide = function() {
853
+ if (this.results_showing) {
854
+ this.result_clear_highlight();
855
+ this.container.removeClass("chosen-with-drop");
856
+ this.form_field_jq.trigger("chosen:hiding_dropdown", {
857
+ chosen: this
858
+ });
859
+ }
860
+ return this.results_showing = false;
861
+ };
862
+
863
+ Chosen.prototype.set_tab_index = function(el) {
864
+ var ti;
865
+ if (this.form_field.tabIndex) {
866
+ ti = this.form_field.tabIndex;
867
+ this.form_field.tabIndex = -1;
868
+ return this.search_field[0].tabIndex = ti;
869
+ }
870
+ };
871
+
872
+ Chosen.prototype.set_label_behavior = function() {
873
+ var _this = this;
874
+ this.form_field_label = this.form_field_jq.parents("label");
875
+ if (!this.form_field_label.length && this.form_field.id.length) {
876
+ this.form_field_label = $("label[for='" + this.form_field.id + "']");
877
+ }
878
+ if (this.form_field_label.length > 0) {
879
+ return this.form_field_label.bind('click.chosen', function(evt) {
880
+ if (_this.is_multiple) {
881
+ return _this.container_mousedown(evt);
882
+ } else {
883
+ return _this.activate_field();
884
+ }
885
+ });
886
+ }
887
+ };
888
+
889
+ Chosen.prototype.show_search_field_default = function() {
890
+ if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {
891
+ this.search_field.val(this.default_text);
892
+ return this.search_field.addClass("default");
893
+ } else {
894
+ this.search_field.val("");
895
+ return this.search_field.removeClass("default");
896
+ }
897
+ };
898
+
899
+ Chosen.prototype.search_results_mouseup = function(evt) {
900
+ var target;
901
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
902
+ if (target.length) {
903
+ this.result_highlight = target;
904
+ this.result_select(evt);
905
+ return this.search_field.focus();
906
+ }
907
+ };
908
+
909
+ Chosen.prototype.search_results_mouseover = function(evt) {
910
+ var target;
911
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
912
+ if (target) {
913
+ return this.result_do_highlight(target);
914
+ }
915
+ };
916
+
917
+ Chosen.prototype.search_results_mouseout = function(evt) {
918
+ if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) {
919
+ return this.result_clear_highlight();
920
+ }
921
+ };
922
+
923
+ Chosen.prototype.choice_build = function(item) {
924
+ var choice, close_link,
925
+ _this = this;
926
+ choice = $('<li />', {
927
+ "class": "search-choice"
928
+ }).html("<span>" + item.html + "</span>");
929
+ if (item.disabled) {
930
+ choice.addClass('search-choice-disabled');
931
+ } else {
932
+ close_link = $('<a />', {
933
+ "class": 'search-choice-close',
934
+ 'data-option-array-index': item.array_index
935
+ });
936
+ close_link.bind('click.chosen', function(evt) {
937
+ return _this.choice_destroy_link_click(evt);
938
+ });
939
+ choice.append(close_link);
940
+ }
941
+ return this.search_container.before(choice);
942
+ };
943
+
944
+ Chosen.prototype.choice_destroy_link_click = function(evt) {
945
+ evt.preventDefault();
946
+ evt.stopPropagation();
947
+ if (!this.is_disabled) {
948
+ return this.choice_destroy($(evt.target));
949
+ }
950
+ };
951
+
952
+ Chosen.prototype.choice_destroy = function(link) {
953
+ if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
954
+ this.show_search_field_default();
955
+ if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {
956
+ this.results_hide();
957
+ }
958
+ link.parents('li').first().remove();
959
+ return this.search_field_scale();
960
+ }
961
+ };
962
+
963
+ Chosen.prototype.results_reset = function() {
964
+ this.reset_single_select_options();
965
+ this.form_field.options[0].selected = true;
966
+ this.single_set_selected_text();
967
+ this.show_search_field_default();
968
+ this.results_reset_cleanup();
969
+ this.form_field_jq.trigger("change");
970
+ if (this.active_field) {
971
+ return this.results_hide();
972
+ }
973
+ };
974
+
975
+ Chosen.prototype.results_reset_cleanup = function() {
976
+ this.current_selectedIndex = this.form_field.selectedIndex;
977
+ return this.selected_item.find("abbr").remove();
978
+ };
979
+
980
+ Chosen.prototype.result_select = function(evt) {
981
+ var high, item;
982
+ if (this.result_highlight) {
983
+ high = this.result_highlight;
984
+ this.result_clear_highlight();
985
+ if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
986
+ this.form_field_jq.trigger("chosen:maxselected", {
987
+ chosen: this
988
+ });
989
+ return false;
990
+ }
991
+ if (this.is_multiple) {
992
+ high.removeClass("active-result");
993
+ } else {
994
+ this.reset_single_select_options();
995
+ }
996
+ item = this.results_data[high[0].getAttribute("data-option-array-index")];
997
+ item.selected = true;
998
+ this.form_field.options[item.options_index].selected = true;
999
+ this.selected_option_count = null;
1000
+ if (this.is_multiple) {
1001
+ this.choice_build(item);
1002
+ } else {
1003
+ this.single_set_selected_text(item.text);
1004
+ }
1005
+ if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {
1006
+ this.results_hide();
1007
+ }
1008
+ this.search_field.val("");
1009
+ if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
1010
+ this.form_field_jq.trigger("change", {
1011
+ 'selected': this.form_field.options[item.options_index].value
1012
+ });
1013
+ }
1014
+ this.current_selectedIndex = this.form_field.selectedIndex;
1015
+ return this.search_field_scale();
1016
+ }
1017
+ };
1018
+
1019
+ Chosen.prototype.single_set_selected_text = function(text) {
1020
+ if (text == null) {
1021
+ text = this.default_text;
1022
+ }
1023
+ if (text === this.default_text) {
1024
+ this.selected_item.addClass("chosen-default");
1025
+ } else {
1026
+ this.single_deselect_control_build();
1027
+ this.selected_item.removeClass("chosen-default");
1028
+ }
1029
+ return this.selected_item.find("span").text(text);
1030
+ };
1031
+
1032
+ Chosen.prototype.result_deselect = function(pos) {
1033
+ var result_data;
1034
+ result_data = this.results_data[pos];
1035
+ if (!this.form_field.options[result_data.options_index].disabled) {
1036
+ result_data.selected = false;
1037
+ this.form_field.options[result_data.options_index].selected = false;
1038
+ this.selected_option_count = null;
1039
+ this.result_clear_highlight();
1040
+ if (this.results_showing) {
1041
+ this.winnow_results();
1042
+ }
1043
+ this.form_field_jq.trigger("change", {
1044
+ deselected: this.form_field.options[result_data.options_index].value
1045
+ });
1046
+ this.search_field_scale();
1047
+ return true;
1048
+ } else {
1049
+ return false;
1050
+ }
1051
+ };
1052
+
1053
+ Chosen.prototype.single_deselect_control_build = function() {
1054
+ if (!this.allow_single_deselect) {
1055
+ return;
1056
+ }
1057
+ if (!this.selected_item.find("abbr").length) {
1058
+ this.selected_item.find("span").first().after("<abbr class=\"search-choice-close\"></abbr>");
1059
+ }
1060
+ return this.selected_item.addClass("chosen-single-with-deselect");
1061
+ };
1062
+
1063
+ Chosen.prototype.get_search_text = function() {
1064
+ if (this.search_field.val() === this.default_text) {
1065
+ return "";
1066
+ } else {
1067
+ return $('<div/>').text($.trim(this.search_field.val())).html();
1068
+ }
1069
+ };
1070
+
1071
+ Chosen.prototype.winnow_results_set_highlight = function() {
1072
+ var do_high, selected_results;
1073
+ selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : [];
1074
+ do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first();
1075
+ if (do_high != null) {
1076
+ return this.result_do_highlight(do_high);
1077
+ }
1078
+ };
1079
+
1080
+ Chosen.prototype.no_results = function(terms) {
1081
+ var no_results_html;
1082
+ no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>');
1083
+ no_results_html.find("span").first().html(terms);
1084
+ this.search_results.append(no_results_html);
1085
+ return this.form_field_jq.trigger("chosen:no_results", {
1086
+ chosen: this
1087
+ });
1088
+ };
1089
+
1090
+ Chosen.prototype.no_results_clear = function() {
1091
+ return this.search_results.find(".no-results").remove();
1092
+ };
1093
+
1094
+ Chosen.prototype.keydown_arrow = function() {
1095
+ var next_sib;
1096
+ if (this.results_showing && this.result_highlight) {
1097
+ next_sib = this.result_highlight.nextAll("li.active-result").first();
1098
+ if (next_sib) {
1099
+ return this.result_do_highlight(next_sib);
1100
+ }
1101
+ } else {
1102
+ return this.results_show();
1103
+ }
1104
+ };
1105
+
1106
+ Chosen.prototype.keyup_arrow = function() {
1107
+ var prev_sibs;
1108
+ if (!this.results_showing && !this.is_multiple) {
1109
+ return this.results_show();
1110
+ } else if (this.result_highlight) {
1111
+ prev_sibs = this.result_highlight.prevAll("li.active-result");
1112
+ if (prev_sibs.length) {
1113
+ return this.result_do_highlight(prev_sibs.first());
1114
+ } else {
1115
+ if (this.choices_count() > 0) {
1116
+ this.results_hide();
1117
+ }
1118
+ return this.result_clear_highlight();
1119
+ }
1120
+ }
1121
+ };
1122
+
1123
+ Chosen.prototype.keydown_backstroke = function() {
1124
+ var next_available_destroy;
1125
+ if (this.pending_backstroke) {
1126
+ this.choice_destroy(this.pending_backstroke.find("a").first());
1127
+ return this.clear_backstroke();
1128
+ } else {
1129
+ next_available_destroy = this.search_container.siblings("li.search-choice").last();
1130
+ if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) {
1131
+ this.pending_backstroke = next_available_destroy;
1132
+ if (this.single_backstroke_delete) {
1133
+ return this.keydown_backstroke();
1134
+ } else {
1135
+ return this.pending_backstroke.addClass("search-choice-focus");
1136
+ }
1137
+ }
1138
+ }
1139
+ };
1140
+
1141
+ Chosen.prototype.clear_backstroke = function() {
1142
+ if (this.pending_backstroke) {
1143
+ this.pending_backstroke.removeClass("search-choice-focus");
1144
+ }
1145
+ return this.pending_backstroke = null;
1146
+ };
1147
+
1148
+ Chosen.prototype.keydown_checker = function(evt) {
1149
+ var stroke, _ref1;
1150
+ stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;
1151
+ this.search_field_scale();
1152
+ if (stroke !== 8 && this.pending_backstroke) {
1153
+ this.clear_backstroke();
1154
+ }
1155
+ switch (stroke) {
1156
+ case 8:
1157
+ this.backstroke_length = this.search_field.val().length;
1158
+ break;
1159
+ case 9:
1160
+ if (this.results_showing && !this.is_multiple) {
1161
+ this.result_select(evt);
1162
+ }
1163
+ this.mouse_on_container = false;
1164
+ break;
1165
+ case 13:
1166
+ evt.preventDefault();
1167
+ break;
1168
+ case 38:
1169
+ evt.preventDefault();
1170
+ this.keyup_arrow();
1171
+ break;
1172
+ case 40:
1173
+ evt.preventDefault();
1174
+ this.keydown_arrow();
1175
+ break;
1176
+ }
1177
+ };
1178
+
1179
+ Chosen.prototype.search_field_scale = function() {
1180
+ var div, f_width, h, style, style_block, styles, w, _i, _len;
1181
+ if (this.is_multiple) {
1182
+ h = 0;
1183
+ w = 0;
1184
+ style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
1185
+ styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
1186
+ for (_i = 0, _len = styles.length; _i < _len; _i++) {
1187
+ style = styles[_i];
1188
+ style_block += style + ":" + this.search_field.css(style) + ";";
1189
+ }
1190
+ div = $('<div />', {
1191
+ 'style': style_block
1192
+ });
1193
+ div.text(this.search_field.val());
1194
+ $('body').append(div);
1195
+ w = div.width() + 25;
1196
+ div.remove();
1197
+ f_width = this.container.outerWidth();
1198
+ if (w > f_width - 10) {
1199
+ w = f_width - 10;
1200
+ }
1201
+ return this.search_field.css({
1202
+ 'width': w + 'px'
1203
+ });
1204
+ }
1205
+ };
1206
+
1207
+ return Chosen;
1208
+
1209
+ })(AbstractChosen);
1210
+
1211
+ }).call(this);
libs/factory/bootstrap/assets/js/plugin.color.js ADDED
@@ -0,0 +1,595 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ /**
3
+ * jQuery Color
4
+ * A utility class for working with colors in JavaScript.
5
+ */
6
+
7
+ (function(global, undef) {
8
+
9
+ var Color = function( color, type ) {
10
+ if ( ! ( this instanceof Color ) )
11
+ return new Color( color, type );
12
+
13
+ return this._init( color, type );
14
+ };
15
+
16
+ Color.fn = Color.prototype = {
17
+ _color: 0,
18
+ _alpha: 1,
19
+ error: false,
20
+ // for preserving hue/sat in fromHsl().toHsl() flows
21
+ _hsl: { h: 0, s: 0, l: 0 },
22
+ // for preserving hue/sat in fromHsv().toHsv() flows
23
+ _hsv: { h: 0, s: 0, v: 0 },
24
+ // for setting hsl or hsv space - needed for .h() & .s() functions to function properly
25
+ _hSpace: 'hsl',
26
+ _init: function( color ) {
27
+ var func = 'noop';
28
+ switch ( typeof color ) {
29
+ case 'object':
30
+ // alpha?
31
+ if ( color.a !== undef )
32
+ this.a( color.a );
33
+ func = ( color.r !== undef ) ? 'fromRgb' :
34
+ ( color.l !== undef ) ? 'fromHsl' :
35
+ ( color.v !== undef ) ? 'fromHsv' : func;
36
+ return this[func]( color );
37
+ case 'string':
38
+ return this.fromCSS( color );
39
+ case 'number':
40
+ return this.fromInt( parseInt( color, 10 ) );
41
+ }
42
+ return this;
43
+ },
44
+
45
+ _error: function() {
46
+ this.error = true;
47
+ return this;
48
+ },
49
+
50
+ clone: function() {
51
+ var newColor = new Color( this.toInt() ),
52
+ copy = ['_alpha', '_hSpace', '_hsl', '_hsv', 'error'];
53
+ for ( var i = copy.length - 1; i >= 0; i-- ) {
54
+ newColor[ copy[i] ] = this[ copy[i] ];
55
+ }
56
+ return newColor;
57
+ },
58
+
59
+ setHSpace: function( space ) {
60
+ this._hSpace = ( space === 'hsv' ) ? space : 'hsl';
61
+ return this;
62
+ },
63
+
64
+ noop: function() {
65
+ return this;
66
+ },
67
+
68
+ fromCSS: function( color ) {
69
+ var list,
70
+ leadingRE = /^(rgb|hs(l|v))a?\(/;
71
+ this.error = false;
72
+
73
+ // whitespace and semicolon trim
74
+ color = color.replace(/^\s+/, '').replace(/\s+$/, '').replace(/;$/, '');
75
+
76
+ if ( color.match(leadingRE) && color.match(/\)$/) ) {
77
+ list = color.replace(/(\s|%)/g, '').replace(leadingRE, '').replace(/,?\);?$/, '').split(',');
78
+
79
+ if ( list.length < 3 )
80
+ return this._error();
81
+
82
+ if ( list.length === 4 ) {
83
+ this.a( parseFloat( list.pop() ) );
84
+ // error state has been set to true in .a() if we passed NaN
85
+ if ( this.error )
86
+ return this;
87
+ }
88
+
89
+ for (var i = list.length - 1; i >= 0; i--) {
90
+ list[i] = parseInt(list[i], 10);
91
+ if ( isNaN( list[i] ) )
92
+ return this._error();
93
+ }
94
+
95
+ if ( color.match(/^rgb/) ) {
96
+ return this.fromRgb( {
97
+ r: list[0],
98
+ g: list[1],
99
+ b: list[2]
100
+ } );
101
+ } else if ( color.match(/^hsv/) ) {
102
+ return this.fromHsv( {
103
+ h: list[0],
104
+ s: list[1],
105
+ v: list[2]
106
+ } );
107
+ } else {
108
+ return this.fromHsl( {
109
+ h: list[0],
110
+ s: list[1],
111
+ l: list[2]
112
+ } );
113
+ }
114
+ } else {
115
+ // must be hex amirite?
116
+ return this.fromHex( color );
117
+ }
118
+ },
119
+
120
+ fromRgb: function( rgb, preserve ) {
121
+ if ( typeof rgb !== 'object' || rgb.r === undef || rgb.g === undef || rgb.b === undef )
122
+ return this._error();
123
+
124
+ this.error = false;
125
+ return this.fromInt( parseInt( ( rgb.r << 16 ) + ( rgb.g << 8 ) + rgb.b, 10 ), preserve );
126
+ },
127
+
128
+ fromHex: function( color ) {
129
+ color = color.replace(/^#/, '').replace(/^0x/, '');
130
+ if ( color.length === 3 ) {
131
+ color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];
132
+ }
133
+
134
+ // rough error checking - this is where things go squirrely the most
135
+ this.error = ! /^[0-9A-F]{6}$/i.test( color );
136
+ return this.fromInt( parseInt( color, 16 ) );
137
+ },
138
+
139
+ fromHsl: function( hsl ) {
140
+ var r, g, b, q, p, h, s, l;
141
+
142
+ if ( typeof hsl !== 'object' || hsl.h === undef || hsl.s === undef || hsl.l === undef )
143
+ return this._error();
144
+
145
+ this._hsl = hsl; // store it
146
+ this._hSpace = 'hsl'; // implicit
147
+ h = hsl.h / 360; s = hsl.s / 100; l = hsl.l / 100;
148
+ if ( s === 0 ) {
149
+ r = g = b = l; // achromatic
150
+ }
151
+ else {
152
+ q = l < 0.5 ? l * ( 1 + s ) : l + s - l * s;
153
+ p = 2 * l - q;
154
+ r = this.hue2rgb( p, q, h + 1/3 );
155
+ g = this.hue2rgb( p, q, h );
156
+ b = this.hue2rgb( p, q, h - 1/3 );
157
+ }
158
+ return this.fromRgb( {
159
+ r: r * 255,
160
+ g: g * 255,
161
+ b: b * 255
162
+ }, true ); // true preserves hue/sat
163
+ },
164
+
165
+ fromHsv: function( hsv ) {
166
+ var h, s, v, r, g, b, i, f, p, q, t;
167
+ if ( typeof hsv !== 'object' || hsv.h === undef || hsv.s === undef || hsv.v === undef )
168
+ return this._error();
169
+
170
+ this._hsv = hsv; // store it
171
+ this._hSpace = 'hsv'; // implicit
172
+
173
+ h = hsv.h / 360; s = hsv.s / 100; v = hsv.v / 100;
174
+ i = Math.floor( h * 6 );
175
+ f = h * 6 - i;
176
+ p = v * ( 1 - s );
177
+ q = v * ( 1 - f * s );
178
+ t = v * ( 1 - ( 1 - f ) * s );
179
+
180
+ switch( i % 6 ) {
181
+ case 0:
182
+ r = v; g = t; b = p;
183
+ break;
184
+ case 1:
185
+ r = q; g = v; b = p;
186
+ break;
187
+ case 2:
188
+ r = p; g = v; b = t;
189
+ break;
190
+ case 3:
191
+ r = p; g = q; b = v;
192
+ break;
193
+ case 4:
194
+ r = t; g = p; b = v;
195
+ break;
196
+ case 5:
197
+ r = v; g = p; b = q;
198
+ break;
199
+ }
200
+
201
+ return this.fromRgb( {
202
+ r: r * 255,
203
+ g: g * 255,
204
+ b: b * 255
205
+ }, true ); // true preserves hue/sat
206
+
207
+ },
208
+ // everything comes down to fromInt
209
+ fromInt: function( color, preserve ) {
210
+ this._color = parseInt( color, 10 );
211
+
212
+ if ( isNaN( this._color ) )
213
+ this._color = 0;
214
+
215
+ // let's coerce things
216
+ if ( this._color > 16777215 )
217
+ this._color = 16777215;
218
+ else if ( this._color < 0 )
219
+ this._color = 0;
220
+
221
+ // let's not do weird things
222
+ if ( preserve === undef ) {
223
+ this._hsv.h = this._hsv.s = this._hsl.h = this._hsl.s = 0;
224
+ }
225
+ // EVENT GOES HERE
226
+ return this;
227
+ },
228
+
229
+ hue2rgb: function( p, q, t ) {
230
+ if ( t < 0 ) {
231
+ t += 1;
232
+ }
233
+ if ( t > 1 ) {
234
+ t -= 1;
235
+ }
236
+ if ( t < 1/6 ) {
237
+ return p + ( q - p ) * 6 * t;
238
+ }
239
+ if ( t < 1/2 ) {
240
+ return q;
241
+ }
242
+ if ( t < 2/3 ) {
243
+ return p + ( q - p ) * ( 2/3 - t ) * 6;
244
+ }
245
+ return p;
246
+ },
247
+
248
+ toString: function() {
249
+ var hex = parseInt( this._color, 10 ).toString( 16 );
250
+ if ( this.error )
251
+ return '';
252
+ // maybe left pad it
253
+ if ( hex.length < 6 ) {
254
+ for (var i = 6 - hex.length - 1; i >= 0; i--) {
255
+ hex = '0' + hex;
256
+ }
257
+ }
258
+ return '#' + hex;
259
+ },
260
+
261
+ toCSS: function( type, alpha ) {
262
+ type = type || 'hex';
263
+ alpha = parseFloat( alpha || this._alpha );
264
+ switch ( type ) {
265
+ case 'rgb':
266
+ case 'rgba':
267
+ var rgb = this.toRgb();
268
+ if ( alpha < 1 ) {
269
+ return "rgba( " + rgb.r + ", " + rgb.g + ", " + rgb.b + ", " + alpha + " )";
270
+ }
271
+ else {
272
+ return "rgb( " + rgb.r + ", " + rgb.g + ", " + rgb.b + " )";
273
+ }
274
+ break;
275
+ case 'hsl':
276
+ case 'hsla':
277
+ var hsl = this.toHsl();
278
+ if ( alpha < 1 ) {
279
+ return "hsla( " + hsl.h + ", " + hsl.s + "%, " + hsl.l + "%, " + alpha + " )";
280
+ }
281
+ else {
282
+ return "hsl( " + hsl.h + ", " + hsl.s + "%, " + hsl.l + "% )";
283
+ }
284
+ break;
285
+ default:
286
+ return this.toString();
287
+ }
288
+ },
289
+
290
+ toRgb: function() {
291
+ return {
292
+ r: 255 & ( this._color >> 16 ),
293
+ g: 255 & ( this._color >> 8 ),
294
+ b: 255 & ( this._color )
295
+ };
296
+ },
297
+
298
+ toHsl: function() {
299
+ var rgb = this.toRgb();
300
+ var r = rgb.r / 255, g = rgb.g / 255, b = rgb.b / 255;
301
+ var max = Math.max( r, g, b ), min = Math.min( r, g, b );
302
+ var h, s, l = ( max + min ) / 2;
303
+
304
+ if ( max === min ) {
305
+ h = s = 0; // achromatic
306
+ } else {
307
+ var d = max - min;
308
+ s = l > 0.5 ? d / ( 2 - max - min ) : d / ( max + min );
309
+ switch ( max ) {
310
+ case r: h = ( g - b ) / d + ( g < b ? 6 : 0 );
311
+ break;
312
+ case g: h = ( b - r ) / d + 2;
313
+ break;
314
+ case b: h = ( r - g ) / d + 4;
315
+ break;
316
+ }
317
+ h /= 6;
318
+ }
319
+
320
+ // maintain hue & sat if we've been manipulating things in the HSL space.
321
+ h = Math.round( h * 360 );
322
+ if ( h === 0 && this._hsl.h !== h ) {
323
+ h = this._hsl.h;
324
+ }
325
+ s = Math.round( s * 100 );
326
+ if ( s === 0 && this._hsl.s ) {
327
+ s = this._hsl.s;
328
+ }
329
+
330
+ return {
331
+ h: h,
332
+ s: s,
333
+ l: Math.round( l * 100 )
334
+ };
335
+
336
+ },
337
+
338
+ toHsv: function() {
339
+ var rgb = this.toRgb();
340
+ var r = rgb.r / 255, g = rgb.g / 255, b = rgb.b / 255;
341
+ var max = Math.max( r, g, b ), min = Math.min( r, g, b );
342
+ var h, s, v = max;
343
+ var d = max - min;
344
+ s = max === 0 ? 0 : d / max;
345
+
346
+ if ( max === min ) {
347
+ h = s = 0; // achromatic
348
+ } else {
349
+ switch( max ){
350
+ case r:
351
+ h = ( g - b ) / d + ( g < b ? 6 : 0 );
352
+ break;
353
+ case g:
354
+ h = ( b - r ) / d + 2;
355
+ break;
356
+ case b:
357
+ h = ( r - g ) / d + 4;
358
+ break;
359
+ }
360
+ h /= 6;
361
+ }
362
+
363
+ // maintain hue & sat if we've been manipulating things in the HSV space.
364
+ h = Math.round( h * 360 );
365
+ if ( h === 0 && this._hsv.h !== h ) {
366
+ h = this._hsv.h;
367
+ }
368
+ s = Math.round( s * 100 );
369
+ if ( s === 0 && this._hsv.s ) {
370
+ s = this._hsv.s;
371
+ }
372
+
373
+ return {
374
+ h: h,
375
+ s: s,
376
+ v: Math.round( v * 100 )
377
+ };
378
+ },
379
+
380
+ toInt: function() {
381
+ return this._color;
382
+ },
383
+
384
+ toIEOctoHex: function() {
385
+ // AARRBBGG
386
+ var hex = this.toString();
387
+ var AA = parseInt( 255 * this._alpha, 10 ).toString(16);
388
+ if ( AA.length === 1 ) {
389
+ AA = '0' + AA;
390
+ }
391
+ return '#' + AA + hex.replace(/^#/, '' );
392
+ },
393
+
394
+ toLuminosity: function() {
395
+ var rgb = this.toRgb();
396
+ return 0.2126 * Math.pow( rgb.r / 255, 2.2 ) + 0.7152 * Math.pow( rgb.g / 255, 2.2 ) + 0.0722 * Math.pow( rgb.b / 255, 2.2);
397
+ },
398
+
399
+ getDistanceLuminosityFrom: function( color ) {
400
+ if ( ! ( color instanceof Color ) ) {
401
+ throw 'getDistanceLuminosityFrom requires a Color object';
402
+ }
403
+ var lum1 = this.toLuminosity();
404
+ var lum2 = color.toLuminosity();
405
+ if ( lum1 > lum2 ) {
406
+ return ( lum1 + 0.05 ) / ( lum2 + 0.05 );
407
+ }
408
+ else {
409
+ return ( lum2 + 0.05 ) / ( lum1 + 0.05 );
410
+ }
411
+ },
412
+
413
+ getMaxContrastColor: function() {
414
+ var lum = this.toLuminosity();
415
+ var hex = ( lum >= 0.5 ) ? '000000' : 'ffffff';
416
+ return new Color( hex );
417
+ },
418
+
419
+ getReadableContrastingColor: function( bgColor, minContrast ) {
420
+ if ( ! bgColor instanceof Color ) {
421
+ return this;
422
+ }
423
+
424
+ // you shouldn't use less than 5, but you might want to.
425
+ var targetContrast = ( minContrast === undef ) ? 5 : minContrast;
426
+ // working things
427
+ var contrast = bgColor.getDistanceLuminosityFrom( this );
428
+ var maxContrastColor = bgColor.getMaxContrastColor();
429
+ var maxContrast = maxContrastColor.getDistanceLuminosityFrom( bgColor );
430
+
431
+ // if current max contrast is less than the target contrast, we had wishful thinking.
432
+ // still, go max
433
+ if ( maxContrast <= targetContrast ) {
434
+ return maxContrastColor;
435
+ }
436
+ // or, we might already have sufficient contrast
437
+ else if ( contrast >= targetContrast ) {
438
+ return this;
439
+ }
440
+
441
+ var incr = ( 0 === maxContrastColor.toInt() ) ? -1 : 1;
442
+ while ( contrast < targetContrast ) {
443
+ this.l( incr, true ); // 2nd arg turns this into an incrementer
444
+ contrast = this.getDistanceLuminosityFrom( bgColor );
445
+ // infininite loop prevention: you never know.
446
+ if ( this._color === 0 || this._color === 16777215 ) {
447
+ break;
448
+ }
449
+ }
450
+
451
+ return this;
452
+
453
+ },
454
+
455
+ a: function( val ) {
456
+ if ( val === undef )
457
+ return this._alpha;
458
+
459
+ var a = parseFloat( val );
460
+
461
+ if ( isNaN( a ) )
462
+ return this._error();
463
+
464
+ this._alpha = a;
465
+ return this;
466
+ },
467
+
468
+ // TRANSFORMS
469
+
470
+ darken: function( amount ) {
471
+ amount = amount || 5;
472
+ return this.l( - amount, true );
473
+ },
474
+
475
+ lighten: function( amount ) {
476
+ amount = amount || 5;
477
+ return this.l( amount, true );
478
+ },
479
+
480
+ saturate: function( amount ) {
481
+ amount = amount || 15;
482
+ return this.s( amount, true );
483
+ },
484
+
485
+ desaturate: function( amount ) {
486
+ amount = amount || 15;
487
+ return this.s( - amount, true );
488
+ },
489
+
490
+ toGrayscale: function() {
491
+ return this.setHSpace('hsl').s( 0 );
492
+ },
493
+
494
+ getComplement: function() {
495
+ return this.h( 180, true );
496
+ },
497
+
498
+ getSplitComplement: function( step ) {
499
+ step = step || 1;
500
+ var incr = 180 + ( step * 30 );
501
+ return this.h( incr, true );
502
+ },
503
+
504
+ getAnalog: function( step ) {
505
+ step = step || 1;
506
+ var incr = step * 30;
507
+ return this.h( incr, true );
508
+ },
509
+
510
+ getTetrad: function( step ) {
511
+ step = step || 1;
512
+ var incr = step * 60;
513
+ return this.h( incr, true );
514
+ },
515
+
516
+ getTriad: function( step ) {
517
+ step = step || 1;
518
+ var incr = step * 120;
519
+ return this.h( incr, true );
520
+ },
521
+
522
+ _partial: function( key ) {
523
+ var prop = shortProps[key];
524
+ return function( val, incr ) {
525
+ var color = this._spaceFunc('to', prop.space);
526
+
527
+ // GETTER
528
+ if ( val === undef )
529
+ return color[key];
530
+
531
+ // INCREMENT
532
+ if ( incr === true )
533
+ val = color[key] + val;
534
+
535
+ // MOD & RANGE
536
+ if ( prop.mod )
537
+ val = val % prop.mod;
538
+ if ( prop.range )
539
+ val = ( val < prop.range[0] ) ? prop.range[0] : ( val > prop.range[1] ) ? prop.range[1] : val;
540
+
541
+ // NEW VALUE
542
+ color[key] = val;
543
+
544
+ return this._spaceFunc('from', prop.space, color);
545
+ };
546
+ },
547
+
548
+ _spaceFunc: function( dir, s, val ) {
549
+ var space = s || this._hSpace,
550
+ funcName = dir + space.charAt(0).toUpperCase() + space.substr(1);
551
+ return this[funcName](val);
552
+ }
553
+ };
554
+
555
+ var shortProps = {
556
+ h: {
557
+ mod: 360
558
+ },
559
+ s: {
560
+ range: [0,100]
561
+ },
562
+ l: {
563
+ space: 'hsl',
564
+ range: [0,100]
565
+ },
566
+ v: {
567
+ space: 'hsv',
568
+ range: [0,100]
569
+ },
570
+ r: {
571
+ space: 'rgb',
572
+ range: [0,255]
573
+ },
574
+ g: {
575
+ space: 'rgb',
576
+ range: [0,255]
577
+ },
578
+ b: {
579
+ space: 'rgb',
580
+ range: [0,255]
581
+ }
582
+ };
583
+
584
+ for ( var key in shortProps ) {
585
+ if ( shortProps.hasOwnProperty( key ) )
586
+ Color.fn[key] = Color.fn._partial(key);
587
+ }
588
+
589
+ // play nicely with Node + browser
590
+ if ( typeof exports === 'object' )
591
+ module.exports = Color;
592
+ else
593
+ global.Color = Color;
594
+
595
+ }(this));
libs/factory/bootstrap/assets/js/plugin.ddslick.js ADDED
@@ -0,0 +1 @@
 
1
+ (function (a) { function g(a, b) { var c = a.data("ddslick"); var d = a.find(".dd-selected"), e = d.siblings(".dd-selected-value"), f = a.find(".dd-options"), g = d.siblings(".dd-pointer"), h = a.find(".dd-option").eq(b), k = h.closest("li"), l = c.settings, m = c.settings.data[b]; a.find(".dd-option").removeClass("dd-option-selected"); h.addClass("dd-option-selected"); c.selectedIndex = b; c.selectedItem = k; c.selectedData = m; if (l.showSelectedHTML) { d.html((m.imageSrc ? '<img class="dd-selected-image' + (l.imagePosition == "right" ? " dd-image-right" : "") + '" src="' + m.imageSrc + '" />' : "") + (m.text ? '<label class="dd-selected-text">' + m.text + "</label>" : "") + (m.description ? '<small class="dd-selected-description dd-desc' + (l.truncateDescription ? " dd-selected-description-truncated" : "") + '" >' + m.description + "</small>" : "")) } else d.html(m.text); e.val(m.value); c.original.val(m.value); a.data("ddslick", c); i(a); j(a); if (typeof l.onSelected == "function") { l.onSelected.call(this, c) } } function h(b) { var c = b.find(".dd-select"), d = c.siblings(".dd-options"), e = c.find(".dd-pointer"), f = d.is(":visible"); a(".dd-click-off-close").not(d).slideUp(50); a(".dd-pointer").removeClass("dd-pointer-up"); if (f) { d.slideUp("fast"); e.removeClass("dd-pointer-up") } else { d.slideDown("fast"); e.addClass("dd-pointer-up") } k(b) } function i(a) { a.find(".dd-options").slideUp(50); a.find(".dd-pointer").removeClass("dd-pointer-up").removeClass("dd-pointer-up") } function j(a) { var b = a.find(".dd-select").css("height"); var c = a.find(".dd-selected-description"); var d = a.find(".dd-selected-image"); if (c.length <= 0 && d.length > 0) { a.find(".dd-selected-text").css("lineHeight", b) } } function k(b) { b.find(".dd-option").each(function () { var c = a(this); var d = c.css("height"); var e = c.find(".dd-option-description"); var f = b.find(".dd-option-image"); if (e.length <= 0 && f.length > 0) { c.find(".dd-option-text").css("lineHeight", d) } }) } a.fn.ddslick = function (c) { if (b[c]) { return b[c].apply(this, Array.prototype.slice.call(arguments, 1)) } else if (typeof c === "object" || !c) { return b.init.apply(this, arguments) } else { a.error("Method " + c + " does not exists.") } }; var b = {}, c = { data: [], keepJSONItemsOnTop: false, width: 260, height: null, background: "#eee", selectText: "", defaultSelectedIndex: null, truncateDescription: true, imagePosition: "left", showSelectedHTML: true, clickOffToClose: true, onSelected: function () { } }, d = '<div class="dd-select"><input class="dd-selected-value" type="hidden" /><a class="dd-selected"></a><span class="dd-pointer dd-pointer-down"></span></div>', e = '<ul class="dd-options"></ul>', f = '<style id="css-ddslick" type="text/css">' + ".dd-select{ border-radius:2px; border:solid 1px #ccc; position:relative; cursor:pointer;}" + ".dd-desc { color:#aaa; display:block; overflow: hidden; font-weight:normal; line-height: 1.4em; }" + ".dd-selected{ overflow:hidden; display:block; padding:10px; font-weight:bold;}" + ".dd-pointer{ width:0; height:0; position:absolute; right:10px; top:50%; margin-top:-3px;}" + ".dd-pointer-down{ border:solid 5px transparent; border-top:solid 5px #000; }" + ".dd-pointer-up{border:solid 5px transparent !important; border-bottom:solid 5px #000 !important; margin-top:-8px;}" + ".dd-options{ border:solid 1px #ccc; border-top:none; list-style:none; box-shadow:0px 1px 5px #ddd; display:none; position:absolute; z-index:2000; margin:0; padding:0;background:#fff; overflow:auto;}" + ".dd-option{ padding:10px; display:block; border-bottom:solid 1px #ddd; overflow:hidden; text-decoration:none; color:#333; cursor:pointer;-webkit-transition: all 0.25s ease-in-out; -moz-transition: all 0.25s ease-in-out;-o-transition: all 0.25s ease-in-out;-ms-transition: all 0.25s ease-in-out; }" + ".dd-options > li:last-child > .dd-option{ border-bottom:none;}" + ".dd-option:hover{ background:#f3f3f3; color:#000;}" + ".dd-selected-description-truncated { text-overflow: ellipsis; white-space:nowrap; }" + ".dd-option-selected { background:#f6f6f6; }" + ".dd-option-image, .dd-selected-image { vertical-align:middle; float:left; margin-right:5px; max-width:64px;}" + ".dd-image-right { float:right; margin-right:15px; margin-left:5px;}" + ".dd-container{ position:relative;}​ .dd-selected-text { font-weight:bold}​</style>"; if (a("#css-ddslick").length <= 0) { a(f).appendTo("head") } b.init = function (b) { var b = a.extend({}, c, b); return this.each(function () { var c = a(this), f = c.data("ddslick"); if (!f) { var i = [], j = b.data; c.find("option").each(function () { var b = a(this), c = b.data(); i.push({ text: a.trim(b.text()), value: b.val(), selected: b.is(":selected"), description: c.description, imageSrc: c.imagesrc }) }); if (b.keepJSONItemsOnTop) a.merge(b.data, i); else b.data = a.merge(i, b.data); var k = c, l = a('<div id="' + c.attr("id") + '"></div>'); c.replaceWith(l); c = l; c.addClass("dd-container").append(d).append(e); var i = c.find(".dd-select"), m = c.find(".dd-options"); m.css({ width: b.width }); i.css({ width: b.width, background: b.background }); c.css({ width: b.width }); if (b.height != null) m.css({ height: b.height, overflow: "auto" }); a.each(b.data, function (a, c) { if (c.selected) b.defaultSelectedIndex = a; m.append("<li>" + '<a class="dd-option">' + (c.value ? ' <input class="dd-option-value" type="hidden" value="' + c.value + '" />' : "") + (c.imageSrc ? ' <img class="dd-option-image' + (b.imagePosition == "right" ? " dd-image-right" : "") + '" src="' + c.imageSrc + '" />' : "") + (c.text ? ' <label class="dd-option-text">' + c.text + "</label>" : "") + (c.description ? ' <small class="dd-option-description dd-desc">' + c.description + "</small>" : "") + "</a>" + "</li>") }); var n = { settings: b, original: k, selectedIndex: -1, selectedItem: null, selectedData: null }; c.data("ddslick", n); if (b.selectText.length > 0 && b.defaultSelectedIndex == null) { c.find(".dd-selected").html(b.selectText) } else { var o = b.defaultSelectedIndex != null && b.defaultSelectedIndex >= 0 && b.defaultSelectedIndex < b.data.length ? b.defaultSelectedIndex : 0; g(c, o) } c.find(".dd-select").on("click.ddslick", function () { h(c) }); c.find(".dd-option").on("click.ddslick", function () { g(c, a(this).closest("li").index()) }); if (b.clickOffToClose) { m.addClass("dd-click-off-close"); c.on("click.ddslick", function (a) { a.stopPropagation() }); a("body").on("click", function () { a(".dd-click-off-close").slideUp(50).siblings(".dd-select").find(".dd-pointer").removeClass("dd-pointer-up") }) } } }) }; b.select = function (b) { return this.each(function () { if (b.index) g(a(this), b.index) }) }; b.open = function () { return this.each(function () { var b = a(this), c = b.data("ddslick"); if (c) h(b) }) }; b.close = function () { return this.each(function () { var b = a(this), c = b.data("ddslick"); if (c) i(b) }) }; b.destroy = function () { return this.each(function () { var b = a(this), c = b.data("ddslick"); if (c) { var d = c.original; b.removeData("ddslick").unbind(".ddslick").replaceWith(d) } }) } })(jQuery)
libs/factory/bootstrap/assets/js/plugin.gradient-picker.js ADDED
@@ -0,0 +1,585 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ *jQuery gradient generator
3
+ @author Matt Crinklaw-Vogt (tantaman)
4
+ */
5
+ (function( $ ) {
6
+
7
+ if (!$.event.special.destroyed) {
8
+ $.event.special.destroyed = {
9
+ remove: function(o) {
10
+ if (o.handler) {
11
+ o.handler();
12
+ }
13
+ }
14
+ }
15
+ }
16
+
17
+
18
+ //Сортирует в порядке убывания
19
+ function ctrlPtComparator(l,r) {
20
+ return l.position - r.position;
21
+ }
22
+ //Преобразует и инициализирует объекты вне области видимости
23
+ function bind(fn, ctx) {
24
+ if (typeof fn.bind === "function") {
25
+ return fn.bind(ctx);
26
+ } else {
27
+ return function() {
28
+ fn.apply(ctx, arguments);
29
+ }
30
+ }
31
+ }
32
+
33
+ var agent = window.navigator.userAgent;
34
+ var browserPrefix = ["-webkit-", "-moz-", "-ms-"];
35
+ var x,y = 0;
36
+
37
+ function GradientSelection($el, opts) {
38
+ var self = this;
39
+
40
+ this.$el = $el;
41
+
42
+ this.$presets = this.$el.find('.gradientPicker-pallets');
43
+ this.$presetsItems = this.$presets.find('.factory-preset-gradient');
44
+
45
+ this.$preview = this.$el.find(".gradientPicker-preview");
46
+ this.$pointsContainer = this.$el.find(".factory-points");
47
+
48
+ this.$colorPickerContainer = this.$el.find(".factory-color-picker-container");
49
+ this.$colorPicker = this.$el.find(".factory-color-picker");
50
+ this.$colorHex = this.$el.find(".factory-color-hex");
51
+ this.$opacitySliderContainer = this.$el.find(".factory-slider-container");
52
+ this.$opacitySlider = this.$el.find(".factory-bar");
53
+
54
+ this.$el.css("position", "relative");
55
+ this.opts = opts;
56
+
57
+ this._createPresetGradients();
58
+ this._createPreview();
59
+ this._createColorPicker();
60
+ this._createDirectionDropdown();
61
+
62
+ this.controlPoints = [];
63
+
64
+ opts.controlPoints = opts.controlPoints || [];
65
+ for (var i = 0; i < opts.controlPoints.length; ++i) {
66
+ var ctrlPt = this.createCtrlPt(opts.controlPoints[i]);
67
+ this.controlPoints.push(ctrlPt);
68
+ }
69
+
70
+ // if the gradient is not specified by default
71
+ // then we're using the first preset gradient
72
+
73
+ if ( this.controlPoints.length === 0 ) {
74
+ this.controlPoints.push( this.createCtrlPt( this.$presetsItems.data('primary') + " 0% 1" ) );
75
+ this.controlPoints.push( this.createCtrlPt( this.$presetsItems.data('secondary') + " 100% 1" ) );
76
+ }
77
+
78
+ // hides a color picker on losing the focus
79
+ $(document).on('click.gp.factory', function(){
80
+ self.hideColorPicker();
81
+ });
82
+
83
+ // doesn't hide on clicks inside the picker container
84
+ this.$colorPickerContainer.on('click.gp.factory', function(e){
85
+ e.stopPropagation();
86
+ });
87
+
88
+ this.$pointsContainer.on('click.gp.factory',function(e){
89
+ e.stopPropagation();
90
+ self.placePoint(e);
91
+ });
92
+
93
+ this.updatePreview();
94
+ }
95
+
96
+ GradientSelection.prototype = {
97
+
98
+ /* ----------------------------------------------------------------------------- */
99
+ /* Markup & Events
100
+ /* ----------------------------------------------------------------------------- */
101
+
102
+ /**
103
+ * Creates a panel with preset gradients.
104
+ *
105
+ * @returns void
106
+ */
107
+ _createPresetGradients: function() {
108
+ var self = this;
109
+
110
+ // painting the preset gradients
111
+ this.$presetsItems.each(function(){
112
+ var $item = $(this);
113
+
114
+ var $secondaryColorWrap = $('<span class="factory-secondary-color-wrap"></span>').appendTo( $item );
115
+ var $secondaryColor = $('<span class="factory-secondary-color"></span>').appendTo($secondaryColorWrap);
116
+
117
+ $item.css("background", $item.data('primary'));
118
+ $secondaryColor.css("background", $item.data('secondary'));
119
+ });
120
+
121
+ // set gradient on clicl
122
+ this.$presetsItems.click(function(){
123
+ var primaryColor = $(this).data('primary');
124
+ var secondaryColor = $(this).data('secondary');
125
+ self.setGradient([primaryColor + " 0% 1", secondaryColor + " 100% 1"]);
126
+ });
127
+ },
128
+
129
+ /**
130
+ * Creates the gradient preview.
131
+ * @returns {undefined}
132
+ */
133
+ _createPreview: function() {
134
+
135
+ var canvas = this.$preview[0];
136
+
137
+ canvas.width = canvas.clientWidth === 0 ? 210 : canvas.clientWidth;
138
+ canvas.height = canvas.clientHeight === 0 ? 30 : canvas.clientHeight;
139
+
140
+ this.g2d = canvas.getContext("2d");
141
+ },
142
+
143
+ /**
144
+ * Creates a color picker for points.
145
+ *
146
+ * @return void
147
+ */
148
+ _createColorPicker: function() {
149
+ var self = this;
150
+
151
+ this.$colorPicker.factoryBootstrap329_iris({
152
+ width: 217,
153
+ palettes: ['#16a086', '#27ae61', '#2a80b9', '#8f44ad', '#2d3e50', '#f49c14', '#c1392b', '#bec3c7'],
154
+ hide: true,
155
+ change: function(event, ui) {
156
+ self.currentPoint.updateColor( ui.color.toString() );
157
+ if ( !self._colorLock ) self.$colorHex.val( ui.color.toString() );
158
+ }
159
+ });
160
+
161
+ self.$colorHex.on('change paste keyup', function(){
162
+ self._colorLock = true;
163
+ self.$colorPicker.factoryBootstrap329_iris('color', self.$colorHex.val());
164
+ self._cancelColorLock();
165
+ });
166
+
167
+ this.$opacitySlider.noUiSlider({
168
+ start: 100,
169
+ range: {'min': 0, 'max': 100 },
170
+ step: 1
171
+ });
172
+
173
+ this.$opacitySlider.on('slide', function(){
174
+ var value = parseInt( self.$opacitySlider.val() );
175
+ var valueWithUnits = value + "%";
176
+
177
+ self.$opacitySliderContainer.find(".factory-visible-value").text(valueWithUnits);
178
+ self.currentPoint.updateOpacity( value / 100 );
179
+ });
180
+
181
+ this.$opacitySlider.on('set', function(){
182
+ self.$result.val( self.getValue() );
183
+ self.$result.trigger('change');
184
+ });
185
+ },
186
+
187
+ /**
188
+ * The code that allows to a dead loop when editing the hex value directly.
189
+ */
190
+
191
+ _repeatColorLock: false,
192
+ _colorLock: false,
193
+ _colorLockTimer: false,
194
+
195
+ _cancelColorLock: function( force ) {
196
+ var self = this;
197
+
198
+ if ( self._colorLockTimer && !force ) {
199
+ this._repeatColorLock = true;
200
+ return false;
201
+ }
202
+
203
+ this._colorLockTimer = setTimeout(function(){
204
+
205
+ if ( self._repeatColorLock ) {
206
+ self._repeatColorLock = false;
207
+ self._cancelColorLock( true );
208
+ return false;
209
+ }
210
+
211
+ self._colorLock = false;
212
+ self._colorLockTimer = false;
213
+ self._repeatColorLock = false;
214
+
215
+ }, 500);
216
+ },
217
+
218
+ /**
219
+ * Creates the gradient direction dropdown.
220
+ *
221
+ * @returns void
222
+ */
223
+ _createDirectionDropdown: function() {
224
+ var self = this;
225
+
226
+ var resVertical = factory && factory.res && factory.res.resVertical || 'vertical';
227
+ var resHorizontal = factory && factory.res && factory.res.resHorizontal || 'horizontal';
228
+
229
+ this.$directionDropdown =
230
+ $('<select class="gradientPicker-filldirection">'+
231
+ '<option value="vertical"'+ (self.opts.fillDirection === 'top' ? ' selected' : '') +'>' + resVertical + '</option>'+
232
+ '<option value="horizontal"'+ (self.opts.fillDirection === 'left' ? ' selected' : '') +'>' + resHorizontal + '</option>'+
233
+ '</select>');
234
+
235
+ this.$el.append( this.$directionDropdown );
236
+ this.$directionDropdown.chosen();
237
+
238
+ this.$directionDropdown.change(function(){
239
+ self.setGradientDirection( $(this).val() );
240
+ });
241
+ },
242
+
243
+ /* ----------------------------------------------------------------------------- */
244
+ /* Actions
245
+ /* ----------------------------------------------------------------------------- */
246
+
247
+ /**
248
+ * Shows a color picker for the given point.
249
+ *
250
+ * @param ControlPoint point
251
+ * @returns void
252
+ */
253
+ showColorPicker: function( point ) {
254
+ this.currentPoint = point;
255
+
256
+ $(".factory-current-point").removeClass('factory-current-point');
257
+ point.$el.addClass('factory-current-point');
258
+
259
+ this.$colorPickerContainer.show();
260
+ this.$colorPicker.factoryBootstrap329_iris( 'show' );
261
+ this.$colorPicker.factoryBootstrap329_iris( 'option', 'color', point.color );
262
+
263
+ this.$opacitySlider.val( point.opacity * 100 );
264
+ this.$opacitySlider.trigger('slide');
265
+ },
266
+
267
+ hideColorPicker: function() {
268
+ $(".factory-current-point").removeClass('factory-current-point');
269
+ this.currentPoint = false;
270
+ this.$colorPickerContainer.hide();
271
+ },
272
+
273
+ isColorPickerShown: function() {
274
+ return this.currentPoint;
275
+ },
276
+
277
+ docClicked: function() {
278
+ //this.ctrlPtConfig.hide();
279
+ $('.gradientPicker-iris-wrap').hide();
280
+ $('.gradientPicker-ctrlPt').removeClass('open');
281
+ },
282
+
283
+ createCtrlPt: function(ctrlPtSetup) {
284
+ return new ControlPoint(this, ctrlPtSetup, this.opts.orientation)
285
+ },
286
+
287
+ /**
288
+ * Upadtes given options.
289
+ *
290
+ * @param array opts
291
+ * @param bool recreatPoints
292
+ * @returns void
293
+ */
294
+ updateOptions: function( opts, recreatPoints ) {
295
+ $.extend(this.opts, opts);
296
+
297
+ if( recreatPoints ) {
298
+ this.controlPoints = [];
299
+ this.$pointsContainer.html('');
300
+ for (var i = 0; i < this.opts.controlPoints.length; ++i) {
301
+ var ctrlPt = this.createCtrlPt(this.opts.controlPoints[i]);
302
+ this.controlPoints.push(ctrlPt);
303
+ }
304
+ }
305
+
306
+ this.updatePreview();
307
+
308
+ switch ( this.opts.fillDirection ) {
309
+ case 'top':
310
+ fillDirectCheck = 'horizontal';
311
+ break;
312
+ case 'left':
313
+ fillDirectCheck = 'vertical';
314
+ break;
315
+ default:
316
+ fillDirectCheck = false;
317
+ break;
318
+ }
319
+ if( fillDirectCheck )
320
+ $('.gradientPicker-filldirection', this.$el).find('option[value="' + fillDirectCheck + '"]').prop('selected', true);
321
+
322
+
323
+ },
324
+
325
+ /**
326
+ * Refreshes the gradient preview.
327
+ *
328
+ * @returns void
329
+ */
330
+ updatePreview: function() {
331
+
332
+ var result = [];
333
+ this.controlPoints.sort(ctrlPtComparator);
334
+
335
+ this.g2d.clearRect ( 0, 0, this.g2d.canvas.width , this.g2d.canvas.height );
336
+
337
+ if (this.opts.orientation === "horizontal") {
338
+ var grad = this.g2d.createLinearGradient(0, 0, this.g2d.canvas.width, 0);
339
+
340
+ for (var i = 0; i < this.controlPoints.length; ++i) {
341
+ var pt = this.controlPoints[i];
342
+
343
+ grad.addColorStop(pt.position, "rgba(" + hexToRgb(pt.color).r + "," + hexToRgb(pt.color).g + "," + hexToRgb(pt.color).b + ", "+pt.opacity+")");
344
+ result.push({
345
+ position: pt.position,
346
+ color: pt.color,
347
+ opacity: pt.opacity
348
+ });
349
+ }
350
+ } else {
351
+
352
+ }
353
+
354
+ this.g2d.fillStyle = grad;
355
+ this.g2d.fillRect(0, 0, this.g2d.canvas.width, this.g2d.canvas.height);
356
+
357
+ if (this.opts.generateStyles)
358
+ var styles = this._generatePreviewStyles();
359
+
360
+ this.opts.change(result, styles);
361
+ },
362
+
363
+ removeControlPoint: function(ctrlPt) {
364
+ var cpidx = this.controlPoints.indexOf(ctrlPt);
365
+
366
+ if (cpidx != -1) {
367
+ this.controlPoints.splice(cpidx, 1);
368
+ ctrlPt.$el.remove();
369
+ }
370
+ },
371
+
372
+ /**
373
+ * Adds a new point.
374
+ */
375
+ placePoint: function(e) {
376
+ e.stopPropagation();
377
+
378
+ var offset = $(e.target).offset();
379
+ var x = e.pageX - offset.left;
380
+ var y = e.pageY - offset.top;
381
+
382
+ var imgData = this.g2d.getImageData(x,y,1,1);
383
+ var colorStr = "rgb(" + imgData.data[0] + "," + imgData.data[1] + "," + imgData.data[2] + ")";
384
+ var opacity = ( 1 / 255 ) * imgData.data[3];
385
+
386
+ var cp = this.createCtrlPt({
387
+ position: x / this.g2d.canvas.width,
388
+ color: rgb2hex(colorStr),
389
+ opacity: opacity
390
+ });
391
+
392
+ this.controlPoints.push(cp);
393
+ this.controlPoints.sort(ctrlPtComparator);
394
+
395
+ this.showColorPicker( cp );
396
+ },
397
+
398
+ setGradient: function( controlPoints ) {
399
+ this.updateOptions({ controlPoints: controlPoints }, true);
400
+ this.updatePreview();
401
+ },
402
+
403
+ setGradientDirection: function( direction ){
404
+ switch ( direction ) {
405
+ case 'horizontal':
406
+ this.updateOptions({type: "linear", fillDirection: "top"}, false);
407
+ break;
408
+ case 'vertical':
409
+ this.updateOptions({type: "linear", fillDirection: "left"}, false);
410
+ break;
411
+ }
412
+ },
413
+
414
+ _generatePreviewStyles: function() {
415
+
416
+ var gradientOption = {};
417
+ gradientOption['filldirection'] = this.opts.fillDirection;
418
+ gradientOption['color_points'] = [];
419
+
420
+ for (var i = 0; i < this.controlPoints.length; ++i) {
421
+ var pt = this.controlPoints[i];
422
+ gradientOption['color_points'].push( pt.color + " " + ((pt.position*100)|0) + "% " + pt.opacity );
423
+ }
424
+
425
+ return JSON.stringify(gradientOption);
426
+ },
427
+
428
+ _genPalletsBackground: function(primaryColor, secondaryColor) {
429
+ cssRules = 'linear-gradient(90deg, '+primaryColor+' 0%, '+secondaryColor+' 100%)';
430
+
431
+ if (agent.indexOf('WebKit') >= 0)
432
+ crossBrowserRule = browserPrefix[0] + cssRules;
433
+ else if (agent.indexOf('Mozilla') >= 0)
434
+ crossBrowserRule = browserPrefix[1] + cssRules;
435
+ else if (agent.indexOf('Microsoft') >= 0)
436
+ crossBrowserRule = browserPrefix[2] + cssRules;
437
+ else
438
+ crossBrowserRule = cssRules;
439
+
440
+ return crossBrowserRule;
441
+ }
442
+ };
443
+
444
+ /**
445
+ * Gradient Control Point
446
+ */
447
+ function ControlPoint(parent, initialState, orientation) {
448
+ var self = this;
449
+
450
+ this.parent = parent;
451
+ this.$container = parent.$pointsContainer;
452
+
453
+ this.$el = $('<span class="factory-point"></span>');
454
+ this.$pointColor = $('<span class="factory-point-color"></span>').appendTo( this.$el );
455
+
456
+ this.$container.append( this.$el );
457
+
458
+ if (typeof initialState === "string") {
459
+ initialState = initialState.split(" ");
460
+ this.position = parseFloat(initialState[1])/100;
461
+ this.color = initialState[0];
462
+ this.opacity = initialState[2];
463
+ } else {
464
+ this.position = initialState.position;
465
+ this.color = initialState.color;
466
+ this.opacity = initialState.opacity;
467
+ }
468
+
469
+ this.outerWidth = this.$el.outerWidth();
470
+
471
+ this.$pointColor.css({
472
+ "background-color": self.color,
473
+ "opacity": self.opacity
474
+ });
475
+
476
+ if (orientation === "horizontal") {
477
+ var pxLeft = (self.$container.width() - this.$el.outerWidth()) * (this.position);
478
+ this.$el.css("left", pxLeft);
479
+ } else {
480
+ var pxTop = (self.$container.height() - this.$el.outerHeight()) * (this.position);
481
+ this.$el.css("top", pxTop);
482
+ }
483
+
484
+ this.drag = bind(this.drag, this);
485
+ this.stop = bind(this.stop, this);
486
+
487
+ this.$el.disableSelection().css('webkit-user-select','none').draggable({
488
+ axis: (orientation === "horizontal") ? "x" : "y",
489
+ drag: this.drag,
490
+ stop: this.stop,
491
+ containment: self.$container,
492
+ cancel: null
493
+ });
494
+
495
+ // shows the locker picker on click
496
+ this.$el.on('click.gp.factory', function(e){
497
+ if ( self.parent.currentPoint === self ) self.parent.hideColorPicker( self );
498
+ else self.parent.showColorPicker( self );
499
+ e.stopPropagation();
500
+ });
501
+ }
502
+
503
+ ControlPoint.prototype = {
504
+
505
+ updateColor: function( color ) {
506
+ this.color = color;
507
+ this.$pointColor.css( 'background-color', color );
508
+
509
+ this.parent.updatePreview();
510
+ },
511
+
512
+ updateOpacity: function( opacity ) {
513
+ this.opacity = opacity;
514
+ this.$pointColor.css( 'opacity', opacity );
515
+
516
+ this.parent.updatePreview();
517
+ },
518
+
519
+ drag: function(e, ui) {
520
+
521
+ var stopPointPosition = eval( this.$el.parent().offset().top + this.$el.parent().height() + 20 );
522
+
523
+ if( e.pageY > stopPointPosition ) {
524
+ this.remove();
525
+ }
526
+
527
+ // convert position to a %
528
+ var left = ui.position.left;
529
+ this.position = (left / (this.$container.width() - this.outerWidth));
530
+
531
+ this.parent.updatePreview();
532
+ },
533
+
534
+ stop: function() {
535
+ this.parent.updatePreview();
536
+ },
537
+
538
+ remove: function() {
539
+ this.parent.removeControlPoint(this);
540
+ this.parent.hideColorPicker();
541
+ this.parent.updatePreview();
542
+ }
543
+ };
544
+
545
+ var methods = {
546
+ init: function(opts) {
547
+ //orientation - Позиция пикера
548
+ //type - linear, radial
549
+ //fillDirection - направление градиента
550
+ opts = $.extend({
551
+ controlPoints: ["#FFF 0% 1", "#000 100% 1"],
552
+ orientation: "horizontal",
553
+ type: "linear",
554
+ fillDirection: "left",
555
+ generateStyles: true,
556
+ change: function() {}
557
+ }, opts);
558
+
559
+ this.each(function() {
560
+ var $this = $(this);
561
+ var gradSel = new GradientSelection($this, opts);
562
+ $this.data("gradientPicker-sel", gradSel);
563
+ });
564
+ },
565
+
566
+ update: function(opts) {
567
+ this.each(function() {
568
+ var $this = $(this);
569
+ var gradSel = $this.data("gradientPicker-sel");
570
+ if (gradSel != null) {
571
+ gradSel.updateOptions(opts, true);
572
+ }
573
+ });
574
+ }
575
+ };
576
+
577
+ $.fn.gradientPicker = function(method, opts) {
578
+ if (typeof method === "string" && method !== "init") {
579
+ methods[method].call(this, opts);
580
+ } else {
581
+ opts = method;
582
+ methods.init.call(this, opts);
583
+ }
584
+ };
585
+ })( jQuery );
libs/factory/bootstrap/assets/js/plugin.iris.js ADDED
@@ -0,0 +1,893 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! Iris Color Picker - v1.0.4 - 2013-11-18
2
+ * https://github.com/Automattic/Iris
3
+ * Copyright (c) 2013 Matt Wiebe; Licensed GPLv2 */
4
+ /* global Color, jQuery */
5
+ (function( $, undef ){
6
+ var _html, nonGradientIE, gradientType, vendorPrefixes, _css, Iris, UA, isIE, IEVersion;
7
+
8
+ _html = '<div class="iris-picker"><div class="iris-picker-inner"><div class="iris-square"><a class="iris-square-value" href="#"><span class="iris-square-handle ui-slider-handle"></span></a><div class="iris-square-inner iris-square-horiz"></div><div class="iris-square-inner iris-square-vert"></div></div><div class="iris-slider iris-strip"><div class="iris-slider-offset"></div></div></div></div>';
9
+ // Even IE9 dosen't support gradients. Elaborate sigh.
10
+ UA = navigator.userAgent.toLowerCase();
11
+ isIE = navigator.appName === 'Microsoft Internet Explorer';
12
+ IEVersion = isIE ? parseFloat( UA.match( /msie ([0-9]{1,}[\.0-9]{0,})/ )[1] ) : 0;
13
+ nonGradientIE = ( isIE && IEVersion < 10 );
14
+ gradientType = false;
15
+ // we don't bother with an unprefixed version, as it has a different syntax
16
+ vendorPrefixes = [ '-moz-', '-webkit-', '-o-', '-ms-' ];
17
+ // This is manually copied from iris.min.css until I can figure out how to do it without
18
+ _css = '.iris-picker{display:block;position:relative}.iris-picker,.iris-picker *{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input+.iris-picker{margin-top:4px}.iris-error{background-color:#ffafaf}.iris-border{border-radius:3px;border:1px solid #aaa;width:200px;background-color:#fff}.iris-picker-inner{position:absolute;top:0;right:0;left:0;bottom:0}.iris-border .iris-picker-inner{top:10px;right:10px;left:10px;bottom:10px}.iris-picker .iris-square-inner{position:absolute;left:0;right:0;top:0;bottom:0}.iris-picker .iris-square,.iris-picker .iris-slider,.iris-picker .iris-square-inner,.iris-picker .iris-palette{border-radius:3px;box-shadow:inset 0 0 5px rgba(0,0,0,.4);height:100%;width:12.5%;float:left;margin-right:5%}.iris-picker .iris-square{width:76%;margin-right:10%;position:relative}.iris-picker .iris-square-inner{width:auto;margin:0}.iris-ie-9 .iris-square,.iris-ie-9 .iris-slider,.iris-ie-9 .iris-square-inner,.iris-ie-9 .iris-palette{box-shadow:none;border-radius:0}.iris-ie-9 .iris-square,.iris-ie-9 .iris-slider,.iris-ie-9 .iris-palette{outline:1px solid rgba(0,0,0,.1)}.iris-ie-lt9 .iris-square,.iris-ie-lt9 .iris-slider,.iris-ie-lt9 .iris-square-inner,.iris-ie-lt9 .iris-palette{outline:1px solid #aaa}.iris-ie-lt9 .iris-square .ui-slider-handle{outline:1px solid #aaa;background-color:#fff;-ms-filter:"alpha(Opacity=30)"}.iris-ie-lt9 .iris-square .iris-square-handle{background:0;border:3px solid #fff;-ms-filter:"alpha(Opacity=50)"}.iris-picker .iris-strip{margin-right:0;position:relative}.iris-picker .iris-strip .ui-slider-handle{position:absolute;background:0;margin:0;right:-3px;left:-3px;border:4px solid #aaa;border-width:4px 3px;width:auto;height:6px;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);opacity:.9;z-index:5;cursor:ns-resize}.iris-strip .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;border-radius:3px}.iris-picker .iris-slider-offset{position:absolute;top:11px;left:0;right:0;bottom:-3px;width:auto;height:auto;background:transparent;border:0;top:none;border-radius:0}.iris-picker .iris-square-handle{background:transparent;border:5px solid #aaa;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.iris-picker .iris-square-handle:hover{border-color:#999}.iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.iris-picker .iris-square-handle:hover::after{border-color:#fff}.iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.iris-picker .iris-square-value{width:8px;height:8px;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.iris-palette-container{position:absolute;bottom:0;left:0;margin:0;padding:0}.iris-border .iris-palette-container{left:10px;bottom:10px}.iris-picker .iris-palette{margin:0;cursor:pointer}';
19
+ // Bail for IE <= 7
20
+ if ( nonGradientIE && IEVersion <= 7 ) {
21
+ $.fn.iris = $.noop;
22
+ $.support.iris = false;
23
+ return;
24
+ }
25
+
26
+ $.support.factoryBootstrap329_iris = true;
27
+
28
+ function testGradientType() {
29
+ var el, base;
30
+
31
+ if ( nonGradientIE ) {
32
+ gradientType = 'filter';
33
+ }
34
+ else {
35
+ el = $( '<div id="iris-gradtest" />' );
36
+ base = 'linear-gradient(top,#fff,#000)';
37
+ $.each( vendorPrefixes, function( i, val ){
38
+ el.css( 'backgroundImage', val + base );
39
+ if ( el.css( 'backgroundImage').match( 'gradient' ) ) {
40
+ gradientType = i;
41
+ return false;
42
+ }
43
+ });
44
+ // check for legacy webkit gradient syntax
45
+ if ( gradientType === false ) {
46
+ el.css( 'background', '-webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#000))' );
47
+ if ( el.css( 'backgroundImage').match( 'gradient' ) ) {
48
+ gradientType = 'webkit';
49
+ }
50
+ }
51
+ el.remove();
52
+ }
53
+
54
+ }
55
+
56
+ /**
57
+ * Only for CSS3 gradients. oldIE will use a separate function.
58
+ *
59
+ * Accepts as many color stops as necessary from 2nd arg on, or 2nd
60
+ * arg can be an array of color stops
61
+ *
62
+ * @param {string} origin Gradient origin - top or left, defaults to left.
63
+ * @return {string} Appropriate CSS3 gradient string for use in
64
+ */
65
+ function createGradient( origin, stops ) {
66
+ origin = ( origin === 'top' ) ? 'top' : 'left';
67
+ stops = $.isArray( stops ) ? stops : Array.prototype.slice.call( arguments, 1 );
68
+ if ( gradientType === 'webkit' ) {
69
+ return legacyWebkitGradient( origin, stops );
70
+ } else {
71
+ return vendorPrefixes[ gradientType ] + 'linear-gradient(' + origin + ', ' + stops.join(', ') + ')';
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Stupid gradients for a stupid browser.
77
+ */
78
+ function stupidIEGradient( origin, stops ) {
79
+ var type, self, lastIndex, filter, startPosProp, endPosProp, dimensionProp, template, html;
80
+
81
+ origin = ( origin === 'top' ) ? 'top' : 'left';
82
+ stops = $.isArray( stops ) ? stops : Array.prototype.slice.call( arguments, 1 );
83
+ // 8 hex: AARRGGBB
84
+ // GradientType: 0 vertical, 1 horizontal
85
+ type = ( origin === 'top' ) ? 0 : 1;
86
+ self = $( this );
87
+ lastIndex = stops.length - 1;
88
+ filter = 'filter';
89
+ startPosProp = ( type === 1 ) ? 'left' : 'top';
90
+ endPosProp = ( type === 1 ) ? 'right' : 'bottom';
91
+ dimensionProp = ( type === 1 ) ? 'height' : 'width';
92
+ template = '<div class="iris-ie-gradient-shim" style="position:absolute;' + dimensionProp + ':100%;' + startPosProp + ':%start%;' + endPosProp + ':%end%;' + filter + ':%filter%;" data-color:"%color%"></div>';
93
+ html = '';
94
+ // need a positioning context
95
+ if ( self.css('position') === 'static' ) {
96
+ self.css( {position: 'relative' } );
97
+ }
98
+
99
+ stops = fillColorStops( stops );
100
+ $.each(stops, function( i, startColor ) {
101
+ var endColor, endStop, filterVal;
102
+
103
+ // we want two at a time. if we're on the last pair, bail.
104
+ if ( i === lastIndex ) {
105
+ return false;
106
+ }
107
+
108
+ endColor = stops[ i + 1 ];
109
+ //if our pairs are at the same color stop, moving along.
110
+ if ( startColor.stop === endColor.stop ) {
111
+ return;
112
+ }
113
+
114
+ endStop = 100 - parseFloat( endColor.stop ) + '%';
115
+ startColor.octoHex = new Color( startColor.color ).toIEOctoHex();
116
+ endColor.octoHex = new Color( endColor.color ).toIEOctoHex();
117
+
118
+ filterVal = 'progid:DXImageTransform.Microsoft.Gradient(GradientType=' + type + ', StartColorStr=\'' + startColor.octoHex + '\', EndColorStr=\'' + endColor.octoHex + '\')';
119
+ html += template.replace( '%start%', startColor.stop ).replace( '%end%', endStop ).replace( '%filter%', filterVal );
120
+ });
121
+ self.find( '.iris-ie-gradient-shim' ).remove();
122
+ $( html ).prependTo( self );
123
+ }
124
+
125
+ function legacyWebkitGradient( origin, colorList ) {
126
+ var stops = [];
127
+ origin = ( origin === 'top' ) ? '0% 0%,0% 100%,' : '0% 100%,100% 100%,';
128
+ colorList = fillColorStops( colorList );
129
+ $.each( colorList, function( i, val ){
130
+ stops.push( 'color-stop(' + ( parseFloat( val.stop ) / 100 ) + ', ' + val.color + ')' );
131
+ });
132
+ return '-webkit-gradient(linear,' + origin + stops.join(',') + ')';
133
+ }
134
+
135
+ function fillColorStops( colorList ) {
136
+ var colors = [],
137
+ percs = [],
138
+ newColorList = [],
139
+ lastIndex = colorList.length - 1;
140
+
141
+ $.each( colorList, function( index, val ) {
142
+ var color = val,
143
+ perc = false,
144
+ match = val.match( /1?[0-9]{1,2}%$/ );
145
+
146
+ if ( match ) {
147
+ color = val.replace( /\s?1?[0-9]{1,2}%$/, '' );
148
+ perc = match.shift();
149
+ }
150
+ colors.push( color );
151
+ percs.push( perc );
152
+ });
153
+
154
+ // back fill first and last
155
+ if ( percs[0] === false ) {
156
+ percs[0] = '0%';
157
+ }
158
+
159
+ if ( percs[lastIndex] === false ) {
160
+ percs[lastIndex] = '100%';
161
+ }
162
+
163
+ percs = backFillColorStops( percs );
164
+
165
+ $.each( percs, function( i ){
166
+ newColorList[i] = { color: colors[i], stop: percs[i] };
167
+ });
168
+ return newColorList;
169
+ }
170
+
171
+ function backFillColorStops( stops ) {
172
+ var first = 0,
173
+ last = stops.length - 1,
174
+ i = 0,
175
+ foundFirst = false,
176
+ incr,
177
+ steps,
178
+ step,
179
+ firstVal;
180
+
181
+ if ( stops.length <= 2 || $.inArray( false, stops ) < 0 ) {
182
+ return stops;
183
+ }
184
+ while ( i < stops.length - 1 ) {
185
+ if ( ! foundFirst && stops[i] === false ) {
186
+ first = i - 1;
187
+ foundFirst = true;
188
+ } else if ( foundFirst && stops[i] !== false ) {
189
+ last = i;
190
+ i = stops.length;
191
+ }
192
+ i++;
193
+ }
194
+ steps = last - first;
195
+ firstVal = parseInt( stops[first].replace('%'), 10 );
196
+ incr = ( parseFloat( stops[last].replace('%') ) - firstVal ) / steps;
197
+ i = first + 1;
198
+ step = 1;
199
+ while ( i < last ) {
200
+ stops[i] = ( firstVal + ( step * incr ) ) + '%';
201
+ step++;
202
+ i++;
203
+ }
204
+ return backFillColorStops( stops );
205
+ }
206
+
207
+ $.fn.factoryBootstrap329_gradient = function() {
208
+ var args = arguments;
209
+ return this.each( function() {
210
+ // this'll be oldishIE
211
+ if ( nonGradientIE ) {
212
+ stupidIEGradient.apply( this, args );
213
+ } else {
214
+ // new hotness
215
+ $( this ).css( 'backgroundImage', createGradient.apply( this, args ) );
216
+ }
217
+ });
218
+ };
219
+
220
+ $.fn.factoryBootstrap329_raninbowGradient = function( origin, args ) {
221
+ var opts, template, i, steps;
222
+
223
+ origin = origin || 'top';
224
+ opts = $.extend( {}, { s: 100, l: 50 }, args );
225
+ template = 'hsl(%h%,' + opts.s + '%,' + opts.l + '%)';
226
+ i = 0;
227
+ steps = [];
228
+ while ( i <= 360 ) {
229
+ steps.push( template.replace('%h%', i) );
230
+ i += 30;
231
+ }
232
+ return this.each(function() {
233
+ $(this).factoryBootstrap329_gradient( origin, steps );
234
+ });
235
+ };
236
+
237
+ // the colorpicker widget def.
238
+ Iris = {
239
+ options: {
240
+ color: false,
241
+ mode: 'hsl',
242
+ controls: {
243
+ horiz: 's', // horizontal defaults to saturation
244
+ vert: 'l', // vertical defaults to lightness
245
+ strip: 'h' // right strip defaults to hue
246
+ },
247
+ hide: true, // hide the color picker by default
248
+ border: true, // draw a border around the collection of UI elements
249
+ target: false, // a DOM element / jQuery selector that the element will be appended within. Only used when called on an input.
250
+ width: 200, // the width of the collection of UI elements
251
+ palettes: false // show a palette of basic colors beneath the square.
252
+ },
253
+ _color: '',
254
+ _palettes: [ '#000', '#fff', '#d33', '#d93', '#ee2', '#81d742', '#1e73be', '#8224e3' ],
255
+ _inited: false,
256
+ _defaultHSLControls: {
257
+ horiz: 's',
258
+ vert: 'l',
259
+ strip: 'h'
260
+ },
261
+ _defaultHSVControls: {
262
+ horiz: 'h',
263
+ vert: 'v',
264
+ strip: 's'
265
+ },
266
+ _scale: {
267
+ h: 360,
268
+ s: 100,
269
+ l: 100,
270
+ v: 100
271
+ },
272
+ _create: function() {
273
+ var self = this,
274
+ el = self.element,
275
+ color = self.options.color || el.val();
276
+
277
+ if ( gradientType === false ) {
278
+ testGradientType();
279
+ }
280
+
281
+ if ( el.is( 'input' ) ) {
282
+ if ( self.options.target ) {
283
+ self.picker = $( _html ).appendTo( self.options.target );
284
+ } else {
285
+ self.picker = $( _html ).insertAfter( el );
286
+ }
287
+
288
+ self._addInputListeners( el );
289
+ } else {
290
+ el.append( _html );
291
+ self.picker = el.find( '.iris-picker' );
292
+ }
293
+
294
+ // Browsers / Versions
295
+ // Feature detection doesn't work for these, and $.browser is deprecated
296
+ if ( isIE ) {
297
+ if ( IEVersion === 9 ) {
298
+ self.picker.addClass( 'iris-ie-9' );
299
+ } else if ( IEVersion <= 8 ) {
300
+ self.picker.addClass( 'iris-ie-lt9' );
301
+ }
302
+ } else if ( UA.indexOf('compatible') < 0 && UA.indexOf('khtml') < 0 && UA.match( /mozilla/ ) ) {
303
+ self.picker.addClass( 'iris-mozilla' );
304
+ }
305
+
306
+ if ( self.options.palettes ) {
307
+ self._addPalettes();
308
+ }
309
+
310
+ self._color = new Color( color ).setHSpace( self.options.mode );
311
+ self.options.color = self._color.toString();
312
+
313
+ // prep 'em for re-use
314
+ self.controls = {
315
+ square: self.picker.find( '.iris-square' ),
316
+ squareDrag: self.picker.find( '.iris-square-value' ),
317
+ horiz: self.picker.find( '.iris-square-horiz' ),
318
+ vert: self.picker.find( '.iris-square-vert' ),
319
+ strip: self.picker.find( '.iris-strip' ),
320
+ stripSlider: self.picker.find( '.iris-strip .iris-slider-offset' )
321
+ };
322
+
323
+ // small sanity check - if we chose hsv, change default controls away from hsl
324
+ if ( self.options.mode === 'hsv' && self._has('l', self.options.controls) ) {
325
+ self.options.controls = self._defaultHSVControls;
326
+ } else if ( self.options.mode === 'hsl' && self._has('v', self.options.controls) ) {
327
+ self.options.controls = self._defaultHSLControls;
328
+ }
329
+
330
+ // store it. HSL gets squirrely
331
+ self.hue = self._color.h();
332
+
333
+ if ( self.options.hide ) {
334
+ self.picker.hide();
335
+ }
336
+
337
+ if ( self.options.border ) {
338
+ self.picker.addClass( 'iris-border' );
339
+ }
340
+
341
+ self._initControls();
342
+ self.active = 'external';
343
+ self._dimensions();
344
+ self._change();
345
+ },
346
+ _has: function(needle, haystack) {
347
+ var ret = false;
348
+ $.each(haystack, function(i,v){
349
+ if ( needle === v ) {
350
+ ret = true;
351
+ // exit the loop
352
+ return false;
353
+ }
354
+ });
355
+ return ret;
356
+ },
357
+ _addPalettes: function () {
358
+ var container = $( '<div class="iris-palette-container" />' ),
359
+ palette = $( '<a class="iris-palette" tabindex="0" />' ),
360
+ colors = $.isArray( this.options.palettes ) ? this.options.palettes : this._palettes;
361
+
362
+ // do we have an existing container? Empty and reuse it.
363
+ if ( this.picker.find( '.iris-palette-container' ).length ) {
364
+ container = this.picker.find( '.iris-palette-container' ).detach().html( '' );
365
+ }
366
+
367
+ $.each(colors, function(index, val) {
368
+ palette.clone().data( 'color', val )
369
+ .css( 'backgroundColor', val ).appendTo( container )
370
+ .height( 10 ).width( 10 );
371
+ });
372
+
373
+ this.picker.append(container);
374
+ },
375
+ _paint: function() {
376
+ var self = this;
377
+ self._paintDimension( 'top', 'strip' );
378
+ self._paintDimension( 'top', 'vert' );
379
+ self._paintDimension( 'left', 'horiz' );
380
+ },
381
+ _paintDimension: function( origin, control ) {
382
+ var self = this,
383
+ c = self._color,
384
+ mode = self.options.mode,
385
+ color = self._getHSpaceColor(),
386
+ target = self.controls[ control ],
387
+ controlOpts = self.options.controls,
388
+ stops;
389
+
390
+ // don't paint the active control
391
+ if ( control === self.active || ( self.active === 'square' && control !== 'strip' ) ) {
392
+ return;
393
+ }
394
+
395
+ switch ( controlOpts[ control ] ) {
396
+ case 'h':
397
+ if ( mode === 'hsv' ) {
398
+ color = c.clone();
399
+ switch ( control ) {
400
+ case 'horiz':
401
+ color[controlOpts.vert](100);
402
+ break;
403
+ case 'vert':
404
+ color[controlOpts.horiz](100);
405
+ break;
406
+ case 'strip':
407
+ color.setHSpace('hsl');
408
+ break;
409
+ }
410
+ stops = color.toHsl();
411
+ } else {
412
+ if ( control === 'strip' ) {
413
+ stops = { s: color.s, l: color.l };
414
+ } else {
415
+ stops = { s: 100, l: color.l };
416
+ }
417
+ }
418
+
419
+ target.factoryBootstrap329_raninbowGradient( origin, stops );
420
+ break;
421
+ case 's':
422
+ if ( mode === 'hsv' ) {
423
+ if ( control === 'vert' ) {
424
+ stops = [ c.clone().a(0).s(0).toCSS('rgba'), c.clone().a(1).s(0).toCSS('rgba') ];
425
+ } else if ( control === 'strip' ) {
426
+ stops = [ c.clone().s(100).toCSS('hsl'), c.clone().s(0).toCSS('hsl') ];
427
+ } else if ( control === 'horiz' ) {
428
+ stops = [ '#fff', 'hsl(' + color.h + ',100%,50%)' ];
429
+ }
430
+ } else { // implicit mode === 'hsl'
431
+ if ( control === 'vert' && self.options.controls.horiz === 'h' ) {
432
+ stops = ['hsla(0, 0%, ' + color.l + '%, 0)', 'hsla(0, 0%, ' + color.l + '%, 1)'];
433
+ } else {
434
+ stops = ['hsl('+ color.h +',0%,50%)', 'hsl(' + color.h + ',100%,50%)'];
435
+ }
436
+ }
437
+
438
+
439
+ target.factoryBootstrap329_gradient( origin, stops );
440
+ break;
441
+ case 'l':
442
+ if ( control === 'strip' ) {
443
+ stops = ['hsl(' + color.h + ',100%,100%)', 'hsl(' + color.h + ', ' + color.s + '%,50%)', 'hsl('+ color.h +',100%,0%)'];
444
+ } else {
445
+ stops = ['#fff', 'rgba(255,255,255,0) 50%', 'rgba(0,0,0,0) 50%', 'rgba(0,0,0,1)'];
446
+ }
447
+ target.factoryBootstrap329_gradient( origin, stops );
448
+ break;
449
+ case 'v':
450
+ if ( control === 'strip' ) {
451
+ stops = [ c.clone().v(100).toCSS(), c.clone().v(0).toCSS() ];
452
+ } else {
453
+ stops = ['rgba(0,0,0,0)', '#000'];
454
+ }
455
+ target.factoryBootstrap329_gradient( origin, stops );
456
+ break;
457
+ default:
458
+ break;
459
+ }
460
+ },
461
+
462
+ _getHSpaceColor: function() {
463
+ return ( this.options.mode === 'hsv' ) ? this._color.toHsv() : this._color.toHsl();
464
+ },
465
+
466
+ _dimensions: function( reset ) {
467
+ // whatever size
468
+ var self = this,
469
+ opts = self.options,
470
+ controls = self.controls,
471
+ square = controls.square,
472
+ strip = self.picker.find( '.iris-strip' ),
473
+ squareWidth = '77.5%',
474
+ stripWidth = '12%',
475
+ totalPadding = 20,
476
+ innerWidth = opts.border ? opts.width - totalPadding : opts.width,
477
+ controlsHeight,
478
+ paletteCount = $.isArray( opts.palettes ) ? opts.palettes.length : self._palettes.length,
479
+ paletteMargin, paletteWidth, paletteContainerWidth;
480
+
481
+ if ( reset ) {
482
+ square.css( 'width', '' );
483
+ strip.css( 'width', '' );
484
+ self.picker.css( {width: '', height: ''} );
485
+ }
486
+
487
+ squareWidth = innerWidth * ( parseFloat( squareWidth ) / 100 );
488
+ stripWidth = innerWidth * ( parseFloat( stripWidth ) / 100 );
489
+ controlsHeight = opts.border ? squareWidth + totalPadding : squareWidth;
490
+
491
+ square.width( squareWidth ).height( squareWidth );
492
+ strip.height( squareWidth ).width( stripWidth );
493
+ self.picker.css( { width: opts.width, height: controlsHeight } );
494
+
495
+ if ( ! opts.palettes ) {
496
+ return self.picker.css( 'paddingBottom', '' );
497
+ }
498
+
499
+ // single margin at 2%
500
+ paletteMargin = squareWidth * 2 / 100;
501
+ paletteContainerWidth = squareWidth - ( ( paletteCount - 1 ) * paletteMargin );
502
+ paletteWidth = paletteContainerWidth / paletteCount;
503
+ self.picker.find('.iris-palette').each( function( i ) {
504
+ var margin = i === 0 ? 0 : paletteMargin;
505
+ $( this ).css({
506
+ width: paletteWidth,
507
+ height: paletteWidth,
508
+ marginLeft: margin
509
+ });
510
+ });
511
+ self.picker.css( 'paddingBottom', paletteWidth + paletteMargin );
512
+ strip.height( paletteWidth + paletteMargin + squareWidth );
513
+ },
514
+
515
+ _addInputListeners: function( input ) {
516
+ var self = this,
517
+ debounceTimeout = 100,
518
+ callback = function( event ){
519
+ var color = new Color( input.val() ),
520
+ val = input.val().replace( /^#/, '' );
521
+
522
+ input.removeClass( 'iris-error' );
523
+ // we gave a bad color
524
+ if ( color.error ) {
525
+ // don't error on an empty input - we want those allowed
526
+ if ( val !== '' ) {
527
+ input.addClass( 'iris-error' );
528
+ }
529
+ } else {
530
+ if ( color.toString() !== self._color.toString() ) {
531
+ // let's not do this on keyup for hex shortcodes
532
+ if ( ! ( event.type === 'keyup' && val.match( /^[0-9a-fA-F]{3}$/ ) ) ) {
533
+ self._setOption( 'color', color.toString() );
534
+ }
535
+ }
536
+ }
537
+ };
538
+
539
+ input.on( 'change', callback ).on( 'keyup', self._debounce( callback, debounceTimeout ) );
540
+
541
+ // If we initialized hidden, show on first focus. The rest is up to you.
542
+ if ( self.options.hide ) {
543
+ input.one( 'focus', function() {
544
+ self.show();
545
+ });
546
+ }
547
+ },
548
+
549
+ _initControls: function() {
550
+ var self = this,
551
+ controls = self.controls,
552
+ square = controls.square,
553
+ controlOpts = self.options.controls,
554
+ stripScale = self._scale[controlOpts.strip];
555
+
556
+ controls.stripSlider.slider({
557
+ orientation: 'vertical',
558
+ max: stripScale,
559
+ slide: function( event, ui ) {
560
+ self.active = 'strip';
561
+ // "reverse" for hue.
562
+ if ( controlOpts.strip === 'h' ) {
563
+ ui.value = stripScale - ui.value;
564
+ }
565
+
566
+ self._color[controlOpts.strip]( ui.value );
567
+ self._change.apply( self, arguments );
568
+ }
569
+ });
570
+
571
+ controls.squareDrag.draggable({
572
+ containment: 'parent',
573
+ zIndex: 1000,
574
+ cursor: 'move',
575
+ drag: function( event, ui ) {
576
+ self._squareDrag( event, ui );
577
+ },
578
+ start: function() {
579
+ square.addClass( 'iris-dragging' );
580
+ $(this).addClass( 'ui-state-focus' );
581
+ },
582
+ stop: function() {
583
+ square.removeClass( 'iris-dragging' );
584
+ $(this).removeClass( 'ui-state-focus' );
585
+ }
586
+ }).on( 'mousedown mouseup', function( event ) {
587
+ var focusClass = 'ui-state-focus';
588
+ event.preventDefault();
589
+ if (event.type === 'mousedown' ) {
590
+ self.picker.find( '.' + focusClass ).removeClass( focusClass ).blur();
591
+ $(this).addClass( focusClass ).focus();
592
+ } else {
593
+ $(this).removeClass( focusClass );
594
+ }
595
+ }).on( 'keydown', function( event ) {
596
+ var container = controls.square,
597
+ draggable = controls.squareDrag,
598
+ position = draggable.position(),
599
+ distance = self.options.width / 100; // Distance in pixels the draggable should be moved: 1 "stop"
600
+
601
+ // make alt key go "10"
602
+ if ( event.altKey ) {
603
+ distance *= 10;
604
+ }
605
+
606
+ // Reposition if one of the directional keys is pressed
607
+ switch ( event.keyCode ) {
608
+ case 37: position.left -= distance; break; // Left
609
+ case 38: position.top -= distance; break; // Up
610
+ case 39: position.left += distance; break; // Right
611
+ case 40: position.top += distance; break; // Down
612
+ default: return true; // Exit and bubble
613
+ }
614
+
615
+ // Keep draggable within container
616
+ position.left = Math.max( 0, Math.min( position.left, container.width() ) );
617
+ position.top = Math.max( 0, Math.min( position.top, container.height() ) );
618
+
619
+ draggable.css(position);
620
+ self._squareDrag( event, { position: position });
621
+ event.preventDefault();
622
+ });
623
+
624
+ // allow clicking on the square to move there and keep dragging
625
+ square.mousedown( function( event ) {
626
+ var squareOffset, pos;
627
+ // only left click
628
+ if ( event.which !== 1 ) {
629
+ return;
630
+ }
631
+
632
+ // prevent bubbling from the handle: no infinite loops
633
+ if ( ! $( event.target ).is( 'div' ) ) {
634
+ return;
635
+ }
636
+
637
+ squareOffset = self.controls.square.offset();
638
+ pos = {
639
+ top: event.pageY - squareOffset.top,
640
+ left: event.pageX - squareOffset.left
641
+ };
642
+ event.preventDefault();
643
+ self._squareDrag( event, { position: pos } );
644
+ event.target = self.controls.squareDrag.get(0);
645
+ self.controls.squareDrag.css( pos ).trigger( event );
646
+ });
647
+
648
+ // palettes
649
+ if ( self.options.palettes ) {
650
+ self._paletteListeners();
651
+ }
652
+ },
653
+
654
+ _paletteListeners: function() {
655
+ var self = this;
656
+ self.picker.find('.iris-palette-container').on('click.palette', '.iris-palette', function() {
657
+ self._color.fromCSS( $(this).data('color') );
658
+ self.active = 'external';
659
+ self._change();
660
+ }).on( 'keydown.palette', '.iris-palette', function( event ) {
661
+ if ( ! ( event.keyCode === 13 || event.keyCode === 32 ) ) {
662
+ return true;
663
+ }
664
+ event.stopPropagation();
665
+ $( this ).click();
666
+ });
667
+ },
668
+
669
+ _squareDrag: function( event, ui ) {
670
+ var self = this,
671
+ controlOpts = self.options.controls,
672
+ dimensions = self._squareDimensions(),
673
+ vertVal = Math.round( ( dimensions.h - ui.position.top ) / dimensions.h * self._scale[controlOpts.vert] ),
674
+ horizVal = self._scale[controlOpts.horiz] - Math.round( ( dimensions.w - ui.position.left ) / dimensions.w * self._scale[controlOpts.horiz] );
675
+
676
+ self._color[controlOpts.horiz]( horizVal )[controlOpts.vert]( vertVal );
677
+
678
+ self.active = 'square';
679
+ self._change.apply( self, arguments );
680
+ },
681
+
682
+ _setOption: function( key, value ) {
683
+ var self = this,
684
+ oldValue = self.options[key],
685
+ doDimensions = false,
686
+ hexLessColor,
687
+ newColor,
688
+ method;
689
+
690
+ // ensure the new value is set. We can reset to oldValue if some check wasn't met.
691
+ self.options[key] = value;
692
+
693
+ switch(key) {
694
+ case 'color':
695
+ // cast to string in case we have a number
696
+ value = '' + value;
697
+ hexLessColor = value.replace( /^#/, '' );
698
+ newColor = new Color( value ).setHSpace( self.options.mode );
699
+ if ( newColor.error ) {
700
+ self.options[key] = oldValue;
701
+ } else {
702
+ self._color = newColor;
703
+ self.options.color = self.options[key] = self._color.toString();
704
+ self.active = 'external';
705
+ self._change();
706
+ }
707
+ break;
708
+ case 'palettes':
709
+ doDimensions = true;
710
+
711
+ if ( value ) {
712
+ self._addPalettes();
713
+ } else {
714
+ self.picker.find('.iris-palette-container').remove();
715
+ }
716
+
717
+ // do we need to add events?
718
+ if ( ! oldValue ) {
719
+ self._paletteListeners();
720
+ }
721
+ break;
722
+ case 'width':
723
+ doDimensions = true;
724
+ break;
725
+ case 'border':
726
+ doDimensions = true;
727
+ method = value ? 'addClass' : 'removeClass';
728
+ self.picker[method]('iris-border');
729
+ break;
730
+ case 'mode':
731
+ case 'controls':
732
+ // if nothing's changed, let's bail, since this causes re-rendering the whole widget
733
+ if ( oldValue === value ) {
734
+ return;
735
+ }
736
+
737
+ // we're using these poorly named variables because they're already scoped.
738
+ // method is the element that Iris was called on. oldValue will be the options
739
+ method = self.element;
740
+ oldValue = self.options;
741
+ oldValue.hide = ! self.picker.is( ':visible' );
742
+ self.destroy();
743
+ self.picker.remove();
744
+ return $(self.element).iris(oldValue);
745
+ }
746
+
747
+ // Do we need to recalc dimensions?
748
+ if ( doDimensions ) {
749
+ self._dimensions(true);
750
+ }
751
+ },
752
+
753
+ _squareDimensions: function( forceRefresh ) {
754
+ var square = this.controls.square,
755
+ dimensions,
756
+ control;
757
+
758
+ if ( forceRefresh !== undef && square.data('dimensions') ) {
759
+ return square.data('dimensions');
760
+ }
761
+
762
+ control = this.controls.squareDrag;
763
+ dimensions = {
764
+ w: square.width(),
765
+ h: square.height()
766
+ };
767
+ square.data( 'dimensions', dimensions );
768
+ return dimensions;
769
+ },
770
+
771
+ _isNonHueControl: function( active, type ) {
772
+ if ( active === 'square' && this.options.controls.strip === 'h' ) {
773
+ return true;
774
+ } else if ( type === 'external' || ( type === 'h' && active === 'strip' ) ) {
775
+ return false;
776
+ }
777
+
778
+ return true;
779
+ },
780
+
781
+ _change: function() {
782
+ var self = this,
783
+ controls = self.controls,
784
+ color = self._getHSpaceColor(),
785
+ actions = [ 'square', 'strip' ],
786
+ controlOpts = self.options.controls,
787
+ type = controlOpts[self.active] || 'external',
788
+ oldHue = self.hue;
789
+
790
+ if ( self.active === 'strip' ) {
791
+ // take no action on any of the square sliders if we adjusted the strip
792
+ actions = [];
793
+ } else if ( self.active !== 'external' ) {
794
+ // for non-strip, non-external, strip should never change
795
+ actions.pop(); // conveniently the last item
796
+ }
797
+
798
+ $.each( actions, function(index, item) {
799
+ var value, dimensions, cssObj;
800
+ if ( item !== self.active ) {
801
+ switch ( item ) {
802
+ case 'strip':
803
+ // reverse for hue
804
+ value = ( controlOpts.strip === 'h' ) ? self._scale[controlOpts.strip] - color[controlOpts.strip] : color[controlOpts.strip];
805
+ controls.stripSlider.slider( 'value', value );
806
+ break;
807
+ case 'square':
808
+ dimensions = self._squareDimensions();
809
+ cssObj = {
810
+ left: color[controlOpts.horiz] / self._scale[controlOpts.horiz] * dimensions.w,
811
+ top: dimensions.h - ( color[controlOpts.vert] / self._scale[controlOpts.vert] * dimensions.h )
812
+ };
813
+
814
+ self.controls.squareDrag.css( cssObj );
815
+ break;
816
+ }
817
+ }
818
+ });
819
+
820
+ // Ensure that we don't change hue if we triggered a hue reset
821
+ if ( color.h !== oldHue && self._isNonHueControl( self.active, type ) ) {
822
+ self._color.h(oldHue);
823
+ }
824
+
825
+ // store hue for repeating above check next time
826
+ self.hue = self._color.h();
827
+
828
+ self.options.color = self._color.toString();
829
+
830
+ // only run after the first time
831
+ if ( self._inited ) {
832
+ self._trigger( 'change', { type: self.active }, { color: self._color } );
833
+ }
834
+
835
+ if ( self.element.is( ':input' ) && ! self._color.error ) {
836
+ self.element.removeClass( 'iris-error' );
837
+ if ( self.element.val() !== self._color.toString() ) {
838
+ self.element.val( self._color.toString() );
839
+ }
840
+ }
841
+
842
+ self._paint();
843
+ self._inited = true;
844
+ self.active = false;
845
+ },
846
+ // taken from underscore.js _.debounce method
847
+ _debounce: function( func, wait, immediate ) {
848
+ var timeout, result;
849
+ return function() {
850
+ var context = this,
851
+ args = arguments,
852
+ later,
853
+ callNow;
854
+
855
+ later = function() {
856
+ timeout = null;
857
+ if ( ! immediate) {
858
+ result = func.apply( context, args );
859
+ }
860
+ };
861
+
862
+ callNow = immediate && !timeout;
863
+ clearTimeout( timeout );
864
+ timeout = setTimeout( later, wait );
865
+ if ( callNow ) {
866
+ result = func.apply( context, args );
867
+ }
868
+ return result;
869
+ };
870
+ },
871
+ show: function() {
872
+ this.picker.show();
873
+ },
874
+ hide: function() {
875
+ this.picker.hide();
876
+ },
877
+ toggle: function() {
878
+ this.picker.toggle();
879
+ },
880
+ color: function(newColor) {
881
+ if ( newColor === true ) {
882
+ return this._color.clone();
883
+ } else if ( newColor === undef ) {
884
+ return this._color.toString();
885
+ }
886
+ this.option('color', newColor);
887
+ }
888
+ };
889
+ // initialize the widget
890
+ $.widget( 'a8c.factoryBootstrap329_iris', Iris );
891
+ // add CSS
892
+ $( '<style id="iris-css">' + _css + '</style>' ).appendTo( 'head' );
893
+ }( jQuery ));
libs/factory/bootstrap/assets/js/plugin.nouislider.js ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! $.noUiSlider - WTFPL - refreshless.com/nouislider/ */
2
+ (function(e){function h(a){throw new RangeError("noUiSlider: "+a);}function x(a,b,d){(a[b]||a[d])&&a[b]===a[d]&&h("(Link) '"+b+"' can't match '"+d+"'.'")}function t(a){return"number"===typeof a&&!isNaN(a)&&isFinite(a)}function H(a){return e.isArray(a)?a:[a]}function D(a,b){a.addClass(b);setTimeout(function(){a.removeClass(b)},300)}function y(a,b){return 100*b/(a[1]-a[0])}function I(a,b){if(b>=a.d.slice(-1)[0])return 100;for(var d=1,c,g,e;b>=a.d[d];)d++;c=a.d[d-1];g=a.d[d];e=a.c[d-1];c=[c,g];return e+
3
+ y(c,0>c[0]?b+Math.abs(c[0]):b-c[0])/(100/(a.c[d]-e))}function J(a,b){for(var d=1,c;b>=a.c[d];)d++;if(a.m)return c=a.c[d-1],d=a.c[d],b-c>(d-c)/2?d:c;a.h[d-1]?(c=a.h[d-1],d=a.c[d-1]+Math.round((b-a.c[d-1])/c)*c):d=b;return d}function s(a){void 0===a&&(a={});"object"!==typeof a&&h("(Format) 'format' option must be an object.");var b={};e(K).each(function(d,c){void 0===a[c]?b[c]=z[d]:typeof a[c]===typeof z[d]?("decimals"===c&&(0>a[c]||7<a[c])&&h("(Format) 'format.decimals' option must be between 0 and 7."),
4
+ b[c]=a[c]):h("(Format) 'format."+c+"' must be a "+typeof z[d]+".")});x(b,"mark","thousand");x(b,"prefix","negative");x(b,"prefix","negativeBefore");this.B=b}function q(a,b){if(!(this instanceof q))throw Error("Link: Don't use Link as a function. Use the 'new' keyword.");if(!a)throw new RangeError("Link: missing parameters.");this.g=a.format||{};this.update=!b;var d=this,c=a.target||function(){},g=a.method,f="string"===typeof c&&0===c.indexOf("-tooltip-"),h="string"===typeof c&&0!==c.indexOf("-"),
5
+ n="function"===typeof c,r=c instanceof e||e.zepto&&e.zepto.isZ(c),E=r&&c.is("input, select, textarea"),l=r&&"function"===typeof g,s=r&&"string"===typeof g&&c[g];if(f)this.method=g||"html",this.j=e(c.replace("-tooltip-","")||"<div/>")[0];else if(h)this.method="val",this.j=document.createElement("input"),this.j.name=c,this.j.type="hidden";else if(n)this.target=!1,this.method=c;else{if(r){if(g&&(l||s)){this.target=c;this.method=g;return}if(!g&&E){this.method="val";this.target=c;this.target.on("change",
6
+ function(a){a=e(a.target).val();var b=d.q;d.u.val([b?null:a,b?a:null],{link:d})});return}if(!g&&!E){this.method="html";this.target=c;return}}throw new RangeError("Link: Invalid Link.");}}function L(a,b){t(b)||h("'step' is not numeric.");a.h[0]=b}function M(a,b){("object"!==typeof b||e.isArray(b))&&h("'range' is not an object.");e.each(b,function(b,c){var g;"number"===typeof c&&(c=[c]);e.isArray(c)||h("'range' contains invalid value.");g="min"===b?0:"max"===b?100:parseFloat(b);t(g)&&t(c[0])||h("'range' value isn't numeric.");
7
+ a.c.push(g);a.d.push(c[0]);g?a.h.push(isNaN(c[1])?!1:c[1]):isNaN(c[1])||(a.h[0]=c[1])});e.each(a.h,function(b,c){if(!c)return!0;a.h[b]=y([a.d[b],a.d[b+1]],c)/(100/(a.c[b+1]-a.c[b]))})}function N(a,b){"number"===typeof b&&(b=[b]);(!e.isArray(b)||!b.length||2<b.length)&&h("'start' option is incorrect.");a.a=b.length;a.start=b}function O(a,b){a.m=b;"boolean"!==typeof b&&h("'snap' option must be a boolean.")}function P(a,b){"lower"===b&&1===a.a?a.i=1:"upper"===b&&1===a.a?a.i=2:!0===b&&2===a.a?a.i=3:!1===
8
+ b?a.i=0:h("'connect' option was doesn't match handle count.")}function Q(a,b){switch(b){case "horizontal":a.k=0;break;case "vertical":a.k=1;break;default:h("'orientation' option is invalid.")}}function R(a,b){2<a.c.length&&h("'margin' option is only supported on linear sliders.");a.margin=y(a.d,b);t(b)||h("'margin' option must be numeric.")}function S(a,b){switch(b){case "ltr":a.dir=0;break;case "rtl":a.dir=1;a.i=[0,2,1,3][a.i];break;default:h("'direction' option was not recognized.")}}function T(a,
9
+ b){"string"!==typeof b&&h("'behaviour' must be a string containing options.");var d=0<=b.indexOf("snap");a.n={p:0<=b.indexOf("tap")||d,extend:0<=b.indexOf("extend"),s:0<=b.indexOf("drag"),fixed:0<=b.indexOf("fixed"),m:d}}function U(a,b,d){a.o=[b.lower,b.upper];a.g=new s(b.format);e.each(a.o,function(a,g){e.isArray(g)||h("'serialization."+(a?"upper":"lower")+"' must be an array.");e.each(g,function(){this instanceof q||h("'serialization."+(a?"upper":"lower")+"' can only contain Link instances.");this.q=
10
+ a;this.u=d;this.scope=this.scope||d;this.g=new s(e.extend({},b.format,this.g))})});a.dir&&1<a.a&&a.o.reverse()}function V(a,b){var d={c:[],d:[],h:[!1],margin:0},c;c={step:{e:!1,f:L},range:{e:!0,f:M},start:{e:!0,f:N},snap:{e:!1,f:O},connect:{e:!0,f:P},orientation:{e:!1,f:Q},margin:{e:!1,f:R},direction:{e:!0,f:S},behaviour:{e:!0,f:T},serialization:{e:!0,f:U}};a=e.extend({connect:!1,direction:"ltr",behaviour:"tap",orientation:"horizontal"},a);a.serialization=e.extend({lower:[],upper:[],format:{}},a.serialization);
11
+ e.each(c,function(c,e){if(void 0===a[c])if(e.e)h("'"+c+"' is required.");else return!0;e.f(d,a[c],b)});d.style=d.k?"top":"left";return d}function W(a,b){var d=e("<div><div/></div>").addClass(f[2]),c=["-lower","-upper"];a.dir&&c.reverse();d.children().addClass(f[3]+" "+f[3]+c[b]);return d}function X(a,b){b.j&&(b=new q({target:e(b.j).clone().appendTo(a),method:b.method,format:b.g},!0));return b}function Y(a,b){var d,c=[];for(d=0;d<a.a;d++){var e=c,f=d,h=a.o[d],n=b[d].children(),r=void 0,l=[];l.push(new q({format:a.g},
12
+ !0));for(r=0;r<h.length;r++)l.push(X(n,h[r]));e[f]=l}return c}function Z(a,b,d){switch(a){case 1:b.addClass(f[7]);d[0].addClass(f[6]);break;case 3:d[1].addClass(f[6]);case 2:d[0].addClass(f[7]);case 0:b.addClass(f[6])}}function aa(a,b){var d,c=[];for(d=0;d<a.a;d++)c.push(W(a,d).appendTo(b));return c}function ba(a,b){b.addClass([f[0],f[8+a.dir],f[4+a.k]].join(" "));return e("<div/>").appendTo(b).addClass(f[1])}function ca(a,b,d){function c(){return u[["width","height"][b.k]]()}function g(a){var b,
13
+ c=[m.val()];for(b=0;b<a.length;b++)m.trigger(a[b],c)}function h(a,c,d){var g=a[0]!==k[0][0]?1:0,p=v[0]+b.margin,F=v[1]-b.margin;d&&1<k.length&&(c=g?Math.max(c,p):Math.min(c,F));100>c&&(c=J(b,c));c=Math.max(Math.min(parseFloat(c.toFixed(7)),100),0);if(c===v[g])return 1===k.length?!1:c===p||c===F?0:!1;a.css(b.style,c+"%");a.is(":first-child")&&a.toggleClass(f[17],50<c);v[g]=c;b.dir&&(c=100-c);e(w[g]).each(function(){this.write(b,c,a.children(),m)});return!0}function q(a,b,c){c||D(m,f[14]);h(a,b,!1);
14
+ g(["slide","set","change"])}function n(a,c,d,e){a=a.replace(/\s/g,".nui ")+".nui";c.on(a,function(a){var c=m.attr("disabled");if(m.hasClass(f[14])||void 0!==c&&null!==c)return!1;a.preventDefault();var c=0===a.type.indexOf("touch"),g=0===a.type.indexOf("mouse"),B=0===a.type.indexOf("pointer"),A,h,k=a;0===a.type.indexOf("MSPointer")&&(B=!0);a.originalEvent&&(a=a.originalEvent);c&&(A=a.changedTouches[0].pageX,h=a.changedTouches[0].pageY);if(g||B)B||void 0!==window.pageXOffset||(window.pageXOffset=document.documentElement.scrollLeft,
15
+ window.pageYOffset=document.documentElement.scrollTop),A=a.clientX+window.pageXOffset,h=a.clientY+window.pageYOffset;k.v=[A,h];k.cursor=g;a=k;a.l=a.v[b.k];d(a,e)})}function r(a,b){var d=b.a||k,e,f=!1,f=100*(a.l-b.start)/c(),m=d[0][0]!==k[0][0]?1:0;var n=b.w;e=f+n[0];f+=n[1];1<d.length?(0>e&&(f+=Math.abs(e)),100<f&&(e-=f-100),e=[Math.max(Math.min(e,100),0),Math.max(Math.min(f,100),0)]):e=[e,f];f=h(d[0],e[m],1===d.length);1<d.length&&(f=h(d[1],e[m?0:1],!1)||f);f&&g(["slide"])}function s(a){e("."+f[15]).removeClass(f[15]);
16
+ a.cursor&&e("body").css("cursor","").off(".nui");C.off(".nui");m.removeClass(f[12]);g(["set","change"])}function t(a,b){1===b.a.length&&b.a[0].children().addClass(f[15]);a.stopPropagation();n(l.move,C,r,{start:a.l,a:b.a,w:[v[0],v[k.length-1]]});n(l.end,C,s,null);a.cursor&&(e("body").css("cursor",e(a.target).css("cursor")),1<k.length&&m.addClass(f[12]),e("body").on("selectstart.nui",!1))}function x(a){var d=a.l,g=0;a.stopPropagation();e.each(k,function(){g+=this.offset()[b.style]});g=d<g/2||1===k.length?
17
+ 0:1;d-=u.offset()[b.style];d=100*d/c();q(k[g],d,b.n.m);b.n.m&&t(a,{a:[k[g]]})}function y(a){var c=(a=a.l<u.offset()[b.style])?0:100;a=a?0:k.length-1;q(k[a],c,!1)}var m=e(a),v=[-1,-1],u,w,k;if(!m.is(":empty"))throw Error("Slider was already initialized.");u=ba(b,m);k=aa(b,u);w=Y(b,k);Z(b.i,m,k);(function(a){var b;if(!a.fixed)for(b=0;b<k.length;b++)n(l.start,k[b].children(),t,{a:[k[b]]});a.p&&n(l.start,u,x,{a:k});a.extend&&(m.addClass(f[16]),a.p&&n(l.start,m,y,{a:k}));a.s&&(b=u.find("."+f[7]).addClass(f[10]),
18
+ a.fixed&&(b=b.add(u.children().not(b).children())),n(l.start,b,t,{a:k}))})(b.n);a.F=function(a,c,d,n,p){var l;b.dir&&1<b.a&&a.reverse();p&&D(m,f[14]);for(l=0;l<(1<k.length?3:1);l++)p=d||w[l%2][0],p=p.valueOf(a[l%2]),!1!==p&&(p=I(b,p),b.dir&&(p=100-p),!0!==h(k[l%2],p,!0)&&e(w[l%2]).each(function(){this.write(b,v[l%2],k[l%2].children(),m,n)}));!0===c&&g(["set"])};a.D=function(){var a,c=[];for(a=0;a<b.a;a++)c[a]=w[a][0].A;return 1===c.length?c[0]:b.dir&&1<b.a?c.reverse():c};a.r=function(){e.each(w,function(){e.each(this,
19
+ function(){this.target&&this.target.off(".nui")})});e(this).off(".nui").removeClass(f.join(" ")).empty();return d};m.val(b.start)}function da(a){this.length||h("Can't initialize slider on empty selection.");var b=V(a,this);return this.each(function(){ca(this,b,a)})}function ea(a){return this.each(function(){var b=e(this).val(),d=this.r(),c=e.extend({},d,a);e(this).noUiSlider(c);d.start===c.start&&e(this).val(b)})}var C=e(document),G=e.fn.val,l=window.navigator.G?{start:"pointerdown",move:"pointermove",
20
+ end:"pointerup"}:window.navigator.msPointerEnabled?{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}:{start:"mousedown touchstart",move:"mousemove touchmove",end:"mouseup touchend"},f="noUi-target noUi-base noUi-origin noUi-handle noUi-horizontal noUi-vertical noUi-background noUi-connect noUi-ltr noUi-rtl noUi-dragable noUi-state-drag noUi-state-tap noUi-active noUi-extended noUi-stacking".split(" "),K="decimals mark thousand prefix postfix encoder decoder negative negativeBefore".split(" "),
21
+ z=[2,".","","","",function(a){return a},function(a){return a},"-",""];s.prototype.b=function(a){return this.B[a]};s.prototype.C=function(a){function b(a){return a.split("").reverse().join("")}a=this.b("encoder")(a);var d="",c="",e="",f="";0>a&&(d=this.b("negative"),c=this.b("negativeBefore"));a=Math.abs(a).toFixed(this.b("decimals")).toString();a=a.split(".");0===parseFloat(a)&&(a[0]="0");this.b("thousand")?(e=b(a[0]).match(/.{1,3}/g),e=b(e.join(b(this.b("thousand"))))):e=a[0];this.b("mark")&&1<a.length&&
22
+ (f=this.b("mark")+a[1]);return c+this.b("prefix")+d+e+f+this.b("postfix")};s.prototype.t=function(a){function b(a){return a.replace(/[\-\/\\\^$*+?.()|\[\]{}]/g,"\\$&")}var d;if(null===a||void 0===a)return!1;a=a.toString();d=a.replace(RegExp("^"+b(this.b("negativeBefore"))),"");a!==d?(a=d,d="-"):d="";a=a.replace(RegExp("^"+b(this.b("prefix"))),"");this.b.negative&&(d="",a=a.replace(RegExp("^"+b(this.b("negative"))),"-"));a=a.replace(RegExp(b(this.b("postfix"))+"$"),"").replace(RegExp(b(this.b("thousand")),
23
+ "g"),"").replace(this.b("mark"),".");a=this.b("decoder")(parseFloat(d+a));return isNaN(a)?!1:a};q.prototype.write=function(a,b,d,c,e){if(!this.update||!1!==e){if(100<=b)b=a.d.slice(-1)[0];else{e=1;for(var f,h,l;b>=a.c[e];)e++;f=a.d[e-1];h=a.d[e];l=a.c[e-1];f=[f,h];b=100/(a.c[e]-l)*(b-l)*(f[1]-f[0])/100+f[0]}this.A=b=this.format(b);if("function"===typeof this.method)this.method.call(this.target[0]||c[0],b,d,c);else this.target[this.method](b,d,c)}};q.prototype.format=function(a){return this.g.C(a)};
24
+ q.prototype.valueOf=function(a){return this.g.t(a)};e.noUiSlider={Link:q};e.fn.noUiSlider=function(a,b){return(b?ea:da).call(this,a)};e.fn.val=function(){var a=Array.prototype.slice.call(arguments,0),b,d,c,g;if(!a.length)return this.hasClass(f[0])?this[0].D():G.apply(this);"object"===typeof a[1]?(b=a[1].set,d=a[1].link,c=a[1].update,g=a[1].animate):!0===a[1]&&(b=!0);return this.each(function(){e(this).hasClass(f[0])?this.F(H(a[0]),b,d,c,g):G.apply(e(this),a)})}})(window.jQuery||window.Zepto);
libs/factory/bootstrap/assets/js/plugin.paddings-editor.js ADDED
@@ -0,0 +1,254 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( $ ){
2
+
3
+ var PaddingsEditor = function (element) {
4
+ this.$element = $(element);
5
+ this.$rectangle = this.$element.find(".factory-rectangle");
6
+ this.$center = this.$element.find(".factory-side-center");
7
+ this.$bar = this.$element.find(".factory-bar");
8
+ this.$sides = this.$element.find(".factory-side");
9
+ this.$result = this.$element.find(".factory-result");
10
+
11
+ this.units = this.$element.data('units');
12
+ this.rangeStart = this.$element.data('range-start');
13
+ this.rangeEnd = this.$element.data('range-end');
14
+ this.step = this.$element.data('step');
15
+
16
+ this._createCanvas();
17
+ this._createSlider();
18
+ this._initMouse();
19
+
20
+ this.selectSide('center');
21
+ };
22
+
23
+ /**
24
+ * Creates canvas for drawing control.
25
+ */
26
+ PaddingsEditor.prototype._createCanvas = function() {
27
+ var self = this;
28
+
29
+ this._recalculateSizes();
30
+ this.$canvas = $("<canvas width='" + self.elementWidth + "' height='" + self.elementHeight + "'>")
31
+ .appendTo(this.$rectangle);
32
+
33
+ this.canvasContext = this.$canvas.get(0).getContext('2d');
34
+
35
+ this._redraw();
36
+ };
37
+
38
+ /**
39
+ * Creates slider.
40
+ */
41
+ PaddingsEditor.prototype._createSlider = function() {
42
+ var self = this;
43
+
44
+ this.$bar.noUiSlider({
45
+ start: parseInt( self.$center.data('value') ),
46
+ range: {'min': self.rangeStart, 'max': self.rangeEnd },
47
+ step: self.step
48
+ });
49
+
50
+ this.$bar.on('slide', function(){
51
+ var value = parseInt( self.$bar.val() );
52
+ var valueWithUnits = value + self.units;
53
+
54
+ if ( self.activeSide === 'center' ) {
55
+ self.$sides.data('value', value);
56
+ self.$sides.find(".factory-visible-value").text( valueWithUnits );
57
+ } else {
58
+ self.$activeSide.data('value', value);
59
+ self.$activeSide.find(".factory-visible-value").text( valueWithUnits );
60
+ }
61
+ });
62
+
63
+ this.$bar.on('set', function(){
64
+ self.$result.val( self.getValue() );
65
+ self.$result.trigger('change');
66
+ });
67
+ };
68
+
69
+ /**
70
+ * Returns a current value.
71
+ */
72
+ PaddingsEditor.prototype.getValue = function() {
73
+ var topValue = this.$element.find(".factory-side-top").data('value');
74
+ var rightValue = this.$element.find(".factory-side-right").data('value');
75
+ var bottomValue = this.$element.find(".factory-side-bottom").data('value');
76
+ var leftValue = this.$element.find(".factory-side-left").data('value');
77
+ return topValue + this.units + " " + rightValue + this.units + " " + bottomValue + this.units + " " + leftValue + this.units;
78
+ }
79
+
80
+ /**
81
+ * Selects a given side by its name.
82
+ */
83
+ PaddingsEditor.prototype.selectSide = function( side ) {
84
+ if ( this.activeSide === side ) return;
85
+
86
+ this.activeSide = side;
87
+ this.$activeSide = this.$element.find(".factory-side-" + this.activeSide);
88
+
89
+ this.$element.find(".factory-side.factory-active").removeClass("factory-active");
90
+ this.$activeSide.addClass("factory-active");
91
+
92
+ this._redraw();
93
+ this.$bar.val( this.$activeSide.data('value') );
94
+ }
95
+
96
+ PaddingsEditor.prototype._initMouse = function() {
97
+ var self = this;
98
+
99
+ this._recalculateSizes();
100
+
101
+ this.$rectangle.on('mousemove.paddings-editor', function(e){
102
+ self.hoveredSide = self._getCurrentSide(e.pageX, e.pageY);
103
+
104
+ if ( self.hoveredSide === self.lastHoveredSide ) return;
105
+ self.lastHoveredSide = self.hoveredSide;
106
+
107
+ self._redraw();
108
+ });
109
+
110
+ this.$rectangle.on('mouseleave.paddings-editor', function(e){
111
+ self.hoveredSide = self.lastHoveredSide = null;
112
+ self._redraw();
113
+ });
114
+
115
+ this.$rectangle.on('click.paddings-editor', function(e){
116
+ var side = self._getCurrentSide(e.pageX, e.pageY);
117
+ self.selectSide( side );
118
+ });
119
+ };
120
+
121
+ /**
122
+ * Returns a current side by mouse pointer position.
123
+ */
124
+ PaddingsEditor.prototype._getCurrentSide = function(pageX, pageY) {
125
+ var offset = this.$element.offset();
126
+
127
+ var offsetX = pageX - offset.left;
128
+ var offsetY = pageY - offset.top;
129
+
130
+ var dX = offsetX - this.centerX;
131
+ var dY = offsetY - this.centerY;
132
+ var dL = Math.sqrt ( Math.pow(dX,2) + Math.pow(dY,2) );
133
+ if ( dL <= this.centerR ) return "center";
134
+
135
+ // for line #1 (from bottom-left corner to top-right conner)
136
+ var a1 = this.elementHeight;
137
+ var b1 = this.elementWidth;
138
+ var c1 = -this.elementWidth * this.elementHeight;
139
+
140
+ var resultY1 = - ( c1 + a1 * offsetX ) / b1;
141
+
142
+ // for line #2 (from bottom-left corner to top-right conner)
143
+ var a2 = -this.elementHeight;
144
+ var b2 = this.elementWidth;
145
+ var c2 = 0;
146
+
147
+ var resultY2 = - ( c2 + a2 * offsetX ) / b2;
148
+
149
+ if ( resultY1 < offsetY && resultY2 > offsetY ) return "right";
150
+ if ( resultY1 > offsetY && resultY2 < offsetY ) return "left";
151
+ if ( resultY1 > offsetY && resultY2 > offsetY ) return "top";
152
+ if ( resultY1 < offsetY && resultY2 < offsetY ) return "bottom";
153
+ return null;
154
+ }
155
+
156
+ /**
157
+ * Redraws the canvas.
158
+ */
159
+ PaddingsEditor.prototype._redraw = function() {
160
+ this.canvasContext.clearRect ( 0, 0, this.elementWidth, this.elementHeight );
161
+
162
+ this._highlightSide('top', '#a6b6b6');
163
+ this._highlightSide('bottom', '#a6b6b6');
164
+ this._highlightSide('left', '#aec0c0');
165
+ this._highlightSide('right', '#aec0c0');
166
+
167
+ this._highlightSide(this.hoveredSide, '#c0cece');
168
+ if ( this.activeSide ) this._highlightSide(this.activeSide, '#829595');
169
+ }
170
+
171
+ /**
172
+ * Hightlights hovered area.
173
+ */
174
+ PaddingsEditor.prototype._highlightSide = function( side, style ) {
175
+
176
+ if ( !side ) return;
177
+ if ( side === 'center' ) return;
178
+
179
+ this.canvasContext.fillStyle = style;
180
+ this.canvasContext.beginPath();
181
+
182
+ if ( 'top' === side ) {
183
+
184
+ this.canvasContext.moveTo(0, 0);
185
+ this.canvasContext.lineTo(this.centerX, this.centerY);
186
+ this.canvasContext.lineTo(this.elementWidth, 0);
187
+
188
+ } else if ( 'bottom' === side ) {
189
+
190
+ this.canvasContext.moveTo(0, this.elementHeight);
191
+ this.canvasContext.lineTo(this.centerX, this.centerY);
192
+ this.canvasContext.lineTo(this.elementWidth, this.elementHeight);
193
+
194
+ } else if ( 'left' === side ) {
195
+
196
+ this.canvasContext.moveTo(0, 0);
197
+ this.canvasContext.lineTo(this.centerX, this.centerY);
198
+ this.canvasContext.lineTo(0, this.elementHeight);
199
+
200
+ } else if ( 'right' === side ) {
201
+
202
+ this.canvasContext.moveTo(this.elementWidth, 0);
203
+ this.canvasContext.lineTo(this.centerX, this.centerY);
204
+ this.canvasContext.lineTo(this.elementWidth, this.elementHeight);
205
+ }
206
+
207
+ this.canvasContext.closePath();
208
+ this.canvasContext.fill();
209
+ };
210
+
211
+ PaddingsEditor.prototype._recalculateSizes = function() {
212
+
213
+ this.elementOffset = this.$element.offset();
214
+ this.elementWidth = this.$rectangle.innerWidth();
215
+ this.elementHeight = this.$rectangle.innerHeight();
216
+ this.centerSize = this.$center.innerWidth();
217
+
218
+ this.centerR = this.centerSize / 2;
219
+ this.centerX = this.elementWidth / 2;
220
+ this.centerY = this.elementHeight / 2;
221
+ }
222
+
223
+ // INTEGER CONTROL DEFINITION
224
+ // ================================
225
+
226
+ $.fn.factoryBootstrap329_paddingsEditor = function (option) {
227
+
228
+ // call an method
229
+ if ( typeof option === "string" ) {
230
+ var data = $(this).data('factory.paddings-editor');
231
+ if ( !data ) return null;
232
+ return data[option]();
233
+ }
234
+
235
+ // creating an object
236
+ else {
237
+ return this.each(function () {
238
+ var $this = $(this);
239
+ var data = $this.data('factory.paddings-editor');
240
+ if (!data) $this.data('factory.paddings-editor', (data = new PaddingsEditor(this)));
241
+ });
242
+ }
243
+ };
244
+
245
+ $.fn.factoryBootstrap329_paddingsEditor.Constructor = PaddingsEditor;
246
+
247
+ // AUTO CREATING
248
+ // ================================
249
+
250
+ $(function(){
251
+ $(".factory-bootstrap-329 .factory-paddings-editor").factoryBootstrap329_paddingsEditor();
252
+ });
253
+
254
+ }( jQuery ) );
libs/factory/bootstrap/boot.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
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_329_LOADED') ) {
18
+ return;
19
+ }
20
+ define('FACTORY_BOOTSTRAP_329_LOADED', true);
21
+
22
+ define('FACTORY_BOOTSTRAP_329_DIR', dirname(__FILE__));
23
+ define('FACTORY_BOOTSTRAP_329_URL', plugins_url(null, __FILE__));
24
+
25
+ // sets version of admin interface
26
+ define('FACTORY_BOOTSTRAP_329_VERSION', 'FACTORY_BOOTSTRAP_329');
27
+ if( !defined('FACTORY_FLAT_ADMIN') ) {
28
+ define('FACTORY_FLAT_ADMIN', true);
29
+ }
30
+
31
+ include_once(FACTORY_BOOTSTRAP_329_DIR . '/includes/functions.php');
libs/factory/bootstrap/includes/functions.php ADDED
@@ -0,0 +1,269 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file manages assets of the Factory Bootstap.
4
+ *
5
+ * @author Alex Kovalev <alex@byonepress.com>
6
+ * @author Paul Kashtanoff <paul@byonepress.com>
7
+ * @copyright (c) 2013, OnePress Ltd
8
+ *
9
+ * @package core
10
+ * @since 1.0.0
11
+ */
12
+
13
+ add_action('factory_bootstrap_329_plugin_created', 'factory_bootstrap_329_plugin_created');
14
+ function factory_bootstrap_329_plugin_created( $plugin ) {
15
+ $manager = new FactoryBootstrap329_Manager( $plugin );
16
+ $plugin->bootstrap = $manager;
17
+ }
18
+
19
+ /**
20
+ * The Bootstrap Manager class.
21
+ *
22
+ * @since 3.2.0
23
+ */
24
+ class FactoryBootstrap329_Manager {
25
+
26
+ /**
27
+ * A plugin for which the manager was created.
28
+ *
29
+ * @since 3.2.0
30
+ * @var Factory325_Plugin
31
+ */
32
+ public $plugin;
33
+
34
+ /**
35
+ * Contains scripts to include.
36
+ *
37
+ * @since 3.2.0
38
+ * @var string[]
39
+ */
40
+ public $scripts = array();
41
+
42
+ /**
43
+ * Contains styles to include.
44
+ *
45
+ * @since 3.2.0
46
+ * @var string[]
47
+ */
48
+ public $styles = array();
49
+
50
+ /**
51
+ * Createas a new instance of the license api for a given plugin.
52
+ *
53
+ * @since 1.0.0
54
+ */
55
+ public function __construct( $plugin ) {
56
+ $this->plugin = $plugin;
57
+
58
+ add_action('admin_enqueue_scripts', array($this, 'loadAssets'));
59
+ add_filter('admin_body_class', array($this, 'adminBodyClass'));
60
+ }
61
+
62
+ /**
63
+ * Includes the Bootstrap scripts.
64
+ *
65
+ * @since 3.2.0
66
+ * @param mixedp[] $scripts
67
+ * @return void
68
+ */
69
+ public function enqueueScript( $scripts ) {
70
+
71
+ if ( is_array( $scripts )) {
72
+ foreach( $scripts as $script) {
73
+ if ( !in_array ( $script, $this->scripts ) ) $this->scripts[] = $script;
74
+ }
75
+ } else {
76
+ if ( !in_array ( $scripts, $this->scripts ) ) $this->scripts[] = $scripts;
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Includes the Bootstrap styles.
82
+ *
83
+ * @since 3.2.0
84
+ * @param mixedp[] $scripts
85
+ * @return void
86
+ */
87
+ public function enqueueStyle( $styles ) {
88
+
89
+ if ( is_array( $styles )) {
90
+ foreach( $styles as $style ) {
91
+ if ( !in_array ( $style, $this->styles ) ) $this->styles[] = $style;
92
+ }
93
+ } else {
94
+ if ( !in_array ( $styles, $this->styles ) ) $this->styles[] = $styles;
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Loads Bootstrap assets.
100
+ *
101
+ * @see admin_enqueue_scripts
102
+ *
103
+ * @since 3.2.0
104
+ * @return void
105
+ */
106
+ public function loadAssets( $hook ) {
107
+
108
+ do_action('factory_bootstrap_enqueue_scripts', $hook );
109
+ do_action('factory_bootstrap_enqueue_scripts_' . $this->plugin->pluginName, $hook );
110
+
111
+ $dependencies = array();
112
+ if ( !empty( $this->scripts ) ) {
113
+ $dependencies[] = 'jquery';
114
+ $dependencies[] = 'jquery-ui-core';
115
+ $dependencies[] = 'jquery-ui-widget';
116
+ }
117
+
118
+ foreach( $this->scripts as $script ) {
119
+ switch ($script) {
120
+ case 'plugin.iris':
121
+ $dependencies[] = 'jquery-ui-widget';
122
+ $dependencies[] = 'jquery-ui-slider';
123
+ $dependencies[] = 'jquery-ui-draggable';
124
+ break;
125
+ }
126
+ }
127
+
128
+ // Issue #FB-3:
129
+ // Tests if we can access load-styles.php and load-scripts.php remotely.
130
+ // If yes, we use load-styles.php and load-scripts.php to load, merge and compress css and js.
131
+ // Otherwise, every resource will be loaded separatly.
132
+
133
+ $isWpContentAccessTested = get_option('factory_wp_content_access_tested', false );
134
+ if ( !$isWpContentAccessTested ) {
135
+ update_option('factory_css_js_compression', false );
136
+ update_option('factory_wp_content_access_tested', true );
137
+
138
+ if ( function_exists('wp_remote_get') ) {
139
+ $result = wp_remote_get(FACTORY_BOOTSTRAP_329_URL . '/includes/load-scripts.php?test=1');
140
+ if ( !is_wp_error($result ) && $result && isset( $result['body'] ) && $result['body'] == 'success' ) {
141
+ update_option('factory_css_js_compression', true );
142
+ }
143
+ }
144
+ }
145
+
146
+ $compression = get_option('factory_css_js_compression', false );
147
+
148
+ if ( !$compression ) {
149
+
150
+ $id = md5(FACTORY_BOOTSTRAP_329_VERSION);
151
+
152
+ $isFirst = true;
153
+ foreach($this->scripts as $scriptToLoad) {
154
+ wp_enqueue_script($scriptToLoad . '-' . $id, FACTORY_BOOTSTRAP_329_URL . "/assets/js/$scriptToLoad.js", $isFirst ? $dependencies : false);
155
+ $isFirst = false;
156
+ }
157
+
158
+ foreach($this->styles as $styleToLoad) {
159
+ wp_enqueue_style($styleToLoad . '-' . $id, FACTORY_BOOTSTRAP_329_URL . "/assets/flat/css/$styleToLoad.css" );
160
+ }
161
+
162
+ // - //
163
+
164
+ } else {
165
+
166
+ $loadScriptsOut = join( ',', $this->scripts );
167
+ $loadStylesOut = join( ',', $this->styles );
168
+
169
+ if( defined('WP_DEBUG') && WP_DEBUG ) {
170
+ $loadScriptsOut .= "&debug=true";
171
+ $loadStylesOut .= "&debug=true";
172
+ }
173
+
174
+ if ( !empty( $this->styles ) ) {
175
+ $id = md5($loadStylesOut . FACTORY_BOOTSTRAP_329_VERSION);
176
+ wp_enqueue_style('factory-bootstrap-329-' . $id, FACTORY_BOOTSTRAP_329_URL . '/includes/load-styles.php?folder=flat&load='.$loadStylesOut, array(), FACTORY_BOOTSTRAP_329_VERSION);
177
+ }
178
+
179
+ if ( !empty( $this->scripts ) ) {
180
+ $id = md5($loadScriptsOut . FACTORY_BOOTSTRAP_329_VERSION);
181
+ wp_enqueue_script('factory-bootstrap-329-' . $id, FACTORY_BOOTSTRAP_329_URL . '/includes/load-scripts.php?load='.$loadScriptsOut, $dependencies, FACTORY_BOOTSTRAP_329_VERSION);
182
+ }
183
+
184
+
185
+ // Issue #FB-4:
186
+ // Some themes and plugins contain the functions which remove arguments from the scripts and styles paths.
187
+ // If we use the compression, we need to check whether the paths are the same.
188
+
189
+ add_filter( 'script_loader_src', array($this, 'testKeepingArgsInPaths'), 99999, 2 );
190
+ add_filter( 'style_loader_src', array($this, 'testKeepingArgsInPaths'), 99999, 2 );
191
+ }
192
+
193
+ $userId = get_current_user_id();
194
+ $colorName = get_user_meta($userId, 'admin_color', true);
195
+
196
+ if ( $colorName !== 'fresh' ) {
197
+ wp_enqueue_style('factory-bootstrap-329-colors', FACTORY_BOOTSTRAP_329_URL . '/assets/flat/css/bootstrap.' . $colorName . '.css');
198
+ }
199
+
200
+ if ( $colorName == 'light' ) {
201
+ $primaryDark = '#037c9a';
202
+ $primaryLight = '#04a4cc';
203
+ } elseif( $colorName == 'blue' ) {
204
+ $primaryDark = '#d39323';
205
+ $primaryLight = '#e1a948';
206
+ } elseif( $colorName == 'coffee' ) {
207
+ $primaryDark = '#b78a66';
208
+ $primaryLight = '#c7a589';
209
+ } elseif( $colorName == 'ectoplasm' ) {
210
+ $primaryDark = '#839237';
211
+ $primaryLight = '#a3b745';
212
+ } elseif( $colorName == 'ocean' ) {
213
+ $primaryDark = '#80a583';
214
+ $primaryLight = '#9ebaa0';
215
+ } elseif( $colorName == 'midnight' ) {
216
+ $primaryDark = '#d02a21';
217
+ $primaryLight = '#e14d43';
218
+ } elseif( $colorName == 'sunrise' ) {
219
+ $primaryDark = '#c36822';
220
+ $primaryLight = '#dd823b';
221
+ } else {
222
+ $primaryDark = '#0074a2';
223
+ $primaryLight = '#2ea2cc';
224
+ }
225
+
226
+ ?>
227
+
228
+ <script>
229
+ if ( !window.factory ) window.factory = {};
230
+ if ( !window.factory.factoryBootstrap329 ) window.factory.factoryBootstrap329 = {};
231
+ window.factory.factoryBootstrap329.colors = {
232
+ primaryDark: '<?php echo $primaryDark ?>',
233
+ primaryLight: '<?php echo $primaryLight ?>'
234
+ };
235
+ </script>
236
+ <?php
237
+ }
238
+
239
+ /**
240
+ * Tests whether the scripts and styles path contain query arguments or them were removed.
241
+ *
242
+ * See 'script_loader_src'
243
+ * See 'style_loader_src'
244
+ *
245
+ * @since 3.2.5
246
+ * @return void
247
+ */
248
+ public function testKeepingArgsInPaths( $src, $handle ) {
249
+ if ( substr($handle, 0, 22) !== 'factory-bootstrap-329-') return $src;
250
+
251
+ $parts = explode( '?', $src );
252
+ if ( count( $parts ) > 1 ) return $src;
253
+
254
+ update_option('factory_css_js_compression', false );
255
+ return $src;
256
+ }
257
+
258
+ /**
259
+ * Adds the body classes: 'factory-flat or 'factory-volumetric'.
260
+ *
261
+ * @since 3.2.0
262
+ * @param string $classes
263
+ * @return string
264
+ */
265
+ public function adminBodyClass( $classes) {
266
+ $classes .= FACTORY_FLAT_ADMIN ? ' factory-flat ' : ' factory-volumetric ';
267
+ return $classes;
268
+ }
269
+ }
libs/factory/bootstrap/includes/load-scripts.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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/core/boot.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
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.0
10
+ */
11
+
12
+ if( defined('FACTORY_325_LOADED') ) {
13
+ return;
14
+ }
15
+ define('FACTORY_325_LOADED', true);
16
+
17
+ define('FACTORY_325_VERSION', '000');
18
+
19
+ define('FACTORY_325_DIR', dirname(__FILE__));
20
+ define('FACTORY_325_URL', plugins_url(null, __FILE__));
21
+
22
+ #comp merge
23
+ require(FACTORY_325_DIR . '/includes/assets-managment/assets-list.class.php');
24
+ require(FACTORY_325_DIR . '/includes/assets-managment/script-list.class.php');
25
+ require(FACTORY_325_DIR . '/includes/assets-managment/style-list.class.php');
26
+
27
+ require(FACTORY_325_DIR . '/includes/functions.php');
28
+ require(FACTORY_325_DIR . '/includes/plugin.class.php');
29
+
30
+ require(FACTORY_325_DIR . '/includes/activation/activator.class.php');
31
+ require(FACTORY_325_DIR . '/includes/activation/update.class.php');
32
+ #endcomp
libs/factory/core/includes/activation/activator.class.php ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 Factory325_Activator {
18
+
19
+ /**
20
+ * Curent plugin.
21
+ * @var Factory325_Plugin
22
+ */
23
+ public $plugin;
24
+
25
+ public function __construct(Factory325_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
+ }
libs/factory/core/includes/activation/update.class.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 Factory325_Update {
18
+
19
+ /**
20
+ * Current plugin
21
+ * @var Factory325_Plugin
22
+ */
23
+ var $plugin;
24
+
25
+ public function __construct( Factory325_Plugin $plugin ){
26
+ $this->plugin = $plugin;
27
+ }
28
+
29
+ abstract function install();
30
+ }
libs/factory/core/includes/assets-managment/assets-list.class.php ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
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 Factory325_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
+ }
libs/factory/core/includes/assets-managment/script-list.class.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
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 Factory325_ScriptList extends Factory325_AssetsList
18
+ {
19
+ public $localizeData = array();
20
+ public $useAjax = false;
21
+
22
+ public function connect( $source = 'wordpress' ) {
23
+
24
+ // register all global required scripts
25
+ if ( !empty( $this->required[$source] ) ) {
26
+ foreach ($this->required[$source] as $script) {
27
+ if ( 'wordpress' === $source ) wp_enqueue_script( $script );
28
+ elseif ( 'bootstrap' === $source ) $this->plugin->bootstrap->enqueueScript( $script );
29
+ }
30
+ }
31
+
32
+ if ( $source == 'bootstrap' ) return;
33
+
34
+ $isFirstScript = true;
35
+ $isFooter = false;
36
+
37
+ // register all other scripts
38
+ foreach (array($this->headerPlace, $this->footerPlace) as $scriptPlace) {
39
+
40
+ foreach($scriptPlace as $script) {
41
+
42
+ wp_register_script( $script, $script, array(), false, $isFooter);
43
+
44
+ if ( $isFirstScript && $this->useAjax ) {
45
+ wp_localize_script( $script, 'factory', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
46
+ }
47
+
48
+ if ( !empty( $this->localizeData[$script] ) ) {
49
+
50
+ wp_localize_script(
51
+ $script,
52
+ $this->localizeData[$script][0],
53
+ $this->localizeData[$script][1]
54
+ );
55
+ }
56
+
57
+ wp_enqueue_script( $script );
58
+ $siFirstScript = false;
59
+ }
60
+
61
+ $isFooter = true;
62
+ }
63
+ }
64
+
65
+ public function useAjax() {
66
+ $this->useAjax = true;
67
+ }
68
+
69
+ public function localize($varname, $data) {
70
+ $bindTo = count( $this->all ) == 0 ? null : end( $this->all );
71
+ if (!$bindTo) return;
72
+
73
+ $this->localizeData[$bindTo] = array($varname, $data);
74
+ return $this;
75
+ }
76
+ }
libs/factory/core/includes/assets-managment/style-list.class.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
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 Factory325_StyleList extends Factory325_AssetsList
18
+ {
19
+ public function connect( $source = 'wordpress' ) {
20
+
21
+ // register all global required scripts
22
+ if ( !empty( $this->required[$source] ) ) {
23
+
24
+ foreach ($this->required[$source] as $style) {
25
+ if ( 'wordpress' === $source ) wp_enqueue_style( $style );
26
+ elseif ( 'bootstrap' === $source ) $this->plugin->bootstrap->enqueueStyle( $style );
27
+ }
28
+ }
29
+
30
+ if ( $source == 'bootstrap' ) return;
31
+
32
+ // register all other styles
33
+ foreach($this->all as $style) {
34
+ wp_enqueue_style( $style, $style, array());
35
+ }
36
+ }
37
+ }
libs/factory/core/includes/functions.php ADDED
@@ -0,0 +1,272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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_325_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_325_nonce() {
35
+ echo factory_325_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_325_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_325_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_325_json_error($error) {
73
+ echo json_encode(array('error' => $error));
74
+ exit;
75
+ }
76
+
77
+ function factory_325_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_325_pathinfo( $path ) {
95
+ $data = pathinfo($path);
96
+ $data['filename'] = factory_325_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_325_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_325_filename_ext($filename){
124
+ $result = explode('.', $filename);
125
+ if ( empty($result) ) return null;
126
+ return $result[count($result)-1];
127
+ }
128
+
129
+ function factory_325_get_human_filesize_by_path( $path ) {
130
+ $bytes = filesize( $path );
131
+ return factory_get_human_filesize( $bytes );
132
+ }
133
+
134
+ function factory_325_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_325_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_325_get_weeks( $startDate, $endDate ) {
178
+ $days = factory_325_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_325_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_325_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_325_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_325_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_325_set_lazy_redirect( $url ) {
261
+ update_option('factory_lazy_redirect', $url );
262
+ }
263
+
264
+ add_action('admin_init', 'factory_325_do_lazy_redirect');
265
+ function factory_325_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
+
libs/factory/core/includes/plugin.class.php ADDED
@@ -0,0 +1,730 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
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 Factory325_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_325_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_325_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 Factory325_ScriptList($this);
724
+ }
725
+
726
+ public function newStyleList()
727
+ {
728
+ return new Factory325_StyleList($this);
729
+ }
730
+ }
libs/factory/font-awesome/assets/css/font-awesome.css ADDED
@@ -0,0 +1,3049 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4
+ */
5
+ /* FONT PATH
6
+ * -------------------------- */
7
+ @font-face {
8
+ font-family: 'FontAwesome';
9
+ src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
10
+ src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
11
+ font-weight: normal;
12
+ font-style: normal;
13
+ }
14
+
15
+ .factory-fontawesome-320 .fa {
16
+ display: inline-block;
17
+ font: normal normal normal 14px/1 FontAwesome;
18
+ font-size: inherit;
19
+ text-rendering: auto;
20
+ -webkit-font-smoothing: antialiased;
21
+ -moz-osx-font-smoothing: grayscale;
22
+ }
23
+
24
+ /* makes the font 33% larger relative to the icon container */
25
+ .factory-fontawesome-320 .fa-lg {
26
+ font-size: 1.33333333em;
27
+ line-height: 0.75em;
28
+ vertical-align: -15%;
29
+ }
30
+
31
+ .factory-fontawesome-320 .fa-2x {
32
+ font-size: 2em;
33
+ }
34
+
35
+ .factory-fontawesome-320 .fa-3x {
36
+ font-size: 3em;
37
+ }
38
+
39
+ .factory-fontawesome-320 .fa-4x {
40
+ font-size: 4em;
41
+ }
42
+
43
+ .factory-fontawesome-320 .fa-5x {
44
+ font-size: 5em;
45
+ }
46
+
47
+ .factory-fontawesome-320 .fa-fw {
48
+ width: 1.28571429em;
49
+ text-align: center;
50
+ }
51
+
52
+ .factory-fontawesome-320 .fa-ul {
53
+ padding-left: 0;
54
+ margin-left: 2.14285714em;
55
+ list-style-type: none;
56
+ }
57
+
58
+ .factory-fontawesome-320 .fa-ul > li {
59
+ position: relative;
60
+ }
61
+
62
+ .factory-fontawesome-320 .fa-li {
63
+ position: absolute;
64
+ left: -2.14285714em;
65
+ width: 2.14285714em;
66
+ top: 0.14285714em;
67
+ text-align: center;
68
+ }
69
+
70
+ .factory-fontawesome-320 .fa-li.fa-lg {
71
+ left: -1.85714286em;
72
+ }
73
+
74
+ .factory-fontawesome-320 .fa-border {
75
+ padding: .2em .25em .15em;
76
+ border: solid 0.08em #eeeeee;
77
+ border-radius: .1em;
78
+ }
79
+
80
+ .factory-fontawesome-320 .fa-pull-left {
81
+ float: left;
82
+ }
83
+
84
+ .factory-fontawesome-320 .fa-pull-right {
85
+ float: right;
86
+ }
87
+
88
+ .factory-fontawesome-320 .fa.fa-pull-left {
89
+ margin-right: .3em;
90
+ }
91
+
92
+ .factory-fontawesome-320 .fa.fa-pull-right {
93
+ margin-left: .3em;
94
+ }
95
+
96
+ /* Deprecated as of 4.4.0 */
97
+ .factory-fontawesome-320 .pull-right {
98
+ float: right;
99
+ }
100
+
101
+ .factory-fontawesome-320 .pull-left {
102
+ float: left;
103
+ }
104
+
105
+ .factory-fontawesome-320 .fa.pull-left {
106
+ margin-right: .3em;
107
+ }
108
+
109
+ .factory-fontawesome-320 .fa.pull-right {
110
+ margin-left: .3em;
111
+ }
112
+
113
+ .factory-fontawesome-320 .fa-spin {
114
+ -webkit-animation: fa-spin 2s infinite linear;
115
+ animation: fa-spin 2s infinite linear;
116
+ }
117
+
118
+ .factory-fontawesome-320 .fa-pulse {
119
+ -webkit-animation: fa-spin 1s infinite steps(8);
120
+ animation: fa-spin 1s infinite steps(8);
121
+ }
122
+
123
+ @-webkit-keyframes fa-spin {
124
+ 0% {
125
+ -webkit-transform: rotate(0deg);
126
+ transform: rotate(0deg);
127
+ }
128
+ 100% {
129
+ -webkit-transform: rotate(359deg);
130
+ transform: rotate(359deg);
131
+ }
132
+ }
133
+
134
+ @keyframes fa-spin {
135
+ 0% {
136
+ -webkit-transform: rotate(0deg);
137
+ transform: rotate(0deg);
138
+ }
139
+ 100% {
140
+ -webkit-transform: rotate(359deg);
141
+ transform: rotate(359deg);
142
+ }
143
+ }
144
+
145
+ .factory-fontawesome-320 .fa-rotate-90 {
146
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
147
+ -webkit-transform: rotate(90deg);
148
+ -ms-transform: rotate(90deg);
149
+ transform: rotate(90deg);
150
+ }
151
+
152
+ .factory-fontawesome-320 .fa-rotate-180 {
153
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
154
+ -webkit-transform: rotate(180deg);
155
+ -ms-transform: rotate(180deg);
156
+ transform: rotate(180deg);
157
+ }
158
+
159
+ .factory-fontawesome-320 .fa-rotate-270 {
160
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
161
+ -webkit-transform: rotate(270deg);
162
+ -ms-transform: rotate(270deg);
163
+ transform: rotate(270deg);
164
+ }
165
+
166
+ .factory-fontawesome-320 .fa-flip-horizontal {
167
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
168
+ -webkit-transform: scale(-1, 1);
169
+ -ms-transform: scale(-1, 1);
170
+ transform: scale(-1, 1);
171
+ }
172
+
173
+ .factory-fontawesome-320 .fa-flip-vertical {
174
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
175
+ -webkit-transform: scale(1, -1);
176
+ -ms-transform: scale(1, -1);
177
+ transform: scale(1, -1);
178
+ }
179
+
180
+ :root .fa-rotate-90,
181
+ :root .fa-rotate-180,
182
+ :root .fa-rotate-270,
183
+ :root .fa-flip-horizontal,
184
+ :root .fa-flip-vertical {
185
+ filter: none;
186
+ }
187
+
188
+ .factory-fontawesome-320 .fa-stack {
189
+ position: relative;
190
+ display: inline-block;
191
+ width: 2em;
192
+ height: 2em;
193
+ line-height: 2em;
194
+ vertical-align: middle;
195
+ }
196
+
197
+ .factory-fontawesome-320 .fa-stack-1x,
198
+ .factory-fontawesome-320 .fa-stack-2x {
199
+ position: absolute;
200
+ left: 0;
201
+ width: 100%;
202
+ text-align: center;
203
+ }
204
+
205
+ .factory-fontawesome-320 .fa-stack-1x {
206
+ line-height: inherit;
207
+ }
208
+
209
+ .factory-fontawesome-320 .fa-stack-2x {
210
+ font-size: 2em;
211
+ }
212
+
213
+ .factory-fontawesome-320 .fa-inverse {
214
+ color: #ffffff;
215
+ }
216
+
217
+ /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
218
+ readers do not read off random characters that represent icons */
219
+ .factory-fontawesome-320 .fa-glass:before {
220
+ content: "\f000";
221
+ }
222
+
223
+ .factory-fontawesome-320 .fa-music:before {
224
+ content: "\f001";
225
+ }
226
+
227
+ .factory-fontawesome-320 .fa-search:before {
228
+ content: "\f002";
229
+ }
230
+
231
+ .factory-fontawesome-320 .fa-envelope-o:before {
232
+ content: "\f003";
233
+ }
234
+
235
+ .factory-fontawesome-320 .fa-heart:before {
236
+ content: "\f004";
237
+ }
238
+
239
+ .factory-fontawesome-320 .fa-star:before {
240
+ content: "\f005";
241
+ }
242
+
243
+ .factory-fontawesome-320 .fa-star-o:before {
244
+ content: "\f006";
245
+ }
246
+
247
+ .factory-fontawesome-320 .fa-user:before {
248
+ content: "\f007";
249
+ }
250
+
251
+ .factory-fontawesome-320 .fa-film:before {
252
+ content: "\f008";
253
+ }
254
+
255
+ .factory-fontawesome-320 .fa-th-large:before {
256
+ content: "\f009";
257
+ }
258
+
259
+ .factory-fontawesome-320 .fa-th:before {
260
+ content: "\f00a";
261
+ }
262
+
263
+ .factory-fontawesome-320 .fa-th-list:before {
264
+ content: "\f00b";
265
+ }
266
+
267
+ .factory-fontawesome-320 .fa-check:before {
268
+ content: "\f00c";
269
+ }
270
+
271
+ .factory-fontawesome-320 .fa-remove:before,
272
+ .factory-fontawesome-320 .fa-close:before,
273
+ .factory-fontawesome-320 .fa-times:before {
274
+ content: "\f00d";
275
+ }
276
+
277
+ .factory-fontawesome-320 .fa-search-plus:before {
278
+ content: "\f00e";
279
+ }
280
+
281
+ .factory-fontawesome-320 .fa-search-minus:before {
282
+ content: "\f010";
283
+ }
284
+
285
+ .factory-fontawesome-320 .fa-power-off:before {
286
+ content: "\f011";
287
+ }
288
+
289
+ .factory-fontawesome-320 .fa-signal:before {
290
+ content: "\f012";
291
+ }
292
+
293
+ .factory-fontawesome-320 .fa-gear:before,
294
+ .factory-fontawesome-320 .fa-cog:before {
295
+ content: "\f013";
296
+ }
297
+
298
+ .factory-fontawesome-320 .fa-trash-o:before {
299
+ content: "\f014";
300
+ }
301
+
302
+ .factory-fontawesome-320 .fa-home:before {
303
+ content: "\f015";
304
+ }
305
+
306
+ .factory-fontawesome-320 .fa-file-o:before {
307
+ content: "\f016";
308
+ }
309
+
310
+ .factory-fontawesome-320 .fa-clock-o:before {
311
+ content: "\f017";
312
+ }
313
+
314
+ .factory-fontawesome-320 .fa-road:before {
315
+ content: "\f018";
316
+ }
317
+
318
+ .factory-fontawesome-320 .fa-download:before {
319
+ content: "\f019";
320
+ }
321
+
322
+ .factory-fontawesome-320 .fa-arrow-circle-o-down:before {
323
+ content: "\f01a";
324
+ }
325
+
326
+ .factory-fontawesome-320 .fa-arrow-circle-o-up:before {
327
+ content: "\f01b";
328
+ }
329
+
330
+ .factory-fontawesome-320 .fa-inbox:before {
331
+ content: "\f01c";
332
+ }
333
+
334
+ .factory-fontawesome-320 .fa-play-circle-o:before {
335
+ content: "\f01d";
336
+ }
337
+
338
+ .factory-fontawesome-320 .fa-rotate-right:before,
339
+ .factory-fontawesome-320 .fa-repeat:before {
340
+ content: "\f01e";
341
+ }
342
+
343
+ .factory-fontawesome-320 .fa-refresh:before {
344
+ content: "\f021";
345
+ }
346
+
347
+ .factory-fontawesome-320 .fa-list-alt:before {
348
+ content: "\f022";
349
+ }
350
+
351
+ .factory-fontawesome-320 .fa-lock:before {
352
+ content: "\f023";
353
+ }
354
+
355
+ .factory-fontawesome-320 .fa-flag:before {
356
+ content: "\f024";
357
+ }
358
+
359
+ .factory-fontawesome-320 .fa-headphones:before {
360
+ content: "\f025";
361
+ }
362
+
363
+ .factory-fontawesome-320 .fa-volume-off:before {
364
+ content: "\f026";
365
+ }
366
+
367
+ .factory-fontawesome-320 .fa-volume-down:before {
368
+ content: "\f027";
369
+ }
370
+
371
+ .factory-fontawesome-320 .fa-volume-up:before {
372
+ content: "\f028";
373
+ }
374
+
375
+ .factory-fontawesome-320 .fa-qrcode:before {
376
+ content: "\f029";
377
+ }
378
+
379
+ .factory-fontawesome-320 .fa-barcode:before {
380
+ content: "\f02a";
381
+ }
382
+
383
+ .factory-fontawesome-320 .fa-tag:before {
384
+ content: "\f02b";
385
+ }
386
+
387
+ .factory-fontawesome-320 .fa-tags:before {
388
+ content: "\f02c";
389
+ }
390
+
391
+ .factory-fontawesome-320 .fa-book:before {
392
+ content: "\f02d";
393
+ }
394
+
395
+ .factory-fontawesome-320 .fa-bookmark:before {
396
+ content: "\f02e";
397
+ }
398
+
399
+ .factory-fontawesome-320 .fa-print:before {
400
+ content: "\f02f";
401
+ }
402
+
403
+ .factory-fontawesome-320 .fa-camera:before {
404
+ content: "\f030";
405
+ }
406
+
407
+ .factory-fontawesome-320 .fa-font:before {
408
+ content: "\f031";
409
+ }
410
+
411
+ .factory-fontawesome-320 .fa-bold:before {
412
+ content: "\f032";
413
+ }
414
+
415
+ .factory-fontawesome-320 .fa-italic:before {
416
+ content: "\f033";
417
+ }
418
+
419
+ .factory-fontawesome-320 .fa-text-height:before {
420
+ content: "\f034";
421
+ }
422
+
423
+ .factory-fontawesome-320 .fa-text-width:before {
424
+ content: "\f035";
425
+ }
426
+
427
+ .factory-fontawesome-320 .fa-align-left:before {
428
+ content: "\f036";
429
+ }
430
+
431
+ .factory-fontawesome-320 .fa-align-center:before {
432
+ content: "\f037";
433
+ }
434
+
435
+ .factory-fontawesome-320 .fa-align-right:before {
436
+ content: "\f038";
437
+ }
438
+
439
+ .factory-fontawesome-320 .fa-align-justify:before {
440
+ content: "\f039";
441
+ }
442
+
443
+ .factory-fontawesome-320 .fa-list:before {
444
+ content: "\f03a";
445
+ }
446
+
447
+ .factory-fontawesome-320 .fa-dedent:before,
448
+ .factory-fontawesome-320 .fa-outdent:before {
449
+ content: "\f03b";
450
+ }
451
+
452
+ .factory-fontawesome-320 .fa-indent:before {
453
+ content: "\f03c";
454
+ }
455
+
456
+ .factory-fontawesome-320 .fa-video-camera:before {
457
+ content: "\f03d";
458
+ }
459
+
460
+ .factory-fontawesome-320 .fa-photo:before,
461
+ .factory-fontawesome-320 .fa-image:before,
462
+ .factory-fontawesome-320 .fa-picture-o:before {
463
+ content: "\f03e";
464
+ }
465
+
466
+ .factory-fontawesome-320 .fa-pencil:before {
467
+ content: "\f040";
468
+ }
469
+
470
+ .factory-fontawesome-320 .fa-map-marker:before {
471
+ content: "\f041";
472
+ }
473
+
474
+ .factory-fontawesome-320 .fa-adjust:before {
475
+ content: "\f042";
476
+ }
477
+
478
+ .factory-fontawesome-320 .fa-tint:before {
479
+ content: "\f043";
480
+ }
481
+
482
+ .factory-fontawesome-320 .fa-edit:before,
483
+ .factory-fontawesome-320 .fa-pencil-square-o:before {
484
+ content: "\f044";
485
+ }
486
+
487
+ .factory-fontawesome-320 .fa-share-square-o:before {
488
+ content: "\f045";
489
+ }
490
+
491
+ .factory-fontawesome-320 .fa-check-square-o:before {
492
+ content: "\f046";
493
+ }
494
+
495
+ .factory-fontawesome-320 .fa-arrows:before {
496
+ content: "\f047";
497
+ }
498
+
499
+ .factory-fontawesome-320 .fa-step-backward:before {
500
+ content: "\f048";
501
+ }
502
+
503
+ .factory-fontawesome-320 .fa-fast-backward:before {
504
+ content: "\f049";
505
+ }
506
+
507
+ .factory-fontawesome-320 .fa-backward:before {
508
+ content: "\f04a";
509
+ }
510
+
511
+ .factory-fontawesome-320 .fa-play:before {
512
+ content: "\f04b";
513
+ }
514
+
515
+ .factory-fontawesome-320 .fa-pause:before {
516
+ content: "\f04c";
517
+ }
518
+
519
+ .factory-fontawesome-320 .fa-stop:before {
520
+ content: "\f04d";
521
+ }
522
+
523
+ .factory-fontawesome-320 .fa-forward:before {
524
+ content: "\f04e";
525
+ }
526
+
527
+ .factory-fontawesome-320 .fa-fast-forward:before {
528
+ content: "\f050";
529
+ }
530
+
531
+ .factory-fontawesome-320 .fa-step-forward:before {
532
+ content: "\f051";
533
+ }
534
+
535
+ .factory-fontawesome-320 .fa-eject:before {
536
+ content: "\f052";
537
+ }
538
+
539
+ .factory-fontawesome-320 .fa-chevron-left:before {
540
+ content: "\f053";
541
+ }
542
+
543
+ .factory-fontawesome-320 .fa-chevron-right:before {
544
+ content: "\f054";
545
+ }
546
+
547
+ .factory-fontawesome-320 .fa-plus-circle:before {
548
+ content: "\f055";
549
+ }
550
+
551
+ .factory-fontawesome-320 .fa-minus-circle:before {
552
+ content: "\f056";
553
+ }
554
+
555
+ .factory-fontawesome-320 .fa-times-circle:before {
556
+ content: "\f057";
557
+ }
558
+
559
+ .factory-fontawesome-320 .fa-check-circle:before {
560
+ content: "\f058";
561
+ }
562
+
563
+ .factory-fontawesome-320 .fa-question-circle:before {
564
+ content: "\f059";
565
+ }
566
+
567
+ .factory-fontawesome-320 .fa-info-circle:before {
568
+ content: "\f05a";
569
+ }
570
+
571
+ .factory-fontawesome-320 .fa-crosshairs:before {
572
+ content: "\f05b";
573
+ }
574
+
575
+ .factory-fontawesome-320 .fa-times-circle-o:before {
576
+ content: "\f05c";
577
+ }
578
+
579
+ .factory-fontawesome-320 .fa-check-circle-o:before {
580
+ content: "\f05d";
581
+ }
582
+
583
+ .factory-fontawesome-320 .fa-ban:before {
584
+ content: "\f05e";
585
+ }
586
+
587
+ .factory-fontawesome-320 .fa-arrow-left:before {
588
+ content: "\f060";
589
+ }
590
+
591
+ .factory-fontawesome-320 .fa-arrow-right:before {
592
+ content: "\f061";
593
+ }
594
+
595
+ .factory-fontawesome-320 .fa-arrow-up:before {
596
+ content: "\f062";
597
+ }
598
+
599
+ .factory-fontawesome-320 .fa-arrow-down:before {
600
+ content: "\f063";
601
+ }
602
+
603
+ .factory-fontawesome-320 .fa-mail-forward:before,
604
+ .factory-fontawesome-320 .fa-share:before {
605
+ content: "\f064";
606
+ }
607
+
608
+ .factory-fontawesome-320 .fa-expand:before {
609
+ content: "\f065";
610
+ }
611
+
612
+ .factory-fontawesome-320 .fa-compress:before {
613
+ content: "\f066";
614
+ }
615
+
616
+ .factory-fontawesome-320 .fa-plus:before {
617
+ content: "\f067";
618
+ }
619
+
620
+ .factory-fontawesome-320 .fa-minus:before {
621
+ content: "\f068";
622
+ }
623
+
624
+ .factory-fontawesome-320 .fa-asterisk:before {
625
+ content: "\f069";
626
+ }
627
+
628
+ .factory-fontawesome-320 .fa-exclamation-circle:before {
629
+ content: "\f06a";
630
+ }
631
+
632
+ .factory-fontawesome-320 .fa-gift:before {
633
+ content: "\f06b";
634
+ }
635
+
636
+ .factory-fontawesome-320 .fa-leaf:before {
637
+ content: "\f06c";
638
+ }
639
+
640
+ .factory-fontawesome-320 .fa-fire:before {
641
+ content: "\f06d";
642
+ }
643
+
644
+ .factory-fontawesome-320 .fa-eye:before {
645
+ content: "\f06e";
646
+ }
647
+
648
+ .factory-fontawesome-320 .fa-eye-slash:before {
649
+ content: "\f070";
650
+ }
651
+
652
+ .factory-fontawesome-320 .fa-warning:before,
653
+ .factory-fontawesome-320 .fa-exclamation-triangle:before {
654
+ content: "\f071";
655
+ }
656
+
657
+ .factory-fontawesome-320 .fa-plane:before {
658
+ content: "\f072";
659
+ }
660
+
661
+ .factory-fontawesome-320 .fa-calendar:before {
662
+ content: "\f073";
663
+ }
664
+
665
+ .factory-fontawesome-320 .fa-random:before {
666
+ content: "\f074";
667
+ }
668
+
669
+ .factory-fontawesome-320 .fa-comment:before {
670
+ content: "\f075";
671
+ }
672
+
673
+ .factory-fontawesome-320 .fa-magnet:before {
674
+ content: "\f076";
675
+ }
676
+
677
+ .factory-fontawesome-320 .fa-chevron-up:before {
678
+ content: "\f077";
679
+ }
680
+
681
+ .factory-fontawesome-320 .fa-chevron-down:before {
682
+ content: "\f078";
683
+ }
684
+
685
+ .factory-fontawesome-320 .fa-retweet:before {
686
+ content: "\f079";
687
+ }
688
+
689
+ .factory-fontawesome-320 .fa-shopping-cart:before {
690
+ content: "\f07a";
691
+ }
692
+
693
+ .factory-fontawesome-320 .fa-folder:before {
694
+ content: "\f07b";
695
+ }
696
+
697
+ .factory-fontawesome-320 .fa-folder-open:before {
698
+ content: "\f07c";
699
+ }
700
+
701
+ .factory-fontawesome-320 .fa-arrows-v:before {
702
+ content: "\f07d";
703
+ }
704
+
705
+ .factory-fontawesome-320 .fa-arrows-h:before {
706
+ content: "\f07e";
707
+ }
708
+
709
+ .factory-fontawesome-320 .fa-bar-chart-o:before,
710
+ .factory-fontawesome-320 .fa-bar-chart:before {
711
+ content: "\f080";
712
+ }
713
+
714
+ .factory-fontawesome-320 .fa-twitter-square:before {
715
+ content: "\f081";
716
+ }
717
+
718
+ .factory-fontawesome-320 .fa-facebook-square:before {
719
+ content: "\f082";
720
+ }
721
+
722
+ .factory-fontawesome-320 .fa-camera-retro:before {
723
+ content: "\f083";
724
+ }
725
+
726
+ .factory-fontawesome-320 .fa-key:before {
727
+ content: "\f084";
728
+ }
729
+
730
+ .factory-fontawesome-320 .fa-gears:before,
731
+ .factory-fontawesome-320 .fa-cogs:before {
732
+ content: "\f085";
733
+ }
734
+
735
+ .factory-fontawesome-320 .fa-comments:before {
736
+ content: "\f086";
737
+ }
738
+
739
+ .factory-fontawesome-320 .fa-thumbs-o-up:before {
740
+ content: "\f087";
741
+ }
742
+
743
+ .factory-fontawesome-320 .fa-thumbs-o-down:before {
744
+ content: "\f088";
745
+ }
746
+
747
+ .factory-fontawesome-320 .fa-star-half:before {
748
+ content: "\f089";
749
+ }
750
+
751
+ .factory-fontawesome-320 .fa-heart-o:before {
752
+ content: "\f08a";
753
+ }
754
+
755
+ .factory-fontawesome-320 .fa-sign-out:before {
756
+ content: "\f08b";
757
+ }
758
+
759
+ .factory-fontawesome-320 .fa-linkedin-square:before {
760
+ content: "\f08c";
761
+ }
762
+
763
+ .factory-fontawesome-320 .fa-thumb-tack:before {
764
+ content: "\f08d";
765
+ }
766
+
767
+ .factory-fontawesome-320 .fa-external-link:before {
768
+ content: "\f08e";
769
+ }
770
+
771
+ .factory-fontawesome-320 .fa-sign-in:before {
772
+ content: "\f090";
773
+ }
774
+
775
+ .factory-fontawesome-320 .fa-trophy:before {
776
+ content: "\f091";
777
+ }
778
+
779
+ .factory-fontawesome-320 .fa-github-square:before {
780
+ content: "\f092";
781
+ }
782
+
783
+ .factory-fontawesome-320 .fa-upload:before {
784
+ content: "\f093";
785
+ }
786
+
787
+ .factory-fontawesome-320 .fa-lemon-o:before {
788
+ content: "\f094";
789
+ }
790
+
791
+ .factory-fontawesome-320 .fa-phone:before {
792
+ content: "\f095";
793
+ }
794
+
795
+ .factory-fontawesome-320 .fa-square-o:before {
796
+ content: "\f096";
797
+ }
798
+
799
+ .factory-fontawesome-320 .fa-bookmark-o:before {
800
+ content: "\f097";
801
+ }
802
+
803
+ .factory-fontawesome-320 .fa-phone-square:before {
804
+ content: "\f098";
805
+ }
806
+
807
+ .factory-fontawesome-320 .fa-twitter:before {
808
+ content: "\f099";
809
+ }
810
+
811
+ .factory-fontawesome-320 .fa-facebook-f:before,
812
+ .factory-fontawesome-320 .fa-facebook:before {
813
+ content: "\f09a";
814
+ }
815
+
816
+ .factory-fontawesome-320 .fa-github:before {
817
+ content: "\f09b";
818
+ }
819
+
820
+ .factory-fontawesome-320 .fa-unlock:before {
821
+ content: "\f09c";
822
+ }
823
+
824
+ .factory-fontawesome-320 .fa-credit-card:before {
825
+ content: "\f09d";
826
+ }
827
+
828
+ .factory-fontawesome-320 .fa-feed:before,
829
+ .factory-fontawesome-320 .fa-rss:before {
830
+ content: "\f09e";
831
+ }
832
+
833
+ .factory-fontawesome-320 .fa-hdd-o:before {
834
+ content: "\f0a0";
835
+ }
836
+
837
+ .factory-fontawesome-320 .fa-bullhorn:before {
838
+ content: "\f0a1";
839
+ }
840
+
841
+ .factory-fontawesome-320 .fa-bell:before {
842
+ content: "\f0f3";
843
+ }
844
+
845
+ .factory-fontawesome-320 .fa-certificate:before {
846
+ content: "\f0a3";
847
+ }
848
+
849
+ .factory-fontawesome-320 .fa-hand-o-right:before {
850
+ content: "\f0a4";
851
+ }
852
+
853
+ .factory-fontawesome-320 .fa-hand-o-left:before {
854
+ content: "\f0a5";
855
+ }
856
+
857
+ .factory-fontawesome-320 .fa-hand-o-up:before {
858
+ content: "\f0a6";
859
+ }
860
+
861
+ .factory-fontawesome-320 .fa-hand-o-down:before {
862
+ content: "\f0a7";
863
+ }
864
+
865
+ .factory-fontawesome-320 .fa-arrow-circle-left:before {
866
+ content: "\f0a8";
867
+ }
868
+
869
+ .factory-fontawesome-320 .fa-arrow-circle-right:before {
870
+ content: "\f0a9";
871
+ }
872
+
873
+ .factory-fontawesome-320 .fa-arrow-circle-up:before {
874
+ content: "\f0aa";
875
+ }
876
+
877
+ .factory-fontawesome-320 .fa-arrow-circle-down:before {
878
+ content: "\f0ab";
879
+ }
880
+
881
+ .factory-fontawesome-320 .fa-globe:before {
882
+ content: "\f0ac";
883
+ }
884
+
885
+ .factory-fontawesome-320 .fa-wrench:before {
886
+ content: "\f0ad";
887
+ }
888
+
889
+ .factory-fontawesome-320 .fa-tasks:before {
890
+ content: "\f0ae";
891
+ }
892
+
893
+ .factory-fontawesome-320 .fa-filter:before {
894
+ content: "\f0b0";
895
+ }
896
+
897
+ .factory-fontawesome-320 .fa-briefcase:before {
898
+ content: "\f0b1";
899
+ }
900
+
901
+ .factory-fontawesome-320 .fa-arrows-alt:before {
902
+ content: "\f0b2";
903
+ }
904
+
905
+ .factory-fontawesome-320 .fa-group:before,
906
+ .factory-fontawesome-320 .fa-users:before {
907
+ content: "\f0c0";
908
+ }
909
+
910
+ .factory-fontawesome-320 .fa-chain:before,
911
+ .factory-fontawesome-320 .fa-link:before {
912
+ content: "\f0c1";
913
+ }
914
+
915
+ .factory-fontawesome-320 .fa-cloud:before {
916
+ content: "\f0c2";
917
+ }
918
+
919
+ .factory-fontawesome-320 .fa-flask:before {
920
+ content: "\f0c3";
921
+ }
922
+
923
+ .factory-fontawesome-320 .fa-cut:before,
924
+ .factory-fontawesome-320 .fa-scissors:before {
925
+ content: "\f0c4";
926
+ }
927
+
928
+ .factory-fontawesome-320 .fa-copy:before,
929
+ .factory-fontawesome-320 .fa-files-o:before {
930
+ content: "\f0c5";
931
+ }
932
+
933
+ .factory-fontawesome-320 .fa-paperclip:before {
934
+ content: "\f0c6";
935
+ }
936
+
937
+ .factory-fontawesome-320 .fa-save:before,
938
+ .factory-fontawesome-320 .fa-floppy-o:before {
939
+ content: "\f0c7";
940
+ }
941
+
942
+ .factory-fontawesome-320 .fa-square:before {
943
+ content: "\f0c8";
944
+ }
945
+
946
+ .factory-fontawesome-320 .fa-navicon:before,
947
+ .factory-fontawesome-320 .fa-reorder:before,
948
+ .factory-fontawesome-320 .fa-bars:before {
949
+ content: "\f0c9";
950
+ }
951
+
952
+ .factory-fontawesome-320 .fa-list-ul:before {
953
+ content: "\f0ca";
954
+ }
955
+
956
+ .factory-fontawesome-320 .fa-list-ol:before {
957
+ content: "\f0cb";
958
+ }
959
+
960
+ .factory-fontawesome-320 .fa-strikethrough:before {
961
+ content: "\f0cc";
962
+ }
963
+
964
+ .factory-fontawesome-320 .fa-underline:before {
965
+ content: "\f0cd";
966
+ }
967
+
968
+ .factory-fontawesome-320 .fa-table:before {
969
+ content: "\f0ce";
970
+ }
971
+
972
+ .factory-fontawesome-320 .fa-magic:before {
973
+ content: "\f0d0";
974
+ }
975
+
976
+ .factory-fontawesome-320 .fa-truck:before {
977
+ content: "\f0d1";
978
+ }
979
+
980
+ .factory-fontawesome-320 .fa-pinterest:before {
981
+ content: "\f0d2";
982
+ }
983
+
984
+ .factory-fontawesome-320 .fa-pinterest-square:before {
985
+ content: "\f0d3";
986
+ }
987
+
988
+ .factory-fontawesome-320 .fa-google-plus-square:before {
989
+ content: "\f0d4";
990
+ }
991
+
992
+ .factory-fontawesome-320 .fa-google-plus:before {
993
+ content: "\f0d5";
994
+ }
995
+
996
+ .factory-fontawesome-320 .fa-money:before {
997
+ content: "\f0d6";
998
+ }
999
+
1000
+ .factory-fontawesome-320 .fa-caret-down:before {
1001
+ content: "\f0d7";
1002
+ }
1003
+
1004
+ .factory-fontawesome-320 .fa-caret-up:before {
1005
+ content: "\f0d8";
1006
+ }
1007
+
1008
+ .factory-fontawesome-320 .fa-caret-left:before {
1009
+ content: "\f0d9";
1010
+ }
1011
+
1012
+ .factory-fontawesome-320 .fa-caret-right:before {
1013
+ content: "\f0da";
1014
+ }
1015
+
1016
+ .factory-fontawesome-320 .fa-columns:before {
1017
+ content: "\f0db";
1018
+ }
1019
+
1020
+ .factory-fontawesome-320 .fa-unsorted:before,
1021
+ .factory-fontawesome-320 .fa-sort:before {
1022
+ content: "\f0dc";
1023
+ }
1024
+
1025
+ .factory-fontawesome-320 .fa-sort-down:before,
1026
+ .factory-fontawesome-320 .fa-sort-desc:before {
1027
+ content: "\f0dd";
1028
+ }
1029
+
1030
+ .factory-fontawesome-320 .fa-sort-up:before,
1031
+ .factory-fontawesome-320 .fa-sort-asc:before {
1032
+ content: "\f0de";
1033
+ }
1034
+
1035
+ .factory-fontawesome-320 .fa-envelope:before {
1036
+ content: "\f0e0";
1037
+ }
1038
+
1039
+ .factory-fontawesome-320 .fa-linkedin:before {
1040
+ content: "\f0e1";
1041
+ }
1042
+
1043
+ .factory-fontawesome-320 .fa-rotate-left:before,
1044
+ .factory-fontawesome-320 .fa-undo:before {
1045
+ content: "\f0e2";
1046
+ }
1047
+
1048
+ .factory-fontawesome-320 .fa-legal:before,
1049
+ .factory-fontawesome-320 .fa-gavel:before {
1050
+ content: "\f0e3";
1051
+ }
1052
+
1053
+ .factory-fontawesome-320 .fa-dashboard:before,
1054
+ .factory-fontawesome-320 .fa-tachometer:before {
1055
+ content: "\f0e4";
1056
+ }
1057
+
1058
+ .factory-fontawesome-320 .fa-comment-o:before {
1059
+ content: "\f0e5";
1060
+ }
1061
+
1062
+ .factory-fontawesome-320 .fa-comments-o:before {
1063
+ content: "\f0e6";
1064
+ }
1065
+
1066
+ .factory-fontawesome-320 .fa-flash:before,
1067
+ .factory-fontawesome-320 .fa-bolt:before {
1068
+ content: "\f0e7";
1069
+ }
1070
+
1071
+ .factory-fontawesome-320 .fa-sitemap:before {
1072
+ content: "\f0e8";
1073
+ }
1074
+
1075
+ .factory-fontawesome-320 .fa-umbrella:before {
1076
+ content: "\f0e9";
1077
+ }
1078
+
1079
+ .factory-fontawesome-320 .fa-paste:before,
1080
+ .factory-fontawesome-320 .fa-clipboard:before {
1081
+ content: "\f0ea";
1082
+ }
1083
+
1084
+ .factory-fontawesome-320 .fa-lightbulb-o:before {
1085
+ content: "\f0eb";
1086
+ }
1087
+
1088
+ .factory-fontawesome-320 .fa-exchange:before {
1089
+ content: "\f0ec";
1090
+ }
1091
+
1092
+ .factory-fontawesome-320 .fa-cloud-download:before {
1093
+ content: "\f0ed";
1094
+ }
1095
+
1096
+ .factory-fontawesome-320 .fa-cloud-upload:before {
1097
+ content: "\f0ee";
1098
+ }
1099
+
1100
+ .factory-fontawesome-320 .fa-user-md:before {
1101
+ content: "\f0f0";
1102
+ }
1103
+
1104
+ .factory-fontawesome-320 .fa-stethoscope:before {
1105
+ content: "\f0f1";
1106
+ }
1107
+
1108
+ .factory-fontawesome-320 .fa-suitcase:before {
1109
+ content: "\f0f2";
1110
+ }
1111
+
1112
+ .factory-fontawesome-320 .fa-bell-o:before {
1113
+ content: "\f0a2";
1114
+ }
1115
+
1116
+ .factory-fontawesome-320 .fa-coffee:before {
1117
+ content: "\f0f4";
1118
+ }
1119
+
1120
+ .factory-fontawesome-320 .fa-cutlery:before {
1121
+ content: "\f0f5";
1122
+ }
1123
+
1124
+ .factory-fontawesome-320 .fa-file-text-o:before {
1125
+ content: "\f0f6";
1126
+ }
1127
+
1128
+ .factory-fontawesome-320 .fa-building-o:before {
1129
+ content: "\f0f7";
1130
+ }
1131
+
1132
+ .factory-fontawesome-320 .fa-hospital-o:before {
1133
+ content: "\f0f8";
1134
+ }
1135
+
1136
+ .factory-fontawesome-320 .fa-ambulance:before {
1137
+ content: "\f0f9";
1138
+ }
1139
+
1140
+ .factory-fontawesome-320 .fa-medkit:before {
1141
+ content: "\f0fa";
1142
+ }
1143
+
1144
+ .factory-fontawesome-320 .fa-fighter-jet:before {
1145
+ content: "\f0fb";
1146
+ }
1147
+
1148
+ .factory-fontawesome-320 .fa-beer:before {
1149
+ content: "\f0fc";
1150
+ }
1151
+
1152
+ .factory-fontawesome-320 .fa-h-square:before {
1153
+ content: "\f0fd";
1154
+ }
1155
+
1156
+ .factory-fontawesome-320 .fa-plus-square:before {
1157
+ content: "\f0fe";
1158
+ }
1159
+
1160
+ .factory-fontawesome-320 .fa-angle-double-left:before {
1161
+ content: "\f100";
1162
+ }
1163
+
1164
+ .factory-fontawesome-320 .fa-angle-double-right:before {
1165
+ content: "\f101";
1166
+ }
1167
+
1168
+ .factory-fontawesome-320 .fa-angle-double-up:before {
1169
+ content: "\f102";
1170
+ }
1171
+
1172
+ .factory-fontawesome-320 .fa-angle-double-down:before {
1173
+ content: "\f103";
1174
+ }
1175
+
1176
+ .factory-fontawesome-320 .fa-angle-left:before {
1177
+ content: "\f104";
1178
+ }
1179
+
1180
+ .factory-fontawesome-320 .fa-angle-right:before {
1181
+ content: "\f105";
1182
+ }
1183
+
1184
+ .factory-fontawesome-320 .fa-angle-up:before {
1185
+ content: "\f106";
1186
+ }
1187
+
1188
+ .factory-fontawesome-320 .fa-angle-down:before {
1189
+ content: "\f107";
1190
+ }
1191
+
1192
+ .factory-fontawesome-320 .fa-desktop:before {
1193
+ content: "\f108";
1194
+ }
1195
+
1196
+ .factory-fontawesome-320 .fa-laptop:before {
1197
+ content: "\f109";
1198
+ }
1199
+
1200
+ .factory-fontawesome-320 .fa-tablet:before {
1201
+ content: "\f10a";
1202
+ }
1203
+
1204
+ .factory-fontawesome-320 .fa-mobile-phone:before,
1205
+ .factory-fontawesome-320 .fa-mobile:before {
1206
+ content: "\f10b";
1207
+ }
1208
+
1209
+ .factory-fontawesome-320 .fa-circle-o:before {
1210
+ content: "\f10c";
1211
+ }
1212
+
1213
+ .factory-fontawesome-320 .fa-quote-left:before {
1214
+ content: "\f10d";
1215
+ }
1216
+
1217
+ .factory-fontawesome-320 .fa-quote-right:before {
1218
+ content: "\f10e";
1219
+ }
1220
+
1221
+ .factory-fontawesome-320 .fa-spinner:before {
1222
+ content: "\f110";
1223
+ }
1224
+
1225
+ .factory-fontawesome-320 .fa-circle:before {
1226
+ content: "\f111";
1227
+ }
1228
+
1229
+ .factory-fontawesome-320 .fa-mail-reply:before,
1230
+ .factory-fontawesome-320 .fa-reply:before {
1231
+ content: "\f112";
1232
+ }
1233
+
1234
+ .factory-fontawesome-320 .fa-github-alt:before {
1235
+ content: "\f113";
1236
+ }
1237
+
1238
+ .factory-fontawesome-320 .fa-folder-o:before {
1239
+ content: "\f114";
1240
+ }
1241
+
1242
+ .factory-fontawesome-320 .fa-folder-open-o:before {
1243
+ content: "\f115";
1244
+ }
1245
+
1246
+ .factory-fontawesome-320 .fa-smile-o:before {
1247
+ content: "\f118";
1248
+ }
1249
+
1250
+ .factory-fontawesome-320 .fa-frown-o:before {
1251
+ content: "\f119";
1252
+ }
1253
+
1254
+ .factory-fontawesome-320 .fa-meh-o:before {
1255
+ content: "\f11a";
1256
+ }
1257
+
1258
+ .factory-fontawesome-320 .fa-gamepad:before {
1259
+ content: "\f11b";
1260
+ }
1261
+
1262
+ .factory-fontawesome-320 .fa-keyboard-o:before {
1263
+ content: "\f11c";
1264
+ }
1265
+
1266
+ .factory-fontawesome-320 .fa-flag-o:before {
1267
+ content: "\f11d";
1268
+ }
1269
+
1270
+ .factory-fontawesome-320 .fa-flag-checkered:before {
1271
+ content: "\f11e";
1272
+ }
1273
+
1274
+ .factory-fontawesome-320 .fa-terminal:before {
1275
+ content: "\f120";
1276
+ }
1277
+
1278
+ .factory-fontawesome-320 .fa-code:before {
1279
+ content: "\f121";
1280
+ }
1281
+
1282
+ .factory-fontawesome-320 .fa-mail-reply-all:before,
1283
+ .factory-fontawesome-320 .fa-reply-all:before {
1284
+ content: "\f122";
1285
+ }
1286
+
1287
+ .factory-fontawesome-320 .fa-star-half-empty:before,
1288
+ .factory-fontawesome-320 .fa-star-half-full:before,
1289
+ .factory-fontawesome-320 .fa-star-half-o:before {
1290
+ content: "\f123";
1291
+ }
1292
+
1293
+ .factory-fontawesome-320 .fa-location-arrow:before {
1294
+ content: "\f124";
1295
+ }
1296
+
1297
+ .factory-fontawesome-320 .fa-crop:before {
1298
+ content: "\f125";
1299
+ }
1300
+
1301
+ .factory-fontawesome-320 .fa-code-fork:before {
1302
+ content: "\f126";
1303
+ }
1304
+
1305
+ .factory-fontawesome-320 .fa-unlink:before,
1306
+ .factory-fontawesome-320 .fa-chain-broken:before {
1307
+ content: "\f127";
1308
+ }
1309
+
1310
+ .factory-fontawesome-320 .fa-question:before {
1311
+ content: "\f128";
1312
+ }
1313
+
1314
+ .factory-fontawesome-320 .fa-info:before {
1315
+ content: "\f129";
1316
+ }
1317
+
1318
+ .factory-fontawesome-320 .fa-exclamation:before {
1319
+ content: "\f12a";
1320
+ }
1321
+
1322
+ .factory-fontawesome-320 .fa-superscript:before {
1323
+ content: "\f12b";
1324
+ }
1325
+
1326
+ .factory-fontawesome-320 .fa-subscript:before {
1327
+ content: "\f12c";
1328
+ }
1329
+
1330
+ .factory-fontawesome-320 .fa-eraser:before {
1331
+ content: "\f12d";
1332
+ }
1333
+
1334
+ .factory-fontawesome-320 .fa-puzzle-piece:before {
1335
+ content: "\f12e";
1336
+ }
1337
+
1338
+ .factory-fontawesome-320 .fa-microphone:before {
1339
+ content: "\f130";
1340
+ }
1341
+
1342
+ .factory-fontawesome-320 .fa-microphone-slash:before {
1343
+ content: "\f131";
1344
+ }
1345
+
1346
+ .factory-fontawesome-320 .fa-shield:before {
1347
+ content: "\f132";
1348
+ }
1349
+
1350
+ .factory-fontawesome-320 .fa-calendar-o:before {
1351
+ content: "\f133";
1352
+ }
1353
+
1354
+ .factory-fontawesome-320 .fa-fire-extinguisher:before {
1355
+ content: "\f134";
1356
+ }
1357
+
1358
+ .factory-fontawesome-320 .fa-rocket:before {
1359
+ content: "\f135";
1360
+ }
1361
+
1362
+ .factory-fontawesome-320 .fa-maxcdn:before {
1363
+ content: "\f136";
1364
+ }
1365
+
1366
+ .factory-fontawesome-320 .fa-chevron-circle-left:before {
1367
+ content: "\f137";
1368
+ }
1369
+
1370
+ .factory-fontawesome-320 .fa-chevron-circle-right:before {
1371
+ content: "\f138";
1372
+ }
1373
+
1374
+ .factory-fontawesome-320 .fa-chevron-circle-up:before {
1375
+ content: "\f139";
1376
+ }
1377
+
1378
+ .factory-fontawesome-320 .fa-chevron-circle-down:before {
1379
+ content: "\f13a";
1380
+ }
1381
+
1382
+ .factory-fontawesome-320 .fa-html5:before {
1383
+ content: "\f13b";
1384
+ }
1385
+
1386
+ .factory-fontawesome-320 .fa-css3:before {
1387
+ content: "\f13c";
1388
+ }
1389
+
1390
+ .factory-fontawesome-320 .fa-anchor:before {
1391
+ content: "\f13d";
1392
+ }
1393
+
1394
+ .factory-fontawesome-320 .fa-unlock-alt:before {
1395
+ content: "\f13e";
1396
+ }
1397
+
1398
+ .factory-fontawesome-320 .fa-bullseye:before {
1399
+ content: "\f140";
1400
+ }
1401
+
1402
+ .factory-fontawesome-320 .fa-ellipsis-h:before {
1403
+ content: "\f141";
1404
+ }
1405
+
1406
+ .factory-fontawesome-320 .fa-ellipsis-v:before {
1407
+ content: "\f142";
1408
+ }
1409
+
1410
+ .factory-fontawesome-320 .fa-rss-square:before {
1411
+ content: "\f143";
1412
+ }
1413
+
1414
+ .factory-fontawesome-320 .fa-play-circle:before {
1415
+ content: "\f144";
1416
+ }
1417
+
1418
+ .factory-fontawesome-320 .fa-ticket:before {
1419
+ content: "\f145";
1420
+ }
1421
+
1422
+ .factory-fontawesome-320 .fa-minus-square:before {
1423
+ content: "\f146";
1424
+ }
1425
+
1426
+ .factory-fontawesome-320 .fa-minus-square-o:before {
1427
+ content: "\f147";
1428
+ }
1429
+
1430
+ .factory-fontawesome-320 .fa-level-up:before {
1431
+ content: "\f148";
1432
+ }
1433
+
1434
+ .factory-fontawesome-320 .fa-level-down:before {
1435
+ content: "\f149";
1436
+ }
1437
+
1438
+ .factory-fontawesome-320 .fa-check-square:before {
1439
+ content: "\f14a";
1440
+ }
1441
+
1442
+ .factory-fontawesome-320 .fa-pencil-square:before {
1443
+ content: "\f14b";
1444
+ }
1445
+
1446
+ .factory-fontawesome-320 .fa-external-link-square:before {
1447
+ content: "\f14c";
1448
+ }
1449
+
1450
+ .factory-fontawesome-320 .fa-share-square:before {
1451
+ content: "\f14d";
1452
+ }
1453
+
1454
+ .factory-fontawesome-320 .fa-compass:before {
1455
+ content: "\f14e";
1456
+ }
1457
+
1458
+ .factory-fontawesome-320 .fa-toggle-down:before,
1459
+ .factory-fontawesome-320 .fa-caret-square-o-down:before {
1460
+ content: "\f150";
1461
+ }
1462
+
1463
+ .factory-fontawesome-320 .fa-toggle-up:before,
1464
+ .factory-fontawesome-320 .fa-caret-square-o-up:before {
1465
+ content: "\f151";
1466
+ }
1467
+
1468
+ .factory-fontawesome-320 .fa-toggle-right:before,
1469
+ .factory-fontawesome-320 .fa-caret-square-o-right:before {
1470
+ content: "\f152";
1471
+ }
1472
+
1473
+ .factory-fontawesome-320 .fa-euro:before,
1474
+ .factory-fontawesome-320 .fa-eur:before {
1475
+ content: "\f153";
1476
+ }
1477
+
1478
+ .factory-fontawesome-320 .fa-gbp:before {
1479
+ content: "\f154";
1480
+ }
1481
+
1482
+ .factory-fontawesome-320 .fa-dollar:before,
1483
+ .factory-fontawesome-320 .fa-usd:before {
1484
+ content: "\f155";
1485
+ }
1486
+
1487
+ .factory-fontawesome-320 .fa-rupee:before,
1488
+ .factory-fontawesome-320 .fa-inr:before {
1489
+ content: "\f156";
1490
+ }
1491
+
1492
+ .factory-fontawesome-320 .fa-cny:before,
1493
+ .factory-fontawesome-320 .fa-rmb:before,
1494
+ .factory-fontawesome-320 .fa-yen:before,
1495
+ .factory-fontawesome-320 .fa-jpy:before {
1496
+ content: "\f157";
1497
+ }
1498
+
1499
+ .factory-fontawesome-320 .fa-ruble:before,
1500
+ .factory-fontawesome-320 .fa-rouble:before,
1501
+ .factory-fontawesome-320 .fa-rub:before {
1502
+ content: "\f158";
1503
+ }
1504
+
1505
+ .factory-fontawesome-320 .fa-won:before,
1506
+ .factory-fontawesome-320 .fa-krw:before {
1507
+ content: "\f159";
1508
+ }
1509
+
1510
+ .factory-fontawesome-320 .fa-bitcoin:before,
1511
+ .factory-fontawesome-320 .fa-btc:before {
1512
+ content: "\f15a";
1513
+ }
1514
+
1515
+ .factory-fontawesome-320 .fa-file:before {
1516
+ content: "\f15b";
1517
+ }
1518
+
1519
+ .factory-fontawesome-320 .fa-file-text:before {
1520
+ content: "\f15c";
1521
+ }
1522
+
1523
+ .factory-fontawesome-320 .fa-sort-alpha-asc:before {
1524
+ content: "\f15d";
1525
+ }
1526
+
1527
+ .factory-fontawesome-320 .fa-sort-alpha-desc:before {
1528
+ content: "\f15e";
1529
+ }
1530
+
1531
+ .factory-fontawesome-320 .fa-sort-amount-asc:before {
1532
+ content: "\f160";
1533
+ }
1534
+
1535
+ .factory-fontawesome-320 .fa-sort-amount-desc:before {
1536
+ content: "\f161";
1537
+ }
1538
+
1539
+ .factory-fontawesome-320 .fa-sort-numeric-asc:before {
1540
+ content: "\f162";
1541
+ }
1542
+
1543
+ .factory-fontawesome-320 .fa-sort-numeric-desc:before {
1544
+ content: "\f163";
1545
+ }
1546
+
1547
+ .factory-fontawesome-320 .fa-thumbs-up:before {
1548
+ content: "\f164";
1549
+ }
1550
+
1551
+ .factory-fontawesome-320 .fa-thumbs-down:before {
1552
+ content: "\f165";
1553
+ }
1554
+
1555
+ .factory-fontawesome-320 .fa-youtube-square:before {
1556
+ content: "\f166";
1557
+ }
1558
+
1559
+ .factory-fontawesome-320 .fa-youtube:before {
1560
+ content: "\f167";
1561
+ }
1562
+
1563
+ .factory-fontawesome-320 .fa-xing:before {
1564
+ content: "\f168";
1565
+ }
1566
+
1567
+ .factory-fontawesome-320 .fa-xing-square:before {
1568
+ content: "\f169";
1569
+ }
1570
+
1571
+ .factory-fontawesome-320 .fa-youtube-play:before {
1572
+ content: "\f16a";
1573
+ }
1574
+
1575
+ .factory-fontawesome-320 .fa-dropbox:before {
1576
+ content: "\f16b";
1577
+ }
1578
+
1579
+ .factory-fontawesome-320 .fa-stack-overflow:before {
1580
+ content: "\f16c";
1581
+ }
1582
+
1583
+ .factory-fontawesome-320 .fa-instagram:before {
1584
+ content: "\f16d";
1585
+ }
1586
+
1587
+ .factory-fontawesome-320 .fa-flickr:before {
1588
+ content: "\f16e";
1589
+ }
1590
+
1591
+ .factory-fontawesome-320 .fa-adn:before {
1592
+ content: "\f170";
1593
+ }
1594
+
1595
+ .factory-fontawesome-320 .fa-bitbucket:before {
1596
+ content: "\f171";
1597
+ }
1598
+
1599
+ .factory-fontawesome-320 .fa-bitbucket-square:before {
1600
+ content: "\f172";
1601
+ }
1602
+
1603
+ .factory-fontawesome-320 .fa-tumblr:before {
1604
+ content: "\f173";
1605
+ }
1606
+
1607
+ .factory-fontawesome-320 .fa-tumblr-square:before {
1608
+ content: "\f174";
1609
+ }
1610
+
1611
+ .factory-fontawesome-320 .fa-long-arrow-down:before {
1612
+ content: "\f175";
1613
+ }
1614
+
1615
+ .factory-fontawesome-320 .fa-long-arrow-up:before {
1616
+ content: "\f176";
1617
+ }
1618
+
1619
+ .factory-fontawesome-320 .fa-long-arrow-left:before {
1620
+ content: "\f177";
1621
+ }
1622
+
1623
+ .factory-fontawesome-320 .fa-long-arrow-right:before {
1624
+ content: "\f178";
1625
+ }
1626
+
1627
+ .factory-fontawesome-320 .fa-apple:before {
1628
+ content: "\f179";
1629
+ }
1630
+
1631
+ .factory-fontawesome-320 .fa-windows:before {
1632
+ content: "\f17a";
1633
+ }
1634
+
1635
+ .factory-fontawesome-320 .fa-android:before {
1636
+ content: "\f17b";
1637
+ }
1638
+
1639
+ .factory-fontawesome-320 .fa-linux:before {
1640
+ content: "\f17c";
1641
+ }
1642
+
1643
+ .factory-fontawesome-320 .fa-dribbble:before {
1644
+ content: "\f17d";
1645
+ }
1646
+
1647
+ .factory-fontawesome-320 .fa-skype:before {
1648
+ content: "\f17e";
1649
+ }
1650
+
1651
+ .factory-fontawesome-320 .fa-foursquare:before {
1652
+ content: "\f180";
1653
+ }
1654
+
1655
+ .factory-fontawesome-320 .fa-trello:before {
1656
+ content: "\f181";
1657
+ }
1658
+
1659
+ .factory-fontawesome-320 .fa-female:before {
1660
+ content: "\f182";
1661
+ }
1662
+
1663
+ .factory-fontawesome-320 .fa-male:before {
1664
+ content: "\f183";
1665
+ }
1666
+
1667
+ .factory-fontawesome-320 .fa-gittip:before,
1668
+ .factory-fontawesome-320 .fa-gratipay:before {
1669
+ content: "\f184";
1670
+ }
1671
+
1672
+ .factory-fontawesome-320 .fa-sun-o:before {
1673
+ content: "\f185";
1674
+ }
1675
+
1676
+ .factory-fontawesome-320 .fa-moon-o:before {
1677
+ content: "\f186";
1678
+ }
1679
+
1680
+ .factory-fontawesome-320 .fa-archive:before {
1681
+ content: "\f187";
1682
+ }
1683
+
1684
+ .factory-fontawesome-320 .fa-bug:before {
1685
+ content: "\f188";
1686
+ }
1687
+
1688
+ .factory-fontawesome-320 .fa-vk:before {
1689
+ content: "\f189";
1690
+ }
1691
+
1692
+ .factory-fontawesome-320 .fa-weibo:before {
1693
+ content: "\f18a";
1694
+ }
1695
+
1696
+ .factory-fontawesome-320 .fa-renren:before {
1697
+ content: "\f18b";
1698
+ }
1699
+
1700
+ .factory-fontawesome-320 .fa-pagelines:before {
1701
+ content: "\f18c";
1702
+ }
1703
+
1704
+ .factory-fontawesome-320 .fa-stack-exchange:before {
1705
+ content: "\f18d";
1706
+ }
1707
+
1708
+ .factory-fontawesome-320 .fa-arrow-circle-o-right:before {
1709
+ content: "\f18e";
1710
+ }
1711
+
1712
+ .factory-fontawesome-320 .fa-arrow-circle-o-left:before {
1713
+ content: "\f190";
1714
+ }
1715
+
1716
+ .factory-fontawesome-320 .fa-toggle-left:before,
1717
+ .factory-fontawesome-320 .fa-caret-square-o-left:before {
1718
+ content: "\f191";
1719
+ }
1720
+
1721
+ .factory-fontawesome-320 .fa-dot-circle-o:before {
1722
+ content: "\f192";
1723
+ }
1724
+
1725
+ .factory-fontawesome-320 .fa-wheelchair:before {
1726
+ content: "\f193";
1727
+ }
1728
+
1729
+ .factory-fontawesome-320 .fa-vimeo-square:before {
1730
+ content: "\f194";
1731
+ }
1732
+
1733
+ .factory-fontawesome-320 .fa-turkish-lira:before,
1734
+ .factory-fontawesome-320 .fa-try:before {
1735
+ content: "\f195";
1736
+ }
1737
+
1738
+ .factory-fontawesome-320 .fa-plus-square-o:before {
1739
+ content: "\f196";
1740
+ }
1741
+
1742
+ .factory-fontawesome-320 .fa-space-shuttle:before {
1743
+ content: "\f197";
1744
+ }
1745
+
1746
+ .factory-fontawesome-320 .fa-slack:before {
1747
+ content: "\f198";
1748
+ }
1749
+
1750
+ .factory-fontawesome-320 .fa-envelope-square:before {
1751
+ content: "\f199";
1752
+ }
1753
+
1754
+ .factory-fontawesome-320 .fa-wordpress:before {
1755
+ content: "\f19a";
1756
+ }
1757
+
1758
+ .factory-fontawesome-320 .fa-openid:before {
1759
+ content: "\f19b";
1760
+ }
1761
+
1762
+ .factory-fontawesome-320 .fa-institution:before,
1763
+ .factory-fontawesome-320 .fa-bank:before,
1764
+ .factory-fontawesome-320 .fa-university:before {
1765
+ content: "\f19c";
1766
+ }
1767
+
1768
+ .factory-fontawesome-320 .fa-mortar-board:before,
1769
+ .factory-fontawesome-320 .fa-graduation-cap:before {
1770
+ content: "\f19d";
1771
+ }
1772
+
1773
+ .factory-fontawesome-320 .fa-yahoo:before {
1774
+ content: "\f19e";
1775
+ }
1776
+
1777
+ .factory-fontawesome-320 .fa-google:before {
1778
+ content: "\f1a0";
1779
+ }
1780
+
1781
+ .factory-fontawesome-320 .fa-reddit:before {
1782
+ content: "\f1a1";
1783
+ }
1784
+
1785
+ .factory-fontawesome-320 .fa-reddit-square:before {
1786
+ content: "\f1a2";
1787
+ }
1788
+
1789
+ .factory-fontawesome-320 .fa-stumbleupon-circle:before {
1790
+ content: "\f1a3";
1791
+ }
1792
+
1793
+ .factory-fontawesome-320 .fa-stumbleupon:before {
1794
+ content: "\f1a4";
1795
+ }
1796
+
1797
+ .factory-fontawesome-320 .fa-delicious:before {
1798
+ content: "\f1a5";
1799
+ }
1800
+
1801
+ .factory-fontawesome-320 .fa-digg:before {
1802
+ content: "\f1a6";
1803
+ }
1804
+
1805
+ .factory-fontawesome-320 .fa-pied-piper-pp:before {
1806
+ content: "\f1a7";
1807
+ }
1808
+
1809
+ .factory-fontawesome-320 .fa-pied-piper-alt:before {
1810
+ content: "\f1a8";
1811
+ }
1812
+
1813
+ .factory-fontawesome-320 .fa-drupal:before {
1814
+ content: "\f1a9";
1815
+ }
1816
+
1817
+ .factory-fontawesome-320 .fa-joomla:before {
1818
+ content: "\f1aa";
1819
+ }
1820
+
1821
+ .factory-fontawesome-320 .fa-language:before {
1822
+ content: "\f1ab";
1823
+ }
1824
+
1825
+ .factory-fontawesome-320 .fa-fax:before {
1826
+ content: "\f1ac";
1827
+ }
1828
+
1829
+ .factory-fontawesome-320 .fa-building:before {
1830
+ content: "\f1ad";
1831
+ }
1832
+
1833
+ .factory-fontawesome-320 .fa-child:before {
1834
+ content: "\f1ae";
1835
+ }
1836
+
1837
+ .factory-fontawesome-320 .fa-paw:before {
1838
+ content: "\f1b0";
1839
+ }
1840
+
1841
+ .factory-fontawesome-320 .fa-spoon:before {
1842
+ content: "\f1b1";
1843
+ }
1844
+
1845
+ .factory-fontawesome-320 .fa-cube:before {
1846
+ content: "\f1b2";
1847
+ }
1848
+
1849
+ .factory-fontawesome-320 .fa-cubes:before {
1850
+ content: "\f1b3";
1851
+ }
1852
+
1853
+ .factory-fontawesome-320 .fa-behance:before {
1854
+ content: "\f1b4";
1855
+ }
1856
+
1857
+ .factory-fontawesome-320 .fa-behance-square:before {
1858
+ content: "\f1b5";
1859
+ }
1860
+
1861
+ .factory-fontawesome-320 .fa-steam:before {
1862
+ content: "\f1b6";
1863
+ }
1864
+
1865
+ .factory-fontawesome-320 .fa-steam-square:before {
1866
+ content: "\f1b7";
1867
+ }
1868
+
1869
+ .factory-fontawesome-320 .fa-recycle:before {
1870
+ content: "\f1b8";
1871
+ }
1872
+
1873
+ .factory-fontawesome-320 .fa-automobile:before,
1874
+ .factory-fontawesome-320 .fa-car:before {
1875
+ content: "\f1b9";
1876
+ }
1877
+
1878
+ .factory-fontawesome-320 .fa-cab:before,
1879
+ .factory-fontawesome-320 .fa-taxi:before {
1880
+ content: "\f1ba";
1881
+ }
1882
+
1883
+ .factory-fontawesome-320 .fa-tree:before {
1884
+ content: "\f1bb";
1885
+ }
1886
+
1887
+ .factory-fontawesome-320 .fa-spotify:before {
1888
+ content: "\f1bc";
1889
+ }
1890
+
1891
+ .factory-fontawesome-320 .fa-deviantart:before {
1892
+ content: "\f1bd";
1893
+ }
1894
+
1895
+ .factory-fontawesome-320 .fa-soundcloud:before {
1896
+ content: "\f1be";
1897
+ }
1898
+
1899
+ .factory-fontawesome-320 .fa-database:before {
1900
+ content: "\f1c0";
1901
+ }
1902
+
1903
+ .factory-fontawesome-320 .fa-file-pdf-o:before {
1904
+ content: "\f1c1";
1905
+ }
1906
+
1907
+ .factory-fontawesome-320 .fa-file-word-o:before {
1908
+ content: "\f1c2";
1909
+ }
1910
+
1911
+ .factory-fontawesome-320 .fa-file-excel-o:before {
1912
+ content: "\f1c3";
1913
+ }
1914
+
1915
+ .factory-fontawesome-320 .fa-file-powerpoint-o:before {
1916
+ content: "\f1c4";
1917
+ }
1918
+
1919
+ .factory-fontawesome-320 .fa-file-photo-o:before,
1920
+ .factory-fontawesome-320 .fa-file-picture-o:before,
1921
+ .factory-fontawesome-320 .fa-file-image-o:before {
1922
+ content: "\f1c5";
1923
+ }
1924
+
1925
+ .factory-fontawesome-320 .fa-file-zip-o:before,
1926
+ .factory-fontawesome-320 .fa-file-archive-o:before {
1927
+ content: "\f1c6";
1928
+ }
1929
+
1930
+ .factory-fontawesome-320 .fa-file-sound-o:before,
1931
+ .factory-fontawesome-320 .fa-file-audio-o:before {
1932
+ content: "\f1c7";
1933
+ }
1934
+
1935
+ .factory-fontawesome-320 .fa-file-movie-o:before,
1936
+ .factory-fontawesome-320 .fa-file-video-o:before {
1937
+ content: "\f1c8";
1938
+ }
1939
+
1940
+ .factory-fontawesome-320 .fa-file-code-o:before {
1941
+ content: "\f1c9";
1942
+ }
1943
+
1944
+ .factory-fontawesome-320 .fa-vine:before {
1945
+ content: "\f1ca";
1946
+ }
1947
+
1948
+ .factory-fontawesome-320 .fa-codepen:before {
1949
+ content: "\f1cb";
1950
+ }
1951
+
1952
+ .factory-fontawesome-320 .fa-jsfiddle:before {
1953
+ content: "\f1cc";
1954
+ }
1955
+
1956
+ .factory-fontawesome-320 .fa-life-bouy:before,
1957
+ .factory-fontawesome-320 .fa-life-buoy:before,
1958
+ .factory-fontawesome-320 .fa-life-saver:before,
1959
+ .factory-fontawesome-320 .fa-support:before,
1960
+ .factory-fontawesome-320 .fa-life-ring:before {
1961
+ content: "\f1cd";
1962
+ }
1963
+
1964
+ .factory-fontawesome-320 .fa-circle-o-notch:before {
1965
+ content: "\f1ce";
1966
+ }
1967
+
1968
+ .factory-fontawesome-320 .fa-ra:before,
1969
+ .factory-fontawesome-320 .fa-resistance:before,
1970
+ .factory-fontawesome-320 .fa-rebel:before {
1971
+ content: "\f1d0";
1972
+ }
1973
+
1974
+ .factory-fontawesome-320 .fa-ge:before,
1975
+ .factory-fontawesome-320 .fa-empire:before {
1976
+ content: "\f1d1";
1977
+ }
1978
+
1979
+ .factory-fontawesome-320 .fa-git-square:before {
1980
+ content: "\f1d2";
1981
+ }
1982
+
1983
+ .factory-fontawesome-320 .fa-git:before {
1984
+ content: "\f1d3";
1985
+ }
1986
+
1987
+ .factory-fontawesome-320 .fa-y-combinator-square:before,
1988
+ .factory-fontawesome-320 .fa-yc-square:before,
1989
+ .factory-fontawesome-320 .fa-hacker-news:before {
1990
+ content: "\f1d4";
1991
+ }
1992
+
1993
+ .factory-fontawesome-320 .fa-tencent-weibo:before {
1994
+ content: "\f1d5";
1995
+ }
1996
+
1997
+ .factory-fontawesome-320 .fa-qq:before {
1998
+ content: "\f1d6";
1999
+ }
2000
+
2001
+ .factory-fontawesome-320 .fa-wechat:before,
2002
+ .factory-fontawesome-320 .fa-weixin:before {
2003
+ content: "\f1d7";
2004
+ }
2005
+
2006
+ .factory-fontawesome-320 .fa-send:before,
2007
+ .factory-fontawesome-320 .fa-paper-plane:before {
2008
+ content: "\f1d8";
2009
+ }
2010
+
2011
+ .factory-fontawesome-320 .fa-send-o:before,
2012
+ .factory-fontawesome-320 .fa-paper-plane-o:before {
2013
+ content: "\f1d9";
2014
+ }
2015
+
2016
+ .factory-fontawesome-320 .fa-history:before {
2017
+ content: "\f1da";
2018
+ }
2019
+
2020
+ .factory-fontawesome-320 .fa-circle-thin:before {
2021
+ content: "\f1db";
2022
+ }
2023
+
2024
+ .factory-fontawesome-320 .fa-header:before {
2025
+ content: "\f1dc";
2026
+ }
2027
+
2028
+ .factory-fontawesome-320 .fa-paragraph:before {
2029
+ content: "\f1dd";
2030
+ }
2031
+
2032
+ .factory-fontawesome-320 .fa-sliders:before {
2033
+ content: "\f1de";
2034
+ }
2035
+
2036
+ .factory-fontawesome-320 .fa-share-alt:before {
2037
+ content: "\f1e0";
2038
+ }
2039
+
2040
+ .factory-fontawesome-320 .fa-share-alt-square:before {
2041
+ content: "\f1e1";
2042
+ }
2043
+
2044
+ .factory-fontawesome-320 .fa-bomb:before {
2045
+ content: "\f1e2";
2046
+ }
2047
+
2048
+ .factory-fontawesome-320 .fa-soccer-ball-o:before,
2049
+ .factory-fontawesome-320 .fa-futbol-o:before {
2050
+ content: "\f1e3";
2051
+ }
2052
+
2053
+ .factory-fontawesome-320 .fa-tty:before {
2054
+ content: "\f1e4";
2055
+ }
2056
+
2057
+ .factory-fontawesome-320 .fa-binoculars:before {
2058
+ content: "\f1e5";
2059
+ }
2060
+
2061
+ .factory-fontawesome-320 .fa-plug:before {
2062
+ content: "\f1e6";
2063
+ }
2064
+
2065
+ .factory-fontawesome-320 .fa-slideshare:before {
2066
+ content: "\f1e7";
2067
+ }
2068
+
2069
+ .factory-fontawesome-320 .fa-twitch:before {
2070
+ content: "\f1e8";
2071
+ }
2072
+
2073
+ .factory-fontawesome-320 .fa-yelp:before {
2074
+ content: "\f1e9";
2075
+ }
2076
+
2077
+ .factory-fontawesome-320 .fa-newspaper-o:before {
2078
+ content: "\f1ea";
2079
+ }
2080
+
2081
+ .factory-fontawesome-320 .fa-wifi:before {
2082
+ content: "\f1eb";
2083
+ }
2084
+
2085
+ .factory-fontawesome-320 .fa-calculator:before {
2086
+ content: "\f1ec";
2087
+ }
2088
+
2089
+ .factory-fontawesome-320 .fa-paypal:before {
2090
+ content: "\f1ed";
2091
+ }
2092
+
2093
+ .factory-fontawesome-320 .fa-google-wallet:before {
2094
+ content: "\f1ee";
2095
+ }
2096
+
2097
+ .factory-fontawesome-320 .fa-cc-visa:before {
2098
+ content: "\f1f0";
2099
+ }
2100
+
2101
+ .factory-fontawesome-320 .fa-cc-mastercard:before {
2102
+ content: "\f1f1";
2103
+ }
2104
+
2105
+ .factory-fontawesome-320 .fa-cc-discover:before {
2106
+ content: "\f1f2";
2107
+ }
2108
+
2109
+ .factory-fontawesome-320 .fa-cc-amex:before {
2110
+ content: "\f1f3";
2111
+ }
2112
+
2113
+ .factory-fontawesome-320 .fa-cc-paypal:before {
2114
+ content: "\f1f4";
2115
+ }
2116
+
2117
+ .factory-fontawesome-320 .fa-cc-stripe:before {
2118
+ content: "\f1f5";
2119
+ }
2120
+
2121
+ .factory-fontawesome-320 .fa-bell-slash:before {
2122
+ content: "\f1f6";
2123
+ }
2124
+
2125
+ .factory-fontawesome-320 .fa-bell-slash-o:before {
2126
+ content: "\f1f7";
2127
+ }
2128
+
2129
+ .factory-fontawesome-320 .fa-trash:before {
2130
+ content: "\f1f8";
2131
+ }
2132
+
2133
+ .factory-fontawesome-320 .fa-copyright:before {
2134
+ content: "\f1f9";
2135
+ }
2136
+
2137
+ .factory-fontawesome-320 .fa-at:before {
2138
+ content: "\f1fa";
2139
+ }
2140
+
2141
+ .factory-fontawesome-320 .fa-eyedropper:before {
2142
+ content: "\f1fb";
2143
+ }
2144
+
2145
+ .factory-fontawesome-320 .fa-paint-brush:before {
2146
+ content: "\f1fc";
2147
+ }
2148
+
2149
+ .factory-fontawesome-320 .fa-birthday-cake:before {
2150
+ content: "\f1fd";
2151
+ }
2152
+
2153
+ .factory-fontawesome-320 .fa-area-chart:before {
2154
+ content: "\f1fe";
2155
+ }
2156
+
2157
+ .factory-fontawesome-320 .fa-pie-chart:before {
2158
+ content: "\f200";
2159
+ }
2160
+
2161
+ .factory-fontawesome-320 .fa-line-chart:before {
2162
+ content: "\f201";
2163
+ }
2164
+
2165
+ .factory-fontawesome-320 .fa-lastfm:before {
2166
+ content: "\f202";
2167
+ }
2168
+
2169
+ .factory-fontawesome-320 .fa-lastfm-square:before {
2170
+ content: "\f203";
2171
+ }
2172
+
2173
+ .factory-fontawesome-320 .fa-toggle-off:before {
2174
+ content: "\f204";
2175
+ }
2176
+
2177
+ .factory-fontawesome-320 .fa-toggle-on:before {
2178
+ content: "\f205";
2179
+ }
2180
+
2181
+ .factory-fontawesome-320 .fa-bicycle:before {
2182
+ content: "\f206";
2183
+ }
2184
+
2185
+ .factory-fontawesome-320 .fa-bus:before {
2186
+ content: "\f207";
2187
+ }
2188
+
2189
+ .factory-fontawesome-320 .fa-ioxhost:before {
2190
+ content: "\f208";
2191
+ }
2192
+
2193
+ .factory-fontawesome-320 .fa-angellist:before {
2194
+ content: "\f209";
2195
+ }
2196
+
2197
+ .factory-fontawesome-320 .fa-cc:before {
2198
+ content: "\f20a";
2199
+ }
2200
+
2201
+ .factory-fontawesome-320 .fa-shekel:before,
2202
+ .factory-fontawesome-320 .fa-sheqel:before,
2203
+ .factory-fontawesome-320 .fa-ils:before {
2204
+ content: "\f20b";
2205
+ }
2206
+
2207
+ .factory-fontawesome-320 .fa-meanpath:before {
2208
+ content: "\f20c";
2209
+ }
2210
+
2211
+ .factory-fontawesome-320 .fa-buysellads:before {
2212
+ content: "\f20d";
2213
+ }
2214
+
2215
+ .factory-fontawesome-320 .fa-connectdevelop:before {
2216
+ content: "\f20e";
2217
+ }
2218
+
2219
+ .factory-fontawesome-320 .fa-dashcube:before {
2220
+ content: "\f210";
2221
+ }
2222
+
2223
+ .factory-fontawesome-320 .fa-forumbee:before {
2224
+ content: "\f211";
2225
+ }
2226
+
2227
+ .factory-fontawesome-320 .fa-leanpub:before {
2228
+ content: "\f212";
2229
+ }
2230
+
2231
+ .factory-fontawesome-320 .fa-sellsy:before {
2232
+ content: "\f213";
2233
+ }
2234
+
2235
+ .factory-fontawesome-320 .fa-shirtsinbulk:before {
2236
+ content: "\f214";
2237
+ }
2238
+
2239
+ .factory-fontawesome-320 .fa-simplybuilt:before {
2240
+ content: "\f215";
2241
+ }
2242
+
2243
+ .factory-fontawesome-320 .fa-skyatlas:before {
2244
+ content: "\f216";
2245
+ }
2246
+
2247
+ .factory-fontawesome-320 .fa-cart-plus:before {
2248
+ content: "\f217";
2249
+ }
2250
+
2251
+ .factory-fontawesome-320 .fa-cart-arrow-down:before {
2252
+ content: "\f218";
2253
+ }
2254
+
2255
+ .factory-fontawesome-320 .fa-diamond:before {
2256
+ content: "\f219";
2257
+ }
2258
+
2259
+ .factory-fontawesome-320 .fa-ship:before {
2260
+ content: "\f21a";
2261
+ }
2262
+
2263
+ .factory-fontawesome-320 .fa-user-secret:before {
2264
+ content: "\f21b";
2265
+ }
2266
+
2267
+ .factory-fontawesome-320 .fa-motorcycle:before {
2268
+ content: "\f21c";
2269
+ }
2270
+
2271
+ .factory-fontawesome-320 .fa-street-view:before {
2272
+ content: "\f21d";
2273
+ }
2274
+
2275
+ .factory-fontawesome-320 .fa-heartbeat:before {
2276
+ content: "\f21e";
2277
+ }
2278
+
2279
+ .factory-fontawesome-320 .fa-venus:before {
2280
+ content: "\f221";
2281
+ }
2282
+
2283
+ .factory-fontawesome-320 .fa-mars:before {
2284
+ content: "\f222";
2285
+ }
2286
+
2287
+ .factory-fontawesome-320 .fa-mercury:before {
2288
+ content: "\f223";
2289
+ }
2290
+
2291
+ .factory-fontawesome-320 .fa-intersex:before,
2292
+ .factory-fontawesome-320 .fa-transgender:before {
2293
+ content: "\f224";
2294
+ }
2295
+
2296
+ .factory-fontawesome-320 .fa-transgender-alt:before {
2297
+ content: "\f225";
2298
+ }
2299
+
2300
+ .factory-fontawesome-320 .fa-venus-double:before {
2301
+ content: "\f226";
2302
+ }
2303
+
2304
+ .factory-fontawesome-320 .fa-mars-double:before {
2305
+ content: "\f227";
2306
+ }
2307
+
2308
+ .factory-fontawesome-320 .fa-venus-mars:before {
2309
+ content: "\f228";
2310
+ }
2311
+
2312
+ .factory-fontawesome-320 .fa-mars-stroke:before {
2313
+ content: "\f229";
2314
+ }
2315
+
2316
+ .factory-fontawesome-320 .fa-mars-stroke-v:before {
2317
+ content: "\f22a";
2318
+ }
2319
+
2320
+ .factory-fontawesome-320 .fa-mars-stroke-h:before {
2321
+ content: "\f22b";
2322
+ }
2323
+
2324
+ .factory-fontawesome-320 .fa-neuter:before {
2325
+ content: "\f22c";
2326
+ }
2327
+
2328
+ .factory-fontawesome-320 .fa-genderless:before {
2329
+ content: "\f22d";
2330
+ }
2331
+
2332
+ .factory-fontawesome-320 .fa-facebook-official:before {
2333
+ content: "\f230";
2334
+ }
2335
+
2336
+ .factory-fontawesome-320 .fa-pinterest-p:before {
2337
+ content: "\f231";
2338
+ }
2339
+
2340
+ .factory-fontawesome-320 .fa-whatsapp:before {
2341
+ content: "\f232";
2342
+ }
2343
+
2344
+ .factory-fontawesome-320 .fa-server:before {
2345
+ content: "\f233";
2346
+ }
2347
+
2348
+ .factory-fontawesome-320 .fa-user-plus:before {
2349
+ content: "\f234";
2350
+ }
2351
+
2352
+ .factory-fontawesome-320 .fa-user-times:before {
2353
+ content: "\f235";
2354
+ }
2355
+
2356
+ .factory-fontawesome-320 .fa-hotel:before,
2357
+ .factory-fontawesome-320 .fa-bed:before {
2358
+ content: "\f236";
2359
+ }
2360
+
2361
+ .factory-fontawesome-320 .fa-viacoin:before {
2362
+ content: "\f237";
2363
+ }
2364
+
2365
+ .factory-fontawesome-320 .fa-train:before {
2366
+ content: "\f238";
2367
+ }
2368
+
2369
+ .factory-fontawesome-320 .fa-subway:before {
2370
+ content: "\f239";
2371
+ }
2372
+
2373
+ .factory-fontawesome-320 .fa-medium:before {
2374
+ content: "\f23a";
2375
+ }
2376
+
2377
+ .factory-fontawesome-320 .fa-yc:before,
2378
+ .factory-fontawesome-320 .fa-y-combinator:before {
2379
+ content: "\f23b";
2380
+ }
2381
+
2382
+ .factory-fontawesome-320 .fa-optin-monster:before {
2383
+ content: "\f23c";
2384
+ }
2385
+
2386
+ .factory-fontawesome-320 .fa-opencart:before {
2387
+ content: "\f23d";
2388
+ }
2389
+
2390
+ .factory-fontawesome-320 .fa-expeditedssl:before {
2391
+ content: "\f23e";
2392
+ }
2393
+
2394
+ .factory-fontawesome-320 .fa-battery-4:before,
2395
+ .factory-fontawesome-320 .fa-battery:before,
2396
+ .factory-fontawesome-320 .fa-battery-full:before {
2397
+ content: "\f240";
2398
+ }
2399
+
2400
+ .factory-fontawesome-320 .fa-battery-3:before,
2401
+ .factory-fontawesome-320 .fa-battery-three-quarters:before {
2402
+ content: "\f241";
2403
+ }
2404
+
2405
+ .factory-fontawesome-320 .fa-battery-2:before,
2406
+ .factory-fontawesome-320 .fa-battery-half:before {
2407
+ content: "\f242";
2408
+ }
2409
+
2410
+ .factory-fontawesome-320 .fa-battery-1:before,
2411
+ .factory-fontawesome-320 .fa-battery-quarter:before {
2412
+ content: "\f243";
2413
+ }
2414
+
2415
+ .factory-fontawesome-320 .fa-battery-0:before,
2416
+ .factory-fontawesome-320 .fa-battery-empty:before {
2417
+ content: "\f244";
2418
+ }
2419
+
2420
+ .factory-fontawesome-320 .fa-mouse-pointer:before {
2421
+ content: "\f245";
2422
+ }
2423
+
2424
+ .factory-fontawesome-320 .fa-i-cursor:before {
2425
+ content: "\f246";
2426
+ }
2427
+
2428
+ .factory-fontawesome-320 .fa-object-group:before {
2429
+ content: "\f247";
2430
+ }
2431
+
2432
+ .factory-fontawesome-320 .fa-object-ungroup:before {
2433
+ content: "\f248";
2434
+ }
2435
+
2436
+ .factory-fontawesome-320 .fa-sticky-note:before {
2437
+ content: "\f249";
2438
+ }
2439
+
2440
+ .factory-fontawesome-320 .fa-sticky-note-o:before {
2441
+ content: "\f24a";
2442
+ }
2443
+
2444
+ .factory-fontawesome-320 .fa-cc-jcb:before {
2445
+ content: "\f24b";
2446
+ }
2447
+
2448
+ .factory-fontawesome-320 .fa-cc-diners-club:before {
2449
+ content: "\f24c";
2450
+ }
2451
+
2452
+ .factory-fontawesome-320 .fa-clone:before {
2453
+ content: "\f24d";
2454
+ }
2455
+
2456
+ .factory-fontawesome-320 .fa-balance-scale:before {
2457
+ content: "\f24e";
2458
+ }
2459
+
2460
+ .factory-fontawesome-320 .fa-hourglass-o:before {
2461
+ content: "\f250";
2462
+ }
2463
+
2464
+ .factory-fontawesome-320 .fa-hourglass-1:before,
2465
+ .factory-fontawesome-320 .fa-hourglass-start:before {
2466
+ content: "\f251";
2467
+ }
2468
+
2469
+ .factory-fontawesome-320 .fa-hourglass-2:before,
2470
+ .factory-fontawesome-320 .fa-hourglass-half:before {
2471
+ content: "\f252";
2472
+ }
2473
+
2474
+ .factory-fontawesome-320 .fa-hourglass-3:before,
2475
+ .factory-fontawesome-320 .fa-hourglass-end:before {
2476
+ content: "\f253";
2477
+ }
2478
+
2479
+ .factory-fontawesome-320 .fa-hourglass:before {
2480
+ content: "\f254";
2481
+ }
2482
+
2483
+ .factory-fontawesome-320 .fa-hand-grab-o:before,
2484
+ .factory-fontawesome-320 .fa-hand-rock-o:before {
2485
+ content: "\f255";
2486
+ }
2487
+
2488
+ .factory-fontawesome-320 .fa-hand-stop-o:before,
2489
+ .factory-fontawesome-320 .fa-hand-paper-o:before {
2490
+ content: "\f256";
2491
+ }
2492
+
2493
+ .factory-fontawesome-320 .fa-hand-scissors-o:before {
2494
+ content: "\f257";
2495
+ }
2496
+
2497
+ .factory-fontawesome-320 .fa-hand-lizard-o:before {
2498
+ content: "\f258";
2499
+ }
2500
+
2501
+ .factory-fontawesome-320 .fa-hand-spock-o:before {
2502
+ content: "\f259";
2503
+ }
2504
+
2505
+ .factory-fontawesome-320 .fa-hand-pointer-o:before {
2506
+ content: "\f25a";
2507
+ }
2508
+
2509
+ .factory-fontawesome-320 .fa-hand-peace-o:before {
2510
+ content: "\f25b";
2511
+ }
2512
+
2513
+ .factory-fontawesome-320 .fa-trademark:before {
2514
+ content: "\f25c";
2515
+ }
2516
+
2517
+ .factory-fontawesome-320 .fa-registered:before {
2518
+ content: "\f25d";
2519
+ }
2520
+
2521
+ .factory-fontawesome-320 .fa-creative-commons:before {
2522
+ content: "\f25e";
2523
+ }
2524
+
2525
+ .factory-fontawesome-320 .fa-gg:before {
2526
+ content: "\f260";
2527
+ }
2528
+
2529
+ .factory-fontawesome-320 .fa-gg-circle:before {
2530
+ content: "\f261";
2531
+ }
2532
+
2533
+ .factory-fontawesome-320 .fa-tripadvisor:before {
2534
+ content: "\f262";
2535
+ }
2536
+
2537
+ .factory-fontawesome-320 .fa-odnoklassniki:before {
2538
+ content: "\f263";
2539
+ }
2540
+
2541
+ .factory-fontawesome-320 .fa-odnoklassniki-square:before {
2542
+ content: "\f264";
2543
+ }
2544
+
2545
+ .factory-fontawesome-320 .fa-get-pocket:before {
2546
+ content: "\f265";
2547
+ }
2548
+
2549
+ .factory-fontawesome-320 .fa-wikipedia-w:before {
2550
+ content: "\f266";
2551
+ }
2552
+
2553
+ .factory-fontawesome-320 .fa-safari:before {
2554
+ content: "\f267";
2555
+ }
2556
+
2557
+ .factory-fontawesome-320 .fa-chrome:before {
2558
+ content: "\f268";
2559
+ }
2560
+
2561
+ .factory-fontawesome-320 .fa-firefox:before {
2562
+ content: "\f269";
2563
+ }
2564
+
2565
+ .factory-fontawesome-320 .fa-opera:before {
2566
+ content: "\f26a";
2567
+ }
2568
+
2569
+ .factory-fontawesome-320 .fa-internet-explorer:before {
2570
+ content: "\f26b";
2571
+ }
2572
+
2573
+ .factory-fontawesome-320 .fa-tv:before,
2574
+ .factory-fontawesome-320 .fa-television:before {
2575
+ content: "\f26c";
2576
+ }
2577
+
2578
+ .factory-fontawesome-320 .fa-contao:before {
2579
+ content: "\f26d";
2580
+ }
2581
+
2582
+ .factory-fontawesome-320 .fa-500px:before {
2583
+ content: "\f26e";
2584
+ }
2585
+
2586
+ .factory-fontawesome-320 .fa-amazon:before {
2587
+ content: "\f270";
2588
+ }
2589
+
2590
+ .factory-fontawesome-320 .fa-calendar-plus-o:before {
2591
+ content: "\f271";
2592
+ }
2593
+
2594
+ .factory-fontawesome-320 .fa-calendar-minus-o:before {
2595
+ content: "\f272";
2596
+ }
2597
+
2598
+ .factory-fontawesome-320 .fa-calendar-times-o:before {
2599
+ content: "\f273";
2600
+ }
2601
+
2602
+ .factory-fontawesome-320 .fa-calendar-check-o:before {
2603
+ content: "\f274";
2604
+ }
2605
+
2606
+ .factory-fontawesome-320 .fa-industry:before {
2607
+ content: "\f275";
2608
+ }
2609
+
2610
+ .factory-fontawesome-320 .fa-map-pin:before {
2611
+ content: "\f276";
2612
+ }
2613
+
2614
+ .factory-fontawesome-320 .fa-map-signs:before {
2615
+ content: "\f277";
2616
+ }
2617
+
2618
+ .factory-fontawesome-320 .fa-map-o:before {
2619
+ content: "\f278";
2620
+ }
2621
+
2622
+ .factory-fontawesome-320 .fa-map:before {
2623
+ content: "\f279";
2624
+ }
2625
+
2626
+ .factory-fontawesome-320 .fa-commenting:before {
2627
+ content: "\f27a";
2628
+ }
2629
+
2630
+ .factory-fontawesome-320 .fa-commenting-o:before {
2631
+ content: "\f27b";
2632
+ }
2633
+
2634
+ .factory-fontawesome-320 .fa-houzz:before {
2635
+ content: "\f27c";
2636
+ }
2637
+
2638
+ .factory-fontawesome-320 .fa-vimeo:before {
2639
+ content: "\f27d";
2640
+ }
2641
+
2642
+ .factory-fontawesome-320 .fa-black-tie:before {
2643
+ content: "\f27e";
2644
+ }
2645
+
2646
+ .factory-fontawesome-320 .fa-fonticons:before {
2647
+ content: "\f280";
2648
+ }
2649
+
2650
+ .factory-fontawesome-320 .fa-reddit-alien:before {
2651
+ content: "\f281";
2652
+ }
2653
+
2654
+ .factory-fontawesome-320 .fa-edge:before {
2655
+ content: "\f282";
2656
+ }
2657
+
2658
+ .factory-fontawesome-320 .fa-credit-card-alt:before {
2659
+ content: "\f283";
2660
+ }
2661
+
2662
+ .factory-fontawesome-320 .fa-codiepie:before {
2663
+ content: "\f284";
2664
+ }
2665
+
2666
+ .factory-fontawesome-320 .fa-modx:before {
2667
+ content: "\f285";
2668
+ }
2669
+
2670
+ .factory-fontawesome-320 .fa-fort-awesome:before {
2671
+ content: "\f286";
2672
+ }
2673
+
2674
+ .factory-fontawesome-320 .fa-usb:before {
2675
+ content: "\f287";
2676
+ }
2677
+
2678
+ .factory-fontawesome-320 .fa-product-hunt:before {
2679
+ content: "\f288";
2680
+ }
2681
+
2682
+ .factory-fontawesome-320 .fa-mixcloud:before {
2683
+ content: "\f289";
2684
+ }
2685
+
2686
+ .factory-fontawesome-320 .fa-scribd:before {
2687
+ content: "\f28a";
2688
+ }
2689
+
2690
+ .factory-fontawesome-320 .fa-pause-circle:before {
2691
+ content: "\f28b";
2692
+ }
2693
+
2694
+ .factory-fontawesome-320 .fa-pause-circle-o:before {
2695
+ content: "\f28c";
2696
+ }
2697
+
2698
+ .factory-fontawesome-320 .fa-stop-circle:before {
2699
+ content: "\f28d";
2700
+ }
2701
+
2702
+ .factory-fontawesome-320 .fa-stop-circle-o:before {
2703
+ content: "\f28e";
2704
+ }
2705
+
2706
+ .factory-fontawesome-320 .fa-shopping-bag:before {
2707
+ content: "\f290";
2708
+ }
2709
+
2710
+ .factory-fontawesome-320 .fa-shopping-basket:before {
2711
+ content: "\f291";
2712
+ }
2713
+
2714
+ .factory-fontawesome-320 .fa-hashtag:before {
2715
+ content: "\f292";
2716
+ }
2717
+
2718
+ .factory-fontawesome-320 .fa-bluetooth:before {
2719
+ content: "\f293";
2720
+ }
2721
+
2722
+ .factory-fontawesome-320 .fa-bluetooth-b:before {
2723
+ content: "\f294";
2724
+ }
2725
+
2726
+ .factory-fontawesome-320 .fa-percent:before {
2727
+ content: "\f295";
2728
+ }
2729
+
2730
+ .factory-fontawesome-320 .fa-gitlab:before {
2731
+ content: "\f296";
2732
+ }
2733
+
2734
+ .factory-fontawesome-320 .fa-wpbeginner:before {
2735
+ content: "\f297";
2736
+ }
2737
+
2738
+ .factory-fontawesome-320 .fa-wpforms:before {
2739
+ content: "\f298";
2740
+ }
2741
+
2742
+ .factory-fontawesome-320 .fa-envira:before {
2743
+ content: "\f299";
2744
+ }
2745
+
2746
+ .factory-fontawesome-320 .fa-universal-access:before {
2747
+ content: "\f29a";
2748
+ }
2749
+
2750
+ .factory-fontawesome-320 .fa-wheelchair-alt:before {
2751
+ content: "\f29b";
2752
+ }
2753
+
2754
+ .factory-fontawesome-320 .fa-question-circle-o:before {
2755
+ content: "\f29c";
2756
+ }
2757
+
2758
+ .factory-fontawesome-320 .fa-blind:before {
2759
+ content: "\f29d";
2760
+ }
2761
+
2762
+ .factory-fontawesome-320 .fa-audio-description:before {
2763
+ content: "\f29e";
2764
+ }
2765
+
2766
+ .factory-fontawesome-320 .fa-volume-control-phone:before {
2767
+ content: "\f2a0";
2768
+ }
2769
+
2770
+ .factory-fontawesome-320 .fa-braille:before {
2771
+ content: "\f2a1";
2772
+ }
2773
+
2774
+ .factory-fontawesome-320 .fa-assistive-listening-systems:before {
2775
+ content: "\f2a2";
2776
+ }
2777
+
2778
+ .factory-fontawesome-320 .fa-asl-interpreting:before,
2779
+ .factory-fontawesome-320 .fa-american-sign-language-interpreting:before {
2780
+ content: "\f2a3";
2781
+ }
2782
+
2783
+ .factory-fontawesome-320 .fa-deafness:before,
2784
+ .factory-fontawesome-320 .fa-hard-of-hearing:before,
2785
+ .factory-fontawesome-320 .fa-deaf:before {
2786
+ content: "\f2a4";
2787
+ }
2788
+
2789
+ .factory-fontawesome-320 .fa-glide:before {
2790
+ content: "\f2a5";
2791
+ }
2792
+
2793
+ .factory-fontawesome-320 .fa-glide-g:before {
2794
+ content: "\f2a6";
2795
+ }
2796
+
2797
+ .factory-fontawesome-320 .fa-signing:before,
2798
+ .factory-fontawesome-320 .fa-sign-language:before {
2799
+ content: "\f2a7";
2800
+ }
2801
+
2802
+ .factory-fontawesome-320 .fa-low-vision:before {
2803
+ content: "\f2a8";
2804
+ }
2805
+
2806
+ .factory-fontawesome-320 .fa-viadeo:before {
2807
+ content: "\f2a9";
2808
+ }
2809
+
2810
+ .factory-fontawesome-320 .fa-viadeo-square:before {
2811
+ content: "\f2aa";
2812
+ }
2813
+
2814
+ .factory-fontawesome-320 .fa-snapchat:before {
2815
+ content: "\f2ab";
2816
+ }
2817
+
2818
+ .factory-fontawesome-320 .fa-snapchat-ghost:before {
2819
+ content: "\f2ac";
2820
+ }
2821
+
2822
+ .factory-fontawesome-320 .fa-snapchat-square:before {
2823
+ content: "\f2ad";
2824
+ }
2825
+
2826
+ .factory-fontawesome-320 .fa-pied-piper:before {
2827
+ content: "\f2ae";
2828
+ }
2829
+
2830
+ .factory-fontawesome-320 .fa-first-order:before {
2831
+ content: "\f2b0";
2832
+ }
2833
+
2834
+ .factory-fontawesome-320 .fa-yoast:before {
2835
+ content: "\f2b1";
2836
+ }
2837
+
2838
+ .factory-fontawesome-320 .fa-themeisle:before {
2839
+ content: "\f2b2";
2840
+ }
2841
+
2842
+ .factory-fontawesome-320 .fa-google-plus-circle:before,
2843
+ .factory-fontawesome-320 .fa-google-plus-official:before {
2844
+ content: "\f2b3";
2845
+ }
2846
+
2847
+ .factory-fontawesome-320 .fa-fa:before,
2848
+ .factory-fontawesome-320 .fa-font-awesome:before {
2849
+ content: "\f2b4";
2850
+ }
2851
+
2852
+ .factory-fontawesome-320 .fa-handshake-o:before {
2853
+ content: "\f2b5";
2854
+ }
2855
+
2856
+ .factory-fontawesome-320 .fa-envelope-open:before {
2857
+ content: "\f2b6";
2858
+ }
2859
+
2860
+ .factory-fontawesome-320 .fa-envelope-open-o:before {
2861
+ content: "\f2b7";
2862
+ }
2863
+
2864
+ .factory-fontawesome-320 .fa-linode:before {
2865
+ content: "\f2b8";
2866
+ }
2867
+
2868
+ .factory-fontawesome-320 .fa-address-book:before {
2869
+ content: "\f2b9";
2870
+ }
2871
+
2872
+ .factory-fontawesome-320 .fa-address-book-o:before {
2873
+ content: "\f2ba";
2874
+ }
2875
+
2876
+ .factory-fontawesome-320 .fa-vcard:before,
2877
+ .factory-fontawesome-320 .fa-address-card:before {
2878
+ content: "\f2bb";
2879
+ }
2880
+
2881
+ .factory-fontawesome-320 .fa-vcard-o:before,
2882
+ .factory-fontawesome-320 .fa-address-card-o:before {
2883
+ content: "\f2bc";
2884
+ }
2885
+
2886
+ .factory-fontawesome-320 .fa-user-circle:before {
2887
+ content: "\f2bd";
2888
+ }
2889
+
2890
+ .factory-fontawesome-320 .fa-user-circle-o:before {
2891
+ content: "\f2be";
2892
+ }
2893
+
2894
+ .factory-fontawesome-320 .fa-user-o:before {
2895
+ content: "\f2c0";
2896
+ }
2897
+
2898
+ .factory-fontawesome-320 .fa-id-badge:before {
2899
+ content: "\f2c1";
2900
+ }
2901
+
2902
+ .factory-fontawesome-320 .fa-drivers-license:before,
2903
+ .factory-fontawesome-320 .fa-id-card:before {
2904
+ content: "\f2c2";
2905
+ }
2906
+
2907
+ .factory-fontawesome-320 .fa-drivers-license-o:before,
2908
+ .factory-fontawesome-320 .fa-id-card-o:before {
2909
+ content: "\f2c3";
2910
+ }
2911
+
2912
+ .factory-fontawesome-320 .fa-quora:before {
2913
+ content: "\f2c4";
2914
+ }
2915
+
2916
+ .factory-fontawesome-320 .fa-free-code-camp:before {
2917
+ content: "\f2c5";
2918
+ }
2919
+
2920
+ .factory-fontawesome-320 .fa-telegram:before {
2921
+ content: "\f2c6";
2922
+ }
2923
+
2924
+ .factory-fontawesome-320 .fa-thermometer-4:before,
2925
+ .factory-fontawesome-320 .fa-thermometer:before,
2926
+ .factory-fontawesome-320 .fa-thermometer-full:before {
2927
+ content: "\f2c7";
2928
+ }
2929
+
2930
+ .factory-fontawesome-320 .fa-thermometer-3:before,
2931
+ .factory-fontawesome-320 .fa-thermometer-three-quarters:before {
2932
+ content: "\f2c8";
2933
+ }
2934
+
2935
+ .factory-fontawesome-320 .fa-thermometer-2:before,
2936
+ .factory-fontawesome-320 .fa-thermometer-half:before {
2937
+ content: "\f2c9";
2938
+ }
2939
+
2940
+ .factory-fontawesome-320 .fa-thermometer-1:before,
2941
+ .factory-fontawesome-320 .fa-thermometer-quarter:before {
2942
+ content: "\f2ca";
2943
+ }
2944
+
2945
+ .factory-fontawesome-320 .fa-thermometer-0:before,
2946
+ .factory-fontawesome-320 .fa-thermometer-empty:before {
2947
+ content: "\f2cb";
2948
+ }
2949
+
2950
+ .factory-fontawesome-320 .fa-shower:before {
2951
+ content: "\f2cc";
2952
+ }
2953
+
2954
+ .factory-fontawesome-320 .fa-bathtub:before,
2955
+ .factory-fontawesome-320 .fa-s15:before,
2956
+ .factory-fontawesome-320 .fa-bath:before {
2957
+ content: "\f2cd";
2958
+ }
2959
+
2960
+ .factory-fontawesome-320 .fa-podcast:before {
2961
+ content: "\f2ce";
2962
+ }
2963
+
2964
+ .factory-fontawesome-320 .fa-window-maximize:before {
2965
+ content: "\f2d0";
2966
+ }
2967
+
2968
+ .factory-fontawesome-320 .fa-window-minimize:before {
2969
+ content: "\f2d1";
2970
+ }
2971
+
2972
+ .factory-fontawesome-320 .fa-window-restore:before {
2973
+ content: "\f2d2";
2974
+ }
2975
+
2976
+ .factory-fontawesome-320 .fa-times-rectangle:before,
2977
+ .factory-fontawesome-320 .fa-window-close:before {
2978
+ content: "\f2d3";
2979
+ }
2980
+
2981
+ .factory-fontawesome-320 .fa-times-rectangle-o:before,
2982
+ .factory-fontawesome-320 .fa-window-close-o:before {
2983
+ content: "\f2d4";
2984
+ }
2985
+
2986
+ .factory-fontawesome-320 .fa-bandcamp:before {
2987
+ content: "\f2d5";
2988
+ }
2989
+
2990
+ .factory-fontawesome-320 .fa-grav:before {
2991
+ content: "\f2d6";
2992
+ }
2993
+
2994
+ .factory-fontawesome-320 .fa-etsy:before {
2995
+ content: "\f2d7";
2996
+ }
2997
+
2998
+ .factory-fontawesome-320 .fa-imdb:before {
2999
+ content: "\f2d8";
3000
+ }
3001
+
3002
+ .factory-fontawesome-320 .fa-ravelry:before {
3003
+ content: "\f2d9";
3004
+ }
3005
+
3006
+ .factory-fontawesome-320 .fa-eercast:before {
3007
+ content: "\f2da";
3008
+ }
3009
+
3010
+ .factory-fontawesome-320 .fa-microchip:before {
3011
+ content: "\f2db";
3012
+ }
3013
+
3014
+ .factory-fontawesome-320 .fa-snowflake-o:before {
3015
+ content: "\f2dc";
3016
+ }
3017
+
3018
+ .factory-fontawesome-320 .fa-superpowers:before {
3019
+ content: "\f2dd";
3020
+ }
3021
+
3022
+ .factory-fontawesome-320 .fa-wpexplorer:before {
3023
+ content: "\f2de";
3024
+ }
3025
+
3026
+ .factory-fontawesome-320 .fa-meetup:before {
3027
+ content: "\f2e0";
3028
+ }
3029
+
3030
+ .factory-fontawesome-320 .sr-only {
3031
+ position: absolute;
3032
+ width: 1px;
3033
+ height: 1px;
3034
+ padding: 0;
3035
+ margin: -1px;
3036
+ overflow: hidden;
3037
+ clip: rect(0, 0, 0, 0);
3038
+ border: 0;
3039
+ }
3040
+
3041
+ .factory-fontawesome-320 .sr-only-focusable:active,
3042
+ .factory-fontawesome-320 .sr-only-focusable:focus {
3043
+ position: static;
3044
+ width: auto;
3045
+ height: auto;
3046
+ margin: 0;
3047
+ overflow: visible;
3048
+ clip: auto;
3049
+ }
libs/factory/font-awesome/assets/fonts/FontAwesome.otf ADDED
Binary file
libs/factory/font-awesome/assets/fonts/fontawesome-webfont.eot ADDED
Binary file
libs/factory/font-awesome/assets/fonts/fontawesome-webfont.svg ADDED
@@ -0,0 +1,2671 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg>
4
+ <metadata>
5
+ Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
6
+ By ,,,
7
+ Copyright Dave Gandy 2016. All rights reserved.
8
+ </metadata>
9
+ <defs>
10
+ <font id="FontAwesome" horiz-adv-x="1536" >
11
+ <font-face
12
+ font-family="FontAwesome"
13
+ font-weight="400"
14
+ font-stretch="normal"
15
+ units-per-em="1792"
16
+ panose-1="0 0 0 0 0 0 0 0 0 0"
17
+ ascent="1536"
18
+ descent="-256"
19
+ bbox="-1.02083 -256.962 2304.6 1537.02"
20
+ underline-thickness="0"
21
+ underline-position="0"
22
+ unicode-range="U+0020-F500"
23
+ />
24
+ <missing-glyph horiz-adv-x="896"
25
+ d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
26
+ <glyph glyph-name=".notdef" horiz-adv-x="896"
27
+ d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
28
+ <glyph glyph-name=".null" horiz-adv-x="0"
29
+ />
30
+ <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597"
31
+ />
32
+ <glyph glyph-name="space" unicode=" " horiz-adv-x="448"
33
+ />
34
+ <glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="1792"
35
+ />
36
+ <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="1792"
37
+ />
38
+ <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="1792"
39
+ />
40
+ <glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="1792"
41
+ />
42
+ <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="1792"
43
+ />
44
+ <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="1792"
45
+ />
46
+ <glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="1792"
47
+ />
48
+ <glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="1792"
49
+ />
50
+ <glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="1792"
51
+ />
52
+ <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1792"
53
+ d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
54
+ <glyph glyph-name="music" unicode="&#xf001;"
55
+ d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89
56
+ t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
57
+ <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664"
58
+ d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5
59
+ t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
60
+ <glyph glyph-name="envelope" unicode="&#xf003;" horiz-adv-x="1792"
61
+ d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13
62
+ t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z
63
+ M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
64
+ <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792"
65
+ d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600
66
+ q-18 -18 -44 -18z" />
67
+ <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664"
68
+ d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455
69
+ l502 -73q56 -9 56 -46z" />
70
+ <glyph glyph-name="star_empty" unicode="&#xf006;" horiz-adv-x="1664"
71
+ d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500
72
+ l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
73
+ <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280"
74
+ d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
75
+ t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
76
+ <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920"
77
+ d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128
78
+ q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45
79
+ t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128
80
+ q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19
81
+ t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
82
+ <glyph glyph-name="th_large" unicode="&#xf009;" horiz-adv-x="1664"
83
+ d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38
84
+ h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
85
+ <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792"
86
+ d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320
87
+ q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
88
+ h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192
89
+ q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
90
+ <glyph glyph-name="th_list" unicode="&#xf00b;" horiz-adv-x="1792"
91
+ d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960
92
+ q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
93
+ h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
94
+ <glyph glyph-name="ok" unicode="&#xf00c;" horiz-adv-x="1792"
95
+ d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
96
+ <glyph glyph-name="remove" unicode="&#xf00d;" horiz-adv-x="1408"
97
+ d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68
98
+ t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
99
+ <glyph glyph-name="zoom_in" unicode="&#xf00e;" horiz-adv-x="1664"
100
+ d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224
101
+ q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5
102
+ t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
103
+ <glyph glyph-name="zoom_out" unicode="&#xf010;" horiz-adv-x="1664"
104
+ d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z
105
+ M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z
106
+ " />
107
+ <glyph glyph-name="off" unicode="&#xf011;"
108
+ d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
109
+ t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
110
+ <glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792"
111
+ d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
112
+ v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
113
+ <glyph glyph-name="cog" unicode="&#xf013;"
114
+ d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
115
+ q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
116
+ l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
117
+ q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
118
+ <glyph glyph-name="trash" unicode="&#xf014;" horiz-adv-x="1408"
119
+ d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
120
+ q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
121
+ q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
122
+ <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1664"
123
+ d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
124
+ l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
125
+ <glyph glyph-name="file_alt" unicode="&#xf016;"
126
+ d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
127
+ " />
128
+ <glyph glyph-name="time" unicode="&#xf017;"
129
+ d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
130
+ q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
131
+ <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1920"
132
+ d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
133
+ q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
134
+ <glyph glyph-name="download_alt" unicode="&#xf019;" horiz-adv-x="1664"
135
+ d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
136
+ q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
137
+ <glyph glyph-name="download" unicode="&#xf01a;"
138
+ d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
139
+ t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
140
+ <glyph glyph-name="upload" unicode="&#xf01b;"
141
+ d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
142
+ t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
143
+ <glyph glyph-name="inbox" unicode="&#xf01c;"
144
+ d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
145
+ q25 -61 25 -123z" />
146
+ <glyph glyph-name="play_circle" unicode="&#xf01d;"
147
+ d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
148
+ q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
149
+ <glyph glyph-name="repeat" unicode="&#xf01e;"
150
+ d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
151
+ l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
152
+ <glyph glyph-name="refresh" unicode="&#xf021;"
153
+ d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
154
+ q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
155
+ q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
156
+ <glyph glyph-name="list_alt" unicode="&#xf022;" horiz-adv-x="1792"
157
+ d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
158
+ M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
159
+ M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
160
+ t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
161
+ t47 -113z" />
162
+ <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152"
163
+ d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
164
+ <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1792"
165
+ d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
166
+ t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
167
+ <glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664"
168
+ d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
169
+ t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
170
+ t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
171
+ <glyph glyph-name="volume_off" unicode="&#xf026;" horiz-adv-x="768"
172
+ d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
173
+ <glyph glyph-name="volume_down" unicode="&#xf027;" horiz-adv-x="1152"
174
+ d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
175
+ t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
176
+ <glyph glyph-name="volume_up" unicode="&#xf028;" horiz-adv-x="1664"
177
+ d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
178
+ t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
179
+ t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
180
+ t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
181
+ <glyph glyph-name="qrcode" unicode="&#xf029;" horiz-adv-x="1408"
182
+ d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
183
+ M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
184
+ <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="1792"
185
+ d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
186
+ M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
187
+ <glyph glyph-name="tag" unicode="&#xf02b;"
188
+ d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
189
+ l715 -714q37 -39 37 -91z" />
190
+ <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1920"
191
+ d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
192
+ l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
193
+ <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664"
194
+ d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
195
+ q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
196
+ q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
197
+ t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
198
+ <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280"
199
+ d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
200
+ <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664"
201
+ d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
202
+ v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
203
+ <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920"
204
+ d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
205
+ q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
206
+ <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664"
207
+ d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
208
+ q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
209
+ q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
210
+ <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408"
211
+ d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
212
+ q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
213
+ t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
214
+ t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
215
+ <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024"
216
+ d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
217
+ q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
218
+ <glyph glyph-name="text_height" unicode="&#xf034;" horiz-adv-x="1792"
219
+ d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
220
+ t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
221
+ q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
222
+ q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
223
+ <glyph glyph-name="text_width" unicode="&#xf035;"
224
+ d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
225
+ t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
226
+ q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
227
+ t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
228
+ t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
229
+ <glyph glyph-name="align_left" unicode="&#xf036;" horiz-adv-x="1792"
230
+ d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
231
+ t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
232
+ <glyph glyph-name="align_center" unicode="&#xf037;" horiz-adv-x="1792"
233
+ d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
234
+ h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
235
+ <glyph glyph-name="align_right" unicode="&#xf038;" horiz-adv-x="1792"
236
+ d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
237
+ t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
238
+ <glyph glyph-name="align_justify" unicode="&#xf039;" horiz-adv-x="1792"
239
+ d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
240
+ t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
241
+ <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792"
242
+ d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
243
+ t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
244
+ q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
245
+ t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
246
+ q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
247
+ <glyph glyph-name="indent_left" unicode="&#xf03b;" horiz-adv-x="1792"
248
+ d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
249
+ t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
250
+ q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
251
+ <glyph glyph-name="indent_right" unicode="&#xf03c;" horiz-adv-x="1792"
252
+ d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
253
+ t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
254
+ q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
255
+ <glyph glyph-name="facetime_video" unicode="&#xf03d;" horiz-adv-x="1792"
256
+ d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
257
+ q39 -17 39 -59z" />
258
+ <glyph glyph-name="picture" unicode="&#xf03e;" horiz-adv-x="1920"
259
+ d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
260
+ q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
261
+ <glyph glyph-name="pencil" unicode="&#xf040;"
262
+ d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
263
+ q53 0 91 -38l235 -234q37 -39 37 -91z" />
264
+ <glyph glyph-name="map_marker" unicode="&#xf041;" horiz-adv-x="1024"
265
+ d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
266
+ <glyph glyph-name="adjust" unicode="&#xf042;"
267
+ d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
268
+ <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024"
269
+ d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
270
+ q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
271
+ <glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="1792"
272
+ d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
273
+ q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
274
+ l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
275
+ <glyph glyph-name="share" unicode="&#xf045;" horiz-adv-x="1664"
276
+ d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
277
+ q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
278
+ t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
279
+ <glyph glyph-name="check" unicode="&#xf046;" horiz-adv-x="1664"
280
+ d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
281
+ q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
282
+ q24 -24 24 -57t-24 -57z" />
283
+ <glyph glyph-name="move" unicode="&#xf047;" horiz-adv-x="1792"
284
+ d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
285
+ t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
286
+ <glyph glyph-name="step_backward" unicode="&#xf048;" horiz-adv-x="1024"
287
+ d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
288
+ <glyph glyph-name="fast_backward" unicode="&#xf049;" horiz-adv-x="1792"
289
+ d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
290
+ q19 19 32 13t13 -32v-710q4 10 13 19z" />
291
+ <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1664"
292
+ d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
293
+ <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1408"
294
+ d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
295
+ <glyph glyph-name="pause" unicode="&#xf04c;"
296
+ d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
297
+ <glyph glyph-name="stop" unicode="&#xf04d;"
298
+ d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
299
+ <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1664"
300
+ d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
301
+ <glyph glyph-name="fast_forward" unicode="&#xf050;" horiz-adv-x="1792"
302
+ d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
303
+ q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
304
+ <glyph glyph-name="step_forward" unicode="&#xf051;" horiz-adv-x="1024"
305
+ d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
306
+ <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538"
307
+ d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
308
+ <glyph glyph-name="chevron_left" unicode="&#xf053;" horiz-adv-x="1280"
309
+ d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
310
+ <glyph glyph-name="chevron_right" unicode="&#xf054;" horiz-adv-x="1280"
311
+ d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
312
+ <glyph glyph-name="plus_sign" unicode="&#xf055;"
313
+ d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
314
+ t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
315
+ <glyph glyph-name="minus_sign" unicode="&#xf056;"
316
+ d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
317
+ t103 -385.5z" />
318
+ <glyph glyph-name="remove_sign" unicode="&#xf057;"
319
+ d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
320
+ q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
321
+ <glyph glyph-name="ok_sign" unicode="&#xf058;"
322
+ d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
323
+ t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
324
+ <glyph glyph-name="question_sign" unicode="&#xf059;"
325
+ d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
326
+ q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
327
+ t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
328
+ <glyph glyph-name="info_sign" unicode="&#xf05a;"
329
+ d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
330
+ t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
331
+ <glyph glyph-name="screenshot" unicode="&#xf05b;"
332
+ d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
333
+ q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
334
+ q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
335
+ <glyph glyph-name="remove_circle" unicode="&#xf05c;"
336
+ d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
337
+ l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
338
+ t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
339
+ <glyph glyph-name="ok_circle" unicode="&#xf05d;"
340
+ d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
341
+ t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
342
+ <glyph glyph-name="ban_circle" unicode="&#xf05e;"
343
+ d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
344
+ t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
345
+ <glyph glyph-name="arrow_left" unicode="&#xf060;"
346
+ d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
347
+ t32.5 -90.5z" />
348
+ <glyph glyph-name="arrow_right" unicode="&#xf061;"
349
+ d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
350
+ <glyph glyph-name="arrow_up" unicode="&#xf062;" horiz-adv-x="1664"
351
+ d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
352
+ q37 -39 37 -91z" />
353
+ <glyph glyph-name="arrow_down" unicode="&#xf063;" horiz-adv-x="1664"
354
+ d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
355
+ <glyph glyph-name="share_alt" unicode="&#xf064;" horiz-adv-x="1792"
356
+ d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
357
+ t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
358
+ <glyph glyph-name="resize_full" unicode="&#xf065;"
359
+ d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
360
+ q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
361
+ <glyph glyph-name="resize_small" unicode="&#xf066;"
362
+ d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
363
+ t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
364
+ <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408"
365
+ d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
366
+ <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408"
367
+ d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
368
+ <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1664"
369
+ d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
370
+ q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
371
+ <glyph glyph-name="exclamation_sign" unicode="&#xf06a;"
372
+ d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
373
+ q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
374
+ <glyph glyph-name="gift" unicode="&#xf06b;"
375
+ d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
376
+ q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
377
+ t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
378
+ <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792"
379
+ d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
380
+ q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
381
+ t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
382
+ <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408"
383
+ d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
384
+ q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
385
+ <glyph glyph-name="eye_open" unicode="&#xf06e;" horiz-adv-x="1792"
386
+ d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
387
+ t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
388
+ <glyph glyph-name="eye_close" unicode="&#xf070;" horiz-adv-x="1792"
389
+ d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
390
+ q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
391
+ q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
392
+ " />
393
+ <glyph glyph-name="warning_sign" unicode="&#xf071;" horiz-adv-x="1792"
394
+ d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
395
+ q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
396
+ <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1408"
397
+ d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
398
+ q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
399
+ <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664"
400
+ d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
401
+ M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
402
+ q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
403
+ h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
404
+ <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792"
405
+ d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
406
+ t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
407
+ v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
408
+ t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
409
+ <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792"
410
+ d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
411
+ q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
412
+ <glyph glyph-name="magnet" unicode="&#xf076;"
413
+ d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
414
+ q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
415
+ <glyph glyph-name="chevron_up" unicode="&#xf077;" horiz-adv-x="1792"
416
+ d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
417
+ <glyph glyph-name="chevron_down" unicode="&#xf078;" horiz-adv-x="1792"
418
+ d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
419
+ <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920"
420
+ d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
421
+ zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
422
+ " />
423
+ <glyph glyph-name="shopping_cart" unicode="&#xf07a;" horiz-adv-x="1664"
424
+ d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
425
+ t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
426
+ <glyph glyph-name="folder_close" unicode="&#xf07b;" horiz-adv-x="1664"
427
+ d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
428
+ <glyph glyph-name="folder_open" unicode="&#xf07c;" horiz-adv-x="1920"
429
+ d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
430
+ t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
431
+ <glyph glyph-name="resize_vertical" unicode="&#xf07d;" horiz-adv-x="768"
432
+ d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
433
+ <glyph glyph-name="resize_horizontal" unicode="&#xf07e;" horiz-adv-x="1792"
434
+ d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
435
+ <glyph glyph-name="bar_chart" unicode="&#xf080;" horiz-adv-x="2048"
436
+ d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
437
+ <glyph glyph-name="twitter_sign" unicode="&#xf081;"
438
+ d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
439
+ q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
440
+ t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
441
+ <glyph glyph-name="facebook_sign" unicode="&#xf082;"
442
+ d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
443
+ q0 119 84.5 203.5t203.5 84.5h960z" />
444
+ <glyph glyph-name="camera_retro" unicode="&#xf083;" horiz-adv-x="1792"
445
+ d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
446
+ t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
447
+ q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
448
+ <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1792"
449
+ d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
450
+ l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
451
+ t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
452
+ <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920"
453
+ d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
454
+ t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
455
+ l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
456
+ l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
457
+ q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
458
+ t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
459
+ q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
460
+ q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
461
+ <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792"
462
+ d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
463
+ q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
464
+ q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
465
+ <glyph glyph-name="thumbs_up_alt" unicode="&#xf087;"
466
+ d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
467
+ t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
468
+ q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
469
+ q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
470
+ <glyph glyph-name="thumbs_down_alt" unicode="&#xf088;"
471
+ d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
472
+ t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
473
+ M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
474
+ h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
475
+ <glyph glyph-name="star_half" unicode="&#xf089;" horiz-adv-x="896"
476
+ d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
477
+ <glyph glyph-name="heart_empty" unicode="&#xf08a;" horiz-adv-x="1792"
478
+ d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
479
+ q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5
480
+ q224 0 351 -124t127 -344z" />
481
+ <glyph glyph-name="signout" unicode="&#xf08b;" horiz-adv-x="1664"
482
+ d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
483
+ q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
484
+ <glyph glyph-name="linkedin_sign" unicode="&#xf08c;"
485
+ d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
486
+ q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
487
+ <glyph glyph-name="pushpin" unicode="&#xf08d;" horiz-adv-x="1152"
488
+ d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
489
+ t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
490
+ <glyph glyph-name="external_link" unicode="&#xf08e;" horiz-adv-x="1792"
491
+ d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
492
+ q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
493
+ <glyph glyph-name="signin" unicode="&#xf090;"
494
+ d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
495
+ q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
496
+ <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664"
497
+ d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
498
+ t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
499
+ q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
500
+ <glyph glyph-name="github_sign" unicode="&#xf092;"
501
+ d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
502
+ q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
503
+ t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
504
+ q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
505
+ q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
506
+ <glyph glyph-name="upload_alt" unicode="&#xf093;" horiz-adv-x="1664"
507
+ d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
508
+ t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
509
+ <glyph glyph-name="lemon" unicode="&#xf094;"
510
+ d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
511
+ q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
512
+ q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
513
+ q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
514
+ <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408"
515
+ d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
516
+ q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
517
+ t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
518
+ <glyph glyph-name="check_empty" unicode="&#xf096;" horiz-adv-x="1408"
519
+ d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
520
+ q119 0 203.5 -84.5t84.5 -203.5z" />
521
+ <glyph glyph-name="bookmark_empty" unicode="&#xf097;" horiz-adv-x="1280"
522
+ d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
523
+ q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
524
+ <glyph glyph-name="phone_sign" unicode="&#xf098;"
525
+ d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
526
+ t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
527
+ t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
528
+ " />
529
+ <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1664"
530
+ d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
531
+ q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
532
+ <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="1024"
533
+ d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
534
+ <glyph glyph-name="github" unicode="&#xf09b;"
535
+ d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
536
+ q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
537
+ t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
538
+ q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
539
+ M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
540
+ <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664"
541
+ d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
542
+ t316.5 -131.5t131.5 -316.5z" />
543
+ <glyph glyph-name="credit_card" unicode="&#xf09d;" horiz-adv-x="1920"
544
+ d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
545
+ q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
546
+ <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408"
547
+ d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
548
+ t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
549
+ q187 -186 294 -425.5t120 -501.5z" />
550
+ <glyph glyph-name="hdd" unicode="&#xf0a0;"
551
+ d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
552
+ h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
553
+ l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
554
+ <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792"
555
+ d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
556
+ t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
557
+ <glyph glyph-name="bell" unicode="&#xf0a2;" horiz-adv-x="1792"
558
+ d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
559
+ M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
560
+ t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
561
+ <glyph glyph-name="certificate" unicode="&#xf0a3;"
562
+ d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
563
+ l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
564
+ l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
565
+ <glyph glyph-name="hand_right" unicode="&#xf0a4;" horiz-adv-x="1792"
566
+ d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
567
+ q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
568
+ q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
569
+ t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
570
+ <glyph glyph-name="hand_left" unicode="&#xf0a5;" horiz-adv-x="1792"
571
+ d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
572
+ t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
573
+ M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
574
+ q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
575
+ <glyph glyph-name="hand_up" unicode="&#xf0a6;"
576
+ d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
577
+ q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
578
+ t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
579
+ q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
580
+ <glyph glyph-name="hand_down" unicode="&#xf0a7;"
581
+ d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
582
+ t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
583
+ q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
584
+ q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
585
+ <glyph glyph-name="circle_arrow_left" unicode="&#xf0a8;"
586
+ d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
587
+ q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
588
+ <glyph glyph-name="circle_arrow_right" unicode="&#xf0a9;"
589
+ d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640
590
+ q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
591
+ <glyph glyph-name="circle_arrow_up" unicode="&#xf0aa;"
592
+ d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640
593
+ q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
594
+ <glyph glyph-name="circle_arrow_down" unicode="&#xf0ab;"
595
+ d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640
596
+ q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
597
+ <glyph glyph-name="globe" unicode="&#xf0ac;"
598
+ d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11
599
+ q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5
600
+ q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5
601
+ q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5
602
+ t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3
603
+ q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25
604
+ q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5
605
+ t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5
606
+ t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21
607
+ q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5
608
+ q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3
609
+ q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5
610
+ t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5
611
+ q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7
612
+ q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
613
+ <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1664"
614
+ d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5
615
+ t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
616
+ <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792"
617
+ d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19
618
+ t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
619
+ <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408"
620
+ d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
621
+ <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792"
622
+ d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68
623
+ t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
624
+ <glyph glyph-name="fullscreen" unicode="&#xf0b2;"
625
+ d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144
626
+ l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z
627
+ " />
628
+ <glyph glyph-name="group" unicode="&#xf0c0;" horiz-adv-x="1920"
629
+ d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5
630
+ t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75
631
+ t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5
632
+ t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
633
+ <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1664"
634
+ d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26
635
+ l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15
636
+ t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207
637
+ q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
638
+ <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920"
639
+ d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z
640
+ " />
641
+ <glyph glyph-name="beaker" unicode="&#xf0c3;" horiz-adv-x="1664"
642
+ d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
643
+ <glyph glyph-name="cut" unicode="&#xf0c4;" horiz-adv-x="1792"
644
+ d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84
645
+ q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148
646
+ q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108
647
+ q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6
648
+ q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
649
+ <glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="1792"
650
+ d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299
651
+ h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
652
+ <glyph glyph-name="paper_clip" unicode="&#xf0c6;" horiz-adv-x="1408"
653
+ d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181
654
+ l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235
655
+ z" />
656
+ <glyph glyph-name="save" unicode="&#xf0c7;"
657
+ d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5
658
+ h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
659
+ <glyph glyph-name="sign_blank" unicode="&#xf0c8;"
660
+ d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
661
+ <glyph glyph-name="reorder" unicode="&#xf0c9;"
662
+ d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45
663
+ t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
664
+ <glyph glyph-name="ul" unicode="&#xf0ca;" horiz-adv-x="1792"
665
+ d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
666
+ t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z
667
+ M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
668
+ <glyph glyph-name="ol" unicode="&#xf0cb;" horiz-adv-x="1792"
669
+ d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362
670
+ q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5
671
+ t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216
672
+ q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
673
+ <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792"
674
+ d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6
675
+ l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23
676
+ l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
677
+ <glyph glyph-name="underline" unicode="&#xf0cd;"
678
+ d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47
679
+ q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41
680
+ q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472
681
+ q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
682
+ <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664"
683
+ d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23
684
+ v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192
685
+ q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192
686
+ q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113
687
+ z" />
688
+ <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1664"
689
+ d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276
690
+ l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
691
+ <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1792"
692
+ d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5
693
+ t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38
694
+ t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
695
+ <glyph glyph-name="pinterest" unicode="&#xf0d2;"
696
+ d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134
697
+ q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33
698
+ q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
699
+ <glyph glyph-name="pinterest_sign" unicode="&#xf0d3;"
700
+ d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5
701
+ t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5
702
+ t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
703
+ <glyph glyph-name="google_plus_sign" unicode="&#xf0d4;"
704
+ d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585
705
+ h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
706
+ <glyph glyph-name="google_plus" unicode="&#xf0d5;" horiz-adv-x="2304"
707
+ d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62
708
+ q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
709
+ <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920"
710
+ d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384
711
+ v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
712
+ <glyph glyph-name="caret_down" unicode="&#xf0d7;" horiz-adv-x="1024"
713
+ d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
714
+ <glyph glyph-name="caret_up" unicode="&#xf0d8;" horiz-adv-x="1024"
715
+ d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
716
+ <glyph glyph-name="caret_left" unicode="&#xf0d9;" horiz-adv-x="640"
717
+ d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
718
+ <glyph glyph-name="caret_right" unicode="&#xf0da;" horiz-adv-x="640"
719
+ d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
720
+ <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664"
721
+ d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
722
+ <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024"
723
+ d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
724
+ <glyph glyph-name="sort_down" unicode="&#xf0dd;" horiz-adv-x="1024"
725
+ d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
726
+ <glyph glyph-name="sort_up" unicode="&#xf0de;" horiz-adv-x="1024"
727
+ d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
728
+ <glyph glyph-name="envelope_alt" unicode="&#xf0e0;" horiz-adv-x="1792"
729
+ d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123
730
+ q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
731
+ <glyph glyph-name="linkedin" unicode="&#xf0e1;"
732
+ d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329
733
+ q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
734
+ <glyph glyph-name="undo" unicode="&#xf0e2;"
735
+ d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
736
+ t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
737
+ <glyph glyph-name="legal" unicode="&#xf0e3;" horiz-adv-x="1792"
738
+ d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5
739
+ t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14
740
+ q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28
741
+ q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
742
+ <glyph glyph-name="dashboard" unicode="&#xf0e4;" horiz-adv-x="1792"
743
+ d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5
744
+ t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5
745
+ t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29
746
+ q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
747
+ <glyph glyph-name="comment_alt" unicode="&#xf0e5;" horiz-adv-x="1792"
748
+ d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640
749
+ q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5
750
+ t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
751
+ <glyph glyph-name="comments_alt" unicode="&#xf0e6;" horiz-adv-x="1792"
752
+ d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257
753
+ t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5
754
+ t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129
755
+ q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
756
+ <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896"
757
+ d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
758
+ <glyph glyph-name="sitemap" unicode="&#xf0e8;" horiz-adv-x="1792"
759
+ d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320
760
+ q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68
761
+ z" />
762
+ <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664"
763
+ d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97
764
+ q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69
765
+ q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
766
+ <glyph glyph-name="paste" unicode="&#xf0ea;" horiz-adv-x="1792"
767
+ d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28
768
+ h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
769
+ <glyph glyph-name="light_bulb" unicode="&#xf0eb;" horiz-adv-x="1024"
770
+ d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134
771
+ q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47
772
+ q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5
773
+ t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
774
+ <glyph glyph-name="exchange" unicode="&#xf0ec;" horiz-adv-x="1792"
775
+ d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9
776
+ q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
777
+ <glyph glyph-name="cloud_download" unicode="&#xf0ed;" horiz-adv-x="1920"
778
+ d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
779
+ q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
780
+ <glyph glyph-name="cloud_upload" unicode="&#xf0ee;" horiz-adv-x="1920"
781
+ d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
782
+ q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
783
+ <glyph glyph-name="user_md" unicode="&#xf0f0;" horiz-adv-x="1408"
784
+ d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56
785
+ t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68
786
+ t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
787
+ t271.5 -112.5t112.5 -271.5z" />
788
+ <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408"
789
+ d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48
790
+ t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252
791
+ t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
792
+ <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792"
793
+ d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66
794
+ t66 -158z" />
795
+ <glyph glyph-name="bell_alt" unicode="&#xf0f3;" horiz-adv-x="1792"
796
+ d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5
797
+ t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
798
+ <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1920"
799
+ d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45
800
+ t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
801
+ <glyph glyph-name="food" unicode="&#xf0f5;" horiz-adv-x="1408"
802
+ d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45
803
+ t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
804
+ <glyph glyph-name="file_text_alt" unicode="&#xf0f6;"
805
+ d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
806
+ M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704
807
+ q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
808
+ <glyph glyph-name="building" unicode="&#xf0f7;" horiz-adv-x="1408"
809
+ d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
810
+ M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
811
+ M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
812
+ M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
813
+ M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
814
+ M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
815
+ M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
816
+ M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
817
+ M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
818
+ M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
819
+ <glyph glyph-name="hospital" unicode="&#xf0f8;" horiz-adv-x="1408"
820
+ d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
821
+ M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
822
+ M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
823
+ M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
824
+ M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.