Advanced AJAX Product Filters - Version 1.0.3

Version Description

  • Enhancement - CSS and JavaScript files minimized
  • Enhancement - Settings page added
  • Enhancement - "No Products" message and it's class can be changed through admin
  • Enhancement - Option added that can enable control over sorting( if visible )
  • Enhancement - User can select several categories instead of one. Now you don't need to create several same filters for different categories.
  • Enhancement - Added option "include subcats?". if selected filter will be shown in selected categories and their subcategories
  • Fix - Adding support to themes that require product div to have "product" class
  • Fix - Slider in categories wasn't initialized
  • Fix - Subcategories wasn't working. Only Main categories were showing filters
  • Templating - return woocommerce/theme default structure for product
  • Templating - html parts moved to separate files in templates folder. You can overwrite them by creating folder "woocommerce-filters" and file with same name as in plugin templates folder.
Download this release

Release Info

Developer dholovnia
Plugin Icon wp plugin Advanced AJAX Product Filters
Version 1.0.3
Comparing to
See all releases

Code changes from version 1.0.2 to 1.0.3

css/admin.css CHANGED
@@ -1,6 +1 @@
1
- .berocket_aapf_advanced_settings{
2
- display: none;
3
- }
4
- .berocket_aapf_widget_admin_height_input{
5
- width: 43px;
6
- }
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;}
 
 
 
 
 
