Version Description
- Enhancement - Option to add text before and after price input fields
- Enhancement - Jump to first page when filter changed
- Fix - Now only used values must be shown, not all
- Fix - Products are limited by category we are in
- Fix - Products amount on the first page is correct now
Download this release
Release Info
Developer | dholovnia |
Plugin | Advanced AJAX Product Filters |
Version | 1.1.0.5 |
Comparing to | |
See all releases |
Code changes from version 1.1.0.4 to 1.1.0.5
- README.md +240 -0
- css/admin.css +17 -1
- css/scrollbar/Scrollbar.min.css +1 -1
- css/widget.css +220 -1
- images/paid/custom_css.png +0 -0
- images/paid/styler.png +0 -0
- includes/functions.php +128 -128
- includes/widget.php +90 -38
- js/admin.js +65 -1
- js/widget.min.js +536 -1
- readme.txt +36 -12
- templates/admin-settings.php +31 -11
- templates/admin.php +16 -1
- templates/checkbox.php +27 -21
- templates/radio.php +24 -19
- templates/select.php +20 -20
- templates/slider.php +16 -12
- templates/widget_start.php +1 -1
- woocommerce-filters.php +59 -31
README.md
ADDED
@@ -0,0 +1,240 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== Advanced AJAX Product Filters ===
|
2 |
+
Plugin Name: Advanced AJAX Product Filters
|
3 |
+
Contributors: dholovnia, berocket
|
4 |
+
Donate link: http://berocket.com
|
5 |
+
Tags: filters, product filters, ajax product filters, advanced product filters, woocommerce filters, woocommerce product filters, woocommerce ajax product filters, widget, plugin
|
6 |
+
Requires at least: 3.9
|
7 |
+
Tested up to: 4.2.2
|
8 |
+
Stable tag: 1.1.0.5
|
9 |
+
License: GPLv2 or later
|
10 |
+
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
+
|
12 |
+
WooCommerce AJAX Product Filters - advanced AJAX product filters plugin for WooCommerce.
|
13 |
+
|
14 |
+
== Description ==
|
15 |
+
|
16 |
+
WooCommerce AJAX Product Filters - advanced AJAX product filters plugin for WooCommerce. Add unlimited filters with one widget.
|
17 |
+
|
18 |
+
= Features: =
|
19 |
+
|
20 |
+
* AJAX Filters, Pagination and Sorting!
|
21 |
+
* Unlimited Filters
|
22 |
+
* Multiple User Interface Elements
|
23 |
+
* SEO Friendly Urls ( with HTML5 PushState )
|
24 |
+
* Filter Visibility By Product Category And Globals.
|
25 |
+
* Accessible through shortcode
|
26 |
+
* Filter box height limit with scroll themes
|
27 |
+
* Working great with custom widget area
|
28 |
+
* Drag and Drop Filter Building
|
29 |
+
* And More...
|
30 |
+
|
31 |
+
= Additional Features in Paid Plugin: =
|
32 |
+
|
33 |
+
* Filter by Attribute, Tag and Custom Taxonomy
|
34 |
+
* Customize filters look through admin
|
35 |
+
* Tag Cloud for Tag filter
|
36 |
+
* Slider can use strings as a value
|
37 |
+
* Filters can be collapsed by clicking on title, option to collapse filter on start
|
38 |
+
* Price Filter Custom Min and Max values
|
39 |
+
* Add custom CSS on admin settings page
|
40 |
+
* And More...
|
41 |
+
|
42 |
+
= Paid Plugin Link =
|
43 |
+
http://berocket.com/product/woocommerce-ajax-products-filter
|
44 |
+
|
45 |
+
= Demo =
|
46 |
+
http://woocommerce-product-filter.berocket.com
|
47 |
+
|
48 |
+
|
49 |
+
= How It Works: =
|
50 |
+
*check installation*
|
51 |
+
|
52 |
+
|
53 |
+
= In recent updates: =
|
54 |
+
* Jump to first page when filter changed
|
55 |
+
* Option to add text before and after price input fields
|
56 |
+
* Now only used values must be shown, not all
|
57 |
+
* Products are limited by category we are in
|
58 |
+
* Products amount on the first page fixed
|
59 |
+
* Custom CSS class can be added per widget/filter
|
60 |
+
* Update button - if added products will be updated only when user click Update button
|
61 |
+
* Radio-box can be unselected by clicking it again
|
62 |
+
* Minor fixes
|
63 |
+
|
64 |
+
|
65 |
+
|
66 |
+
= Shortcode: =
|
67 |
+
* In editor `[br_filters attribute=price type=slider title="Price Filter"]`
|
68 |
+
* In PHP `do_shortcode('[br_filters attribute=price type=slider title="Price Filter"]');`
|
69 |
+
|
70 |
+
= Shortcode Options: =
|
71 |
+
* `attribute`(required) - product attribute, eg price or length. Don't forget that woocommerce adding pa_ suffix for created attributes.
|
72 |
+
So if you create new attribute `jump` its name is `pa_jump`
|
73 |
+
* `type`(required) - checkbox, radio, slider or select
|
74 |
+
* `operator` - OR or AND
|
75 |
+
* `title` - whatever you want to see as title. Can be empty
|
76 |
+
* `product_cat` - parent category id
|
77 |
+
* `cat_propagation` - should we propagate this filter to child categories? set 1 to turn this on
|
78 |
+
* `height` - max filter box height. When height is met scroll will be added
|
79 |
+
* `scroll_theme` - pretty clear name, scroll theme. Will be used if height is set and real height of box is more
|
80 |
+
|
81 |
+
|
82 |
+
= Advanced Settings (Widget area): =
|
83 |
+
|
84 |
+
* Product Category - if you want to pin your filter to category of the product this is good place to do it.
|
85 |
+
Eg. You selling Phones and Cases for them. If user choose Category "Phones" filter "Have Wi-Fi" will appear
|
86 |
+
but if user will choose "Cases" it will not be there as Admin set that "Have Wi-Fi" filter will be visible only on
|
87 |
+
"Phones" category.
|
88 |
+
* Filter Box Height - if your filter have too much options it is nice to limit height of the filter to not prolong
|
89 |
+
the page too much. Scroll will appear.
|
90 |
+
* Scroll theme - if "Filter Box Height" is set and box length is more than "Filter Box Height" scroll appear and
|
91 |
+
how it looks depends on the theme you choose.
|
92 |
+
|
93 |
+
|
94 |
+
= Advanced Settings (Plugin Settings): =
|
95 |
+
* Plugin settings can be found in admin area, WooCommerce -> Product Filters
|
96 |
+
* "No Products" message - Text that will be shown if no products found
|
97 |
+
* "No Products" class - Add class and use it to style "No Products" box
|
98 |
+
* Products selector - Selector for tag that is holding products
|
99 |
+
* Sorting control - Take control over WooCommerce's sorting selectbox
|
100 |
+
* SEO friendly urls - url will be changed when filter is selected/changed
|
101 |
+
* Turn all filters off - If you want to hide filters without losing current configuration just turn them off
|
102 |
+
|
103 |
+
|
104 |
+
|
105 |
+
== Installation ==
|
106 |
+
|
107 |
+
= Step 1: =
|
108 |
+
* First you need to add attributes to the products ( WooCommerce plugin should be installed and activated already )
|
109 |
+
* Go to Admin area -> Products -> Attributes and add attributes your products will have, add them all
|
110 |
+
* Click attribute's name where type is select and add values to it. Predefine product options
|
111 |
+
* Go to your products and add attributes to each of them
|
112 |
+
|
113 |
+
= Step 2: =
|
114 |
+
* Install and activate plugin
|
115 |
+
* First of all go to Admin area -> WooCommerce -> Product Filter and check what global options you can manage
|
116 |
+
* After that go to Admin area -> Appearance -> Widgets
|
117 |
+
* In Available Widgets ( left side of the screen ) find AJAX Product Filters
|
118 |
+
* Drag it to Sidebar you choose
|
119 |
+
* Enter title, choose attribute that will be used for filtering products, choose filter type,
|
120 |
+
choose operator( whether product should have all selected values (AND) or one of them (OR) ),
|
121 |
+
* Click save and go to your shop to check how it work.
|
122 |
+
* That's it =)
|
123 |
+
|
124 |
+
|
125 |
+
== Frequently Asked Questions ==
|
126 |
+
|
127 |
+
---
|
128 |
+
|
129 |
+
== Screenshots ==
|
130 |
+
|
131 |
+
---
|
132 |
+
|
133 |
+
== Changelog ==
|
134 |
+
|
135 |
+
= 1.1.0.5 =
|
136 |
+
* Enhancement - Jump to first page when filter changed
|
137 |
+
* Enhancement - Option to add text before and after price input fields
|
138 |
+
* Fix - Now only used values must be shown, not all
|
139 |
+
* Fix - Products are limited by category we are in
|
140 |
+
* Fix - Products amount on the first page is correct now
|
141 |
+
|
142 |
+
= 1.1.0.4 =
|
143 |
+
* Minor fix
|
144 |
+
|
145 |
+
= 1.1.0.3 =
|
146 |
+
* Enhancement - Custom CSS class can be added per widget/filter
|
147 |
+
* Enhancement - Update button. If added products will be updated only when user click Update button
|
148 |
+
* Enhancement - Radio-box can be unselected by clicking it again
|
149 |
+
* Enhancement/Fix - Urls are shortened using better structure to save filters. `~` symbol is not used now
|
150 |
+
* Fix - issue with shortened tags for shortcode.
|
151 |
+
* Fix - on widgets page widget now has subcategories(hierarchy)
|
152 |
+
* Fix - all categories are visible, not only that have products inside(popular)
|
153 |
+
* Minor fixes
|
154 |
+
|
155 |
+
= 1.1.0.2 =
|
156 |
+
* Fix - another js issue that stops plugin from work
|
157 |
+
* Fix - order by name, name_numeric and attribute ID wasn't working
|
158 |
+
|
159 |
+
= 1.1.0.1 =
|
160 |
+
* Fix - js issue that stops plugin from work
|
161 |
+
|
162 |
+
= 1.1.0 =
|
163 |
+
* Enhancement - Show all values - on plugin settings page you can enable option to show all values no matter if they are used or not
|
164 |
+
* Enhancement - Values order - you can set values order when editing attribute. You can set how to order (by id, name or custom). If
|
165 |
+
you set to order `by custom` you can drag&drop values up and down and set your own order.
|
166 |
+
* Small fixes
|
167 |
+
|
168 |
+
= 1.0.4.5 =
|
169 |
+
* Enhancement - values order added. Now order of values can be controlled through attribute options
|
170 |
+
* Enhancement/Fix - Better support for for category pages
|
171 |
+
* Other small fixes
|
172 |
+
|
173 |
+
= 1.0.4.4 =
|
174 |
+
* Enhancement - adding callback for before_update, on_update, after_update events.
|
175 |
+
* Other small fixes
|
176 |
+
|
177 |
+
= 1.0.4.3 =
|
178 |
+
* Enhancement - shortcode added
|
179 |
+
* Critical/Fix - If slider match none its values wasn't counted
|
180 |
+
* Enhancement/Fix - Changing attribute data location from url to action-element, providing more flexibility for template
|
181 |
+
* Enhancement/Templating - Using full products loop instead of including product content template
|
182 |
+
* Fix - Pagination with SEO url issue
|
183 |
+
|
184 |
+
= 1.0.4.2 =
|
185 |
+
* Enhancement/Fix - Better support for SEO urls with permalinks on/off
|
186 |
+
* Fix - Critical bug that was returning incorrect products.
|
187 |
+
|
188 |
+
= 1.0.4.1 =
|
189 |
+
* Enhancement - Adding AJAX for pagination.
|
190 |
+
* Enhancement - Adding PushState for pagination.
|
191 |
+
* Enhancement/Fix - Pagination wasn't updating when filters used.
|
192 |
+
* Enhancement/Fix - Text with amount of results (Eg "Showing all 2 results") wasn't updating after filters applied
|
193 |
+
* Enhancement/Fix - When choosing Slider in admin Operator became hidden
|
194 |
+
* Fix - All sliders except price wasn't working with SEO url
|
195 |
+
* Fix - When changing attribute to/from price in admin all filters jumping
|
196 |
+
* Fix - After filter applied all products was showed. Even those with Draft status.
|
197 |
+
|
198 |
+
= 1.0.4 =
|
199 |
+
* Enhancement - SEO friendly urls with possibility for users to share/bookmark their search. Will be shortened in future
|
200 |
+
* Enhancement - Option added to turn SEO friendly urls on/off. Off by default as this is first version of this feature
|
201 |
+
* Enhancement - Option to turn filters on/off globally
|
202 |
+
* Enhancement - Option to take control over (default) sorting function, make it AJAXy and work with filters
|
203 |
+
* Fix - Sorting remain correct after using filters. Sorting wasn't counted before
|
204 |
+
* Fix - If there are 2 or more sliders they are not working correctly.
|
205 |
+
* Fix - Values in slider was converted to float even when value ia not a price.
|
206 |
+
* Fix - If there are 2 or more values for attribute it was not validated when used in slider.
|
207 |
+
|
208 |
+
= 1.0.3.6 =
|
209 |
+
* Fix - Removed actions that provide warning messages
|
210 |
+
* Enhancement - Actions and filters inside plugin
|
211 |
+
|
212 |
+
= 1.0.3.3 =
|
213 |
+
* Enhancement/Fix - Showing products and options now depending on woocommerce_hide_out_of_stock_items option
|
214 |
+
* Enhancement/Fix - If not enough data available( quantity of options < 2 ) filters will not be shown.
|
215 |
+
* Fix - If in category, only products/options from this category will be shown
|
216 |
+
|
217 |
+
= 1.0.3.2 =
|
218 |
+
* Fix - wrong path was committed in previous version that killed plugin
|
219 |
+
|
220 |
+
= 1.0.3 =
|
221 |
+
* Enhancement - CSS and JavaScript files minimized
|
222 |
+
* Enhancement - Settings page added
|
223 |
+
* Enhancement - "No Products" message and it's class can be changed through admin
|
224 |
+
* Enhancement - Option added that can enable control over sorting( if visible )
|
225 |
+
* Enhancement - User can select several categories instead of one. Now you don't need to create several same filters
|
226 |
+
for different categories.
|
227 |
+
* Enhancement - Added option "include subcats?". if selected filter will be shown in selected categories and their
|
228 |
+
subcategories
|
229 |
+
* Fix - Adding support to themes that require product div to have "product" class
|
230 |
+
* Fix - Slider in categories wasn't initialized
|
231 |
+
* Fix - Subcategories wasn't working. Only Main categories were showing filters
|
232 |
+
* Templating - return woocommerce/theme default structure for product
|
233 |
+
* Templating - html parts moved to separate files in templates folder. You can overwrite them by creating folder
|
234 |
+
"woocommerce-filters" and file with same name as in plugin templates folder.
|
235 |
+
|
236 |
+
= 1.0.2 =
|
237 |
+
* Fix - better support for older PHP versions
|
238 |
+
|
239 |
+
= 1.0.1 =
|
240 |
+
* First public version
|
css/admin.css
CHANGED
@@ -1 +1,17 @@
|
|
1 |
-
.berocket_aapf_advanced_settings{display:none}.berocket_aapf_widget_admin_height_input{width:43px}.berocket_aapf_advanced_settings_categories_list{max-height:200px;overflow:auto}.berocket_aapf_advanced_settings_subcategory{float:right;position:relative;top:3px
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.berocket_aapf_advanced_settings{display: none;}.berocket_aapf_widget_admin_height_input{width: 43px;}.berocket_aapf_advanced_settings_categories_list{max-height: 200px;overflow:auto;}.berocket_aapf_advanced_settings_subcategory{float: right;position: relative;top: 3px;}
|
2 |
+
|
3 |
+
.colorpicker_field{width: 30px; height: 30px; margin: 5px auto; border: 1px solid black;}
|
4 |
+
|
5 |
+
.admin-column-color{width: 6%; text-align: center!important;}
|
6 |
+
.admin-column-font-family{width: 15%;}
|
7 |
+
.admin-column-font-family select{max-width: 100%;}
|
8 |
+
.admin-column-font-weight{width: 12%;}
|
9 |
+
.admin-column-font-weight select{max-width: 100%;}
|
10 |
+
.admin-column-font-size{width: 10%; text-align: center!important;}
|
11 |
+
.admin-column-font-size input{max-width: 100%; text-align: center!important;}
|
12 |
+
.admin-column-dimensions{width: 10%;}
|
13 |
+
.admin-column-dimensions select{max-width: 100%;}
|
14 |
+
.admin-column-theme{width: 14%;}
|
15 |
+
.admin-column-theme select{max-width: 100%;}
|
16 |
+
.tab-item{display: none;}
|
17 |
+
.tab-item.current{display: block;}
|
css/scrollbar/Scrollbar.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.mCustomScrollbar{-ms-touch-action:none;touch-action:none}.mCustomScrollbar.mCS_no_scrollbar{-ms-touch-action:auto;touch-action:auto}.mCustomScrollBox{position:relative;overflow:hidden;height:100%;max-width:100%;outline:0;direction:ltr}.mCSB_container{overflow:hidden;width:auto;height:auto}.mCSB_inside>.mCSB_container{margin-right:30px}.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container{margin-right:0;margin-left:30px}.mCS-dir-rtl>.mCSB_inside>.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-left:0}.mCSB_scrollTools{position:absolute;width:16px;height:auto;left:auto;top:0;right:0;bottom:0}.mCSB_outside+.mCSB_scrollTools{right:-26px}.mCS-dir-rtl>.mCSB_inside>.mCSB_scrollTools,.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{right:auto;left:0}.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{left:-26px}.mCSB_scrollTools .mCSB_draggerContainer{position:absolute;top:0;left:0;bottom:0;right:0;height:auto}.mCSB_scrollTools a+.mCSB_draggerContainer{margin:20px 0}.mCSB_scrollTools .mCSB_draggerRail{width:2px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCSB_scrollTools .mCSB_dragger{cursor:pointer;width:100%;height:30px;z-index:1}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:relative;width:4px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px;text-align:center}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:12px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:8px}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonUp{display:block;position:absolute;height:20px;width:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools .mCSB_buttonDown{bottom:0}.mCSB_horizontal.mCSB_inside>.mCSB_container{margin-right:0;margin-bottom:30px}.mCSB_horizontal.mCSB_outside>.mCSB_container{min-height:100%}.mCSB_horizontal>.mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal{width:auto;height:16px;top:auto;right:0;bottom:0;left:0}.mCustomScrollBox+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:-26px}.mCSB_scrollTools.mCSB_scrollTools_horizontal a+.mCSB_draggerContainer{margin:0 20px}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:2px;margin:7px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{width:30px;height:100%;left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:4px;margin:6px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:12px;margin:2px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:8px;margin:4px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{display:block;position:absolute;width:20px;height:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{right:0}.mCSB_container_wrapper{position:absolute;height:auto;width:auto;overflow:hidden;top:0;left:0;right:0;bottom:0;margin-right:30px;margin-bottom:30px}.mCSB_container_wrapper>.mCSB_container{padding-right:30px;padding-bottom:30px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:20px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:20px}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden+.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:20px}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container_wrapper{margin-right:0;margin-left:30px}.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden>.mCSB_container{padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden>.mCSB_container{padding-bottom:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0;margin-left:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools,.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar{-webkit-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out}.mCSB_scrollTools{opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:0;filter:"alpha(opacity=0)";-ms-filter:"alpha(opacity=0)"}.mCS-autoHide:hover>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide:hover>.mCustomScrollBox~.mCSB_scrollTools,.mCustomScrollBox:hover>.mCSB_scrollTools,.mCustomScrollBox:hover~.mCSB_scrollTools,.mCustomScrollbar>.mCustomScrollBox>.mCSB_scrollTools.mCSB_scrollTools_onDrag,.mCustomScrollbar>.mCustomScrollBox~.mCSB_scrollTools.mCSB_scrollTools_onDrag{opacity:1;filter:"alpha(opacity=100)";-ms-filter:"alpha(opacity=100)"}.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.4);filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75);filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85);filter:"alpha(opacity=85)";-ms-filter:"alpha(opacity=85)"}.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9);filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp{background-image:url(mCSB_buttons.png);background-repeat:no-repeat;opacity:.4;filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_buttonUp{background-position:0 0}.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -20px}.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -40px}.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -56px}.mCSB_scrollTools .mCSB_buttonDown:hover,.mCSB_scrollTools .mCSB_buttonLeft:hover,.mCSB_scrollTools .mCSB_buttonRight:hover,.mCSB_scrollTools .mCSB_buttonUp:hover{opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_buttonDown:active,.mCSB_scrollTools .mCSB_buttonLeft:active,.mCSB_scrollTools .mCSB_buttonRight:active,.mCSB_scrollTools .mCSB_buttonUp:active{opacity:.9;filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCS-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:rgba(0,0,0,.85)}.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:rgba(0,0,0,.9)}.mCS-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:4px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px auto}.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px 0}.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -20px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -40px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px 0}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -20px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -40px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px 0}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:6px;margin:5px auto}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px 0}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -20px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -40px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px 0}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -20px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -40px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -56px}.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:2px}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:2px;margin:7px auto}.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,.mCS-rounded.mCSB_scrollTools .mCSB_dragger{height:14px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:14px;margin:0 1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger{width:14px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:14px;margin:1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:-1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:4px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:16px;width:16px;margin:0 -1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:4px;margin:6px 0}.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{background-position:0 -72px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -92px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -112px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -128px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px -72px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -92px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -112px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail{width:4px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{background-color:transparent;background-position:center}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==);background-repeat:repeat-y;opacity:.3;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{height:4px;margin:6px 0;background-repeat:repeat-x}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px -72px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -92px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -112px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=)}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px -72px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -92px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -112px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-y;background-image:-moz-linear-gradient(left,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-webkit-gradient(linear,left top,right top,color-stop(0%,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(left,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-o-linear-gradient(left,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-ms-linear-gradient(left,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:linear-gradient(to right,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-x;background-image:-moz-linear-gradient(top,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(top,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-o-linear-gradient(top,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-ms-linear-gradient(top,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:linear-gradient(to bottom,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%)}.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger{height:70px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger{width:70px}.mCS-3d-dark.mCSB_scrollTools,.mCS-3d.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{width:8px;background-color:#000;background-color:rgba(0,0,0,.2);box-shadow:inset 1px 0 1px rgba(0,0,0,.5),inset -1px 0 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:8px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:8px;margin:4px 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.5),inset 0 -1px 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:8px;margin:4px auto}.mCS-3d.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);box-shadow:inset 1px 0 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer,.mCS-3d-thick.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mCSB_inside+.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCSB_inside+.mCS-3d-thick.mCSB_scrollTools_vertical{right:1px}.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCS-3d-thick.mCSB_scrollTools_vertical{box-shadow:inset 1px 0 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal,.mCS-3d-thick.mCSB_scrollTools_horizontal{bottom:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,.4);width:12px;margin:2px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:12px;width:auto}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{background-color:#000;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-thick-dark.mCSB_scrollTools{box-shadow:inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,.4),inset -1px 0 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4),inset 0 -1px 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#777}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{background-color:#fff;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{right:0;margin:12px 0}.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:0;margin:0 12px}.mCS-dir-rtl>.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCS-dir-rtl>.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{left:0;right:auto}.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger{height:50px}.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger{width:50px}.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail{width:6px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px}.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:6px;margin:5px 0}.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:12px}.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:12px;margin:2px 0}.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools .mCSB_draggerRail{width:12px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;margin:3px 5px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:6px;margin:5px 3px;position:absolute;width:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:12px;margin:2px 0}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent;border-width:1px;border-style:solid;border-color:#fff;border-color:rgba(255,255,255,.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{border-color:#000;border-color:rgba(0,0,0,.2)}.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.6)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.6)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}
|
1 |
+
.mCustomScrollbar{-ms-touch-action:none;touch-action:none}.mCustomScrollbar.mCS_no_scrollbar{-ms-touch-action:auto;touch-action:auto}.mCustomScrollBox{position:relative;overflow:hidden;height:100%;max-width:100%;outline:0;direction:ltr}.mCSB_container{overflow:hidden;width:auto;height:auto}.mCSB_inside>.mCSB_container{margin-right:30px}.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container{margin-right:0;margin-left:30px}.mCS-dir-rtl>.mCSB_inside>.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-left:0}.mCSB_scrollTools{position:absolute;width:16px;height:auto;left:auto;top:0;right:0;bottom:0}.mCSB_outside+.mCSB_scrollTools{right:-26px}.mCS-dir-rtl>.mCSB_inside>.mCSB_scrollTools,.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{right:auto;left:0}.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{left:-26px}.mCSB_scrollTools .mCSB_draggerContainer{position:absolute;top:0;left:0;bottom:0;right:0;height:auto}.mCSB_scrollTools a+.mCSB_draggerContainer{margin:20px 0}.mCSB_scrollTools .mCSB_draggerRail{width:2px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCSB_scrollTools .mCSB_dragger{cursor:pointer;width:100%;height:30px;z-index:1}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:relative;width:4px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px;text-align:center}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:12px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:8px}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonUp{display:block;position:absolute;height:20px;width:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools .mCSB_buttonDown{bottom:0}.mCSB_horizontal.mCSB_inside>.mCSB_container{margin-right:0;margin-bottom:30px}.mCSB_horizontal.mCSB_outside>.mCSB_container{min-height:100%}.mCSB_horizontal>.mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal{width:auto;height:16px;top:auto;right:0;bottom:0;left:0}.mCustomScrollBox+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:-26px}.mCSB_scrollTools.mCSB_scrollTools_horizontal a+.mCSB_draggerContainer{margin:0 20px}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:2px;margin:7px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{width:30px;height:100%;left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:4px;margin:6px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:12px;margin:2px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:8px;margin:4px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{display:block;position:absolute;width:20px;height:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{right:0}.mCSB_container_wrapper{position:absolute;height:auto;width:auto;overflow:hidden;top:0;left:0;right:0;bottom:0;margin-right:30px;margin-bottom:30px}.mCSB_container_wrapper>.mCSB_container{padding-right:30px;padding-bottom:30px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:20px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:20px}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden+.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:20px}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container_wrapper{margin-right:0;margin-left:30px}.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden>.mCSB_container{padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden>.mCSB_container{padding-bottom:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0;margin-left:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools,.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar{-webkit-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out}.mCSB_scrollTools{opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:0;filter:"alpha(opacity=0)";-ms-filter:"alpha(opacity=0)"}.mCS-autoHide:hover>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide:hover>.mCustomScrollBox~.mCSB_scrollTools,.mCustomScrollBox:hover>.mCSB_scrollTools,.mCustomScrollBox:hover~.mCSB_scrollTools,.mCustomScrollbar>.mCustomScrollBox>.mCSB_scrollTools.mCSB_scrollTools_onDrag,.mCustomScrollbar>.mCustomScrollBox~.mCSB_scrollTools.mCSB_scrollTools_onDrag{opacity:1;filter:"alpha(opacity=100)";-ms-filter:"alpha(opacity=100)"}.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.4);filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75);filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85);filter:"alpha(opacity=85)";-ms-filter:"alpha(opacity=85)"}.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9);filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp{background-image:url(mCSB_buttons.png);background-repeat:no-repeat;opacity:.4;filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_buttonUp{background-position:0 0}.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -20px}.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -40px}.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -56px}.mCSB_scrollTools .mCSB_buttonDown:hover,.mCSB_scrollTools .mCSB_buttonLeft:hover,.mCSB_scrollTools .mCSB_buttonRight:hover,.mCSB_scrollTools .mCSB_buttonUp:hover{opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_buttonDown:active,.mCSB_scrollTools .mCSB_buttonLeft:active,.mCSB_scrollTools .mCSB_buttonRight:active,.mCSB_scrollTools .mCSB_buttonUp:active{opacity:.9;filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCS-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:rgba(0,0,0,.85)}.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:rgba(0,0,0,.9)}.mCS-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:4px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px auto}.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px 0}.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -20px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -40px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px 0}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -20px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -40px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px 0}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:6px;margin:5px auto}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px 0}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -20px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -40px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px 0}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -20px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -40px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -56px}.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:2px}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:2px;margin:7px auto}.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,.mCS-rounded.mCSB_scrollTools .mCSB_dragger{height:14px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:14px;margin:0 1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger{width:14px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:14px;margin:1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:-1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:4px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:16px;width:16px;margin:0 -1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:4px;margin:6px 0}.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{background-position:0 -72px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -92px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -112px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -128px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px -72px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -92px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -112px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail{width:4px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{background-color:transparent;background-position:center}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==);background-repeat:repeat-y;opacity:.3;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{height:4px;margin:6px 0;background-repeat:repeat-x}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px -72px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -92px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -112px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=)}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px -72px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -92px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -112px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-y;background-image:-moz-linear-gradient(left,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-webkit-gradient(linear,left top,right top,color-stop(0%,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(left,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-o-linear-gradient(left,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-ms-linear-gradient(left,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:linear-gradient(to right,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-x;background-image:-moz-linear-gradient(top,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(top,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-o-linear-gradient(top,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:-ms-linear-gradient(top,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%);background-image:linear-gradient(to bottom,rgba(255,255,255,.5)0,rgba(255,255,255,0)100%)}.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger{height:70px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger{width:70px}.mCS-3d-dark.mCSB_scrollTools,.mCS-3d.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{width:8px;background-color:#000;background-color:rgba(0,0,0,.2);box-shadow:inset 1px 0 1px rgba(0,0,0,.5),inset -1px 0 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:8px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:8px;margin:4px 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.5),inset 0 -1px 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:8px;margin:4px auto}.mCS-3d.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);box-shadow:inset 1px 0 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer,.mCS-3d-thick.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mCSB_inside+.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCSB_inside+.mCS-3d-thick.mCSB_scrollTools_vertical{right:1px}.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCS-3d-thick.mCSB_scrollTools_vertical{box-shadow:inset 1px 0 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal,.mCS-3d-thick.mCSB_scrollTools_horizontal{bottom:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,.4);width:12px;margin:2px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:12px;width:auto}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{background-color:#000;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-thick-dark.mCSB_scrollTools{box-shadow:inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,.4),inset -1px 0 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4),inset 0 -1px 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#777}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{background-color:#fff;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{right:0;margin:12px 0}.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:0;margin:0 12px}.mCS-dir-rtl>.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCS-dir-rtl>.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{left:0;right:auto}.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger{height:50px}.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger{width:50px}.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail{width:6px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px}.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:6px;margin:5px 0}.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:12px}.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:12px;margin:2px 0}.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools .mCSB_draggerRail{width:12px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;margin:3px 5px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:6px;margin:5px 3px;position:absolute;width:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:12px;margin:2px 0}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent;border-width:1px;border-style:solid;border-color:#fff;border-color:rgba(255,255,255,.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{border-color:#000;border-color:rgba(0,0,0,.2)}.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.6)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.6)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}
|
css/widget.css
CHANGED
@@ -1 +1,220 @@
|
|
1 |
-
ul.products{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
ul.products{
|
2 |
+
position: relative;
|
3 |
+
min-height: 500px;
|
4 |
+
}
|
5 |
+
|
6 |
+
ul.products.hide_products li{
|
7 |
+
visibility: hidden;
|
8 |
+
height: 20px;
|
9 |
+
}
|
10 |
+
|
11 |
+
.berocket_aapf_widget input[type="checkbox"] {
|
12 |
+
position: absolute;
|
13 |
+
left: -9999px;
|
14 |
+
}
|
15 |
+
|
16 |
+
.berocket_aapf_widget input[type="checkbox"] + label:before {
|
17 |
+
content: "";
|
18 |
+
display: inline-block;
|
19 |
+
width: 14px;
|
20 |
+
height: 14px;
|
21 |
+
background: url('../images/sprite.png') no-repeat;
|
22 |
+
cursor: pointer;
|
23 |
+
}
|
24 |
+
|
25 |
+
.berocket_aapf_widget input[type="checkbox"]:checked + label:before {
|
26 |
+
background-position: -14px 0;
|
27 |
+
}
|
28 |
+
|
29 |
+
.berocket_aapf_widget input[type="radio"] {
|
30 |
+
position: absolute;
|
31 |
+
left: -9999px;
|
32 |
+
}
|
33 |
+
|
34 |
+
.berocket_aapf_widget input[type="radio"] + label:before {
|
35 |
+
content: "";
|
36 |
+
display: inline-block;
|
37 |
+
width: 14px;
|
38 |
+
height: 14px;
|
39 |
+
background: url('../images/sprite_radio.png') no-repeat;
|
40 |
+
}
|
41 |
+
|
42 |
+
.berocket_aapf_widget input[type="radio"]:checked + label:before {
|
43 |
+
background-position: -14px 0;
|
44 |
+
}
|
45 |
+
|
46 |
+
.berocket_aapf_widget-title{
|
47 |
+
margin-bottom: 5px;
|
48 |
+
font-size: 14px;
|
49 |
+
}
|
50 |
+
|
51 |
+
ul.berocket_aapf_widget{
|
52 |
+
margin-bottom: 30px;
|
53 |
+
}
|
54 |
+
|
55 |
+
ul.berocket_aapf_widget li{
|
56 |
+
list-style-type: none;
|
57 |
+
padding-left: 0;
|
58 |
+
}
|
59 |
+
|
60 |
+
ul.berocket_aapf_widget li > span{
|
61 |
+
display: block;
|
62 |
+
cursor: pointer;
|
63 |
+
height: 20px;
|
64 |
+
}
|
65 |
+
|
66 |
+
ul.berocket_aapf_widget li > span:hover{
|
67 |
+
color: #000000;
|
68 |
+
}
|
69 |
+
|
70 |
+
.berocket_aapf_widget_loading {
|
71 |
+
position: absolute;
|
72 |
+
top: 0;
|
73 |
+
left: 0;
|
74 |
+
right: 0;
|
75 |
+
bottom: 0;
|
76 |
+
background: white url('../images/ajax-loader.gif') no-repeat center center;
|
77 |
+
z-index: 10000;
|
78 |
+
}
|
79 |
+
.berocket_aapf_widget_loading.transparent {
|
80 |
+
background-color: transparent;
|
81 |
+
}
|
82 |
+
|
83 |
+
.no-products{
|
84 |
+
font-size: 26px;
|
85 |
+
font-weight: bold;
|
86 |
+
line-height: 6em;
|
87 |
+
text-align: center;
|
88 |
+
}
|
89 |
+
|
90 |
+
span.product-size{
|
91 |
+
color: #777;
|
92 |
+
display: block;
|
93 |
+
text-align: center;
|
94 |
+
}
|
95 |
+
|
96 |
+
.berocket_aapf_widget li.slider span.left, .berocket_aapf_widget li.slider span.right{
|
97 |
+
height: 40px;
|
98 |
+
float: left;
|
99 |
+
font-size: 12px;
|
100 |
+
max-width: 50%;
|
101 |
+
text-align: left;
|
102 |
+
}
|
103 |
+
|
104 |
+
.berocket_aapf_widget li.slider span.left input, .berocket_aapf_widget li.slider span.right input{
|
105 |
+
border: 1px solid #E8E8E8;
|
106 |
+
font-size: 13px;
|
107 |
+
font-style: italic;
|
108 |
+
padding: 4px 9px;
|
109 |
+
text-align: right;
|
110 |
+
width: 60px;
|
111 |
+
background: white;
|
112 |
+
line-height: 1.1em;
|
113 |
+
}
|
114 |
+
|
115 |
+
.berocket_aapf_widget li.slider{
|
116 |
+
width: 80%;
|
117 |
+
}
|
118 |
+
|
119 |
+
.berocket_aapf_widget li.slider span.right{
|
120 |
+
float: right;
|
121 |
+
text-align: right;
|
122 |
+
}
|
123 |
+
|
124 |
+
.berocket_aapf_widget li.slider span.slide{
|
125 |
+
clear: both;
|
126 |
+
height: auto;
|
127 |
+
text-align: right;
|
128 |
+
}
|
129 |
+
|
130 |
+
.berocket_filter_slider.ui-widget-content, .berocket_filter_price_slider.ui-widget-content{
|
131 |
+
background: none repeat scroll 0 0 #b0b5b9;
|
132 |
+
border: 0 none;
|
133 |
+
border-radius: 0;
|
134 |
+
height: 4px;
|
135 |
+
padding: 0;
|
136 |
+
}
|
137 |
+
|
138 |
+
.berocket_filter_slider.ui-widget-content .ui-slider-range, .berocket_filter_price_slider.ui-widget-content .ui-slider-range{
|
139 |
+
background: none repeat scroll 0 0 #000000;
|
140 |
+
}
|
141 |
+
|
142 |
+
.berocket_filter_slider.ui-widget-content .ui-slider-handle, .berocket_filter_price_slider.ui-widget-content .ui-slider-handle{
|
143 |
+
background: url("../images/handler.png") no-repeat scroll center center / cover transparent;
|
144 |
+
width: 12px;
|
145 |
+
height: 12px;
|
146 |
+
border: 0;
|
147 |
+
top: -4px;
|
148 |
+
}
|
149 |
+
|
150 |
+
.berocket_aapf_widget li.slider span.slide{
|
151 |
+
clear: both;
|
152 |
+
height: auto;
|
153 |
+
}
|
154 |
+
|
155 |
+
.ui-slider {
|
156 |
+
position: relative;
|
157 |
+
text-align: left;
|
158 |
+
}
|
159 |
+
.ui-slider .ui-slider-handle {
|
160 |
+
position: absolute;
|
161 |
+
z-index: 2;
|
162 |
+
width: 1.2em;
|
163 |
+
height: 1.2em;
|
164 |
+
cursor: pointer;
|
165 |
+
-ms-touch-action: none;
|
166 |
+
touch-action: none;
|
167 |
+
}
|
168 |
+
.ui-slider .ui-slider-range {
|
169 |
+
position: absolute;
|
170 |
+
z-index: 1;
|
171 |
+
font-size: .7em;
|
172 |
+
display: block;
|
173 |
+
border: 0;
|
174 |
+
background-position: 0 0;
|
175 |
+
}
|
176 |
+
.ui-slider.ui-state-disabled .ui-slider-handle,
|
177 |
+
.ui-slider.ui-state-disabled .ui-slider-range {
|
178 |
+
filter: inherit;
|
179 |
+
}
|
180 |
+
|
181 |
+
.ui-slider-horizontal {
|
182 |
+
height: .8em;
|
183 |
+
}
|
184 |
+
.ui-slider-horizontal .ui-slider-handle {
|
185 |
+
top: -.3em;
|
186 |
+
margin-left: -.6em;
|
187 |
+
}
|
188 |
+
.berocket_filter_slider > a:last-child {
|
189 |
+
margin-left: -12px;
|
190 |
+
}
|
191 |
+
.ui-slider-horizontal .ui-slider-range {
|
192 |
+
top: 0;
|
193 |
+
height: 100%;
|
194 |
+
}
|
195 |
+
.ui-slider-horizontal .ui-slider-range-min {
|
196 |
+
left: 0;
|
197 |
+
}
|
198 |
+
.ui-slider-horizontal .ui-slider-range-max {
|
199 |
+
right: 0;
|
200 |
+
}
|
201 |
+
|
202 |
+
.ui-slider-vertical {
|
203 |
+
width: .8em;
|
204 |
+
height: 100px;
|
205 |
+
}
|
206 |
+
.ui-slider-vertical .ui-slider-handle {
|
207 |
+
left: -.3em;
|
208 |
+
margin-left: 0;
|
209 |
+
margin-bottom: -.6em;
|
210 |
+
}
|
211 |
+
.ui-slider-vertical .ui-slider-range {
|
212 |
+
left: 0;
|
213 |
+
width: 100%;
|
214 |
+
}
|
215 |
+
.ui-slider-vertical .ui-slider-range-min {
|
216 |
+
bottom: 0;
|
217 |
+
}
|
218 |
+
.ui-slider-vertical .ui-slider-range-max {
|
219 |
+
top: 0;
|
220 |
+
}
|
images/paid/custom_css.png
ADDED
Binary file
|
images/paid/styler.png
ADDED
Binary file
|
includes/functions.php
CHANGED
@@ -10,8 +10,8 @@ if( ! function_exists( 'br_get_template_part' ) ){
|
|
10 |
* @return void
|
11 |
*/
|
12 |
function br_get_template_part( $name = '' ){
|
13 |
-
|
14 |
-
|
15 |
}
|
16 |
|
17 |
if( ! function_exists( 'br_aapf_get_attributes' ) ) {
|
@@ -21,17 +21,17 @@ if( ! function_exists( 'br_aapf_get_attributes' ) ) {
|
|
21 |
* @return mixed|void
|
22 |
*/
|
23 |
function br_aapf_get_attributes() {
|
24 |
-
|
25 |
-
|
26 |
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
|
33 |
-
|
34 |
-
|
35 |
}
|
36 |
|
37 |
if( ! function_exists( 'br_parse_order_by' ) ){
|
@@ -41,53 +41,53 @@ if( ! function_exists( 'br_parse_order_by' ) ){
|
|
41 |
* @param $args
|
42 |
*/
|
43 |
function br_aapf_parse_order_by( &$args ){
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
|
50 |
// needed for woocommerce sorting funtionality
|
51 |
if( @ $orderby and @ $order ) {
|
52 |
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
}
|
92 |
|
93 |
if( ! function_exists( 'br_aapf_args_parser' ) ){
|
@@ -99,68 +99,68 @@ if( ! function_exists( 'br_aapf_args_parser' ) ){
|
|
99 |
* @return array
|
100 |
*/
|
101 |
function br_aapf_args_parser( $args = array() ) {
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
}
|
165 |
|
166 |
if( ! function_exists( 'br_aapf_args_converter' ) ) {
|
@@ -169,10 +169,10 @@ if( ! function_exists( 'br_aapf_args_converter' ) ) {
|
|
169 |
*/
|
170 |
function br_aapf_args_converter() {
|
171 |
if ( preg_match( "~\|~", $_GET['filters'] ) ) {
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
|
177 |
foreach ( $filters as $filter ) {
|
178 |
|
@@ -192,11 +192,11 @@ if( ! function_exists( 'br_aapf_args_converter' ) ) {
|
|
192 |
list( $attribute, $value ) = explode( "-", $filter, 2 );
|
193 |
}
|
194 |
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
if ( $operator ) {
|
201 |
foreach ( $value as $v ) {
|
202 |
$_POST['terms'][] = array( "pa_" . $attribute, $v, $operator );
|
@@ -204,7 +204,7 @@ if( ! function_exists( 'br_aapf_args_converter' ) ) {
|
|
204 |
} else {
|
205 |
$_POST['limits'][] = array( "pa_" . $attribute, $min, $max );
|
206 |
}
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
}
|
10 |
* @return void
|
11 |
*/
|
12 |
function br_get_template_part( $name = '' ){
|
13 |
+
BeRocket_AAPF::br_get_template_part( $name );
|
14 |
+
}
|
15 |
}
|
16 |
|
17 |
if( ! function_exists( 'br_aapf_get_attributes' ) ) {
|
21 |
* @return mixed|void
|
22 |
*/
|
23 |
function br_aapf_get_attributes() {
|
24 |
+
$attribute_taxonomies = wc_get_attribute_taxonomies();
|
25 |
+
$attributes = array();
|
26 |
|
27 |
+
if ( $attribute_taxonomies ) {
|
28 |
+
foreach ( $attribute_taxonomies as $tax ) {
|
29 |
+
$attributes[ wc_attribute_taxonomy_name( $tax->attribute_name ) ] = $tax->attribute_label;
|
30 |
+
}
|
31 |
+
}
|
32 |
|
33 |
+
return apply_filters( 'berocket_aapf_get_attributes', $attributes );
|
34 |
+
}
|
35 |
}
|
36 |
|
37 |
if( ! function_exists( 'br_parse_order_by' ) ){
|
41 |
* @param $args
|
42 |
*/
|
43 |
function br_aapf_parse_order_by( &$args ){
|
44 |
+
$orderby = $_GET['orderby'] = $_POST['orderby'];
|
45 |
+
$order = "ASK";
|
46 |
+
if( @ preg_match( "/-/", $orderby ) ){
|
47 |
+
list( $orderby, $order ) = explode( "-", $orderby );
|
48 |
+
}
|
49 |
|
50 |
// needed for woocommerce sorting funtionality
|
51 |
if( @ $orderby and @ $order ) {
|
52 |
|
53 |
+
// Get ordering from query string unless defined
|
54 |
+
$orderby = strtolower( $orderby );
|
55 |
+
$order = strtoupper( $order );
|
56 |
+
|
57 |
+
// default - menu_order
|
58 |
+
$args['orderby'] = 'menu_order title';
|
59 |
+
$args['order'] = $order == 'DESC' ? 'DESC' : 'ASC';
|
60 |
+
|
61 |
+
switch ( $orderby ) {
|
62 |
+
case 'rand' :
|
63 |
+
$args['orderby'] = 'rand';
|
64 |
+
break;
|
65 |
+
case 'date' :
|
66 |
+
$args['orderby'] = 'date';
|
67 |
+
$args['order'] = $order == 'ASC' ? 'ASC' : 'DESC';
|
68 |
+
break;
|
69 |
+
case 'price' :
|
70 |
+
$args['orderby'] = 'meta_value_num';
|
71 |
+
$args['order'] = $order == 'DESC' ? 'DESC' : 'ASC';
|
72 |
+
$args['meta_key'] = '_price';
|
73 |
+
break;
|
74 |
+
case 'popularity' :
|
75 |
+
$args['meta_key'] = 'total_sales';
|
76 |
+
|
77 |
+
// Sorting handled later though a hook
|
78 |
+
add_filter( 'posts_clauses', array( 'WC_Query', 'order_by_popularity_post_clauses' ) );
|
79 |
+
break;
|
80 |
+
case 'rating' :
|
81 |
+
// Sorting handled later though a hook
|
82 |
+
add_filter( 'posts_clauses', array( 'WC_Query', 'order_by_rating_post_clauses' ) );
|
83 |
+
break;
|
84 |
+
case 'title' :
|
85 |
+
$args['orderby'] = 'title';
|
86 |
+
$args['order'] = $order == 'DESC' ? 'DESC' : 'ASC';
|
87 |
+
break;
|
88 |
+
}
|
89 |
+
}
|
90 |
+
}
|
91 |
}
|
92 |
|
93 |
if( ! function_exists( 'br_aapf_args_parser' ) ){
|
99 |
* @return array
|
100 |
*/
|
101 |
function br_aapf_args_parser( $args = array() ) {
|
102 |
+
$attributes_terms = $tax_query = array();
|
103 |
+
$attributes = apply_filters( 'berocket_aapf_listener_get_attributes', br_aapf_get_attributes() );
|
104 |
+
|
105 |
+
if ( @$attributes ) {
|
106 |
+
foreach ( $attributes as $k => $v ) {
|
107 |
+
$terms = get_terms( array( $k ), $args = array( 'orderby' => 'name', 'order' => 'ASC' ) );
|
108 |
+
if ( $terms ) {
|
109 |
+
foreach ( $terms as $term ) {
|
110 |
+
$attributes_terms[ $k ][ $term->term_id ] = $term->slug;
|
111 |
+
}
|
112 |
+
}
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
if ( @$_POST['terms'] ) {
|
117 |
+
foreach ( $_POST['terms'] as $t ) {
|
118 |
+
$taxonomies[ $t[0] ][] = $attributes_terms[ $t[0] ][ $t[1] ];
|
119 |
+
$taxonomies_operator[ $t[0] ] = $t[2];
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
$taxonomies = apply_filters( 'berocket_aapf_listener_taxonomies', @$taxonomies );
|
124 |
+
$taxonomies_operator = apply_filters( 'berocket_aapf_listener_taxonomies_operator', @$taxonomies_operator );
|
125 |
+
|
126 |
+
if ( @$taxonomies ) {
|
127 |
+
$tax_query['relation'] = 'AND';
|
128 |
+
if ( $taxonomies ) {
|
129 |
+
foreach ( $taxonomies as $k => $v ) {
|
130 |
+
if ( $taxonomies_operator[ $k ] == 'AND' ) {
|
131 |
+
$op = 'AND';
|
132 |
+
} else {
|
133 |
+
$op = 'IN';
|
134 |
+
}
|
135 |
+
|
136 |
+
$tax_query[] = array(
|
137 |
+
'taxonomy' => $k,
|
138 |
+
'field' => 'slug',
|
139 |
+
'terms' => $v,
|
140 |
+
'operator' => $op
|
141 |
+
);
|
142 |
+
}
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
if ( @$_POST['product_cat'] and $_POST['product_cat'] != '-1' ) {
|
147 |
+
$tax_query[] = array(
|
148 |
+
'taxonomy' => 'product_cat',
|
149 |
+
'field' => 'slug',
|
150 |
+
'terms' => strip_tags( $_POST['product_cat'] ),
|
151 |
+
'operator' => 'IN'
|
152 |
+
);
|
153 |
+
}
|
154 |
+
|
155 |
+
$args['tax_query'] = $tax_query;
|
156 |
+
$args['post_type'] = 'product';
|
157 |
+
|
158 |
+
if ( @ $_POST['orderby'] ) {
|
159 |
+
br_aapf_parse_order_by( $args );
|
160 |
+
}
|
161 |
+
|
162 |
+
return $args;
|
163 |
+
}
|
164 |
}
|
165 |
|
166 |
if( ! function_exists( 'br_aapf_args_converter' ) ) {
|
169 |
*/
|
170 |
function br_aapf_args_converter() {
|
171 |
if ( preg_match( "~\|~", $_GET['filters'] ) ) {
|
172 |
+
$filters = explode( "|", $_GET['filters'] );
|
173 |
+
} else {
|
174 |
+
$filters[0] = $_GET['filters'];
|
175 |
+
}
|
176 |
|
177 |
foreach ( $filters as $filter ) {
|
178 |
|
192 |
list( $attribute, $value ) = explode( "-", $filter, 2 );
|
193 |
}
|
194 |
|
195 |
+
if ( $attribute == 'price' ) {
|
196 |
+
$_POST['price'] = array( $min, $max );
|
197 |
+
} elseif ( $attribute == 'order' ) {
|
198 |
+
$_GET['orderby'] = $value;
|
199 |
+
} else {
|
200 |
if ( $operator ) {
|
201 |
foreach ( $value as $v ) {
|
202 |
$_POST['terms'][] = array( "pa_" . $attribute, $v, $operator );
|
204 |
} else {
|
205 |
$_POST['limits'][] = array( "pa_" . $attribute, $min, $max );
|
206 |
}
|
207 |
+
}
|
208 |
+
}
|
209 |
+
}
|
210 |
}
|
includes/widget.php
CHANGED
@@ -41,7 +41,7 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
41 |
*/
|
42 |
function widget( $args, $instance ) {
|
43 |
$br_options = apply_filters( 'berocket_aapf_listener_br_options', get_option('br_filters_options') );
|
44 |
-
if( @ $br_options['filters_turn_off'] ) return false;
|
45 |
|
46 |
global $wp_query, $wp;
|
47 |
|
@@ -79,9 +79,9 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
79 |
'current_page_url' => preg_replace( "~paged?/[0-9]+/?~", "", home_url( $wp->request ) ),
|
80 |
'ajaxurl' => admin_url( 'admin-ajax.php' ),
|
81 |
'product_cat' => $wp_query_product_cat,
|
82 |
-
'products_holder_id' => $br_options['products_holder_id'],
|
83 |
-
'control_sorting' => $br_options['control_sorting'],
|
84 |
-
'seo_friendly_urls' => $br_options['seo_friendly_urls'],
|
85 |
'berocket_aapf_widget_product_filters' => $post_temrs,
|
86 |
'user_func' => @ $br_options['user_func'],
|
87 |
)
|
@@ -144,7 +144,7 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
144 |
$terms = BeRocket_AAPF_Widget::get_attribute_values( $attribute, 'id', true );
|
145 |
}
|
146 |
|
147 |
-
if ( @ count( $terms ) <
|
148 |
|
149 |
if ( $wc_order_by == 'menu_order' ) {
|
150 |
foreach ( $terms as $term ) {
|
@@ -174,9 +174,10 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
174 |
if( !$scroll_theme ) $scroll_theme = 'dark';
|
175 |
|
176 |
set_query_var( 'operator', $operator );
|
|
|
177 |
set_query_var( 'title', apply_filters( 'berocket_aapf_widget_title', $title ) );
|
178 |
set_query_var( 'class', apply_filters( 'berocket_aapf_widget_class', $class ) );
|
179 |
-
set_query_var( 'css_class', apply_filters( 'berocket_aapf_widget_css_class', $css_class ) );
|
180 |
set_query_var( 'style', apply_filters( 'berocket_aapf_widget_style', $style ) );
|
181 |
set_query_var( 'scroll_theme', $scroll_theme );
|
182 |
set_query_var( 'x', time() );
|
@@ -190,6 +191,14 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
190 |
$slider_class = 'berocket_filter_slider';
|
191 |
|
192 |
if( $attribute == 'price' ){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
193 |
if( $price_range ) {
|
194 |
foreach ( $price_range as $price ) {
|
195 |
if ( $min === false or $min > (int) $price ) {
|
@@ -200,20 +209,20 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
200 |
}
|
201 |
}
|
202 |
}
|
203 |
-
$id =
|
204 |
$slider_class .= ' berocket_filter_price_slider';
|
205 |
$main_class .= ' price';
|
206 |
|
207 |
$min = number_format( floor( $min ), 2, '.', '' );
|
208 |
$max = number_format( ceil( $max ), 2, '.', '' );
|
209 |
-
}else{
|
210 |
-
if( $terms ) {
|
211 |
foreach ( $terms as $term ) {
|
212 |
-
if ( $min === false or $min > (int) $term->
|
213 |
-
$min = $term->
|
214 |
}
|
215 |
-
if ( $max === false or $max < (int) $term->
|
216 |
-
$max = $term->
|
217 |
}
|
218 |
}
|
219 |
}
|
@@ -243,7 +252,10 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
243 |
set_query_var( 'slider_class', $slider_class );
|
244 |
set_query_var( 'min', $min );
|
245 |
set_query_var( 'max', $max );
|
|
|
|
|
246 |
}
|
|
|
247 |
|
248 |
br_get_template_part( $type );
|
249 |
|
@@ -263,8 +275,11 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
263 |
}
|
264 |
|
265 |
public static function get_price_range( $wp_query_product_cat, $woocommerce_hide_out_of_stock_items ){
|
|
|
266 |
$price_range = array();
|
|
|
267 |
$products = BeRocket_AAPF_Widget::get_filter_products( $wp_query_product_cat, $woocommerce_hide_out_of_stock_items, false );
|
|
|
268 |
|
269 |
foreach ( $products as $ID ) {
|
270 |
$meta_values = get_post_meta( $ID, '_price' );
|
@@ -282,14 +297,44 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
282 |
|
283 |
public static function get_attribute_values( $taxonomy = '', $order_by = 'id', $hide_empty = false ) {
|
284 |
if ( ! $taxonomy ) return array();
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
'
|
290 |
-
|
291 |
-
|
292 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
293 |
}
|
294 |
|
295 |
public static function get_filter_products( $wp_query_product_cat, $woocommerce_hide_out_of_stock_items, $use_filters = true ) {
|
@@ -321,7 +366,7 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
321 |
$wp_query = new WP_Query( $args );
|
322 |
|
323 |
// here we get max products to know if current page is not too big
|
324 |
-
if ( $wp_rewrite->using_permalinks() and preg_match( "~/page/([0-9]+)~", $_POST['location'], $mathces ) or preg_match( "~paged?=([0-9]+)~", $_POST['location'], $mathces ) ) {
|
325 |
$args['paged'] = min( $mathces[1], $wp_query->max_num_pages );
|
326 |
$wp_query = new WP_Query( $args );
|
327 |
}
|
@@ -334,6 +379,8 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
334 |
}
|
335 |
}
|
336 |
|
|
|
|
|
337 |
return $products;
|
338 |
}
|
339 |
|
@@ -349,14 +396,17 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
349 |
$instance = $old_instance;
|
350 |
|
351 |
/* Strip tags (if needed) and update the widget settings. */
|
352 |
-
$instance['widget_type']
|
353 |
-
$instance['title']
|
354 |
-
$instance['attribute']
|
355 |
-
$instance['type']
|
356 |
-
$instance['product_cat']
|
357 |
-
$instance['scroll_theme']
|
358 |
-
$instance['cat_propagation']
|
359 |
-
$instance['css_class']
|
|
|
|
|
|
|
360 |
|
361 |
if( $new_instance['height'] != 'auto' ) $new_instance['height'] = (float) $new_instance['height'];
|
362 |
if( !$new_instance['height'] ) $new_instance['height'] = 'auto';
|
@@ -386,14 +436,16 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
386 |
|
387 |
/* Set up some default widget settings. */
|
388 |
$defaults = array(
|
389 |
-
'widget_type'
|
390 |
-
'title'
|
391 |
-
'attribute'
|
392 |
-
'type'
|
393 |
-
'operator'
|
394 |
-
'product_cat'
|
395 |
-
'
|
396 |
-
'
|
|
|
|
|
397 |
);
|
398 |
|
399 |
$defaults = apply_filters( 'berocket_aapf_form_defaults', $defaults );
|
41 |
*/
|
42 |
function widget( $args, $instance ) {
|
43 |
$br_options = apply_filters( 'berocket_aapf_listener_br_options', get_option('br_filters_options') );
|
44 |
+
if( @ $br_options['filters_turn_off'] || is_product() ) return false;
|
45 |
|
46 |
global $wp_query, $wp;
|
47 |
|
79 |
'current_page_url' => preg_replace( "~paged?/[0-9]+/?~", "", home_url( $wp->request ) ),
|
80 |
'ajaxurl' => admin_url( 'admin-ajax.php' ),
|
81 |
'product_cat' => $wp_query_product_cat,
|
82 |
+
'products_holder_id' => @ $br_options['products_holder_id'],
|
83 |
+
'control_sorting' => @ $br_options['control_sorting'],
|
84 |
+
'seo_friendly_urls' => @ $br_options['seo_friendly_urls'],
|
85 |
'berocket_aapf_widget_product_filters' => $post_temrs,
|
86 |
'user_func' => @ $br_options['user_func'],
|
87 |
)
|
144 |
$terms = BeRocket_AAPF_Widget::get_attribute_values( $attribute, 'id', true );
|
145 |
}
|
146 |
|
147 |
+
if ( @ count( $terms ) < 1 ) return false;
|
148 |
|
149 |
if ( $wc_order_by == 'menu_order' ) {
|
150 |
foreach ( $terms as $term ) {
|
174 |
if( !$scroll_theme ) $scroll_theme = 'dark';
|
175 |
|
176 |
set_query_var( 'operator', $operator );
|
177 |
+
set_query_var( 'type', $type );
|
178 |
set_query_var( 'title', apply_filters( 'berocket_aapf_widget_title', $title ) );
|
179 |
set_query_var( 'class', apply_filters( 'berocket_aapf_widget_class', $class ) );
|
180 |
+
set_query_var( 'css_class', apply_filters( 'berocket_aapf_widget_css_class', @ $css_class ) );
|
181 |
set_query_var( 'style', apply_filters( 'berocket_aapf_widget_style', $style ) );
|
182 |
set_query_var( 'scroll_theme', $scroll_theme );
|
183 |
set_query_var( 'x', time() );
|
191 |
$slider_class = 'berocket_filter_slider';
|
192 |
|
193 |
if( $attribute == 'price' ){
|
194 |
+
wp_localize_script(
|
195 |
+
'berocket_aapf_widget-script',
|
196 |
+
'br_price_text',
|
197 |
+
array(
|
198 |
+
'before' => @ $text_before_price,
|
199 |
+
'after' => @ $text_after_price,
|
200 |
+
)
|
201 |
+
);
|
202 |
if( $price_range ) {
|
203 |
foreach ( $price_range as $price ) {
|
204 |
if ( $min === false or $min > (int) $price ) {
|
209 |
}
|
210 |
}
|
211 |
}
|
212 |
+
$id = 'br_price';
|
213 |
$slider_class .= ' berocket_filter_price_slider';
|
214 |
$main_class .= ' price';
|
215 |
|
216 |
$min = number_format( floor( $min ), 2, '.', '' );
|
217 |
$max = number_format( ceil( $max ), 2, '.', '' );
|
218 |
+
} else {
|
219 |
+
if( @ $terms ) {
|
220 |
foreach ( $terms as $term ) {
|
221 |
+
if ( $min === false or $min > (int) $term->name ) {
|
222 |
+
$min = floor( (float) $term->name );
|
223 |
}
|
224 |
+
if ( $max === false or $max < (int) $term->name ) {
|
225 |
+
$max = ceil( (float) $term->name );
|
226 |
}
|
227 |
}
|
228 |
}
|
252 |
set_query_var( 'slider_class', $slider_class );
|
253 |
set_query_var( 'min', $min );
|
254 |
set_query_var( 'max', $max );
|
255 |
+
set_query_var( 'text_before_price', @ $text_before_price );
|
256 |
+
set_query_var( 'text_after_price', @ $text_after_price );
|
257 |
}
|
258 |
+
set_query_var( 'first_page_jump', $first_page_jump );
|
259 |
|
260 |
br_get_template_part( $type );
|
261 |
|
275 |
}
|
276 |
|
277 |
public static function get_price_range( $wp_query_product_cat, $woocommerce_hide_out_of_stock_items ){
|
278 |
+
global $wp_query;
|
279 |
$price_range = array();
|
280 |
+
$wp_query_product_cat_save = $wp_query;
|
281 |
$products = BeRocket_AAPF_Widget::get_filter_products( $wp_query_product_cat, $woocommerce_hide_out_of_stock_items, false );
|
282 |
+
$wp_query = $wp_query_product_cat_save;
|
283 |
|
284 |
foreach ( $products as $ID ) {
|
285 |
$meta_values = get_post_meta( $ID, '_price' );
|
297 |
|
298 |
public static function get_attribute_values( $taxonomy = '', $order_by = 'id', $hide_empty = false ) {
|
299 |
if ( ! $taxonomy ) return array();
|
300 |
+
if( $hide_empty ) {
|
301 |
+
global $wp_query, $post;
|
302 |
+
$terms = array();
|
303 |
+
$q_args = $wp_query->query_vars;
|
304 |
+
$q_args['nopaging'] = true;
|
305 |
+
$q_args['post__in'] = '';
|
306 |
+
$q_args['tax_query'] = '';
|
307 |
+
$the_query = new WP_Query($q_args);
|
308 |
+
while ( $the_query -> have_posts() ) {
|
309 |
+
$the_query->the_post();
|
310 |
+
$curent_terms = wp_get_object_terms( $post->ID, $taxonomy);
|
311 |
+
foreach ( $curent_terms as $t ) {
|
312 |
+
if ( ! in_array($t,$terms) ) {
|
313 |
+
$terms[] = $t->term_id;
|
314 |
+
}
|
315 |
+
}
|
316 |
+
}
|
317 |
+
wp_reset_query();
|
318 |
+
$args = array(
|
319 |
+
'orderby' => $order_by,
|
320 |
+
'order' => 'ASC',
|
321 |
+
'hide_empty' => false,
|
322 |
+
);
|
323 |
+
$terms2 = get_terms( $taxonomy, $args );
|
324 |
+
foreach ( $terms2 as $t ) {
|
325 |
+
if ( in_array( $t->term_id, $terms ) ) {
|
326 |
+
$re[] = $t;
|
327 |
+
}
|
328 |
+
}
|
329 |
+
return $re;
|
330 |
+
} else {
|
331 |
+
$args = array(
|
332 |
+
'orderby' => $order_by,
|
333 |
+
'order' => 'ASC',
|
334 |
+
'hide_empty' => false,
|
335 |
+
);
|
336 |
+
return get_terms( $taxonomy, $args );
|
337 |
+
}
|
338 |
}
|
339 |
|
340 |
public static function get_filter_products( $wp_query_product_cat, $woocommerce_hide_out_of_stock_items, $use_filters = true ) {
|
366 |
$wp_query = new WP_Query( $args );
|
367 |
|
368 |
// here we get max products to know if current page is not too big
|
369 |
+
if ( $wp_rewrite->using_permalinks() and preg_match( "~/page/([0-9]+)~", @ $_POST['location'], $mathces ) or preg_match( "~paged?=([0-9]+)~", @ $_POST['location'], $mathces ) ) {
|
370 |
$args['paged'] = min( $mathces[1], $wp_query->max_num_pages );
|
371 |
$wp_query = new WP_Query( $args );
|
372 |
}
|
379 |
}
|
380 |
}
|
381 |
|
382 |
+
wp_reset_query();
|
383 |
+
|
384 |
return $products;
|
385 |
}
|
386 |
|
396 |
$instance = $old_instance;
|
397 |
|
398 |
/* Strip tags (if needed) and update the widget settings. */
|
399 |
+
$instance['widget_type'] = strip_tags( $new_instance['widget_type'] );
|
400 |
+
$instance['title'] = strip_tags( $new_instance['title'] );
|
401 |
+
$instance['attribute'] = strip_tags( $new_instance['attribute'] );
|
402 |
+
$instance['type'] = strip_tags( $new_instance['type'] );
|
403 |
+
$instance['product_cat'] = ( $new_instance['product_cat'] ) ? json_encode( $new_instance['product_cat'] ) : '';
|
404 |
+
$instance['scroll_theme'] = strip_tags( $new_instance['scroll_theme'] );
|
405 |
+
$instance['cat_propagation'] = (int) $new_instance['cat_propagation'];
|
406 |
+
$instance['css_class'] = strip_tags( $new_instance['css_class'] );
|
407 |
+
$instance['text_before_price'] = strip_tags( $new_instance['text_before_price'] );
|
408 |
+
$instance['text_after_price'] = strip_tags( $new_instance['text_after_price'] );
|
409 |
+
$instance['first_page_jump'] = (int) $new_instance['first_page_jump'];
|
410 |
|
411 |
if( $new_instance['height'] != 'auto' ) $new_instance['height'] = (float) $new_instance['height'];
|
412 |
if( !$new_instance['height'] ) $new_instance['height'] = 'auto';
|
436 |
|
437 |
/* Set up some default widget settings. */
|
438 |
$defaults = array(
|
439 |
+
'widget_type' => 'filter',
|
440 |
+
'title' => '',
|
441 |
+
'attribute' => 'price',
|
442 |
+
'type' => 'slider',
|
443 |
+
'operator' => '',
|
444 |
+
'product_cat' => '',
|
445 |
+
'text_before_price' => '',
|
446 |
+
'text_after_price' => '',
|
447 |
+
'height' => 'auto',
|
448 |
+
'scroll_theme' => 'dark',
|
449 |
);
|
450 |
|
451 |
$defaults = apply_filters( 'berocket_aapf_form_defaults', $defaults );
|
js/admin.js
CHANGED
@@ -1 +1,65 @@
|
|
1 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
(function ($) {
|
2 |
+
$(document).ready(function () {
|
3 |
+
|
4 |
+
$(document).on('change', '.berocket_aapf_widget_admin_attribute_select', function () {
|
5 |
+
$parent = $(this).parents('form');
|
6 |
+
if ($(this).val() == 'price') {
|
7 |
+
$('.berocket_aapf_widget_admin_type_select', $parent).html('<option value="slider">Slider</option>');
|
8 |
+
$('.berocket_aapf_widget_admin_operator_select', $parent).parent().parent().hide(0);
|
9 |
+
$('.berocket_aapf_widget_admin_price_attribute', $parent).show(0);
|
10 |
+
} else {
|
11 |
+
$('.berocket_aapf_widget_admin_type_select', $parent).html('<option value="checkbox">Checkbox</option><option value="radio">Radio</option><option value="select">Select</option><option value="slider">Slider</option>');
|
12 |
+
$('.berocket_aapf_widget_admin_operator_select', $parent).parent().parent().show(0);
|
13 |
+
$('.berocket_aapf_widget_admin_price_attribute', $parent).hide(0);
|
14 |
+
}
|
15 |
+
});
|
16 |
+
|
17 |
+
$(document).on('change', '.berocket_aapf_widget_admin_type_select', function () {
|
18 |
+
$parent = $(this).parents('form');
|
19 |
+
if ($(this).val() == 'slider') {
|
20 |
+
$('.berocket_aapf_widget_admin_operator_select', $parent).parent().parent().hide(0);
|
21 |
+
} else {
|
22 |
+
$('.berocket_aapf_widget_admin_operator_select', $parent).parent().parent().show(0);
|
23 |
+
}
|
24 |
+
});
|
25 |
+
|
26 |
+
$(document).on('click', '.berocket_aapf_advanced_settings_pointer', function (event) {
|
27 |
+
event.preventDefault();
|
28 |
+
$(this).parent().next().slideDown(300);
|
29 |
+
$(this).parent().slideUp(200);
|
30 |
+
});
|
31 |
+
|
32 |
+
$('.colorpicker_field').each(function (i,o){
|
33 |
+
$(o).css('backgroundColor', '#'+$(o).data('color')).next().val($(o).data('color'));
|
34 |
+
$(o).colpick({
|
35 |
+
layout: 'hex',
|
36 |
+
submit: 0,
|
37 |
+
color: '#'+$(o).data('color'),
|
38 |
+
onChange: function(hsb,hex,rgb,el,bySetColor) {
|
39 |
+
$(el).css('backgroundColor', '#'+hex).next().val(hex);
|
40 |
+
}
|
41 |
+
})
|
42 |
+
});
|
43 |
+
|
44 |
+
$('.filter_settings_tabs').on('click', 'a', function (event) {
|
45 |
+
event.preventDefault();
|
46 |
+
$id = $(this).attr('href');
|
47 |
+
$('.tab-item.current').removeClass('current');
|
48 |
+
$($id).addClass('current');
|
49 |
+
|
50 |
+
$('.filter_settings_tabs .nav-tab').removeClass('nav-tab-active');
|
51 |
+
$(this).addClass('nav-tab-active');
|
52 |
+
});
|
53 |
+
|
54 |
+
$(document).on('change', '.berocket_aapf_widget_admin_widget_type_select', function () {
|
55 |
+
$parent = $(this).parents('form');
|
56 |
+
if ( $(this).val() == 'filter' ) {
|
57 |
+
$('.berocket_aapf_admin_filter_widget_content', $parent).show();
|
58 |
+
} else if( $(this).val() == 'update_button' ) {
|
59 |
+
$('.berocket_aapf_admin_filter_widget_content', $parent).hide();
|
60 |
+
} else if( $(this).val() == 'selected_area' ) {
|
61 |
+
$('.berocket_aapf_admin_filter_widget_content', $parent).hide();
|
62 |
+
}
|
63 |
+
});
|
64 |
+
})
|
65 |
+
})(jQuery);
|
js/widget.min.js
CHANGED
@@ -1 +1,536 @@
|
|
1 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* packer link http://dean.edwards.name/packer/ */
|
2 |
+
|
3 |
+
(function ($){
|
4 |
+
$(document).ready(function (){
|
5 |
+
|
6 |
+
var berocket_aapf_widget_product_filters = [],
|
7 |
+
berocket_aapf_widget_product_limits = [],
|
8 |
+
berocket_aapf_widget_product_price_limit = [],
|
9 |
+
woocommerce_pagination_page = 1,
|
10 |
+
berocket_aapf_widget_wait_for_button = false,
|
11 |
+
berocket_aapf_widget_selected_filters = [],
|
12 |
+
berocket_aapf_widget_first_page_jump = false;
|
13 |
+
|
14 |
+
if( $('.woocommerce-pagination').hasClass('.woocommerce-pagination') ){
|
15 |
+
woocommerce_pagination_page = parseInt( $('.woocommerce-pagination .current').text() );
|
16 |
+
if( woocommerce_pagination_page < 1 ) woocommerce_pagination_page = 1;
|
17 |
+
}
|
18 |
+
|
19 |
+
if( $('.berocket_aapf_widget_update_button').hasClass('berocket_aapf_widget_update_button') ){
|
20 |
+
berocket_aapf_widget_wait_for_button = true;
|
21 |
+
}
|
22 |
+
|
23 |
+
function berocket_fire( func ){
|
24 |
+
if ( typeof the_ajax_script.user_func != 'undefined'
|
25 |
+
&& the_ajax_script.user_func != null
|
26 |
+
&& typeof func != 'undefined'
|
27 |
+
&& func.length > 0
|
28 |
+
) {
|
29 |
+
eval( func );
|
30 |
+
}
|
31 |
+
}
|
32 |
+
|
33 |
+
function update_selected_area() {
|
34 |
+
if ( ! $('.berocket_aapf_widget_selected_area').hasClass('berocket_aapf_widget_selected_area') ) {
|
35 |
+
return false;
|
36 |
+
}
|
37 |
+
tmp_html = '';
|
38 |
+
prev_label = '';
|
39 |
+
el_type = '';
|
40 |
+
$(berocket_aapf_widget_selected_filters).each(function (i, $el) {
|
41 |
+
if ( $el.is('select') ) {
|
42 |
+
label = $el.data('taxonomy').slice(3).charAt(0).toUpperCase() + $el.data('taxonomy').slice(4);
|
43 |
+
option = $el.find('option:selected').text();
|
44 |
+
el_type = 'select';
|
45 |
+
el_id = $el.attr('id');
|
46 |
+
} else if ( $el.is('input') ) {
|
47 |
+
label = $el.data('taxonomy').slice(3).charAt(0).toUpperCase() + $el.data('taxonomy').slice(4);
|
48 |
+
option = $el.closest('li').find('label').text();
|
49 |
+
el_type = $el.attr('type');
|
50 |
+
el_id = $el.attr('id');
|
51 |
+
} else if ( $el.hasClass('berocket_filter_slider') ) {
|
52 |
+
val1 = $('#'+$el.data('fields_1')).val();
|
53 |
+
val2 = $('#'+$el.data('fields_2')).val();
|
54 |
+
if ( val1 != $el.data('min') || val2 != $el.data('max') ) {
|
55 |
+
if ( $el.hasClass('berocket_filter_price_slider') ) {
|
56 |
+
label = 'Price';
|
57 |
+
} else {
|
58 |
+
label = $el.data('taxonomy').slice(3).charAt(0).toUpperCase() + $el.data('taxonomy').slice(4);
|
59 |
+
}
|
60 |
+
}
|
61 |
+
el_type = 'slider';
|
62 |
+
el_id = $el.data('fields_2');
|
63 |
+
option = val1+' - '+val2;
|
64 |
+
}
|
65 |
+
|
66 |
+
option = '<li><a href="Unselect '+label+'" data-el_type="'+el_type+'" data-el_id="'+el_id+'">'+option+'</a></li>';
|
67 |
+
|
68 |
+
if ( prev_label == '' ) {
|
69 |
+
tmp_html += '<div><span>'+label+'</span><ul>'+option;
|
70 |
+
} else if ( prev_label == label ) {
|
71 |
+
tmp_html += option;
|
72 |
+
} else {
|
73 |
+
tmp_html += '</ul></div><div><span>'+label+'</span><ul>'+option;
|
74 |
+
}
|
75 |
+
|
76 |
+
prev_label = label;
|
77 |
+
});
|
78 |
+
|
79 |
+
if ( tmp_html == '' ) {
|
80 |
+
$('.berocket_aapf_widget_selected_area').html('').hide().prev().hide();
|
81 |
+
} else {
|
82 |
+
tmp_html += '</ul></div>';
|
83 |
+
$('.berocket_aapf_widget_selected_area').html(tmp_html).show().prev().show();
|
84 |
+
}
|
85 |
+
}
|
86 |
+
|
87 |
+
function update_data_containers() {
|
88 |
+
berocket_aapf_widget_product_filters = [];
|
89 |
+
berocket_aapf_widget_selected_filters = [];
|
90 |
+
$('.berocket_aapf_widget li:not(.slider) input, .berocket_aapf_widget li:not(slider) select').each(function (i,o) {
|
91 |
+
$el = $(o);
|
92 |
+
|
93 |
+
if ( $el.is("select") ) {
|
94 |
+
el_data = $el.find("option:selected").data();
|
95 |
+
|
96 |
+
var el_show = true;
|
97 |
+
$(berocket_aapf_widget_product_filters).each(function (i, o) {
|
98 |
+
if (o[0] == el_data.taxonomy) {
|
99 |
+
el_show = false;
|
100 |
+
}
|
101 |
+
});
|
102 |
+
if( el_show && $el.val() ){
|
103 |
+
berocket_aapf_widget_product_filters[berocket_aapf_widget_product_filters.length] = [el_data.taxonomy, el_data.term_id, el_data.operator];
|
104 |
+
berocket_aapf_widget_selected_filters[berocket_aapf_widget_selected_filters.length] = $el;
|
105 |
+
}
|
106 |
+
} else {
|
107 |
+
el_data = $el.data();
|
108 |
+
|
109 |
+
var el_show = true;
|
110 |
+
$(berocket_aapf_widget_product_filters).each(function (i, o) {
|
111 |
+
if (o[0] == el_data.taxonomy && o[1] == el_data.term_id) {
|
112 |
+
el_show = false;
|
113 |
+
}
|
114 |
+
});
|
115 |
+
|
116 |
+
if (el_show && ($el.is(':checked') || $el.is(':selected'))) {
|
117 |
+
berocket_aapf_widget_product_filters[berocket_aapf_widget_product_filters.length] = [el_data.taxonomy, el_data.term_id, el_data.operator];
|
118 |
+
berocket_aapf_widget_selected_filters[berocket_aapf_widget_selected_filters.length] = $el;
|
119 |
+
}
|
120 |
+
}
|
121 |
+
});
|
122 |
+
|
123 |
+
berocket_aapf_widget_product_limits = [];
|
124 |
+
berocket_aapf_widget_product_price_limit = [];
|
125 |
+
$t = $('.berocket_filter_slider');
|
126 |
+
if( $t.hasClass('berocket_filter_slider') ){
|
127 |
+
$t.each(function (i,o){
|
128 |
+
val1 = $('#'+$(o).data('fields_1')).val();
|
129 |
+
val2 = $('#'+$(o).data('fields_2')).val();
|
130 |
+
if( val1 != $(o).data('min') || val2 != $(o).data('max') ){
|
131 |
+
berocket_aapf_widget_selected_filters[berocket_aapf_widget_selected_filters.length] = $(o);
|
132 |
+
if( $(o).hasClass('berocket_filter_price_slider') ){
|
133 |
+
berocket_aapf_widget_product_price_limit = [val1, val2];
|
134 |
+
} else {
|
135 |
+
var add_limit = true;
|
136 |
+
for( i = 0 ; i < berocket_aapf_widget_product_limits.length ; i++ ) {
|
137 |
+
if( berocket_aapf_widget_product_limits[ i ][ 0 ] == $(o).data( 'taxonomy' ) ) {
|
138 |
+
add_limit = false;
|
139 |
+
}
|
140 |
+
}
|
141 |
+
if( add_limit ) {
|
142 |
+
berocket_aapf_widget_product_limits[berocket_aapf_widget_product_limits.length] = [$(o).data('taxonomy'), val1, val2];
|
143 |
+
}
|
144 |
+
}
|
145 |
+
}
|
146 |
+
});
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
function updateProducts( $force ){
|
151 |
+
if ( typeof $force == 'undefined' ) $force = false;
|
152 |
+
// if we have update_button on the page we must wait for it to be clicked
|
153 |
+
if ( ! $force && berocket_aapf_widget_wait_for_button ) return false;
|
154 |
+
|
155 |
+
// call user func before_update
|
156 |
+
if( the_ajax_script.user_func != null )
|
157 |
+
berocket_fire( the_ajax_script.user_func.before_update );
|
158 |
+
|
159 |
+
$(the_ajax_script.products_holder_id).addClass('hide_products').append('<div class="berocket_aapf_widget_loading" />');
|
160 |
+
|
161 |
+
update_data_containers();
|
162 |
+
update_selected_area();
|
163 |
+
|
164 |
+
args = {
|
165 |
+
terms: berocket_aapf_widget_product_filters,
|
166 |
+
price: berocket_aapf_widget_product_price_limit,
|
167 |
+
limits: berocket_aapf_widget_product_limits,
|
168 |
+
product_cat: the_ajax_script.product_cat,
|
169 |
+
action: 'berocket_aapf_listener',
|
170 |
+
orderby: $('.woocommerce-ordering select.orderby').val()
|
171 |
+
};
|
172 |
+
|
173 |
+
if( the_ajax_script.seo_friendly_urls && 'history' in window && 'pushState' in history ) {
|
174 |
+
updateLocation(args);
|
175 |
+
args.location = location.href;
|
176 |
+
}else{
|
177 |
+
args.location = the_ajax_script.current_page_url;
|
178 |
+
|
179 |
+
cur_page = $('.woocommerce-pagination span.current').text();
|
180 |
+
if( prev_page = location.href.replace(/.+\/page\/([0-9]+).+/, "$1") ){
|
181 |
+
if( ! parseInt( cur_page ) ){
|
182 |
+
cur_page = prev_page;
|
183 |
+
}
|
184 |
+
if(berocket_aapf_widget_first_page_jump) {
|
185 |
+
cur_page = 1;
|
186 |
+
}
|
187 |
+
args.location = args.location.replace(/\/?/,"") + "/page/" + cur_page + "/";
|
188 |
+
}else if( prev_page = location.href.replace(/.+paged?=([0-9]+).+/, "$1") ){
|
189 |
+
if( ! parseInt( cur_page ) ){
|
190 |
+
cur_page = prev_page;
|
191 |
+
}
|
192 |
+
if(berocket_aapf_widget_first_page_jump) {
|
193 |
+
cur_page = 1;
|
194 |
+
}
|
195 |
+
args.location = args.location.replace(/\/?/,"") + "/?page=" + cur_page + "";
|
196 |
+
}
|
197 |
+
}
|
198 |
+
|
199 |
+
$.post(the_ajax_script.ajaxurl, args, function (data) {
|
200 |
+
berocket_aapf_widget_first_page_jump = false;
|
201 |
+
$('.woocommerce-result-count').remove();
|
202 |
+
$('.woocommerce-pagination').remove();
|
203 |
+
$('form.woocommerce-ordering').remove();
|
204 |
+
|
205 |
+
// call user func on_update
|
206 |
+
if( the_ajax_script.user_func != null )
|
207 |
+
berocket_fire( the_ajax_script.user_func.on_update );
|
208 |
+
|
209 |
+
if ( $('.woocommerce-info').hasClass('woocommerce-info') && ! $(the_ajax_script.products_holder_id).is(':visible') ) {
|
210 |
+
if ( typeof data.products != 'undefined' ) {
|
211 |
+
$('.woocommerce-info').replaceWith(data.products);
|
212 |
+
}
|
213 |
+
} else {
|
214 |
+
if ( typeof data.no_products != 'undefined' ) {
|
215 |
+
$(the_ajax_script.products_holder_id).html(data.no_products).removeClass('hide_products');
|
216 |
+
} else {
|
217 |
+
$(the_ajax_script.products_holder_id).replaceWith(data.products).removeClass('hide_products');
|
218 |
+
}
|
219 |
+
}
|
220 |
+
|
221 |
+
$('.berocket_aapf_widget_loading').remove();
|
222 |
+
|
223 |
+
aapf_action_init();
|
224 |
+
|
225 |
+
// call user func after_update
|
226 |
+
if( the_ajax_script.user_func != null )
|
227 |
+
berocket_fire( the_ajax_script.user_func.after_update );
|
228 |
+
}, "json");
|
229 |
+
}
|
230 |
+
|
231 |
+
function updateLocation( args ){
|
232 |
+
uri_request_array = [];
|
233 |
+
uri_request = '';
|
234 |
+
temp_terms = [];
|
235 |
+
|
236 |
+
if( args.orderby && $('.woocommerce-ordering select.orderby option:first').attr('value') != args.orderby ){
|
237 |
+
uri_request += 'order-'+args.orderby;
|
238 |
+
}
|
239 |
+
if( args.product_cat && args.product_cat > 0 ){
|
240 |
+
if( uri_request ) uri_request += "|";
|
241 |
+
uri_request += 'pcategory-'+args.product_cat;
|
242 |
+
}
|
243 |
+
if( args.price ){
|
244 |
+
$price_obj = $('.berocket_filter_price_slider');
|
245 |
+
if( args.price[0] && args.price[1] && ( args.price[0] != $price_obj.data('min') || args.price[1] != $price_obj.data('max') ) ){
|
246 |
+
if( uri_request ) uri_request += "|";
|
247 |
+
uri_request += 'price['+args.price[0]+'_'+args.price[1]+']';
|
248 |
+
}
|
249 |
+
}
|
250 |
+
|
251 |
+
if( args.limits ){
|
252 |
+
$(args.limits).each(function (i,o){
|
253 |
+
if( !in_array( o[0].substring(3), temp_terms ) ){
|
254 |
+
temp_terms[temp_terms.length] = o[0].substring(3);
|
255 |
+
}
|
256 |
+
if( typeof uri_request_array[in_array( o[0].substring(3), temp_terms )] == 'undefined' ) {
|
257 |
+
uri_request_array[in_array(o[0].substring(3), temp_terms)] = [];
|
258 |
+
}
|
259 |
+
|
260 |
+
uri_request_array[in_array( o[0].substring(3), temp_terms )]
|
261 |
+
[uri_request_array[in_array( o[0].substring(3), temp_terms )].length] = [o[1],o[2]];
|
262 |
+
});
|
263 |
+
}
|
264 |
+
if( args.terms ){
|
265 |
+
$(args.terms).each(function (i,o){
|
266 |
+
if( !in_array( o[0].substring(3), temp_terms ) ){
|
267 |
+
temp_terms[temp_terms.length] = o[0].substring(3);
|
268 |
+
}
|
269 |
+
if( typeof uri_request_array[in_array( o[0].substring(3), temp_terms )] == 'undefined' ) {
|
270 |
+
uri_request_array[in_array(o[0].substring(3), temp_terms)] = [];
|
271 |
+
}
|
272 |
+
|
273 |
+
uri_request_array[in_array( o[0].substring(3), temp_terms )]
|
274 |
+
[uri_request_array[in_array( o[0].substring(3), temp_terms )].length] = [o[1],o[2]];
|
275 |
+
});
|
276 |
+
}
|
277 |
+
|
278 |
+
var uri = the_ajax_script.current_page_url;
|
279 |
+
|
280 |
+
if( uri_request_array.length ){
|
281 |
+
$(uri_request_array).each(function (i,o){
|
282 |
+
if( uri_request ) uri_request += "|";
|
283 |
+
|
284 |
+
if( typeof o != 'object' ){
|
285 |
+
uri_request += o;
|
286 |
+
}else{
|
287 |
+
cnt_oo = false;
|
288 |
+
uri_request += temp_terms[i]+'[';
|
289 |
+
|
290 |
+
$(o).each(function (ii,oo){
|
291 |
+
if( ( oo[1] == 'AND' || oo[1] == 'OR' ) ){
|
292 |
+
if( cnt_oo ){
|
293 |
+
if(oo[1] == 'AND'){
|
294 |
+
uri_request += '+';
|
295 |
+
}else{
|
296 |
+
uri_request += '-';
|
297 |
+
}
|
298 |
+
}
|
299 |
+
}else{
|
300 |
+
oo[0] += '_'+oo[1];
|
301 |
+
}
|
302 |
+
uri_request += oo[0];
|
303 |
+
cnt_oo = true;
|
304 |
+
});
|
305 |
+
uri_request += ']'
|
306 |
+
}
|
307 |
+
});
|
308 |
+
}
|
309 |
+
|
310 |
+
cur_page = $('.woocommerce-pagination span.current').text();
|
311 |
+
if( prev_page = parseInt( location.href.replace(/.+\/page\/([0-9]+).+/, "$1") ) ){
|
312 |
+
if( ! parseInt( cur_page ) ){
|
313 |
+
cur_page = prev_page;
|
314 |
+
}
|
315 |
+
if(berocket_aapf_widget_first_page_jump) {
|
316 |
+
cur_page = 1;
|
317 |
+
}
|
318 |
+
uri = uri.replace(/\/?$/,"") + "/page/" + cur_page + "/";
|
319 |
+
if( uri_request ){
|
320 |
+
uri = uri + "?filters=" + uri_request;
|
321 |
+
}
|
322 |
+
}else{
|
323 |
+
something_added = false;
|
324 |
+
if( /\?/.test(location.href) ){
|
325 |
+
passed_vars1 = location.href.split('?');
|
326 |
+
if( passed_vars1[1] ){
|
327 |
+
passed_vars2 = [];
|
328 |
+
temp2 = [];
|
329 |
+
if( /&/.test(passed_vars1[1]) ) {
|
330 |
+
passed_vars2 = passed_vars1[1].split('&');
|
331 |
+
passed_vars2_length = passed_vars2.length;
|
332 |
+
for ( k = 0; k < passed_vars2_length; k++ ){
|
333 |
+
temp = passed_vars2[k].split('=');
|
334 |
+
passed_vars2[k] = [];
|
335 |
+
passed_vars2[k][0] = temp.shift();
|
336 |
+
passed_vars2[k][1] = temp.join("=");
|
337 |
+
}
|
338 |
+
}else{
|
339 |
+
passed_vars2[0] = [];
|
340 |
+
temp = passed_vars1[1].split('=');
|
341 |
+
passed_vars2[0][0] = temp.shift();
|
342 |
+
passed_vars2[0][1] = temp.join("=");
|
343 |
+
}
|
344 |
+
for ( k = 0; k < passed_vars2.length; k++ ){
|
345 |
+
if( passed_vars2[k][0] == 'filters' || passed_vars2[k][0] == 'page' || passed_vars2[k][0] == 'paged' ) continue;
|
346 |
+
|
347 |
+
if( something_added ) uri += '&';
|
348 |
+
else uri += '/?';
|
349 |
+
|
350 |
+
uri += passed_vars2[k][0]+'='+passed_vars2[k][1];
|
351 |
+
something_added = true;
|
352 |
+
}
|
353 |
+
}
|
354 |
+
}
|
355 |
+
if(berocket_aapf_widget_first_page_jump) {
|
356 |
+
cur_page = 1;
|
357 |
+
}
|
358 |
+
if( something_added && uri_request ){
|
359 |
+
uri = uri + "&filters=" + uri_request;
|
360 |
+
if( cur_page > 1 ){
|
361 |
+
uri = uri + "&paged=" + parseInt( cur_page );
|
362 |
+
}
|
363 |
+
}else if( uri_request ){
|
364 |
+
uri = uri + "/?filters=" + uri_request;
|
365 |
+
if( cur_page > 1 ){
|
366 |
+
uri = uri + "&paged=" + parseInt( cur_page );
|
367 |
+
}
|
368 |
+
}else if( cur_page > 1 ){
|
369 |
+
uri = uri + "/?paged=" + parseInt( cur_page );
|
370 |
+
}
|
371 |
+
}
|
372 |
+
|
373 |
+
var stateParameters = { BeRocket: "Rules" };
|
374 |
+
history.pushState(stateParameters, "BeRocket Rules", uri);
|
375 |
+
history.pathname = uri;
|
376 |
+
}
|
377 |
+
|
378 |
+
function aapf_action_init(){
|
379 |
+
// Take control over (default) pagination and sorting, make it AJAXy and work with filters
|
380 |
+
$('.woocommerce-pagination').on('click', 'a', function (event) {
|
381 |
+
event.preventDefault();
|
382 |
+
if ( $(this).hasClass('next') ) {
|
383 |
+
_next_page = parseInt( $('.woocommerce-pagination span.current').text() ) + 1;
|
384 |
+
} else if ( $(this).hasClass('prev') ) {
|
385 |
+
_next_page = parseInt( $('.woocommerce-pagination span.current').text() ) - 1;
|
386 |
+
} else {
|
387 |
+
_next_page = $(this).text();
|
388 |
+
}
|
389 |
+
$('.woocommerce-pagination span.current').removeClass('current');
|
390 |
+
$(this).after("<span class='page-numbers current'>"+_next_page+"</span>").remove();
|
391 |
+
updateProducts(true);
|
392 |
+
});
|
393 |
+
}
|
394 |
+
|
395 |
+
function in_array(needle, haystack, strict) {
|
396 |
+
var found = false, key, strict = !!strict;
|
397 |
+
for (key in haystack) {
|
398 |
+
if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
|
399 |
+
found = key;
|
400 |
+
break;
|
401 |
+
}
|
402 |
+
}
|
403 |
+
return found;
|
404 |
+
}
|
405 |
+
|
406 |
+
$('.berocket_aapf_widget').on("change", "input, select", function(){
|
407 |
+
if($(this).data('first_page') == '1' || berocket_aapf_widget_first_page_jump)
|
408 |
+
berocket_aapf_widget_first_page_jump = true;
|
409 |
+
else
|
410 |
+
berocket_aapf_widget_first_page_jump = false;
|
411 |
+
if($(this).attr('type') == 'checkbox' || $(this).attr('type') == 'radio')
|
412 |
+
{
|
413 |
+
if($(this).prop('checked'))
|
414 |
+
{
|
415 |
+
$('.'+$(this).next('label').attr('for')).prop('checked', true);
|
416 |
+
}
|
417 |
+
else
|
418 |
+
{
|
419 |
+
$('.'+$(this).next('label').attr('for')).prop('checked', false);
|
420 |
+
}
|
421 |
+
} else if($(this).is('select'))
|
422 |
+
{
|
423 |
+
$('select.'+$(this).data('taxonomy')).val($(this).find('option:selected').val());
|
424 |
+
}
|
425 |
+
updateProducts();
|
426 |
+
});
|
427 |
+
|
428 |
+
$( ".berocket_filter_slider" ).each(function (i,o){
|
429 |
+
$(o).slider({
|
430 |
+
range: true,
|
431 |
+
min: parseFloat($(o).data('min')),
|
432 |
+
max: parseFloat($(o).data('max')),
|
433 |
+
values: [$(o).data('value1'),$(o).data('value2')],
|
434 |
+
slide: function( event, ui ) {
|
435 |
+
$o = $(ui.handle).parents('div.berocket_filter_slider');
|
436 |
+
vals = ui.values;
|
437 |
+
if( $(o).hasClass('berocket_filter_price_slider') ){
|
438 |
+
vals[0] = vals[0].toFixed(2);
|
439 |
+
vals[1] = vals[1].toFixed(2);
|
440 |
+
}
|
441 |
+
$( '#'+$o.data('fields_1') ).val( vals[0] );
|
442 |
+
$( '#'+$o.data('fields_2') ).val( vals[1] );
|
443 |
+
|
444 |
+
if($(o).data('first_page') == '1' || berocket_aapf_widget_first_page_jump)
|
445 |
+
berocket_aapf_widget_first_page_jump = true;
|
446 |
+
else
|
447 |
+
berocket_aapf_widget_first_page_jump = false;
|
448 |
+
$('.slide div').each(function(i, obj)
|
449 |
+
{
|
450 |
+
if($(obj).data('taxonomy') == $(o).data('taxonomy'))
|
451 |
+
{
|
452 |
+
$(obj).slider("values", vals);
|
453 |
+
$( '#'+$(obj).data('fields_1') ).val( vals[0] );
|
454 |
+
$( '#'+$(obj).data('fields_2') ).val( vals[1] );
|
455 |
+
}
|
456 |
+
});
|
457 |
+
},
|
458 |
+
stop: function( ){
|
459 |
+
updateProducts();
|
460 |
+
}
|
461 |
+
});
|
462 |
+
});
|
463 |
+
|
464 |
+
$(".berocket_aapf_widget_height_control").each(function (i,o){
|
465 |
+
$(o).mCustomScrollbar({
|
466 |
+
axis: "xy",
|
467 |
+
theme: $(o).data('scroll_theme'),
|
468 |
+
scrollInertia: 300
|
469 |
+
});
|
470 |
+
});
|
471 |
+
|
472 |
+
$(".berocket_aapf_widget_selected_area").on('click', 'a', function (event){
|
473 |
+
event.preventDefault();
|
474 |
+
$obj = $(this);
|
475 |
+
el_type = $obj.data('el_type');
|
476 |
+
if ( el_type == 'checkbox' ) {
|
477 |
+
$('#'+$obj.data('el_id')+'-styler').click();
|
478 |
+
} else if ( el_type == 'radio' ) {
|
479 |
+
$('#'+$obj.data('el_id')+'-styler').reset();
|
480 |
+
} else if ( el_type == 'select' ) {
|
481 |
+
$('#'+$obj.data('el_id')+' option:selected').prop('checked', false);
|
482 |
+
} else if ( el_type == 'slider' ) {
|
483 |
+
$slider = $('#'+$obj.data('el_id')).closest('li').find('.berocket_filter_slider');
|
484 |
+
|
485 |
+
val1 = parseFloat($slider.data('min'));
|
486 |
+
val2 = parseFloat($slider.data('max'));
|
487 |
+
|
488 |
+
if( $slider.hasClass('berocket_filter_price_slider') ){
|
489 |
+
val1 = val1.toFixed(2);
|
490 |
+
val2 = val2.toFixed(2);
|
491 |
+
}
|
492 |
+
|
493 |
+
$( '#'+$slider.data('fields_1') ).val( val1 );
|
494 |
+
$( '#'+$slider.data('fields_2') ).val( val2 );
|
495 |
+
|
496 |
+
$slider.slider( "values", [ val1, val2 ] );
|
497 |
+
|
498 |
+
updateProducts();
|
499 |
+
}
|
500 |
+
});
|
501 |
+
|
502 |
+
// Option to take control over (default) sorting, make it AJAXy and work with filters
|
503 |
+
if( the_ajax_script.control_sorting ) {
|
504 |
+
$(document).on('submit', 'form.woocommerce-ordering', function (event) {
|
505 |
+
event.preventDefault();
|
506 |
+
});
|
507 |
+
$(document).on('change', 'select.orderby', function (event) {
|
508 |
+
event.preventDefault();
|
509 |
+
updateProducts(true);
|
510 |
+
});
|
511 |
+
}
|
512 |
+
|
513 |
+
aapf_action_init();
|
514 |
+
|
515 |
+
$(document).on('click', '.berocket_aapf_widget_update_button', function (event) {
|
516 |
+
event.preventDefault();
|
517 |
+
updateProducts(true);
|
518 |
+
});
|
519 |
+
|
520 |
+
update_data_containers();
|
521 |
+
update_selected_area();
|
522 |
+
|
523 |
+
$(document).on('click', '.berocket_label_widgets', function(event) {
|
524 |
+
if( $(this).prev('input').attr('type') == 'checkbox' || $(this).prev('input').attr('type') == 'radio' ) {
|
525 |
+
event.preventDefault();
|
526 |
+
if($(this).prev('input').prop('checked')) {
|
527 |
+
$('.'+$(this).attr('for')).prop('checked', false);
|
528 |
+
} else {
|
529 |
+
$('.'+$(this).attr('for')).prop('checked', true);
|
530 |
+
}
|
531 |
+
$(this).prev('input').trigger('change');
|
532 |
+
}
|
533 |
+
});
|
534 |
+
|
535 |
+
});
|
536 |
+
})(jQuery);
|
readme.txt
CHANGED
@@ -2,18 +2,18 @@
|
|
2 |
Plugin Name: Advanced AJAX Product Filters
|
3 |
Contributors: dholovnia, berocket
|
4 |
Donate link: http://berocket.com
|
5 |
-
Tags: filters, product filters, ajax product filters, advanced product filters, woocommerce filters, woocommerce product filters, woocommerce ajax product filters
|
6 |
Requires at least: 3.9
|
7 |
Tested up to: 4.2.2
|
8 |
-
Stable tag: 1.1.0.
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
12 |
-
WooCommerce AJAX Filters - advanced AJAX product filters plugin for WooCommerce.
|
13 |
|
14 |
== Description ==
|
15 |
|
16 |
-
WooCommerce AJAX Filters - advanced AJAX product filters plugin for WooCommerce. Add unlimited filters with one widget.
|
17 |
|
18 |
= Features: =
|
19 |
|
@@ -28,29 +28,46 @@ WooCommerce AJAX Filters - advanced AJAX product filters plugin for WooCommerce.
|
|
28 |
* Drag and Drop Filter Building
|
29 |
* And More...
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
= Demo =
|
32 |
http://woocommerce-product-filter.berocket.com
|
33 |
|
|
|
34 |
= How It Works: =
|
35 |
*check installation*
|
36 |
|
37 |
|
38 |
-
=
|
|
|
|
|
|
|
|
|
|
|
39 |
* Custom CSS class can be added per widget/filter
|
40 |
* Update button - if added products will be updated only when user click Update button
|
41 |
* Radio-box can be unselected by clicking it again
|
42 |
-
* Urls are shortened using better structure to save filters
|
43 |
-
* Fixed issue with shortened tags for shortcode.
|
44 |
-
* Widget now has subcategories(hierarchy) to show all possible categories
|
45 |
* Minor fixes
|
46 |
|
47 |
|
|
|
48 |
= Shortcode: =
|
49 |
* In editor `[br_filters attribute=price type=slider title="Price Filter"]`
|
50 |
* In PHP `do_shortcode('[br_filters attribute=price type=slider title="Price Filter"]');`
|
51 |
|
52 |
= Shortcode Options: =
|
53 |
-
* `widget_type` - filter or update_button
|
54 |
* `attribute`(required) - product attribute, eg price or length. Don't forget that woocommerce adding pa_ suffix for created attributes.
|
55 |
So if you create new attribute `jump` its name is `pa_jump`
|
56 |
* `type`(required) - checkbox, radio, slider or select
|
@@ -64,7 +81,6 @@ http://woocommerce-product-filter.berocket.com
|
|
64 |
|
65 |
= Advanced Settings (Widget area): =
|
66 |
|
67 |
-
* CSS Class - if you want to style filters in different manner you can add class here and use it in css
|
68 |
* Product Category - if you want to pin your filter to category of the product this is good place to do it.
|
69 |
Eg. You selling Phones and Cases for them. If user choose Category "Phones" filter "Have Wi-Fi" will appear
|
70 |
but if user will choose "Cases" it will not be there as Admin set that "Have Wi-Fi" filter will be visible only on
|
@@ -96,9 +112,10 @@ http://woocommerce-product-filter.berocket.com
|
|
96 |
|
97 |
= Step 2: =
|
98 |
* Install and activate plugin
|
99 |
-
*
|
|
|
100 |
* In Available Widgets ( left side of the screen ) find AJAX Product Filters
|
101 |
-
* Drag it to Sidebar you choose
|
102 |
* Enter title, choose attribute that will be used for filtering products, choose filter type,
|
103 |
choose operator( whether product should have all selected values (AND) or one of them (OR) ),
|
104 |
* Click save and go to your shop to check how it work.
|
@@ -115,6 +132,13 @@ http://woocommerce-product-filter.berocket.com
|
|
115 |
|
116 |
== Changelog ==
|
117 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
= 1.1.0.4 =
|
119 |
* Minor fix
|
120 |
|
2 |
Plugin Name: Advanced AJAX Product Filters
|
3 |
Contributors: dholovnia, berocket
|
4 |
Donate link: http://berocket.com
|
5 |
+
Tags: filters, product filters, ajax product filters, advanced product filters, woocommerce filters, woocommerce product filters, woocommerce ajax product filters, widget, plugin
|
6 |
Requires at least: 3.9
|
7 |
Tested up to: 4.2.2
|
8 |
+
Stable tag: 1.1.0.5
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
12 |
+
WooCommerce AJAX Product Filters - advanced AJAX product filters plugin for WooCommerce.
|
13 |
|
14 |
== Description ==
|
15 |
|
16 |
+
WooCommerce AJAX Product Filters - advanced AJAX product filters plugin for WooCommerce. Add unlimited filters with one widget.
|
17 |
|
18 |
= Features: =
|
19 |
|
28 |
* Drag and Drop Filter Building
|
29 |
* And More...
|
30 |
|
31 |
+
= Additional Features in Paid Plugin: =
|
32 |
+
|
33 |
+
* Filter by Attribute, Tag and Custom Taxonomy
|
34 |
+
* Customize filters look through admin
|
35 |
+
* Tag Cloud for Tag filter
|
36 |
+
* Slider can use strings as a value
|
37 |
+
* Filters can be collapsed by clicking on title, option to collapse filter on start
|
38 |
+
* Price Filter Custom Min and Max values
|
39 |
+
* Add custom CSS on admin settings page
|
40 |
+
* And More...
|
41 |
+
|
42 |
+
= Paid Plugin Link =
|
43 |
+
http://berocket.com/product/woocommerce-ajax-products-filter
|
44 |
+
|
45 |
= Demo =
|
46 |
http://woocommerce-product-filter.berocket.com
|
47 |
|
48 |
+
|
49 |
= How It Works: =
|
50 |
*check installation*
|
51 |
|
52 |
|
53 |
+
= In recent updates: =
|
54 |
+
* Jump to first page when filter changed
|
55 |
+
* Option to add text before and after price input fields
|
56 |
+
* Now only used values must be shown, not all
|
57 |
+
* Products are limited by category we are in
|
58 |
+
* Products amount on the first page fixed
|
59 |
* Custom CSS class can be added per widget/filter
|
60 |
* Update button - if added products will be updated only when user click Update button
|
61 |
* Radio-box can be unselected by clicking it again
|
|
|
|
|
|
|
62 |
* Minor fixes
|
63 |
|
64 |
|
65 |
+
|
66 |
= Shortcode: =
|
67 |
* In editor `[br_filters attribute=price type=slider title="Price Filter"]`
|
68 |
* In PHP `do_shortcode('[br_filters attribute=price type=slider title="Price Filter"]');`
|
69 |
|
70 |
= Shortcode Options: =
|
|
|
71 |
* `attribute`(required) - product attribute, eg price or length. Don't forget that woocommerce adding pa_ suffix for created attributes.
|
72 |
So if you create new attribute `jump` its name is `pa_jump`
|
73 |
* `type`(required) - checkbox, radio, slider or select
|
81 |
|
82 |
= Advanced Settings (Widget area): =
|
83 |
|
|
|
84 |
* Product Category - if you want to pin your filter to category of the product this is good place to do it.
|
85 |
Eg. You selling Phones and Cases for them. If user choose Category "Phones" filter "Have Wi-Fi" will appear
|
86 |
but if user will choose "Cases" it will not be there as Admin set that "Have Wi-Fi" filter will be visible only on
|
112 |
|
113 |
= Step 2: =
|
114 |
* Install and activate plugin
|
115 |
+
* First of all go to Admin area -> WooCommerce -> Product Filter and check what global options you can manage
|
116 |
+
* After that go to Admin area -> Appearance -> Widgets
|
117 |
* In Available Widgets ( left side of the screen ) find AJAX Product Filters
|
118 |
+
* Drag it to Sidebar you choose
|
119 |
* Enter title, choose attribute that will be used for filtering products, choose filter type,
|
120 |
choose operator( whether product should have all selected values (AND) or one of them (OR) ),
|
121 |
* Click save and go to your shop to check how it work.
|
132 |
|
133 |
== Changelog ==
|
134 |
|
135 |
+
= 1.1.0.5 =
|
136 |
+
* Enhancement - Option to add text before and after price input fields
|
137 |
+
* Enhancement - Jump to first page when filter changed
|
138 |
+
* Fix - Now only used values must be shown, not all
|
139 |
+
* Fix - Products are limited by category we are in
|
140 |
+
* Fix - Products amount on the first page is correct now
|
141 |
+
|
142 |
= 1.1.0.4 =
|
143 |
* Minor fix
|
144 |
|
templates/admin-settings.php
CHANGED
@@ -1,13 +1,14 @@
|
|
1 |
<div class="wrap">
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
<h2 class="nav-tab-wrapper filter_settings_tabs">
|
8 |
<a href="#general" class="nav-tab nav-tab-active">General</a>
|
9 |
<a href="#design" class="nav-tab">Design</a>
|
10 |
<a href="#javascript" class="nav-tab">JavaScript</a>
|
|
|
11 |
</h2>
|
12 |
<div id="general" class="tab-item current">
|
13 |
<table class="form-table">
|
@@ -66,7 +67,9 @@
|
|
66 |
</table>
|
67 |
</div>
|
68 |
<div id="design" class="tab-item">
|
69 |
-
|
|
|
|
|
70 |
</div>
|
71 |
<div id="javascript" class="tab-item">
|
72 |
<table class="form-table">
|
@@ -96,9 +99,26 @@
|
|
96 |
</tr>
|
97 |
</table>
|
98 |
</div>
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
</div>
|
1 |
<div class="wrap">
|
2 |
+
<form method="post" action="options.php">
|
3 |
+
<?php
|
4 |
+
settings_fields('br_filters_plugin_options');
|
5 |
+
$options = get_option('br_filters_options');
|
6 |
+
?>
|
7 |
<h2 class="nav-tab-wrapper filter_settings_tabs">
|
8 |
<a href="#general" class="nav-tab nav-tab-active">General</a>
|
9 |
<a href="#design" class="nav-tab">Design</a>
|
10 |
<a href="#javascript" class="nav-tab">JavaScript</a>
|
11 |
+
<a href="#customcss" class="nav-tab">Custom CSS</a>
|
12 |
</h2>
|
13 |
<div id="general" class="tab-item current">
|
14 |
<table class="form-table">
|
67 |
</table>
|
68 |
</div>
|
69 |
<div id="design" class="tab-item">
|
70 |
+
<a href="http://berocket.com/product/woocommerce-ajax-products-filter" target="_blank">
|
71 |
+
<img src="<?php echo AAPF_URL; ?>images/paid/styler.png" style="max-width: 100%;" />
|
72 |
+
</a>
|
73 |
</div>
|
74 |
<div id="javascript" class="tab-item">
|
75 |
<table class="form-table">
|
99 |
</tr>
|
100 |
</table>
|
101 |
</div>
|
102 |
+
<div id="customcss" class="tab-item">
|
103 |
+
<a href="http://berocket.com/product/woocommerce-ajax-products-filter" target="_blank">
|
104 |
+
<img src="<?php echo AAPF_URL; ?>images/paid/custom_css.png" style="max-width: 100%;" />
|
105 |
+
</a>
|
106 |
+
</div>
|
107 |
+
<p class="submit">
|
108 |
+
<input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
|
109 |
+
</p>
|
110 |
+
</form>
|
111 |
+
<h3>Receive more features and control with Paid version of the plugin:</h3>
|
112 |
+
<ul>
|
113 |
+
<li><b>- Filter by Attribute, Tag and Custom Taxonomy</b></li>
|
114 |
+
<li><b>- Customize filters look through admin</b></li>
|
115 |
+
<li><b>- Filters can be collapsed, option to collapse filter on start</b></li>
|
116 |
+
<li><b>- Price Filter Custom Min and Max values</b></li>
|
117 |
+
<li><b>- Tag Cloud for Tag filter</b></li>
|
118 |
+
<li><b>- Add custom CSS on admin settings page</b></li>
|
119 |
+
<li><b>- Slider can use strings as a value</b></li>
|
120 |
+
<li><b>- And More...</b></li>
|
121 |
+
</ul>
|
122 |
+
<h4>Support the plugin by purchasing paid version. This will provide faster growth, better support and much more functionality for the plugin!</h4>
|
123 |
+
<h4>Both <a href="https://wordpress.org/plugins/woocommerce-ajax-filters/" target="_blank">Free</a> and <a href="http://berocket.com/product/woocommerce-ajax-products-filter" target="_blank">Paid</a> versions of WooCommerce AJAX Product Filters developed by <a href="http://berocket.com" target="_blank">BeRocket</a></h4>
|
124 |
</div>
|
templates/admin.php
CHANGED
@@ -13,7 +13,7 @@
|
|
13 |
<label for="<?php echo $this->get_field_id( 'title' ); ?>">Title: </label>
|
14 |
<input id="<?php echo $this->get_field_id( 'title' ); ?>" type="text" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
|
15 |
</p>
|
16 |
-
<div class="berocket_aapf_admin_filter_widget_content" <?php if ( $instance['widget_type'] == 'update_button' or $instance['widget_type'] == 'selected_area' ) echo 'style="display: none;"'; ?>>
|
17 |
<p>
|
18 |
<label>Attribute:
|
19 |
<select id="<?php echo $this->get_field_id( 'attribute' ); ?>" name="<?php echo $this->get_field_name( 'attribute' ); ?>" class="berocket_aapf_widget_admin_attribute_select">
|
@@ -36,6 +36,7 @@
|
|
36 |
</select>
|
37 |
</label>
|
38 |
</p>
|
|
|
39 |
<p <?php if ( $instance['attribute'] == 'price' or $instance['type'] == 'slider' ) echo " style='display: none;'"; ?> >
|
40 |
<label>Operator:
|
41 |
<select id="<?php echo $this->get_field_id( 'operator' ); ?>" name="<?php echo $this->get_field_name( 'operator' ); ?>" class="berocket_aapf_widget_admin_operator_select">
|
@@ -44,6 +45,14 @@
|
|
44 |
</select>
|
45 |
</label>
|
46 |
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
<p>
|
48 |
<a href="#" class='berocket_aapf_advanced_settings_pointer'>Advanced Settings</a>
|
49 |
</p>
|
@@ -99,5 +108,11 @@
|
|
99 |
<?php endforeach; ?>
|
100 |
</select>
|
101 |
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
</div>
|
103 |
</div>
|
13 |
<label for="<?php echo $this->get_field_id( 'title' ); ?>">Title: </label>
|
14 |
<input id="<?php echo $this->get_field_id( 'title' ); ?>" type="text" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
|
15 |
</p>
|
16 |
+
<div class="berocket_aapf_admin_filter_widget_content" <?php if ( $instance['widget_type'] == 'update_button' or $instance['widget_type'] == 'selected_area' ){ echo 'style="display: none;"';} else { echo 'style="float: none;"'; } ?>>
|
17 |
<p>
|
18 |
<label>Attribute:
|
19 |
<select id="<?php echo $this->get_field_id( 'attribute' ); ?>" name="<?php echo $this->get_field_name( 'attribute' ); ?>" class="berocket_aapf_widget_admin_attribute_select">
|
36 |
</select>
|
37 |
</label>
|
38 |
</p>
|
39 |
+
|
40 |
<p <?php if ( $instance['attribute'] == 'price' or $instance['type'] == 'slider' ) echo " style='display: none;'"; ?> >
|
41 |
<label>Operator:
|
42 |
<select id="<?php echo $this->get_field_id( 'operator' ); ?>" name="<?php echo $this->get_field_name( 'operator' ); ?>" class="berocket_aapf_widget_admin_operator_select">
|
45 |
</select>
|
46 |
</label>
|
47 |
</p>
|
48 |
+
<p <?php if ( $instance['attribute'] != 'price' ) echo " style='display: none;'"; ?> class="berocket_aapf_widget_admin_price_attribute" >
|
49 |
+
<label for="<?php echo $this->get_field_id( 'text_before_price' ); ?>">Text before price: </label>
|
50 |
+
<input id="<?php echo $this->get_field_id( 'text_before_price' ); ?>" type="text" name="<?php echo $this->get_field_name( 'text_before_price' ); ?>" value="<?php echo $instance['text_before_price']; ?>" />
|
51 |
+
</p>
|
52 |
+
<p <?php if ( $instance['attribute'] != 'price' ) echo " style='display: none;'"; ?> class="berocket_aapf_widget_admin_price_attribute" >
|
53 |
+
<label for="<?php echo $this->get_field_id( 'text_after_price' ); ?>">Text after price: </label>
|
54 |
+
<input id="<?php echo $this->get_field_id( 'text_after_price' ); ?>" type="text" name="<?php echo $this->get_field_name( 'text_after_price' ); ?>" value="<?php echo $instance['text_after_price']; ?>" />
|
55 |
+
</p>
|
56 |
<p>
|
57 |
<a href="#" class='berocket_aapf_advanced_settings_pointer'>Advanced Settings</a>
|
58 |
</p>
|
108 |
<?php endforeach; ?>
|
109 |
</select>
|
110 |
</p>
|
111 |
+
<p>
|
112 |
+
<label>
|
113 |
+
<input type="checkbox" name="<?php echo $this->get_field_name( 'first_page_jump' ); ?>" <?php if ( $instance['first_page_jump'] ) echo 'checked'; ?> value="1" class="berocket_aapf_widget_admin_height_input" />
|
114 |
+
Jump to first page?
|
115 |
+
</label>
|
116 |
+
</p>
|
117 |
</div>
|
118 |
</div>
|
templates/checkbox.php
CHANGED
@@ -4,26 +4,32 @@
|
|
4 |
*
|
5 |
* Override this template by copying it to yourtheme/woocommerce-filters/checkbox.php
|
6 |
*
|
7 |
-
* @author
|
8 |
-
* @package
|
9 |
-
* @version
|
10 |
*/
|
11 |
?>
|
12 |
-
<?php
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
<?php
|
|
|
|
|
|
|
|
|
|
|
|
4 |
*
|
5 |
* Override this template by copying it to yourtheme/woocommerce-filters/checkbox.php
|
6 |
*
|
7 |
+
* @author BeRocket
|
8 |
+
* @package WooCommerce-Filters/Templates
|
9 |
+
* @version 1.0.1
|
10 |
*/
|
11 |
?>
|
12 |
+
<?php
|
13 |
+
if ( @ $terms ):
|
14 |
+
foreach( $terms as $term ):
|
15 |
+
?>
|
16 |
+
<li>
|
17 |
+
<span>
|
18 |
+
<input id='checkbox_<?=$term->term_id?>' class="<?php echo @ $uo['class']['checkbox_radio'] ?> checkbox_<?php echo $term->term_id ?>" type='checkbox' data-first_page='<?php echo (($first_page_jump) ? '1' : '0'); ?>'
|
19 |
+
data-term_id='<?php echo $term->term_id ?>' data-taxonomy='<?php echo $term->taxonomy ?>' data-operator='<?php echo $operator ?>'
|
20 |
+
<?php
|
21 |
+
if( @ $_POST['terms'] ){
|
22 |
+
foreach( $_POST['terms'] as $p_term ){
|
23 |
+
if( @ $p_term[0] == $term->taxonomy and $term->term_id == @ $p_term[1] ){
|
24 |
+
echo ' checked="checked"';
|
25 |
+
break;
|
26 |
+
}
|
27 |
+
}
|
28 |
+
}
|
29 |
+
?> /><label for='checkbox_<?php echo $term->term_id ?>' class="berocket_label_widgets"> <?php echo $term->name ?></label>
|
30 |
+
</span>
|
31 |
+
</li>
|
32 |
+
<?php
|
33 |
+
endforeach;
|
34 |
+
endif;
|
35 |
+
?>
|
templates/radio.php
CHANGED
@@ -1,19 +1,24 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
<?php
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$random_name = rand();
|
3 |
+
if ( $terms ):
|
4 |
+
foreach( $terms as $term ): ?>
|
5 |
+
<li>
|
6 |
+
<span>
|
7 |
+
<input class="<?php echo @ $uo['class']['checkbox_radio'] ?> radio_<?php echo $term->term_id?>" type='radio' id='radio_<?php echo $term->term_id?>_<?php echo $random_name ?>'
|
8 |
+
name='radio_<?php echo $term->taxonomy ?>_<?php echo $x ?>_<?php echo $random_name ?>'
|
9 |
+
data-term_id='<?php echo $term->term_id ?>' data-taxonomy='<?php echo $term->taxonomy ?>' data-operator='<?php echo $operator ?>' data-first_page='<?php echo (($first_page_jump) ? '1' : '0'); ?>'
|
10 |
+
<?php
|
11 |
+
if( @ $_POST['terms'] ){
|
12 |
+
foreach( $_POST['terms'] as $p_term ){
|
13 |
+
if( $p_term[0] == $term->taxonomy and $term->term_id == $p_term[1] ){
|
14 |
+
echo ' checked="checked"';
|
15 |
+
break;
|
16 |
+
}
|
17 |
+
}
|
18 |
+
}
|
19 |
+
?> /><label for='radio_<?php echo $term->term_id ?>' class="berocket_label_widgets"> <?php echo $term->name ?></label>
|
20 |
+
</span>
|
21 |
+
</li>
|
22 |
+
<?php endforeach;
|
23 |
+
endif;
|
24 |
+
?>
|
templates/select.php
CHANGED
@@ -1,22 +1,22 @@
|
|
1 |
<li>
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
</li>
|
1 |
<li>
|
2 |
+
<span>
|
3 |
+
<select class="<?php echo @ $uo['class']['selectbox'] ?> <?php echo $terms[0]->taxonomy?>" data-taxonomy='<?php echo $terms[0]->taxonomy ?>'>
|
4 |
+
<option data-taxonomy='<?php echo $terms[0]->taxonomy ?>' value=''>Any</option>
|
5 |
+
<?php foreach( $terms as $term ): ?>
|
6 |
+
<option value='<?php echo $term->term_id?>' data-term_id='<?php echo $term->term_id ?>' data-taxonomy='<?php echo $term->taxonomy ?>'
|
7 |
+
data-operator='<?php echo $operator ?>' data-first_page='<?php echo (($first_page_jump) ? '1' : '0'); ?>'
|
8 |
+
<?php
|
9 |
+
if( @ $_POST['terms'] ){
|
10 |
+
foreach( $_POST['terms'] as $p_term ){
|
11 |
+
if( $p_term[0] == $term->taxonomy and $term->term_id == $p_term[1] ){
|
12 |
+
echo ' selected="selected"';
|
13 |
+
break;
|
14 |
+
}
|
15 |
+
}
|
16 |
+
}
|
17 |
+
?>
|
18 |
+
><?php echo $term->name ?></option>
|
19 |
+
<?php endforeach; ?>
|
20 |
+
</select>
|
21 |
+
</span>
|
22 |
</li>
|
templates/slider.php
CHANGED
@@ -1,15 +1,19 @@
|
|
1 |
<?php $unique = rand( 0, time() ); ?>
|
2 |
<li class='<?php echo $main_class ?>'>
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
|
|
|
|
|
|
|
|
15 |
</li>
|
1 |
<?php $unique = rand( 0, time() ); ?>
|
2 |
<li class='<?php echo $main_class ?>'>
|
3 |
+
<span class='left'>
|
4 |
+
<?php echo $text_before_price ?><input type='text' disabled id='text_<?php echo $filter_slider_id . $unique ?>_1' value='<?php echo $slider_value1 ?>'
|
5 |
+
/><?php echo $text_after_price ?>
|
6 |
+
</span>
|
7 |
+
<span class='right'>
|
8 |
+
<?php echo $text_before_price ?><input type='text' disabled id='text_<?php echo $filter_slider_id . $unique ?>_2' value='<?php echo $slider_value2 ?>'
|
9 |
+
/><?php echo $text_after_price ?>
|
10 |
+
</span>
|
11 |
+
<span class='slide <?php echo @ $uo['class']['slider'] ?>'>
|
12 |
+
<div class='<?php echo $slider_class ?>' data-taxonomy='<?php echo $filter_slider_id ?>'
|
13 |
+
data-min='<?php echo $min ?>' data-max='<?php echo $max ?>'
|
14 |
+
data-value1='<?php echo $slider_value1 ?>' data-value2='<?php echo $slider_value2 ?>'
|
15 |
+
data-first_page='<?php echo (($first_page_jump) ? '1' : '0'); ?>'
|
16 |
+
data-fields_1='text_<?php echo $filter_slider_id . $unique ?>_1'
|
17 |
+
data-fields_2='text_<?php echo $filter_slider_id . $unique ?>_2'></div>
|
18 |
+
</span>
|
19 |
</li>
|
templates/widget_start.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<h3 class="widget-title berocket_aapf_widget-title <?php echo $css_class ?>"><?php echo $title ?></h3>
|
2 |
<ul class='berocket_aapf_widget <?php echo $class ?> <?php echo $css_class ?>' <?php echo $style ?> data-scroll_theme='<?php echo $scroll_theme ?>'>
|
1 |
+
<h3 class="widget-title berocket_aapf_widget-title <?php echo $css_class ?>"><span><?php echo $title ?></span></h3>
|
2 |
<ul class='berocket_aapf_widget <?php echo $class ?> <?php echo $css_class ?>' <?php echo $style ?> data-scroll_theme='<?php echo $scroll_theme ?>'>
|
woocommerce-filters.php
CHANGED
@@ -1,14 +1,15 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
*/
|
10 |
|
11 |
define( "AAPF_TEMPLATE_PATH", plugin_dir_path( __FILE__ ) . "templates/" );
|
|
|
12 |
|
13 |
require_once dirname( __FILE__ ).'/includes/widget.php';
|
14 |
require_once dirname( __FILE__ ).'/includes/functions.php';
|
@@ -36,6 +37,7 @@ class BeRocket_AAPF {
|
|
36 |
add_action( 'admin_init', array( __CLASS__, 'register_br_options' ) );
|
37 |
|
38 |
add_shortcode( 'br_filters', array( __CLASS__, 'shortcode' ) );
|
|
|
39 |
|
40 |
if( @ $_GET['filters'] and ! @ defined( 'DOING_AJAX' ) ) {
|
41 |
add_filter( 'pre_get_posts', array( __CLASS__, 'apply_user_filters' ) );
|
@@ -52,13 +54,16 @@ class BeRocket_AAPF {
|
|
52 |
'widget_type' => 'filter',
|
53 |
'attribute' => '',
|
54 |
'type' => 'checkbox',
|
|
|
55 |
'operator' => 'OR',
|
56 |
'title' => '',
|
57 |
-
'product_cat' =>
|
58 |
'cat_propagation' => '',
|
59 |
'height' => 'auto',
|
60 |
'scroll_theme' => 'dark',
|
61 |
), $atts );
|
|
|
|
|
62 |
if ( ! $a['attribute'] || ! $a['type'] ) return false;
|
63 |
|
64 |
$BeRocket_AAPF_Widget = new BeRocket_AAPF_Widget();
|
@@ -110,29 +115,48 @@ class BeRocket_AAPF {
|
|
110 |
global $wpdb;
|
111 |
|
112 |
if ( @ $_POST['limits'] ) {
|
113 |
-
$matched_products =
|
114 |
|
115 |
foreach ( $_POST['limits'] as $v ) {
|
116 |
$matched_products_query = $wpdb->get_results( $wpdb->prepare("
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
|
125 |
if ( $matched_products_query ) {
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
}
|
132 |
}
|
133 |
}
|
|
|
|
|
|
|
|
|
134 |
|
135 |
-
$matched_products = array_unique( $matched_products );
|
136 |
|
137 |
// Filter the id's
|
138 |
if ( sizeof( $filtered_posts ) == 0) {
|
@@ -150,14 +174,14 @@ class BeRocket_AAPF {
|
|
150 |
|
151 |
if ( @ $_POST['price'] ) {
|
152 |
$matched_products = array( 0 );
|
153 |
-
$min
|
154 |
-
$max
|
155 |
|
156 |
$matched_products_query = apply_filters( 'woocommerce_price_filter_results', $wpdb->get_results( $wpdb->prepare("
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
|
162 |
if ( $matched_products_query ) {
|
163 |
foreach ( $matched_products_query as $product ) {
|
@@ -214,8 +238,8 @@ class BeRocket_AAPF {
|
|
214 |
}
|
215 |
|
216 |
public static function br_add_defaults(){
|
217 |
-
$tmp = get_option('br_filters_options');
|
218 |
-
if(
|
219 |
delete_option( 'br_filters_options' );
|
220 |
update_option( 'br_filters_options', BeRocket_AAPF::$defaults );
|
221 |
}
|
@@ -225,6 +249,10 @@ class BeRocket_AAPF {
|
|
225 |
delete_option( 'br_filters_options' );
|
226 |
}
|
227 |
|
|
|
|
|
|
|
|
|
228 |
}
|
229 |
|
230 |
new BeRocket_AAPF;
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* Plugin Name: Advanced AJAX Product Filters for WooCommerce
|
4 |
+
* Plugin URI: http://berocket.com/wp-plugins/product-filters
|
5 |
+
* Description: Advanced AJAX Product Filters for WooCommerce
|
6 |
+
* Version: 1.1.0.5
|
7 |
+
* Author: BeRocket
|
8 |
+
* Author URI: http://berocket.com
|
9 |
+
*/
|
10 |
|
11 |
define( "AAPF_TEMPLATE_PATH", plugin_dir_path( __FILE__ ) . "templates/" );
|
12 |
+
define( "AAPF_URL", plugin_dir_url( __FILE__ ) );
|
13 |
|
14 |
require_once dirname( __FILE__ ).'/includes/widget.php';
|
15 |
require_once dirname( __FILE__ ).'/includes/functions.php';
|
37 |
add_action( 'admin_init', array( __CLASS__, 'register_br_options' ) );
|
38 |
|
39 |
add_shortcode( 'br_filters', array( __CLASS__, 'shortcode' ) );
|
40 |
+
add_filter( 'loop_shop_per_page', array( __CLASS__, 'loop_shop_per_page' ), 99 );
|
41 |
|
42 |
if( @ $_GET['filters'] and ! @ defined( 'DOING_AJAX' ) ) {
|
43 |
add_filter( 'pre_get_posts', array( __CLASS__, 'apply_user_filters' ) );
|
54 |
'widget_type' => 'filter',
|
55 |
'attribute' => '',
|
56 |
'type' => 'checkbox',
|
57 |
+
'filter_type' => 'attribute',
|
58 |
'operator' => 'OR',
|
59 |
'title' => '',
|
60 |
+
'product_cat' => null,
|
61 |
'cat_propagation' => '',
|
62 |
'height' => 'auto',
|
63 |
'scroll_theme' => 'dark',
|
64 |
), $atts );
|
65 |
+
if(isset($a['product_cat']))
|
66 |
+
$a['product_cat'] = json_encode(explode("|",$a['product_cat']));
|
67 |
if ( ! $a['attribute'] || ! $a['type'] ) return false;
|
68 |
|
69 |
$BeRocket_AAPF_Widget = new BeRocket_AAPF_Widget();
|
115 |
global $wpdb;
|
116 |
|
117 |
if ( @ $_POST['limits'] ) {
|
118 |
+
$matched_products = false;
|
119 |
|
120 |
foreach ( $_POST['limits'] as $v ) {
|
121 |
$matched_products_query = $wpdb->get_results( $wpdb->prepare("
|
122 |
+
SELECT DISTINCT ID, post_parent, post_type FROM $wpdb->posts
|
123 |
+
INNER JOIN $wpdb->term_relationships as tr ON ID = tr.object_id
|
124 |
+
INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
|
125 |
+
INNER JOIN $wpdb->terms as t ON t.term_id = tt.term_id
|
126 |
+
WHERE post_type IN ( 'product', 'product_variation' ) AND post_status = 'publish'
|
127 |
+
AND tt.taxonomy = %s AND t.slug BETWEEN %d AND %d
|
128 |
+
", $v[0], $v[1], $v[2] ), OBJECT_K );
|
129 |
|
130 |
if ( $matched_products_query ) {
|
131 |
+
if($matched_products === false)
|
132 |
+
{
|
133 |
+
$matched_products = array( 0 );
|
134 |
+
foreach ( $matched_products_query as $product ) {
|
135 |
+
if ( $product->post_type == 'product' )
|
136 |
+
$matched_products[] = $product->ID;
|
137 |
+
if ( $product->post_parent > 0 && ! in_array( $product->post_parent, $matched_products ) )
|
138 |
+
$matched_products[] = $product->post_parent;
|
139 |
+
}
|
140 |
+
}
|
141 |
+
else
|
142 |
+
{
|
143 |
+
$new_products = array( 0 );
|
144 |
+
foreach ( $matched_products_query as $product ) {
|
145 |
+
if ( $product->post_type == 'product' && in_array($product->ID, $matched_products))
|
146 |
+
$new_products[] = $product->ID;
|
147 |
+
if ( $product->post_parent > 0 && ! in_array( $product->post_parent, $matched_products ) && in_array($product->post_parent, $matched_products))
|
148 |
+
$new_products[] = $product->post_parent;
|
149 |
+
}
|
150 |
+
$matched_products = $new_products;
|
151 |
}
|
152 |
}
|
153 |
}
|
154 |
+
if($matched_products === false)
|
155 |
+
{
|
156 |
+
$matched_products = array( 0 );
|
157 |
+
}
|
158 |
|
159 |
+
$matched_products = @ array_unique( $matched_products );
|
160 |
|
161 |
// Filter the id's
|
162 |
if ( sizeof( $filtered_posts ) == 0) {
|
174 |
|
175 |
if ( @ $_POST['price'] ) {
|
176 |
$matched_products = array( 0 );
|
177 |
+
$min = floatval( $_POST['price'][0] );
|
178 |
+
$max = floatval( $_POST['price'][1] );
|
179 |
|
180 |
$matched_products_query = apply_filters( 'woocommerce_price_filter_results', $wpdb->get_results( $wpdb->prepare("
|
181 |
+
SELECT DISTINCT ID, post_parent, post_type FROM $wpdb->posts
|
182 |
+
INNER JOIN $wpdb->postmeta ON ID = post_id
|
183 |
+
WHERE post_type IN ( 'product', 'product_variation' ) AND post_status = 'publish' AND meta_key = %s AND meta_value BETWEEN %d AND %d
|
184 |
+
", '_price', $min, $max ), OBJECT_K ), $min, $max );
|
185 |
|
186 |
if ( $matched_products_query ) {
|
187 |
foreach ( $matched_products_query as $product ) {
|
238 |
}
|
239 |
|
240 |
public static function br_add_defaults(){
|
241 |
+
$tmp = get_option( 'br_filters_options' );
|
242 |
+
if( @ $tmp['chk_default_options_db'] == '1' or ! @ is_array( $tmp ) ){
|
243 |
delete_option( 'br_filters_options' );
|
244 |
update_option( 'br_filters_options', BeRocket_AAPF::$defaults );
|
245 |
}
|
249 |
delete_option( 'br_filters_options' );
|
250 |
}
|
251 |
|
252 |
+
public static function loop_shop_per_page() {
|
253 |
+
return get_option( 'posts_per_page' );
|
254 |
+
}
|
255 |
+
|
256 |
}
|
257 |
|
258 |
new BeRocket_AAPF;
|