=== FormNX – Embed Forms, Surveys & Quizzes ===
Contributors: formnx
Tags: forms, form builder, contact form, surveys, elementor
Requires at least: 6.2
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Embed your FormNX forms, surveys and quizzes in WordPress — Gutenberg block, shortcode or Elementor widget. Inline with auto-height, or as a popup.

== Description ==

[FormNX](https://formnx.com) is a no-code form builder for forms, surveys, quizzes and order forms. This plugin lets you put any FormNX form on your WordPress site in seconds — no HTML snippets to paste.

= FormNX features at a glance =

FormNX is a full no-code form builder — this plugin brings everything it can do onto your WordPress site.

* **40 field types & layout blocks** — short & long text, email, phone, website, full name, address, dropdown, radio, checkbox, toggle, star rating, NPS / scale rating, range slider, input table (matrix), date & time, color picker, file & image upload, e-signature, camera photo capture, voice recorder, calculation fields, terms & GDPR consent, headings, rich text, HTML, image, YouTube, iframe, PDF embed, countdown, page break, and more.
* **One-page & multi-page forms** — page breaks, optional progress bar, welcome and thank-you pages (message or redirect, with QR code / barcode of the submission reference number).
* **Conditional logic** — show or hide fields and blocks based on previous answers.
* **Spam protection, built in** — Google reCAPTCHA with one-click enable (no API keys to configure), an always-on invisible honeypot, disposable-email blocking, duplicate submission check (by IP or by any field), and email OTP verification.
* **Never lose a response** — partial submission capture records what respondents typed even if they abandon the form, and Save as Draft lets them resume later via an emailed link.
* **Quizzes & timed forms** — quiz mode with per-question points, automatic scoring, immediate or manual grade release, question randomization and random subsets — plus a form timer.
* **42 languages** — including RTL support for Arabic, Hebrew and Farsi.
* **Payments & calculations** — collect payments via Stripe, PayPal or Razorpay; compute totals with calculation fields.
* **Scheduling & access control** — open/close dates with timezone, response limits, password-protected forms.
* **PDF builder** — turn submissions into designed PDFs and attach them to notification emails.
* **Notifications** — admin emails with CC/BCC, dynamic field tags and PDF attachments, plus an autoresponder to the respondent.
* **Integrations** — Google Sheets, Mailchimp, Slack, Discord, webhooks, Zapier and Make.
* **And more** — 1,000+ templates, AI form generation from a prompt, white-label branding removal, custom CSS/JS.

**Ways to embed**

* **Gutenberg block** — search for "FormNX", paste your form link, and see a live preview right in the editor. The block toolbar has a *Change URL* button to swap forms, and the block supports wide/full alignment.
* **Shortcode** — `[formnx url="https://fill.formnx.com/f/your-form"]` works in the Classic Editor and in any page builder with a shortcode or text element (Divi, WPBakery, Beaver Builder…).
* **Elementor widget** — a native "FormNX Form" widget when Elementor is active, with the same inline/popup and height controls.

**Inline embeds**

* **Auto-height (default)** — the embed continuously resizes itself to the form's content, so there are never scrollbars or cut-off fields, even when conditional logic shows and hides questions mid-fill.
* **Fixed height** — set an exact pixel height instead; this mode loads zero JavaScript.

**Popup embeds**

Open the form in a centered modal instead of inline. Triggers can be combined:

* **Button** — a customizable button (your own text) that visitors click.
* **Time delay** — opens automatically N seconds after the page loads.
* **Scroll depth** — opens when the visitor has scrolled a percentage of the page.
* **Exit intent** — opens when the cursor moves to leave the page.

Extras: near-fullscreen mode, optional hidden close button, Esc / overlay-click to dismiss, page scroll locked while open. Automatic triggers fire at most once per page view.

**Shortcode reference**

* `[formnx url="…"]` — inline, auto-height
* `[formnx url="…" height="900"]` — inline, fixed 900px
* `[formnx url="…" type="popup" text="Contact us"]` — popup button
* `[formnx url="…" type="popup" trigger="button,exit" delay="4" scroll="60" fullscreen="true" close="false"]` — combined triggers with all options

**More reasons you'll like it**

* Post-submit redirects set up in FormNX work correctly from inside the embed.
* Plays nicely with lazy-loading and caching plugins (Smush, LiteSpeed, WP Rocket).
* Loads its scripts only on pages that actually contain a form.
* Nothing is tracked and no data is collected by the plugin itself.

You need a FormNX account to create forms — the [free plan](https://formnx.com) is enough to get started.

== Source Code & Build Tools ==

The complete, human-readable source code of this plugin is publicly available at:
https://github.com/FormNX/wordpress-form-builder

* `build/block/index.js` (the compiled Gutenberg editor script) is built from the uncompiled source in the repository's `src/block/` directory (`edit.js`, `index.js`, `block.json`, `editor.scss`) using the standard **@wordpress/scripts** (webpack) toolchain. To rebuild: `npm install && npm run build`. Full build documentation lives in the repository's `DEVELOPMENT.md`.
* `assets/js/formnx-widget.js` and `assets/js/formnx-popup.js` are first-party, unminified, human-readable scripts (also in the repository).
* **Bundled third-party library:** `assets/js/iframe-resizer.parent.js` is iframe-resizer v5.5.9 (parent-window script) by David J. Bradshaw, licensed GPLv3 — source repository: https://github.com/davidjbradshaw/iframe-resizer

== External Services ==

This plugin embeds forms hosted by the FormNX service.

* When a page containing an embed is viewed, the visitor's browser loads the form in an iframe from formnx.com / fill.formnx.com. As with any embedded content, FormNX receives the standard browser request data (IP address, user agent, and the embedding page's address as referrer).
* When a visitor submits an embedded form, the submission is sent to and stored by FormNX — not in your WordPress database.
* The plugin itself sends no data to FormNX from your server and stores nothing about your visitors.

FormNX is operated by FormNX. [Terms of Service](https://formnx.com/terms) · [Privacy Policy](https://formnx.com/privacy)

== Installation ==

1. Install and activate the plugin.
2. In FormNX, open your form's **Publish** tab and copy the form **Link**.
3. Add the **FormNX Form** block (or the shortcode / Elementor widget) to a page and paste the link.

== Frequently Asked Questions ==

= Do I need a FormNX account? =

Yes — forms are created at [formnx.com](https://formnx.com). The free plan is enough to create and embed forms.

= My embedded form shows "Not Found" (404) =

If the form uses FormNX's **Authorized URLs** setting, your WordPress site's domain must be added to the form's authorized list (Form Settings → More Settings in FormNX).

= Are submissions stored in WordPress? =

No. Submissions go straight to your FormNX account, where you can view, export, and integrate them.

= Can I open the form as a popup? =

Yes — set the block's embed type to **Popup**. It can open from a button click, automatically after a delay, at a scroll depth, or on exit intent.

= Does it work with Elementor / Divi / WPBakery? =

Elementor gets a native widget. Every other builder works through the `[formnx]` shortcode.

== Screenshots ==

1. FormNX Form block with live preview and embed options in the editor
2. Inline embed on the front end
3. Popup embed opened from a button
4. Popup trigger options in the block sidebar
5. FormNX Form widget in Elementor

== Changelog ==

= 1.0.0 =
* Initial release: Gutenberg block, [formnx] shortcode, Elementor widget, inline auto-height / fixed-height embeds, popup with button, delay, scroll and exit-intent triggers.

== Upgrade Notice ==

= 1.0.0 =
Initial release.