css/jquery-ui.css CHANGED
@@ -1,1225 +0,0 @@
1
- /*! jQuery UI - v1.11.2 - 2014-10-16
2
- * http://jqueryui.com
3
- * Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
- * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
6
-
7
- /* Layout helpers
8
- ----------------------------------*/
9
- .ui-helper-hidden {
10
- display: none;
11
- }
12
- .ui-helper-hidden-accessible {
13
- border: 0;
14
- clip: rect(0 0 0 0);
15
- height: 1px;
16
- margin: -1px;
17
- overflow: hidden;
18
- padding: 0;
19
- position: absolute;
20
- width: 1px;
21
- }
22
- .ui-helper-reset {
23
- margin: 0;
24
- padding: 0;
25
- border: 0;
26
- outline: 0;
27
- line-height: 1.3;
28
- text-decoration: none;
29
- font-size: 100%;
30
- list-style: none;
31
- }
32
- .ui-helper-clearfix:before,
33
- .ui-helper-clearfix:after {
34
- content: "";
35
- display: table;
36
- border-collapse: collapse;
37
- }
38
- .ui-helper-clearfix:after {
39
- clear: both;
40
- }
41
- .ui-helper-clearfix {
42
- min-height: 0; /* support: IE7 */
43
- }
44
- .ui-helper-zfix {
45
- width: 100%;
46
- height: 100%;
47
- top: 0;
48
- left: 0;
49
- position: absolute;
50
- opacity: 0;
51
- filter:Alpha(Opacity=0); /* support: IE8 */
52
- }
53
-
54
- .ui-front {
55
- z-index: 100;
56
- }
57
-
58
-
59
- /* Interaction Cues
60
- ----------------------------------*/
61
- .ui-state-disabled {
62
- cursor: default !important;
63
- }
64
-
65
-
66
- /* Icons
67
- ----------------------------------*/
68
-
69
- /* states and images */
70
- .ui-icon {
71
- display: block;
72
- text-indent: -99999px;
73
- overflow: hidden;
74
- background-repeat: no-repeat;
75
- }
76
-
77
-
78
- /* Misc visuals
79
- ----------------------------------*/
80
-
81
- /* Overlays */
82
- .ui-widget-overlay {
83
- position: fixed;
84
- top: 0;
85
- left: 0;
86
- width: 100%;
87
- height: 100%;
88
- }
89
- .ui-accordion .ui-accordion-header {
90
- display: block;
91
- cursor: pointer;
92
- position: relative;
93
- margin: 2px 0 0 0;
94
- padding: .5em .5em .5em .7em;
95
- min-height: 0; /* support: IE7 */
96
- font-size: 100%;
97
- }
98
- .ui-accordion .ui-accordion-icons {
99
- padding-left: 2.2em;
100
- }
101
- .ui-accordion .ui-accordion-icons .ui-accordion-icons {
102
- padding-left: 2.2em;
103
- }
104
- .ui-accordion .ui-accordion-header .ui-accordion-header-icon {
105
- position: absolute;
106
- left: .5em;
107
- top: 50%;
108
- margin-top: -8px;
109
- }
110
- .ui-accordion .ui-accordion-content {
111
- padding: 1em 2.2em;
112
- border-top: 0;
113
- overflow: auto;
114
- }
115
- .ui-autocomplete {
116
- position: absolute;
117
- top: 0;
118
- left: 0;
119
- cursor: default;
120
- }
121
- .ui-button {
122
- display: inline-block;
123
- position: relative;
124
- padding: 0;
125
- line-height: normal;
126
- margin-right: .1em;
127
- cursor: pointer;
128
- vertical-align: middle;
129
- text-align: center;
130
- overflow: visible; /* removes extra width in IE */
131
- }
132
- .ui-button,
133
- .ui-button:link,
134
- .ui-button:visited,
135
- .ui-button:hover,
136
- .ui-button:active {
137
- text-decoration: none;
138
- }
139
- /* to make room for the icon, a width needs to be set here */
140
- .ui-button-icon-only {
141
- width: 2.2em;
142
- }
143
- /* button elements seem to need a little more width */
144
- button.ui-button-icon-only {
145
- width: 2.4em;
146
- }
147
- .ui-button-icons-only {
148
- width: 3.4em;
149
- }
150
- button.ui-button-icons-only {
151
- width: 3.7em;
152
- }
153
-
154
- /* button text element */
155
- .ui-button .ui-button-text {
156
- display: block;
157
- line-height: normal;
158
- }
159
- .ui-button-text-only .ui-button-text {
160
- padding: .4em 1em;
161
- }
162
- .ui-button-icon-only .ui-button-text,
163
- .ui-button-icons-only .ui-button-text {
164
- padding: .4em;
165
- text-indent: -9999999px;
166
- }
167
- .ui-button-text-icon-primary .ui-button-text,
168
- .ui-button-text-icons .ui-button-text {
169
- padding: .4em 1em .4em 2.1em;
170
- }
171
- .ui-button-text-icon-secondary .ui-button-text,
172
- .ui-button-text-icons .ui-button-text {
173
- padding: .4em 2.1em .4em 1em;
174
- }
175
- .ui-button-text-icons .ui-button-text {
176
- padding-left: 2.1em;
177
- padding-right: 2.1em;
178
- }
179
- /* no icon support for input elements, provide padding by default */
180
- input.ui-button {
181
- padding: .4em 1em;
182
- }
183
-
184
- /* button icon element(s) */
185
- .ui-button-icon-only .ui-icon,
186
- .ui-button-text-icon-primary .ui-icon,
187
- .ui-button-text-icon-secondary .ui-icon,
188
- .ui-button-text-icons .ui-icon,
189
- .ui-button-icons-only .ui-icon {
190
- position: absolute;
191
- top: 50%;
192
- margin-top: -8px;
193
- }
194
- .ui-button-icon-only .ui-icon {
195
- left: 50%;
196
- margin-left: -8px;
197
- }
198
- .ui-button-text-icon-primary .ui-button-icon-primary,
199
- .ui-button-text-icons .ui-button-icon-primary,
200
- .ui-button-icons-only .ui-button-icon-primary {
201
- left: .5em;
202
- }
203
- .ui-button-text-icon-secondary .ui-button-icon-secondary,
204
- .ui-button-text-icons .ui-button-icon-secondary,
205
- .ui-button-icons-only .ui-button-icon-secondary {
206
- right: .5em;
207
- }
208
-
209
- /* button sets */
210
- .ui-buttonset {
211
- margin-right: 7px;
212
- }
213
- .ui-buttonset .ui-button {
214
- margin-left: 0;
215
- margin-right: -.3em;
216
- }
217
-
218
- /* workarounds */
219
- /* reset extra padding in Firefox, see h5bp.com/l */
220
- input.ui-button::-moz-focus-inner,
221
- button.ui-button::-moz-focus-inner {
222
- border: 0;
223
- padding: 0;
224
- }
225
- .ui-datepicker {
226
- width: 17em;
227
- padding: .2em .2em 0;
228
- display: none;
229
- }
230
- .ui-datepicker .ui-datepicker-header {
231
- position: relative;
232
- padding: .2em 0;
233
- }
234
- .ui-datepicker .ui-datepicker-prev,
235
- .ui-datepicker .ui-datepicker-next {
236
- position: absolute;
237
- top: 2px;
238
- width: 1.8em;
239
- height: 1.8em;
240
- }
241
- .ui-datepicker .ui-datepicker-prev-hover,
242
- .ui-datepicker .ui-datepicker-next-hover {
243
- top: 1px;
244
- }
245
- .ui-datepicker .ui-datepicker-prev {
246
- left: 2px;
247
- }
248
- .ui-datepicker .ui-datepicker-next {
249
- right: 2px;
250
- }
251
- .ui-datepicker .ui-datepicker-prev-hover {
252
- left: 1px;
253
- }
254
- .ui-datepicker .ui-datepicker-next-hover {
255
- right: 1px;
256
- }
257
- .ui-datepicker .ui-datepicker-prev span,
258
- .ui-datepicker .ui-datepicker-next span {
259
- display: block;
260
- position: absolute;
261
- left: 50%;
262
- margin-left: -8px;
263
- top: 50%;
264
- margin-top: -8px;
265
- }
266
- .ui-datepicker .ui-datepicker-title {
267
- margin: 0 2.3em;
268
- line-height: 1.8em;
269
- text-align: center;
270
- }
271
- .ui-datepicker .ui-datepicker-title select {
272
- font-size: 1em;
273
- margin: 1px 0;
274
- }
275
- .ui-datepicker select.ui-datepicker-month,
276
- .ui-datepicker select.ui-datepicker-year {
277
- width: 45%;
278
- }
279
- .ui-datepicker table {
280
- width: 100%;
281
- font-size: .9em;
282
- border-collapse: collapse;
283
- margin: 0 0 .4em;
284
- }
285
- .ui-datepicker th {
286
- padding: .7em .3em;
287
- text-align: center;
288
- font-weight: bold;
289
- border: 0;
290
- }
291
- .ui-datepicker td {
292
- border: 0;
293
- padding: 1px;
294
- }
295
- .ui-datepicker td span,
296
- .ui-datepicker td a {
297
- display: block;
298
- padding: .2em;
299
- text-align: right;
300
- text-decoration: none;
301
- }
302
- .ui-datepicker .ui-datepicker-buttonpane {
303
- background-image: none;
304
- margin: .7em 0 0 0;
305
- padding: 0 .2em;
306
- border-left: 0;
307
- border-right: 0;
308
- border-bottom: 0;
309
- }
310
- .ui-datepicker .ui-datepicker-buttonpane button {
311
- float: right;
312
- margin: .5em .2em .4em;
313
- cursor: pointer;
314
- padding: .2em .6em .3em .6em;
315
- width: auto;
316
- overflow: visible;
317
- }
318
- .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
319
- float: left;
320
- }
321
-
322
- /* with multiple calendars */
323
- .ui-datepicker.ui-datepicker-multi {
324
- width: auto;
325
- }
326
- .ui-datepicker-multi .ui-datepicker-group {
327
- float: left;
328
- }
329
- .ui-datepicker-multi .ui-datepicker-group table {
330
- width: 95%;
331
- margin: 0 auto .4em;
332
- }
333
- .ui-datepicker-multi-2 .ui-datepicker-group {
334
- width: 50%;
335
- }
336
- .ui-datepicker-multi-3 .ui-datepicker-group {
337
- width: 33.3%;
338
- }
339
- .ui-datepicker-multi-4 .ui-datepicker-group {
340
- width: 25%;
341
- }
342
- .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
343
- .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
344
- border-left-width: 0;
345
- }
346
- .ui-datepicker-multi .ui-datepicker-buttonpane {
347
- clear: left;
348
- }
349
- .ui-datepicker-row-break {
350
- clear: both;
351
- width: 100%;
352
- font-size: 0;
353
- }
354
-
355
- /* RTL support */
356
- .ui-datepicker-rtl {
357
- direction: rtl;
358
- }
359
- .ui-datepicker-rtl .ui-datepicker-prev {
360
- right: 2px;
361
- left: auto;
362
- }
363
- .ui-datepicker-rtl .ui-datepicker-next {
364
- left: 2px;
365
- right: auto;
366
- }
367
- .ui-datepicker-rtl .ui-datepicker-prev:hover {
368
- right: 1px;
369
- left: auto;
370
- }
371
- .ui-datepicker-rtl .ui-datepicker-next:hover {
372
- left: 1px;
373
- right: auto;
374
- }
375
- .ui-datepicker-rtl .ui-datepicker-buttonpane {
376
- clear: right;
377
- }
378
- .ui-datepicker-rtl .ui-datepicker-buttonpane button {
379
- float: left;
380
- }
381
- .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
382
- .ui-datepicker-rtl .ui-datepicker-group {
383
- float: right;
384
- }
385
- .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
386
- .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
387
- border-right-width: 0;
388
- border-left-width: 1px;
389
- }
390
- .ui-dialog {
391
- overflow: hidden;
392
- position: absolute;
393
- top: 0;
394
- left: 0;
395
- padding: .2em;
396
- outline: 0;
397
- }
398
- .ui-dialog .ui-dialog-titlebar {
399
- padding: .4em 1em;
400
- position: relative;
401
- }
402
- .ui-dialog .ui-dialog-title {
403
- float: left;
404
- margin: .1em 0;
405
- white-space: nowrap;
406
- width: 90%;
407
- overflow: hidden;
408
- text-overflow: ellipsis;
409
- }
410
- .ui-dialog .ui-dialog-titlebar-close {
411
- position: absolute;
412
- right: .3em;
413
- top: 50%;
414
- width: 20px;
415
- margin: -10px 0 0 0;
416
- padding: 1px;
417
- height: 20px;
418
- }
419
- .ui-dialog .ui-dialog-content {
420
- position: relative;
421
- border: 0;
422
- padding: .5em 1em;
423
- background: none;
424
- overflow: auto;
425
- }
426
- .ui-dialog .ui-dialog-buttonpane {
427
- text-align: left;
428
- border-width: 1px 0 0 0;
429
- background-image: none;
430
- margin-top: .5em;
431
- padding: .3em 1em .5em .4em;
432
- }
433
- .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
434
- float: right;
435
- }
436
- .ui-dialog .ui-dialog-buttonpane button {
437
- margin: .5em .4em .5em 0;
438
- cursor: pointer;
439
- }
440
- .ui-dialog .ui-resizable-se {
441
- width: 12px;
442
- height: 12px;
443
- right: -5px;
444
- bottom: -5px;
445
- background-position: 16px 16px;
446
- }
447
- .ui-draggable .ui-dialog-titlebar {
448
- cursor: move;
449
- }
450
- .ui-draggable-handle {
451
- -ms-touch-action: none;
452
- touch-action: none;
453
- }
454
- .ui-menu {
455
- list-style: none;
456
- padding: 0;
457
- margin: 0;
458
- display: block;
459
- outline: none;
460
- }
461
- .ui-menu .ui-menu {
462
- position: absolute;
463
- }
464
- .ui-menu .ui-menu-item {
465
- position: relative;
466
- margin: 0;
467
- padding: 3px 1em 3px .4em;
468
- cursor: pointer;
469
- min-height: 0; /* support: IE7 */
470
- /* support: IE10, see #8844 */
471
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
472
- }
473
- .ui-menu .ui-menu-divider {
474
- margin: 5px 0;
475
- height: 0;
476
- font-size: 0;
477
- line-height: 0;
478
- border-width: 1px 0 0 0;
479
- }
480
- .ui-menu .ui-state-focus,
481
- .ui-menu .ui-state-active {
482
- margin: -1px;
483
- }
484
-
485
- /* icon support */
486
- .ui-menu-icons {
487
- position: relative;
488
- }
489
- .ui-menu-icons .ui-menu-item {
490
- padding-left: 2em;
491
- }
492
-
493
- /* left-aligned */
494
- .ui-menu .ui-icon {
495
- position: absolute;
496
- top: 0;
497
- bottom: 0;
498
- left: .2em;
499
- margin: auto 0;
500
- }
501
-
502
- /* right-aligned */
503
- .ui-menu .ui-menu-icon {
504
- left: auto;
505
- right: 0;
506
- }
507
- .ui-progressbar {
508
- height: 2em;
509
- text-align: left;
510
- overflow: hidden;
511
- }
512
- .ui-progressbar .ui-progressbar-value {
513
- margin: -1px;
514
- height: 100%;
515
- }
516
- .ui-progressbar .ui-progressbar-overlay {
517
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
518
- height: 100%;
519
- filter: alpha(opacity=25); /* support: IE8 */
520
- opacity: 0.25;
521
- }
522
- .ui-progressbar-indeterminate .ui-progressbar-value {
523
- background-image: none;
524
- }
525
- .ui-resizable {
526
- position: relative;
527
- }
528
- .ui-resizable-handle {
529
- position: absolute;
530
- font-size: 0.1px;
531
- display: block;
532
- -ms-touch-action: none;
533
- touch-action: none;
534
- }
535
- .ui-resizable-disabled .ui-resizable-handle,
536
- .ui-resizable-autohide .ui-resizable-handle {
537
- display: none;
538
- }
539
- .ui-resizable-n {
540
- cursor: n-resize;
541
- height: 7px;
542
- width: 100%;
543
- top: -5px;
544
- left: 0;
545
- }
546
- .ui-resizable-s {
547
- cursor: s-resize;
548
- height: 7px;
549
- width: 100%;
550
- bottom: -5px;
551
- left: 0;
552
- }
553
- .ui-resizable-e {
554
- cursor: e-resize;
555
- width: 7px;
556
- right: -5px;
557
- top: 0;
558
- height: 100%;
559
- }
560
- .ui-resizable-w {
561
- cursor: w-resize;
562
- width: 7px;
563
- left: -5px;
564
- top: 0;
565
- height: 100%;
566
- }
567
- .ui-resizable-se {
568
- cursor: se-resize;
569
- width: 12px;
570
- height: 12px;
571
- right: 1px;
572
- bottom: 1px;
573
- }
574
- .ui-resizable-sw {
575
- cursor: sw-resize;
576
- width: 9px;
577
- height: 9px;
578
- left: -5px;
579
- bottom: -5px;
580
- }
581
- .ui-resizable-nw {
582
- cursor: nw-resize;
583
- width: 9px;
584
- height: 9px;
585
- left: -5px;
586
- top: -5px;
587
- }
588
- .ui-resizable-ne {
589
- cursor: ne-resize;
590
- width: 9px;
591
- height: 9px;
592
- right: -5px;
593
- top: -5px;
594
- }
595
- .ui-selectable {
596
- -ms-touch-action: none;
597
- touch-action: none;
598
- }
599
- .ui-selectable-helper {
600
- position: absolute;
601
- z-index: 100;
602
- border: 1px dotted black;
603
- }
604
- .ui-selectmenu-menu {
605
- padding: 0;
606
- margin: 0;
607
- position: absolute;
608
- top: 0;
609
- left: 0;
610
- display: none;
611
- }
612
- .ui-selectmenu-menu .ui-menu {
613
- overflow: auto;
614
- /* Support: IE7 */
615
- overflow-x: hidden;
616
- padding-bottom: 1px;
617
- }
618
- .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
619
- font-size: 1em;
620
- font-weight: bold;
621
- line-height: 1.5;
622
- padding: 2px 0.4em;
623
- margin: 0.5em 0 0 0;
624
- height: auto;
625
- border: 0;
626
- }
627
- .ui-selectmenu-open {
628
- display: block;
629
- }
630
- .ui-selectmenu-button {
631
- display: inline-block;
632
- overflow: hidden;
633
- position: relative;
634
- text-decoration: none;
635
- cursor: pointer;
636
- }
637
- .ui-selectmenu-button span.ui-icon {
638
- right: 0.5em;
639
- left: auto;
640
- margin-top: -8px;
641
- position: absolute;
642
- top: 50%;
643
- }
644
- .ui-selectmenu-button span.ui-selectmenu-text {
645
- text-align: left;
646
- padding: 0.4em 2.1em 0.4em 1em;
647
- display: block;
648
- line-height: 1.4;
649
- overflow: hidden;
650
- text-overflow: ellipsis;
651
- white-space: nowrap;
652
- }
653
- .ui-slider {
654
- position: relative;
655
- text-align: left;
656
- }
657
- .ui-slider .ui-slider-handle {
658
- position: absolute;
659
- z-index: 2;
660
- width: 1.2em;
661
- height: 1.2em;
662
- cursor: default;
663
- -ms-touch-action: none;
664
- touch-action: none;
665
- }
666
- .ui-slider .ui-slider-range {
667
- position: absolute;
668
- z-index: 1;
669
- font-size: .7em;
670
- display: block;
671
- border: 0;
672
- background-position: 0 0;
673
- }
674
-
675
- /* support: IE8 - See #6727 */
676
- .ui-slider.ui-state-disabled .ui-slider-handle,
677
- .ui-slider.ui-state-disabled .ui-slider-range {
678
- filter: inherit;
679
- }
680
-
681
- .ui-slider-horizontal {
682
- height: .8em;
683
- }
684
- .ui-slider-horizontal .ui-slider-handle {
685
- top: -.3em;
686
- margin-left: -.6em;
687
- }
688
- .ui-slider-horizontal .ui-slider-range {
689
- top: 0;
690
- height: 100%;
691
- }
692
- .ui-slider-horizontal .ui-slider-range-min {
693
- left: 0;
694
- }
695
- .ui-slider-horizontal .ui-slider-range-max {
696
- right: 0;
697
- }
698
-
699
- .ui-slider-vertical {
700
- width: .8em;
701
- height: 100px;
702
- }
703
- .ui-slider-vertical .ui-slider-handle {
704
- left: -.3em;
705
- margin-left: 0;
706
- margin-bottom: -.6em;
707
- }
708
- .ui-slider-vertical .ui-slider-range {
709
- left: 0;
710
- width: 100%;
711
- }
712
- .ui-slider-vertical .ui-slider-range-min {
713
- bottom: 0;
714
- }
715
- .ui-slider-vertical .ui-slider-range-max {
716
- top: 0;
717
- }
718
- .ui-sortable-handle {
719
- -ms-touch-action: none;
720
- touch-action: none;
721
- }
722
- .ui-spinner {
723
- position: relative;
724
- display: inline-block;
725
- overflow: hidden;
726
- padding: 0;
727
- vertical-align: middle;
728
- }
729
- .ui-spinner-input {
730
- border: none;
731
- background: none;
732
- color: inherit;
733
- padding: 0;
734
- margin: .2em 0;
735
- vertical-align: middle;
736
- margin-left: .4em;
737
- margin-right: 22px;
738
- }
739
- .ui-spinner-button {
740
- width: 16px;
741
- height: 50%;
742
- font-size: .5em;
743
- padding: 0;
744
- margin: 0;
745
- text-align: center;
746
- position: absolute;
747
- cursor: default;
748
- display: block;
749
- overflow: hidden;
750
- right: 0;
751
- }
752
- /* more specificity required here to override default borders */
753
- .ui-spinner a.ui-spinner-button {
754
- border-top: none;
755
- border-bottom: none;
756
- border-right: none;
757
- }
758
- /* vertically center icon */
759
- .ui-spinner .ui-icon {
760
- position: absolute;
761
- margin-top: -8px;
762
- top: 50%;
763
- left: 0;
764
- }
765
- .ui-spinner-up {
766
- top: 0;
767
- }
768
- .ui-spinner-down {
769
- bottom: 0;
770
- }
771
-
772
- /* TR overrides */
773
- .ui-spinner .ui-icon-triangle-1-s {
774
- /* need to fix icons sprite */
775
- background-position: -65px -16px;
776
- }
777
- .ui-tabs {
778
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
779
- padding: .2em;
780
- }
781
- .ui-tabs .ui-tabs-nav {
782
- margin: 0;
783
- padding: .2em .2em 0;
784
- }
785
- .ui-tabs .ui-tabs-nav li {
786
- list-style: none;
787
- float: left;
788
- position: relative;
789
- top: 0;
790
- margin: 1px .2em 0 0;
791
- border-bottom-width: 0;
792
- padding: 0;
793
- white-space: nowrap;
794
- }
795
- .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
796
- float: left;
797
- padding: .5em 1em;
798
- text-decoration: none;
799
- }
800
- .ui-tabs .ui-tabs-nav li.ui-tabs-active {
801
- margin-bottom: -1px;
802
- padding-bottom: 1px;
803
- }
804
- .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
805
- .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
806
- .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
807
- cursor: text;
808
- }
809
- .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
810
- cursor: pointer;
811
- }
812
- .ui-tabs .ui-tabs-panel {
813
- display: block;
814
- border-width: 0;
815
- padding: 1em 1.4em;
816
- background: none;
817
- }
818
- .ui-tooltip {
819
- padding: 8px;
820
- position: absolute;
821
- z-index: 9999;
822
- max-width: 300px;
823
- -webkit-box-shadow: 0 0 5px #aaa;
824
- box-shadow: 0 0 5px #aaa;
825
- }
826
- body .ui-tooltip {
827
- border-width: 2px;
828
- }
829
-
830
- /* Component containers
831
- ----------------------------------*/
832
- .ui-widget {
833
- font-family: Verdana,Arial,sans-serif;
834
- font-size: 1.1em;
835
- }
836
- .ui-widget .ui-widget {
837
- font-size: 1em;
838
- }
839
- .ui-widget input,
840
- .ui-widget select,
841
- .ui-widget textarea,
842
- .ui-widget button {
843
- font-family: Verdana,Arial,sans-serif;
844
- font-size: 1em;
845
- }
846
- .ui-widget-content {
847
- border: 1px solid #aaaaaa;
848
- background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
849
- color: #222222;
850
- }
851
- .ui-widget-content a {
852
- color: #222222;
853
- }
854
- .ui-widget-header {
855
- border: 1px solid #aaaaaa;
856
- background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
857
- color: #222222;
858
- font-weight: bold;
859
- }
860
- .ui-widget-header a {
861
- color: #222222;
862
- }
863
-
864
- /* Interaction states
865
- ----------------------------------*/
866
- .ui-state-default,
867
- .ui-widget-content .ui-state-default,
868
- .ui-widget-header .ui-state-default {
869
- border: 1px solid #d3d3d3;
870
- background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
871
- font-weight: normal;
872
- color: #555555;
873
- }
874
- .ui-state-default a,
875
- .ui-state-default a:link,
876
- .ui-state-default a:visited {
877
- color: #555555;
878
- text-decoration: none;
879
- }
880
- .ui-state-hover,
881
- .ui-widget-content .ui-state-hover,
882
- .ui-widget-header .ui-state-hover,
883
- .ui-state-focus,
884
- .ui-widget-content .ui-state-focus,
885
- .ui-widget-header .ui-state-focus {
886
- border: 1px solid #999999;
887
- background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
888
- font-weight: normal;
889
- color: #212121;
890
- }
891
- .ui-state-hover a,
892
- .ui-state-hover a:hover,
893
- .ui-state-hover a:link,
894
- .ui-state-hover a:visited,
895
- .ui-state-focus a,
896
- .ui-state-focus a:hover,
897
- .ui-state-focus a:link,
898
- .ui-state-focus a:visited {
899
- color: #212121;
900
- text-decoration: none;
901
- }
902
- .ui-state-active,
903
- .ui-widget-content .ui-state-active,
904
- .ui-widget-header .ui-state-active {
905
- border: 1px solid #aaaaaa;
906
- background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
907
- font-weight: normal;
908
- color: #212121;
909
- }
910
- .ui-state-active a,
911
- .ui-state-active a:link,
912
- .ui-state-active a:visited {
913
- color: #212121;
914
- text-decoration: none;
915
- }
916
-
917
- /* Interaction Cues
918
- ----------------------------------*/
919
- .ui-state-highlight,
920
- .ui-widget-content .ui-state-highlight,
921
- .ui-widget-header .ui-state-highlight {
922
- border: 1px solid #fcefa1;
923
- background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
924
- color: #363636;
925
- }
926
- .ui-state-highlight a,
927
- .ui-widget-content .ui-state-highlight a,
928
- .ui-widget-header .ui-state-highlight a {
929
- color: #363636;
930
- }
931
- .ui-state-error,
932
- .ui-widget-content .ui-state-error,
933
- .ui-widget-header .ui-state-error {
934
- border: 1px solid #cd0a0a;
935
- background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
936
- color: #cd0a0a;
937
- }
938
- .ui-state-error a,
939
- .ui-widget-content .ui-state-error a,
940
- .ui-widget-header .ui-state-error a {
941
- color: #cd0a0a;
942
- }
943
- .ui-state-error-text,
944
- .ui-widget-content .ui-state-error-text,
945
- .ui-widget-header .ui-state-error-text {
946
- color: #cd0a0a;
947
- }
948
- .ui-priority-primary,
949
- .ui-widget-content .ui-priority-primary,
950
- .ui-widget-header .ui-priority-primary {
951
- font-weight: bold;
952
- }
953
- .ui-priority-secondary,
954
- .ui-widget-content .ui-priority-secondary,
955
- .ui-widget-header .ui-priority-secondary {
956
- opacity: .7;
957
- filter:Alpha(Opacity=70); /* support: IE8 */
958
- font-weight: normal;
959
- }
960
- .ui-state-disabled,
961
- .ui-widget-content .ui-state-disabled,
962
- .ui-widget-header .ui-state-disabled {
963
- opacity: .35;
964
- filter:Alpha(Opacity=35); /* support: IE8 */
965
- background-image: none;
966
- }
967
- .ui-state-disabled .ui-icon {
968
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
969
- }
970
-
971
- /* Icons
972
- ----------------------------------*/
973
-
974
- /* states and images */
975
- .ui-icon {
976
- width: 16px;
977
- height: 16px;
978
- }
979
- .ui-icon,
980
- .ui-widget-content .ui-icon {
981
- background-image: url("images/ui-icons_222222_256x240.png");
982
- }
983
- .ui-widget-header .ui-icon {
984
- background-image: url("images/ui-icons_222222_256x240.png");
985
- }
986
- .ui-state-default .ui-icon {
987
- background-image: url("images/ui-icons_888888_256x240.png");
988
- }
989
- .ui-state-hover .ui-icon,
990
- .ui-state-focus .ui-icon {
991
- background-image: url("images/ui-icons_454545_256x240.png");
992
- }
993
- .ui-state-active .ui-icon {
994
- background-image: url("images/ui-icons_454545_256x240.png");
995
- }
996
- .ui-state-highlight .ui-icon {
997
- background-image: url("images/ui-icons_2e83ff_256x240.png");
998
- }
999
- .ui-state-error .ui-icon,
1000
- .ui-state-error-text .ui-icon {
1001
- background-image: url("images/ui-icons_cd0a0a_256x240.png");
1002
- }
1003
-
1004
- /* positioning */
1005
- .ui-icon-blank { background-position: 16px 16px; }
1006
- .ui-icon-carat-1-n { background-position: 0 0; }
1007
- .ui-icon-carat-1-ne { background-position: -16px 0; }
1008
- .ui-icon-carat-1-e { background-position: -32px 0; }
1009
- .ui-icon-carat-1-se { background-position: -48px 0; }
1010
- .ui-icon-carat-1-s { background-position: -64px 0; }
1011
- .ui-icon-carat-1-sw { background-position: -80px 0; }
1012
- .ui-icon-carat-1-w { background-position: -96px 0; }
1013
- .ui-icon-carat-1-nw { background-position: -112px 0; }
1014
- .ui-icon-carat-2-n-s { background-position: -128px 0; }
1015
- .ui-icon-carat-2-e-w { background-position: -144px 0; }
1016
- .ui-icon-triangle-1-n { background-position: 0 -16px; }
1017
- .ui-icon-triangle-1-ne { background-position: -16px -16px; }
1018
- .ui-icon-triangle-1-e { background-position: -32px -16px; }
1019
- .ui-icon-triangle-1-se { background-position: -48px -16px; }
1020
- .ui-icon-triangle-1-s { background-position: -64px -16px; }
1021
- .ui-icon-triangle-1-sw { background-position: -80px -16px; }
1022
- .ui-icon-triangle-1-w { background-position: -96px -16px; }
1023
- .ui-icon-triangle-1-nw { background-position: -112px -16px; }
1024
- .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
1025
- .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
1026
- .ui-icon-arrow-1-n { background-position: 0 -32px; }
1027
- .ui-icon-arrow-1-ne { background-position: -16px -32px; }
1028
- .ui-icon-arrow-1-e { background-position: -32px -32px; }
1029
- .ui-icon-arrow-1-se { background-position: -48px -32px; }
1030
- .ui-icon-arrow-1-s { background-position: -64px -32px; }
1031
- .ui-icon-arrow-1-sw { background-position: -80px -32px; }
1032
- .ui-icon-arrow-1-w { background-position: -96px -32px; }
1033
- .ui-icon-arrow-1-nw { background-position: -112px -32px; }
1034
- .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
1035
- .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
1036
- .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
1037
- .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
1038
- .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
1039
- .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
1040
- .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
1041
- .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
1042
- .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
1043
- .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
1044
- .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
1045
- .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
1046
- .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
1047
- .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
1048
- .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
1049
- .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
1050
- .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
1051
- .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
1052
- .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
1053
- .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
1054
- .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
1055
- .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
1056
- .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
1057
- .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
1058
- .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
1059
- .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
1060
- .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
1061
- .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
1062
- .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
1063
- .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
1064
- .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
1065
- .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
1066
- .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
1067
- .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
1068
- .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
1069
- .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
1070
- .ui-icon-arrow-4 { background-position: 0 -80px; }
1071
- .ui-icon-arrow-4-diag { background-position: -16px -80px; }
1072
- .ui-icon-extlink { background-position: -32px -80px; }
1073
- .ui-icon-newwin { background-position: -48px -80px; }
1074
- .ui-icon-refresh { background-position: -64px -80px; }
1075
- .ui-icon-shuffle { background-position: -80px -80px; }
1076
- .ui-icon-transfer-e-w { background-position: -96px -80px; }
1077
- .ui-icon-transferthick-e-w { background-position: -112px -80px; }
1078
- .ui-icon-folder-collapsed { background-position: 0 -96px; }
1079
- .ui-icon-folder-open { background-position: -16px -96px; }
1080
- .ui-icon-document { background-position: -32px -96px; }
1081
- .ui-icon-document-b { background-position: -48px -96px; }
1082
- .ui-icon-note { background-position: -64px -96px; }
1083
- .ui-icon-mail-closed { background-position: -80px -96px; }
1084
- .ui-icon-mail-open { background-position: -96px -96px; }
1085
- .ui-icon-suitcase { background-position: -112px -96px; }
1086
- .ui-icon-comment { background-position: -128px -96px; }
1087
- .ui-icon-person { background-position: -144px -96px; }
1088
- .ui-icon-print { background-position: -160px -96px; }
1089
- .ui-icon-trash { background-position: -176px -96px; }
1090
- .ui-icon-locked { background-position: -192px -96px; }
1091
- .ui-icon-unlocked { background-position: -208px -96px; }
1092
- .ui-icon-bookmark { background-position: -224px -96px; }
1093
- .ui-icon-tag { background-position: -240px -96px; }
1094
- .ui-icon-home { background-position: 0 -112px; }
1095
- .ui-icon-flag { background-position: -16px -112px; }
1096
- .ui-icon-calendar { background-position: -32px -112px; }
1097
- .ui-icon-cart { background-position: -48px -112px; }
1098
- .ui-icon-pencil { background-position: -64px -112px; }
1099
- .ui-icon-clock { background-position: -80px -112px; }
1100
- .ui-icon-disk { background-position: -96px -112px; }
1101
- .ui-icon-calculator { background-position: -112px -112px; }
1102
- .ui-icon-zoomin { background-position: -128px -112px; }
1103
- .ui-icon-zoomout { background-position: -144px -112px; }
1104
- .ui-icon-search { background-position: -160px -112px; }
1105
- .ui-icon-wrench { background-position: -176px -112px; }
1106
- .ui-icon-gear { background-position: -192px -112px; }
1107
- .ui-icon-heart { background-position: -208px -112px; }
1108
- .ui-icon-star { background-position: -224px -112px; }
1109
- .ui-icon-link { background-position: -240px -112px; }
1110
- .ui-icon-cancel { background-position: 0 -128px; }
1111
- .ui-icon-plus { background-position: -16px -128px; }
1112
- .ui-icon-plusthick { background-position: -32px -128px; }
1113
- .ui-icon-minus { background-position: -48px -128px; }
1114
- .ui-icon-minusthick { background-position: -64px -128px; }
1115
- .ui-icon-close { background-position: -80px -128px; }
1116
- .ui-icon-closethick { background-position: -96px -128px; }
1117
- .ui-icon-key { background-position: -112px -128px; }
1118
- .ui-icon-lightbulb { background-position: -128px -128px; }
1119
- .ui-icon-scissors { background-position: -144px -128px; }
1120
- .ui-icon-clipboard { background-position: -160px -128px; }
1121
- .ui-icon-copy { background-position: -176px -128px; }
1122
- .ui-icon-contact { background-position: -192px -128px; }
1123
- .ui-icon-image { background-position: -208px -128px; }
1124
- .ui-icon-video { background-position: -224px -128px; }
1125
- .ui-icon-script { background-position: -240px -128px; }
1126
- .ui-icon-alert { background-position: 0 -144px; }
1127
- .ui-icon-info { background-position: -16px -144px; }
1128
- .ui-icon-notice { background-position: -32px -144px; }
1129
- .ui-icon-help { background-position: -48px -144px; }
1130
- .ui-icon-check { background-position: -64px -144px; }
1131
- .ui-icon-bullet { background-position: -80px -144px; }
1132
- .ui-icon-radio-on { background-position: -96px -144px; }
1133
- .ui-icon-radio-off { background-position: -112px -144px; }
1134
- .ui-icon-pin-w { background-position: -128px -144px; }
1135
- .ui-icon-pin-s { background-position: -144px -144px; }
1136
- .ui-icon-play { background-position: 0 -160px; }
1137
- .ui-icon-pause { background-position: -16px -160px; }
1138
- .ui-icon-seek-next { background-position: -32px -160px; }
1139
- .ui-icon-seek-prev { background-position: -48px -160px; }
1140
- .ui-icon-seek-end { background-position: -64px -160px; }
1141
- .ui-icon-seek-start { background-position: -80px -160px; }
1142
- /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
1143
- .ui-icon-seek-first { background-position: -80px -160px; }
1144
- .ui-icon-stop { background-position: -96px -160px; }
1145
- .ui-icon-eject { background-position: -112px -160px; }
1146
- .ui-icon-volume-off { background-position: -128px -160px; }
1147
- .ui-icon-volume-on { background-position: -144px -160px; }
1148
- .ui-icon-power { background-position: 0 -176px; }
1149
- .ui-icon-signal-diag { background-position: -16px -176px; }
1150
- .ui-icon-signal { background-position: -32px -176px; }
1151
- .ui-icon-battery-0 { background-position: -48px -176px; }
1152
- .ui-icon-battery-1 { background-position: -64px -176px; }
1153
- .ui-icon-battery-2 { background-position: -80px -176px; }
1154
- .ui-icon-battery-3 { background-position: -96px -176px; }
1155
- .ui-icon-circle-plus { background-position: 0 -192px; }
1156
- .ui-icon-circle-minus { background-position: -16px -192px; }
1157
- .ui-icon-circle-close { background-position: -32px -192px; }
1158
- .ui-icon-circle-triangle-e { background-position: -48px -192px; }
1159
- .ui-icon-circle-triangle-s { background-position: -64px -192px; }
1160
- .ui-icon-circle-triangle-w { background-position: -80px -192px; }
1161
- .ui-icon-circle-triangle-n { background-position: -96px -192px; }
1162
- .ui-icon-circle-arrow-e { background-position: -112px -192px; }
1163
- .ui-icon-circle-arrow-s { background-position: -128px -192px; }
1164
- .ui-icon-circle-arrow-w { background-position: -144px -192px; }
1165
- .ui-icon-circle-arrow-n { background-position: -160px -192px; }
1166
- .ui-icon-circle-zoomin { background-position: -176px -192px; }
1167
- .ui-icon-circle-zoomout { background-position: -192px -192px; }
1168
- .ui-icon-circle-check { background-position: -208px -192px; }
1169
- .ui-icon-circlesmall-plus { background-position: 0 -208px; }
1170
- .ui-icon-circlesmall-minus { background-position: -16px -208px; }
1171
- .ui-icon-circlesmall-close { background-position: -32px -208px; }
1172
- .ui-icon-squaresmall-plus { background-position: -48px -208px; }
1173
- .ui-icon-squaresmall-minus { background-position: -64px -208px; }
1174
- .ui-icon-squaresmall-close { background-position: -80px -208px; }
1175
- .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
1176
- .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
1177
- .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
1178
- .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
1179
- .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
1180
- .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
1181
-
1182
-
1183
- /* Misc visuals
1184
- ----------------------------------*/
1185
-
1186
- /* Corner radius */
1187
- .ui-corner-all,
1188
- .ui-corner-top,
1189
- .ui-corner-left,
1190
- .ui-corner-tl {
1191
- border-top-left-radius: 4px;
1192
- }
1193
- .ui-corner-all,
1194
- .ui-corner-top,
1195
- .ui-corner-right,
1196
- .ui-corner-tr {
1197
- border-top-right-radius: 4px;
1198
- }
1199
- .ui-corner-all,
1200
- .ui-corner-bottom,
1201
- .ui-corner-left,
1202
- .ui-corner-bl {
1203
- border-bottom-left-radius: 4px;
1204
- }
1205
- .ui-corner-all,
1206
- .ui-corner-bottom,
1207
- .ui-corner-right,
1208
- .ui-corner-br {
1209
- border-bottom-right-radius: 4px;
1210
- }
1211
-
1212
- /* Overlays */
1213
- .ui-widget-overlay {
1214
- background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
1215
- opacity: .3;
1216
- filter: Alpha(Opacity=30); /* support: IE8 */
1217
- }
1218
- .ui-widget-shadow {
1219
- margin: -8px 0 0 -8px;
1220
- padding: 8px;
1221
- background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
1222
- opacity: .3;
1223
- filter: Alpha(Opacity=30); /* support: IE8 */
1224
- border-radius: 8px;
1225
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/widget.css CHANGED
@@ -19,6 +19,7 @@ ul.products.hide_products li{
19
  width: 14px;
20
  height: 14px;
21
  background: url('../images/sprite.png') no-repeat;
 
22
  }
23
 
24
  .berocket_aapf_widget input[type="checkbox"]:checked + label:before {
@@ -86,7 +87,6 @@ ul.berocket_aapf_widget li > span:hover{
86
  span.product-size{
87
  color: #777;
88
  display: block;
89
- font-family: Arial;
90
  text-align: center;
91
  }
92
 
@@ -98,7 +98,6 @@ span.product-size{
98
 
99
  .berocket_aapf_widget li.slider span.left input, .berocket_aapf_widget li.slider span.right input{
100
  border: 1px solid #E8E8E8;
101
- font-family: Arial;
102
  font-size: 13px;
103
  font-style: italic;
104
  padding: 4px 9px;
@@ -132,7 +131,7 @@ span.product-size{
132
  background: none repeat scroll 0 0 #000000;
133
  }
134
 
135
- .berocket_filter_slider.ui-widget-content .ui-slider-handle, .berocket_filter_price_slider.ui-widget-content .ui-slider-handle{
136
  background: url("../images/handler.png") no-repeat scroll center center / cover transparent;
137
  width: 12px;
138
  height: 12px;
@@ -140,15 +139,66 @@ span.product-size{
140
  top: -4px;
141
  }
142
 
143
- .berocket_aapf_widget .converter{
144
- text-align: center;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  }
146
 
147
- .berocket_aapf_widget .converter a{
148
- text-decoration: underline;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
  }
150
 
151
- .berocket_aapf_widget .converter a.active{
152
- text-decoration: none;
153
- color: #ccc;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  }
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 {
87
  span.product-size{
88
  color: #777;
89
  display: block;
 
90
  text-align: center;
91
  }
92
 
98
 
99
  .berocket_aapf_widget li.slider span.left input, .berocket_aapf_widget li.slider span.right input{
100
  border: 1px solid #E8E8E8;
 
101
  font-size: 13px;
102
  font-style: italic;
103
  padding: 4px 9px;
131
  background: none repeat scroll 0 0 #000000;
132
  }
133
 
134
+ .berocket_filter_slider.ui-widget-content .ui-slider-handle, .berocket_filter_price_slider.ui-widget-content .ui-slider-handle{
135
  background: url("../images/handler.png") no-repeat scroll center center / cover transparent;
136
  width: 12px;
137
  height: 12px;
139
  top: -4px;
140
  }
141
 
142
+ .ui-slider {
143
+ position: relative;
144
+ text-align: left;
145
+ }
146
+ .ui-slider .ui-slider-handle {
147
+ position: absolute;
148
+ z-index: 2;
149
+ width: 1.2em;
150
+ height: 1.2em;
151
+ cursor: pointer;
152
+ -ms-touch-action: none;
153
+ touch-action: none;
154
+ }
155
+ .ui-slider .ui-slider-range {
156
+ position: absolute;
157
+ z-index: 1;
158
+ font-size: .7em;
159
+ display: block;
160
+ border: 0;
161
+ background-position: 0 0;
162
+ }
163
+ .ui-slider.ui-state-disabled .ui-slider-handle,
164
+ .ui-slider.ui-state-disabled .ui-slider-range {
165
+ filter: inherit;
166
  }
167
 
168
+ .ui-slider-horizontal {
169
+ height: .8em;
170
+ }
171
+ .ui-slider-horizontal .ui-slider-handle {
172
+ top: -.3em;
173
+ margin-left: -.6em;
174
+ }
175
+ .ui-slider-horizontal .ui-slider-range {
176
+ top: 0;
177
+ height: 100%;
178
+ }
179
+ .ui-slider-horizontal .ui-slider-range-min {
180
+ left: 0;
181
+ }
182
+ .ui-slider-horizontal .ui-slider-range-max {
183
+ right: 0;
184
  }
185
 
186
+ .ui-slider-vertical {
187
+ width: .8em;
188
+ height: 100px;
189
+ }
190
+ .ui-slider-vertical .ui-slider-handle {
191
+ left: -.3em;
192
+ margin-left: 0;
193
+ margin-bottom: -.6em;
194
+ }
195
+ .ui-slider-vertical .ui-slider-range {
196
+ left: 0;
197
+ width: 100%;
198
+ }
199
+ .ui-slider-vertical .ui-slider-range-min {
200
+ bottom: 0;
201
+ }
202
+ .ui-slider-vertical .ui-slider-range-max {
203
+ top: 0;
204
  }
images/ajax-loader2x.gif DELETED
Binary file
includes/functions.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if( ! function_exists( 'br_get_template_part' ) ){
4
+ function br_get_template_part( $name = '' ){
5
+ BeRocket_AAPF::br_get_template_part( $name );
6
+ }
7
+ }
includes/widget.php CHANGED
@@ -28,17 +28,20 @@ class BeRocket_AAPF_Widget extends WP_Widget {
28
  $control_ops = array( 'id_base' => 'berocket_aapf_widget' );
29
 
30
  /* Create the widget. */
31
- $this->WP_Widget( 'berocket_aapf_widget', 'Product Filters', $widget_ops, $control_ops );
32
  }
33
 
34
  /**
35
  * Show widget to user
 
 
 
36
  */
37
  function widget( $args, $instance ) {
38
  if( !is_shop() and !is_product_category() ) return;
39
  global $wp_query;
40
 
41
- wp_register_style( 'berocket_aapf_widget-style', plugins_url('../css/widget.css', __FILE__) );
42
  wp_enqueue_style( 'berocket_aapf_widget-style' );
43
 
44
  /* custom scrollbar */
@@ -49,20 +52,48 @@ class BeRocket_AAPF_Widget extends WP_Widget {
49
  wp_enqueue_script( 'jquery-ui-core' );
50
  wp_enqueue_script( 'jquery-ui-slider' );
51
  wp_enqueue_script( 'berocket_aapf_widget-script', plugins_url('../js/widget.js', __FILE__), array('jquery') );
52
- wp_enqueue_script( 'berocket_aapf_widget-hack-script', plugins_url('../js/hack.js', __FILE__), array('jquery') );
53
- wp_register_style( 'berocket_aapf_widget-ui-style', plugins_url('../css/jquery-ui.css', __FILE__) );
54
- wp_enqueue_style( 'berocket_aapf_widget-ui-style' );
55
 
56
  $wp_query_product_cat = '-1';
57
- if( @$wp_query->query['product_cat'] )
58
- $wp_query_product_cat = $wp_query->query['product_cat'];
59
-
 
 
60
  wp_localize_script( 'berocket_aapf_widget-script', 'the_ajax_script', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'product_cat' => $wp_query_product_cat ) );
61
-
62
  extract( $args );
63
  extract( $instance );
64
-
65
- if( $product_cat and $product_cat != $wp_query->query['product_cat'] ) return ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
 
67
  $terms = get_terms( array( $attribute ), $args = array( 'orderby' => 'name', 'order' => 'ASC' ) );
68
  $args = array(
@@ -90,85 +121,57 @@ class BeRocket_AAPF_Widget extends WP_Widget {
90
  }
91
 
92
  if( !$scroll_theme ) $scroll_theme = 'dark';
93
-
94
-
95
- echo '<h3 class="widget-title berocket_aapf_widget-title">'.$title.'</h3>';
96
- echo "<ul class='berocket_aapf_widget {$class}' {$style} data-scroll_theme='{$scroll_theme}'>";
97
- if( $type == 'checkbox' ){
98
- foreach( $terms as $term )
99
- echo "
100
- <li data-term_id='{$term->term_id}' data-taxonomy='{$term->taxonomy}' data-operator='{$operator}'>
101
- <span>
102
- <input type='checkbox' id='radio_{$term->term_id}' /><label for='radio_{$term->term_id}'> {$term->name}</label>
103
- </span>
104
- </li>
105
- ";
106
- }
107
- if( $type == 'radio' ){
108
- $x = time();
109
- foreach( $terms as $term )
110
- echo "
111
- <li data-term_id='{$term->term_id}' data-taxonomy='{$term->taxonomy}' data-operator='{$operator}'>
112
- <span>
113
- <input type='radio' id='radio_{$term->term_id}' name='radio_{$term->taxonomy}_{$x}' /><label for='radio_{$term->term_id}'> {$term->name}</label>
114
- </span>
115
- </li>
116
- ";
117
- }
118
- if( $type == 'select' ){
119
- echo "<li>
120
- <span>
121
- <select>
122
- <option value=''>Any</option>";
123
- foreach( $terms as $term )
124
- echo "<option data-term_id='{$term->term_id}' data-taxonomy='{$term->taxonomy}' data-operator='{$operator}'>{$term->name}</option>";
125
- echo "</select>
126
- </span>
127
- </li>";
128
- }
129
  if( $type == 'slider' ){
 
 
 
 
130
  if( $attribute == 'price' ){
131
- $min = $max = false;
132
  foreach( $price_range as $price ){
133
  if( $min === false or $min > (int) $price ) $min = $price;
134
  if( $max === false or $max < (int) $price ) $max = $price;
135
  }
136
- $ident = rand( 0, time() );
137
- echo "<li class='slider price'>
138
- <span class='left'>
139
- <input type='text' disabled id='text_{$ident}_1' value='".number_format(floor($min), 2, '.', '')."' /><label for='text_{$ident}_1'>
140
- </span>
141
- <span class='right'>
142
- <input type='text' disabled id='text_{$ident}_2' value='".number_format(ceil($max), 2, '.', '')."' /><label for='text_{$ident}_2'>
143
- </span>
144
- <span class='slide'>
145
- <div class='berocket_filter_price_slider' data-taxonomy='{$ident}' data-min='".number_format(floor($min), 2, '.', '')."' data-max='".number_format(ceil($max), 2, '.', '')."' data-fields_1='text_{$ident}_1' data-fields_2='text_{$ident}_2'></div>
146
- </span>
147
- </li>";
148
  }else{
149
- $min = $max = false;
150
  foreach( $terms as $term ){
151
  if( $min === false or $min > (int) $term->slug ) $min = $term->slug;
152
  if( $max === false or $max < (int) $term->slug ) $max = $term->slug;
153
  }
154
- echo "<li class='slider'>
155
- <span class='left'>
156
- <input type='text' disabled id='text_{$term->taxonomy}_1' value='{$min}' /><label for='text_{$term->taxonomy}_1'> <span class='units'>in</span></label>
157
- </span>
158
- <span class='right'>
159
- <input type='text' disabled id='text_{$term->taxonomy}_2' value='{$max}' /><label for='text_{$term->taxonomy}_2'> <span class='units'>in</span></label>
160
- </span>
161
- <span class='slide'>
162
- <div class='berocket_filter_slider' data-taxonomy='{$term->taxonomy}' data-curunit='in' data-min='{$min}' data-max='{$max}' data-fields_1='text_{$term->taxonomy}_1' data-fields_2='text_{$term->taxonomy}_2'></div>
163
- </span>
164
- </li>";
165
  }
 
 
 
 
 
 
166
  }
167
- echo "</ul>";
 
 
 
168
  }
169
 
170
  /**
171
  * Validating and updating widget data
 
 
 
 
172
  * @return array - new merged instance
173
  */
174
  function update( $new_instance, $old_instance ) {
@@ -178,20 +181,28 @@ class BeRocket_AAPF_Widget extends WP_Widget {
178
  $instance['title'] = strip_tags( $new_instance['title'] );
179
  $instance['attribute'] = strip_tags( $new_instance['attribute'] );
180
  $instance['type'] = strip_tags( $new_instance['type'] );
181
- $instance['product_cat'] = strip_tags( $new_instance['product_cat'] );
182
  $instance['scroll_theme'] = strip_tags( $new_instance['scroll_theme'] );
183
-
 
184
  if( $new_instance['height'] != 'auto' ) $new_instance['height'] = (float) $new_instance['height'];
185
  if( !$new_instance['height'] ) $new_instance['height'] = 'auto';
186
  $instance['height'] = $new_instance['height'];
187
 
188
  if( $new_instance['operator'] != 'OR' ) $new_instance['operator'] = 'AND';
189
  $instance['operator'] = $new_instance['operator'];
190
-
 
 
191
  return $instance;
192
  }
 
193
  /**
194
  * Output admin form
 
 
 
 
195
  */
196
  function form( $instance ) {
197
  wp_enqueue_script( 'berocket_aapf_widget-admin-script', plugins_url('../js/admin.js', __FILE__), array('jquery') );
@@ -208,79 +219,12 @@ class BeRocket_AAPF_Widget extends WP_Widget {
208
  'height' => 'auto',
209
  'scroll_theme' => 'dark'
210
  );
 
211
  $instance = wp_parse_args( (array) $instance, $defaults );
212
-
213
  $attributes = $this->get_attributes();
214
-
215
- $categories = self::get_product_categories( $instance['product_cat'] )
216
- ?>
217
-
218
- <p>
219
- <label for="<?php echo $this->get_field_id( 'title' ); ?>">Filter Title: </label>
220
- <input id="<?php echo $this->get_field_id( 'title' ); ?>" type="text" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
221
- </p>
222
- <p>
223
- <label>Attribute:
224
- <select id="<?php echo $this->get_field_id( 'attribute' ); ?>" name="<?php echo $this->get_field_name( 'attribute' ); ?>" class="berocket_aapf_widget_admin_attribute_select">
225
- <option <?php if ($instance['attribute'] == 'price') echo 'selected'; ?> value="price">Price</option>
226
- <?php foreach( $attributes as $k => $v ){ ?>
227
- <option <?php if ($instance['attribute'] == $k) echo 'selected'; ?> value="<?php echo $k ?>"><?php echo $v ?></option>
228
- <?php } ?>
229
- </select>
230
- </label>
231
- </p>
232
- <p>
233
- <label>Type:
234
- <select id="<?php echo $this->get_field_id( 'type' ); ?>" name="<?php echo $this->get_field_name( 'type' ); ?>" class="berocket_aapf_widget_admin_type_select">
235
- <? if ($instance['attribute'] != 'pa_lengthcm' and $instance['attribute'] != 'pa_widthcm' and $instance['attribute'] != 'price' ){ ?>
236
- <option <?php if ($instance['type'] == 'checkbox') echo 'selected'; ?> value="checkbox">Checkbox</option>
237
- <option <?php if ($instance['type'] == 'radio') echo 'selected'; ?> value="radio">Radio</option>
238
- <!--<option <?php if ($instance['type'] == 'select') echo 'selected'; ?> value="select">Select</option>-->
239
- <? } ?>
240
- <option <?php if ($instance['type'] == 'slider') echo 'selected'; ?> value="slider">Slider</option>
241
- </select>
242
- </label>
243
- </p>
244
- <p <? if ($instance['attribute'] == 'pa_lengthcm' or $instance['attribute'] == 'pa_widthcm' or $instance['attribute'] == 'price' ) echo " style='display: none;'"; ?> >
245
- <label>Operator:
246
- <select id="<?php echo $this->get_field_id( 'operator' ); ?>" name="<?php echo $this->get_field_name( 'operator' ); ?>" class="berocket_aapf_widget_admin_operator_select">
247
- <option <?php if ($instance['operator'] == 'AND') echo 'selected'; ?> value="AND">AND</option>
248
- <option <?php if ($instance['operator'] == 'OR') echo 'selected'; ?> value="OR">OR</option>
249
- </select>
250
- </label>
251
- </p>
252
- <p>
253
- <a href="#" class='berocket_aapf_advanced_settings_pointer'>Advanced Settings</a>
254
- </p>
255
- <div class='berocket_aapf_advanced_settings'>
256
- <p>
257
- <label>Product Category:
258
- <select id="<?php echo $this->get_field_id( 'product_cat' ); ?>" name="<?php echo $this->get_field_name( 'product_cat' ); ?>" class="berocket_aapf_widget_admin_product_cat_select">
259
- <option value="">Select Category</option>
260
- <?php foreach( $categories as $category ){ ?>
261
- <option <?php if ($instance['product_cat'] == $category->slug) echo 'selected'; ?> value="<?php echo $category->slug ?>"><?php echo $category->name ?></option>
262
- <?php } ?>
263
- </select>
264
- </label>
265
- </p>
266
- <p>
267
- <label for="<?php echo $this->get_field_id( 'height' ); ?>">Filter Box Height: </label>
268
- <input id="<?php echo $this->get_field_id( 'height' ); ?>" type="text" name="<?php echo $this->get_field_name( 'height' ); ?>" value="<?php echo $instance['height']; ?>" class="berocket_aapf_widget_admin_height_input" />px
269
- </p>
270
- <p>
271
- <label for="<?php echo $this->get_field_id( 'scroll_theme' ); ?>">Scroll Theme: </label>
272
- <select id="<?php echo $this->get_field_id( 'scroll_theme' ); ?>" name="<?php echo $this->get_field_name( 'scroll_theme' ); ?>" class="berocket_aapf_widget_admin_scroll_theme_select">
273
- <?php
274
- $scroll_themes = array("light", "dark", "minimal", "minimal-dark", "light-2", "dark-2", "light-3", "dark-3", "light-thick", "dark-thick", "light-thin",
275
- "dark-thin", "inset", "inset-dark", "inset-2", "inset-2-dark", "inset-3", "inset-3-dark", "rounded", "rounded-dark", "rounded-dots",
276
- "rounded-dots-dark", "3d", "3d-dark", "3d-thick", "3d-thick-dark");
277
- foreach( $scroll_themes as $theme ): ?>
278
- <option <?php if ($instance['scroll_theme'] == $theme) echo 'selected'; ?>><?php echo $theme; ?></option>
279
- <?php endforeach; ?>
280
- </select>
281
- </p>
282
- </div>
283
- <?php
284
  }
285
 
286
  /**
@@ -288,6 +232,8 @@ class BeRocket_AAPF_Widget extends WP_Widget {
288
  */
289
  public static function listener(){
290
  $attributes_terms = $tax_query = array();
 
 
291
 
292
  $attributes = self::get_attributes();
293
  if( @$attributes ) {
@@ -332,11 +278,12 @@ class BeRocket_AAPF_Widget extends WP_Widget {
332
  $args = array( 'tax_query' => $tax_query, 'posts_per_page' => 9, 'post_type' => 'product' );
333
 
334
  $query = new WP_Query( $args );
 
 
335
 
336
  if( $query->have_posts() ){
337
  while( $query->have_posts() ){
338
  $query->the_post();
339
- $post_thumbnail = get_the_post_thumbnail( $query->post->ID, array( 298, 219 ), array( 'title' => @$image_title ) );
340
  $product = new WC_Product($query->post);
341
  $product_price = $product->get_price();
342
 
@@ -352,31 +299,15 @@ class BeRocket_AAPF_Widget extends WP_Widget {
352
  if( $product_price < $_POST['price'][0] or $product_price > $_POST['price'][1] )
353
  continue;
354
  }
355
-
356
- echo "<li class='post-{$query->post->ID} product type-product status-publish has-post-thumbnail shipping-taxable product-type-simple instock'>
357
- <div class='top-product-section'>
358
- <a class='product-category' href='".get_permalink()."'>
359
- <span class='image-wrapper'>
360
- ".$post_thumbnail."
361
- </span>
362
- </a>
363
- <span class='add-to-cart-button-outer'><span class='add-to-cart-button-inner'><a class='qbutton add-to-cart-button button product_type_simple' data-product_sku='' data-product_id='{$query->post->ID}' rel='nofollow' href='".get_permalink()."'>Read More</a></span></span>
364
- </div>
365
- <a class='product-category' href='".get_permalink()."'>
366
- <h6>{$query->post->post_title}</h6>";
367
- $length = $product->get_attribute( 'pa_lengthcm' );
368
- $width = $product->get_attribute( 'pa_widthcm' );
369
- if( $length and $width )
370
- echo "<span class='product-size'>(" . ( round( ( $length * 0.393700787 )/100, 1 )*100 ) . "&Prime; x " . ( round( ( $width * 0.393700787 )/100, 1 )*100 ) . "&Prime;)</span>";
371
- if( $product_price )
372
- echo "<span class='price'>". $product->get_price_html() ."</span>";
373
- echo
374
- "</a>
375
- </li>";
376
  }
377
  wp_reset_postdata();
378
- }else{
379
- echo "<div class='no-products'>There are no products meeting your criteria</div>";
 
 
380
  }
381
  die();
382
  }
@@ -393,7 +324,7 @@ class BeRocket_AAPF_Widget extends WP_Widget {
393
 
394
  return $attributes;
395
  }
396
-
397
  function get_product_categories( $current_product_cat = '' ) {
398
  $args = array(
399
  'pad_counts' => 1,
@@ -408,4 +339,9 @@ class BeRocket_AAPF_Widget extends WP_Widget {
408
 
409
  return get_terms( 'product_cat', apply_filters( 'wc_product_dropdown_categories_get_terms_args', $args ) );
410
  }
411
- }
 
 
 
 
 
28
  $control_ops = array( 'id_base' => 'berocket_aapf_widget' );
29
 
30
  /* Create the widget. */
31
+ $this->WP_Widget( 'berocket_aapf_widget', 'AJAX Product Filters', $widget_ops, $control_ops );
32
  }
33
 
34
  /**
35
  * Show widget to user
36
+ *
37
+ * @param array $args
38
+ * @param array $instance
39
  */
40
  function widget( $args, $instance ) {
41
  if( !is_shop() and !is_product_category() ) return;
42
  global $wp_query;
43
 
44
+ wp_register_style( 'berocket_aapf_widget-style', plugins_url('../css/widget.min.css', __FILE__) );
45
  wp_enqueue_style( 'berocket_aapf_widget-style' );
46
 
47
  /* custom scrollbar */
52
  wp_enqueue_script( 'jquery-ui-core' );
53
  wp_enqueue_script( 'jquery-ui-slider' );
54
  wp_enqueue_script( 'berocket_aapf_widget-script', plugins_url('../js/widget.js', __FILE__), array('jquery') );
55
+ wp_enqueue_script( 'berocket_aapf_widget-hack-script', plugins_url('../js/mobiles.min.js', __FILE__), array('jquery') );
 
 
56
 
57
  $wp_query_product_cat = '-1';
58
+ if ( @$wp_query->query['product_cat'] ) {
59
+ $wp_query_product_cat = explode( "/", $wp_query->query['product_cat'] );
60
+ $wp_query_product_cat = $wp_query_product_cat[ count( $wp_query_product_cat ) - 1 ];
61
+ }
62
+
63
  wp_localize_script( 'berocket_aapf_widget-script', 'the_ajax_script', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'product_cat' => $wp_query_product_cat ) );
64
+
65
  extract( $args );
66
  extract( $instance );
67
+
68
+ $product_cat = @ json_decode( $product_cat );
69
+
70
+ if ( $product_cat ) {
71
+ $hide_widget = true;
72
+
73
+ $cur_cat = get_term_by( 'slug', $wp_query_product_cat, 'product_cat' );
74
+ $cur_cat_ancestors = get_ancestors( $cur_cat->term_id, 'product_cat' );
75
+ $cur_cat_ancestors[] = $cur_cat->term_id;
76
+
77
+ if ( $cat_propagation ){
78
+ foreach ( $product_cat as $cat ) {
79
+ $cat = get_term_by( 'slug', $cat, 'product_cat' );
80
+
81
+ if ( @ in_array( $cat->term_id, $cur_cat_ancestors ) ) {
82
+ $hide_widget = false;
83
+ }
84
+ }
85
+ } else {
86
+ foreach ( $product_cat as $cat ) {
87
+ if ( $cat == $wp_query_product_cat ) {
88
+ $hide_widget = false;
89
+ }
90
+ }
91
+ }
92
+
93
+ if ( $hide_widget ) {
94
+ return true;
95
+ }
96
+ }
97
 
98
  $terms = get_terms( array( $attribute ), $args = array( 'orderby' => 'name', 'order' => 'ASC' ) );
99
  $args = array(
121
  }
122
 
123
  if( !$scroll_theme ) $scroll_theme = 'dark';
124
+
125
+ set_query_var( 'terms', $terms );
126
+ set_query_var( 'operator', $operator );
127
+ set_query_var( 'title', $title );
128
+ set_query_var( 'class', $class );
129
+ set_query_var( 'style', $style );
130
+ set_query_var( 'scroll_theme', $scroll_theme );
131
+ set_query_var( 'x', time() );
132
+
133
+ // widget title and start tag ( <ul> ) can be found in templates/widget_start.php
134
+ br_get_template_part('widget_start');
135
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  if( $type == 'slider' ){
137
+ $min = $max = false;
138
+ $main_class = 'slider';
139
+ $slider_class = 'berocket_filter_slider';
140
+
141
  if( $attribute == 'price' ){
 
142
  foreach( $price_range as $price ){
143
  if( $min === false or $min > (int) $price ) $min = $price;
144
  if( $max === false or $max < (int) $price ) $max = $price;
145
  }
146
+ $id = rand( 0, time() );
147
+ $slider_class = 'berocket_filter_price_slider';
148
+ $main_class .= ' price';
 
 
 
 
 
 
 
 
 
149
  }else{
 
150
  foreach( $terms as $term ){
151
  if( $min === false or $min > (int) $term->slug ) $min = $term->slug;
152
  if( $max === false or $max < (int) $term->slug ) $max = $term->slug;
153
  }
154
+ $id = $term->taxonomy;
 
 
 
 
 
 
 
 
 
 
155
  }
156
+
157
+ set_query_var( 'id', $id );
158
+ set_query_var( 'main_class', $main_class );
159
+ set_query_var( 'slider_class', $slider_class );
160
+ set_query_var( 'min', number_format(floor($min), 2, '.', '') );
161
+ set_query_var( 'max', number_format(ceil($max), 2, '.', '') );
162
  }
163
+
164
+ br_get_template_part( $type );
165
+
166
+ br_get_template_part('widget_end');
167
  }
168
 
169
  /**
170
  * Validating and updating widget data
171
+ *
172
+ * @param array $new_instance
173
+ * @param array $old_instance
174
+ *
175
  * @return array - new merged instance
176
  */
177
  function update( $new_instance, $old_instance ) {
181
  $instance['title'] = strip_tags( $new_instance['title'] );
182
  $instance['attribute'] = strip_tags( $new_instance['attribute'] );
183
  $instance['type'] = strip_tags( $new_instance['type'] );
184
+ $instance['product_cat'] = ( $new_instance['product_cat'] ) ? json_encode( $new_instance['product_cat'] ) : '';
185
  $instance['scroll_theme'] = strip_tags( $new_instance['scroll_theme'] );
186
+ $instance['cat_propagation'] = (int) $new_instance['cat_propagation'];
187
+
188
  if( $new_instance['height'] != 'auto' ) $new_instance['height'] = (float) $new_instance['height'];
189
  if( !$new_instance['height'] ) $new_instance['height'] = 'auto';
190
  $instance['height'] = $new_instance['height'];
191
 
192
  if( $new_instance['operator'] != 'OR' ) $new_instance['operator'] = 'AND';
193
  $instance['operator'] = $new_instance['operator'];
194
+
195
+ if( $instance['attribute'] == 'price' ) $instance['type'] = 'slider';
196
+
197
  return $instance;
198
  }
199
+
200
  /**
201
  * Output admin form
202
+ *
203
+ * @param array $instance
204
+ *
205
+ * @return string|void
206
  */
207
  function form( $instance ) {
208
  wp_enqueue_script( 'berocket_aapf_widget-admin-script', plugins_url('../js/admin.js', __FILE__), array('jquery') );
219
  'height' => 'auto',
220
  'scroll_theme' => 'dark'
221
  );
222
+
223
  $instance = wp_parse_args( (array) $instance, $defaults );
 
224
  $attributes = $this->get_attributes();
225
+ $categories = self::get_product_categories( @ json_decode( $instance['product_cat'] ) );
226
+
227
+ include plugin_dir_path( __DIR__ ) . "templates/admin.php";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
  }
229
 
230
  /**
232
  */
233
  public static function listener(){
234
  $attributes_terms = $tax_query = array();
235
+
236
+ add_filter( 'post_class', array( __CLASS__, 'add_product_class' ) );
237
 
238
  $attributes = self::get_attributes();
239
  if( @$attributes ) {
278
  $args = array( 'tax_query' => $tax_query, 'posts_per_page' => 9, 'post_type' => 'product' );
279
 
280
  $query = new WP_Query( $args );
281
+ $br_options = get_option('br_filters_options');
282
+ $has_products = false;
283
 
284
  if( $query->have_posts() ){
285
  while( $query->have_posts() ){
286
  $query->the_post();
 
287
  $product = new WC_Product($query->post);
288
  $product_price = $product->get_price();
289
 
299
  if( $product_price < $_POST['price'][0] or $product_price > $_POST['price'][1] )
300
  continue;
301
  }
302
+
303
+ $has_products = true;
304
+ woocommerce_get_template_part( 'content', 'product' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
305
  }
306
  wp_reset_postdata();
307
+ }
308
+
309
+ if( ! $has_products ){
310
+ echo "<div class='no-products" . ( ( $br_options['no_products_class'] ) ? ' '.$br_options['no_products_class'] : '' ) . "'>" . $br_options['no_products_message'] . "</div>";
311
  }
312
  die();
313
  }
324
 
325
  return $attributes;
326
  }
327
+
328
  function get_product_categories( $current_product_cat = '' ) {
329
  $args = array(
330
  'pad_counts' => 1,
339
 
340
  return get_terms( 'product_cat', apply_filters( 'wc_product_dropdown_categories_get_terms_args', $args ) );
341
  }
342
+
343
+ public static function add_product_class( $classes ) {
344
+ $classes[] = 'product';
345
+ return $classes;
346
+ }
347
+ }
js/admin.js CHANGED
@@ -2,11 +2,11 @@
2
  $(document).ready(function () {
3
 
4
  $(document).on('change', '.berocket_aapf_widget_admin_attribute_select', function () {
5
- if ($(this).val() == 'pa_lengthcm' || $(this).val() == 'pa_widthcm' || $(this).val() == 'price') {
6
  $('.berocket_aapf_widget_admin_type_select').html('<option value="slider">Slider</option>');
7
  $('.berocket_aapf_widget_admin_operator_select').parent().parent().hide(0);
8
  } else {
9
- $('.berocket_aapf_widget_admin_type_select').html('<option value="checkbox">Checkbox</option><option value="radio">Radio</option><option value="slider">Slider</option>');
10
  $('.berocket_aapf_widget_admin_operator_select').parent().parent().show(0);
11
  }
12
  });
@@ -16,7 +16,5 @@
16
  $(this).parent().next().slideDown(300);
17
  $(this).parent().slideUp(200);
18
  });
19
-
20
- $('.berocket_aapf_widget_admin_attribute_select').change();
21
  });
22
  })(jQuery);
2
  $(document).ready(function () {
3
 
4
  $(document).on('change', '.berocket_aapf_widget_admin_attribute_select', function () {
5
+ if ($(this).val() == 'price') {
6
  $('.berocket_aapf_widget_admin_type_select').html('<option value="slider">Slider</option>');
7
  $('.berocket_aapf_widget_admin_operator_select').parent().parent().hide(0);
8
  } else {
9
+ $('.berocket_aapf_widget_admin_type_select').html('<option value="checkbox">Checkbox</option><option value="radio">Radio</option><option value="select">Select</option><option value="slider">Slider</option>');
10
  $('.berocket_aapf_widget_admin_operator_select').parent().parent().show(0);
11
  }
12
  });
16
  $(this).parent().next().slideDown(300);
17
  $(this).parent().slideUp(200);
18
  });
 
 
19
  });
20
  })(jQuery);
js/custom-scrollbar/LICENSE.txt DELETED
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2014 Manos Malihutsakis, http://manos.malihu.gr
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/custom-scrollbar/bower.json DELETED
@@ -1,45 +0,0 @@
1
- {
2
- "name": "malihu-custom-scrollbar-plugin",
3
- "version": "3.0.5",
4
- "title": "malihu custom scrollbar plugin",
5
- "description": "Highly customizable custom scrollbar jQuery plugin, featuring vertical/horizontal scrollbars, scrolling momentum, mouse-wheel, keyboard and touch support, user defined callbacks etc.",
6
- "main": [
7
- "./jquery.mCustomScrollbar.js",
8
- "./jquery.mCustomScrollbar.css",
9
- "./mCSB_buttons.png"
10
- ],
11
- "keywords": [
12
- "jquery",
13
- "custom-scrollbar",
14
- "scrollbar"
15
- ],
16
- "homepage": "http://manos.malihu.gr/jquery-custom-content-scroller",
17
- "author": {
18
- "name": "malihu",
19
- "url": "http://manos.malihu.gr"
20
- },
21
- "repository": {
22
- "type": "git",
23
- "url": "git://github.com/malihu/malihu-custom-scrollbar-plugin.git"
24
- },
25
- "licenses": [
26
- {
27
- "type": "MIT",
28
- "url": "http://opensource.org/licenses/MIT"
29
- }
30
- ],
31
- "dependencies": {
32
- "jquery": ">=1.6",
33
- "jquery-mousewheel": ">=3.0.6"
34
- },
35
- "ignore": [
36
- "*.md",
37
- ".*",
38
- "*.txt",
39
- "*.json",
40
- "*.html",
41
- "/examples",
42
- "/source-files",
43
- "/js"
44
- ]
45
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/custom-scrollbar/malihu-custom-scrollbar.jquery.json DELETED
@@ -1,28 +0,0 @@
1
- {
2
- "name": "malihu-custom-scrollbar",
3
- "title": "malihu jQuery custom scrollbar",
4
- "description": "Highly customizable custom scrollbar jQuery plugin, featuring vertical/horizontal scrollbars, scrolling momentum, mouse-wheel, keyboard and touch support user defined callbacks etc.",
5
- "keywords": [
6
- "jquery-plugin",
7
- "custom-scrollbar",
8
- "scrollbar"
9
- ],
10
- "version": "3.0.5",
11
- "author": {
12
- "name": "malihu",
13
- "url": "http://manos.malihu.gr"
14
- },
15
- "licenses": [
16
- {
17
- "type": "MIT",
18
- "url": "http://opensource.org/licenses/MIT"
19
- }
20
- ],
21
- "bugs": "https://github.com/malihu/malihu-custom-scrollbar-plugin/issues",
22
- "homepage": "http://manos.malihu.gr/jquery-custom-content-scroller",
23
- "download": "https://github.com/malihu/malihu-custom-scrollbar-plugin/releases",
24
- "dependencies": {
25
- "jquery": ">=1.6",
26
- "jquery-mousewheel": ">=3.0.6"
27
- }
28
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/custom-scrollbar/package.json DELETED
@@ -1,37 +0,0 @@
1
- {
2
- "name": "malihu-custom-scrollbar-plugin",
3
- "version": "3.0.5",
4
- "author": "malihu (http://manos.malihu.gr)",
5
- "description": "Highly customizable custom scrollbar jQuery plugin, featuring vertical/horizontal scrollbars, scrolling momentum, mouse-wheel, keyboard and touch support user defined callbacks etc.",
6
- "license": "MIT",
7
- "homepage": "http://manos.malihu.gr/jquery-custom-content-scroller",
8
- "main": [
9
- "./jquery.mCustomScrollbar.js",
10
- "./jquery.mCustomScrollbar.css",
11
- "./mCSB_buttons.png"
12
- ],
13
- "repository": {
14
- "type": "git",
15
- "url": "https://github.com/malihu/malihu-custom-scrollbar-plugin.git"
16
- },
17
- "bugs": {
18
- "url": "https://github.com/malihu/malihu-custom-scrollbar-plugin/issues"
19
- },
20
- "keywords": [
21
- "jquery-plugin",
22
- "custom-scrollbar",
23
- "scrollbar"
24
- ],
25
- "files": [
26
- "jquery.mCustomScrollbar.js",
27
- "jquery.mCustomScrollbar.css",
28
- "mCSB_buttons.png",
29
- "readme.md"
30
- ],
31
- "jam": {
32
- "dependencies": {
33
- "jquery": ">=1.6",
34
- "jquery-mousewheel": ">=3.0.6"
35
- }
36
- }
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/custom-scrollbar/readme.md DELETED
@@ -1,56 +0,0 @@
1
- malihu custom scrollbar plugin
2
- ================================
3
-
4
- Highly customizable custom scrollbar jQuery plugin. Features include:
5
-
6
- * Vertical and/or horizontal scrollbar(s)
7
- * Adjustable scrolling momentum
8
- * Mouse-wheel, keyboard and touch support
9
- * Ready-to-use themes and customization via CSS
10
- * RTL direction support
11
- * Option parameters for full control of scrollbar functionality
12
- * Methods for triggering actions like scroll-to, update, destroy etc.
13
- * User-defined callbacks
14
-
15
- #### Installation
16
-
17
- Bower: `bower install malihu-custom-scrollbar-plugin`
18
-
19
- npm: `npm install malihu-custom-scrollbar-plugin`
20
-
21
- #### Usage
22
-
23
- `$(selector).mCustomScrollbar();`
24
-
25
- #### For more information
26
-
27
- * [Plugin homepage and documentation](http://manos.malihu.gr/jquery-custom-content-scroller)
28
-
29
- Requirements
30
- -------------------------
31
-
32
- jQuery version **1.6.0** or higher
33
-
34
- Browser compatibility
35
- -------------------------
36
-
37
- * Internet Explorer 8+
38
- * Firefox
39
- * Chrome
40
- * Opera
41
- * Safari
42
- * iOS
43
- * Android
44
- * Windows Phone
45
-
46
- License
47
- -------------------------
48
-
49
- MIT License (MIT)
50
-
51
- http://opensource.org/licenses/MIT
52
-
53
- Donate
54
- -------------------------
55
-
56
- https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=UYJ5G65M6ZA28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/mobiles.min.js ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * jQuery UI Touch Punch 0.2.3
3
+ *
4
+ * Copyright 2011–2014, Dave Furfero
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ *
7
+ * Depends:
8
+ * jquery.ui.widget.js
9
+ * jquery.ui.mouse.js
10
+ */
11
+ (function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return}var d=b.ui.mouse.prototype,f=d._mouseInit,c=d._mouseDestroy,a;function e(h,i){if(h.originalEvent.touches.length>1){return}h.preventDefault();var j=h.originalEvent.changedTouches[0],g=document.createEvent("MouseEvents");g.initMouseEvent(i,true,true,window,1,j.screenX,j.screenY,j.clientX,j.clientY,false,false,false,false,0,null);h.target.dispatchEvent(g)}d._touchStart=function(h){var g=this;if(a||!g._mouseCapture(h.originalEvent.changedTouches[0])){return}a=true;g._touchMoved=false;e(h,"mouseover");e(h,"mousemove");e(h,"mousedown")};d._touchMove=function(g){if(!a){return}this._touchMoved=true;e(g,"mousemove")};d._touchEnd=function(g){if(!a){return}e(g,"mouseup");e(g,"mouseout");if(!this._touchMoved){e(g,"click")}a=false};d._mouseInit=function(){var g=this;g.element.bind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});f.call(g)};d._mouseDestroy=function(){var g=this;g.element.unbind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});c.call(g)}})(jQuery);
js/widget.js CHANGED
@@ -1,40 +1,53 @@
1
  (function ($){
2
  $(document).ready(function (){
3
 
4
- var berocket_aapf_widget_product_filters = [];
 
 
5
  function updateProducts( $el ){
6
  $('ul.products').addClass('hide_products').append('<div class="berocket_aapf_widget_loading" />');
7
 
8
  if( $el ){
9
  $li = $el.parent().parent();
 
10
  taxonomy = $li.data('taxonomy');
11
  term_id = $li.data('term_id');
12
  operator = $li.data('operator');
13
-
14
- if( $el.is(':checked') || $el.is(':selected') ){
15
- berocket_aapf_widget_product_filters[berocket_aapf_widget_product_filters.length] = [taxonomy,term_id,operator];
16
- }else{
17
- $(berocket_aapf_widget_product_filters).each(function (i,o){
18
- if( o[0] == taxonomy && o[1] == term_id ){
19
- berocket_aapf_widget_product_filters.splice(i, 1);
20
- }
21
- });
22
- }
 
 
 
 
 
 
 
 
 
 
23
  }
24
-
25
- if( $('.berocket_filter_slider').hasClass('berocket_filter_slider') ){
26
- var berocket_aapf_widget_product_limits = [];
27
- $('.berocket_filter_slider').each(function (i,o){
28
  val1 = $('#'+$(o).data('fields_1')).val();
29
  val2 = $('#'+$(o).data('fields_2')).val();
30
  berocket_aapf_widget_product_limits[berocket_aapf_widget_product_limits.length] = [$(o).data('taxonomy'), val1, val2];
31
  });
32
  }
33
-
34
- if( $('.berocket_filter_price_slider').hasClass('berocket_filter_price_slider') ){
35
- val1 = $('#'+$('.berocket_filter_price_slider').data('fields_1')).val();
36
- val2 = $('#'+$('.berocket_filter_price_slider').data('fields_2')).val();
37
- var berocket_aapf_widget_product_price_limit = [val1, val2];
38
  }
39
 
40
  $.post( the_ajax_script.ajaxurl, { terms: berocket_aapf_widget_product_filters, price: berocket_aapf_widget_product_price_limit, limits: berocket_aapf_widget_product_limits, product_cat: the_ajax_script.product_cat, action: 'berocket_aapf_listener' }, function (data){
@@ -59,7 +72,7 @@
59
  $( '#'+$o.data('fields_1') ).val( ui.values[0] );
60
  $( '#'+$o.data('fields_2') ).val( ui.values[1] );
61
  },
62
- stop: function( event, ui ){
63
  updateProducts( false );
64
  }
65
  });
@@ -92,4 +105,4 @@
92
  })
93
 
94
  });
