PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.24
Advanced Ads – Ad Manager & AdSense v2.0.24
2.0.25 2.0.24 2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / src / admin / screen-groups / sort-ads.js
advanced-ads / src / admin / screen-groups Last commit date
delete-group.js 3 months ago edit-group.js 1 month ago form-submission.js 3 months ago forms.css 3 months ago icons.css 3 months ago listShowMore.js 3 months ago listing.css 3 months ago listing.js 3 months ago sort-ads.js 3 months ago table.css 3 months ago
sort-ads.js
103 lines
1 /**
2 * Extracts the sortable value from a table row.
3 *
4 * @param {HTMLTableRowElement} row The table row element.
5 * @param {string} sortBy The column to sort by.
6 * @param {number} colIndex The index of the column to sort by.
7 *
8 * @return {string} The sortable value.
9 */
10 function getCellValue( row, sortBy, colIndex ) {
11 const cell = row.cells[ colIndex ];
12 if ( ! cell ) {
13 return '';
14 }
15
16 if ( 'weight' === sortBy ) {
17 const select = cell.querySelector( 'select' );
18 return select ? Number( select.value ) || 0 : 0;
19 }
20
21 if ( 'ad' === sortBy ) {
22 const link = cell.querySelector( 'a' );
23 return link ? link.textContent.trim() : '';
24 }
25
26 return cell.textContent.trim();
27 }
28
29 /**
30 * Generic comparator that handles numbers and strings safely.
31 *
32 * @param {number|string} a The first value to compare.
33 * @param {number|string} b The second value to compare.
34 * @param {boolean} ascending Whether to sort in ascending order.
35 *
36 * @return {number} The comparison result.
37 */
38 function compareValues( a, b, ascending ) {
39 if ( typeof a === 'number' && typeof b === 'number' ) {
40 return ascending ? a - b : b - a;
41 }
42
43 return ascending
44 ? String( a ).localeCompare( String( b ) )
45 : String( b ).localeCompare( String( a ) );
46 }
47
48 /**
49 * Sorts table rows by column and updates UI state.
50 *
51 * @param {HTMLTableElement} table The table to sort.
52 * @param {string} sortBy The column to sort by.
53 * @param {boolean} ascending Whether to sort in ascending order.
54 *
55 * @return {void}
56 */
57 function sortTable( table, sortBy, ascending ) {
58 const headers = Array.from( table.querySelectorAll( 'th' ) );
59 const colIndex = headers.findIndex(
60 ( th ) => th.dataset.sortby === sortBy
61 );
62
63 if ( colIndex === -1 ) {
64 return;
65 }
66
67 const tbody = table.tBodies[ 0 ];
68 const rows = Array.from( tbody.rows );
69
70 rows.sort( ( rowA, rowB ) => {
71 const valueA = getCellValue( rowA, sortBy, colIndex );
72 const valueB = getCellValue( rowB, sortBy, colIndex );
73 return compareValues( valueA, valueB, ascending );
74 } );
75
76 // Reattach sorted rows
77 rows.forEach( ( row ) => tbody.appendChild( row ) );
78
79 // Update sort indicator classes
80 headers.forEach( ( th ) => th.classList.remove( 'asc', 'desc' ) );
81 headers[ colIndex ].classList.add( ascending ? 'asc' : 'desc' );
82 }
83
84 export function sortAds() {
85 document.querySelectorAll( '.advads-group-ads' ).forEach( ( table ) => {
86 const sortStates = {
87 ad: true,
88 status: true,
89 weight: true,
90 };
91
92 table.querySelectorAll( 'th.group-sort' ).forEach( ( header ) => {
93 header.addEventListener( 'click', () => {
94 const sortBy = header.dataset.sortby;
95
96 sortTable( table, sortBy, sortStates[ sortBy ] );
97
98 sortStates[ sortBy ] = ! sortStates[ sortBy ];
99 } );
100 } );
101 } );
102 }
103