mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2024-12-25 02:44:18 +00:00
Bundle redundant event listeners.
This commit is contained in:
parent
3c86a2f334
commit
ad636d308d
216
web/app/static/js/modules/corpus_analysis/view/eventListeners.js
Normal file
216
web/app/static/js/modules/corpus_analysis/view/eventListeners.js
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
// Import the script that implements a spinner animation for buttons.
|
||||||
|
import {
|
||||||
|
loadingSpinnerHTML,
|
||||||
|
} from './spinner.js';
|
||||||
|
/**
|
||||||
|
* This module contains vanilla javascript Event listeners which are listening
|
||||||
|
* for button clicks etc. the user is doing to interact with the page.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The following listener handles what functions are called when the user
|
||||||
|
* does use the page navigation to navigate to a new page.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function pageNavigation(resultsList, results, client) {
|
||||||
|
for (let element of resultsList.pagination) {
|
||||||
|
element.addEventListener("click", (event) => {
|
||||||
|
// Shows match context according to the user picked value on a new page.
|
||||||
|
resultsList.changeContext();
|
||||||
|
// De- or activates expertMode on new page depending on switch value.
|
||||||
|
if (resultsList.displayOptionsFormExpertMode.checked) {
|
||||||
|
resultsList.expertModeOn('query-display', results);
|
||||||
|
} else {
|
||||||
|
resultsList.expertModeOff('query-display');
|
||||||
|
}
|
||||||
|
// Activates inspect buttons on new page if client is not busy.
|
||||||
|
resultsList.toggleInspectButtons(client);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The following event Listener handles the expert mode switch for the list.
|
||||||
|
*/
|
||||||
|
function expertModeSwitch(resultsList, results) {
|
||||||
|
resultsList.displayOptionsFormExpertMode.onchange = (event) => {
|
||||||
|
if (event.target.checked) {
|
||||||
|
resultsList.expertModeOn('query-display', results);
|
||||||
|
} else {
|
||||||
|
resultsList.expertModeOff('query-display');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The following event Listener handles the add-btn and the inspect-btn
|
||||||
|
* onclick events via bubbleing.
|
||||||
|
*/
|
||||||
|
function actionButtons(resultsList, results, client) {
|
||||||
|
resultsList.queryResultsTable.addEventListener('click', (event) => {
|
||||||
|
let dataIndex;
|
||||||
|
if (event.target.classList.contains('inspect-btn')) {
|
||||||
|
dataIndex = parseInt(event.target.closest('tr').dataset.index);
|
||||||
|
resultsList.inspect(client, results, [dataIndex], 'inspect');
|
||||||
|
} else if (event.target.classList.contains('add-btn')) {
|
||||||
|
dataIndex = parseInt(event.target.closest('tr').dataset.index);
|
||||||
|
resultsList.addToSubResults(dataIndex, client);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Following event listeners handle the change of Context size per match and
|
||||||
|
* the number of matches shown per page.
|
||||||
|
*/
|
||||||
|
function displayOptions(resultsList, results, client) {
|
||||||
|
resultsList.displayOptionsFormResultsPerPage.onchange = (event) => {
|
||||||
|
resultsList.changeHitsPerPage(client, results);
|
||||||
|
};
|
||||||
|
resultsList.displayOptionsFormResultContext.onchange = (event) => {
|
||||||
|
resultsList.changeContext();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The following event listener handles the show metadata button and its
|
||||||
|
* functionality.
|
||||||
|
*/
|
||||||
|
function showMetaData(resultsList, results) {
|
||||||
|
resultsList.showMetaData.onclick = () => {
|
||||||
|
resultsList.metaDataModalContent.textContent = '';
|
||||||
|
let table = resultsList.createMetaDataForModal(results.metaData);
|
||||||
|
resultsList.metaDataModalContent.insertAdjacentHTML('afterbegin', table);
|
||||||
|
resultsList.metaDataModal.open();
|
||||||
|
let collapsibles = resultsList.metaDataModalContent.querySelectorAll(".text-metadata");
|
||||||
|
for (let collapsible of collapsibles) {
|
||||||
|
collapsible.onclick = () => {
|
||||||
|
let elems = resultsList.metaDataModalContent.querySelectorAll('.collapsible');
|
||||||
|
let instances = M.Collapsible.init(elems, {accordion: false});
|
||||||
|
resultsList.createTextDetails(results.metaData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if resultsList.exportFullInspectContext switch is changed.
|
||||||
|
* If it has been changed reset all Download buttons.
|
||||||
|
*/
|
||||||
|
function exportFullContextSwitch(resultsList) {
|
||||||
|
resultsList.exportFullInspectContext.onchange = (event) => {
|
||||||
|
// Hide all download buttons.
|
||||||
|
resultsList.fullResultsExport.classList.toggle('hide', true);
|
||||||
|
resultsList.subResultsExport.classList.toggle('hide', true);
|
||||||
|
// Show result create buttons.
|
||||||
|
resultsList.fullResultsCreate.classList.toggle('hide', false);
|
||||||
|
resultsList.subResultsCreate.classList.toggle('hide', false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The following event listeners are handeling the data export.
|
||||||
|
* 1. Create full-results
|
||||||
|
* 2. Create sub-results
|
||||||
|
* 3. Download full-results
|
||||||
|
* 4. Download sub-results
|
||||||
|
* 5. Download single inspect-results
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 1. Add events for full-results create
|
||||||
|
function createFullResults(resultsList, results) {
|
||||||
|
resultsList.fullResultsCreate.onclick = (event) => {
|
||||||
|
resultsList.fullResultsCreate.querySelector('i').classList.toggle('hide');
|
||||||
|
resultsList.fullResultsCreate.innerText = 'Creating...';
|
||||||
|
resultsList.fullResultsCreate.insertAdjacentHTML('afterbegin',
|
||||||
|
loadingSpinnerHTML);
|
||||||
|
let dataIndexes = [...Array(results.data.match_count).keys()];
|
||||||
|
// Empty fullResultsData so that no previous data is used.
|
||||||
|
results.fullResultsData.init();
|
||||||
|
resultsList.notifyClient('get-results', { resultsType: 'full-results',
|
||||||
|
dataIndexes: dataIndexes,
|
||||||
|
resultsList: resultsList,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Add events for sub-results create
|
||||||
|
function createSubResults(resultsList, results) {
|
||||||
|
resultsList.subResultsCreate.onclick = (event) => {
|
||||||
|
let dataIndexes = [];
|
||||||
|
resultsList.addToSubResultsIdsToShow.forEach((id) => {
|
||||||
|
dataIndexes.push(id - 1);
|
||||||
|
});
|
||||||
|
resultsList.subResultsCreate.querySelector('i').classList.toggle('hide');
|
||||||
|
resultsList.subResultsCreate.innerText = 'Creating...';
|
||||||
|
resultsList.subResultsCreate.insertAdjacentHTML('afterbegin',
|
||||||
|
loadingSpinnerHTML);
|
||||||
|
// Empty subResultsData so that no previous data is used.
|
||||||
|
results.subResultsData.init();
|
||||||
|
resultsList.notifyClient('get-results', { resultsType: 'sub-results',
|
||||||
|
dataIndexes: dataIndexes,
|
||||||
|
resultsList: resultsList,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 3. Open download modal when full results export button is pressed
|
||||||
|
function exportFullResults(resultsList, results) {
|
||||||
|
resultsList.fullResultsExport.onclick = (event) => {
|
||||||
|
resultsList.queryResultsDownloadModal.open();
|
||||||
|
// add onclick to download JSON button and download the file
|
||||||
|
resultsList.downloadResultsJson.onclick = (event) => {
|
||||||
|
let suffix = 'full-results'
|
||||||
|
if (resultsList.exportFullInspectContext.checked) {
|
||||||
|
suffix += '_full-context';
|
||||||
|
}
|
||||||
|
let filename = results.fullResultsData.createDownloadFilename(suffix);
|
||||||
|
results.fullResultsData.addData(results.metaData);
|
||||||
|
results.fullResultsData.downloadJSONRessource(filename,
|
||||||
|
results.fullResultsData,
|
||||||
|
resultsList.downloadResultsJson)};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 4. Open download modal when sub results export button is pressed
|
||||||
|
function exportSubResults(resultsList, results) {
|
||||||
|
resultsList.subResultsExport.onclick = (event) => {
|
||||||
|
resultsList.queryResultsDownloadModal.open();
|
||||||
|
// add onclick to download JSON button and download the file
|
||||||
|
resultsList.downloadResultsJson.onclick = (event) => {
|
||||||
|
let suffix = 'sub-results'
|
||||||
|
if (resultsList.exportFullInspectContext.checked) {
|
||||||
|
suffix += '_full-context';
|
||||||
|
}
|
||||||
|
let filename = results.subResultsData.createDownloadFilename(suffix);
|
||||||
|
results.subResultsData.addData(results.metaData);
|
||||||
|
results.subResultsData.downloadJSONRessource(filename,
|
||||||
|
results.subResultsData,
|
||||||
|
resultsList.downloadResultsJson)};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 5. Open download modal when inspect-results-export button is pressed
|
||||||
|
function exportSingleMatch(resultsList, results) {
|
||||||
|
resultsList.inspectResultsExport.onclick = (event) => {
|
||||||
|
resultsList.queryResultsDownloadModal.open();
|
||||||
|
// add onclick to download JSON button and download the file
|
||||||
|
resultsList.downloadResultsJson.onclick = (event) => {
|
||||||
|
let filename = results.subResultsData.createDownloadFilename('inspect-results_full-context');
|
||||||
|
results.subResultsData.addData(results.metaData);
|
||||||
|
results.subResultsData.downloadJSONRessource(filename,
|
||||||
|
results.inspectResultsData,
|
||||||
|
resultsList.downloadResultsJson)};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
pageNavigation,
|
||||||
|
expertModeSwitch,
|
||||||
|
actionButtons,
|
||||||
|
displayOptions,
|
||||||
|
showMetaData,
|
||||||
|
exportFullContextSwitch,
|
||||||
|
createFullResults,
|
||||||
|
createSubResults,
|
||||||
|
exportFullResults,
|
||||||
|
exportSubResults,
|
||||||
|
exportSingleMatch,
|
||||||
|
}
|
@ -118,11 +118,21 @@ import {
|
|||||||
// Import script that implements the scroll to top button.
|
// Import script that implements the scroll to top button.
|
||||||
import {
|
import {
|
||||||
scrollToTop,
|
scrollToTop,
|
||||||
} from '../../static/js/modules/corpus_analysis/view/scrollToTop.js'
|
} from '../../static/js/modules/corpus_analysis/view/scrollToTop.js';
|
||||||
// Import the script that implements a spinner animation for buttons.
|
// vanilla javascript Event listeners which are listening for button clicks etc
|
||||||
import {
|
import {
|
||||||
loadingSpinnerHTML,
|
pageNavigation,
|
||||||
} from '../../static/js/modules/corpus_analysis/view/spinner.js'
|
expertModeSwitch,
|
||||||
|
actionButtons,
|
||||||
|
displayOptions,
|
||||||
|
showMetaData,
|
||||||
|
exportFullContextSwitch,
|
||||||
|
createFullResults,
|
||||||
|
createSubResults,
|
||||||
|
exportFullResults,
|
||||||
|
exportSubResults,
|
||||||
|
exportSingleMatch,
|
||||||
|
} from '../../static/js/modules/corpus_analysis/view/eventListeners.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Second Phase:
|
* Second Phase:
|
||||||
@ -249,175 +259,19 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||||||
'#export-full-inspect-context',
|
'#export-full-inspect-context',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/**
|
// Call the vanilla event listeners listening for clicks etc. from the user.
|
||||||
* The following listener handles what functions are called when the user
|
pageNavigation(resultsList, results, client);
|
||||||
* does use the page navigation to navigate to a new page.
|
expertModeSwitch(resultsList, results);
|
||||||
*/
|
actionButtons(resultsList, results, client);
|
||||||
for (let element of resultsList.pagination) {
|
displayOptions(resultsList, results, client);
|
||||||
element.addEventListener("click", (event) => {
|
showMetaData(resultsList, results);
|
||||||
// Shows match context according to the user picked value on a new page.
|
// Still vanilla event listeners, but focused on result download and export
|
||||||
resultsList.changeContext();
|
exportFullContextSwitch(resultsList);
|
||||||
// De- or activates expertMode on new page depending on switch value.
|
createFullResults(resultsList, results);
|
||||||
if (resultsList.displayOptionsFormExpertMode.checked) {
|
createSubResults(resultsList, results);
|
||||||
resultsList.expertModeOn('query-display', results);
|
exportFullResults(resultsList, results);
|
||||||
} else {
|
exportSubResults(resultsList, results);
|
||||||
resultsList.expertModeOff('query-display');
|
exportSingleMatch(resultsList, results);
|
||||||
}
|
|
||||||
// Activates inspect buttons on new page if client is not busy.
|
|
||||||
resultsList.toggleInspectButtons(client);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The following event Listener handles the expert mode switch for the list.
|
|
||||||
*/
|
|
||||||
resultsList.displayOptionsFormExpertMode.onchange = (event) => {
|
|
||||||
if (event.target.checked) {
|
|
||||||
resultsList.expertModeOn('query-display', results);
|
|
||||||
} else {
|
|
||||||
resultsList.expertModeOff('query-display');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The following event Listener handles the add-btn and the inspect-btn
|
|
||||||
* onclick events via bubbleing.
|
|
||||||
*/
|
|
||||||
resultsList.queryResultsTable.addEventListener('click', (event) => {
|
|
||||||
let dataIndex;
|
|
||||||
if (event.target.classList.contains('inspect-btn')) {
|
|
||||||
dataIndex = parseInt(event.target.closest('tr').dataset.index);
|
|
||||||
resultsList.inspect(client, results, [dataIndex], 'inspect');
|
|
||||||
} else if (event.target.classList.contains('add-btn')) {
|
|
||||||
dataIndex = parseInt(event.target.closest('tr').dataset.index);
|
|
||||||
resultsList.addToSubResults(dataIndex, client);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Following event listeners handle the change of Context size per match and
|
|
||||||
* the number of matches shown per page.
|
|
||||||
*/
|
|
||||||
resultsList.displayOptionsFormResultsPerPage.onchange = (event) => {
|
|
||||||
resultsList.changeHitsPerPage(client, results);
|
|
||||||
};
|
|
||||||
resultsList.displayOptionsFormResultContext.onchange = (event) => {
|
|
||||||
resultsList.changeContext();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The following event listener handles the show metadata button and its
|
|
||||||
* functionality.
|
|
||||||
*/
|
|
||||||
resultsList.showMetaData.onclick = () => {
|
|
||||||
resultsList.metaDataModalContent.textContent = '';
|
|
||||||
let table = resultsList.createMetaDataForModal(results.metaData);
|
|
||||||
resultsList.metaDataModalContent.insertAdjacentHTML('afterbegin', table);
|
|
||||||
resultsList.metaDataModal.open();
|
|
||||||
let collapsibles = resultsList.metaDataModalContent.querySelectorAll(".text-metadata");
|
|
||||||
for (let collapsible of collapsibles) {
|
|
||||||
collapsible.onclick = () => {
|
|
||||||
let elems = resultsList.metaDataModalContent.querySelectorAll('.collapsible');
|
|
||||||
let instances = M.Collapsible.init(elems, {accordion: false});
|
|
||||||
resultsList.createTextDetails(results.metaData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if resultsList.exportFullInspectContext switch is changed.#
|
|
||||||
* If it has been changed reset all Download buttons.
|
|
||||||
*/
|
|
||||||
resultsList.exportFullInspectContext.onchange = (event) => {
|
|
||||||
// Hide all download buttons.
|
|
||||||
resultsList.fullResultsExport.classList.toggle('hide', true);
|
|
||||||
resultsList.subResultsExport.classList.toggle('hide', true);
|
|
||||||
// Show result create buttons.
|
|
||||||
resultsList.fullResultsCreate.classList.toggle('hide', false);
|
|
||||||
resultsList.subResultsCreate.classList.toggle('hide', false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The following event listeners are handeling the data export.
|
|
||||||
* 1. Create full-results
|
|
||||||
* 2. Create sub-results
|
|
||||||
* 3. Download full-results
|
|
||||||
* 4. Download sub-results
|
|
||||||
* 5. Download single inspect-results
|
|
||||||
*/
|
|
||||||
// 1. Add events for full-results create
|
|
||||||
resultsList.fullResultsCreate.onclick = (event) => {
|
|
||||||
resultsList.fullResultsCreate.querySelector('i').classList.toggle('hide');
|
|
||||||
resultsList.fullResultsCreate.innerText = 'Creating...';
|
|
||||||
resultsList.fullResultsCreate.insertAdjacentHTML('afterbegin',
|
|
||||||
loadingSpinnerHTML);
|
|
||||||
let dataIndexes = [...Array(results.data.match_count).keys()];
|
|
||||||
// Empty fullResultsData so that no previous data is used.
|
|
||||||
results.fullResultsData.init();
|
|
||||||
resultsList.notifyClient('get-results', { resultsType: 'full-results',
|
|
||||||
dataIndexes: dataIndexes,
|
|
||||||
resultsList: resultsList,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 2. Add events for sub-results create
|
|
||||||
resultsList.subResultsCreate.onclick = (event) => {
|
|
||||||
let dataIndexes = [];
|
|
||||||
resultsList.addToSubResultsIdsToShow.forEach((id) => {
|
|
||||||
dataIndexes.push(id - 1);
|
|
||||||
});
|
|
||||||
resultsList.subResultsCreate.querySelector('i').classList.toggle('hide');
|
|
||||||
resultsList.subResultsCreate.innerText = 'Creating...';
|
|
||||||
resultsList.subResultsCreate.insertAdjacentHTML('afterbegin',
|
|
||||||
loadingSpinnerHTML);
|
|
||||||
// Empty subResultsData so that no previous data is used.
|
|
||||||
results.subResultsData.init();
|
|
||||||
resultsList.notifyClient('get-results', { resultsType: 'sub-results',
|
|
||||||
dataIndexes: dataIndexes,
|
|
||||||
resultsList: resultsList,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 3. Open download modal when full results export button is pressed
|
|
||||||
resultsList.fullResultsExport.onclick = (event) => {
|
|
||||||
resultsList.queryResultsDownloadModal.open();
|
|
||||||
// add onclick to download JSON button and download the file
|
|
||||||
resultsList.downloadResultsJson.onclick = (event) => {
|
|
||||||
let suffix = 'full-results'
|
|
||||||
if (resultsList.exportFullInspectContext.checked) {
|
|
||||||
suffix += '_full-context';
|
|
||||||
}
|
|
||||||
let filename = results.fullResultsData.createDownloadFilename(suffix);
|
|
||||||
results.fullResultsData.addData(results.metaData);
|
|
||||||
results.fullResultsData.downloadJSONRessource(filename,
|
|
||||||
results.fullResultsData,
|
|
||||||
resultsList.downloadResultsJson)};
|
|
||||||
}
|
|
||||||
// 4. Open download modal when sub results export button is pressed
|
|
||||||
resultsList.subResultsExport.onclick = (event) => {
|
|
||||||
resultsList.queryResultsDownloadModal.open();
|
|
||||||
// add onclick to download JSON button and download the file
|
|
||||||
resultsList.downloadResultsJson.onclick = (event) => {
|
|
||||||
let suffix = 'sub-results'
|
|
||||||
if (resultsList.exportFullInspectContext.checked) {
|
|
||||||
suffix += '_full-context';
|
|
||||||
}
|
|
||||||
let filename = results.subResultsData.createDownloadFilename(suffix);
|
|
||||||
results.subResultsData.addData(results.metaData);
|
|
||||||
results.subResultsData.downloadJSONRessource(filename,
|
|
||||||
results.subResultsData,
|
|
||||||
resultsList.downloadResultsJson)};
|
|
||||||
}
|
|
||||||
// 5. Open download modal when inspect-results-export button is pressed
|
|
||||||
resultsList.inspectResultsExport.onclick = (event) => {
|
|
||||||
resultsList.queryResultsDownloadModal.open();
|
|
||||||
// add onclick to download JSON button and download the file
|
|
||||||
resultsList.downloadResultsJson.onclick = (event) => {
|
|
||||||
let filename = results.subResultsData.createDownloadFilename('inspect-results_full-context');
|
|
||||||
results.subResultsData.addData(results.metaData);
|
|
||||||
results.subResultsData.downloadJSONRessource(filename,
|
|
||||||
results.inspectResultsData,
|
|
||||||
resultsList.downloadResultsJson)};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable scroll to Top functionality.
|
// Enable scroll to Top functionality.
|
||||||
scrollToTop('#headline', '#menu-scroll-to-top-div');
|
scrollToTop('#headline', '#menu-scroll-to-top-div');
|
||||||
});
|
});
|
||||||
|
@ -104,6 +104,14 @@ import {
|
|||||||
import {
|
import {
|
||||||
scrollToTop,
|
scrollToTop,
|
||||||
} from '../../static/js/modules/corpus_analysis/view/scrollToTop.js'
|
} from '../../static/js/modules/corpus_analysis/view/scrollToTop.js'
|
||||||
|
// vanilla javascript Event listeners which are listening for button clicks etc
|
||||||
|
import {
|
||||||
|
pageNavigation,
|
||||||
|
expertModeSwitch,
|
||||||
|
actionButtons,
|
||||||
|
displayOptions,
|
||||||
|
showMetaData,
|
||||||
|
} from '../../static/js/modules/corpus_analysis/view/eventListeners.js';
|
||||||
/**
|
/**
|
||||||
* Second Phase:
|
* Second Phase:
|
||||||
* Asynchronus and event driven code.
|
* Asynchronus and event driven code.
|
||||||
@ -184,80 +192,13 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||||||
// Save meta data to results after the init callback from line above
|
// Save meta data to results after the init callback from line above
|
||||||
results.metaData = metaDataJson;
|
results.metaData = metaDataJson;
|
||||||
client.eventListeners['corpus_analysis_query_results'].executeCallbacks([resultsJson]);
|
client.eventListeners['corpus_analysis_query_results'].executeCallbacks([resultsJson]);
|
||||||
/**
|
|
||||||
* The following listener handles what functions are called when the user
|
|
||||||
* does use the page navigation to navigate to a new page.
|
|
||||||
*/
|
|
||||||
for (let element of resultsList.pagination) {
|
|
||||||
element.addEventListener("click", (event) => {
|
|
||||||
// Shows match context according to the user picked value on a new page.
|
|
||||||
resultsList.changeContext();
|
|
||||||
// De- or activates expertMode on new page depending on switch value.
|
|
||||||
if (resultsList.displayOptionsFormExpertMode.checked) {
|
|
||||||
resultsList.expertModeOn('query-display', results);
|
|
||||||
} else {
|
|
||||||
resultsList.expertModeOff('query-display');
|
|
||||||
}
|
|
||||||
// Activates inspect buttons on new page if client is not busy.
|
|
||||||
resultsList.toggleInspectButtons(client);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
// Call the vanilla event listeners listening for clicks etc. from the user.
|
||||||
* The following event Listener handles the expert mode switch for the list.
|
pageNavigation(resultsList, results, client);
|
||||||
*/
|
expertModeSwitch(resultsList, results);
|
||||||
resultsList.displayOptionsFormExpertMode.onchange = (event) => {
|
actionButtons(resultsList, results, client);
|
||||||
if (event.target.checked) {
|
displayOptions(resultsList, results, client);
|
||||||
resultsList.expertModeOn('query-display', results);
|
showMetaData(resultsList, results);
|
||||||
} else {
|
|
||||||
resultsList.expertModeOff('query-display');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The following event Listener handles the add-btn and the inspect-btn
|
|
||||||
* onclick events via bubbleing.
|
|
||||||
*/
|
|
||||||
resultsList.queryResultsTable.addEventListener('click', (event) => {
|
|
||||||
let dataIndex;
|
|
||||||
if (event.target.classList.contains('inspect-btn')) {
|
|
||||||
dataIndex = parseInt(event.target.closest('tr').dataset.index);
|
|
||||||
resultsList.inspect(client, results, [dataIndex], 'inspect');
|
|
||||||
} else if (event.target.classList.contains('add-btn')) {
|
|
||||||
dataIndex = parseInt(event.target.closest('tr').dataset.index);
|
|
||||||
resultsList.addToSubResults(dataIndex, client);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Following event listeners handle the change of Context size per match and
|
|
||||||
* the number of matches shown per page.
|
|
||||||
*/
|
|
||||||
resultsList.displayOptionsFormResultsPerPage.onchange = (event) => {
|
|
||||||
resultsList.changeHitsPerPage(client, results);
|
|
||||||
};
|
|
||||||
resultsList.displayOptionsFormResultContext.onchange = (event) => {
|
|
||||||
resultsList.changeContext();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The following event listener handles the show metadata button and its
|
|
||||||
* functionality.
|
|
||||||
*/
|
|
||||||
resultsList.showMetaData.onclick = () => {
|
|
||||||
resultsList.metaDataModalContent.textContent = '';
|
|
||||||
let table = resultsList.createMetaDataForModal(results.metaData);
|
|
||||||
resultsList.metaDataModalContent.insertAdjacentHTML('afterbegin', table);
|
|
||||||
resultsList.metaDataModal.open();
|
|
||||||
let collapsibles = resultsList.metaDataModalContent.querySelectorAll(".text-metadata");
|
|
||||||
for (let collapsible of collapsibles) {
|
|
||||||
collapsible.onclick = () => {
|
|
||||||
let elems = resultsList.metaDataModalContent.querySelectorAll('.collapsible');
|
|
||||||
let instances = M.Collapsible.init(elems, {accordion: false});
|
|
||||||
resultsList.createTextDetails(results.metaData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
// Enable scroll to Top functionality.
|
// Enable scroll to Top functionality.
|
||||||
scrollToTop('#headline', '#menu-scroll-to-top-div');
|
scrollToTop('#headline', '#menu-scroll-to-top-div');
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user