95
- })(jQuery)
1
  (function ($){
2
  $(document).ready(function (){
3
 
4
+ var berocket_aapf_widget_product_filters = [],
5
+ berocket_aapf_widget_product_limits = [],
6
+ berocket_aapf_widget_product_price_limit = [];
7
  function updateProducts( $el ){
8
  $('ul.products').addClass('hide_products').append('<div class="berocket_aapf_widget_loading" />');
9
 
10
  if( $el ){
11
  $li = $el.parent().parent();
12
+ if( $el.is("select") ) $li = $el.find("option:selected");
13
  taxonomy = $li.data('taxonomy');
14
  term_id = $li.data('term_id');
15
  operator = $li.data('operator');
16
+
17
+ if( $el.is("select") ){
18
+ $(berocket_aapf_widget_product_filters).each(function (i, o) {
19
+ if (o[0] == taxonomy) {
20
+ berocket_aapf_widget_product_filters.splice(i, 1);
21
+ }
22
+ });
23
+ if( $li.val() )
24
+ berocket_aapf_widget_product_filters[berocket_aapf_widget_product_filters.length] = [taxonomy, term_id, operator];
25
+ }else {
26
+ if ($el.is(':checked') || $el.is(':selected')) {
27
+ berocket_aapf_widget_product_filters[berocket_aapf_widget_product_filters.length] = [taxonomy, term_id, operator];
28
+ } else {
29
+ $(berocket_aapf_widget_product_filters).each(function (i, o) {
30
+ if (o[0] == taxonomy && o[1] == term_id) {
31
+ berocket_aapf_widget_product_filters.splice(i, 1);
32
+ }
33
+ });
34
+ }
35
+ }
36
  }
37
+
38
+ $t = $('.berocket_filter_slider');
39
+ if( $t.hasClass('berocket_filter_slider') ){
40
+ $t.each(function (i,o){
41
  val1 = $('#'+$(o).data('fields_1')).val();
42
  val2 = $('#'+$(o).data('fields_2')).val();
43
  berocket_aapf_widget_product_limits[berocket_aapf_widget_product_limits.length] = [$(o).data('taxonomy'), val1, val2];
44
  });
45
  }
46
+ $d = $('.berocket_filter_price_slider');
47
+ if( $d.hasClass('berocket_filter_price_slider') ){
48
+ val1 = $('#'+$d.data('fields_1')).val();
49
+ val2 = $('#'+$d.data('fields_2')).val();
50
+ berocket_aapf_widget_product_price_limit = [val1, val2];
51
  }
52
 
53
  $.post( the_ajax_script.ajaxurl, { terms: berocket_aapf_widget_product_filters, price: berocket_aapf_widget_product_price_limit, limits: berocket_aapf_widget_product_limits, product_cat: the_ajax_script.product_cat, action: 'berocket_aapf_listener' }, function (data){
72
  $( '#'+$o.data('fields_1') ).val( ui.values[0] );
73
  $( '#'+$o.data('fields_2') ).val( ui.values[1] );
74
  },
75
+ stop: function(){
76
  updateProducts( false );
77
  }
78
  });
105
  })
106
 
107
  });
