1(function() { 2 'use strict'; 3function randomSort(list) { 4 // get all items to sort 5 let listItems = list.querySelectorAll('div.award-item'); 6 if (listItems.length === 0) { 7 return; 8 } 9 let listItemsParent = listItems[0].parentNode; 10 // check if random sort values are set 11 if (!('sort' in listItems[0].dataset)) { 12 // set random sort value 13 for (let i = 0; i < listItems.length; i++) { 14 listItems[i].dataset.sort = '' + Math.floor(Math.random() * 64000); 15 } 16 } 17 // sort items asc, toggle ratio classes for alternating height and append to parent 18 let even = true; 19 Array.from(listItems).sort(function(a, b){ 20 return (parseInt(a.dataset.sort, 10) - parseInt(b.dataset.sort, 10)); 21 }).forEach(function(el){ 22 even = !even; 23 if (el.classList.contains('ratio-3-4') || el.classList.contains('ratio-1-1')) { 24 el.classList.toggle('ratio-3-4', even); 25 el.classList.toggle('ratio-1-1', !even); 26 } 27 listItemsParent.appendChild(el); 28 }); 29 30 // move showmore button if exist to the end 31 // let showmore = listItemsParent.querySelector('div:not(.award-item)'); 32 let showmore = listItemsParent.querySelector('[data-type="showmore-trigger"]'); 33 if (showmore) { 34 listItemsParent.append(showmore); 35 let visibleEls = list.querySelectorAll('div.award-item:not(.hidden):not([data-fixedpos])'); 36 let visible = visibleEls.length; 37 // get current sorted items 38 listItems = list.querySelectorAll('div.award-item:not([data-fixedpos])'); 39 for (let i = 0; i < listItems.length; i++) { 40 if (i < visible) { 41 listItems[i].classList.remove('hidden'); 42 } else { 43 listItems[i].classList.add('hidden'); 44 } 45 } 46 } 47 // get fixed pos items 48 let fixedItems = list.querySelectorAll('div.award-item[data-fixedpos]'); 49 if (fixedItems.length > 0) { 50 if (fixedItems.length > 1) { 51 // sort fixed pos items by fixedpos 52 fixedItems = fixedItems.sort((a, b) => {
53 return (parseInt(a.dataset.fixedpos, 10) > parseInt(b.dataset.fixedpos, 10)); 54 }); 55 } 56 // move fixed pos items to the end 57 for (let i = 0; i < fixedItems.length; i++) { 58 listItemsParent.append(fixedItems[i]); 59 } 60 // get current sorted items 61 listItems = list.querySelectorAll('div.award-item'); 62 // move fixed pos items to it's place 63 for (let i = 0; i < fixedItems.length; i++) { 64 let fixedPos = fixedItems[i].dataset.fixedpos - 1; 65 fixedItems[i].classList.remove('hidden'); 66 listItemsParent.insertBefore(fixedItems[i], listItems[fixedPos]); 67 } 68 } 69} 70 71// find lists for random sort 72let lists = document.querySelectorAll("div[data-sorting='random']"); 73if (lists.length > 0) { 74 for (let i = 0; i < lists.length; i++) { 75 randomSort(lists[i]); 76 } 77} 78})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.