81 lines
2.5 KiB
JavaScript
81 lines
2.5 KiB
JavaScript
/// \brief 'main()' function which initializes the single page app.
|
|
function initPage()
|
|
{
|
|
handleHashChange();
|
|
queryGlobalStatus();
|
|
}
|
|
|
|
/// \brief Shows the current section and hides other sections.
|
|
function handleHashChange()
|
|
{
|
|
if (window.preventHandlingHashChange) {
|
|
return;
|
|
}
|
|
|
|
const hashParts = splitHashParts();
|
|
const currentSectionName = hashParts.shift() || 'global-section';
|
|
if (!currentSectionName.endsWith('-section')) {
|
|
return;
|
|
}
|
|
|
|
sectionNames.forEach(function (sectionName) {
|
|
const sectionData = sections[sectionName];
|
|
const sectionElement = document.getElementById(sectionName + '-section');
|
|
if (sectionElement.id === currentSectionName) {
|
|
const sectionInitializer = sectionData.initializer;
|
|
if (sectionInitializer === undefined || window.preventSectionInitializer || sectionInitializer(sectionElement, sectionData, hashParts)) {
|
|
sectionElement.style.display = 'block';
|
|
}
|
|
} else {
|
|
const sectionDestructor = sectionData.destructor;
|
|
if (sectionDestructor === undefined || sectionDestructor(sectionElement, sectionData, hashParts)) {
|
|
sectionElement.style.display = 'none';
|
|
}
|
|
}
|
|
const navLinkElement = document.getElementById(sectionName + '-nav-link');
|
|
if (sectionElement.id === currentSectionName) {
|
|
navLinkElement.classList.add('active');
|
|
} else {
|
|
navLinkElement.classList.remove('active');
|
|
}
|
|
});
|
|
}
|
|
|
|
/// \brief Updates the #hash without triggering the handler.
|
|
function updateHashPreventingChangeHandler(newHash)
|
|
{
|
|
window.preventHandlingHashChange = true;
|
|
window.location.hash = newHash;
|
|
window.preventHandlingHashChange = false;
|
|
}
|
|
|
|
/// \brief Updates the #hash without triggering the section initializer.
|
|
function updateHashPreventingSectionInitializer(newHash)
|
|
{
|
|
window.preventSectionInitializer = true;
|
|
window.location.hash = newHash;
|
|
window.preventSectionInitializer = false;
|
|
}
|
|
|
|
const sections = {
|
|
'global': {
|
|
},
|
|
'package-search': {
|
|
initializer: initPackageSearch,
|
|
state: {params: undefined},
|
|
},
|
|
'package-details': {
|
|
initializer: initPackageDetails,
|
|
state: {package: undefined},
|
|
},
|
|
'build-action': {
|
|
initializer: initBuildActionsForm,
|
|
},
|
|
'build-action-details': {
|
|
initializer: initBuildActionDetails,
|
|
state: {id: undefined},
|
|
},
|
|
};
|
|
const sectionNames = Object.keys(sections);
|
|
const status = {repoNames: undefined};
|