108
+ })(jQuery);
js/widget.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(a){a(document).ready(function(){var e=[],d=[],c=[];function b(f){a("ul.products").addClass("hide_products").append('<div class="berocket_aapf_widget_loading" />');if(f){$li=f.parent().parent();taxonomy=$li.data("taxonomy");term_id=$li.data("term_id");operator=$li.data("operator");if(f.is(":checked")||f.is(":selected")){e[e.length]=[taxonomy,term_id,operator]}else{a(e).each(function(g,h){if(h[0]==taxonomy&&h[1]==term_id){e.splice(g,1)}})}}$t=a(".berocket_filter_slider");if($t.hasClass("berocket_filter_slider")){$t.each(function(g,h){val1=a("#"+a(h).data("fields_1")).val();val2=a("#"+a(h).data("fields_2")).val();d[d.length]=[a(h).data("taxonomy"),val1,val2]})}$d=a(".berocket_filter_price_slider");if($d.hasClass("berocket_filter_price_slider")){val1=a("#"+$d.data("fields_1")).val();val2=a("#"+$d.data("fields_2")).val();c=[val1,val2]}a.post(the_ajax_script.ajaxurl,{terms:e,price:c,limits:d,product_cat:the_ajax_script.product_cat,action:"berocket_aapf_listener"},function(g){a("ul.products").html(g).removeClass("hide_products");a(".berocket_aapf_widget_loading").remove()})}a(".berocket_aapf_widget").on("change","input, select",function(){b(a(this))});a(".berocket_filter_slider").each(function(f,g){a(g).slider({range:true,min:a(g).data("min")>>0,max:a(g).data("max")>>0,values:[a(g).data("min")>>0,a(g).data("max")>>0],slide:function(h,i){$o=a(i.handle).parents("div.berocket_filter_slider");a("#"+$o.data("fields_1")).val(i.values[0]);a("#"+$o.data("fields_2")).val(i.values[1])},stop:function(){b(false)}})});a(".berocket_filter_price_slider").each(function(f,g){a(g).slider({range:true,min:a(g).data("min")>>0,max:a(g).data("max")>>0,values:[a(g).data("min")>>0,a(g).data("max")>>0],slide:function(h,i){$o=a(i.handle).parents("div.berocket_filter_price_slider");a("#"+$o.data("fields_1")).val(i.values[0].toFixed(2));a("#"+$o.data("fields_2")).val(i.values[1].toFixed(2))},stop:function(h,i){b(false)}})});a(".berocket_aapf_widget_height_control").each(function(f,g){a(g).mCustomScrollbar({axis:"xy",theme:a(g).data("scroll_theme"),scrollInertia:300})})})})(jQuery);
readme.txt CHANGED
@@ -4,8 +4,8 @@ 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.0.1
8
- Stable tag: 1.0.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -26,6 +26,7 @@ WooCommerce AJAX Filters - advanced AJAX product filters plugin for WooCommerce.
26
  * Unlimited filters by product attributes
