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 / sorting.js

sorting.js in WP Ultimate Post Grid 4.0.1, at assets/js/public/grid/sorting.js

108 lines 3.5 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 order: args.order,
4 defaultOrder: args.order,
5 usingDefaultOrder() {
6 if ( JSON.stringify( this.order ) === JSON.stringify( this.defaultOrder ) ) {
7 return true;
8 }
9
10 if ( 'default' === this.order[0].by && this.defaultOrder[0].type === this.order[0].type ) {
11 return true;
12 }
13
14 return false;
15 },
16 getOrderKey() {
17 let orderBy = this.order[0].by;
18
19 if ( 'default' === orderBy ) {
20 orderBy = this.defaultOrder[0].by;
21 }
22
23 return `${ orderBy }|${ this.order[0].type }`;
24 },
25 getOrderDeeplink() {
26 if ( this.usingDefaultOrder() ) {
27 return false;
28 }
29
30 return `order:${ this.order[0].by }-${ this.order[0].type }`;
31 },
32 setOrder( order ) {
33 if ( JSON.stringify( order ) !== JSON.stringify( this.order ) ) {
34 this.order = order;
35
36 this.isotope.arrange({
37 sortBy: order[0].by,
38 sortAscending: order[0].type === 'asc',
39 });
40
41 this.fireEvent( 'sort' );
42 }
43 },
44 getSortedOrder( items ) {
45 let orderBy = 'default';
46 let orderAscending = this.args.isotope.sortAscending;
47
48 if ( ! this.usingDefaultOrder() ) {
49 orderBy = this.order[0].by;
50 orderAscending = this.order[0].type === 'asc';
51 }
52
53 // Check what sorting method is used.
54 const sorting = this.args.isotope.getSortData.hasOwnProperty( orderBy ) ? this.args.isotope.getSortData[ orderBy ].split( ' ' ) : this.args.isotope.getSortData.default.split( ' ' );
55
56 // Data attribute containing the value to sort by.
57 const dataAttribute = sorting[0].substr( 1, sorting[0].length - 2 );
58
59 // Optional parsing function for that value.
60 let parseFunction = false;
61 if ( 2 === sorting.length ) {
62 switch ( sorting[1] ) {
63 case 'parseInt':
64 parseFunction = 'parseInt';
65 break;
66 case 'parseFloat':
67 parseFunction = 'parseFloat';
68 break;
69 }
70 }
71
72 // Get the values to sort.
73 let valuesToSort = [];
74
75 for ( let i = 0; i < items.length; i++ ) {
76 let item = items[ i ];
77 let value = item.getAttribute( dataAttribute );
78
79 if ( 'parseInt' === parseFunction ) {
80 value = parseInt( value );
81 } else if ( 'parseFloat' === parseFunction ) {
82 value = parseFloat( value );
83 }
84
85 valuesToSort.push({
86 index: i,
87 value,
88 });
89 }
90
91 // Sort values.
92 valuesToSort.sort((a, b) => {
93 if ( false === parseFunction ) {
94 return a.value.localeCompare( b.value );
95 } else {
96 return a.value - b.value;
97 }
98 });
99
100 // Reverse if descending.
101 if ( ! orderAscending ) {
102 valuesToSort.reverse();
103 }
104
105 return valuesToSort.map((a) => a.index);
106 },
107 }
108 };