(function () {
function enc(value) {
return encodeURIComponent(
value == null ? '' : String(value)
);
}
function makeFacet(type, name, value) {
return `${type}:${enc(name)}:${enc(value)}`;
}
function isFacetKey(key) {
return /^searchstax\[facets\]\[\d+\]$/.test(key);
}
function buildUrl(action, params) {
const base = new URL(
action || window.location.pathname,
window.location.origin
);
const queryString = Object.keys(params)
.filter(key =>
params[key] !== undefined &&
params[key] !== null &&
String(params[key]).trim() !== ''
)
.map(key => {
/*
* SearchStax requires literal ":" separators in facet values.
* The facet components have already been encoded by makeFacet().
*/
const value = isFacetKey(key)
? params[key]
: enc(params[key]);
return `${key}=${value}`;
})
.join('&');
base.search = queryString;
return base.toString();
}
document.addEventListener('submit', function (event) {
const form = event.target;
if (!form.matches('.search__container form')) return;
const queryInput = form.querySelector(
'input[name="searchstax[query]"]'
);
if (!queryInput) return;
const query = (queryInput.value || '').trim();
if (!query) return;
event.preventDefault();
const modelInput = form.querySelector(
'input[name="searchstax[model]"]'
);
const model = modelInput
? (modelInput.value || '').trim()
: 'Main Profile';
const params = {
'searchstax[query]': query,
'searchstax[page]': '1',
'searchstax[model]': model
};
const scopeCheckbox = form.querySelector(
'[data-search-this-site]'
);
if (scopeCheckbox && scopeCheckbox.checked) {
const hostname = window.location.hostname
.toLowerCase()
.replace(/\.$/, '');
params['searchstax[facets][0]'] =
makeFacet('tabs', 'og_type_s', 'website');
params['searchstax[facets][1]'] =
makeFacet('and', 'host', hostname);
}
const target = buildUrl(
form.getAttribute('action'),
params
);
window.location.assign(target);
}, true);
})();