27
 
28
 
 
29
  = How It Works: =
30
 
31
  = Step 1: =
@@ -37,16 +38,19 @@ WooCommerce AJAX Filters - advanced AJAX product filters plugin for WooCommerce.
37
  = Step 2: =
38
  * Install and activate plugin
39
  * Go to Admin area -> Appearance -> Widgets
40
- * In Available Widgets ( left side of the screen ) find Product Filters
41
  * Drag it to Sidebar you choose for it
42
  * Enter title, choose attribute that will be used for filtering products, choose filter type,
43
  choose operator( whether product should have all selected values (AND) or one of them (OR) ),
44
  * Click save and go to your shop to check how it work.
45
  * That's it =)
46
 
 
 
 
47
  = Advanced Settings (Widget area): =
48
 
49
- * Product Category - if you want to pin your filter to one category of the product this is good place to do it.
50
  Eg. You selling Phones and Cases for them. If user choose Category "Phones" filter "Have Wi-Fi" will appear
51
  but if user will choose "Cases" it will not be there as Admin set that "Have Wi-Fi" filter will be visible only on
52
  "Phones" category.
@@ -65,9 +69,6 @@ WooCommerce AJAX Filters - advanced AJAX product filters plugin for WooCommerce.
65
  * Option to add icons before/after option text
