TODO: cache menu container, build ontology and load templates from external HTML source.
49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
import AppState from "./state.js";
|
|
import { traverseOntology } from "./ontology.js";
|
|
|
|
/**
|
|
* @module UI
|
|
*/
|
|
/**
|
|
*
|
|
* @param {String} triggerSelector - Usually, the close modal trigger element(s) selector
|
|
*/
|
|
export function pauseAudio(triggerSelector) {
|
|
// What if more than one audio element is playing?
|
|
const audio = document.querySelector('audio');
|
|
|
|
if (audio) {
|
|
document.querySelectorAll(triggerSelector).forEach(el => {
|
|
el.addEventListener('click', () => audio.pause());
|
|
});
|
|
document.querySelector('.modal').addEventListener('blur', () => {
|
|
audio.pause();
|
|
});
|
|
}
|
|
}
|
|
/**
|
|
* @see traverseOntology
|
|
* @param {Object} ontology The traversed ontology object (temp)
|
|
* @param {HTMLElement} sidePanel ATON's side panel element
|
|
*/
|
|
function buildOntologyMenu(ontology, sidePanel) {
|
|
const list = document.createElement('ul');
|
|
list.className = 'list-group';
|
|
const mainNode = document.createElement('li');
|
|
mainNode.className = 'list-group-item';
|
|
mainNode.textContent = ontology.ontology;
|
|
|
|
const domainList = document.createElement('ul');
|
|
domainList.className = 'list-group';
|
|
|
|
for(let domain of ontology.domains) {
|
|
const domainItem = document.createElement('li');
|
|
domainItem.textContent = domain.label;
|
|
domainItem.className = 'list-group-item';
|
|
domainList.appendChild(domainItem);
|
|
}
|
|
|
|
mainNode.appendChild(domainList);
|
|
list.appendChild(mainNode);
|
|
sidePanel.appendChild(list);
|
|
} |