/*! elementor-pro - v4.0.0 - 28-04-2026 */ "use strict"; (self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["search"],{ /***/ "../modules/search/assets/js/frontend/handlers/search-keyboard-handler.js" /*!********************************************************************************!*\ !*** ../modules/search/assets/js/frontend/handlers/search-keyboard-handler.js ***! \********************************************************************************/ (__unused_webpack_module, exports, __webpack_require__) { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _focusableElementSelectors = __webpack_require__(/*! elementor-pro/frontend/utils/focusable-element-selectors */ "../assets/dev/js/frontend/utils/focusable-element-selectors.js"); class SearchKeyboardHandler extends elementorModules.frontend.handlers.Base { focusableResultElements; currentResultFocusedIndex = -1; __construct(...args) { super.__construct(...args); elementorFrontend.hooks.addAction('search:results-updated', this.loadResultElementsEvents.bind(this)); } getDefaultSettings() { return { selectors: { searchWrapper: '.e-search', searchField: '.e-search-input', resultsContainer: '.e-search-results-container', loopItem: '.e-loop-item', clearIcon: '.e-search-input-wrapper > svg, .e-search-input-wrapper > i' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { resultsContainer: this.$element[0].querySelector(selectors.resultsContainer), searchField: this.$element[0].querySelector(selectors.searchField), clearIcon: this.$element[0].querySelector(selectors.clearIcon) }; } setFocusableElements(elementContainer) { const focusableSelectors = (0, _focusableElementSelectors.focusableElementSelectors)(); const focusableElements = elementContainer.querySelectorAll(focusableSelectors); this.focusableResultElements = Array.from(focusableElements).filter(element => !element.disabled && !element.inert && element.tabIndex !== -1); } isSearchInputFocused() { return this.elements.searchField === elementorFrontend.elements.window.document.activeElement; } bindEvents() { this.boundHandleKeyboardNavigation = this.handleKeyboardNavigation.bind(this); this.boundHandleEscapeKey = this.handleEscapeKey.bind(this); this.elements.searchField.addEventListener('keydown', this.boundHandleKeyboardNavigation); elementorFrontend.elements.window.document.addEventListener('keydown', this.boundHandleEscapeKey); this.elements.searchField.addEventListener('focus', this.openResults.bind(this)); } loadResultElementsEvents() { this.setFocusableElements(this.$element[0].querySelector(this.getSettings('selectors.resultsContainer'))); this.focusableResultElements?.forEach(element => { element.addEventListener('keydown', this.handleKeyboardNavigation.bind(this)); }); } unbindEvents() { if (this.boundHandleKeyboardNavigation) { this.elements.searchField.removeEventListener('keydown', this.boundHandleKeyboardNavigation); } elementorFrontend.elements.window.document.removeEventListener('keydown', this.boundHandleEscapeKey); this.elements.searchField.removeEventListener('focus', this.openResults.bind(this)); } handleKeyboardNavigation(event) { switch (event.key) { case 'ArrowDown': this.focusNextElement(); break; case 'ArrowUp': this.focusPreviousElement(); break; case 'Enter': this.handleEnterKey(); break; } } areResultsClosed() { const existingResults = this.elements.resultsContainer.querySelectorAll(this.getSettings('selectors.loopItem')); return 0 === existingResults.length || this.elements.resultsContainer.classList.contains('hidden'); } openResults() { if (this.areResultsClosed()) { this.elements.resultsContainer.classList.remove('hidden'); elementorFrontend.hooks.doAction('search:results-displayed', this.getID()); } } handleEnterKey() { this.closeResults(); } handleEscapeKey(event) { if ('Escape' !== event.key) { return; } const activeElement = elementorFrontend.elements.window.document.activeElement, isSearchResultsFocused = this.elements.resultsContainer.contains(activeElement) || false; if (isSearchResultsFocused) { this.elements.searchField.focus(); } this.closeResults(); } focusNextElement() { if (this.isSearchInputFocused()) { this.currentResultFocusedIndex = 0; } else { this.currentResultFocusedIndex++; this.checkFocusIndexBounds(); } this.updateFocus(); } focusPreviousElement() { if (this.isSearchInputFocused()) { this.currentResultFocusedIndex = this.focusableResultElements.length - 1; } else { this.currentResultFocusedIndex--; this.checkFocusIndexBounds(); } this.updateFocus(); } checkFocusIndexBounds() { if (this.currentResultFocusedIndex >= this.focusableResultElements.length) { this.currentResultFocusedIndex = -1; } else if (this.currentResultFocusedIndex < -1) { this.currentResultFocusedIndex = this.focusableResultElements.length - 1; } } updateFocus() { if (-1 === this.currentResultFocusedIndex) { this.focusSearchAndMoveCursorToEnd(); } else { this.setFocusToElement(this.focusableResultElements[this.currentResultFocusedIndex]); } } closeResults() { this.elements.resultsContainer.classList.add('hidden'); this.updateAriaExpanded(false); } updateAriaExpanded(expanded) { this.elements.searchField.setAttribute('aria-expanded', expanded); } focusSearchAndMoveCursorToEnd() { const searchField = this.elements.searchField; const length = searchField.value.length; this.setFocusToElement(this.elements.searchField); searchField.setSelectionRange(length, length); } setFocusToElement(element) { element.focus(); } } exports["default"] = SearchKeyboardHandler; /***/ }, /***/ "../modules/search/assets/js/frontend/handlers/search.js" /*!***************************************************************!*\ !*** ../modules/search/assets/js/frontend/handlers/search.js ***! \***************************************************************/ (__unused_webpack_module, exports, __webpack_require__) { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _runElementHandlers = _interopRequireDefault(__webpack_require__(/*! elementor-pro/frontend/utils/run-element-handlers */ "../assets/dev/js/frontend/utils/run-element-handlers.js")); class Search extends elementorModules.frontend.handlers.Base { debounceTimeoutId; page_number; __construct(...args) { super.__construct(...args); elementorFrontend.hooks.addAction('search:results-displayed', this.hideOtherResults.bind(this)); } getDefaultSettings() { return { selectors: { searchWrapper: '.e-search', searchField: '.e-search-input', submitButton: '.e-search-submit', clearIcon: '.e-search-input-wrapper > svg, .e-search-input-wrapper > i', searchIcon: '.e-search-label > svg, .e-search-label > i', resultsContainer: '.e-search-results-container', results: '.e-search-results', links: 'a.page-numbers:not(.current)' }, classes: { searchResultsListWrapper: 'e-search-results-list', searchResultsPagination: 'elementor-pagination' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { searchWidget: this.$element[0], searchWrapper: this.$element[0].querySelector(selectors.searchWrapper), searchField: this.$element[0].querySelector(selectors.searchField), submitButton: this.$element[0].querySelector(selectors.submitButton), clearIcon: this.$element[0].querySelector(selectors.clearIcon), searchIcon: this.$element[0].querySelector(selectors.searchIcon), resultsContainer: this.$element[0].querySelector(selectors.resultsContainer), results: this.$element[0].querySelector(selectors.results), links: this.$element[0].querySelectorAll(selectors.links) }; } onInit() { super.onInit(); this.changeClearIconVisibility(true); this.updateInputStyle(); this.toggleSearchResultsVisibility = this.toggleSearchResultsVisibility.bind(this); document.addEventListener('click', this.toggleSearchResultsVisibility); document.fonts.ready.then(() => this.updateInputStyle()); } onDestroy() { document.removeEventListener('click', this.toggleSearchResultsVisibility); } bindEvents() { this.elements.submitButton.addEventListener('click', this.onSubmit.bind(this)); this.elements.searchField.addEventListener('input', event => { this.changeClearIconVisibility(!event.target.value.length); this.debounce(this.onType)(event); }); this.elements.searchField.addEventListener('keydown', this.onSearchFieldKeydown.bind(this)); this.elements.searchWidget.addEventListener('click', this.onClick.bind(this)); ['focusin', 'focusout'].forEach(eventType => { this.elements.searchField.addEventListener(eventType, this.toggleWidgetFocusClass.bind(this)); }); this.elements.clearIcon?.addEventListener('click', this.onClear.bind(this)); this.linksEventListeners(); } linksEventListeners() { if (!this.elements.links.length) { return; } this.elements.links.forEach(link => { link.addEventListener('click', event => { this.handleLinkClick(event); }); }); } handleLinkClick(event) { event.preventDefault(); const nextPageUrl = event?.target.getAttribute('href'), urlParams = new URLSearchParams(new URL(nextPageUrl).search), pageNumber = urlParams.get('e-search-page'); this.page_number = pageNumber ? parseInt(pageNumber, 10) : 1; this.removeLinksListeners(); this.renderLiveResults(); } removeLinksListeners() { if (!this.elements.links.length) { return; } this.elements.links.forEach(link => { link.removeEventListener('click', this.handleLinkClick); }); } reInitLinks() { this.elements.links = document.querySelectorAll(`[data-id="${this.getID()}"] a.page-numbers:not(.current)`); this.linksEventListeners(); } onClick() { this.elements.resultsContainer.classList.add('hide-loader'); } onType(event) { event.preventDefault(); this.updateAriaLabel(this.elements.searchField.value); if (!this.elements.searchField.value.length) { this.clearResultsMarkup(); return; } const minimumSearchLength = this.getMinimumSearchLength(); const shouldShowLiveResults = this.shouldShowLiveResults(); if (shouldShowLiveResults && this.elements.searchField.value.length >= minimumSearchLength) { this.page_number = 1; this.renderLiveResults(); } } toggleWidgetFocusClass(event) { const isFocusIn = 'focusin' === event.type; this.$element[0].classList.toggle('e-focus', isFocusIn); } onSubmit(event) { if (elementorFrontend.isEditMode()) { event.preventDefault(); } } onClear(event) { event.preventDefault(); this.elements.searchField.value = ''; this.clearResultsMarkup(); this.elements.searchField.focus(); this.changeClearIconVisibility(true); } onSearchFieldKeydown(event) { if ('Enter' === event.code) { this.clearResultsMarkup(); this.onSubmit(event); } } fetchUpdatedSearchWidgetMarkup() { return fetch(`${elementorProFrontend.config.urls.rest}elementor-pro/v1/refresh-search`, this.getFetchArgumentsForSearchUpdate()); } getMinimumSearchLength() { return this.getElementSettings().minimum_search_characters || 3; } shouldShowLiveResults() { return this.getElementSettings().live_results && this.getElementSettings().template_id; } renderLiveResults() { const widget = document.querySelector(`.elementor-element-${this.getID()}`); if (!widget) { return; } if (!this.elements.searchField.value) { this.clearResultsMarkup(); return; } this.elements.resultsContainer.classList.remove('hide-loader'); this.elements.resultsContainer.classList.remove('hidden'); return this.fetchUpdatedSearchWidgetMarkup().then(response => { if (!(response instanceof Response) || !response?.ok || 400 <= response?.status) { return {}; } return response.json(); }).catch(() => { return {}; }).then(response => { if (!response?.data) { this.updateAriaExpanded(false); return; } const resultNode = this.createResultNode(response); this.elements.results.replaceChildren(resultNode.resultContentNode); this.elements.results.append(resultNode.paginationNode); this.elements.resultsContainer.classList.add('hide-loader'); this.maybeHandleNoResults(resultNode.resultContentNode); elementorFrontend.hooks.doAction('search:results-updated'); }).finally(() => { const resultsElements = document.querySelectorAll(`[data-id="${this.getID()}"] .e-loop-item`); (0, _runElementHandlers.default)(resultsElements); this.reInitLinks(); if (ElementorProFrontendConfig.settings.lazy_load_background_images) { document.dispatchEvent(new Event('elementor/lazyload/observe')); } }); } maybeHandleNoResults(resultsNode) { const isNoResultsMessage = !!resultsNode.querySelector('.e-search-nothing-found-message'); this.elements.results.classList[isNoResultsMessage ? 'add' : 'remove']('no-results'); if (!isNoResultsMessage) { this.hideOtherResults(); } } hideOtherResults(id = null) { if (id && id !== this.getID()) { return; } const visibleResultsContainers = document.querySelectorAll(`${this.getSettings('selectors').resultsContainer}:not(.hidden)`); Array.from(visibleResultsContainers).filter(resultsContainer => !resultsContainer.closest(`.elementor-element-${this.getID()}`)).forEach(resultsContainer => resultsContainer.classList.add('hidden')); } createResultNode(responseData) { const resultContentNode = document.createElement('div'); const searchResultsList = this.getSettings('classes.searchResultsListWrapper'); const paginationNode = document.createElement('nav'); const searchResultPagination = this.getSettings('classes.searchResultsPagination'); const searchResultPaginationAriaLabel = 'Pagination'; paginationNode.setAttribute('class', searchResultPagination); paginationNode.setAttribute('aria-label', searchResultPaginationAriaLabel); resultContentNode.setAttribute('class', searchResultsList); paginationNode.innerHTML = responseData.pagination; resultContentNode.innerHTML = responseData.data; const loopItems = resultContentNode.querySelectorAll('.e-loop-item'), hasResults = loopItems.length > 0; this.updateAriaExpanded(hasResults); return { resultContentNode, paginationNode }; } updateAriaExpanded(expanded) { this.elements.searchField.setAttribute('aria-expanded', expanded ? 'true' : 'false'); } updateAriaLabel(searchTerms) { if (searchTerms) { this.elements.resultsContainer.setAttribute('aria-label', `Results for ${searchTerms}`); } else { this.elements.resultsContainer.removeAttribute('aria-label'); } } clearResultsMarkup() { this.elements.results.innerHTML = ''; this.updateAriaExpanded(false); } getFetchArgumentsForSearchUpdate() { const data = this.prepareSearchUpdateRequestData(); const args = { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }; if (elementorFrontend.isEditMode() && !!elementorPro.config.eSearch?.nonce) { args.headers['X-WP-Nonce'] = elementorPro.config.eSearch?.nonce; } return args; } prepareSearchUpdateRequestData() { const widgetId = '' + this.getID(), data = { post_id: this.getClosestDataElementorId(this.$element[0]), widget_id: widgetId, search_term: this.elements.searchField.value || '', page_number: this.page_number }; if (elementorFrontend.isEditMode()) { // In the editor, we have to support Search widgets that have been created but not saved to the database yet. const widgetContainer = window.top.$e.components.get('document').utils.findContainerById(widgetId); data.widget_model = widgetContainer.model.toJSON({ remove: ['default', 'editSettings', 'defaultEditSettings'] }); data.is_edit_mode = true; } return data; } getClosestDataElementorId(element) { const closestParent = element.closest('[data-elementor-id]'); return closestParent ? closestParent.getAttribute('data-elementor-id') : 0; } debounce(callback, timeout = 300) { return (...args) => { clearTimeout(this.debounceTimeoutId); this.debounceTimeoutId = setTimeout(() => callback.apply(this, args), timeout); }; } updateInputStyle(iconSlugs = ['searchIcon', 'clearIcon']) { const cssVariableNamesMap = { searchIcon: 'icon-label', clearIcon: 'icon-clear' }, widgetStyle = this.$element[0].style, hiddenRoots = this.getAllDisplayNoneParents(this.$element[0].parentNode); this.setElementsDisplay(hiddenRoots, 'block'); for (const iconSlug of iconSlugs) { const { width } = this.elements[iconSlug]?.getBoundingClientRect() || { width: 0 }, cssVariableSlug = cssVariableNamesMap[iconSlug]; widgetStyle.setProperty(`--e-search-${cssVariableSlug}-absolute-width`, width + 'px'); this.elements.searchField.classList[width ? 'remove' : 'add'](`no-${cssVariableSlug}`); } this.setElementsDisplay(hiddenRoots, ''); this.elements.searchWrapper.classList.remove('hidden'); } /** * Sets the clear icon visibility. * @param { boolean } shouldHide true to hide or false to show. * @return { void } the width. */ changeClearIconVisibility(shouldHide) { this.elements.clearIcon?.classList[shouldHide ? 'add' : 'remove']('hidden'); } toggleSearchResultsVisibility(event) { const selectors = this.getSettings('selectors'), widgetWrapper = `.elementor-element-${this.getID()}`, { target } = event, isTargetPartOfResults = !!target?.closest(`${widgetWrapper} ${selectors.resultsContainer}`) || target?.classList?.contains(selectors.resultsContainer) && !!target?.closest(widgetWrapper), isSearchContainerClicked = !!target?.closest(`${widgetWrapper} ${selectors.searchWrapper}`), isSearchInputClicked = target?.classList?.contains(selectors.searchField.replace('.', '')), isSearchResultsPresent = this.elements.resultsContainer?.children?.length; if (isTargetPartOfResults) { this.hideOtherResults(); } if (!isSearchResultsPresent || isTargetPartOfResults) { return; } if (!isSearchInputClicked || !isSearchContainerClicked) { this.elements.resultsContainer.classList.add('hidden'); } } getAllDisplayNoneParents(elementNode, foundElements = []) { if (!elementNode || elementNode === document.body) { return foundElements; } const style = window.getComputedStyle(elementNode), isNotDisplayed = 'none' === style.display; if (isNotDisplayed) { foundElements.push(elementNode); } return this.getAllDisplayNoneParents(elementNode.parentNode, foundElements); } setElementsDisplay(elements, displayValue) { elements.forEach(element => { element.style.display = displayValue; }); } onElementChange(propertyName) { const propertyNameCallbackMap = { search_field_icon_label_size: () => this.updateInputStyle(['searchIcon']), icon_clear_size: () => this.updateInputStyle(['clearIcon']) }; if (propertyNameCallbackMap[propertyName]) { propertyNameCallbackMap[propertyName](); } } } exports["default"] = Search; /***/ } }]); //# sourceMappingURL=search.eb99cbb2b336e50a443a.bundle.js.map/** * Frontend hardcoded overrides for theme compatibility. */ .sfb-anchor { position: fixed !important; left: 0 !important; top: 0 !important; width: 0 !important; height: 0 !important; overflow: hidden !important; pointer-events: none !important; z-index: -9999 !important; margin: 0 !important; padding: 0 !important; border: 0 !important; } .sfb-anchor .sfb-block { pointer-events: none !important; } .sfb-block { display: block !important; box-sizing: border-box !important; } .sfb-block__inner { display: block !important; box-sizing: border-box !important; } .sfb-block__inner p { margin: 0 0 0.5em !important; } .sfb-block__inner p:last-child { margin-bottom: 0 !important; } .sfb-block--visible.sfb-block--top_left, .sfb-block--visible.sfb-block--top_right, .sfb-block--visible.sfb-block--bottom_left, .sfb-block--visible.sfb-block--bottom_right { max-width: 320px !important; } .sfb-block--offset .sfb-block__inner, .sfb-block--clip .sfb-block__inner { display: block !important; } Ijesha Digital Hub – Innovation for the development of Ijeshaland

Ijesaland's Home for

Innovation,

Technology, & Opportunity.

Ijesha Digital Hub connects students, schools, businesses, and community leaders to technology, skills, and economic opportunity. Whether you want to learn, compete, invest, or grow your place in this ecosystem starts here.

Our Impact Across Ijesaland

Students Trained
0 +
Schools Reached
0 +
Cohorts Completed
0 +
Businesses Listed
0 +
Sponsors & Partners
0 +
Scholar Success Rate
0 %

“Every number represents a real person, a real school, or a real business that decided Ijesaland’s future is worth investing in. We are just getting started.”

Our Ecosystem

One Ecosystem. Six Ways to Get Involved.

IDH is not just a programme. It is a complete ecosystem connecting students, schools,
businesses, sponsors, and professionals to opportunity across Ijesaland. Find your
entry point.

Build Skills. Win Scholarships. Launch Your Future.

Free technology and innovation training for talented young people across Ijesaland. No prior experience required. Just ambition.

Put Your School on the Innovation Map.

The annual school competition that rewards creativity, problem-solving, and technology. Open to all secondary schools across Ijesaland.

Where Ijesaland's Innovation Community Gathers.

An annual conference connecting technology leaders, entrepreneurs, educators, and changemakers. Network. Learn. Shape the future.

Your Generosity Changes Everything.

One sponsor. One child. One transformed future. Your contribution funds access to skills, mentorship, and opportunity for a young person who has everything to offer.

Give Back. Stay Connected. Lead the Change.

Join the Ijesha Global Alliance for Development. IGAD connects diaspora professionals, community leaders, and local changemakers to drive sustainable development in Ijesaland.

Grow Your Business Where Your Community Is Looking.

The most complete directory of businesses across Ijesaland. Get found by customers, partners, and investors actively searching for what you offer.

Teens Innovation Lab

The Teens Innovation Lab is a program designed to equip young people across Ijesaland with technology skills, design thinking, entrepreneurship, and the confidence to build what does not yet exist.

1,00+

Students Reached

12 Weeks

Program Duration

Ijesa Tech Prize

The Ijesa Tech Prize is the annual school innovation competition that puts student creativity, problem-solving, and technology skills on a regional stage. Any school in Ijesaland can enter. Every student benefits from the experience.

#1,000,000

In Prizes

200+ School

Participants

Ijesa Tech Conference

The Biggest Conversation About
Ijesaland's Future Happens Here.

The annual Ijesa Tech Conference brings together innovators, entrepreneurs, educators,
policymakers, and community leaders to share ideas, forge partnerships, and
accelerate the digital development of Ijesaland.

Ijesa Tech Conference

The Future of Youth Innovation in Africa

July 17, 2026

A day of Innovation

Royal Park Hotel

Opposite Olashore International School, Iloko Ijesa

500+ Attendees Expected

Students, educators, and industry leaders

Trusted and Supported By

IDH does not operate alone. Our ecosystem is powered by the organisations, institutions, and individuals who believe in Ijesaland’s potential and invest in making it real.

Is your organisation not yet part of the IDH ecosystem?

We are actively seeking corporate sponsors, technology partners, educational institutions, and NGOs committed to Ijesaland’s development.

Ijesaland Business Directory

Find and Be Found Across Ijesaland.

The IDH Business Directory is the most complete listing of businesses, services, and professionals operating across Ijesaland. Whether you are looking for a supplier, a service, or a partner — or you want your business to be the one customers find first — you are in the right place.

Construction &
Real Estate

50+ Businesses

Healthcare & Wellness

50+ Businesses

Food &
Dining

50+ Businesses

Hotels &
Motels

50+ Businesses

List Your Business

Join 500+ Ijesa businesses connecting with customers and growing their reach

Scroll to Top