66
  * Option to take control over (default) sorting function, make it AJAXy and work with filters
67
 
68
- = Changes: =
69
- * Optimize and then Refactor the code
70
-
71
 
72
  == Installation ==
73
 
@@ -85,5 +86,24 @@ WooCommerce AJAX Filters - advanced AJAX product filters plugin for WooCommerce.
85
 
86
  == Changelog ==
87
 
88
- * 1.0.2 - better support for older PHP versions
89
- * 1.0.1 is the first public version
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.1
8
+ Stable tag: 1.0.3
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
26
  * Unlimited filters by product attributes
27
 
28
 
29
+
30
  = How It Works: =
31
 
32
  = Step 1: =
38
  = Step 2: =
39
  * Install and activate plugin
40
  * Go to Admin area -> Appearance -> Widgets
41
+ * In Available Widgets ( left side of the screen ) find AJAX Product Filters
42
  * Drag it to Sidebar you choose for it
43
  * Enter title, choose attribute that will be used for filtering products, choose filter type,
44
  choose operator( whether product should have all selected values (AND) or one of them (OR) ),
45
  * Click save and go to your shop to check how it work.
46
  * That's it =)
47
 
48
+
49
+
50
+
51
  = Advanced Settings (Widget area): =
52
 
53
+ * Product Category - if you want to pin your filter to category of the product this is good place to do it.
54
  Eg. You selling Phones and Cases for them. If user choose Category "Phones" filter "Have Wi-Fi" will appear
