diff --git a/src/connector.js b/src/connector.js
index d02d847..e3d5d0d 100644
--- a/src/connector.js
+++ b/src/connector.js
@@ -10,6 +10,7 @@ import {
buildDidYouMean,
buildContext,
buildInteractiveResult,
+ buildNotifyTrigger,
loadAdvancedSearchQueryActions,
loadSortCriteriaActions,
HighlightUtils,
@@ -59,6 +60,7 @@ let querySummaryController;
let didYouMeanController;
let pagerController;
let statusController;
+let notifyTriggerController;
let urlManager;
let unsubscribeManager;
let unsubscribeSearchBoxController;
@@ -66,12 +68,14 @@ let unsubscribeResultListController;
let unsubscribeQuerySummaryController;
let unsubscribeDidYouMeanController;
let unsubscribePagerController;
+let unsubscribeNotifyTriggerController;
// UI states
let updateSearchBoxFromState = false;
let searchBoxState;
let resultListState;
let querySummaryState;
+let notificationState;
let didYouMeanState;
let pagerState;
let lastCharKeyUp;
@@ -89,6 +93,7 @@ let formElement = document.querySelector( `.page-type-search main [role=search],
let resultsSection = document.querySelector( `#${resultSectionID}` );
let resultListElement = document.querySelector( '#result-list' );
let querySummaryElement = document.querySelector( '#query-summary' );
+let notificationTriggerElement = document.querySelector( '#notification-trigger' );
let pagerElement = document.querySelector( '#pager' );
let suggestionsElement = document.querySelector( '#suggestions' );
let didYouMeanElement = document.querySelector( '#did-you-mean' );
@@ -97,6 +102,7 @@ let didYouMeanElement = document.querySelector( '#did-you-mean' );
let resultTemplateHTML = document.getElementById( 'sr-single' )?.innerHTML;
let noResultTemplateHTML = document.getElementById( 'sr-nores' )?.innerHTML;
let resultErrorTemplateHTML = document.getElementById( 'sr-error' )?.innerHTML;
+let notificationTriggerTemplateHTML = document.getElementById( 'sr-notification-trigger' )?.innerHTML;
let querySummaryTemplateHTML = document.getElementById( 'sr-query-summary' )?.innerHTML;
let didYouMeanTemplateHTML = document.getElementById( 'sr-did-you-mean' )?.innerHTML;
let noQuerySummaryTemplateHTML = document.getElementById( 'sr-noquery-summary' )?.innerHTML;
@@ -264,6 +270,17 @@ function initTpl() {
}
}
+ if ( !notificationTriggerTemplateHTML ) {
+ if ( lang === "fr" ) {
+ notificationTriggerTemplateHTML =
+ ``;
+ }
+ else {
+ notificationTriggerTemplateHTML =
+ ``;
+ }
+ }
+
if ( !querySummaryTemplateHTML ) {
if ( lang === "fr" ) {
querySummaryTemplateHTML =
@@ -366,6 +383,14 @@ function initTpl() {
resultsSection.id = resultSectionID;
}
+ // auto-create notification trigger element
+ if ( !notificationTriggerElement ) {
+ notificationTriggerElement = document.createElement( "div" );
+ notificationTriggerElement.id = "notification-trigger";
+
+ resultsSection.append( notificationTriggerElement );
+ }
+
// auto-create query summary element
if ( !querySummaryElement ) {
querySummaryElement = document.createElement( "div" );
@@ -658,6 +683,7 @@ function initEngine() {
didYouMeanController = buildDidYouMean( headlessEngine, { options: { automaticallyCorrectQuery: params.automaticallyCorrectQuery } } );
pagerController = buildPager( headlessEngine, { options: { numberOfPages: params.numberOfPages } } );
statusController = buildSearchStatus( headlessEngine );
+ notifyTriggerController = buildNotifyTrigger( headlessEngine );
// Refine search based on URL parameters for filters, mostly used in Advanced Search to trigger only one search per page load
if ( urlParams.allq || urlParams.exctq || urlParams.anyq || urlParams.noneq || urlParams.fqupdate || urlParams.dmn || urlParams.fqocct || urlParams.elctn_cat || urlParams.filetype || urlParams.site || urlParams.year || urlParams.declaredtype || urlParams.startdate || urlParams.enddate || urlParams.dprtmnt ) {
@@ -892,6 +918,7 @@ function initEngine() {
unsubscribeQuerySummaryController = querySummaryController.subscribe( () => updateQuerySummaryState( querySummaryController.state ) );
unsubscribeDidYouMeanController = didYouMeanController.subscribe( () => updateDidYouMeanState( didYouMeanController.state ) );
unsubscribePagerController = pagerController.subscribe( () => updatePagerState( pagerController.state ) );
+ unsubscribeNotifyTriggerController = notifyTriggerController.subscribe( () => updateNotifyTriggerState( notifyTriggerController.state ) );
// Clear event tracking, for legacy browsers
const onUnload = () => {
@@ -902,6 +929,7 @@ function initEngine() {
unsubscribeQuerySummaryController?.();
unsubscribeDidYouMeanController?.();
unsubscribePagerController?.();
+ unsubscribeNotifyTriggerController?.();
};
// Listen to URL change (hash)
@@ -1250,6 +1278,18 @@ function updateResultListState( newState ) {
}
}
+// Update notification displayed
+function updateNotifyTriggerState ( newState ) {
+ notificationState = newState;
+
+ if ( notificationState.notifications?.length ) {
+ notificationTriggerElement.innerHTML = notificationTriggerTemplateHTML.replace( DOMPurify.sanitize( "%[notification]" ), notificationState.notifications[0] );
+ }
+ else {
+ notificationTriggerElement.textContent = "";
+ }
+}
+
// Update heading that has number of results displayed (Query Summary)
function updateQuerySummaryState( newState ) {
querySummaryState = newState;