Update: Vue 2 to Vue 3 with Typescript, node 14 to node 22, Jenkinsfile, Dockerfile, vapor.yml (Post PROD Deployment)

This commit is contained in:
Dillon Ngo
2026-07-03 21:01:06 +08:00
parent 186dca383d
commit bf166fcf82
+85 -84
View File
@@ -30,7 +30,7 @@
</div>
<!-- Admin items container -->
<div class="d-flex flex-nowrap align-items-center" id="admin-nav-container">
<div v-if="authStore.isAdmin" class="d-flex flex-nowrap align-items-center" id="admin-nav-container">
<div id="admin-nav-items" class="d-contents" style="display: contents;">
<div class="col-auto p-r-20" data-nav-item data-original-index="0">
<a href="{{route('payments')}}"><div class="text-white all-caps fs-12"> Payments</div></a>
@@ -120,97 +120,98 @@
</div>
</div>
@endif
</div>
@push('scripts')
<script>
document.addEventListener('DOMContentLoaded', function() {
function adjustNavigation() {
var moreDropdown = document.getElementById('more-dropdown');
var moreMenu = document.getElementById('more-dropdown-menu');
var adminNavContainer = document.getElementById('admin-nav-container');
var adminNavItems = document.getElementById('admin-nav-items');
var headerRow = document.querySelector('.header-nav-row');
var leftSection = document.querySelector('.header-logo-section');
var rightSection = document.querySelector('.header-right-section');
<script>
document.addEventListener('DOMContentLoaded', function() {
function adjustNavigation() {
var moreDropdown = document.getElementById('more-dropdown');
var moreMenu = document.getElementById('more-dropdown-menu');
var adminNavContainer = document.getElementById('admin-nav-container');
var adminNavItems = document.getElementById('admin-nav-items');
var headerRow = document.querySelector('.header-nav-row');
var leftSection = document.querySelector('.header-logo-section');
var rightSection = document.querySelector('.header-right-section');
if (!moreDropdown || !moreMenu || !adminNavContainer || !adminNavItems || !headerRow || !leftSection || !rightSection) return;
if (!moreDropdown || !moreMenu || !adminNavContainer || !adminNavItems || !headerRow || !leftSection || !rightSection) return;
moreMenu.innerHTML = '';
moreMenu.innerHTML = '';
var items = adminNavContainer.querySelectorAll('[data-nav-item]');
var items = adminNavContainer.querySelectorAll('[data-nav-item]');
// Reset all items to visible
items.forEach(function(item) {
item.style.display = '';
});
// Reset all items to visible
items.forEach(function(item) {
item.style.display = '';
});
// Calculate available space
var headerRect = headerRow.getBoundingClientRect();
var leftRect = leftSection.getBoundingClientRect();
var rightRect = rightSection.getBoundingClientRect();
// Calculate available space
var headerRect = headerRow.getBoundingClientRect();
var leftRect = leftSection.getBoundingClientRect();
var rightRect = rightSection.getBoundingClientRect();
var availableWidth = headerRect.width - leftRect.width - rightRect.width - 360;
var availableWidth = headerRect.width - leftRect.width - rightRect.width - 360;
var totalWidth = 0;
items.forEach(function(item) {
item.style.visibility = 'hidden';
item.style.display = '';
totalWidth += item.offsetWidth + 20;
});
var totalWidth = 0;
items.forEach(function(item) {
item.style.visibility = 'hidden';
item.style.display = '';
totalWidth += item.offsetWidth + 20;
});
items.forEach(function(item) {
item.style.visibility = '';
});
items.forEach(function(item) {
item.style.visibility = '';
});
// If all items fit, no need for dropdown
if (totalWidth <= availableWidth) {
moreDropdown.style.display = 'none';
return;
}
// Items to hide - start from the last ones (maintaining original order for visible items)
var itemsToHide = [];
// Iterate from the end to find items that need to be hidden
for (var i = items.length - 1; i >= 0; i--) {
var item = items[i];
item.style.visibility = 'hidden';
var itemWidth = item.offsetWidth + 20;
if (totalWidth - itemWidth <= availableWidth) {
// This item can be shown, stop hiding
totalWidth -= itemWidth;
item.style.visibility = '';
break;
} else {
// This item needs to be hidden
itemsToHide.push(item);
totalWidth -= itemWidth;
}
item.style.visibility = '';
}
// Reverse to get them in original order for dropdown
itemsToHide.reverse();
// Add hidden items to dropdown in their original order
itemsToHide.forEach(function(item) {
var link = item.querySelector('a');
if (link) {
var menuItem = document.createElement('a');
menuItem.href = link.href;
menuItem.className = 'dropdown-item';
menuItem.innerHTML = '<span class="all-caps fs-12">' + link.textContent.trim() + '</span>';
moreMenu.appendChild(menuItem);
}
item.style.display = 'none';
});
moreDropdown.style.display = moreMenu.children.length > 0 ? 'block' : 'none';
// If all items fit, no need for dropdown
if (totalWidth <= availableWidth) {
moreDropdown.style.display = 'none';
return;
}
adjustNavigation();
window.addEventListener('resize', adjustNavigation);
setTimeout(adjustNavigation, 500);
});
</script>
</div>
// Items to hide - start from the last ones (maintaining original order for visible items)
var itemsToHide = [];
// Iterate from the end to find items that need to be hidden
for (var i = items.length - 1; i >= 0; i--) {
var item = items[i];
item.style.visibility = 'hidden';
var itemWidth = item.offsetWidth + 20;
if (totalWidth - itemWidth <= availableWidth) {
// This item can be shown, stop hiding
totalWidth -= itemWidth;
item.style.visibility = '';
break;
} else {
// This item needs to be hidden
itemsToHide.push(item);
totalWidth -= itemWidth;
}
item.style.visibility = '';
}
// Reverse to get them in original order for dropdown
itemsToHide.reverse();
// Add hidden items to dropdown in their original order
itemsToHide.forEach(function(item) {
var link = item.querySelector('a');
if (link) {
var menuItem = document.createElement('a');
menuItem.href = link.href;
menuItem.className = 'dropdown-item';
menuItem.innerHTML = '<span class="all-caps fs-12">' + link.textContent.trim() + '</span>';
moreMenu.appendChild(menuItem);
}
item.style.display = 'none';
});
moreDropdown.style.display = moreMenu.children.length > 0 ? 'block' : 'none';
}
adjustNavigation();
window.addEventListener('resize', adjustNavigation);
setTimeout(adjustNavigation, 500);
});
</script>
@endpush