55
  but if user will choose "Cases" it will not be there as Admin set that "Have Wi-Fi" filter will be visible only on
56
  "Phones" category.
69
  * Option to add icons before/after option text
70
  * Option to take control over (default) sorting function, make it AJAXy and work with filters
71
 
 
 
 
72
 
73
  == Installation ==
74
 
86
 
87
  == Changelog ==
88
 
89
+ = 1.0.3 =
90
+ * Enhancement - CSS and JavaScript files minimized
91
+ * Enhancement - Settings page added
92
+ * Enhancement - "No Products" message and it's class can be changed through admin
93
+ * Enhancement - Option added that can enable control over sorting( if visible )
94
+ * Enhancement - User can select several categories instead of one. Now you don't need to create several same filters
95
+ for different categories.
96
+ * Enhancement - Added option "include subcats?". if selected filter will be shown in selected categories and their
97
+ subcategories
98
+ * Fix - Adding support to themes that require product div to have "product" class
99
+ * Fix - Slider in categories wasn't initialized
100
+ * Fix - Subcategories wasn't working. Only Main categories were showing filters
101
+ * Templating - return woocommerce/theme default structure for product
102
+ * Templating - html parts moved to separate files in templates folder. You can overwrite them by creating folder
103
+ "woocommerce-filters" and file with same name as in plugin templates folder.
104
+
105
+ = 1.0.2 =
106
+ * Fix - better support for older PHP versions
107
+
108
+ = 1.0.1 =
109
+ * First public version
templates/admin-settings.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap">
2
+ <h4>Advanced AJAX Product Filters for WooCommerce by <a href="http://berocket.com" target="_blank">BeRocket</a> &amp; <a href="http://dholovnia.me" target="_blank">Dima Holovnia</a></h4>
3
+ <form method="post" action="options.php">
4
+ <?php
5
+ settings_fields('br_filters_plugin_options');
6
+ $options = get_option('br_filters_options');
7
+ ?>
8
+ <table class="form-table">
9
+ <tr>
10
+ <th scope="row">"No Products" message</th>
11
+ <td>
12
+ <input size="50" name="br_filters_options[no_products_message]" type='text' value='<?php echo @$options['no_products_message']?>'/>
13
+ <br />
14
+ <span style="color:#666666;margin-left:2px;">Text that will be shown if no products found</span>
15
+ </td>
16
+ </tr>
17
+ <tr>
18
+ <th scope="row">"No Products" class</th>
19
+ <td>
20
+ <input name="br_filters_options[no_products_class]" type='text' value='<?php echo @$options['no_products_class']?>'/>
21
+ <br />
22
+ <span style="color:#666666;margin-left:2px;">Add class and use it to style "No Products" box</span>
23
+ </td>
24
+ </tr>
25
+ <tr>
26
+ <th scope="row">Sorting control</th>
27
+ <td>
28
+ <input name="br_filters_options[control_sorting]" type='checkbox' value='1' <?php if( @$options['control_sorting'] ) echo "checked='checked'";?>/>
29
+ <span style="color:#666666;margin-left:2px;">Take control over WooCommerce's sorting selectbox? ( not working yet )</span>
30
+ </td>
31
+ </tr>
32
+ </table>
33
+ <p class="submit">
34
+ <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
35
+ </p>
36
+ </form>
37
+ </div>
templates/admin.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p>
2
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>">Filter Title: </label>
3
+ <input id="<?php echo $this->get_field_id( 'title' ); ?>" type="text" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
4
+ </p>
5
+ <p>
6
+ <label>Attribute:
7
+ <select id="<?php echo $this->get_field_id( 'attribute' ); ?>" name="<?php echo $this->get_field_name( 'attribute' ); ?>" class="berocket_aapf_widget_admin_attribute_select">
8
+ <option <?php if ($instance['attribute'] == 'price') echo 'selected'; ?> value="price">Price</option>
9
+ <?php foreach( $attributes as $k => $v ){ ?>
10
+ <option <?php if ($instance['attribute'] == $k) echo 'selected'; ?> value="<?php echo $k ?>"><?php echo $v ?></option>
11
+ <?php } ?>
12
+ </select>
13
+ </label>
14
+ </p>
15
+ <p>
16
+ <label>Type:
17
+ <select id="<?php echo $this->get_field_id( 'type' ); ?>" name="<?php echo $this->get_field_name( 'type' ); ?>" class="berocket_aapf_widget_admin_type_select">
18
+ <? if ( $instance['attribute'] != 'price' ){ ?>
19
+ <option <?php if ($instance['type'] == 'checkbox') echo 'selected'; ?> value="checkbox">Checkbox</option>
20
+ <option <?php if ($instance['type'] == 'radio') echo 'selected'; ?> value="radio">Radio</option>
21
+ <option <?php if ($instance['type'] == 'select') echo 'selected'; ?> value="select">Select</option>
22
+ <? } ?>
23
+ <option <?php if ($instance['type'] == 'slider') echo 'selected'; ?> value="slider">Slider</option>
24
+ </select>
25
+ </label>
26
+ </p>
27
+ <p <? if ($instance['attribute'] == 'pa_lengthcm' or $instance['attribute'] == 'pa_widthcm' or $instance['attribute'] == 'price' ) echo " style='display: none;'"; ?> >
28
+ <label>Operator:
29
+ <select id="<?php echo $this->get_field_id( 'operator' ); ?>" name="<?php echo $this->get_field_name( 'operator' ); ?>" class="berocket_aapf_widget_admin_operator_select">
30
+ <option <?php if ($instance['operator'] == 'AND') echo 'selected'; ?> value="AND">AND</option>
31
+ <option <?php if ($instance['operator'] == 'OR') echo 'selected'; ?> value="OR">OR</option>
32
+ </select>
33
+ </label>
34
+ </p>
35
+ <p>
36
+ <a href="#" class='berocket_aapf_advanced_settings_pointer'>Advanced Settings</a>
37
+ </p>
38
+ <div class='berocket_aapf_advanced_settings'>
39
+ <p>
40
+ <label>Product Category:
41
+ <label class="berocket_aapf_advanced_settings_subcategory">
42
+ <input type="checkbox" name="<?php echo $this->get_field_name( 'cat_propagation' ); ?>" <?php if ( $instance['cat_propagation'] ) echo 'checked'; ?> value="1" class="berocket_aapf_widget_admin_height_input" />
43
+ include subcats?
44
+ </label>
45
+ </label>
46
+ <ul class="berocket_aapf_advanced_settings_categories_list">
47
+ <?php
48
+ $p_cat = @json_decode( $instance['product_cat'] );
49
+
50
+ foreach( $categories as $category ){
51
+ $selected_category = false;
52
+
53
+ if( $p_cat )
54
+ foreach( $p_cat as $cat ){
55
+ if( $cat == $category->slug )
56
+ $selected_category = true;
57
+ }
58
+ ?>
59
+ <li>
60
+ <input type="checkbox" name="<?php echo $this->get_field_name( 'product_cat' ); ?>[]" <?php if ( $selected_category ) echo 'checked'; ?> value="<?php echo $category->slug ?>" class="berocket_aapf_widget_admin_height_input" />
61
+ <?php echo $category->name ?>
62
+ </li>
63
+ <?php } ?>
64
+ </ul>
65
+ </p>
66
+ <p>
67
+ <label for="<?php echo $this->get_field_id( 'height' ); ?>">Filter Box Height: </label>
68
+ <input id="<?php echo $this->get_field_id( 'height' ); ?>" type="text" name="<?php echo $this->get_field_name( 'height' ); ?>" value="<?php echo $instance['height']; ?>" class="berocket_aapf_widget_admin_height_input" />px
69
+ </p>
70
+ <p>
71
+ <label for="<?php echo $this->get_field_id( 'scroll_theme' ); ?>">Scroll Theme: </label>
72
+ <select id="<?php echo $this->get_field_id( 'scroll_theme' ); ?>" name="<?php echo $this->get_field_name( 'scroll_theme' ); ?>" class="berocket_aapf_widget_admin_scroll_theme_select">
73
+ <?php
74
+ $scroll_themes = array("light", "dark", "minimal", "minimal-dark", "light-2", "dark-2", "light-3", "dark-3", "light-thick", "dark-thick", "light-thin",
75
+ "dark-thin", "inset", "inset-dark", "inset-2", "inset-2-dark", "inset-3", "inset-3-dark", "rounded", "rounded-dark", "rounded-dots",
76
+ "rounded-dots-dark", "3d", "3d-dark", "3d-thick", "3d-thick-dark");
77
+ foreach( $scroll_themes as $theme ): ?>
78
+ <option <?php if ($instance['scroll_theme'] == $theme) echo 'selected'; ?>><?php echo $theme; ?></option>
79
+ <?php endforeach; ?>
80
+ </select>
81
+ </p>
82
+ </div>
templates/checkbox.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The template for displaying checkbox filters
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 foreach( $terms as $term ):?>
13
+ <li data-term_id='<?=$term->term_id?>' data-taxonomy='<?=$term->taxonomy?>' data-operator='<?=$operator?>'>
14
+ <span>
15
+ <input type='checkbox' id='radio_<?=$term->term_id?>' /><label for='radio_<?=$term->term_id?>'> <?=$term->name?></label>
16
+ </span>
17
+ </li>
18
+ <?php endforeach; ?>
templates/radio.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php foreach( $terms as $term ): ?>
2
+ <li data-term_id='<?=$term->term_id?>' data-taxonomy='<?=$term->taxonomy?>' data-operator='<?=$operator?>'>
3
+ <span>
4
+ <input type='radio' id='radio_<?=$term->term_id?>' name='radio_<?=$term->taxonomy?>_<?=$x?>' /><label for='radio_<?=$term->term_id?>'> <?=$term->name?></label>
5
+ </span>
6
+ </li>
7
+ <?php endforeach; ?>
templates/select.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <li>
2
+ <span>
3
+ <select>
4
+ <option data-taxonomy='<?=$terms[0]->taxonomy?>' value=''>Any</option>
5
+ <?php foreach( $terms as $term ): ?>
6
+ <option data-term_id='<?=$term->term_id?>' data-taxonomy='<?=$term->taxonomy?>' data-operator='<?=$operator?>'><?=$term->name?></option>
7
+ <?php endforeach; ?>
8
+ </select>
9
+ </span>
10
+ </li>
templates/slider.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <li class='<?=$main_class?>'>
2
+ <span class='left'>
3
+ <input type='text' disabled id='text_<?=$id?>_1' value='<?=$min?>' /><label for='text_<?=$id?>_1'>
4
+ </span>
5
+ <span class='right'>
6
+ <input type='text' disabled id='text_<?=$id?>_2' value='<?=$max?>' /><label for='text_<?=$id?>_2'>
7
+ </span>
8
+ <span class='slide'>
9
+ <div class='<?=$slider_class?>' data-taxonomy='<?=$id?>' data-min='<?=$min?>' data-max='<?=$max?>' data-fields_1='text_<?=$id?>_1' data-fields_2='text_<?=$id?>_2'></div>
10
+ </span>
11
+ </li>
templates/widget_end.php ADDED
@@ -0,0 +1 @@
 
