adding url params vaccine and symptom

This commit is contained in:
Frank Knoll
2024-07-14 00:32:36 +02:00
parent 52d724afaa
commit 214510bc33
4 changed files with 66 additions and 40 deletions

View File

@@ -35,21 +35,25 @@
<script src="./js/PrrByKeyTableView.js"></script> <script src="./js/PrrByKeyTableView.js"></script>
<script src="./js/PrrByVaccineTableView.js"></script> <script src="./js/PrrByVaccineTableView.js"></script>
<script src="./js/PrrBySymptomTableView.js"></script> <script src="./js/PrrBySymptomTableView.js"></script>
<script src="./js/Select2.js"></script>
<script> <script>
document.addEventListener( document.addEventListener(
"DOMContentLoaded", "DOMContentLoaded",
event => { event => {
const urlSearchParams = new URLSearchParams(window.location.search);
const name = 'Drug'; const name = 'Drug';
PageInitializer.initializePage( PageInitializer.initializePage(
{ {
symptom: { symptom: {
symptomSelectElement: $('#symptomSelect'), symptomSelectElement: $('#symptomSelect'),
selectSymptom: UIUtils.getSearchParam(urlSearchParams, 'symptom', null),
prrByVaccineTableElement: $('#prrByVaccineTable'), prrByVaccineTableElement: $('#prrByVaccineTable'),
downloadPrrByVaccineTableButton: document.querySelector("#downloadPrrByVaccineTable"), downloadPrrByVaccineTableButton: document.querySelector("#downloadPrrByVaccineTable"),
keyColumnName: name keyColumnName: name
}, },
vaccine: { vaccine: {
vaccineSelectElement: $('#vaccineSelect'), vaccineSelectElement: $('#vaccineSelect'),
selectVaccine: UIUtils.getSearchParam(urlSearchParams, 'vaccine', null),
prrBySymptomTableElement: $('#prrBySymptomTable'), prrBySymptomTableElement: $('#prrBySymptomTable'),
downloadPrrBySymptomTableButton: document.querySelector("#downloadPrrBySymptomTable"), downloadPrrBySymptomTableButton: document.querySelector("#downloadPrrBySymptomTable"),
valueName: name valueName: name
@@ -14317,25 +14321,11 @@
<a class="a2a_button_email"></a> <a class="a2a_button_email"></a>
</div> </div>
<script> <script>
// adapted from https://www.addtoany.com/buttons/customize/events#modify-share
function my_addtoany_onshare(share_data) {
const hash_pi = '#3.1459';
const old_url = share_data.url;
let new_url = old_url;
if (old_url.indexOf(hash_pi, old_url.length - hash_pi.length) === -1) {
new_url = old_url + hash_pi;
}
if (new_url != old_url) {
return {
url: new_url,
};
}
}
var a2a_config = a2a_config || {}; var a2a_config = a2a_config || {};
a2a_config.callbacks = a2a_config.callbacks || []; a2a_config.callbacks = a2a_config.callbacks || [];
a2a_config.callbacks.push({ a2a_config.callbacks.push({
share: my_addtoany_onshare, // FK-TODO: use selected symptom and vaccine for url
share: _ => ({ url: window.location.href }),
}); });
</script> </script>
<script async src="https://static.addtoany.com/menu/page.js"></script> <script async src="https://static.addtoany.com/menu/page.js"></script>

View File

@@ -5,34 +5,25 @@ class PageInitializer {
PageInitializer.#configureVaccine(vaccine); PageInitializer.#configureVaccine(vaccine);
} }
static #configureSymptom({ symptomSelectElement, prrByVaccineTableElement, downloadPrrByVaccineTableButton, keyColumnName }) { static #configureSymptom({ symptomSelectElement, selectSymptom, prrByVaccineTableElement, downloadPrrByVaccineTableButton, keyColumnName }) {
const prrByVaccineTableView = new PrrByVaccineTableView(prrByVaccineTableElement, downloadPrrByVaccineTableButton, keyColumnName); const prrByVaccineTableView = new PrrByVaccineTableView(prrByVaccineTableElement, downloadPrrByVaccineTableButton, keyColumnName);
PageInitializer.#initializeSelectElement( Select2.initializeSelectElement(
{ {
selectElement: symptomSelectElement, selectElement: symptomSelectElement,
textOfOption2Select: selectSymptom,
onValueSelected: (id, text) => prrByVaccineTableView.displayPrrByVaccineTable4Symptom(id, text), onValueSelected: (id, text) => prrByVaccineTableView.displayPrrByVaccineTable4Symptom(id, text),
minimumInputLength: 0 minimumInputLength: 0
}); });
} }
static #configureVaccine({ vaccineSelectElement, prrBySymptomTableElement, downloadPrrBySymptomTableButton, valueName }) { static #configureVaccine({ vaccineSelectElement, selectVaccine, prrBySymptomTableElement, downloadPrrBySymptomTableButton, valueName }) {
const prrBySymptomTableView = new PrrBySymptomTableView(prrBySymptomTableElement, downloadPrrBySymptomTableButton, valueName); const prrBySymptomTableView = new PrrBySymptomTableView(prrBySymptomTableElement, downloadPrrBySymptomTableButton, valueName);
PageInitializer.#initializeSelectElement( Select2.initializeSelectElement(
{ {
selectElement: vaccineSelectElement, selectElement: vaccineSelectElement,
onValueSelected: (id, text) => prrBySymptomTableView.displayPrrBySymptomTable4Vaccine(id ,text), textOfOption2Select: selectVaccine,
onValueSelected: (id, text) => prrBySymptomTableView.displayPrrBySymptomTable4Vaccine(id, text),
minimumInputLength: 0 minimumInputLength: 0
}); });
} }
static #initializeSelectElement({ selectElement, onValueSelected, minimumInputLength }) {
selectElement.select2({ minimumInputLength: minimumInputLength });
selectElement.on(
'select2:select',
function (event) {
const id = event.params.data.id;
const text = event.params.data.text;
onValueSelected(id, text);
});
}
} }

