// Find where we will create rows and insert all items const rowSection = document.getElementById("link-box"); // Fetch our json file so we can insert it into our document function listInitialise() { fetch("res/asset-json-list.json") .then((res) => res.json()) .then((listData) => { listUpdate(listData); }) .catch(console.error); } listInitialise(); function listUpdate(listData) { // Pulling the number of columns the user asserts to render let columnCount = listData.columnCount; // Calculating how many items there are to list let rowItemCount = listData.rowItems.length; // Calculating the number of rows to create let rows = Math.ceil(rowItemCount / columnCount); // Use our calculated number of rows to create that many unordered lists for (let listContainer = 0; listContainer < rows; listContainer++) { // The template for our unordered list html rowHTML = ''; // Append said unordered list template to the page rowSection.innerHTML += rowHTML; // Select our unordered list's inner html rowList = rowSection.childNodes[listContainer]; // Create first entry (purely decorative) rowList.innerHTML = "
  • >//
  • "; // Use our asserted number of items in each row (columnCount) to populate each row for (let rowItem = 0; rowItem < columnCount; rowItem++) { // Each row must contain our decided number but not repeat. This will offset each new row with the next item entries. rowOffset = listContainer * columnCount; // In the case that the number of items does not exactly divide, end the appending early to avoid errors if (rowItemCount <= rowOffset + rowItem) { // Append last list entry (purely decorative) rowList.innerHTML += "
  • //-
  • "; // End the function early return; } else { // Get the title of this rows appropriate item let title = listData.rowItems[rowItem + rowOffset].title; // Get the url of this rows appropriate item let url = listData.rowItems[rowItem + rowOffset].url; // The template for our list item rowConstruct = '
  • ' + title + "
  • "; // Append said list item template to the current row. rowList.innerHTML += rowConstruct; } } // Append last list entry (purely decorative) rowList.innerHTML += "
  • //-
  • "; } }