1
+ </ul>
templates/widget_start.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <h3 class="widget-title berocket_aapf_widget-title"><?=$title?></h3>
2
+ <ul class='berocket_aapf_widget <?=$class?>' <?=$style?> data-scroll_theme='<?=$scroll_theme?>'>
woocommerce-filters.php CHANGED
@@ -3,17 +3,87 @@
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.0.2
7
  Author: BeRocket
8
  Author URI: http://berocket.com
9
  */
10
 
11
  require_once dirname( __FILE__ ).'/includes/widget.php';
 
12
 
13
  /**
14
  * Class BeRocket_AAPF
15
- * will be added on next release. There are no global options for now so no need in this class
16
  */
17
 
18
- class BeRocket_AAPF {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  new BeRocket_AAPF;
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.0.3
7
  Author: BeRocket
8
  Author URI: http://berocket.com
9
  */
10
 
11
  require_once dirname( __FILE__ ).'/includes/widget.php';
12
+ require_once dirname( __FILE__ ).'/includes/functions.php';
13
 
14
  /**
15
  * Class BeRocket_AAPF
 
16
  */
17
 
18
+ class BeRocket_AAPF {
19
+
20
+ public static $defaults = array(
21
+ "no_products_message" => "There are no products meeting your criteria",
22
+ "no_products_class" => "",
23
+ "control_sorting" => "0"
24
+ );
25
+
26
+ function __construct(){
27
+ register_activation_hook(__FILE__, array( __CLASS__, 'br_add_defaults' ) );
28
+ register_uninstall_hook(__FILE__, array( __CLASS__, 'br_delete_plugin_options' ) );
29
+
30
+ add_action( 'admin_menu', array( __CLASS__, 'br_add_options_page' ) );
31
+ add_action( 'admin_init', array( __CLASS__, 'register_br_options' ) );
32
+ }
33
+
34
+ public static function br_add_options_page(){
35
+ add_submenu_page( 'woocommerce', 'Product Filters Settings', 'Product Filters', 'manage_options', 'br-product-filters', array( __CLASS__, 'br_render_form' ) );
36
+ }
37
+
38
+ public static function br_render_form(){
39
+ include plugin_dir_path( __DIR__ ) . "templates/admin-settings.php";
40
+ }
41
+
42
+ /**
43
+ * Get template part (for templates like the slider).
44
+ *
45
+ * @access public
46
+ * @param string $name (default: '')
47
+ * @return void
48
+ */
49
+ public static function br_get_template_part( $name = '' ) {
50
+ $template = '';
51
+
52
+ // Look in your_child_theme/woocommerce-filters/name.php
53
+ if ( $name ) {
54
+ $template = locate_template( "woocommerce-filters/{$name}.php" );
55
+ }
56
+
57
+ // Get default slug-name.php
58
+ if ( ! $template && $name && file_exists( plugin_dir_path( __DIR__ ) . "templates/{$name}.php" ) ) {
59
+ $template = plugin_dir_path( __DIR__ ) . "templates/{$name}.php";
60
+ }
61
+
62
+ // Allow 3rd party plugin filter template file from their plugin
63
+ $template = apply_filters( 'br_get_template_part', $template, $name );
64
+
65
+
66
+ if ( $template ) {
67
+ load_template( $template, false );
68
+ }
69
+ }
70
+
71
+ public static function register_br_options() {
72
+ register_setting( 'br_filters_plugin_options', 'br_filters_options' );
73
+ }
74
+
75
+ public static function br_add_defaults(){
76
+ $tmp = get_option('br_filters_options');
77
+ if( @$tmp['chk_default_options_db'] == '1' or ! @is_array( $tmp ) ){
78
+ delete_option( 'br_filters_options' );
79
+ update_option( 'br_filters_options', BeRocket_AAPF::$defaults );
80
+ }
81
+ }
82
+
83
+ public static function br_delete_plugin_options(){
84
+ delete_option( 'br_filters_options' );
85
+ }
86
+
87
+ }
88
+
89
  new BeRocket_AAPF;