new version with ajax

This commit is contained in:
rnsrk 2025-01-09 18:27:23 +01:00
parent 27c044f040
commit a0b1c7785e
8 changed files with 415 additions and 128 deletions

View file

@ -0,0 +1,189 @@
(function ($, Drupal, drupalSettings) {
function toDropdown(field, i) {
let searchValueSelectId = 'edit-terms-' + i + '-value';
let SearchValueFieldselector = "[id^='" + searchValueSelectId + "']";
let $searchValueInputField = $(SearchValueFieldselector);
$searchValueInputField.hide();
let $oldHelperField = $('#edit-terms-' + i + '-helper');
$oldHelperField.remove();
$searchValueInputField.after('<select aria-label="Enter a search term" data-drupal-selector="edit-terms-' + i + '-helper" id="edit-terms-' + i + '-helper" name="terms[' + i + '][helper]" value="" class="advanced-search--helper-dropdown form-text form-element form-element--type-text form-element--api-textfield"></select>');
let $newHelperField = $('#edit-terms-' + i + '-helper');
if (['agg__arch__transaktion', 'agg__all__transaktion'].includes(field)) { // Transaktion
$newHelperField.empty();
$newHelperField.append('<option value="">Bitte auswählen...</option>');
$newHelperField.append('<option value="Abschreibung">Abschreibung</option>');
$newHelperField.append('<option value="andere">Andere</option>');
$newHelperField.append('<option value="Anteil übertragen/übernommen">Anteil übertragen</option>');
$newHelperField.append('<option value="Auktion">Auktion</option>');
$newHelperField.append('<option value="Geschenk">Geschenk</option>');
$newHelperField.append('<option value="Inventar">Inventar</option>');
$newHelperField.append('<option value="Kauf">Abschreibung</option>');
$newHelperField.append('<option value="keine Angabe">keine Angabe</option>');
$newHelperField.append('<option value="Kommission">Kommission</option>');
$newHelperField.append('<option value="Lager">Lager</option>');
$newHelperField.append('<option value="Nutzen/Gewinnbeteiligung">Nutzen/Gewinnbeteiligung</option>');
$newHelperField.append('<option value="Rückgabe">Rückgabe</option>');
$newHelperField.append('<option value="Share">Geschäftsbeteiligung</option>');
$newHelperField.append('<option value="Tausch">Tausch</option>');
$newHelperField.append('<option value="Übernahme">Übernahme</option>');
$newHelperField.append('<option value="Verlust">Verlust</option>');
$newHelperField.append('<option value="Verkauf">Verkauf</option>');
$newHelperField.append('<option value="Verweis">Verweis auf weitere Karteikarte</option>');
$newHelperField.append('<option value="Weiterverwendung">Weiterverwendung</option>');
} else if (['agg__all__objektkategorie', 'agg__arch__objektkategorie', 'agg__obj__objektkategorie'].includes(field)) { // Objektkategorie
$newHelperField.empty();
$newHelperField.append('<option value="">Bitte auswählen...</option>');
$newHelperField.append('<option value="Malerei">Malerei</option>');
$newHelperField.append('<option value="Skulptur, Plastik, Relief">Skulptur, Plastik</option>');
$newHelperField.append('<option value="Arbeiten auf Papier">Graphik (Zeichnung / Aquarell / Arbeit auf</option>');
$newHelperField.append('<option value="Handschriften (Autographen / Bücher)">Manuskripte/ Bücher</option>');
$newHelperField.append('<option value="Waffen, Rüstungen, Militaria">Militaria / Rüstungen / Waffen</option>');
$newHelperField.append('<option value="Wappen / Wappenscheibe">Wappen / Wappenscheiben</option>');
$newHelperField.append('<option value="Musikinstrumente">Musikinstrumente</option>');
$newHelperField.append('<option value="Möbel und Einrichtung">Möbel / Einrichtung</option>');
$newHelperField.append('<option value="Textilien (auch Tapisserien)">Textilien</option>');
$newHelperField.append('<option value="Schmuck">Schmuck</option>');
$newHelperField.append('<option value="Leuchter">Leuchter</option>');
$newHelperField.append('<option value="Uhren">Uhren</option>');
$newHelperField.append('<option value="Silber- und Goldschmiedekunst">Silber- und Goldschmiedekunst</option>');
$newHelperField.append('<option value="Rahmen">Rahmen</option>');
$newHelperField.append('<option value="Kunsthandwerk / Keramik">Kunsthandwerk Keramik</option>');
$newHelperField.append('<option value="Kunsthandwerk / Glas">Kunsthandwerk Glas</option>');
$newHelperField.append('<option value="Kunsthandwerk / Holz">Kunsthandwerk Holz</option>');
$newHelperField.append('<option value="Kunsthandwerk / Metall">Kunsthandwerk / Metall</option>');
$newHelperField.append('<option value="Kunsthandwerk / Sonstiges"> Kunsthandwerk Sonstiges</option>');
$newHelperField.append('<option value="Münzen und Medaillen">Münzen / Medaillen</option>');
$newHelperField.append('<option value="Asiatika">Asiatika</option>');
$newHelperField.append('<option value="Varia">Varia</option>');
}
$newHelperField.change(function () {
let selectedOption = $newHelperField.find('option:selected');
$searchValueInputField.val(selectedOption.val()).text(selectedOption.text());
});
}
Drupal.behaviors.advanceSearchEntityFields = {
attach: function attach(context, settings) {
let $searchSelectElement = $('[id^="edit-terms-0-search"]');
let originalSearchSelectOptions = $searchSelectElement.find('option').clone();
$searchSelectElement.empty();
$searchSelectElement.append('<option value="all" selected="selected">Keyword</option>');
$searchSelectElement.append('<option value="agg__all__akt">Akteur</option>');
$searchSelectElement.append('<option value="agg__all__anmerkung">Anmerkung</option>');
$searchSelectElement.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelectElement.append('<option value="agg__all__auktionshaus">Auktionshaus</option>');
$searchSelectElement.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelectElement.append('<option value="agg__all_auktionstitel">Auktionstitel</option>');
$searchSelectElement.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelectElement.append('<option value="fd4b844b736f2215421ead5b2fc0f5ef">Fotonummer</option>');
$searchSelectElement.append('<option value="f807d62b374606e52e8833118375ecb0">Karteikarten-ID</option>');
$searchSelectElement.append('<option value="agg__all__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelectElement.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelectElement.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelectElement.append('<option value="agg__all__objektkategorie">Objektkategorie</option>');
$searchSelectElement.append('<option value="agg__all__objekttitel">Objekttitel</option>');
$searchSelectElement.append('<option value="agg__all__ort_regi">Ort/Region</option>');
$searchSelectElement.append('<option value="agg__all__transaktion">Transaktion</option>');
$(document).on('change', '.advanced-search-form--entity', function () {
let id = $(this).attr('id');
let i = id.substring(11, 12);
let $select = $('#' + id);
let searchSelectId = 'edit-terms-' + i + '-search';
let selector = "[id^='" + searchSelectId + "']";
let $searchSelect = $(selector);
if ($select.val() === 'akteur') { // Akteur
$searchSelect.empty();
$searchSelect.append('<option value="agg__akt__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelect.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelect.append('<option value="agg__akt__name">Name</option>');
}
else if ($select.val() === 'b48556e79962e0a3c8d0041317c853b9') { // Archivalie
$searchSelect.empty();
$searchSelect.append('<option value="agg__arch__akteur">Akteur</option>');
$searchSelect.append('<option value="agg_arch__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="agg__arch__auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="f807d62b374606e52e8833118375ecb0">Karteikarten-ID</option>');
$searchSelect.append('<option value="agg__arch__kue_herst">Künster:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__arch__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__arch__ort_reg">Ort/ Region</option>');
}
else if ($select.val() === 'ba419826c9014f40126565bf413f7a59') { // Auktion
$searchSelect.empty();
$searchSelect.append('<option value="agg__arch__akteur">Akteur</option>');
$searchSelect.append('<option value="f11ead3fa212224b6e82ce5622c1d99c">Anmerkung</option>');
$searchSelect.append('<option value="ff8fb361d19f1fb4030605f87cb995ff">Auktionshaus</option>');
$searchSelect.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelect.append('<option value="f6230cbdc56e0f04a90424b248680c76">Titel der Auktion</option>');
} else if ($select.val() === 'b65c3a85d16724d84a5eb0d2268629a6') { // Objekt
$searchSelect.empty();
$searchSelect.append('<option value="fe12ded9c22ca130eae59a41ea380f3d">Anmerkung</option>');
$searchSelect.append('<option value="agg__obj__akt">Akteur</option>');
$searchSelect.append('<option value="agg__obj__auktionshaus">Auktionshaus</option>');
$searchSelect.append('<option value="agg__obj__auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="agg__obj__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelect.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelect.append('<option value="agg__obj__titel">Objekttitel</option>');
$searchSelect.append('<option value="agg__obj__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__obj__ort_regi">Ort/Region</option>');
} else if ($select.val() === 'ueberall') {
$searchSelect.empty();
$searchSelect.append('<option value="all" selected="selected">Keyword</option>');
$searchSelect.append('<option value="agg__all__akt">Akteur</option>');
$searchSelect.append('<option value="agg__all__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelect.append('<option value="agg__all__auktionshaus">Auktionshaus</option>');
$searchSelect.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelect.append('<option value="agg__all_auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelect.append('<option value="fd4b844b736f2215421ead5b2fc0f5ef">Fotonummer</option>');
$searchSelect.append('<option value="f807d62b374606e52e8833118375ecb0">Karteikarten-ID</option>');
$searchSelect.append('<option value="agg__all__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelect.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelect.append('<option value="agg__all__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__all__objekttitel">Objekttitel</option>');
$searchSelect.append('<option value="agg__all__ort_regi">Ort/Region</option>');
$searchSelect.append('<option value="agg__all__transaktion">Transaktion</option>');
}
});
let urlParams = new URLSearchParams(window.location.search);
let params = {};
let p = {};
for (const param of urlParams) {
let key = param[0].split('[');
let value = param[1];
let obj = p;
for (let i = 0; i < key.length - 1; i++) {
let k = key[i].replace(']', '');
if (!obj.hasOwnProperty(k)) {
obj[k] = {};
}
obj = obj[k];
}
let lastKey = key[key.length - 1].replace(']', '');
obj[lastKey] = value;
}
params = p;
$(document).on('change', '.advanced-search-form--select-field', function () {
let id = $(this).attr('id');
let i = id.substring(11, 12);
let field = $(this).val();
if (['agg__arch__transaktion', 'agg__all__transaktion', 'agg__all__objektkategorie', 'agg__arch__objektkategorie', 'agg__obj__objektkategorie'].includes(field)) {
let dropdown = toDropdown(field, i);
} else {
let searchValueSelectId = 'edit-terms-' + i + '-value';
let SearchValueFieldselector = "[id^='" + searchValueSelectId + "']";
let $searchValueInputField = $(SearchValueFieldselector);
$searchValueInputField.show();
let $oldHelperField = $('#edit-terms-' + i + '-helper');
$oldHelperField.remove();
}
});
}
};
})(jQuery, Drupal, drupalSettings);

View file

@ -31,7 +31,7 @@
$newHelperField.append('<option value="Verkauf">Verkauf</option>');
$newHelperField.append('<option value="Verweis">Verweis auf weitere Karteikarte</option>');
$newHelperField.append('<option value="Weiterverwendung">Weiterverwendung</option>');
} else if ([ 'agg__all__objektkategorie', 'agg__arch__objektkategorie', 'agg__obj__objektkategorie'].includes(field)) { // Objektkategorie
} else if (['agg__all__objektkategorie', 'agg__arch__objektkategorie', 'agg__obj__objektkategorie'].includes(field)) { // Objektkategorie
$newHelperField.empty();
$newHelperField.append('<option value="">Bitte auswählen...</option>');
$newHelperField.append('<option value="Malerei">Malerei</option>');
@ -65,97 +65,11 @@
Drupal.behaviors.advanceSearchEntityFields = {
attach: function attach(context, settings) {
let $searchSelectElement = $('[id^="edit-terms-0-search"]');
let originalSearchSelectOptions = $searchSelectElement.find('option').clone();
$searchSelectElement.empty();
$searchSelectElement.append('<option value="all" selected="selected">Keyword</option>');
$searchSelectElement.append('<option value="agg__all__akt">Akteur</option>');
$searchSelectElement.append('<option value="agg__all__anmerkung">Anmerkung</option>');
$searchSelectElement.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelectElement.append('<option value="agg__all__auktionshaus">Auktionshaus</option>');
$searchSelectElement.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelectElement.append('<option value="agg__all_auktionstitel">Auktionstitel</option>');
$searchSelectElement.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelectElement.append('<option value="fd4b844b736f2215421ead5b2fc0f5ef">Fotonummer</option>');
$searchSelectElement.append('<option value="f807d62b374606e52e8833118375ecb0">Karteikarten-ID</option>');
$searchSelectElement.append('<option value="agg__all__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelectElement.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelectElement.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelectElement.append('<option value="agg__all__objektkategorie">Objektkategorie</option>');
$searchSelectElement.append('<option value="agg__all__objekttitel">Objekttitel</option>');
$searchSelectElement.append('<option value="agg__all__ort_regi">Ort/Region</option>');
$searchSelectElement.append('<option value="agg__all__transaktion">Transaktion</option>');
$(document).on('change', '.advanced-search-form--entity', function () {
let id = $(this).attr('id');
let i = id.substring(11, 12);
let $select = $('#' + id);
let searchSelectId = 'edit-terms-' + i + '-search';
let selector = "[id^='" + searchSelectId + "']";
let $searchSelect = $(selector);
if ($select.val() === 'akteur') { // Akteur
$searchSelect.empty();
$searchSelect.append('<option value="agg__akt__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelect.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelect.append('<option value="agg__akt__name">Name</option>');
}
else if ($select.val() === 'b48556e79962e0a3c8d0041317c853b9') { // Archivalie
$searchSelect.empty();
$searchSelect.append('<option value="agg__arch__akteur">Akteur</option>');
$searchSelect.append('<option value="agg_arch__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="agg__arch__auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="agg__arch__kue_herst">Künster:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__arch__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__arch__ort_reg">Ort/ Region</option>');
}
else if ($select.val() === 'ba419826c9014f40126565bf413f7a59') { // Auktion
$searchSelect.empty();
$searchSelect.append('<option value="agg__arch__akteur">Akteur</option>');
$searchSelect.append('<option value="f11ead3fa212224b6e82ce5622c1d99c">Anmerkung</option>');
$searchSelect.append('<option value="ff8fb361d19f1fb4030605f87cb995ff">Auktionshaus</option>');
$searchSelect.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelect.append('<option value="f6230cbdc56e0f04a90424b248680c76">Titel der Auktion</option>');
} else if ($select.val() === 'b65c3a85d16724d84a5eb0d2268629a6') { // Objekt
$searchSelect.empty();
$searchSelect.append('<option value="fe12ded9c22ca130eae59a41ea380f3d">Anmerkung</option>');
$searchSelect.append('<option value="agg__obj__akt">Akteur</option>');
$searchSelect.append('<option value="agg__obj__auktionshaus">Auktionshaus</option>');
$searchSelect.append('<option value="agg__obj__auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="agg__obj__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelect.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelect.append('<option value="agg__obj__titel">Objekttitel</option>');
$searchSelect.append('<option value="agg__obj__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__obj__ort_regi">Ort/Region</option>');
} else if ($select.val() === 'ueberall') {
$searchSelect.empty();
$searchSelect.append('<option value="all" selected="selected">Keyword</option>');
$searchSelect.append('<option value="agg__all__akt">Akteur</option>');
$searchSelect.append('<option value="agg__all__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelect.append('<option value="agg__all__auktionshaus">Auktionshaus</option>');
$searchSelect.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelect.append('<option value="agg__all_auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelect.append('<option value="fd4b844b736f2215421ead5b2fc0f5ef">Fotonummer</option>');
$searchSelect.append('<option value="f807d62b374606e52e8833118375ecb0">Karteikarten-ID</option>');
$searchSelect.append('<option value="agg__all__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelect.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelect.append('<option value="agg__all__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__all__objekttitel">Objekttitel</option>');
$searchSelect.append('<option value="agg__all__ort_regi">Ort/Region</option>');
$searchSelect.append('<option value="agg__all__transaktion">Transaktion</option>');
}
});
$(document).on('change', '.advanced-search-form--select-field', function () {
let id = $(this).attr('id');
let i = id.substring(11, 12);
let field = $(this).val();
if (['agg__arch__transaktion', 'agg__all__transaktion', 'agg__all__objektkategorie', 'agg__arch__objektkategorie', 'agg__obj__objektkategorie'].includes(field)) {
console.log(field);
let dropdown = toDropdown(field, i);
} else {
let searchValueSelectId = 'edit-terms-' + i + '-value';
@ -166,7 +80,6 @@
$oldHelperField.remove();
}
});
}
};

View file

@ -138,14 +138,6 @@
e.preventDefault();
e.stopPropagation();
let inputs = $form.serializeArray();
//console.log(inputs);
//inputs = inputs.filter(function(el) {
// return !el.name.match(/terms\[\d+\]\[entity\]/);
//});
//inputs = originalInputs;
//console.log(inputs);
const href = url(inputs, settings.advanced_search_form);
/* digitalutsc added*/
@ -177,7 +169,9 @@
}
});
window.history.pushState(null, document.title, href);
});
}
// Reset should trigger refresh of AJAX Blocks / Views.
$form.find('input[data-drupal-selector = "edit-reset"]').mousedown(function (e) {
@ -192,13 +186,15 @@
// Handle the page summary
$("#ajax-page-summary").hide();
$( document ).ajaxComplete(function( event, request, settings ) {
$("#ajax-page-summary").hide();
//$("#ajax-page-summary").hide();
if (jQuery("#ajax-page-summary").length >0) {
$(".pager__summary").html($("#ajax-page-summary").html());
}
else {
$(".pager__summary").html("");
}
$('.boehler-js-disabled').removeClass('boehler-js-disabled');
});
}
}

View file

@ -28,7 +28,6 @@
temp = queries[i].split('=');
params[temp[0]] = temp[1];
}
return params;
};
@ -54,15 +53,15 @@
});
}
// Update items_per_page links in pager
if (url.indexOf("items_per_page=") == -1) {
// Update items_per_page links in pager
if (url.indexOf("items_per_page=") == -1) {
// append items_per_page
$("a.pager__itemsperpage").each(function( index ) {
var newUrl = url + "&items_per_page=" + $(this).html();
$(this).attr("href", newUrl);
});
}
else {
}
else {
// replace existed items_per_page
var params = parseQueryString(url.split("?")[1]);
var newParams = [];
@ -76,7 +75,7 @@
}
// check for items_per_page query
if (!key.startsWith("items_per_page")) {
if (!key.startsWith("items_per_page")) {
newParams.push(key + "=" + params[key]);
}
}
@ -88,15 +87,15 @@
// Update display mode links in pager
if (url.indexOf("display=") == -1) {
// Update display mode links in pager
if (url.indexOf("display=") == -1) {
// append items_per_page
$("a.pager__display").each(function( index ) {
var newUrl = url + "&display=" + $(this).find(".display-mode").html().toLowerCase();
$(this).attr("href", newUrl);
});
}
else {
}
else {
// replace existed display
var params = parseQueryString(url.split("?")[1]);
var newParams = [];
@ -110,7 +109,7 @@
}
// check for display query
if (!key.startsWith("display")) {
if (!key.startsWith("display")) {
newParams.push(key + "=" + params[key]);
}
}
@ -123,7 +122,7 @@
}
// Replace filter, pager, summary, and facet blocks.
var blocks = {};
$(
@ -191,6 +190,7 @@
var params = Drupal.Views.parseQueryString(href);
// Remove the page if set as submitting the form should always take
// the user to the first page (facets do the same).
console.log("params", params);
delete params.page;
// Include values from the form in the URL.
$.each(exposed_form.serializeArray(), function () {