(function () {
try {
// AQ-r2 (2026-06-09): respect the explicit-denial sentinel
// written by cookie-consent-harden.js writeATR() on any
// marketing-axis denial (payload.marketing === false; cycle-3 F1).
// Without this gate, the next page navigation re-creates
// gmx_first_touch from the current URL+referrer+utm_*+click_ids,
// silently undoing the reject-all deletion (sweep finding #1).
// The sentinel is cleared the moment the visitor grants
// marketing in the banner (analytics-only grant does NOT
// clear), restoring the writer path on the very next
// page load. Page-cache-safe: the sentinel is a
// browser-resident cookie checked in the inline script, so
// varnish/breeze-served HTML still hits this gate.
if (/(?:^|;\s*)gmx_consent_denied=1(?:;|$)/.test(document.cookie || '')) return;
var CLICK_IDS = ['gclid','fbclid','msclkid','ttclid','wbraid','gbraid','li_fat_id'];
var qs = new URLSearchParams(window.location.search);
var urlClickIdKey = null;
for (var i = 0; i < CLICK_IDS.length; i++) {
if (qs.get(CLICK_IDS[i])) { urlClickIdKey = CLICK_IDS[i]; break; }
}// Parse existing cookie.
var existing = null;
var match = document.cookie.match(/(?:^|;\s*)gmx_first_touch=([^;]+)/);
if (match) {
try { existing = JSON.parse(decodeURIComponent(match[1])); } catch (e) { existing = null; }
}// GWP-273 — referrer-enrichment branch.
// Keep existing unless either (a) URL carries a new click id
// the stored payload lacks (paid click is a higher-value
// signal and upgrades direct/organic), OR (b) the stored
// payload has empty referrer AND the current document.referrer
// is non-empty + external (Safari/ITP/policy-quirk catch:
// first-hit may have missed the referrer; later same-session
// page-loads can recover it).
var existingHasRef = !!(existing && existing.referrer && existing.referrer !== '');
var docRef = document.referrer || '';
var refHost = '';
if (docRef) {
try {
refHost = new URL(docRef).hostname.replace(/^www\./, '').toLowerCase();
} catch (e) { refHost = ''; }
}
var ownHost = (location.host || '').replace(/^www\./, '').toLowerCase();
var currentExternalRef = !!(refHost && refHost !== ownHost);
var canEnrichRef = !!existing && !existingHasRef && currentExternalRef;if (existing) {
if (!urlClickIdKey && !canEnrichRef) return;
if (urlClickIdKey && existing[urlClickIdKey] && !canEnrichRef) return;
}var utm_keys = [
'utm_source','utm_medium','utm_campaign','utm_content','utm_term',
'utm_adgroup','utm_matchtype','utm_network','utm_device','utm_placement'
];
// GWP-273 — merge-preserving base. When enriching an existing
// payload, retain its landing_url + ts + prior click ids /
// utms; only overlay referrer (and any click id appended below
// via the forEach). Branches with/without urlClickIdKey were
// collapsed — both produced the identical Object.assign — the
// click id is added uniformly later.
//
// GWP-273 design choice: "latest external referrer wins" —
// accepted edge case where a user opens a new external tab
// post-empty-first-touch and returns; low-volume, simple, no
// sentinel flag needed.
var data;
if (existing && canEnrichRef) {
data = Object.assign({}, existing, { referrer: docRef });
} else {
data = { landing_url: window.location.href, referrer: docRef, ts: Date.now() };
}
utm_keys.concat(CLICK_IDS).forEach(function (k) {
var v = qs.get(k);
if (v) data[k] = v;
});
var encoded = encodeURIComponent(JSON.stringify(data));
if (encoded.length > 3800) return;
var expires = new Date(Date.now() + 90 * 864e5).toUTCString(); // GWP-143 C1: match Google Ads 90-day attribution window
var secure = window.location.protocol === 'https:' ? '; Secure' : '';
document.cookie = 'gmx_first_touch=' + encoded + '; Path=/; Expires=' + expires + '; SameSite=Lax' + secure;
} catch (e) {}
})();
var breeze_prefetch = {"local_url":"https://gomixapp.com","ignore_remote_prefetch":"1","ignore_list":["/cart/","/checkout/","/my-account/","https://gomixapp.co.il/(.)/u05d4u05d8u05d5u05e4u05e1-u05e0u05e9u05dcu05d7-u05d1u05d4u05e6u05dcu05d7u05d4/","wp-admin","wp-login.php"]};
//# sourceURL=breeze-prefetch-js-extra
Interactive Stands for Exhibitions and Conferences
GoMixApp interactive information stands for conferences and exhibitions turn every booth into the center of attention at the event. Our solutions include interactive touchscreens, digital games, and 3D catalogs — so visitors remember you long after the conference ends. More than 300 companies have already chosen our digital solution for conferences and exhibitions to attract crowds, strengthen the brand, and generate real business connections.
Need a interactive presentation? For more details fill in your details and we will get back to you shortly.
Advantages
Compatibility With All Devices
Professional touchscreens, floor-standing or tabletop. Support for all operating systems (Windows, iOS, Android and Web)
Benefits Of Interactive Information Stands For Conferences And Exhibitions
We use advanced encryption for data transfer and provide real-time monitoring and alert capabilities. All this ensures your information is protected from unauthorized access and enables secure management with peace of mind
Stunning And Professional Design
A variety of design templates and full customization of design and content available. In addition, an advanced content editor enables easy creation of professional and impressive digital signage.
Drop & Drag Content Editor
Our content editor offers a variety of built-in modules, such as weather, news, date and time, images, videos and messages. Indeed, they enable the creation of interactive content with easy management and a professional user experience.
ISO 27001 Information Security Standard
Our platform meets the ISO standard, ensuring information management at the highest standards. Moreover, the standard includes strict security procedures for information management, access control, and protection from potential threats. Therefore, we optimally protect your information.
Receive Updates
We send alerts about screen activity disconnections directly to your email. Indeed, this enables a quick response and immediate fix, thereby improving signage availability and minimizing downtime.
Key points when choosing interactive information stands for conferences and exhibitions
Interactive information stands for conferences, exhibitions and events
Touchscreen with interactive content: surveys, trivia and forms
Design tailored to the brand and the specific event
Real-time lead and data collection
Installation and technical support at the event venue
Interactive Displays At Conferences In Israel And Worldwide
Experiential marketing is the most effective way to strengthen a brand at a conference — and our solution activates all the senses. A high-resolution LED screen displays the product spectacularly, the audience operates an interactive demo through direct touch and feels a real connection to the brand. According to the interactive stand standards of the Kiosk Industry Association, visitors spend three times more time at booths with interactive content. Interactive stands for businesses with an intuitive and friendly user interface turn every booth into an unforgettable experience — not just another one among hundreds of exhibitors.
Interactive Displays At Conferences In Israel And Worldwide
Touchscreens For Conferences In Multiple Sizes
[H3] Screen Types
Floor Touchscreens As Interactive Solutions For Conferences And Exhibitions
Touch Tables For Exhibition Registration Stations
Interactive Displays At Conferences In Israel And Worldwide
Personalized Posters Application
The posters application allows every participant to create a personal poster with their photo and professional details directly from the station — in a simple and fast interface. The participant enters details, takes a photo, and drags information into the template; then prints on the spot or sends it to a follow-up meeting with a representative. The solution is especially suitable for B2B companies in pharma, defense, and industry — and leads to an ongoing relationship with every customer. Want to tailor the solution to your industry? Talk to us.
Want to upgrade the customer experience at your next conference? Contact us now and we will tailor the precise solution for you.
Matching Game Kiosk For Interactive Stations At Business Exhibitions
The matching kiosk allows participants to connect questions to the correct answers via an easy and accessible touch interface, conveying marketing messages experientially. A leaderboard screen displays the score ranking between participants — turning the booth into an exciting competitive arena where the message is engraved in memory. Interactive stations for business exhibitions of this type increase the booth dwell time by 200% on average. For more details, visit interactive game station for conferences.
Trivia Game Kiosk For Conference Registration Stations
An interactive trivia kiosk on a touchscreen brings a challenging and exciting knowledge experience to the conference. Participants answer questions integrated with your marketing messages — so learning happens while having fun. A leaderboard ranks participants by score and adds a competitive dimension, and prizes for winners ensure high participation. Exhibition registration stations with a gaming component increase lead collection by 40% compared to standard stations.
Trivia Game Kiosk
A bubble-popping trivia game brings a unique experience to your conference. Participants face challenging questions and pop bubbles with the correct answers. Every correct bubble advances them in the game. Popping a wrong bubble displays a relevant explanation, so learning continues even from mistakes. The game adds an experiential and visual layer to standard trivia. In addition, a leaderboard ranks participants by score and encourages healthy competition.
3D Product Catalog
An experiential catalog with 3D display offers an interactive solution that makes the booth stand out at conferences and exhibitions. Visitors examine products from every angle, rotate them, zoom in on details and create direct interaction — an experience that printed catalog displays cannot offer. The solution supports multiple languages and enables accessible access for the entire audience.
Roulette Trivia Kiosk
A roulette trivia station combines learning and enjoyment at company conferences, product launch events and commercial exhibitions. Participants spin the roulette, draw a trivia question about your products and services, and answer with full engagement. The more they answer correctly — the greater the chance to win a prize. The solution strengthens the brand, conveys key messages and creates an exciting competitive element that brings visitors back to the booth.
Our range of interactive stations is the perfect solution for making your booth stand out at every conference and exhibition. Instead of a passive display, visitors enjoy engaging digital experiences and create direct interaction with your content world. As a result, engagement rises, the impression lasts over time, and your brand stands out above all competitors.
Customer Testimonials
Pinchas
HOA, Ramla
Service:
★★★★★
Product:
★★★★★
Recommendation:
★★★★★
“With the holiday videos you simply nailed it – the tenants were really excited!”
Mor
Academic Institution
Service:
★★★★★
Product:
★★★★★
Recommendation:
★★★★★
“The digital bulletin board looks amazing, and everything works smoothly!”
Inbar Shmueli
Business Owner
Service:
★★★★★
Product:
★★★★★
Recommendation:
★★★★★
“Personal and professional service, fast response, excellent product, very satisfied”
Our interactive conference stations are the perfect solution for enhancing the visitor experience and increasing engagement at your conference or exhibition. Through customized design, interactive touchscreens and dynamic content, our stations not only provide information but also encourage participants to act and create meaningful interaction with your brand. The benefits include important real-time data collection, streamlining registration and management processes, and enhancing communication between participants. These interactive stations ensure a smooth and advanced experience that leaves a positive and lasting impression on participants.
What is an interactive information stand for conferences and exhibitions?
Interactive information stands for conferences and exhibitions are digital systems combining touchscreens, customized content, and experiential games for the exhibition booth. They replace static print materials with a dynamic experience that attracts visitors, conveys marketing messages, and collects leads in real time.
What is the difference between an interactive station for a business exhibition and a regular digital screen?
A regular digital screen displays one-way content — the visitor only watches. An interactive station for a business exhibition invites the visitor to touch, play, register, and leave details. As a result, dwell time at the booth grows threefold and the information is engraved in memory for a long time.
How do you turn an exhibition booth into an interactive one?
You turn a booth into an interactive one by integrating touchscreens, game kiosks (trivia, roulette, matching), 3D catalogs, and digital registration systems. GoMixApp provides all these solutions under one roof — from planning to on-site deployment.
What are the common types of interactive stations at exhibitions?
The most common types are: floor touchscreens, touch tables for registration stations, trivia and game kiosks, 3D product catalogs, and personal poster stations. Each one suits different marketing needs — you can combine several solutions in the same booth.
Can interactive conference stations be customized to my brand?
Yes, every station comes with full customization options for the brand identity — logo, colors, fonts, and content. Additionally, the platform supports multiple languages and meets accessibility standards, so every visitor can use it comfortably.
How much does an interactive exhibition station cost?
The cost depends on the type of solution, the duration of the event, and the level of customization required. GoMixApp offers flexible packages suitable for small booths up to enterprise companies. Fill out the contact form and receive a customized quote within 24 hours.
Comparison: Interactive Stations vs. Standard Exhibition Booth
Interactive Conference Stations — How Does The Process Work?
GoMixApp interactive conference stations arrive ready for action in three simple steps. They can be deployed at conferences and business meetings, in museums and visitor centers, and at registration and reception events — in any size and any setup.
Platform Selection — Choose a floor touchscreen, touch table, or pillar kiosk based on the booth size and event type.
Content Setup — Our team fully tailors the application, graphics, and your brand messages.
Deployment And Support — The station arrives installed, with technical support throughout the event and real-time data collection.
Data collection and visitor analytics capability lets you know exactly who visited, how long they stayed, and what content attracted them — information that improves every future conference. For details on digital signage standards see also the Digital Signage Federation.
Comparison Of Information Station Types For Conferences And Exhibitions
Criterion
Digital Interactive Station
Static Printed Station
Hybrid Station
Real-Time Content Update
✓Instant update with no print cost
✗Requires reprinting on every change
✓Partial update in the digital component
Engagement And Interaction With The Visitor
✓Touchscreen, videos and live forms
✗Passive viewing only
✓Limited interaction on screen
Mobile Device Compatibility
✓Full tablet and smartphone support
✗Not adapted to digital devices
✓Partial mobile support
Information Security
✓Compliant with ISO 27001 standard
✗No digital data to secure
✓Partial security in the digital interface
Independent Content Editing
✓Drag & Drop editor convenient and easy to operate
✗Requires a professional graphic designer
✓Limited independent editing
Operating Cost Over Time
Low – savings on printing and manpower
High – recurring print costs
Medium – only partial costs
In Summary: Turn Your Booth Into An Unforgettable Experience
Interactive stations for exhibitions and conferences are no longer a bonus — they are the new standard for every exhibitor who wants to stand out. We have seen how interactive solutions for conferences and exhibitions — from touchscreens to trivia and roulette kiosks — increase dwell time, deepen the visitor connection to the brand, and multiply the number of leads collected. It is important to remember that unlike printed materials, interactive stations for businesses provide you with real-time data on every interaction — so every future conference will be more effective than the previous one. Last update: January 2026.
Ready to upgrade your presence at the next conference? Contact us now and we will tailor a digital solution that delivers real results — before your competitors even buy their tickets.
document.addEventListener('click', function(e) {
var el = e.target.closest('.gmx-lite-yt');
if (!el) return;
var vid = el.getAttribute('data-vid');
if (!vid) return;
var iframe = document.createElement('iframe');
iframe.src = 'https://www.youtube.com/embed/' + vid + '?autoplay=1';
iframe.style.cssText = 'position:absolute;top:0;left:0;width:100%;height:100%;border:0;';
iframe.allow = 'autoplay;encrypted-media';
iframe.allowFullscreen = true;
el.style.position = 'relative';
el.innerHTML = '';
el.appendChild(iframe);
});
(function () {
var c = document.body.className;
c = c.replace(/woocommerce-no-js/, 'woocommerce-js');
document.body.className = c;
})();
var gmxCf7LegacyUxI18n = {"errName":"Please enter a full name","errPhone":"Please enter a valid phone number","errEmail":"Please enter a valid email address","errRequired":"Required field"};
//# sourceURL=gmx-cf7-legacy-ux-js-extra
var gmxCf7UxI18n = {"progressTemplate":"{N} field(s) remaining","allSet":"All set to send!","sending":"Sending\u2026","successTitle":"Thank you! Your inquiry has been received","successBody":"A representative will get back to you within 24 hours with a tailored quote.","successCtaLabel":"See our areas of expertise","successCtaHref":"/expertise/","errorTitle":"Submission failed","errorBody":"Please try again, or call us directly"};
//# sourceURL=gmx-cf7-ux-js-extra
var atrCookieNoticeSettings = {"cookieName":"atr_cookie_notice_consent","decisionCookieName":"atr_cookie_notice_consent_given","expiryDays":"365","autoHideDelay":"0","enableDebug":"","siteName":"GoMixApp","isPrivacyPage":"","privacyPolicyUrl":"https://gomixapp.com/privacy-policy/","privacyNoteText":"\ud83d\udca1 You can read this page while deciding about cookies","mode":"simple"};
//# sourceURL=atr-cookie-notice-simple-js-extra
(function(){
function cleanUrl(url) {
// Strip query params embedded mid-path: /ID?params/file -> /ID/file
return url.replace(/\?[^\/]+\//g, '/');
}
function addWebPFallback(pic) {
if (pic.getAttribute('data-webp-fb')) return;
pic.setAttribute('data-webp-fb', '1');
var img = pic.querySelector('img');
if (!img) return;
img.onerror = function() {
this.onerror = null;
this.src = cleanUrl(this.src).replace('vi_webp','vi').replace('.webp','.jpg');
var sources = this.parentElement.querySelectorAll('source');
for (var i = 0; i < sources.length; i++) {
sources[i].srcset = cleanUrl(sources[i].srcset).replace('vi_webp','vi').replace('.webp','.jpg');
}
};
}
var observer = new MutationObserver(function() {
var pics = document.querySelectorAll('.video-seo-youtube-picture');
for (var i = 0; i < pics.length; i++) addWebPFallback(pics[i]);
});
observer.observe(document.documentElement, { childList: true, subtree: true });
})();
(function(){
var siteKey = "6Ldnu_gsAAAAAGpkh7vCd_h3L9BA193yFU59I4Do";
var action = "submit_lead_form";
var loaderUrl = "https:\/\/www.google.com\/recaptcha\/enterprise.js?render=6Ldnu_gsAAAAAGpkh7vCd_h3L9BA193yFU59I4Do";
// GWP-506 (perf): the reCAPTCHA Enterprise runtime costs ~900ms of main-thread
// work (PSI contactus TBT 660ms, perf 69). It was loaded eagerly on every page
// carrying a CF7 form. It now loads on the FIRST real page interaction
// (scroll/pointer/key/touch) — warming the runtime well before the user can
// reach submit — and never loads on a no-interaction (lab) page view, so the
// perf win holds. The token is still stamped on form focusin and refreshed at
// submit. IMPORTANT: the server gate is fail-CLOSED by default (GWP-412
// require_token) — a missing token at submit is treated as spam — so the
// runtime MUST be warm before submit; that is exactly why the warm trigger is
// first-page-interaction, NOT focusin-only (focusin-only left a race where a
// fast focus→submit could POST before the ~900ms download finished and drop a
// legit lead). The eager <script src> is gone.
var greReady = false, greWaiters = [], greLoadStarted = false;
function pollGre(attempts) {
if (typeof grecaptcha !== 'undefined' && grecaptcha.enterprise) {
greReady = true;
var queued = greWaiters;
greWaiters = [];
queued.forEach(function (fn) { try { fn(); } catch (e) {} });
return;
}
if (attempts > 200) {
// no-silent-failures: enterprise.js never became ready (network-blocked,
// consent/privacy blocker, or a Google outage). Surface it — a missing
// token fails CLOSED server-side (GWP-412) and drops the lead.
if (window.console && console.warn) {
console.warn('[GMX recaptcha] enterprise.js not ready after ~10s; token will be missing (submit fails closed).');
}
return; // give up after ~10s (200 * 50ms)
}
setTimeout(function () { pollGre(attempts + 1); }, 50);
}
function loadGre() {
if (greLoadStarted) return;
greLoadStarted = true;
var s = document.createElement('script');
s.src = loaderUrl;
s.async = true;
document.head.appendChild(s);
pollGre(0); // begin polling only once the runtime is actually loading
}
function whenGreReady(cb) {
if (greReady) return cb();
greWaiters.push(cb);
}
function stampToken(form) {
if (!form.querySelector('.wpcf7-form-control-wrap input[type="submit"], .wpcf7-submit')) return;
loadGre(); // lazy: kick off enterprise.js on demand (idempotent)
whenGreReady(function () {
grecaptcha.enterprise.ready(function () {
grecaptcha.enterprise.execute(siteKey, { action: action }).then(function (token) {
var hidden = form.querySelector('input[name="gmx_recaptcha_token"]');
if (!hidden) {
hidden = document.createElement('input');
hidden.type = 'hidden';
hidden.name = 'gmx_recaptcha_token';
form.appendChild(hidden);
}
hidden.value = token;
}).catch(function () {
// no-silent-failures: token generation failed; the server gate is
// fail-CLOSED (GWP-412), so this submit will be rejected as spam.
if (window.console && console.warn) {
console.warn('[GMX recaptcha] token execute failed; submit will fail closed.');
}
});
});
});
}
document.addEventListener('wpcf7submit', function (e) { stampToken(e.target); });
// Also stamp on first focus into any CF7 form (so token ready before submit).
// `whenGreReady()` queues the stamp until grecaptcha loads, so the once-
// listener stays safe even if grecaptcha isn't ready at focus-in time.
document.querySelectorAll('form.wpcf7-form').forEach(function (form) {
form.addEventListener('focusin', function once() {
form.removeEventListener('focusin', once);
stampToken(form);
});
});
// GWP-506: warm enterprise.js on the FIRST real page interaction so the ~900ms
// runtime is ready before the user reaches submit (closes the focusin-only race
// against the fail-CLOSED server gate, and covers AJAX/popup-injected forms that
// missed the focusin binding above). Never fires on a no-interaction (lab) view,
// so the perf win holds. Idempotent via loadGre()'s greLoadStarted guard.
var warmOpts = { passive: true, capture: true };
var warmEvents = ['pointerdown', 'keydown', 'touchstart', 'scroll'];
function warmGre() {
loadGre();
warmEvents.forEach(function (e) { window.removeEventListener(e, warmGre, warmOpts); });
}
warmEvents.forEach(function (e) { window.addEventListener(e, warmGre, warmOpts); });// GWP-507 (CONFIRMED LIVE: 19 real leads dropped in 8 days): capture-phase
// submit GATE. The warm/focusin logic above only *helps* the token be ready;
// it is NOT a guarantee. The race: a user whose FIRST interaction is clicking
// submit on an autofilled form (no prior scroll/field-touch to warm the
// ~900ms enterprise.js), or who submits before the runtime readies, serializes
// the AJAX POST with an EMPTY gmx_recaptcha_token → the fail-CLOSED server gate
// (GWP-412 require_token) drops the lead as spam. CF7's `wpcf7submit` fires
// AFTER the AJAX POST (too late), and CF7 exposes no documented pre-POST JS
// hook (verified: contactform7.com/dom-events). So the ONLY seam is to
// intercept the native DOM submit/click in CAPTURE phase, HOLD it until
// greReady + token stamped, then re-dispatch. grecaptcha token lifetime is
// 2 minutes, so holding briefly is safe.
//
// TIMEOUT-FALLBACK CHOICE (a): if enterprise.js never readies within the
// ~10s ceiling (network-blocked / consent-blocker / Google outage), we
// RE-ENABLE the button and let the submit proceed WITHOUT a token rather than
// hard-blocking the user. It will fail-CLOSED server-side (GWP-412), but the
// console.warn fires loudly (no-silent-failures) — we never trap a real user
// behind a spinner they can't escape.
var GATE_TIMEOUT_MS = 10000; // matches pollGre ceiling (200 * 50ms).
function gmxFormHasToken(form) {
var hidden = form.querySelector('input[name="gmx_recaptcha_token"]');
return !!(hidden && hidden.value);
}
function gmxSetVerifying(form, on) {
var btn = form.querySelector('.wpcf7-submit, input[type="submit"], button[type="submit"]');
if (!btn) return;
if (on) {
btn.disabled = true;
btn.setAttribute('data-gmx-verifying', '1');
} else {
btn.disabled = false;
btn.removeAttribute('data-gmx-verifying');
}
}
function gmxReleaseSubmit(form) {
// Mark released so the re-dispatched submit passes straight through the
// capture gate (no re-gate loop), re-enable UX, then re-trigger.
form.__gmxGateReleased = true;
gmxSetVerifying(form, false);
if (typeof form.requestSubmit === 'function') {
form.requestSubmit();
} else {
form.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true }));
}
// GWP-507 finding-1 (BLOCKER fix): reset the release flag on the NEXT tick
// so any FUTURE user submit (user edits a field + resubmits) is re-gated and
// stamps a FRESH token. reCAPTCHA tokens are single-use with a ~2-min
// lifetime — without this reset, __gmxGateReleased stayed true forever after
// the first release, letting a second submit bypass the gate and POST a
// stale/used token. The setTimeout(0) lets the synchronous re-dispatch above
// complete (which short-circuits on the still-true flag) before we re-arm.
setTimeout(function () { form.__gmxGateReleased = false; }, 0);
}
function gmxSubmitGate(e) {
var form = e.currentTarget;
if (form.tagName !== 'FORM') { form = form.form || form.closest('form.wpcf7-form'); }
if (!form) return;
// Idempotent: a programmatic re-submit we already released proceeds. This is
// the ONLY pass-through — it lets the freshly-stamped re-dispatch reach CF7.
// (The flag is reset on the next tick in gmxReleaseSubmit, so the NEXT user
// submit is re-gated.)
if (form.__gmxGateReleased) return;
// GWP-507 finding-2 (stale/used token fix): every USER submit HOLDS + stamps
// a FRESH token — we do NOT early-return on an already-present token. A token
// already sitting in the hidden input may be stale or already used (single-
// use, ~2-min lifetime); proceeding on it would POST a dead token. enterprise.js
// is warm by submit time, so grecaptcha.enterprise.execute() resolves in
// ~100-300ms — the per-submit hold is brief. stampToken() OVERWRITES the
// hidden input value (hidden.value = token), so no stale token lingers.
// HOLD: block CF7's submit handler before the AJAX POST.
e.preventDefault();
e.stopImmediatePropagation();
if (form.__gmxGateWaiting) return; // a click + submit may both fire; hold once.
form.__gmxGateWaiting = true;
loadGre(); // kick the warm if not started.
gmxSetVerifying(form, true);
var released = false;
function release(missing) {
if (released) return;
released = true;
form.__gmxGateWaiting = false;
if (missing && window.console && console.warn) {
console.warn('[GMX recaptcha] submit gate timed out (~10s); releasing without token (submit fails closed).');
}
gmxReleaseSubmit(form);
}
var timer = setTimeout(function () { release(true); }, GATE_TIMEOUT_MS);
whenGreReady(function () {
stampToken(form);
// stampToken resolves the token asynchronously (enterprise.execute
// promise); poll briefly for the stamp, then release. Bounded by the
// same overall timer above.
(function awaitStamp(n) {
if (released) return;
if (gmxFormHasToken(form)) { clearTimeout(timer); release(false); return; }
if (n > 200) { clearTimeout(timer); release(true); return; } // ~10s (200*50ms)
setTimeout(function () { awaitStamp(n + 1); }, 50);
})(0);
});
}
// GWP-507 finding-4 (CF7 phase): WHY capture phase works. Our gate listener is
// registered in CAPTURE phase (3rd arg `true`), so it runs BEFORE CF7's own
// bubble-phase 'submit' handler on the same form. When we call
// e.stopImmediatePropagation() in the capture listener, the DOM spec stops ALL
// further listeners for that event on the target — including the later
// bubble-phase CF7 handler — so CF7's AJAX POST never fires until we re-dispatch
// with a fresh token. This capture-phase interception is the only documented
// pre-POST seam: CF7 exposes no pre-POST JS hook (wpcf7submit fires AFTER the
// AJAX POST). See contactform7.com/dom-events.
document.querySelectorAll('form.wpcf7-form').forEach(function (form) {
form.addEventListener('submit', gmxSubmitGate, true);
var btn = form.querySelector('.wpcf7-submit, input[type="submit"], button[type="submit"]');
if (btn) { btn.addEventListener('click', gmxSubmitGate, true); }
});
})();
(function(){
var loaded = false;
function loadUserWay() {
if (loaded) return;
loaded = true;
var el = document.createElement('script');
el.setAttribute('data-account', "UX40fo0Ctw");
el.setAttribute('data-language', "en");
el.setAttribute('src', 'https://cdn.userway.org/widget.js');
document.body.appendChild(el);
events.forEach(function(e){ window.removeEventListener(e, loadUserWay, {passive: true}); });
}
var events = ['scroll', 'mousemove', 'touchstart', 'click', 'keydown'];
events.forEach(function(e){ window.addEventListener(e, loadUserWay, {passive: true}); });
})();