View File

@@ -0,0 +1,45 @@
class Select2 {
// FK-TODO: rename onValueSelected to onSelectOptionHavingValueAndText
static initializeSelectElement({ selectElement, textOfOption2Select, onValueSelected, minimumInputLength }) {
selectElement.select2({ minimumInputLength: minimumInputLength });
selectElement.on(
'select2:select',
function (event) {
const id = event.params.data.id;
const text = event.params.data.text;
onValueSelected(id, text);
});
Select2.#selectOptionHavingText(selectElement, textOfOption2Select);
}
static #selectOptionHavingText(selectElement, text) {
const option = Select2.#getOptionHavingText(selectElement, text);
if (option === undefined) {
return;
}
Select2.#selectOption(selectElement, option);
}
static #getOptionHavingText(selectElement, text) {
if (text === null) {
return undefined;
}
return Array
.from(selectElement[0].options)
.find(option => option.text == text);
}
static #selectOption(selectElement, option) {
selectElement.val(option.value).trigger('change');
selectElement.trigger({
type: 'select2:select',
params: {
data: {
"id": option.value,
"text": option.text
}
}
});
}
}

View File

@@ -11,14 +11,14 @@
<script src="../../Utils.js"></script> <script src="../../Utils.js"></script>
<script src="../../UIUtils.js"></script> <script src="../../UIUtils.js"></script>
<script src="../../NumberWithBarElementFactory.js"></script> <script src="../../NumberWithBarElementFactory.js"></script>
<script src="../js/PrrByKey2CsvConverter.js"></script> <script src="../../SymptomsCausedByDrugs/js/PrrByKey2CsvConverter.js"></script>
<script src="../js/PageInitializer.js"></script> <script src="../../SymptomsCausedByDrugs/js/PageInitializer.js"></script>
<script src="../js/PrrByVaccineProvider.js"></script> <script src="../../SymptomsCausedByDrugs/js/PrrByVaccineProvider.js"></script>
<script src="../js/PrrByKeyTable.js"></script> <script src="../../SymptomsCausedByDrugs/js/PrrByKeyTable.js"></script>
<script src="../js/PrrByKeyTableView.js"></script> <script src="../../SymptomsCausedByDrugs/js/PrrByKeyTableView.js"></script>
<script src="../js/PrrByVaccineTableView.js"></script> <script src="../../SymptomsCausedByDrugs/js/PrrByVaccineTableView.js"></script>
<script src="../js/PrrBySymptomTableView.js"></script> <script src="../../SymptomsCausedByDrugs/js/PrrBySymptomTableView.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.17.2.css"> <link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.17.2.css">
<script src="https://code.jquery.com/qunit/qunit-2.17.2.js"></script> <script src="https://code.jquery.com/qunit/qunit-2.17.2.js"></script>
<script type="text/javascript" src="./jshamcrest.js"></script> <script type="text/javascript" src="./jshamcrest.js"></script>
<script type="text/javascript" src="./jsmockito-1.0.4.js"></script> <script type="text/javascript" src="./jsmockito-1.0.4.js"></script>