PageSourceSearch

https://www.german-design-award.com/_assets/665ac59dfe5eed79f1e772…/JavaScript/random-sort.js?1790058914

js german-design-award.com collected 2026-09-24 17:16:27 UTC 2,757 bytes, 78 lines download raw bytes

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.