PluginProbe
WP Ultimate Post Grid / 4.0.1
WP Ultimate Post Grid v4.0.1
4.1.1 trunk 1.5 1.6 1.7 1.7.1 1.7.2 1.8 1.9 2.0 2.1 2.2 2.3 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.2 3.0.0 3.3.0 3.4.0 3.5.0 3.6.0 3.7.0 All 32 releases
wp-ultimate-post-grid / assets / js / public / grid / custom-fields.js

custom-fields.js in WP Ultimate Post Grid 4.0.1, at assets/js/public/grid/custom-fields.js

98 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 export default ( elemId, args ) => {
2 return {
3 getCustomFieldSelectors( selected, args ) {
4 let selectors = [];
5 const selectedValues = selected.hasOwnProperty( args.custom_field ) ? selected[ args.custom_field ] : [];
6
7 for ( let i = 0; i < selectedValues.length; i++ ) {
8 const items = this.elem.querySelectorAll( '.wpupg-item' );
9 const dataKey = 'data-wpupg-cf-' + args.custom_field;
10 const classSelector = 'wpupg-cf-filter-' + args.id + '-' + i;
11
12 // Value to test.
13 const valueToTest = this.getCustomFieldTestValue( selectedValues[i], args );
14
15 for ( let item of items ) {
16 item.classList.remove( classSelector );
17 let itemValue = item.getAttribute( dataKey );
18
19 if ( null === itemValue ) {
20 continue;
21 }
22
23 // Maybe convert to number.
24 if ( 'number' === valueToTest.type || 'range' === valueToTest.type ) {
25 itemValue = itemValue.replace( ',', '.' );
26 itemValue = parseFloat( itemValue );
27 }
28
29 // Add class if matches this filter.
30 if ( 'range' !== valueToTest.type ) {
31 if ( 'fuzzy' === valueToTest.type ) {
32 // Fuzzy matching.
33 if ( itemValue.indexOf( valueToTest.value ) !== -1 ) {
34 item.classList.add( classSelector );
35 }
36 } else {
37 // Exact match only.
38 if ( itemValue === valueToTest.value ) {
39 item.classList.add( classSelector );
40 }
41 }
42 } else {
43 if ( valueToTest.value[0] <= itemValue && itemValue <= valueToTest.value[1] ) {
44 item.classList.add( classSelector );
45 }
46 }
47 }
48
49 selectors.push( '.' + classSelector );
50 }
51
52 return selectors;
53 },
54 getCustomFieldQueryArgs( selected, args ) {
55 let values = [];
56 const selectedValues = selected.hasOwnProperty( args.custom_field ) ? selected[ args.custom_field ] : [];
57
58 for ( let selectedValue of selectedValues ) {
59 values.push( this.getCustomFieldTestValue( selectedValue, args ) );
60 }
61
62 return {
63 'type': 'custom_field',
64 'custom_field': args.custom_field,
65 'values': values,
66 'values_inverse': args.inverse,
67 'values_relation': 'match_all' === args.multiselect_type ? 'AND' : 'OR',
68 };
69 },
70 getCustomFieldTestValue( value, args ) {
71 let valueToTest = {
72 type: 'string',
73 value: value,
74 };
75
76 if ( args.custom_field_numeric ) {
77 valueToTest.value = valueToTest.value.replace( ',', '.' );
78
79 if ( -1 === valueToTest.value.indexOf( '-' ) ) {
80 valueToTest.type = 'number';
81 valueToTest.value = parseFloat( valueToTest.value );
82 } else {
83 let rangeValues = valueToTest.value.split( '-' );
84
85 valueToTest.type = 'range';
86 valueToTest.value = [
87 parseFloat( rangeValues[0] ),
88 parseFloat( rangeValues[1] ),
89 ];
90 }
91 } else if ( args.custom_field_fuzzy ) {
92 valueToTest.type = 'fuzzy';
93 }
94
95 return valueToTest;
96 },
97 }
98 };