window.onload = (function (oldOnload) { return function () { var viewportWidth; var timeout; var hasRegion = false; var options = { originalItems: ["News", "Sports", "TV", "Music", "Radio", "Watch", "Listen"], originalItemUrls: [ "https://www.cbc.ca/news", "https://www.cbc.ca/sports/", "https://www.cbc.ca/television/", "https://www.cbc.ca/music/", "https://www.cbc.ca/radio", "https://gem.cbc.ca", "https://www.cbc.ca/listen/"], menuItemWidths: [], menuItems: [], menuItemUrls: [], childMenuItems: [], childMenuItemUrls: [] }; oldOnload && oldOnload(); console.log(options.originalItems); if (menu_label.length > 0) { options.originalItems.unshift(menu_label); hasRegion = true; } if (menu_url.length > 0) {options.originalItemUrls.unshift(menu_url);} function getTextWidth(text, font) { var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas")); var context = canvas.getContext("2d"); context.font = font; var metrics = context.measureText(text); return metrics.width; } var setViewportWidth = function () { viewportWidth = window.innerWidth || document.documentElement.clientWidth; } setViewportWidth(); function itemWidths(array) { for (var i = 0; i < array.length; i++) { itemWidth = Math.round(getTextWidth(array[i], "bold 15px Open Sans")); options.menuItemWidths.push(itemWidth); } } itemWidths(options.originalItems); function sortByWidth(array, array2, array3) { var comparator = 0; for (var i = 0; i < array.length; i++) { if (viewportWidth > 768) { if (comparator < (viewportWidth - 620)) { comparator = comparator += array[i]; options.menuItems.push(array2[i]); options.menuItemUrls.push(array3[i]); } else { options.childMenuItems.push(array2[i]); options.childMenuItemUrls.push(array3[i]); } } else { if (comparator < (viewportWidth - 520)) { comparator = comparator += array[i]; options.menuItems.push(array2[i]); options.menuItemUrls.push(array3[i]); } else { options.childMenuItems.push(array2[i]); options.childMenuItemUrls.push(array3[i]); } } } } sortByWidth(options.menuItemWidths, options.originalItems, options.originalItemUrls); var list; var item; var menuLength = options.menuItems.length; function makeUL(array, array2) { var list = document.createElement('ul'); list.setAttribute("id", "menuList"); for (var i = 0; i < array.length; i++) { var item = document.createElement('li'); var a = document.createElement("a"); a.textContent = (array[i]); a.setAttribute('href', (array2[i])); item.appendChild(a); list.appendChild(item); } if (options.childMenuItems.length !== 0) { var moreLi = document.createElement('li'); moreLi.setAttribute('class', 'more'); moreLi.setAttribute('id', 'myMore'); list.appendChild(moreLi); var moreButton = document.createElement("button"); moreButton.setAttribute("id", "moreButton"); moreButton.setAttribute("aria-expanded", "false"); moreButton.insertAdjacentHTML('afterbegin', 'More'); moreLi.appendChild(moreButton); } return list; } function makeULChild(array, array2) { var list = document.createElement('ul'); list.setAttribute("id", "myDrop"); list.setAttribute("class", "dropdown"); list.setAttribute("aria-label", "submenu"); for (var i = 0; i < array.length; i++) { var item = document.createElement('li'); var a = document.createElement("a"); a.textContent = (array[i]); a.setAttribute('href', (array2[i])); item.appendChild(a); item.setAttribute("class", "dropClass"); list.appendChild(item); } return list; } function makeResizedUL(array, array2) { list = document.getElementById('menuList'); var menuLength = options.menuItems.length; for (var i = 0; i < array.length; i++) { var item = document.createElement('li'); var a = document.createElement("a"); a.textContent = (array[i]); a.setAttribute('href', (array2[i])); item.appendChild(a); item.setAttribute("class", "menuClass"); list.appendChild(item); } if (options.childMenuItems.length !== 0) { var moreLi = document.createElement('li'); moreLi.setAttribute('class', 'more'); moreLi.setAttribute('id', 'myMore'); list.appendChild(moreLi); var moreButton = document.createElement("button"); moreButton.setAttribute("id", "moreButton"); moreButton.setAttribute("aria-expanded", "false"); moreButton.insertAdjacentHTML('afterbegin', 'More'); moreLi.appendChild(moreButton); } return list; } function makeResizedChildUL(array, array2) { var list = document.createElement('ul'); list.setAttribute("id", "myDrop"); list.setAttribute("class", "dropdown"); list.setAttribute("aria-label", "submenu"); for (var i = 0; i < array.length; i++) { var item = document.createElement('li'); var a = document.createElement("a"); a.textContent = (array[i]); a.setAttribute('href', (array2[i])); item.appendChild(a); item.setAttribute("class", "dropClass"); list.appendChild(item); } return list; } document.getElementById('topNav').appendChild(makeUL(options.menuItems, options.menuItemUrls)); if (options.childMenuItems.length !== 0) { document.getElementById('myMore').appendChild(makeULChild(options.childMenuItems, options.childMenuItemUrls)); } var resizeId; window.addEventListener('resize', function () { clearTimeout(resizeId); resizeId = setTimeout(doneResizing, 500); }); function doneResizing() { var list = document.getElementById("menuList"); while (list.hasChildNodes()) {list.removeChild(list.firstChild);} options.menuItems.splice(0, options.menuItems.length); options.childMenuItems.splice(0, options.childMenuItems.length); var menuLength = options.menuItems.length; setViewportWidth(); sortByWidth(options.menuItemWidths, options.originalItems, options.originalItemUrls); document.getElementById('topNav').appendChild(makeResizedUL(options.menuItems, options.menuItemUrls)); if (options.childMenuItems.length !== 0) { document.getElementById('myMore').appendChild(makeResizedChildUL(options.childMenuItems, options.childMenuItemUrls)); } if (hasRegion) {list.firstElementChild.classList.add("regionBorder");} } let menuList = document.getElementById('menuList'); if (hasRegion) {menuList.firstElementChild.classList.add("regionBorder");} var myHam = document.getElementById("hamButton"); myHam.onclick = toggleHam; function toggleHam() { document.getElementById("ham").classList.toggle("closed"); document.getElementById("ham").classList.toggle("open"); document.getElementById("topNav").classList.toggle("closed"); document.getElementById("topNav").classList.toggle("open"); var x = document.getElementById("hamButton").getAttribute("aria-expanded"); if (x == "true") { x = "false"; } else { x = "true"; } document.getElementById("hamButton").setAttribute("aria-expanded", x); } function toggleMore() { var y = document.getElementById("moreButton").getAttribute("aria-expanded"); if (y == "true") { y = "false"; } else { y = "true"; } document.getElementById("moreButton").setAttribute("aria-expanded", y); } function triggerMoreOn() { document.getElementById("moreButton").setAttribute("aria-expanded", true); } function triggerMoreOff() {document.getElementById("moreButton").removeAttribute("aria-expanded");} if (options.childMenuItems.length !== 0) { var myMore = document.getElementById("myMore"); var moreButton = document.getElementById("moreButton"); myMore.onmouseover = toggleMore; myMore.onmouseout = toggleMore; moreButton.onfocus = triggerMoreOn; moreButton.onblur = triggerMoreOff; var myDrop = document.getElementById("myDrop"); } } })(window.onload);