document.addEventListener('DOMContentLoaded', function () { var dropdownMenus = document.querySelectorAll('.dropdown-menu'); dropdownMenus.forEach(function (dropdownMenu) { var parent = dropdownMenu.parentElement; parent.addEventListener('show.bs.dropdown', function () { var parentResponsiveTable = parent.closest('.table-responsive'); var parentTarget = parentResponsiveTable ? parentResponsiveTable : window; var parentTop = parentResponsiveTable ? parentResponsiveTable.offsetTop : 0; var parentLeft = parentResponsiveTable ? parentResponsiveTable.offsetLeft : 0; var dropdown = parent.classList.contains('dropdown') ? parent : null; if (!dropdown) { parent.classList.add('dropdown'); } parent.setAttribute('olddrop', parent.classList.contains('dropup') ? 'dropup' : 'dropdown'); var dropdownMenus = parent.querySelectorAll('.dropdown-menu'); dropdownMenus.forEach(function (dropdown) { dropdown.setAttribute('olddrop-pull', dropdown.classList.contains('dropdown-menu-right') ? 'dropdown-menu-right' : ''); }); if (parent.classList.contains('dropdown')) { if (parent.offsetTop + parent.clientHeight + dropdownMenu.clientHeight + 10 >= parentTop + parentTarget.clientHeight) { parent.classList.remove('dropdown'); parent.classList.add('dropup'); } } else if (parent.classList.contains('dropup')) { if (parent.offsetTop - dropdownMenu.clientHeight - 10 <= parentTop) { parent.classList.remove('dropup'); parent.classList.add('dropdown'); } } if (parent.offsetLeft + dropdownMenu.clientWidth >= parentLeft + parentTarget.clientWidth) { dropdownMenu.classList.add('dropdown-menu-right'); } }); parent.addEventListener('hide.bs.dropdown', function () { var oldDrop = parent.getAttribute('olddrop'); if (oldDrop) { parent.classList.remove('dropup', 'dropdown'); parent.classList.add(oldDrop); parent.removeAttribute('olddrop'); } var dropdownMenus = parent.querySelectorAll('.dropdown-menu'); dropdownMenus.forEach(function (dropdown) { dropdown.classList.remove('dropdown-menu-right'); var oldDropPull = dropdown.getAttribute('olddrop-pull'); if (oldDropPull) { dropdown.classList.add(oldDropPull); dropdown.removeAttribute('olddrop-pull'); } }); }); }); });