Plugin Directory

Changeset 3359717


Ignore:
Timestamp:
09/11/2025 09:21:39 AM (7 months ago)
Author:
hcaptcha
Message:

Update to version 4.17.0 from GitHub

Location:
hcaptcha-for-forms-and-more
Files:
22 added
112 edited
1 copied

Legend:

Unmodified
Added
Removed
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/css/general.css

    r3319903 r3359717  
    328328    grid-template-columns: repeat(2, 1fr);
    329329    grid-template-areas:
     330        "set-min-submit-time min-submit-time"
     331        "honeypot min-submit-time"
    330332        "antispam antispam-provider";
    331333    gap: 0 20px;
     
    333335}
    334336
     337.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-set-min-submit-time {
     338    grid-area: set-min-submit-time;
     339}
     340
     341.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-min-submit-time {
     342    grid-area: min-submit-time;
     343}
     344
     345.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-honeypot {
     346    grid-area: honeypot;
     347}
     348
    335349.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-antispam {
    336350    grid-area: antispam;
     351    padding-top: 15px;
    337352}
    338353
    339354.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-antispam-provider {
    340355    grid-area: antispam-provider;
     356    padding-top: 15px;
    341357}
    342358
     
    355371}
    356372
     373.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-min-submit-time td,
    357374.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-antispam-provider td {
    358375    width: auto;
     
    361378.hcaptcha-section-antispam + table tbody tr td input,
    362379.hcaptcha-section-antispam + table tbody tr td select {
     380    width: 100%;
     381}
     382
     383.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-honeypot th {
     384    padding: 0;
     385}
     386
     387.hcaptcha-section-antispam + table tbody tr td input {
    363388    width: 100%;
    364389}
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/css/general.min.css

    r3319903 r3359717  
    1 #hcaptcha-message,#setting-error-settings_updated{box-sizing:border-box;max-width:760px}.hcaptcha-loading:before{background:hsla(0,0%,100%,.8);content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:9999}.hcaptcha-loading:after{animation:hcaptcha-spin 1s linear infinite;border:4px solid #ccc;border-radius:50%;border-top-color:#5c6f8a;content:"";height:28px;left:calc(50% - 18px);position:absolute;top:calc(50% - 18px);width:28px;z-index:10000}@keyframes hcaptcha-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}#hcaptcha-options table tbody{background:#fff}#hcaptcha-options table tbody tr{align-self:start;display:grid}#hcaptcha-options table tbody tr th{color:#5c6f8a}#hcaptcha-options table tbody tr td{margin:0;padding:0;position:relative}#hcaptcha-options .h-captcha{margin-bottom:0}#hcaptcha-options.hcaptcha-general h3{background:#fff;box-sizing:border-box;color:#5c6f8a;cursor:pointer;display:flex;justify-content:space-between;margin:1.5em 0 0;max-width:760px;padding:15px 20px}#hcaptcha-options.hcaptcha-general h3.disabled{opacity:.6}.hcaptcha-section-header-toggle:after{content:"\f142";font:normal 20px dashicons;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h3.closed .hcaptcha-section-header-toggle:after{content:"\f140"}#hcaptcha-options.hcaptcha-general h3+table{margin-top:0;max-width:760px;position:relative}#hcaptcha-options.hcaptcha-general h3.disabled+table{opacity:.6}#hcaptcha-options.hcaptcha-general h3.closed+table{display:none}#hcaptcha-options.hcaptcha-general h3+table:before{border-bottom:1px solid #c3c4c7;content:"";margin:0 20px;max-width:720px;position:absolute;top:0;width:calc(100% - 40px)}.hcaptcha-section-keys+table tbody{display:grid;gap:10px 20px;grid-template-areas:"site-key site-key secret-key secret-key" "sample-hcaptcha sample-hcaptcha check-config reset-notifications";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-keys+table tbody th{width:auto}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-site-key{grid-area:site-key}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-secret-key{grid-area:secret-key}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-sample-hcaptcha{grid-area:sample-hcaptcha}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-check-config{grid-area:check-config}.hcaptcha-section-keys+table tbody tr.hcaptcha-reset-notifications{grid-area:reset-notifications}.hcaptcha-section-keys+table tbody tr th{padding:0 0 10px}.hcaptcha-section-keys+table tbody tr td input{width:100%}.hcaptcha-section-appearance+table tbody{display:grid;gap:10px 20px;grid-template-areas:"theme size language mode" "force force position position";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-theme{grid-area:theme}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-size{grid-area:size}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-language{grid-area:language}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-mode{grid-area:mode}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-force{grid-area:force}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-menu-position{grid-area:position}.hcaptcha-section-appearance+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-force td,.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-menu-position td{width:max-content}.hcaptcha-section-appearance+table tbody tr td select{width:100%}.hcaptcha-section-custom+table tbody{display:grid;gap:10px 20px;grid-template-areas:"custom-themes custom-themes config-params config-params" "custom-prop custom-value config-params config-params";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-themes{grid-area:custom-themes}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-config-params{grid-area:config-params}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-prop{grid-area:custom-prop}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-value{grid-area:custom-value}.hcaptcha-section-custom+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-themes td{width:max-content}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-config-params td{width:auto}.hcaptcha-section-custom+table tbody tr td select,.hcaptcha-section-custom+table tbody tr td textarea{width:100%}.hcaptcha-section-custom+table tbody tr td select option:disabled{background:#f0f0f1;color:#2c3338}.hcaptcha-section-custom+table tbody tr td input{height:30px;width:100%}.hcaptcha-section-enterprise+table tbody{display:grid;gap:10px 20px;grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-enterprise+table tbody th{width:auto}.hcaptcha-section-enterprise+table tbody tr th{padding:0 0 10px}.hcaptcha-section-enterprise+table tbody tr td input{width:100%}.hcaptcha-section-content+table tbody{display:grid;gap:0 20px;grid-template-areas:"content protected-urls";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-content+table tbody tr.hcaptcha-general-content{grid-area:content}.hcaptcha-section-content+table tbody tr.hcaptcha-general-protected-urls{grid-area:protected-urls}.hcaptcha-section-content+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-content+table tbody tr td{width:max-content}.hcaptcha-section-content+table tbody tr.hcaptcha-general-protected-urls td{width:auto}.hcaptcha-section-content+table tbody tr td input,.hcaptcha-section-content+table tbody tr td textarea{width:100%}.hcaptcha-section-antispam+table tbody{display:grid;gap:0 20px;grid-template-areas:"antispam antispam-provider";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam{grid-area:antispam}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider{grid-area:antispam-provider}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider div{color:#d63638;margin-top:.5em}.hcaptcha-section-antispam+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-antispam+table tbody tr td{width:max-content}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider td{width:auto}.hcaptcha-section-antispam+table tbody tr td input,.hcaptcha-section-antispam+table tbody tr td select{width:100%}.hcaptcha-section-other+table tbody{display:grid;gap:0 20px;grid-template-areas:"blacklisted whitelisted" "logged recaptcha" "hide-login-errors cleanup-on-uninstall" "network ." "login-limit login-interval" "delay .";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in{grid-area:logged}.hcaptcha-section-other+table tbody tr.hcaptcha-general-recaptcha-compat-off{grid-area:recaptcha}.hcaptcha-section-other+table tbody tr.hcaptcha-general-hide-login-errors{grid-area:hide-login-errors}.hcaptcha-section-other+table tbody tr.hcaptcha-general-cleanup-on-uninstall{grid-area:cleanup-on-uninstall}.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-limit{grid-area:login-limit;padding-top:15px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-interval{grid-area:login-interval;padding-top:15px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips{grid-area:whitelisted}.hcaptcha-section-other+table tbody tr.hcaptcha-general--network-wide{grid-area:network}.hcaptcha-section-other+table tbody tr.hcaptcha-general-delay{grid-area:delay;padding-top:15px}.hcaptcha-section-other+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-other+table tbody tr.hcaptcha-general--network-wide th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-cleanup-on-uninstall th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-hide-login-errors th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-recaptcha-compat-off th{padding:0}.hcaptcha-section-other+table tbody tr td{width:max-content}.hcaptcha-section-other+table tbody tr.hcaptcha-general-blacklisted-ips td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-delay td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-interval td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-limit td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips td{width:auto}.hcaptcha-section-other+table tbody tr td input,.hcaptcha-section-other+table tbody tr td textarea{width:100%}.hcaptcha-section-statistics+table tbody{display:grid;gap:0 20px;grid-template-areas:"statistics collect-ip" "anonymous collect-ua";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-statistics{grid-area:statistics}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-anonymous{grid-area:anonymous}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ip{grid-area:collect-ip}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ua{grid-area:collect-ua}.hcaptcha-section-statistics+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-anonymous th,.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ua th{padding:0}.hcaptcha-section-statistics+table tbody tr td{width:max-content}@media (max-width:600px){.hcaptcha-section-keys+table tbody{grid-template-areas:"site-key site-key" "secret-key secret-key" "sample-hcaptcha sample-hcaptcha" "check-config reset-notifications";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-appearance+table tbody{grid-template-areas:"theme size" "language mode" "force force" "position position";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-appearance+table tbody tr td{width:unset!important}.hcaptcha-section-custom+table tbody{grid-template-areas:"custom-themes custom-themes" "custom-prop custom-value" "config-params config-params";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-custom+table tbody tr td{width:unset!important}.hcaptcha-section-enterprise+table tbody{grid-template-columns:repeat(1,1fr)!important}.hcaptcha-section-enterprise+table tbody tr td{width:unset!important}.hcaptcha-section-content+table tbody{grid-template-areas:"content" "protected-urls";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-content+table tbody tr td{width:unset!important}.hcaptcha-section-antispam+table tbody{grid-template-areas:"antispam" "antispam-provider";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-antispam+table tbody tr td{width:unset!important}.hcaptcha-section-other+table tbody{grid-template-areas:"blacklisted" "whitelisted" "logged" "recaptcha" "hide-login-errors" "cleanup-on-uninstall" "network" "login-limit" "login-interval" "delay";grid-template-columns:repeat(1,1fr)!important}.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in,.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips{padding-top:10px}.hcaptcha-section-other+table tbody tr td{width:unset!important}.hcaptcha-section-statistics+table tbody{grid-template-areas:"statistics" "anonymous" "collect-ip" "collect-ua";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-statistics+table tbody tr td{width:unset!important}}
     1#hcaptcha-message,#setting-error-settings_updated{box-sizing:border-box;max-width:760px}.hcaptcha-loading:before{background:hsla(0,0%,100%,.8);content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:9999}.hcaptcha-loading:after{animation:hcaptcha-spin 1s linear infinite;border:4px solid #ccc;border-radius:50%;border-top-color:#5c6f8a;content:"";height:28px;left:calc(50% - 18px);position:absolute;top:calc(50% - 18px);width:28px;z-index:10000}@keyframes hcaptcha-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}#hcaptcha-options table tbody{background:#fff}#hcaptcha-options table tbody tr{align-self:start;display:grid}#hcaptcha-options table tbody tr th{color:#5c6f8a}#hcaptcha-options table tbody tr td{margin:0;padding:0;position:relative}#hcaptcha-options .h-captcha{margin-bottom:0}#hcaptcha-options.hcaptcha-general h3{background:#fff;box-sizing:border-box;color:#5c6f8a;cursor:pointer;display:flex;justify-content:space-between;margin:1.5em 0 0;max-width:760px;padding:15px 20px}#hcaptcha-options.hcaptcha-general h3.disabled{opacity:.6}.hcaptcha-section-header-toggle:after{content:"\f142";font:normal 20px dashicons;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h3.closed .hcaptcha-section-header-toggle:after{content:"\f140"}#hcaptcha-options.hcaptcha-general h3+table{margin-top:0;max-width:760px;position:relative}#hcaptcha-options.hcaptcha-general h3.disabled+table{opacity:.6}#hcaptcha-options.hcaptcha-general h3.closed+table{display:none}#hcaptcha-options.hcaptcha-general h3+table:before{border-bottom:1px solid #c3c4c7;content:"";margin:0 20px;max-width:720px;position:absolute;top:0;width:calc(100% - 40px)}.hcaptcha-section-keys+table tbody{display:grid;gap:10px 20px;grid-template-areas:"site-key site-key secret-key secret-key" "sample-hcaptcha sample-hcaptcha check-config reset-notifications";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-keys+table tbody th{width:auto}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-site-key{grid-area:site-key}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-secret-key{grid-area:secret-key}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-sample-hcaptcha{grid-area:sample-hcaptcha}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-check-config{grid-area:check-config}.hcaptcha-section-keys+table tbody tr.hcaptcha-reset-notifications{grid-area:reset-notifications}.hcaptcha-section-keys+table tbody tr th{padding:0 0 10px}.hcaptcha-section-keys+table tbody tr td input{width:100%}.hcaptcha-section-appearance+table tbody{display:grid;gap:10px 20px;grid-template-areas:"theme size language mode" "force force position position";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-theme{grid-area:theme}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-size{grid-area:size}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-language{grid-area:language}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-mode{grid-area:mode}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-force{grid-area:force}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-menu-position{grid-area:position}.hcaptcha-section-appearance+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-force td,.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-menu-position td{width:max-content}.hcaptcha-section-appearance+table tbody tr td select{width:100%}.hcaptcha-section-custom+table tbody{display:grid;gap:10px 20px;grid-template-areas:"custom-themes custom-themes config-params config-params" "custom-prop custom-value config-params config-params";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-themes{grid-area:custom-themes}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-config-params{grid-area:config-params}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-prop{grid-area:custom-prop}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-value{grid-area:custom-value}.hcaptcha-section-custom+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-themes td{width:max-content}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-config-params td{width:auto}.hcaptcha-section-custom+table tbody tr td select,.hcaptcha-section-custom+table tbody tr td textarea{width:100%}.hcaptcha-section-custom+table tbody tr td select option:disabled{background:#f0f0f1;color:#2c3338}.hcaptcha-section-custom+table tbody tr td input{height:30px;width:100%}.hcaptcha-section-enterprise+table tbody{display:grid;gap:10px 20px;grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-enterprise+table tbody th{width:auto}.hcaptcha-section-enterprise+table tbody tr th{padding:0 0 10px}.hcaptcha-section-enterprise+table tbody tr td input{width:100%}.hcaptcha-section-content+table tbody{display:grid;gap:0 20px;grid-template-areas:"content protected-urls";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-content+table tbody tr.hcaptcha-general-content{grid-area:content}.hcaptcha-section-content+table tbody tr.hcaptcha-general-protected-urls{grid-area:protected-urls}.hcaptcha-section-content+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-content+table tbody tr td{width:max-content}.hcaptcha-section-content+table tbody tr.hcaptcha-general-protected-urls td{width:auto}.hcaptcha-section-content+table tbody tr td input,.hcaptcha-section-content+table tbody tr td textarea{width:100%}.hcaptcha-section-antispam+table tbody{display:grid;gap:0 20px;grid-template-areas:"set-min-submit-time min-submit-time" "honeypot min-submit-time" "antispam antispam-provider";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-set-min-submit-time{grid-area:set-min-submit-time}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-min-submit-time{grid-area:min-submit-time}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-honeypot{grid-area:honeypot}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam{grid-area:antispam;padding-top:15px}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider{grid-area:antispam-provider;padding-top:15px}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider div{color:#d63638;margin-top:.5em}.hcaptcha-section-antispam+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-antispam+table tbody tr td{width:max-content}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider td,.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-min-submit-time td{width:auto}.hcaptcha-section-antispam+table tbody tr td input,.hcaptcha-section-antispam+table tbody tr td select{width:100%}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-honeypot th{padding:0}.hcaptcha-section-antispam+table tbody tr td input{width:100%}.hcaptcha-section-other+table tbody{display:grid;gap:0 20px;grid-template-areas:"blacklisted whitelisted" "logged recaptcha" "hide-login-errors cleanup-on-uninstall" "network ." "login-limit login-interval" "delay .";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in{grid-area:logged}.hcaptcha-section-other+table tbody tr.hcaptcha-general-recaptcha-compat-off{grid-area:recaptcha}.hcaptcha-section-other+table tbody tr.hcaptcha-general-hide-login-errors{grid-area:hide-login-errors}.hcaptcha-section-other+table tbody tr.hcaptcha-general-cleanup-on-uninstall{grid-area:cleanup-on-uninstall}.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-limit{grid-area:login-limit;padding-top:15px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-interval{grid-area:login-interval;padding-top:15px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips{grid-area:whitelisted}.hcaptcha-section-other+table tbody tr.hcaptcha-general--network-wide{grid-area:network}.hcaptcha-section-other+table tbody tr.hcaptcha-general-delay{grid-area:delay;padding-top:15px}.hcaptcha-section-other+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-other+table tbody tr.hcaptcha-general--network-wide th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-cleanup-on-uninstall th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-hide-login-errors th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-recaptcha-compat-off th{padding:0}.hcaptcha-section-other+table tbody tr td{width:max-content}.hcaptcha-section-other+table tbody tr.hcaptcha-general-blacklisted-ips td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-delay td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-interval td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-limit td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips td{width:auto}.hcaptcha-section-other+table tbody tr td input,.hcaptcha-section-other+table tbody tr td textarea{width:100%}.hcaptcha-section-statistics+table tbody{display:grid;gap:0 20px;grid-template-areas:"statistics collect-ip" "anonymous collect-ua";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-statistics{grid-area:statistics}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-anonymous{grid-area:anonymous}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ip{grid-area:collect-ip}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ua{grid-area:collect-ua}.hcaptcha-section-statistics+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-anonymous th,.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ua th{padding:0}.hcaptcha-section-statistics+table tbody tr td{width:max-content}@media (max-width:600px){.hcaptcha-section-keys+table tbody{grid-template-areas:"site-key site-key" "secret-key secret-key" "sample-hcaptcha sample-hcaptcha" "check-config reset-notifications";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-appearance+table tbody{grid-template-areas:"theme size" "language mode" "force force" "position position";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-appearance+table tbody tr td{width:unset!important}.hcaptcha-section-custom+table tbody{grid-template-areas:"custom-themes custom-themes" "custom-prop custom-value" "config-params config-params";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-custom+table tbody tr td{width:unset!important}.hcaptcha-section-enterprise+table tbody{grid-template-columns:repeat(1,1fr)!important}.hcaptcha-section-enterprise+table tbody tr td{width:unset!important}.hcaptcha-section-content+table tbody{grid-template-areas:"content" "protected-urls";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-content+table tbody tr td{width:unset!important}.hcaptcha-section-antispam+table tbody{grid-template-areas:"antispam" "antispam-provider";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-antispam+table tbody tr td{width:unset!important}.hcaptcha-section-other+table tbody{grid-template-areas:"blacklisted" "whitelisted" "logged" "recaptcha" "hide-login-errors" "cleanup-on-uninstall" "network" "login-limit" "login-interval" "delay";grid-template-columns:repeat(1,1fr)!important}.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in,.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips{padding-top:10px}.hcaptcha-section-other+table tbody tr td{width:unset!important}.hcaptcha-section-statistics+table tbody{grid-template-areas:"statistics" "anonymous" "collect-ip" "collect-ua";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-statistics+table tbody tr td{width:unset!important}}
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/css/integrations.css

    r3319903 r3359717  
    155155}
    156156
     157#hcaptcha-options label + .helper {
     158    position: absolute;
     159    right: 0;
     160    width: 100%;
     161}
     162
    157163#hcaptcha-options label[data-antispam] + .helper::before {
    158164    content: '';
     
    166172}
    167173
    168 #hcaptcha-options label[data-antispam="native"] + .helper::before {
     174#hcaptcha-options label:is([data-antispam-native],[data-antispam-native]) + .helper::before {
    169175    background: url('../images/antispam-yellow.svg');
     176    background-size: cover;
     177}
     178
     179#hcaptcha-options label:is([data-antispam-honeypot],[data-antispam-honeypot]) + .helper::before {
     180    background: url('../images/antispam-honeypot.svg');
    170181    background-size: cover;
    171182}
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/css/integrations.min.css

    r3319903 r3359717  
    1 #hcaptcha-options p{margin:.5em 0}.hcaptcha-integrations table tbody{display:grid;gap:10px 20px;grid-template-columns:repeat(4,minmax(100px,1fr))}.hcaptcha-integrations table tr{background:#fff;padding:10px 20px;position:relative}.hcaptcha-integrations table tr:before{background-color:#f0f0f0;bottom:0;content:"";inset-inline-end:0;inset-inline-start:0;opacity:0;position:absolute;top:0;transition:all 1.5s;visibility:hidden}.hcaptcha-integrations table tr.install:before,.hcaptcha-integrations table tr.off:before,.hcaptcha-integrations table tr.on:before{opacity:.7;transition:all 1.5s;visibility:visible}.hcaptcha-integrations table tr:after{background-image:url(../images/spinner-white.svg);background-position:50%;background-repeat:no-repeat;background-size:auto 80%;bottom:0;content:"";inset-inline-end:0;inset-inline-start:0;opacity:0;position:absolute;top:0;transition:all 1.5s;visibility:hidden}.hcaptcha-integrations table tr.install:after,.hcaptcha-integrations table tr.off:after,.hcaptcha-integrations table tr.on:after{background-position:50%;background-repeat:no-repeat;background-size:auto 80%;opacity:1;transition:all 1.5s;visibility:visible}.hcaptcha-integrations table tr.install:after{background-image:url(../images/spinner-gold.svg)}.hcaptcha-integrations table tr.on:after{background-image:url(../images/spinner-green.svg)}.hcaptcha-integrations table tr.off:after{background-image:url(../images/spinner-red.svg)}.hcaptcha-integrations table tr th{align-items:center;display:flex;flex-wrap:wrap;font-size:16px;height:28px;justify-content:space-between;margin-bottom:20px;padding:5px 0 0;width:unset}.hcaptcha-integrations table tr .hcaptcha-integrations-entity{background:#4de1d2;border:1px solid #4de1d2;border-radius:2px;color:#fff;cursor:default;font-size:14px;line-height:18px;padding:4px 8px}.hcaptcha-integrations-logo{position:relative}.hcaptcha-integrations table tr th .hcaptcha-integrations-logo{cursor:pointer;height:28px}.hcaptcha-integrations table tr th .hcaptcha-integrations-logo:hover:before{bottom:0;content:"";inset-inline-start:-14px;position:absolute;top:0;width:4px}.hcaptcha-integrations>table~table tr th .hcaptcha-integrations-logo:hover:before{background-color:#00a32a}.hcaptcha-integrations>table tr th .hcaptcha-integrations-logo:hover:before{background-color:#d63638}.hcaptcha-integrations>table~table tr th .hcaptcha-integrations-logo[data-installed=false]:hover:before{background-color:#dba617}.hcaptcha-integrations table tr th img{max-height:28px;max-width:100%}.hcaptcha-integrations table tr.hcaptcha-integrations-wp-status th .hcaptcha-integrations-logo{cursor:unset}.hcaptcha-integrations table tr.hcaptcha-integrations-wp-status th .hcaptcha-integrations-logo:hover:before{display:none}.hcaptcha-integrations table tr td{display:flex;margin:0;padding:0}.hcaptcha-integrations table tr td fieldset,.hcaptcha-integrations table tr td fieldset label{width:100%}#hcaptcha-options label[data-antispam]+.helper:before{background:url(../images/antispam-green.svg);background-size:cover;border-radius:unset;content:"";height:20px;top:.35em;transform:translate(0);width:18px}#hcaptcha-options label[data-antispam=native]+.helper:before{background:url(../images/antispam-yellow.svg);background-size:cover}#hcaptcha-options fieldset:disabled label[data-antispam]+.helper:before{opacity:.7}#hcaptcha-options label[data-antispam]+.helper .helper-content{transform:translateY(38px)}.hcaptcha-disabled-section{margin:20px 0}.hcaptcha-integrations table.form-table+p.submit{padding:10px 0 0}#hcaptcha-integrations-search-wrap{position:relative}#hcaptcha-integrations-search-wrap:before{background:url(../images/magnifying-glass.svg);background-size:contain;content:"";font-size:16px;height:16px;inset-inline-start:10px;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:16px}#hcaptcha-integrations-search{padding-block-end:1px;padding-block-start:1px;padding-inline-end:8px;padding-inline-start:32px;width:230px}@media (max-width:1279px){.hcaptcha-integrations table tbody{grid-template-columns:repeat(3,minmax(100px,1fr))}}@media (max-width:1023px){.hcaptcha-integrations table tbody{grid-template-columns:repeat(2,minmax(100px,1fr))}}@media (max-width:782px){#hcaptcha-integrations-search{font-size:14px;min-height:unset}}body div.kagg-dialog{--color-activate:#00a32a;--color-deactivate:#d63638;--color-install:#dba617}body div.kagg-dialog.activate .kagg-dialog-container .kagg-dialog-box{color:var(--color-activate)}body div.kagg-dialog.activate .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-activate);color:#fff}body div.kagg-dialog.deactivate .kagg-dialog-container .kagg-dialog-box{color:var(--color-deactivate)}body div.kagg-dialog.deactivate .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-deactivate);color:#fff}body div.kagg-dialog.install .kagg-dialog-container .kagg-dialog-box{color:var(--color-install)}body div.kagg-dialog.install .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-install);color:#fff}
     1#hcaptcha-options p{margin:.5em 0}.hcaptcha-integrations table tbody{display:grid;gap:10px 20px;grid-template-columns:repeat(4,minmax(100px,1fr))}.hcaptcha-integrations table tr{background:#fff;padding:10px 20px;position:relative}.hcaptcha-integrations table tr:before{background-color:#f0f0f0;bottom:0;content:"";inset-inline-end:0;inset-inline-start:0;opacity:0;position:absolute;top:0;transition:all 1.5s;visibility:hidden}.hcaptcha-integrations table tr.install:before,.hcaptcha-integrations table tr.off:before,.hcaptcha-integrations table tr.on:before{opacity:.7;transition:all 1.5s;visibility:visible}.hcaptcha-integrations table tr:after{background-image:url(../images/spinner-white.svg);background-position:50%;background-repeat:no-repeat;background-size:auto 80%;bottom:0;content:"";inset-inline-end:0;inset-inline-start:0;opacity:0;position:absolute;top:0;transition:all 1.5s;visibility:hidden}.hcaptcha-integrations table tr.install:after,.hcaptcha-integrations table tr.off:after,.hcaptcha-integrations table tr.on:after{background-position:50%;background-repeat:no-repeat;background-size:auto 80%;opacity:1;transition:all 1.5s;visibility:visible}.hcaptcha-integrations table tr.install:after{background-image:url(../images/spinner-gold.svg)}.hcaptcha-integrations table tr.on:after{background-image:url(../images/spinner-green.svg)}.hcaptcha-integrations table tr.off:after{background-image:url(../images/spinner-red.svg)}.hcaptcha-integrations table tr th{align-items:center;display:flex;flex-wrap:wrap;font-size:16px;height:28px;justify-content:space-between;margin-bottom:20px;padding:5px 0 0;width:unset}.hcaptcha-integrations table tr .hcaptcha-integrations-entity{background:#4de1d2;border:1px solid #4de1d2;border-radius:2px;color:#fff;cursor:default;font-size:14px;line-height:18px;padding:4px 8px}.hcaptcha-integrations-logo{position:relative}.hcaptcha-integrations table tr th .hcaptcha-integrations-logo{cursor:pointer;height:28px}.hcaptcha-integrations table tr th .hcaptcha-integrations-logo:hover:before{bottom:0;content:"";inset-inline-start:-14px;position:absolute;top:0;width:4px}.hcaptcha-integrations>table~table tr th .hcaptcha-integrations-logo:hover:before{background-color:#00a32a}.hcaptcha-integrations>table tr th .hcaptcha-integrations-logo:hover:before{background-color:#d63638}.hcaptcha-integrations>table~table tr th .hcaptcha-integrations-logo[data-installed=false]:hover:before{background-color:#dba617}.hcaptcha-integrations table tr th img{max-height:28px;max-width:100%}.hcaptcha-integrations table tr.hcaptcha-integrations-wp-status th .hcaptcha-integrations-logo{cursor:unset}.hcaptcha-integrations table tr.hcaptcha-integrations-wp-status th .hcaptcha-integrations-logo:hover:before{display:none}.hcaptcha-integrations table tr td{display:flex;margin:0;padding:0}.hcaptcha-integrations table tr td fieldset,.hcaptcha-integrations table tr td fieldset label{width:100%}#hcaptcha-options label+.helper{position:absolute;right:0;width:100%}#hcaptcha-options label[data-antispam]+.helper:before{background:url(../images/antispam-green.svg);background-size:cover;border-radius:unset;content:"";height:20px;top:.35em;transform:translate(0);width:18px}#hcaptcha-options label:is([data-antispam-native])+.helper:before{background:url(../images/antispam-yellow.svg);background-size:cover}#hcaptcha-options label:is([data-antispam-honeypot])+.helper:before{background:url(../images/antispam-honeypot.svg);background-size:cover}#hcaptcha-options fieldset:disabled label[data-antispam]+.helper:before{opacity:.7}#hcaptcha-options label[data-antispam]+.helper .helper-content{transform:translateY(38px)}.hcaptcha-disabled-section{margin:20px 0}.hcaptcha-integrations table.form-table+p.submit{padding:10px 0 0}#hcaptcha-integrations-search-wrap{position:relative}#hcaptcha-integrations-search-wrap:before{background:url(../images/magnifying-glass.svg);background-size:contain;content:"";font-size:16px;height:16px;inset-inline-start:10px;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:16px}#hcaptcha-integrations-search{padding-block-end:1px;padding-block-start:1px;padding-inline-end:8px;padding-inline-start:32px;width:230px}@media (max-width:1279px){.hcaptcha-integrations table tbody{grid-template-columns:repeat(3,minmax(100px,1fr))}}@media (max-width:1023px){.hcaptcha-integrations table tbody{grid-template-columns:repeat(2,minmax(100px,1fr))}}@media (max-width:782px){#hcaptcha-integrations-search{font-size:14px;min-height:unset}}body div.kagg-dialog{--color-activate:#00a32a;--color-deactivate:#d63638;--color-install:#dba617}body div.kagg-dialog.activate .kagg-dialog-container .kagg-dialog-box{color:var(--color-activate)}body div.kagg-dialog.activate .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-activate);color:#fff}body div.kagg-dialog.deactivate .kagg-dialog-container .kagg-dialog-box{color:var(--color-deactivate)}body div.kagg-dialog.deactivate .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-deactivate);color:#fff}body div.kagg-dialog.install .kagg-dialog-container .kagg-dialog-box{color:var(--color-install)}body div.kagg-dialog.install .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-install);color:#fff}
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/admin-jetpack.js

    r3339595 r3359717  
    33/**
    44 * @param HCaptchaJetpackObject.hCaptcha
    5  * @param window.hCaptchaJetpack
    65 */
    76
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/apps/hcaptcha.js

    r3339595 r3359717  
    1 (()=>{"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=r(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var o=0,a=function(){};return{s:a,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,c=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return u=t.done,t},e:function(t){c=!0,i=t},f:function(){try{u||null==n.return||n.return()}finally{if(c)throw i}}}}function n(t){return function(t){if(Array.isArray(t))return o(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||r(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(t,e){if(t){if("string"==typeof t)return o(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(t,e):void 0}}function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,i(r.key),r)}}function i(e){var n=function(e,n){if("object"!=t(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,n||"default");if("object"!=t(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}(e,"string");return"symbol"==t(n)?n:n+""}var u=function(){return r=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.foundForms=[],this.params=null,this.observingDarkMode=!1,this.observingPasswordManagers=!1,this.darkElement=null,this.darkClass=null,this.callback=this.callback.bind(this),this.validate=this.validate.bind(this),this.addedDCLCallbacks=new Set},(o=[{key:"generateID",value:function(){var t=function(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)};return t()+"-"+t()+"-"+t()+"-"+t()}},{key:"getFoundFormById",value:function(t){var e;return null!==(e=this.foundForms.filter(function(e){return t===e.hCaptchaId})[0])&&void 0!==e?e:null}},{key:"getWidgetId",value:function(t){var e,n,r;if(void 0===t)return"";var o=null!==(e=null===(n=t.closest(this.formSelector))||void 0===n||null===(n=n.dataset)||void 0===n?void 0:n.hCaptchaId)&&void 0!==e?e:"";if(!o)return"";var a=this.getFoundFormById(o);return null!==(r=null==a?void 0:a.widgetId)&&void 0!==r?r:""}},{key:"reset",value:function(t){var e=this.getWidgetId(t);e&&hcaptcha.reset(e)}},{key:"isSameOrDescendant",value:function(t,e){for(var n=e;n;){if(n===t)return!0;n=n.parentElement}return!1}},{key:"getCurrentForm",value:function(t){var e,n=t.currentTarget.closest(this.formSelector),r=this.getFoundFormById(null==n||null===(e=n.dataset)||void 0===e?void 0:e.hCaptchaId),o=null==r?void 0:r.submitButtonElement,a=null==r?void 0:r.widgetId;if(a&&this.isSameOrDescendant(o,t.target))return t.preventDefault(),t.stopPropagation(),{formElement:n,submitButtonElement:o,widgetId:a}}},{key:"validate",value:function(t){if(this.currentForm=this.getCurrentForm(t),this.currentForm){var e=this.currentForm,n=e.formElement,r=e.widgetId,o=n.querySelector(this.responseSelector),a=o?o.value:"";""===a?hcaptcha.execute(r,{async:!1}):this.callback(a)}}},{key:"isValidated",value:function(){return void 0!==this.currentForm}},{key:"getForms",value:function(){return n(document.querySelectorAll(this.formSelector))}},{key:"getParams",value:function(){if(null!==this.params)return this.params;var t;try{var e,n;t=JSON.parse(wp.hooks.applyFilters("hcaptcha.params",null!==(e=null===(n=HCaptchaMainObject)||void 0===n?void 0:n.params)&&void 0!==e?e:""))}catch(e){t={}}return t.callback=this.callback,t}},{key:"setParams",value:function(t){this.params=t}},{key:"setDarkData",value:function(){var t={"twenty-twenty-one":{darkStyleId:"twenty-twenty-one-style-css",darkElement:document.body,darkClass:"is-dark-theme"},"wp-dark-mode":{darkStyleId:"wp-dark-mode-frontend-css",darkElement:document.documentElement,darkClass:"wp-dark-mode-active"},"droit-dark-mode":{darkStyleId:"dtdr-public-inline-css",darkElement:document.documentElement,darkClass:"drdt-dark-mode"}};t=wp.hooks.applyFilters("hcaptcha.darkData",t);for(var e=0,n=Object.values(t);e<n.length;e++){var r=n[e];if(document.getElementById(r.darkStyleId))return this.darkElement=r.darkElement,void(this.darkClass=r.darkClass)}}},{key:"observeDarkMode",value:function(){var t=this;this.observingDarkMode||(this.observingDarkMode=!0,"auto"!==this.getParams().theme)||(this.setDarkData(),this.darkElement&&this.darkClass&&new MutationObserver(function(n){var r,o=e(n);try{var a=function(){var e=r.value.oldValue,n=t.darkElement.getAttribute("class");e=e?e.split(" "):[],(n=n?n.split(" "):[]).filter(function(t){return!e.includes(t)}).concat(e.filter(function(t){return!n.includes(t)})).includes(t.darkClass)&&t.bindEvents()};for(o.s();!(r=o.n()).done;)a()}catch(t){o.e(t)}finally{o.f()}}).observe(this.darkElement,{attributes:!0,attributeOldValue:!0}))}},{key:"observePasswordManagers",value:function(){var t=this;if(!this.observingPasswordManagers){this.observingPasswordManagers=!0;var n=!1,r=new MutationObserver(function(o){n||(n=!0,requestAnimationFrame(function(){var a,i=e(o);try{for(i.s();!(a=i.n()).done;)if("childList"===a.value.type){var u=document.querySelector("com-1password-button"),c=document.querySelector("div[data-lastpass-icon-root]");if(u||c){r.disconnect(),t.foundForms.map(function(e){var n=e.hCaptchaId,r=e.submitButtonElement;if(!r)return e;var o=document.querySelector('[data-h-captcha-id="'.concat(n,'"]')).querySelector(".h-captcha"),a=o.dataset;return"invisible"===a.size||"true"===a.force||(o.dataset.force="true",r.addEventListener("click",t.validate,!0)),e});break}}}catch(t){i.e(t)}finally{i.f()}n=!1}))});r.observe(document.body,{childList:!0,subtree:!0})}}},{key:"getWidgetByToken",value:function(t){var e=n(document.querySelectorAll(this.responseSelector)).find(function(e){return e.value===t});return e?e.closest(".h-captcha"):null}},{key:"callback",value:function(t){document.dispatchEvent(new CustomEvent("hCaptchaSubmitted",{detail:{token:t}}));var e=this.getParams(),n=this.getWidgetByToken(t),r=n?n.dataset.force:null;("invisible"===e.size||"true"===r&&this.isValidated())&&this.submit()}},{key:"applyAutoTheme",value:function(t){if("auto"!==t.theme)return t;var e;if(t.theme="light",!this.darkElement)return t.theme=null!==(e=window)&&void 0!==e&&e.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",t;var n=this.darkElement.getAttribute("class");return(n=n||"").includes(this.darkClass)&&(t.theme="dark"),t}},{key:"render",value:function(e){this.observeDarkMode(),this.observePasswordManagers();var n,r,o=this.getParams();return"object"===t(o.theme)?null!==(n=null===(r=o)||void 0===r||null===(r=r.theme)||void 0===r||null===(r=r.component)||void 0===r||null===(r=r.checkbox)||void 0===r||null===(r=r.main)||void 0===r?void 0:r.fill)&&void 0!==n&&n&&(e.dataset.theme="custom"):o.theme=e.dataset.theme,o.size=e.dataset.size,o=this.applyAutoTheme(o),hcaptcha.render(e,o)}},{key:"addSyncedEventListener",value:function(t){if("loading"===document.readyState){if(this.addedDCLCallbacks.has(t))return;this.addedDCLCallbacks.add(t),window.addEventListener("DOMContentLoaded",t)}else t()}},{key:"bindEvents",value:function(){var t=this;"undefined"!=typeof hcaptcha&&(this.formSelector=wp.hooks.applyFilters("hcaptcha.formSelector","form, section.cwginstock-subscribe-form, div.sdm_download_item, .gform_editor, #nf-builder, .wpforms-captcha-preview"),this.submitButtonSelector=wp.hooks.applyFilters("hcaptcha.submitButtonSelector",'*[type="submit"]:not(.quform-default-submit), #check_config, button[type="button"].ff-btn, a.et_pb_newsletter_button.et_pb_button, .forminator-button-submit, .frm_button_submit, a.sdm_download, .uagb-forms-main-submit-button'),this.responseSelector='textarea[name="h-captcha-response"]',this.getForms().map(function(e){var n=e.querySelector(".h-captcha");if(null===n)return e;if(n.classList.contains("hcaptcha-widget-id"))return e;n.innerHTML="";var r=t.generateID(),o=e.querySelectorAll(t.submitButtonSelector)[0],a=t.render(n);if(e.dataset.hCaptchaId=r,t.foundForms.push({hCaptchaId:r,submitButtonElement:o,widgetId:a}),!o)return e;var i=n.dataset;return"invisible"!==i.size&&"true"!==i.force||o.addEventListener("click",t.validate,!0),e},this))}},{key:"isAjaxSubmitButton",value:function(t){var e=t.getAttribute("type"),n="submit"!==(e=e?e.toLowerCase():"");return wp.hooks.applyFilters("hcaptcha.ajaxSubmitButton",n,t)}},{key:"submit",value:function(){if(this.currentForm){var t=this.currentForm,e=t.formElement,n=t.submitButtonElement;if("form"!==e.tagName.toLowerCase()||this.isAjaxSubmitButton(n))return n.removeEventListener("click",this.validate,!0),void n.click();e.requestSubmit?e.requestSubmit(n):e.submit()}}}])&&a(r.prototype,o),i&&a(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o,i}();window.HCaptchaMainObject=window.HCaptchaMainObject||{};const c=u;function s(t){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}function l(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,d(r.key),r)}}function d(t){var e=function(t,e){if("object"!=s(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=s(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==s(e)?e:e+""}function f(t,e,n){return e=p(e),function(t,e){if(e&&("object"==s(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,m()?Reflect.construct(e,n||[],p(t).constructor):e.apply(t,n))}function h(t){var e="function"==typeof Map?new Map:void 0;return h=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return function(t,e,n){if(m())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,e);var o=new(t.bind.apply(t,r));return n&&v(o,n.prototype),o}(t,arguments,p(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),v(n,t)},h(t)}function m(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(m=function(){return!!t})()}function v(t,e){return v=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},v(t,e)}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}const y=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),f(this,e,arguments)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&v(t,e)}(e,t),n=e,(r=[{key:"connectedCallback",value:function(){window.hCaptcha.addSyncedEventListener(window.hCaptchaBindEvents)}}])&&l(n.prototype,r),o&&l(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(h(HTMLElement));var b=new c;window.hCaptcha=b,window.hCaptchaGetWidgetId=function(t){b.getWidgetId(t)},window.hCaptchaReset=function(t){b.reset(t)},window.hCaptchaBindEvents=function(){b.bindEvents()},window.hCaptchaSubmit=function(){b.submit()},window.hCaptchaOnLoad=function(){b.addSyncedEventListener(function(){document.dispatchEvent(new CustomEvent("hCaptchaBeforeBindEvents")),window.hCaptchaBindEvents(),document.dispatchEvent(new CustomEvent("hCaptchaLoaded"))})},window.customElements.define("h-captcha",y),document.dispatchEvent(new CustomEvent("hCaptchaBeforeAPI"))})();
     1(()=>{"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=r(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var o=0,a=function(){};return{s:a,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,c=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return u=t.done,t},e:function(t){c=!0,i=t},f:function(){try{u||null==n.return||n.return()}finally{if(c)throw i}}}}function n(t){return function(t){if(Array.isArray(t))return o(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||r(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(t,e){if(t){if("string"==typeof t)return o(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(t,e):void 0}}function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,i(r.key),r)}}function i(e){var n=function(e,n){if("object"!=t(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,n||"default");if("object"!=t(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}(e,"string");return"symbol"==t(n)?n:n+""}var u=function(){return r=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.foundForms=[],this.params=null,this.observingDarkMode=!1,this.observingPasswordManagers=!1,this.darkElement=null,this.darkClass=null,this.callback=this.callback.bind(this),this.validate=this.validate.bind(this),this.addedDCLCallbacks=new Set},(o=[{key:"generateID",value:function(){var t=function(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)};return t()+"-"+t()+"-"+t()+"-"+t()}},{key:"getFoundFormById",value:function(t){var e;return null!==(e=this.foundForms.filter(function(e){return t===e.hCaptchaId})[0])&&void 0!==e?e:null}},{key:"getWidgetId",value:function(t){var e,n,r;if(void 0===t)return"";var o=null!==(e=null===(n=t.closest(this.formSelector))||void 0===n||null===(n=n.dataset)||void 0===n?void 0:n.hCaptchaId)&&void 0!==e?e:"";if(!o)return"";var a=this.getFoundFormById(o);return null!==(r=null==a?void 0:a.widgetId)&&void 0!==r?r:""}},{key:"reset",value:function(t){var e=this.getWidgetId(t);e&&hcaptcha.reset(e)}},{key:"isSameOrDescendant",value:function(t,e){for(var n=e;n;){if(n===t)return!0;n=n.parentElement}return!1}},{key:"getCurrentForm",value:function(t){var e,n=t.currentTarget.closest(this.formSelector),r=this.getFoundFormById(null==n||null===(e=n.dataset)||void 0===e?void 0:e.hCaptchaId),o=null==r?void 0:r.submitButtonElement,a=null==r?void 0:r.widgetId;if(a&&this.isSameOrDescendant(o,t.target))return t.preventDefault(),t.stopPropagation(),{formElement:n,submitButtonElement:o,widgetId:a}}},{key:"validate",value:function(t){if(this.currentForm=this.getCurrentForm(t),this.currentForm){var e=this.currentForm,n=e.formElement,r=e.widgetId,o=n.querySelector(this.responseSelector),a=o?o.value:"";""===a?hcaptcha.execute(r,{async:!1}):this.callback(a)}}},{key:"isValidated",value:function(){return void 0!==this.currentForm}},{key:"getForms",value:function(){return n(document.querySelectorAll(this.formSelector))}},{key:"getParams",value:function(){if(null!==this.params)return this.params;var t;try{var e,n;t=JSON.parse(wp.hooks.applyFilters("hcaptcha.params",null!==(e=null===(n=HCaptchaMainObject)||void 0===n?void 0:n.params)&&void 0!==e?e:""))}catch(e){t={}}return t.callback=this.callback,t}},{key:"setParams",value:function(t){this.params=t}},{key:"setDarkData",value:function(){var t={"twenty-twenty-one":{darkStyleId:"twenty-twenty-one-style-css",darkElement:document.body,darkClass:"is-dark-theme"},"wp-dark-mode":{darkStyleId:"wp-dark-mode-frontend-css",darkElement:document.documentElement,darkClass:"wp-dark-mode-active"},"droit-dark-mode":{darkStyleId:"dtdr-public-inline-css",darkElement:document.documentElement,darkClass:"drdt-dark-mode"}};t=wp.hooks.applyFilters("hcaptcha.darkData",t);for(var e=0,n=Object.values(t);e<n.length;e++){var r=n[e];if(document.getElementById(r.darkStyleId))return this.darkElement=r.darkElement,void(this.darkClass=r.darkClass)}}},{key:"observeDarkMode",value:function(){var t=this;this.observingDarkMode||(this.observingDarkMode=!0,"auto"!==this.getParams().theme)||(this.setDarkData(),this.darkElement&&this.darkClass&&new MutationObserver(function(n){var r,o=e(n);try{var a=function(){var e=r.value.oldValue,n=t.darkElement.getAttribute("class");e=e?e.split(" "):[],(n=n?n.split(" "):[]).filter(function(t){return!e.includes(t)}).concat(e.filter(function(t){return!n.includes(t)})).includes(t.darkClass)&&t.bindEvents()};for(o.s();!(r=o.n()).done;)a()}catch(t){o.e(t)}finally{o.f()}}).observe(this.darkElement,{attributes:!0,attributeOldValue:!0}))}},{key:"observePasswordManagers",value:function(){var t=this;if(!this.observingPasswordManagers){this.observingPasswordManagers=!0;var n=!1,r=new MutationObserver(function(o){n||(n=!0,requestAnimationFrame(function(){var a,i=e(o);try{for(i.s();!(a=i.n()).done;)if("childList"===a.value.type){var u=document.querySelector("com-1password-button"),c=document.querySelector("div[data-lastpass-icon-root]");if(u||c){r.disconnect(),t.foundForms.map(function(e){var n=e.hCaptchaId,r=e.submitButtonElement;if(!r)return e;var o=document.querySelector('[data-h-captcha-id="'.concat(n,'"]')).querySelector(".h-captcha"),a=o.dataset;return"invisible"===a.size||"true"===a.force||(o.dataset.force="true",r.addEventListener("click",t.validate,!0)),e});break}}}catch(t){i.e(t)}finally{i.f()}n=!1}))});r.observe(document.body,{childList:!0,subtree:!0})}}},{key:"getWidgetByToken",value:function(t){var e=n(document.querySelectorAll(this.responseSelector)).find(function(e){return e.value===t});return e?e.closest(".h-captcha"):null}},{key:"callback",value:function(t){document.dispatchEvent(new CustomEvent("hCaptchaSubmitted",{detail:{token:t}}));var e=this.getParams(),n=this.getWidgetByToken(t),r=n?n.dataset.force:null;("invisible"===e.size||"true"===r&&this.isValidated())&&this.submit()}},{key:"applyAutoTheme",value:function(t){if("auto"!==t.theme)return t;var e;if(t.theme="light",!this.darkElement)return t.theme=null!==(e=window)&&void 0!==e&&e.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",t;var n=this.darkElement.getAttribute("class");return(n=n||"").includes(this.darkClass)&&(t.theme="dark"),t}},{key:"render",value:function(e){this.observeDarkMode(),this.observePasswordManagers();var n,r,o=this.getParams();return"object"===t(o.theme)?null!==(n=null===(r=o)||void 0===r||null===(r=r.theme)||void 0===r||null===(r=r.component)||void 0===r||null===(r=r.checkbox)||void 0===r||null===(r=r.main)||void 0===r?void 0:r.fill)&&void 0!==n&&n&&(e.dataset.theme="custom"):o.theme=e.dataset.theme,o.size=e.dataset.size,o=this.applyAutoTheme(o),hcaptcha.render(e,o)}},{key:"addSyncedEventListener",value:function(t){if("loading"===document.readyState){if(this.addedDCLCallbacks.has(t))return;this.addedDCLCallbacks.add(t),window.addEventListener("DOMContentLoaded",t)}else t()}},{key:"moveHP",value:function(t){var e,r;if(t&&"1"!==(null==t||null===(e=t.dataset)||void 0===e?void 0:e.hpMoved)){t.dataset.hpMoved="1";var o=t.querySelector('input[id^="hcap_hp_"]');if(o){var a=n(t.querySelectorAll("input,select,textarea,button")).filter(function(t){return t!==o&&"hidden"!==t.type&&!t.closest(".h-captcha")});if(a.length){var i=a[Math.floor(Math.random()*a.length)];if(i&&i.parentNode){var u=null!==(r=o.getAttribute("id"))&&void 0!==r?r:"",c=u?t.querySelector('label[for="'.concat(u,'"]')):null,l=document.createDocumentFragment();c&&c.isConnected&&l.appendChild(c),l.appendChild(o),i.parentNode.insertBefore(l,i)}}}}}},{key:"addFSTToken",value:function(t){if(t){var e="hcap_fst_token",n=t.querySelector('input[type="hidden"][name="'.concat(e,'"]'));n||((n=document.createElement("input")).type="hidden",n.name=e),t.firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n)}}},{key:"bindEvents",value:function(){var t=this;"undefined"!=typeof hcaptcha&&(this.formSelector=wp.hooks.applyFilters("hcaptcha.formSelector","form, section.cwginstock-subscribe-form, div.sdm_download_item, .gform_editor, #nf-builder, .wpforms-captcha-preview"),this.submitButtonSelector=wp.hooks.applyFilters("hcaptcha.submitButtonSelector",'*[type="submit"]:not(.quform-default-submit), #check_config, button[type="button"].ff-btn, a.et_pb_newsletter_button.et_pb_button, .forminator-button-submit, .frm_button_submit, a.sdm_download, .uagb-forms-main-submit-button'),this.responseSelector='textarea[name="h-captcha-response"]',this.getForms().map(function(e){var n=e.querySelector(".h-captcha");if(null===n)return e;if(n.classList.contains("hcaptcha-widget-id"))return e;t.moveHP(e),t.addFSTToken(e),n.innerHTML="";var r=t.generateID(),o=e.querySelectorAll(t.submitButtonSelector)[0],a=t.render(n);if(e.dataset.hCaptchaId=r,t.foundForms.push({hCaptchaId:r,submitButtonElement:o,widgetId:a}),!o)return e;var i=n.dataset;return"invisible"!==i.size&&"true"!==i.force||o.addEventListener("click",t.validate,!0),e},this))}},{key:"isAjaxSubmitButton",value:function(t){var e=t.getAttribute("type"),n="submit"!==(e=e?e.toLowerCase():"");return wp.hooks.applyFilters("hcaptcha.ajaxSubmitButton",n,t)}},{key:"submit",value:function(){if(this.currentForm){var t=this.currentForm,e=t.formElement,n=t.submitButtonElement;if("form"!==e.tagName.toLowerCase()||this.isAjaxSubmitButton(n))return n.removeEventListener("click",this.validate,!0),void n.click();e.requestSubmit?e.requestSubmit(n):e.submit()}}}])&&a(r.prototype,o),i&&a(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o,i}();window.HCaptchaMainObject=window.HCaptchaMainObject||{};const c=u;function l(t){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l(t)}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,d(r.key),r)}}function d(t){var e=function(t,e){if("object"!=l(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==l(e)?e:e+""}function f(t,e,n){return e=v(e),function(t,e){if(e&&("object"==l(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,m()?Reflect.construct(e,n||[],v(t).constructor):e.apply(t,n))}function h(t){var e="function"==typeof Map?new Map:void 0;return h=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return function(t,e,n){if(m())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,e);var o=new(t.bind.apply(t,r));return n&&p(o,n.prototype),o}(t,arguments,v(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),p(n,t)},h(t)}function m(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(m=function(){return!!t})()}function p(t,e){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},p(t,e)}function v(t){return v=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},v(t)}const y=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),f(this,e,arguments)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&p(t,e)}(e,t),n=e,(r=[{key:"connectedCallback",value:function(){window.hCaptcha.addSyncedEventListener(window.hCaptchaBindEvents)}}])&&s(n.prototype,r),o&&s(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(h(HTMLElement));var b=new c;window.hCaptcha=b,window.hCaptchaGetWidgetId=function(t){b.getWidgetId(t)},window.hCaptchaReset=function(t){b.reset(t)},window.hCaptchaBindEvents=function(){document.dispatchEvent(new CustomEvent("hCaptchaBeforeBindEvents")),b.bindEvents(),document.dispatchEvent(new CustomEvent("hCaptchaAfterBindEvents"))},window.hCaptchaSubmit=function(){b.submit()},window.hCaptchaOnLoad=function(){b.addSyncedEventListener(function(){window.hCaptchaBindEvents(),document.dispatchEvent(new CustomEvent("hCaptchaLoaded",{cancelable:!0}))})},window.customElements.define("h-captcha",y),document.dispatchEvent(new CustomEvent("hCaptchaBeforeAPI"))})();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-back-in-stock-notifier.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var a=r.call(t,e||"default");if("object"!=n(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}r.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,r,n,a){var o,i=null!==(o=e.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(r))){var c=t.getHCaptchaData(a,n);e.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+n+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,e){var r=t.find('[name="h-captcha-response"]').val();r=r||"";var n=t.find('[name="hcaptcha-widget-id"]').val();n=n||"";var a=t.find('[name="'+e+'"]').val();return{response:r,id:n,nonce:a=a||""}}}],(r=null)&&a(e.prototype,r),n&&a(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,n}()}},e={};function r(n){var a=e[n];if(void 0!==a)return a.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,a=r(2981);(n=jQuery).ajaxPrefilter(function(t){a.d.addHCaptchaData(t,"cwginstock_product_subscribe","hcaptcha_back_in_stock_notifier_nonce",n(".cwginstock-subscribe-form"))}),jQuery(document).on("ajaxSuccess",function(t,e,r){var n=new URLSearchParams(r.data);"cwg_trigger_popup_ajax"===n.get("action")&&(document.querySelector('input[name="cwg-product-id"][value="'+n.get("product_id")+'"]')&&window.hCaptchaBindEvents())})})();
     1(()=>{"use strict";var t={2981:(t,e,n)=>{function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function r(t,e){for(var n=0;n<e.length;n++){var a=e[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,o(a.key),a)}}function o(t){var e=function(t,e){if("object"!=a(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=a(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==a(e)?e:e+""}n.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,a=[{key:"addHCaptchaData",value:function(e,n,a,r){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(n))&&(e.data+=t.getHCaptchaData(r,a))}},{key:"getHCaptchaData",value:function(t,e){for(var n,a="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(n=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==n?n:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var c,i=o[r];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";a+="&".concat(i,"=").concat(u)}}return a}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:n}}))}catch(t){}var r=t.apply(void 0,n);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:n,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:n,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:n}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(n=null)&&r(e.prototype,n),a&&r(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,a}()}},e={};function n(a){var r=e[a];if(void 0!==r)return r.exports;var o=e[a]={exports:{}};return t[a](o,o.exports,n),o.exports}n.d=(t,e)=>{for(var a in e)n.o(e,a)&&!n.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var a,r=n(2981);(a=jQuery).ajaxPrefilter(function(t){r.d.addHCaptchaData(t,"cwginstock_product_subscribe","hcaptcha_back_in_stock_notifier_nonce",a(".cwginstock-subscribe-form"))}),jQuery(document).on("ajaxSuccess",function(t,e,n){var a=new URLSearchParams(n.data);"cwg_trigger_popup_ajax"===a.get("action")&&(document.querySelector('input[name="cwg-product-id"][value="'+a.get("product_id")+'"]')&&window.hCaptchaBindEvents())})})();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-beaver-builder.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,e,r)=>{function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function n(t,e){for(var r=0;r<e.length;r++){var a=e[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,o(a.key),a)}}function o(t){var e=function(t,e){if("object"!=a(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==a(e)?e:e+""}r.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,a=[{key:"addHCaptchaData",value:function(e,r,a,n){var o,i=null!==(o=e.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(r))){var c=t.getHCaptchaData(n,a);e.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+a+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,e){var r=t.find('[name="h-captcha-response"]').val();r=r||"";var a=t.find('[name="hcaptcha-widget-id"]').val();a=a||"";var n=t.find('[name="'+e+'"]').val();return{response:r,id:a,nonce:n=n||""}}}],(r=null)&&n(e.prototype,r),a&&n(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,a}()}},e={};function r(a){var n=e[a];if(void 0!==n)return n.exports;var o=e[a]={exports:{}};return t[a](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var a in e)r.o(e,a)&&!r.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var a,n=r(2981);wp.hooks.addFilter("hcaptcha.formSelector","hcaptcha",function(t){return t+", div.fl-login-form"}),wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", a.fl-button"}),(a=jQuery).ajaxPrefilter(function(t){var e,r=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof r){var o=new URLSearchParams(r).get("node_id"),i=a("[data-node="+o+"]");n.d.addHCaptchaData(t,"fl_builder_email","hcaptcha_beaver_builder_nonce",i),n.d.addHCaptchaData(t,"fl_builder_login_form_submit","hcaptcha_login_nonce",i)}})})();
     1(()=>{"use strict";var t={2981:(t,e,a)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function r(t,e){for(var a=0;a<e.length;a++){var n=e[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var r=a.call(t,e||"default");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}a.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,a,n,r){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(a))&&(e.data+=t.getHCaptchaData(r,n))}},{key:"getHCaptchaData",value:function(t,e){for(var a,n="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(a=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==a?a:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var c,i=o[r];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";n+="&".concat(i,"=").concat(u)}}return n}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:a}}))}catch(t){}var r=t.apply(void 0,a);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:a,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:a,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:a}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(a=null)&&r(e.prototype,a),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,a,n}()}},e={};function a(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,a),o.exports}a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,r=a(2981);wp.hooks.addFilter("hcaptcha.formSelector","hcaptcha",function(t){return t+", div.fl-login-form"}),wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", a.fl-button"}),(n=jQuery).ajaxPrefilter(function(t){var e,a=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof a){var o=new URLSearchParams(a).get("node_id"),c=n("[data-node="+o+"]");r.d.addHCaptchaData(t,"fl_builder_email","hcaptcha_beaver_builder_nonce",c),r.d.addHCaptchaData(t,"fl_builder_login_form_submit","hcaptcha_login_nonce",c)}})})();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-brizy.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,e,r)=>{function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function n(t,e){for(var r=0;r<e.length;r++){var a=e[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,o(a.key),a)}}function o(t){var e=function(t,e){if("object"!=a(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==a(e)?e:e+""}r.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,a=[{key:"addHCaptchaData",value:function(e,r,a,n){var o,i=null!==(o=e.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(r))){var c=t.getHCaptchaData(n,a);e.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+a+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,e){var r=t.find('[name="h-captcha-response"]').val();r=r||"";var a=t.find('[name="hcaptcha-widget-id"]').val();a=a||"";var n=t.find('[name="'+e+'"]').val();return{response:r,id:a,nonce:n=n||""}}}],(r=null)&&n(e.prototype,r),a&&n(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,a}()}},e={};function r(a){var n=e[a];if(void 0!==n)return n.exports;var o=e[a]={exports:{}};return t[a](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var a in e)r.o(e,a)&&!r.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var a,n=r(2981);(a=jQuery).ajaxPrefilter(function(t){if("brizy_submit_form"===new URLSearchParams(t.url.split("?")[1]).get("action")){var e=JSON.parse(t.data.get("data")),r="hcaptcha_brizy_nonce",o=a(".brz-form"),i=n.d.getHCaptchaData(o,r);e.push({name:"h-captcha-response",value:i.response,required:!1}),e.push({name:r,value:i.nonce,required:!1}),t.data.set("data",JSON.stringify(e))}})})();
     1(()=>{"use strict";var t={2981:(t,e,a)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function r(t,e){for(var a=0;a<e.length;a++){var n=e[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var r=a.call(t,e||"default");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}a.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,a,n,r){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(a))&&(e.data+=t.getHCaptchaData(r,n))}},{key:"getHCaptchaData",value:function(t,e){for(var a,n="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(a=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==a?a:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var c,i=o[r];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";n+="&".concat(i,"=").concat(u)}}return n}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:a}}))}catch(t){}var r=t.apply(void 0,a);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:a,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:a,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:a}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(a=null)&&r(e.prototype,a),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,a,n}()}},e={};function a(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,a),o.exports}a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,r=a(2981);(n=jQuery).ajaxPrefilter(function(t){if("brizy_submit_form"===new URLSearchParams(t.url.split("?")[1]).get("action")){var e=JSON.parse(t.data.get("data")),a="hcaptcha_brizy_nonce",o=n(".brz-form"),c=r.d.getHCaptchaData(o,a);e.push({name:"h-captcha-response",value:c.response,required:!1}),e.push({name:a,value:c.nonce,required:!1}),t.data.set("data",JSON.stringify(e))}})})();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-customer-reviews.js

    r3339595 r3359717  
    1515                'hcaptcha',
    1616                ( formSelector ) => {
    17                     return formSelector + ', div#tab-reviews, div#tab-cr_qna, div.cr-qna-list-inl-answ';
     17                    return formSelector + ', div#tab-reviews, div#tab-cr_qna, div.cr-qna-list-inl-answ, div.cr-qna-new-q-form';
    1818                },
    1919            );
     
    3434                'click',
    3535                '#tab-title-reviews a, #tab-title-cr_qna a, ' +
    36                 'button.cr-review-form-continue.cr-review-form-error',
     36                'button.cr-review-form-continue.cr-review-form-error, ' +
     37                'button.cr-qna-ask-button',
    3738                function() {
    3839                    hCaptchaBindEvents();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-customer-reviews.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,e,r)=>{function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function n(t,e){for(var r=0;r<e.length;r++){var a=e[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,o(a.key),a)}}function o(t){var e=function(t,e){if("object"!=a(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==a(e)?e:e+""}r.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,a=[{key:"addHCaptchaData",value:function(e,r,a,n){var o,i=null!==(o=e.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(r))){var c=t.getHCaptchaData(n,a);e.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+a+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,e){var r=t.find('[name="h-captcha-response"]').val();r=r||"";var a=t.find('[name="hcaptcha-widget-id"]').val();a=a||"";var n=t.find('[name="'+e+'"]').val();return{response:r,id:a,nonce:n=n||""}}}],(r=null)&&n(e.prototype,r),a&&n(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,a}()}},e={};function r(a){var n=e[a];if(void 0!==n)return n.exports;var o=e[a]={exports:{}};return t[a](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var a in e)r.o(e,a)&&!r.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var a=r(2981),n=window.hCaptchaCustomerReviews||function(t,e,r){var n={init:function(){wp.hooks.addFilter("hcaptcha.formSelector","hcaptcha",function(t){return t+", div#tab-reviews, div#tab-cr_qna, div.cr-qna-list-inl-answ"}),wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", button.cr-review-form-submit"}),r(n.ready)},ready:function(){r(t).on("click","#tab-title-reviews a, #tab-title-cr_qna a, button.cr-review-form-continue.cr-review-form-error",function(){hCaptchaBindEvents()}),r.ajaxPrefilter(function(t){var e,n=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof n){var o,i=new URLSearchParams(n),c=i.get("action");switch(c){case"cr_submit_review":o=r("#review_form");break;case"cr_new_qna":var u=i.get("questionID");o=r(u?'[data-question="'.concat(u,'"]'):"#cr_qna");break;default:return}a.d.addHCaptchaData(t,c,"hcaptcha_customer_reviews_nonce",o)}})}};return n}(document,window,jQuery);window.hCaptchaCustomerReviews=n,n.init()})();
     1(()=>{"use strict";var t={2981:(t,e,n)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,o(r.key),r)}}function o(t){var e=function(t,e){if("object"!=r(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var a=n.call(t,e||"default");if("object"!=r(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==r(e)?e:e+""}n.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,r=[{key:"addHCaptchaData",value:function(e,n,r,a){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(n))&&(e.data+=t.getHCaptchaData(a,r))}},{key:"getHCaptchaData",value:function(t,e){for(var n,r="",a=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(n=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==n?n:"","hcap_hp_sig","hcap_fst_token"];a<o.length;a++){var c,i=o[a];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";r+="&".concat(i,"=").concat(u)}}return r}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:n}}))}catch(t){}var a=t.apply(void 0,n);return a.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:n,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:n,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:n}}))}catch(t){}}),a};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(n=null)&&a(e.prototype,n),r&&a(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,r}()}},e={};function n(r){var a=e[r];if(void 0!==a)return a.exports;var o=e[r]={exports:{}};return t[r](o,o.exports,n),o.exports}n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var r=n(2981),a=window.hCaptchaCustomerReviews||function(t,e,n){var a={init:function(){wp.hooks.addFilter("hcaptcha.formSelector","hcaptcha",function(t){return t+", div#tab-reviews, div#tab-cr_qna, div.cr-qna-list-inl-answ, div.cr-qna-new-q-form"}),wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", button.cr-review-form-submit"}),n(a.ready)},ready:function(){n(t).on("click","#tab-title-reviews a, #tab-title-cr_qna a, button.cr-review-form-continue.cr-review-form-error, button.cr-qna-ask-button",function(){hCaptchaBindEvents()}),n.ajaxPrefilter(function(t){var e,a=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof a){var o,c=new URLSearchParams(a),i=c.get("action");switch(i){case"cr_submit_review":o=n("#review_form");break;case"cr_new_qna":var u=c.get("questionID");o=n(u?'[data-question="'.concat(u,'"]'):"#cr_qna");break;default:return}r.d.addHCaptchaData(t,i,"hcaptcha_customer_reviews_nonce",o)}})}};return a}(document,window,jQuery);window.hCaptchaCustomerReviews=a,a.init()})();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-divi-email-optin.js

    r3064004 r3359717  
    66    // noinspection JSCheckFunctionSignatures
    77    $.ajaxPrefilter( function( options ) {
     8        // eslint-disable-next-line @wordpress/no-global-active-element
     9        let $form = $( document.activeElement ).closest( 'form' );
     10
     11        $form = $form.length ? $form : $( '.et_pb_newsletter_form form' );
     12
    813        helper.addHCaptchaData(
    914            options,
    1015            'et_pb_submit_subscribe_form',
    1116            'hcaptcha_divi_email_optin_nonce',
    12             $( '.et_pb_newsletter_form form' )
     17            $form
    1318        );
    1419    } );
     20
     21    $( document ).on( 'ajaxSuccess', function( event, xhr, settings ) {
     22        const params = new URLSearchParams( settings.data );
     23
     24        if ( params.get( 'action' ) !== 'et_pb_submit_subscribe_form' ) {
     25            return;
     26        }
     27
     28        window.hCaptchaBindEvents();
     29    } );
    1530}( jQuery ) );
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-divi-email-optin.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var a=r.call(t,e||"default");if("object"!=n(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}r.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,r,n,a){var o,i=null!==(o=e.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(r))){var c=t.getHCaptchaData(a,n);e.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+n+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,e){var r=t.find('[name="h-captcha-response"]').val();r=r||"";var n=t.find('[name="hcaptcha-widget-id"]').val();n=n||"";var a=t.find('[name="'+e+'"]').val();return{response:r,id:n,nonce:a=a||""}}}],(r=null)&&a(e.prototype,r),n&&a(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,n}()}},e={};function r(n){var a=e[n];if(void 0!==a)return a.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,a=r(2981);(n=jQuery).ajaxPrefilter(function(t){a.d.addHCaptchaData(t,"et_pb_submit_subscribe_form","hcaptcha_divi_email_optin_nonce",n(".et_pb_newsletter_form form"))})})();
     1(()=>{"use strict";var t={2981:(t,e,n)=>{function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function r(t,e){for(var n=0;n<e.length;n++){var a=e[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,o(a.key),a)}}function o(t){var e=function(t,e){if("object"!=a(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=a(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==a(e)?e:e+""}n.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,a=[{key:"addHCaptchaData",value:function(e,n,a,r){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(n))&&(e.data+=t.getHCaptchaData(r,a))}},{key:"getHCaptchaData",value:function(t,e){for(var n,a="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(n=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==n?n:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var c,i=o[r];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";a+="&".concat(i,"=").concat(u)}}return a}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:n}}))}catch(t){}var r=t.apply(void 0,n);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:n,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:n,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:n}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(n=null)&&r(e.prototype,n),a&&r(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,a}()}},e={};function n(a){var r=e[a];if(void 0!==r)return r.exports;var o=e[a]={exports:{}};return t[a](o,o.exports,n),o.exports}n.d=(t,e)=>{for(var a in e)n.o(e,a)&&!n.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var a,r=n(2981);(a=jQuery).ajaxPrefilter(function(t){var e=a(document.activeElement).closest("form");e=e.length?e:a(".et_pb_newsletter_form form"),r.d.addHCaptchaData(t,"et_pb_submit_subscribe_form","hcaptcha_divi_email_optin_nonce",e)}),a(document).on("ajaxSuccess",function(t,e,n){"et_pb_submit_subscribe_form"===new URLSearchParams(n.data).get("action")&&window.hCaptchaBindEvents()})})();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-helper.js

    r3114572 r3359717  
     1/* global jQuery */
     2
    13export class helper {
    24    static addHCaptchaData( options, action, nonceName, $node ) {
     
    79        }
    810
    9         const hCaptchaData = helper.getHCaptchaData( $node, nonceName );
    10 
    11         options.data +=
    12             '&h-captcha-response=' + hCaptchaData.response +
    13             '&hcaptcha-widget-id=' + hCaptchaData.id +
    14             '&' + nonceName + '=' + hCaptchaData.nonce;
     11        options.data += helper.getHCaptchaData( $node, nonceName );
    1512    }
    1613
     14    /**
     15     * Get hCaptcha data from a node.
     16     *
     17     * @param {jQuery} $node     Node.
     18     * @param {string} nonceName Nonce name.
     19     * @return {string} Data.
     20     */
    1721    static getHCaptchaData( $node, nonceName ) {
    18         let response = $node.find( '[name="h-captcha-response"]' ).val();
    19         response = response ? response : '';
    20         let id = $node.find( '[name="hcaptcha-widget-id"]' ).val();
    21         id = id ? id : '';
    22         let nonce = $node.find( '[name="' + nonceName + '"]' ).val();
    23         nonce = nonce ? nonce : '';
     22        const hpName = $node.find( '[name^="hcap_hp_"]' ).first().attr( 'name' ) ?? '';
     23        const names = [ 'h-captcha-response', 'hcaptcha-widget-id', nonceName, hpName, 'hcap_hp_sig', 'hcap_fst_token' ];
    2424
    25         return { response, id, nonce };
     25        let data = '';
     26
     27        for ( const name of names ) {
     28            if ( ! name ) {
     29                continue;
     30            }
     31
     32            const val = $node.find( `[name="${ name }"]` ).first().val() ?? '';
     33
     34            data += `&${ name }=${ val }`;
     35        }
     36
     37        return data;
     38    }
     39
     40    /**
     41     * Installs a composable wrapper around window.fetch and dispatches custom events.
     42     * - Does not alter request/response behavior.
     43     * - Returns the original Promise from fetch.
     44     * - Safe to call multiple times (idempotent).
     45     */
     46    static installFetchEvents() {
     47        if ( typeof window === 'undefined' || typeof window.fetch !== 'function' ) {
     48            return;
     49        }
     50
     51        // Prevent double wrapping.
     52        if ( window.__hcapFetchWrapped ) {
     53            return;
     54        }
     55
     56        ( function( prevFetch ) {
     57            window.fetch = function( ...args ) {
     58                // Fire "before" event prior to the actual call.
     59                try {
     60                    window.dispatchEvent(
     61                        new CustomEvent( 'hCaptchaFetch:before', { detail: { args } } )
     62                    );
     63                } catch ( e ) {
     64                    // Never break the chain because of event listener errors.
     65                }
     66
     67                const p = prevFetch( ...args );
     68
     69                // Side-subscribe without altering the returned Promise.
     70                p.then( ( response ) => {
     71                    try {
     72                        window.dispatchEvent(
     73                            new CustomEvent( 'hCaptchaFetch:success', {
     74                                detail: { args, response: response.clone() },
     75                            } )
     76                        );
     77                    } catch ( e ) {
     78                    }
     79                } ).catch( ( error ) => {
     80                    try {
     81                        window.dispatchEvent(
     82                            new CustomEvent( 'hCaptchaFetch:error', { detail: { args, error } } )
     83                        );
     84                    } catch ( e ) {
     85                    }
     86                } ).finally( () => {
     87                    try {
     88                        window.dispatchEvent(
     89                            new CustomEvent( 'hCaptchaFetch:complete', { detail: { args } } )
     90                        );
     91                    } catch ( e ) {
     92                    }
     93                } );
     94
     95                return p;
     96            };
     97        }( window.fetch ) );
     98
     99        // Mark as wrapped (non-enumerable if possible).
     100        try {
     101            Object.defineProperty( window, '__hcapFetchWrapped', {
     102                value: true,
     103                configurable: true,
     104            } );
     105        } catch ( e ) {
     106            // Fallback if defineProperty is restricted.
     107            window.__hcapFetchWrapped = true;
     108        }
    26109    }
    27110}
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-nf.js

    r3200161 r3359717  
    1 /**
    2  * Ninja Forms controller file.
    3  */
     1/* global Marionette, nfRadio, jQuery */
    42
    5 /* global Marionette, nfRadio */
     3const hCaptchaNF = window.hCaptchaNF || ( function( window, $ ) {
     4    const app = {
     5        init() {
     6            // Register Ajax submit button.
     7            wp.hooks.addFilter(
     8                'hcaptcha.ajaxSubmitButton',
     9                'hcaptcha',
     10                app.isAjaxSubmitButton
     11            );
    612
    7 wp.hooks.addFilter(
    8     'hcaptcha.ajaxSubmitButton',
    9     'hcaptcha',
    10     ( isAjaxSubmitButton, submitButtonElement ) => {
    11         if ( submitButtonElement.classList.contains( 'nf-element' ) ) {
    12             return true;
    13         }
    14 
    15         return isAjaxSubmitButton;
    16     }
    17 );
    18 
    19 document.addEventListener( 'DOMContentLoaded', function() {
    20     const HCaptchaFieldController = Marionette.Object.extend( {
    21         initialize() {
    22             // On the Form Submission's field validation.
    23             const submitChannel = nfRadio.channel( 'submit' );
    24             this.listenTo( submitChannel, 'validate:field', this.updateHcaptcha );
    25             this.listenTo( submitChannel, 'validate:field', this.updateHcaptcha );
    26 
    27             // On the Field's model value change.
    28             const fieldsChannel = nfRadio.channel( 'fields' );
    29             this.listenTo( fieldsChannel, 'change:modelValue', this.updateHcaptcha );
     13            document.addEventListener( 'DOMContentLoaded', app.onDomReady );
     14            $.ajaxPrefilter( this.ajaxPrefilter() );
     15            $( document ).on( 'ajaxSuccess', app.ajaxSuccessHandler );
    3016        },
    3117
    32         updateHcaptcha( model ) {
    33             // Only validate a specific fields type.
    34             if ( 'hcaptcha-for-ninja-forms' !== model.get( 'type' ) ) {
     18        isAjaxSubmitButton( isAjaxSubmitButton, submitButtonElement ) {
     19            if ( submitButtonElement.classList.contains( 'nf-element' ) ) {
     20                return true;
     21            }
     22
     23            return isAjaxSubmitButton;
     24        },
     25
     26        // Initialize Ninja Forms field controller listeners when DOM is ready.
     27        onDomReady() {
     28            // Create a Marionette controller mirroring the original behavior but scoped here.
     29            const HCaptchaFieldController = Marionette.Object.extend( {
     30                initialize() {
     31                    // On the Form Submission's field validation.
     32                    const submitChannel = nfRadio.channel( 'submit' );
     33                    this.listenTo( submitChannel, 'validate:field', this.updateHcaptcha );
     34
     35                    // On the Field's model value change.
     36                    const fieldsChannel = nfRadio.channel( 'fields' );
     37                    this.listenTo( fieldsChannel, 'change:modelValue', this.updateHcaptcha );
     38                },
     39
     40                updateHcaptcha( model ) {
     41                    // Only validate a specific fields type.
     42                    if ( 'hcaptcha-for-ninja-forms' !== model.get( 'type' ) ) {
     43                        return;
     44                    }
     45
     46                    // Check if the Model has a value.
     47                    if ( model.get( 'value' ) ) {
     48                        // Remove Error from Model.
     49                        nfRadio.channel( 'fields' ).request(
     50                            'remove:error',
     51                            model.get( 'id' ),
     52                            'required-error'
     53                        );
     54                    } else {
     55                        const fieldId = model.get( 'id' );
     56
     57                        /**
     58                         * @type {HTMLTextAreaElement}
     59                         */
     60                        const hcapResponse = document.querySelector(
     61                            `div[data-field-id="${ fieldId }"] textarea[name="h-captcha-response"]`
     62                        );
     63
     64                        model.set( 'value', hcapResponse?.value );
     65                    }
     66                },
     67            } );
     68
     69            // Instantiate our custom field's controller, defined above.
     70            window.hCaptchaFieldController = new HCaptchaFieldController();
     71        },
     72
     73        // Register Ajax prefilter for NF submissions.
     74        ajaxPrefilter() {
     75            return function( options ) {
     76                const data = options.data ?? '';
     77
     78                if ( typeof data !== 'string' ) {
     79                    return;
     80                }
     81
     82                const urlParams = new URLSearchParams( data );
     83                const action = urlParams.get( 'action' );
     84
     85                if ( 'nf_ajax_submit' !== action ) {
     86                    return;
     87                }
     88
     89                const widgetName = 'hcaptcha-widget-id';
     90                const tokenName = 'hcap_fst_token';
     91                const sigName = 'hcap_hp_sig';
     92
     93                const formId = JSON.parse( urlParams.get( 'formData' ) ).id;
     94                const $form = $( `#nf-form-${ formId }-cont` );
     95                const widget = $form.find( `[name="${ widgetName }"]` ).val() ?? '';
     96                const token = $form.find( `[name="${ tokenName }"]` ).val() ?? '';
     97                const sig = $form.find( `[name="${ sigName }"]` ).val() ?? '';
     98                const hcapHp = $form.find( `[id^="hcap_hp_"]` );
     99
     100                urlParams.set( widgetName, widget );
     101                urlParams.set( tokenName, token );
     102                urlParams.set( sigName, sig );
     103                urlParams.set( hcapHp.attr( 'id' ) ?? '', hcapHp.val() ?? '' );
     104
     105                options.data = urlParams.toString();
     106            };
     107        },
     108
     109        // jQuery ajaxSuccess handler.
     110        ajaxSuccessHandler( event, xhr, settings ) {
     111            const data = settings.data ?? '';
     112
     113            if ( typeof data !== 'string' ) {
    35114                return;
    36115            }
    37116
    38             // Check if the Model has a value.
    39             if ( model.get( 'value' ) ) {
    40                 // Remove Error from Model.
    41                 nfRadio.channel( 'fields' ).request(
    42                     'remove:error',
    43                     model.get( 'id' ),
    44                     'required-error'
    45                 );
    46             } else {
    47                 const fieldId = model.get( 'id' );
     117            const action = new URLSearchParams( data ).get( 'action' );
    48118
    49                 /**
    50                  * @type {HTMLTextAreaElement}
    51                  */
    52                 const hcapResponse = document.querySelector(
    53                     '.h-captcha[data-fieldId="' + fieldId + '"] textarea[name="h-captcha-response"]'
    54                 );
     119            if ( 'nf_ajax_submit' !== action ) {
     120                return;
     121            }
    55122
    56                 model.set( 'value', hcapResponse.value );
    57             }
     123            window.hCaptchaBindEvents();
    58124        },
    59     } );
     125    };
    60126
    61     // Instantiate our custom field's controller, defined above.
    62     window.hCaptchaFieldController = new HCaptchaFieldController();
    63 } );
     127    return app;
     128}( window, jQuery ) );
    64129
    65 /* global jQuery */
     130window.hCaptchaNF = hCaptchaNF;
    66131
    67 ( function( $ ) {
    68     // noinspection JSCheckFunctionSignatures
    69     $.ajaxPrefilter( function( options ) {
    70         const data = options.data ?? '';
    71 
    72         if ( ! ( typeof data === 'string' || data instanceof String ) ) {
    73             return;
    74         }
    75 
    76         if ( ! data.startsWith( 'action=nf_ajax_submit' ) ) {
    77             return;
    78         }
    79 
    80         const urlParams = new URLSearchParams( data );
    81         const formId = JSON.parse( urlParams.get( 'formData' ) ).id;
    82         const $form = $( '#nf-form-' + formId + '-cont' );
    83         let id = $form.find( '[name="hcaptcha-widget-id"]' ).val();
    84         id = id ? id : '';
    85         options.data += '&hcaptcha-widget-id=' + id;
    86     } );
    87 }( jQuery ) );
     132hCaptchaNF.init();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-nf.min.js

    r3339595 r3359717  
    1 (()=>{var a;wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(a,t){return!!t.classList.contains("nf-element")||a}),document.addEventListener("DOMContentLoaded",function(){var a=Marionette.Object.extend({initialize:function(){var a=nfRadio.channel("submit");this.listenTo(a,"validate:field",this.updateHcaptcha),this.listenTo(a,"validate:field",this.updateHcaptcha);var t=nfRadio.channel("fields");this.listenTo(t,"change:modelValue",this.updateHcaptcha)},updateHcaptcha:function(a){if("hcaptcha-for-ninja-forms"===a.get("type"))if(a.get("value"))nfRadio.channel("fields").request("remove:error",a.get("id"),"required-error");else{var t=a.get("id"),e=document.querySelector('.h-captcha[data-fieldId="'+t+'"] textarea[name="h-captcha-response"]');a.set("value",e.value)}}});window.hCaptchaFieldController=new a}),(a=jQuery).ajaxPrefilter(function(t){var e,i=null!==(e=t.data)&&void 0!==e?e:"";if(("string"==typeof i||i instanceof String)&&i.startsWith("action=nf_ajax_submit")){var n=new URLSearchParams(i),c=JSON.parse(n.get("formData")).id,r=a("#nf-form-"+c+"-cont").find('[name="hcaptcha-widget-id"]').val();r=r||"",t.data+="&hcaptcha-widget-id="+r}})})();
     1(()=>{var a=window.hCaptchaNF||function(a,t){var e={init:function(){wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",e.isAjaxSubmitButton),document.addEventListener("DOMContentLoaded",e.onDomReady),t.ajaxPrefilter(this.ajaxPrefilter()),t(document).on("ajaxSuccess",e.ajaxSuccessHandler)},isAjaxSubmitButton:function(a,t){return!!t.classList.contains("nf-element")||a},onDomReady:function(){var t=Marionette.Object.extend({initialize:function(){var a=nfRadio.channel("submit");this.listenTo(a,"validate:field",this.updateHcaptcha);var t=nfRadio.channel("fields");this.listenTo(t,"change:modelValue",this.updateHcaptcha)},updateHcaptcha:function(a){if("hcaptcha-for-ninja-forms"===a.get("type"))if(a.get("value"))nfRadio.channel("fields").request("remove:error",a.get("id"),"required-error");else{var t=a.get("id"),e=document.querySelector('div[data-field-id="'.concat(t,'"] textarea[name="h-captcha-response"]'));a.set("value",null==e?void 0:e.value)}}});a.hCaptchaFieldController=new t},ajaxPrefilter:function(){return function(a){var e,n,i,o,c,d,r=null!==(e=a.data)&&void 0!==e?e:"";if("string"==typeof r){var l=new URLSearchParams(r);if("nf_ajax_submit"===l.get("action")){var u="hcaptcha-widget-id",s="hcap_fst_token",f="hcap_hp_sig",h=JSON.parse(l.get("formData")).id,v=t("#nf-form-".concat(h,"-cont")),p=null!==(n=v.find('[name="'.concat(u,'"]')).val())&&void 0!==n?n:"",m=null!==(i=v.find('[name="'.concat(s,'"]')).val())&&void 0!==i?i:"",j=null!==(o=v.find('[name="'.concat(f,'"]')).val())&&void 0!==o?o:"",g=v.find('[id^="hcap_hp_"]');l.set(u,p),l.set(s,m),l.set(f,j),l.set(null!==(c=g.attr("id"))&&void 0!==c?c:"",null!==(d=g.val())&&void 0!==d?d:""),a.data=l.toString()}}}},ajaxSuccessHandler:function(t,e,n){var i,o=null!==(i=n.data)&&void 0!==i?i:"";"string"==typeof o&&("nf_ajax_submit"===new URLSearchParams(o).get("action")&&a.hCaptchaBindEvents())}};return e}(window,jQuery);window.hCaptchaNF=a,a.init()})();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-passster.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,a,e)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function n(t,a){for(var e=0;e<a.length;e++){var r=a[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,o(r.key),r)}}function o(t){var a=function(t,a){if("object"!=r(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,a||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===a?String:Number)(t)}(t,"string");return"symbol"==r(a)?a:a+""}e.d(a,{d:()=>i});var i=function(){function t(){!function(t,a){if(!(t instanceof a))throw new TypeError("Cannot call a class as a function")}(this,t)}return a=t,r=[{key:"addHCaptchaData",value:function(a,e,r,n){var o,i=null!==(o=a.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(e))){var c=t.getHCaptchaData(n,r);a.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+r+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,a){var e=t.find('[name="h-captcha-response"]').val();e=e||"";var r=t.find('[name="hcaptcha-widget-id"]').val();r=r||"";var n=t.find('[name="'+a+'"]').val();return{response:e,id:r,nonce:n=n||""}}}],(e=null)&&n(a.prototype,e),r&&n(a,r),Object.defineProperty(a,"prototype",{writable:!1}),a;var a,e,r}()}},a={};function e(r){var n=a[r];if(void 0!==n)return n.exports;var o=a[r]={exports:{}};return t[r](o,o.exports,e),o.exports}e.d=(t,a)=>{for(var r in a)e.o(a,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:a[r]})},e.o=(t,a)=>Object.prototype.hasOwnProperty.call(t,a);var r,n=e(2981);wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(t,a){return!!a.classList.contains("passster-submit")||t}),(r=jQuery).ajaxPrefilter(function(t){var a,e=null!==(a=t.data)&&void 0!==a?a:"";if("string"==typeof e){var o=new URLSearchParams(e).get("area");n.d.addHCaptchaData(t,"validate_input","hcaptcha_passster_nonce",r("[data-area="+o+"]").closest("form"))}})})();
     1(()=>{"use strict";var t={2981:(t,e,a)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function r(t,e){for(var a=0;a<e.length;a++){var n=e[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var r=a.call(t,e||"default");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}a.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,a,n,r){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(a))&&(e.data+=t.getHCaptchaData(r,n))}},{key:"getHCaptchaData",value:function(t,e){for(var a,n="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(a=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==a?a:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var c,i=o[r];if(i){var p=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";n+="&".concat(i,"=").concat(p)}}return n}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:a}}))}catch(t){}var r=t.apply(void 0,a);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:a,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:a,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:a}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(a=null)&&r(e.prototype,a),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,a,n}()}},e={};function a(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,a),o.exports}a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,r=a(2981);wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(t,e){return!!e.classList.contains("passster-submit")||t}),(n=jQuery).ajaxPrefilter(function(t){var e,a=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof a){var o=new URLSearchParams(a).get("area");r.d.addHCaptchaData(t,"validate_input","hcaptcha_passster_nonce",n("[data-area="+o+"]").closest("form"))}})})();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-spectra.js

    r3319903 r3359717  
    1 const { fetch: originalFetch } = window;
     1import { helper } from './hcaptcha-helper.js';
    22
    3 // Intercept Spectra form fetch to add hCaptcha data.
    4 window.fetch = async ( ...args ) => {
    5     const [ resource, config ] = args;
     3const hCaptchaSpectra = window.hCaptchaSpectra || ( function( window ) {
     4    let style;
    65
    7     // @param {FormData} body
    8     const body = config.body;
    9     const blockId = body.get( 'block_id' );
    10     const inputName = 'h-captcha-response';
    11     const widgetName = 'hcaptcha-widget-id';
    12     const errorClassName = 'hcaptcha-error-message';
    13     const nonceName = 'hcaptcha_spectra_form_nonce';
    14     const formData = JSON.parse( body.get( 'form_data' ) );
     6    const app = {
     7        init() {
     8            helper.installFetchEvents();
     9            window.addEventListener( 'hCaptchaFetch:before', app.fetchBefore );
     10            window.addEventListener( 'hCaptchaFetch:success', app.fetchSuccess );
     11            window.addEventListener( 'hCaptchaFetch:complete', app.fetchComplete );
     12        },
    1513
    16     const selector = `[name="uagb-form-${ blockId }"]`;
    17     const style = document.createElement( 'style' );
     14        fetchBefore( event ) {
     15            const config = event?.detail?.args?.[ 1 ] ?? {};
     16            const body = config.body;
    1817
    19     style.id = `hcaptcha-style-${ blockId }`;
    20     style.textContent = `
     18            if ( ! ( body instanceof URLSearchParams ) ) {
     19                return;
     20            }
     21
     22            // @param {FormData} body
     23            const blockId = body.get( 'block_id' );
     24            const block = document.querySelector( `.uagb-block-${ blockId }` );
     25
     26            // Remove hCaptcha error message.
     27            const errorMessage = block.querySelector( '.hcaptcha-error-message' );
     28
     29            if ( errorMessage ) {
     30                errorMessage.remove();
     31            }
     32
     33            const responseInputName = 'h-captcha-response';
     34            const formData = JSON.parse( body.get( 'form_data' ) );
     35
     36            if ( 'uagb_process_forms' !== body.get( 'action' ) || formData.hasOwnProperty( responseInputName ) ) {
     37                return;
     38            }
     39
     40            const widgetName = 'hcaptcha-widget-id';
     41            const sigInputName = 'hcap_hp_sig';
     42            const tokenName = 'hcap_fst_token';
     43            const nonceName = 'hcaptcha_spectra_form_nonce';
     44
     45            /**
     46             * @type {HTMLInputElement}
     47             */
     48            const widgetId = block.querySelector( `[name="${ widgetName }"]` );
     49
     50            /**
     51             * @type {HTMLTextAreaElement}
     52             */
     53            const hCaptchaResponse = block.querySelector( `[name="${ responseInputName }"]` );
     54
     55            /**
     56             * @type {HTMLInputElement}
     57             */
     58            const nonce = block.querySelector( `[name="${ nonceName }"]` );
     59
     60            /**
     61             * @type {HTMLInputElement}
     62             */
     63            const hcapHp = block.querySelector( `[id^="hcap_hp_"]` );
     64
     65            /**
     66             * @type {HTMLInputElement}
     67             */
     68            const hcapSig = block.querySelector( `[name="${ sigInputName }"]` );
     69
     70            /**
     71             * @type {HTMLInputElement}
     72             */
     73            const token = block.querySelector( `[name="${ tokenName }"]` );
     74
     75            formData[ widgetName ] = widgetId?.value;
     76            formData[ responseInputName ] = hCaptchaResponse?.value;
     77            formData[ nonceName ] = nonce?.value;
     78            formData[ hcapHp?.id ] = hcapHp?.value;
     79            formData[ sigInputName ] = hcapSig?.value;
     80            formData[ tokenName ] = token?.value;
     81
     82            body.set( 'form_data', JSON.stringify( formData ) );
     83
     84            config.body = body;
     85            event.detail.args.config = config;
     86        },
     87
     88        async fetchSuccess( event ) {
     89            const config = event?.detail?.args?.[ 1 ];
     90            const response = event?.detail?.response;
     91
     92            if ( ! config || ! response ) {
     93                return;
     94            }
     95
     96            const body = config.body;
     97
     98            if ( ! ( body instanceof FormData || body instanceof URLSearchParams ) ) {
     99                return;
     100            }
     101
     102            const responseData = await response.clone().json().catch( () => null );
     103
     104            if ( 'uagb_process_forms' !== body.get( 'action' ) || typeof responseData?.data !== 'string' ) {
     105                return;
     106            }
     107
     108            const blockId = body.get( 'block_id' );
     109            const selector = `[name="uagb-form-${ blockId }"]`;
     110
     111            style = document.createElement( 'style' );
     112            style.id = `hcaptcha-style-${ blockId }`;
     113            style.textContent = `
    21114        ${ selector } {
    22115            display: block !important;
     
    24117`;
    25118
    26     // Remove hCaptcha error message.
    27     const errorMessage = document.querySelector( '.uagb-block-' + blockId + ' .' + errorClassName );
     119            // We have hCaptcha error in responseData.
     120            const styleToAdd = document.getElementById( style.id );
    28121
    29     if ( errorMessage ) {
    30         errorMessage.remove();
    31     }
     122            if ( ! styleToAdd ) {
     123                // Add a style preventing hiding the form.
     124                document.head.appendChild( style );
     125            }
    32126
    33     if ( 'uagb_process_forms' === body.get( 'action' ) && ! formData.hasOwnProperty( inputName ) ) {
    34         /**
    35          * @type {HTMLTextAreaElement}
    36          */
    37         const hCaptchaResponse = document.querySelector( '.uagb-block-' + blockId + ' [name="' + inputName + '"]' );
     127            // Remove previous error message (if exists) in the current block.
     128            const prevError = document.querySelector( '.uagb-block-' + blockId + ' .hcaptcha-error-message' );
    38129
    39         /**
    40          * @type {HTMLInputElement}
    41          */
    42         const id = document.querySelector( '.uagb-block-' + blockId + ' [name="' + widgetName + '"]' );
     130            if ( prevError ) {
     131                prevError.remove();
     132            }
    43133
    44         /**
    45          * @type {HTMLInputElement}
    46          */
    47         const nonce = document.querySelector( '.uagb-block-' + blockId + ' [name="' + nonceName + '"]' );
     134            // Show an error message.
     135            const errorContainer = document.createElement( 'div' );
    48136
    49         if ( hCaptchaResponse ) {
    50             formData[ inputName ] = hCaptchaResponse.value;
    51         }
     137            errorContainer.className = 'hcaptcha-error-message';
     138            errorContainer.textContent = responseData.data;
     139            errorContainer.style.color = 'red';
     140            errorContainer.style.padding = '10px 0';
    52141
    53         if ( id ) {
    54             formData[ widgetName ] = id.value;
    55         }
     142            // Find the form container and append the error message
     143            const hcaptchaContainer = document.querySelector( '.uagb-block-' + blockId + ' h-captcha' );
    56144
    57         formData[ nonceName ] = nonce.value;
     145            if ( hcaptchaContainer ) {
     146                hcaptchaContainer.parentNode.insertBefore( errorContainer, hcaptchaContainer );
     147            }
     148        },
    58149
    59         body.set( 'form_data', JSON.stringify( formData ) );
    60         config.body = body;
    61     }
     150        fetchComplete( event ) {
     151            const config = event?.detail?.args?.[ 1 ] ?? {};
     152            const body = config.body;
    62153
    63     const response = await originalFetch( resource, config );
     154            if ( ! ( body instanceof URLSearchParams ) ) {
     155                return;
     156            }
    64157
    65     // Check if the response contains errors we're interested in.
    66     const responseClone = response.clone();
    67     const responseData = await responseClone.json().catch( () => null );
     158            if ( 'uagb_process_forms' !== body.get( 'action' ) ) {
     159                return;
     160            }
    68161
    69     if ( 'uagb_process_forms' === body.get( 'action' ) && typeof responseData?.data === 'string' ) {
    70         // We have hCaptcha error in responseData.
     162            // Remove a style preventing hiding the form.
     163            const styleToRemove = document.getElementById( style?.id );
    71164
    72         const styleToAdd = document.getElementById( style.id );
     165            if ( styleToRemove ) {
     166                styleToRemove.remove();
     167            }
    73168
    74         if ( ! styleToAdd ) {
    75             // Add a style preventing hiding the form.
    76             document.head.appendChild( style );
    77         }
     169            window.hCaptchaBindEvents();
     170        },
     171    };
    78172
    79         // Show an error message.
    80         const errorContainer = document.createElement( 'div' );
    81         errorContainer.className = errorClassName;
    82         errorContainer.textContent = responseData.data;
    83         errorContainer.style.color = 'red';
    84         errorContainer.style.padding = '10px 0';
     173    return app;
     174}( window ) );
    85175
    86         // Find the form container and append the error message
    87         const hcaptchaContainer = document.querySelector( '.uagb-block-' + blockId + ' h-captcha' );
     176window.hCaptchaSpectra = hCaptchaSpectra;
    88177
    89         if ( hcaptchaContainer ) {
    90             hcaptchaContainer.parentNode.insertBefore( errorContainer, hcaptchaContainer );
    91         }
    92 
    93         // Set the data to 400 for Spectra.
    94         responseData.data = 400;
    95 
    96         // Return the original response despite the error.
    97         return response;
    98     }
    99 
    100     // Remove a style preventing hiding the form.
    101     const styleToRemove = document.getElementById( style.id );
    102 
    103     if ( styleToRemove ) {
    104         styleToRemove.remove();
    105     }
    106 
    107     // If no errors or not the errors we're interested in, return the original response.
    108     return response;
    109 };
     178hCaptchaSpectra.init();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-spectra.min.js

    r3339595 r3359717  
    1 (()=>{function t(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var n,r,o="function"==typeof Symbol?Symbol:{},c=o.iterator||"@@iterator",a=o.toStringTag||"@@toStringTag";function u(t,o,c,a){var u=o&&o.prototype instanceof f?o:f,l=Object.create(u.prototype);return e(l,"_invoke",function(t,e,o){var c,a,u,f=0,l=o||[],d=!1,s={p:0,n:0,v:n,a:p,f:p.bind(n,4),d:function(t,e){return c=t,a=0,u=n,s.n=e,i}};function p(t,e){for(a=t,u=e,r=0;!d&&f&&!o&&r<l.length;r++){var o,c=l[r],p=s.p,y=c[2];t>3?(o=y===e)&&(u=c[(a=c[4])?5:(a=3,3)],c[4]=c[5]=n):c[0]<=p&&((o=t<2&&p<c[1])?(a=0,s.v=e,s.n=c[1]):p<y&&(o=t<3||c[0]>e||e>y)&&(c[4]=t,c[5]=e,s.n=y,a=0))}if(o||t>1)return i;throw d=!0,e}return function(o,l,y){if(f>1)throw TypeError("Generator is already running");for(d&&1===l&&p(l,y),a=l,u=y;(r=a<2?n:u)||!d;){c||(a?a<3?(a>1&&(s.n=-1),p(a,u)):s.n=u:s.v=u);try{if(f=2,c){if(a||(o="next"),r=c[o]){if(!(r=r.call(c,u)))throw TypeError("iterator result is not an object");if(!r.done)return r;u=r.value,a<2&&(a=0)}else 1===a&&(r=c.return)&&r.call(c),a<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),a=1);c=n}else if((r=(d=s.n<0)?u:t.call(e,s))!==i)break}catch(t){c=n,a=1,u=t}finally{f=1}}return{value:r,done:d}}}(t,c,a),!0),l}var i={};function f(){}function l(){}function d(){}r=Object.getPrototypeOf;var s=[][c]?r(r([][c]())):(e(r={},c,function(){return this}),r),p=d.prototype=f.prototype=Object.create(s);function y(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,e(t,a,"GeneratorFunction")),t.prototype=Object.create(p),t}return l.prototype=d,e(p,"constructor",d),e(d,"constructor",l),l.displayName="GeneratorFunction",e(d,a,"GeneratorFunction"),e(p),e(p,a,"Generator"),e(p,c,function(){return this}),e(p,"toString",function(){return"[object Generator]"}),(t=function(){return{w:u,m:y}})()}function e(t,n,r,o){var c=Object.defineProperty;try{c({},"",{})}catch(t){c=0}e=function(t,n,r,o){function a(n,r){e(t,n,function(t){return this._invoke(n,r,t)})}n?c?c(t,n,{value:r,enumerable:!o,configurable:!o,writable:!o}):t[n]=r:(a("next",0),a("throw",1),a("return",2))},e(t,n,r,o)}function n(t,e,n,r,o,c,a){try{var u=t[c](a),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,o)}function r(t){return function(){var e=this,r=arguments;return new Promise(function(o,c){var a=t.apply(e,r);function u(t){n(a,o,c,u,i,"next",t)}function i(t){n(a,o,c,u,i,"throw",t)}u(void 0)})}}var o=window.fetch;window.fetch=r(t().m(function e(){var n,r,c,a,u,i,f,l,d,s,p,y,m,h,b,v,g,w,_,O,S,k,j,E,P=arguments;return t().w(function(t){for(;;)switch(t.n){case 0:for(n=P.length,r=new Array(n),c=0;c<n;c++)r[c]=P[c];return a=r[0],u=r[1],i=u.body,f=i.get("block_id"),l="h-captcha-response",d="hcaptcha-widget-id",s="hcaptcha-error-message",p="hcaptcha_spectra_form_nonce",y=JSON.parse(i.get("form_data")),m='[name="uagb-form-'.concat(f,'"]'),(h=document.createElement("style")).id="hcaptcha-style-".concat(f),h.textContent="\n\t\t".concat(m," {\n\t\t\tdisplay: block !important;\n\t\t}\n"),(b=document.querySelector(".uagb-block-"+f+" ."+s))&&b.remove(),"uagb_process_forms"!==i.get("action")||y.hasOwnProperty(l)||(v=document.querySelector(".uagb-block-"+f+' [name="'+l+'"]'),g=document.querySelector(".uagb-block-"+f+' [name="'+d+'"]'),w=document.querySelector(".uagb-block-"+f+' [name="'+p+'"]'),v&&(y[l]=v.value),g&&(y[d]=g.value),y[p]=w.value,i.set("form_data",JSON.stringify(y)),u.body=i),t.n=1,o(a,u);case 1:return _=t.v,O=_.clone(),t.n=2,O.json().catch(function(){return null});case 2:if(S=t.v,"uagb_process_forms"!==i.get("action")||"string"!=typeof(null==S?void 0:S.data)){t.n=3;break}return document.getElementById(h.id)||document.head.appendChild(h),(k=document.createElement("div")).className=s,k.textContent=S.data,k.style.color="red",k.style.padding="10px 0",(j=document.querySelector(".uagb-block-"+f+" h-captcha"))&&j.parentNode.insertBefore(k,j),S.data=400,t.a(2,_);case 3:return(E=document.getElementById(h.id))&&E.remove(),t.a(2,_)}},e)}))})();
     1(()=>{"use strict";var t={2981:(t,e,n)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,a(r.key),r)}}function a(t){var e=function(t,e){if("object"!=r(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||"default");if("object"!=r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==r(e)?e:e+""}n.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,r=[{key:"addHCaptchaData",value:function(e,n,r,o){var a,c=null!==(a=e.data)&&void 0!==a?a:"";"string"==typeof c&&c.startsWith("action=".concat(n))&&(e.data+=t.getHCaptchaData(o,r))}},{key:"getHCaptchaData",value:function(t,e){for(var n,r="",o=0,a=["h-captcha-response","hcaptcha-widget-id",e,null!==(n=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==n?n:"","hcap_hp_sig","hcap_fst_token"];o<a.length;o++){var c,i=a[o];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";r+="&".concat(i,"=").concat(u)}}return r}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:n}}))}catch(t){}var o=t.apply(void 0,n);return o.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:n,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:n,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:n}}))}catch(t){}}),o};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(n=null)&&o(e.prototype,n),r&&o(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,r}()}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var a=e[r]={exports:{}};return t[r](a,a.exports,n),a.exports}n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var r=n(2981);function o(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var t,e,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",c=n.toStringTag||"@@toStringTag";function i(n,r,o,c){var i=r&&r.prototype instanceof l?r:l,f=Object.create(i.prototype);return a(f,"_invoke",function(n,r,o){var a,c,i,l=0,f=o||[],d=!1,s={p:0,n:0,v:t,a:p,f:p.bind(t,4),d:function(e,n){return a=e,c=0,i=t,s.n=n,u}};function p(n,r){for(c=n,i=r,e=0;!d&&l&&!o&&e<f.length;e++){var o,a=f[e],p=s.p,h=a[2];n>3?(o=h===r)&&(i=a[(c=a[4])?5:(c=3,3)],a[4]=a[5]=t):a[0]<=p&&((o=n<2&&p<a[1])?(c=0,s.v=r,s.n=a[1]):p<h&&(o=n<3||a[0]>r||r>h)&&(a[4]=n,a[5]=r,s.n=h,c=0))}if(o||n>1)return u;throw d=!0,r}return function(o,f,h){if(l>1)throw TypeError("Generator is already running");for(d&&1===f&&p(f,h),c=f,i=h;(e=c<2?t:i)||!d;){a||(c?c<3?(c>1&&(s.n=-1),p(c,i)):s.n=i:s.v=i);try{if(l=2,a){if(c||(o="next"),e=a[o]){if(!(e=e.call(a,i)))throw TypeError("iterator result is not an object");if(!e.done)return e;i=e.value,c<2&&(c=0)}else 1===c&&(e=a.return)&&e.call(a),c<2&&(i=TypeError("The iterator does not provide a '"+o+"' method"),c=1);a=t}else if((e=(d=s.n<0)?i:n.call(r,s))!==u)break}catch(e){a=t,c=1,i=e}finally{l=1}}return{value:e,done:d}}}(n,o,c),!0),f}var u={};function l(){}function f(){}function d(){}e=Object.getPrototypeOf;var s=[][r]?e(e([][r]())):(a(e={},r,function(){return this}),e),p=d.prototype=l.prototype=Object.create(s);function h(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,a(t,c,"GeneratorFunction")),t.prototype=Object.create(p),t}return f.prototype=d,a(p,"constructor",d),a(d,"constructor",f),f.displayName="GeneratorFunction",a(d,c,"GeneratorFunction"),a(p),a(p,c,"Generator"),a(p,r,function(){return this}),a(p,"toString",function(){return"[object Generator]"}),(o=function(){return{w:i,m:h}})()}function a(t,e,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(t){o=0}a=function(t,e,n,r){function c(e,n){a(t,e,function(t){return this._invoke(e,n,t)})}e?o?o(t,e,{value:n,enumerable:!r,configurable:!r,writable:!r}):t[e]=n:(c("next",0),c("throw",1),c("return",2))},a(t,e,n,r)}function c(t,e,n,r,o,a,c){try{var i=t[a](c),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,o)}var i=window.hCaptchaSpectra||function(t){var e,n={init:function(){r.d.installFetchEvents(),t.addEventListener("hCaptchaFetch:before",n.fetchBefore),t.addEventListener("hCaptchaFetch:success",n.fetchSuccess),t.addEventListener("hCaptchaFetch:complete",n.fetchComplete)},fetchBefore:function(t){var e,n,r=null!==(e=null==t||null===(n=t.detail)||void 0===n||null===(n=n.args)||void 0===n?void 0:n[1])&&void 0!==e?e:{},o=r.body;if(o instanceof URLSearchParams){var a=o.get("block_id"),c=document.querySelector(".uagb-block-".concat(a)),i=c.querySelector(".hcaptcha-error-message");i&&i.remove();var u="h-captcha-response",l=JSON.parse(o.get("form_data"));if("uagb_process_forms"===o.get("action")&&!l.hasOwnProperty(u)){var f="hcaptcha-widget-id",d="hcap_hp_sig",s="hcap_fst_token",p="hcaptcha_spectra_form_nonce",h=c.querySelector('[name="'.concat(f,'"]')),v=c.querySelector('[name="'.concat(u,'"]')),y=c.querySelector('[name="'.concat(p,'"]')),m=c.querySelector('[id^="hcap_hp_"]'),b=c.querySelector('[name="'.concat(d,'"]')),g=c.querySelector('[name="'.concat(s,'"]'));l[f]=null==h?void 0:h.value,l[u]=null==v?void 0:v.value,l[p]=null==y?void 0:y.value,l[null==m?void 0:m.id]=null==m?void 0:m.value,l[d]=null==b?void 0:b.value,l[s]=null==g?void 0:g.value,o.set("form_data",JSON.stringify(l)),r.body=o,t.detail.args.config=r}}},fetchSuccess:function(t){return(n=o().m(function n(){var r,a,c,i,u,l,f,d,s,p,h;return o().w(function(n){for(;;)switch(n.n){case 0:if(c=null==t||null===(r=t.detail)||void 0===r||null===(r=r.args)||void 0===r?void 0:r[1],i=null==t||null===(a=t.detail)||void 0===a?void 0:a.response,c&&i){n.n=1;break}return n.a(2);case 1:if((u=c.body)instanceof FormData||u instanceof URLSearchParams){n.n=2;break}return n.a(2);case 2:return n.n=3,i.clone().json().catch(function(){return null});case 3:if(l=n.v,"uagb_process_forms"===u.get("action")&&"string"==typeof(null==l?void 0:l.data)){n.n=4;break}return n.a(2);case 4:f=u.get("block_id"),d='[name="uagb-form-'.concat(f,'"]'),(e=document.createElement("style")).id="hcaptcha-style-".concat(f),e.textContent="\n\t\t".concat(d," {\n\t\t\tdisplay: block !important;\n\t\t}\n"),document.getElementById(e.id)||document.head.appendChild(e),(s=document.querySelector(".uagb-block-"+f+" .hcaptcha-error-message"))&&s.remove(),(p=document.createElement("div")).className="hcaptcha-error-message",p.textContent=l.data,p.style.color="red",p.style.padding="10px 0",(h=document.querySelector(".uagb-block-"+f+" h-captcha"))&&h.parentNode.insertBefore(p,h);case 5:return n.a(2)}},n)}),function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function i(t){c(a,r,o,i,u,"next",t)}function u(t){c(a,r,o,i,u,"throw",t)}i(void 0)})})();var n},fetchComplete:function(n){var r,o,a,c=(null!==(r=null==n||null===(o=n.detail)||void 0===o||null===(o=o.args)||void 0===o?void 0:o[1])&&void 0!==r?r:{}).body;if(c instanceof URLSearchParams&&"uagb_process_forms"===c.get("action")){var i=document.getElementById(null===(a=e)||void 0===a?void 0:a.id);i&&i.remove(),t.hCaptchaBindEvents()}}};return n}(window);window.hCaptchaSpectra=i,i.init()})();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-ultimate-addons.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var a={2981:(a,t,e)=>{function r(a){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},r(a)}function n(a,t){for(var e=0;e<t.length;e++){var r=t[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(a,o(r.key),r)}}function o(a){var t=function(a,t){if("object"!=r(a)||!a)return a;var e=a[Symbol.toPrimitive];if(void 0!==e){var n=e.call(a,t||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(a)}(a,"string");return"symbol"==r(t)?t:t+""}e.d(t,{d:()=>i});var i=function(){function a(){!function(a,t){if(!(a instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a)}return t=a,r=[{key:"addHCaptchaData",value:function(t,e,r,n){var o,i=null!==(o=t.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(e))){var c=a.getHCaptchaData(n,r);t.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+r+"="+c.nonce}}},{key:"getHCaptchaData",value:function(a,t){var e=a.find('[name="h-captcha-response"]').val();e=e||"";var r=a.find('[name="hcaptcha-widget-id"]').val();r=r||"";var n=a.find('[name="'+t+'"]').val();return{response:e,id:r,nonce:n=n||""}}}],(e=null)&&n(t.prototype,e),r&&n(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}()}},t={};function e(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return a[r](o,o.exports,e),o.exports}e.d=(a,t)=>{for(var r in t)e.o(t,r)&&!e.o(a,r)&&Object.defineProperty(a,r,{enumerable:!0,get:t[r]})},e.o=(a,t)=>Object.prototype.hasOwnProperty.call(a,t);var r,n=e(2981);wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(a,t){return!(!t.classList.contains("uael-login-form-submit")&&!t.classList.contains("uael-register-submit"))||a}),(r=jQuery).ajaxPrefilter(function(a){var t,e=null!==(t=a.data)&&void 0!==t?t:"";if("string"==typeof e){var o=new URLSearchParams(e).get("action");if(o){var i;switch(o){case"uael_login_form_submit":i=r(".uael-login-form");break;case"uael_register_user":i=r(".uael-registration-form");break;default:return}n.d.addHCaptchaData(a,"uael_login_form_submit","hcaptcha_login_nonce",i),n.d.addHCaptchaData(a,"uael_register_user","hcaptcha_ultimate_addons_register_nonce",i)}}}),r(document).on("ajaxSuccess",function(a,t,e){var n,o,i=new URLSearchParams(e.data).get("action");if("uael_login_form_submit"===i||"uael_register_user"===i){window.hCaptchaBindEvents();var c=JSON.parse(t.responseText);if(null==c||!c.success){var u=null!==(n=null==c?void 0:c.data)&&void 0!==n?n:"",s=null!==(o=null==u?void 0:u.hCaptchaError)&&void 0!==o?o:"";s&&r("h-captcha").after('<span class="uael-register-field-message"><span class="uael-loginform-error">'+s+"</span></span>")}}})})();
     1(()=>{"use strict";var t={2981:(t,e,a)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function r(t,e){for(var a=0;a<e.length;a++){var n=e[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var r=a.call(t,e||"default");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}a.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,a,n,r){var o,i=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof i&&i.startsWith("action=".concat(a))&&(e.data+=t.getHCaptchaData(r,n))}},{key:"getHCaptchaData",value:function(t,e){for(var a,n="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(a=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==a?a:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var i,c=o[r];if(c){var u=null!==(i=t.find('[name="'.concat(c,'"]')).first().val())&&void 0!==i?i:"";n+="&".concat(c,"=").concat(u)}}return n}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:a}}))}catch(t){}var r=t.apply(void 0,a);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:a,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:a,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:a}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(a=null)&&r(e.prototype,a),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,a,n}()}},e={};function a(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,a),o.exports}a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,r=a(2981);wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(t,e){return!(!e.classList.contains("uael-login-form-submit")&&!e.classList.contains("uael-register-submit"))||t}),(n=jQuery).ajaxPrefilter(function(t){var e,a=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof a){var o=new URLSearchParams(a).get("action");if(o){var i;switch(o){case"uael_login_form_submit":i=n(".uael-login-form");break;case"uael_register_user":i=n(".uael-registration-form");break;default:return}r.d.addHCaptchaData(t,"uael_login_form_submit","hcaptcha_login_nonce",i),r.d.addHCaptchaData(t,"uael_register_user","hcaptcha_ultimate_addons_register_nonce",i)}}}),n(document).on("ajaxSuccess",function(t,e,a){var r,o,i=new URLSearchParams(a.data).get("action");if("uael_login_form_submit"===i||"uael_register_user"===i){window.hCaptchaBindEvents();var c=JSON.parse(e.responseText);if(null==c||!c.success){var u=null!==(r=null==c?void 0:c.data)&&void 0!==r?r:"",s=null!==(o=null==u?void 0:u.hCaptchaError)&&void 0!==o?o:"";s&&n("h-captcha").after('<span class="uael-register-field-message"><span class="uael-loginform-error">'+s+"</span></span>")}}})})();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-wc-block-checkout.js

    r3200161 r3359717  
    1 const { fetch: originalFetch } = window;
    2 const checkoutButtonClass = 'wc-block-components-checkout-place-order-button';
     1import { helper } from './hcaptcha-helper.js';
    32
    4 wp.hooks.addFilter(
    5     'hcaptcha.submitButtonSelector',
    6     'hcaptcha',
    7     ( submitButtonSelector ) => {
    8         return submitButtonSelector + `, .${ checkoutButtonClass }`;
    9     }
    10 );
     3const wcBlockCheckout = window.hCaptchaWCBlockCheckout || ( function( window ) {
     4    const app = {
     5        init() {
     6            const checkoutButtonClass = 'wc-block-components-checkout-place-order-button';
    117
    12 wp.hooks.addFilter(
    13     'hcaptcha.ajaxSubmitButton',
    14     'hcaptcha',
    15     ( isAjaxSubmitButton, submitButtonElement ) => {
    16         if ( submitButtonElement.classList.contains( `${ checkoutButtonClass }` ) ) {
    17             return true;
    18         }
     8            wp.hooks.addFilter(
     9                'hcaptcha.submitButtonSelector',
     10                'hcaptcha',
     11                ( submitButtonSelector ) => {
     12                    return submitButtonSelector + `, .${ checkoutButtonClass }`;
     13                }
     14            );
    1915
    20         return isAjaxSubmitButton;
    21     }
    22 );
     16            wp.hooks.addFilter(
     17                'hcaptcha.ajaxSubmitButton',
     18                'hcaptcha',
     19                ( isAjaxSubmitButton, submitButtonElement ) => {
     20                    if ( submitButtonElement.classList.contains( `${ checkoutButtonClass }` ) ) {
     21                        return true;
     22                    }
    2323
    24 // Intercept WC Checkout form fetch to add hCaptcha data.
    25 window.fetch = async ( ...args ) => {
    26     const [ resource, config ] = args;
     24                    return isAjaxSubmitButton;
     25                }
     26            );
    2727
    28     if ( resource.includes( '/wc/store/v1/checkout' ) ) {
    29         const body = config.body;
    30         const widgetName = 'hcaptcha-widget-id';
    31         const inputName = 'h-captcha-response';
    32         const formData = JSON.parse( body );
    33         const wcCheckoutBlock = document.querySelector( 'div[data-block-name="woocommerce/checkout"]' );
     28            helper.installFetchEvents();
     29            window.addEventListener( 'hCaptchaFetch:before', app.fetchBefore );
     30            window.addEventListener( 'hCaptchaFetch:complete', app.fetchComplete );
     31        },
    3432
    35         /**
    36          * @type {HTMLInputElement}
    37          */
    38         const widgetId = wcCheckoutBlock.querySelector( `[name="${ widgetName }"]` );
     33        fetchBefore( event ) {
     34            const [ resource, config ] = event?.detail?.args;
    3935
    40         /**
    41          * @type {HTMLTextAreaElement}
    42          */
    43         const hCaptchaResponse = wcCheckoutBlock.querySelector( `[name="${ inputName }"]` );
     36            if ( ! resource.includes( '/wc/store/v1/checkout' ) ) {
     37                return;
     38            }
    4439
    45         if ( widgetId && hCaptchaResponse ) {
    46             formData[ widgetName ] = widgetId.value;
    47             formData[ inputName ] = hCaptchaResponse.value;
    48         }
     40            let formData;
    4941
    50         config.body = JSON.stringify( formData );
    51     }
     42            try {
     43                formData = JSON.parse( config.body );
     44            } catch ( e ) {
     45                formData = {};
     46            }
    5247
    53     // noinspection JSCheckFunctionSignatures
    54     return await originalFetch( resource, config );
    55 };
     48            const widgetName = 'hcaptcha-widget-id';
     49            const responseInputName = 'h-captcha-response';
     50            const sigInputName = 'hcap_hp_sig';
     51            const tokenName = 'hcap_fst_token';
     52            const wcCheckoutBlock = document.querySelector( 'div[data-block-name="woocommerce/checkout"]' );
     53
     54            /**
     55             * @type {HTMLInputElement}
     56             */
     57            const widgetId = wcCheckoutBlock.querySelector( `[name="${ widgetName }"]` );
     58
     59            /**
     60             * @type {HTMLTextAreaElement}
     61             */
     62            const hCaptchaResponse = wcCheckoutBlock.querySelector( `[name="${ responseInputName }"]` );
     63
     64            /**
     65             * @type {HTMLInputElement}
     66             */
     67            const hcapHp = wcCheckoutBlock.querySelector( `[id^="hcap_hp_"]` );
     68
     69            /**
     70             * @type {HTMLInputElement}
     71             */
     72            const hcapSig = wcCheckoutBlock.querySelector( `[name="${ sigInputName }"]` );
     73
     74            /**
     75             * @type {HTMLInputElement}
     76             */
     77            const token = wcCheckoutBlock.querySelector( `[name="${ tokenName }"]` );
     78
     79            formData[ widgetName ] = widgetId?.value;
     80            formData[ responseInputName ] = hCaptchaResponse?.value;
     81            formData[ hcapHp.id ] = hcapHp?.value;
     82            formData[ sigInputName ] = hcapSig?.value;
     83            formData[ tokenName ] = token?.value;
     84
     85            config.body = JSON.stringify( formData );
     86
     87            event.detail.args.config = config;
     88        },
     89
     90        fetchComplete( event ) {
     91            const resource = event?.detail?.args?.[ 0 ] ?? '';
     92
     93            if ( ! resource.includes( '/wc/store/v1/checkout' ) ) {
     94                return;
     95            }
     96
     97            window.hCaptchaBindEvents();
     98        },
     99    };
     100
     101    return app;
     102}( window ) );
     103
     104window.hCaptchaWCBlockCheckout = wcBlockCheckout;
     105
     106wcBlockCheckout.init();
  • hcaptcha-for-forms-and-more/tags/4.17.0/assets/js/hcaptcha-wc-block-checkout.min.js

    r3339595 r3359717  
    1 (()=>{function t(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var r,e,o="function"==typeof Symbol?Symbol:{},c=o.iterator||"@@iterator",a=o.toStringTag||"@@toStringTag";function i(t,o,c,a){var i=o&&o.prototype instanceof f?o:f,l=Object.create(i.prototype);return n(l,"_invoke",function(t,n,o){var c,a,i,f=0,l=o||[],p=!1,h={p:0,n:0,v:r,a:s,f:s.bind(r,4),d:function(t,n){return c=t,a=0,i=r,h.n=n,u}};function s(t,n){for(a=t,i=n,e=0;!p&&f&&!o&&e<l.length;e++){var o,c=l[e],s=h.p,v=c[2];t>3?(o=v===n)&&(i=c[(a=c[4])?5:(a=3,3)],c[4]=c[5]=r):c[0]<=s&&((o=t<2&&s<c[1])?(a=0,h.v=n,h.n=c[1]):s<v&&(o=t<3||c[0]>n||n>v)&&(c[4]=t,c[5]=n,h.n=v,a=0))}if(o||t>1)return u;throw p=!0,n}return function(o,l,v){if(f>1)throw TypeError("Generator is already running");for(p&&1===l&&s(l,v),a=l,i=v;(e=a<2?r:i)||!p;){c||(a?a<3?(a>1&&(h.n=-1),s(a,i)):h.n=i:h.v=i);try{if(f=2,c){if(a||(o="next"),e=c[o]){if(!(e=e.call(c,i)))throw TypeError("iterator result is not an object");if(!e.done)return e;i=e.value,a<2&&(a=0)}else 1===a&&(e=c.return)&&e.call(c),a<2&&(i=TypeError("The iterator does not provide a '"+o+"' method"),a=1);c=r}else if((e=(p=h.n<0)?i:t.call(n,h))!==u)break}catch(t){c=r,a=1,i=t}finally{f=1}}return{value:e,done:p}}}(t,c,a),!0),l}var u={};function f(){}function l(){}function p(){}e=Object.getPrototypeOf;var h=[][c]?e(e([][c]())):(n(e={},c,function(){return this}),e),s=p.prototype=f.prototype=Object.create(h);function v(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,p):(t.__proto__=p,n(t,a,"GeneratorFunction")),t.prototype=Object.create(s),t}return l.prototype=p,n(s,"constructor",p),n(p,"constructor",l),l.displayName="GeneratorFunction",n(p,a,"GeneratorFunction"),n(s),n(s,a,"Generator"),n(s,c,function(){return this}),n(s,"toString",function(){return"[object Generator]"}),(t=function(){return{w:i,m:v}})()}function n(t,r,e,o){var c=Object.defineProperty;try{c({},"",{})}catch(t){c=0}n=function(t,r,e,o){function a(r,e){n(t,r,function(t){return this._invoke(r,e,t)})}r?c?c(t,r,{value:e,enumerable:!o,configurable:!o,writable:!o}):t[r]=e:(a("next",0),a("throw",1),a("return",2))},n(t,r,e,o)}function r(t,n,r,e,o,c,a){try{var i=t[c](a),u=i.value}catch(t){return void r(t)}i.done?n(u):Promise.resolve(u).then(e,o)}function e(t){return function(){var n=this,e=arguments;return new Promise(function(o,c){var a=t.apply(n,e);function i(t){r(a,o,c,i,u,"next",t)}function u(t){r(a,o,c,i,u,"throw",t)}i(void 0)})}}var o=window.fetch,c="wc-block-components-checkout-place-order-button";wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", .".concat(c)}),wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(t,n){return!!n.classList.contains("".concat(c))||t}),window.fetch=e(t().m(function n(){var r,e,c,a,i,u,f,l,p,h,s,v,y=arguments;return t().w(function(t){for(;;)switch(t.n){case 0:for(r=y.length,e=new Array(r),c=0;c<r;c++)e[c]=y[c];return a=e[0],i=e[1],a.includes("/wc/store/v1/checkout")&&(u=i.body,f="hcaptcha-widget-id",l="h-captcha-response",p=JSON.parse(u),h=document.querySelector('div[data-block-name="woocommerce/checkout"]'),s=h.querySelector('[name="'.concat(f,'"]')),v=h.querySelector('[name="'.concat(l,'"]')),s&&v&&(p[f]=s.value,p[l]=v.value),i.body=JSON.stringify(p)),t.n=1,o(a,i);case 1:return t.a(2,t.v)}},n)}))})();
     1(()=>{"use strict";var t={2981:(t,e,n)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,a(r.key),r)}}function a(t){var e=function(t,e){if("object"!=r(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||"default");if("object"!=r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==r(e)?e:e+""}n.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,r=[{key:"addHCaptchaData",value:function(e,n,r,o){var a,c=null!==(a=e.data)&&void 0!==a?a:"";"string"==typeof c&&c.startsWith("action=".concat(n))&&(e.data+=t.getHCaptchaData(o,r))}},{key:"getHCaptchaData",value:function(t,e){for(var n,r="",o=0,a=["h-captcha-response","hcaptcha-widget-id",e,null!==(n=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==n?n:"","hcap_hp_sig","hcap_fst_token"];o<a.length;o++){var c,i=a[o];if(i){var l=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";r+="&".concat(i,"=").concat(l)}}return r}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:n}}))}catch(t){}var o=t.apply(void 0,n);return o.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:n,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:n,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:n}}))}catch(t){}}),o};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(n=null)&&o(e.prototype,n),r&&o(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,r}()}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var a=e[r]={exports:{}};return t[r](a,a.exports,n),a.exports}n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var r=n(2981);function o(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,c,i=[],l=!0,u=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(i.push(r.value),i.length!==e);l=!0);}catch(t){u=!0,o=t}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw o}}return i}}(t,e)||function(t,e){if(t){if("string"==typeof t)return a(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var c=window.hCaptchaWCBlockCheckout||function(t){var e={init:function(){var n="wc-block-components-checkout-place-order-button";wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", .".concat(n)}),wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(t,e){return!!e.classList.contains("".concat(n))||t}),r.d.installFetchEvents(),t.addEventListener("hCaptchaFetch:before",e.fetchBefore),t.addEventListener("hCaptchaFetch:complete",e.fetchComplete)},fetchBefore:function(t){var e,n=o(null==t||null===(e=t.detail)||void 0===e?void 0:e.args,2),r=n[0],a=n[1];if(r.includes("/wc/store/v1/checkout")){var c;try{c=JSON.parse(a.body)}catch(t){c={}}var i="hcaptcha-widget-id",l="h-captcha-response",u="hcap_hp_sig",h="hcap_fst_token",f=document.querySelector('div[data-block-name="woocommerce/checkout"]'),d=f.querySelector('[name="'.concat(i,'"]')),p=f.querySelector('[name="'.concat(l,'"]')),s=f.querySelector('[id^="hcap_hp_"]'),v=f.querySelector('[name="'.concat(u,'"]')),y=f.querySelector('[name="'.concat(h,'"]'));c[i]=null==d?void 0:d.value,c[l]=null==p?void 0:p.value,c[s.id]=null==s?void 0:s.value,c[u]=null==v?void 0:v.value,c[h]=null==y?void 0:y.value,a.body=JSON.stringify(c),t.detail.args.config=a}},fetchComplete:function(e){var n,r;(null!==(n=null==e||null===(r=e.detail)||void 0===r||null===(r=r.args)||void 0===r?void 0:r[0])&&void 0!==n?n:"").includes("/wc/store/v1/checkout")&&t.hCaptchaBindEvents()}};return e}(window);window.hCaptchaWCBlockCheckout=c,c.init()})();
  • hcaptcha-for-forms-and-more/tags/4.17.0/changelog.txt

    r3339595 r3359717  
     1= 4.17.0 =
     2* Added a hidden honeypot field and minimum submit time for bot detection before processing hCaptcha. Currently supported for WordPress Core, Avada theme, Contact Form 7, Divi theme, Divi Builder, Essential Addons for Elementor, Extra theme, Elementor, Jetpack, Mailchimp, Ninja Forms, Spectra, WooCommerce, WPForms, Protect Content feature.
     3* Added a notification message on the placeholder when hCaptcha failed to load.
     4* Added hCaptcha error messages to the Divi optin email form.
     5* Added hCaptcha error messages to the JetPack form.
     6* Fix conflict with reCaptcha in Divi Contact form.
     7* Fixed running migrations on a fresh installation.
     8* Fixed updating the migration option on each admin request.
     9* Fixed a fatal error on saving the Integration settings with active plugins having all switches off.
     10* Fixed an issue with several Divi optin email forms on the page.
     11* Fixed activation of Blocksy plugins with any theme.
     12* Fixed refreshing hCaptcha upon failed submission in Jetpack.
     13* Fixed Ninja Forms uncaught type error in JS appeared with some field types.
     14* Fixed Ninja Forms integration when form duplicates are on the same page.
     15
    116= 4.16.0 =
    217* Added integration with Germanized for WooCommerce.
  • hcaptcha-for-forms-and-more/tags/4.17.0/composer.json

    r3339595 r3359717  
    4545    "codeception/module-webdriver": "1.4.1 - 4.0.3",
    4646    "lucatume/function-mocker": "^2.0.0",
    47     "lucatume/wp-browser": "3.7.11 - 4.5.2",
     47    "lucatume/wp-browser": "3.7.11 - 4.5.5",
    4848    "squizlabs/php_codesniffer": "^3.13.2",
    4949    "phpcompatibility/php-compatibility": "^9.3.5",
  • hcaptcha-for-forms-and-more/tags/4.17.0/hcaptcha.php

    r3339595 r3359717  
    1111 * Plugin URI:           https://www.hcaptcha.com/
    1212 * Description:          hCaptcha keeps out bots and spam while putting privacy first. It is a drop-in replacement for reCAPTCHA.
    13  * Version:              4.16.0
     13 * Version:              4.17.0
    1414 * Requires at least:    5.3
    1515 * Requires PHP:         7.2
     
    4040 * Plugin version.
    4141 */
    42 const HCAPTCHA_VERSION = '4.16.0';
     42const HCAPTCHA_VERSION = '4.17.0';
    4343
    4444/**
  • hcaptcha-for-forms-and-more/tags/4.17.0/readme.txt

    r3339595 r3359717  
    55Tested up to: 6.8
    66Requires PHP: 7.2
    7 Stable tag: 4.16.0
     7Stable tag: 4.17.0
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    1010
    1111The strongest CAPTCHA. Switch from reCAPTCHA, Turnstile, etc. for free.
    12 Integrates with 50+ popular plugins.
     12Integrates with 60+ popular plugins and themes.
    1313
    1414== Description ==
     
    756756== Changelog ==
    757757
     758= 4.17.0 =
     759* Added a hidden honeypot field and minimum submit time for bot detection before processing hCaptcha. Currently supported for WordPress Core, Avada theme, Contact Form 7, Divi theme, Divi Builder, Essential Addons for Elementor, Extra theme, Elementor, Jetpack, Mailchimp, Ninja Forms, Spectra, WooCommerce, WPForms, Protect Content feature.
     760* Added a notification message on the placeholder when hCaptcha failed to load.
     761* Added hCaptcha error messages to the Divi optin email form.
     762* Added hCaptcha error messages to the JetPack form.
     763* Fix conflict with reCaptcha in Divi Contact form.
     764* Fixed running migrations on a fresh installation.
     765* Fixed updating the migration option on each admin request.
     766* Fixed a fatal error on saving the Integration settings with active plugins having all switches off.
     767* Fixed an issue with several Divi optin email forms on the page.
     768* Fixed activation of Blocksy plugins with any theme.
     769* Fixed refreshing hCaptcha upon failed submission in Jetpack.
     770* Fixed Ninja Forms uncaught type error in JS appeared with some field types.
     771* Fixed Ninja Forms integration when form duplicates are on the same page.
     772
    758773= 4.16.0 =
    759774* Added integration with Germanized for WooCommerce.
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Abstracts/CommentBase.php

    r3339595 r3359717  
    119119     * Pre-approve comment.
    120120     *
    121      * @param int|string|WP_Error $approved    The approval status. Accepts 1, 0, 'spam', 'trash', or WP_Error.
    122      * @param array               $commentdata Comment data.
     121     * @param int|string|WP_Error $approved     The approval status. Accepts 1, 0, 'spam', 'trash', or WP_Error.
     122     * @param array               $comment_data Comment data.
    123123     *
    124124     * @return int|string|WP_Error
    125125     * @noinspection PhpUnusedParameterInspection
    126126     */
    127     public function pre_comment_approved( $approved, array $commentdata ) {
     127    public function pre_comment_approved( $approved, array $comment_data ) {
    128128        if ( null === $this->result || true === $this->result ) {
    129129            return $approved;
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Avada/Form.php

    r3319903 r3359717  
    1818
    1919    /**
     20     * Script handle.
     21     */
     22    private const HANDLE = 'hcaptcha-avada';
     23
     24    /**
    2025     * Form id.
    2126     *
     
    4146        add_action( 'fusion_element_form_content', [ $this, 'add_hcaptcha' ], 10, 2 );
    4247        add_filter( 'fusion_form_demo_mode', [ $this, 'verify' ] );
     48        add_action( 'wp_print_footer_scripts', [ $this, 'enqueue_scripts' ], 9 );
    4349    }
    4450
     
    127133
    128134        $_POST['hcaptcha-widget-id'] = $form_data['hcaptcha-widget-id'] ?? '';
     135        $_POST['hcap_fst_token']     = $form_data['hcap_fst_token'] ?? '';
     136        $hp_name                     = API::get_hp_name( $form_data );
     137        $_POST[ $hp_name ]           = $form_data[ $hp_name ] ?? '';
     138        $_POST['hcap_hp_sig']        = $form_data['hcap_hp_sig'] ?? '';
    129139
    130140        $result = API::verify( $this->get_entry( $form_data ) );
     
    145155
    146156    /**
     157     * Enqueue scripts.
     158     *
     159     * @return void
     160     */
     161    public function enqueue_scripts(): void {
     162        if ( ! hcaptcha()->form_shown ) {
     163            return;
     164        }
     165
     166        $min = hcap_min_suffix();
     167
     168        wp_enqueue_script(
     169            self::HANDLE,
     170            HCAPTCHA_URL . "/assets/js/hcaptcha-avada$min.js",
     171            [ 'jquery', 'hcaptcha' ],
     172            HCAPTCHA_VERSION,
     173            true
     174        );
     175    }
     176
     177    /**
    147178     * Get entry.
    148179     *
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/CustomerReviews/QuestionAnswer.php

    r3339595 r3359717  
    2121
    2222    /**
     23     * WC product Q&A tab callback.
     24     *
     25     * @var callable
     26     */
     27    private $qna_callback;
     28
     29    /**
     30     * Whether hCaptcha was added.
     31     *
     32     * @var bool
     33     */
     34    protected $has_hcaptcha = false;
     35
     36    /**
     37     * Init hooks.
     38     *
     39     * @return void
     40     */
     41    protected function init_hooks(): void {
     42        parent::init_hooks();
     43
     44        add_filter( 'woocommerce_product_tabs', [ $this, 'product_tabs' ], 20 );
     45
     46        add_action( 'wp_ajax_cr_new_qna', [ $this, 'verify' ], 0 );
     47        add_action( 'wp_ajax_nopriv_cr_new_qna', [ $this, 'verify' ], 0 );
     48    }
     49
     50    /**
     51     * Filter WC product tabs.
     52     *
     53     * @param array|mixed $tabs Tabs.
     54     *
     55     * @return array
     56     */
     57    public function product_tabs( $tabs ): array {
     58        $tabs = (array) $tabs;
     59
     60        if ( ! isset( $tabs['cr_qna'] ) ) {
     61            return $tabs;
     62        }
     63
     64        $this->qna_callback = $tabs['cr_qna']['callback'];
     65
     66        $tabs['cr_qna']['callback'] = [ $this, 'display_qna_tab' ];
     67
     68        return $tabs;
     69    }
     70
     71    /**
     72     * Display Q&A tab.
     73     *
     74     * @param mixed $attributes Attributes.
     75     *
     76     * @return void
     77     */
     78    public function display_qna_tab( $attributes ): void {
     79        ob_start();
     80        call_user_func( $this->qna_callback, $attributes );
     81        $this->add_captcha( self::WC_TEMPLATE_NAME, '', '', [] );
     82    }
     83
     84    /**
    2385     * 'After template part' action.
    2486     * Gets the output buffer after the template part and adds hCaptcha.
     
    39101        $template = ob_get_clean();
    40102
    41         $args = [
    42             'action' => self::ACTION,
    43             'name'   => self::NONCE,
    44             'id'     => [
    45                 'source'  => HCaptcha::get_class_source( __CLASS__ ),
    46                 'form_id' => 'q&a',
    47             ],
    48         ];
     103        if ( ! $this->has_hcaptcha ) {
     104            $this->has_hcaptcha = true;
    49105
    50         // Find the $search string and insert hCaptcha before it.
    51         $search  = '#<div class="cr-review-form-buttons">\s*<button type="button" class="cr-review-form-submit" data-crcptcha=#';
    52         $replace =
    53             "\n" . '<div class="cr-review-form-item">' .
    54             HCaptcha::form( $args ) .
    55             "\n" . '</div>' .
    56             '$0';
     106            $args = [
     107                'action' => self::ACTION,
     108                'name'   => self::NONCE,
     109                'id'     => [
     110                    'source'  => HCaptcha::get_class_source( __CLASS__ ),
     111                    'form_id' => 'q&a',
     112                ],
     113            ];
    57114
    58         $template = preg_replace( $search, $replace, $template );
     115            // Find the $search string and insert hCaptcha before it.
     116            $search   = '#<div class="cr-review-form-buttons">\s*<button type="button" class="cr-review-form-submit" data-crcptcha=#';
     117            $template = preg_replace_callback(
     118                $search,
     119                static function ( array $m ) use ( $args ) {
     120                    return (
     121                        "\n" . '<div class="cr-review-form-item">' .
     122                        HCaptcha::form( $args ) .
     123                        "\n" . '</div>' .
     124                        $m[0]
     125                    );
     126                },
     127                $template
     128            );
     129        }
    59130
    60131        // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
    61132        echo $template;
    62133    }
    63 
    64     /**
    65      * Init hooks.
    66      *
    67      * @return void
    68      */
    69     protected function init_hooks(): void {
    70         parent::init_hooks();
    71 
    72         add_action( 'wp_ajax_cr_new_qna', [ $this, 'verify' ], 0 );
    73         add_action( 'wp_ajax_nopriv_cr_new_qna', [ $this, 'verify' ], 0 );
    74     }
    75134}
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/CustomerReviews/Review.php

    r3339595 r3359717  
    4949
    5050        // Find the $search string and insert hCaptcha before it.
    51         $search  = '<div class="cr-review-form-buttons">';
    52         $replace =
    53             "\n" . '<div class="cr-review-form-item">' .
    54             HCaptcha::form( $args ) .
    55             "\n" . '</div>' .
    56             $search;
    57 
    58         $template = str_replace( $search, $replace, $template );
     51        $search   = '#<div class="cr-review-form-buttons">#';
     52        $template = preg_replace_callback(
     53            $search,
     54            static function ( array $m ) use ( $args ) {
     55                return (
     56                    "\n" . '<div class="cr-review-form-item">' .
     57                    HCaptcha::form( $args ) .
     58                    "\n" . '</div>' .
     59                    $m[0]
     60                );
     61            },
     62            $template
     63        );
    5964
    6065        // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Divi/Contact.php

    r3319903 r3359717  
    6363
    6464        add_filter( 'et_pb_module_shortcode_attributes', [ $this, 'shortcode_attributes' ], 10, 5 );
    65         add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
     65        add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_scripts' ], 20 );
    6666    }
    6767
     
    143143        // Check that the form was submitted and the et_pb_contact_et_number field is empty to protect from spam.
    144144        if ( $nonce_result && isset( $_POST[ $submit_field ] ) && empty( $_POST[ $number_field ] ) ) {
    145             // Remove hcaptcha from current form fields, because Divi compares current and submitted fields.
     145            // Remove hCaptcha fields from current form fields, because Divi compares current and submitted fields.
    146146            $current_form_field  = 'et_pb_contact_email_fields_' . $this->render_count;
    147147            $current_form_fields = filter_input( INPUT_POST, $current_form_field, FILTER_SANITIZE_FULL_SPECIAL_CHARS );
     
    154154                    $fields_data_array,
    155155                    static function ( $item ) {
    156                         return false === strpos( $item['field_id'], 'captcha' );
     156                        return ! preg_match( '/captcha|hcap_hp_|hcap_fst_token/', $item['field_id'] );
    157157                    }
    158158                );
     
    203203     */
    204204    public function enqueue_scripts(): void {
     205        if ( ! hcaptcha()->form_shown ) {
     206            return;
     207        }
     208
     209        wp_dequeue_script( 'et-core-api-spam-recaptcha' );
     210
    205211        $min = hcap_min_suffix();
    206212
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Divi/EmailOptin.php

    r3319903 r3359717  
    8484     */
    8585    public function verify(): void {
    86         $error_message = API::verify_post_html( self::NONCE, self::ACTION );
     86        $error_message = API::verify_post( self::NONCE, self::ACTION );
    8787
    8888        if ( null === $error_message ) {
     
    9090        }
    9191
    92         // It is a bug in a Divi script, which doesn't handle the error message.
    93         et_core_die( esc_html( $error_message ) );
     92        wp_send_json( [ 'error' => $error_message ] );
    9493    }
    9594
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Helpers/API.php

    r3319903 r3359717  
    99
    1010use HCaptcha\AntiSpam\AntiSpam;
     11use WP_Error;
    1112
    1213/**
     
    142143        }
    143144
     145        // Check the honeypot field.
     146        if ( ! self::check_honeypot_field() ) {
     147            $result      = hcap_get_error_messages()['spam'];
     148            $error_codes = [ 'spam' ];
     149
     150            return self::filtered_result( $result, $error_codes );
     151        }
     152
     153        // Check the form submit time token.
     154        $check = self::check_fst_token();
     155
     156        if ( is_wp_error( $check ) ) {
     157            $result      = $check->get_error_message();
     158            $error_codes = $check->get_error_codes();
     159
     160            return self::filtered_result( $result, $error_codes );
     161        }
     162
    144163        $hcaptcha_response_sanitized = htmlspecialchars(
    145164            filter_var( $hcaptcha_response, FILTER_SANITIZE_FULL_SPECIAL_CHARS ),
     
    167186
    168187        return self::process_request( $params );
     188    }
     189
     190    /**
     191     * Get a honeypot field name.
     192     *
     193     * @param array $arr Array of form fields.
     194     *
     195     * @return string
     196     */
     197    public static function get_hp_name( array $arr = [] ): string {
     198        foreach ( array_keys( $arr ) as $key ) {
     199            if ( 'hcap_hp_sig' !== $key && 0 === strpos( $key, 'hcap_hp_' ) ) {
     200                return $key;
     201            }
     202        }
     203
     204        return '';
    169205    }
    170206
     
    296332        return $result;
    297333    }
     334
     335    /**
     336     * Validates the honeypot field for spam prevention.
     337     *
     338     * @return bool True if the honeypot field is valid and empty, false otherwise.
     339     */
     340    private static function check_honeypot_field(): bool {
     341        if ( ! hcaptcha()->settings()->is_on( 'honeypot' ) ) {
     342            return true;
     343        }
     344
     345        // Honeypot check: require valid signature and ensure the honeypot field is empty.
     346        // phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.NonceVerification.Missing
     347        $hp_name      = self::get_hp_name( $_POST );
     348        $hp_value     = Request::filter_input( INPUT_POST, $hp_name );
     349        $hp_signature = Request::filter_input( INPUT_POST, 'hcap_hp_sig' );
     350
     351        // Verify nonce for logged-in users only.
     352        $nonce_verified = ! is_user_logged_in() || wp_verify_nonce( $hp_signature, $hp_name );
     353
     354        $check = $hp_name && $nonce_verified && '' === trim( $hp_value );
     355
     356        /**
     357         * Filters the result of the honeypot field check.
     358         *
     359         * @param bool $check True if the honeypot field is valid and empty, false otherwise.
     360         */
     361        return (bool) apply_filters( 'hcap_check_honeypot_field', $check );
     362    }
     363
     364    /**
     365     * Check Form Submit Time token.
     366     *
     367     * @return true|WP_Error
     368     */
     369    private static function check_fst_token() {
     370        if ( ! hcaptcha()->settings()->is_on( 'set_min_submit_time' ) ) {
     371            return true;
     372        }
     373
     374        /**
     375         * The Form Submit Time object.
     376         *
     377         * @var FormSubmitTime $fst_obj
     378         */
     379        $fst_obj = hcaptcha()->get( FormSubmitTime::class );
     380
     381        if ( ! $fst_obj ) {
     382            return hcap_get_wp_error( 'fst-no-object' );
     383        }
     384
     385        $min_submit_time = hcaptcha()->settings()->get( 'min_submit_time' );
     386
     387        /**
     388         * Filters the result of the Form Submit Time token verification.
     389         *
     390         * @param true|WP_Error $check True, if the Form Submit Time token is valid. WP_Error object otherwise.
     391         */
     392        return apply_filters( 'hcap_verify_fst_token', $fst_obj->verify_token( $min_submit_time ) );
     393    }
    298394}
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Helpers/DB.php

    r3233179 r3359717  
    1616
    1717    /**
    18      * Changes array of items into string of items, separated by comma and sql-escaped
     18     * Changes an array of items into a string of items, separated by comma and sql-escaped
    1919     *
    2020     * @see https://coderwall.com/p/zepnaw
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Helpers/HCaptcha.php

    r3339595 r3359717  
    145145            wp_nonce_field( $args['action'], $args['name'] );
    146146        }
     147
     148        self::honeypot_display();
    147149    }
    148150
     
    179181        $args['id']      = (array) $args['id'];
    180182        $args['id']      = [
    181             'source'  => empty( $args['id']['source'] ) ? self::$default_id['source'] : $args['id']['source'],
     183            'source'  => (array) ( empty( $args['id']['source'] ) ? self::$default_id['source'] : $args['id']['source'] ),
    182184            'form_id' => $args['id']['form_id'] ?? self::$default_id['form_id'],
    183185        ];
     
    185187
    186188        return $args;
     189    }
     190
     191    /**
     192     * Display a honeypot for form submissions.
     193     *
     194     * This method injects a honeypot field with a dynamic name and a signature.
     195     *
     196     * @return void
     197     */
     198    private static function honeypot_display(): void {
     199        if ( ! hcaptcha()->settings()->is_on( 'honeypot' ) ) {
     200            return;
     201        }
     202
     203        $hp_name = self::get_hp_name();
     204        $hp_sig  = wp_create_nonce( $hp_name );
     205
     206        ?>
     207        <label for="<?php echo esc_attr( $hp_name ); ?>"></label>
     208        <input
     209                type="text" id="<?php echo esc_attr( $hp_name ); ?>" name="<?php echo esc_attr( $hp_name ); ?>" value=""
     210                readonly inputmode="none" autocomplete="new-password" tabindex="-1" aria-hidden="true"
     211                style="position:absolute; left:-9999px; top:auto; height:0; width:0; opacity:0;"/>
     212        <input type="hidden" name="hcap_hp_sig" value="<?php echo esc_attr( $hp_sig ); ?>"/>
     213        <?php
     214    }
     215
     216    /**
     217     * Get honeypot name.
     218     * Made as a separate function to be able to mock it in tests.
     219     *
     220     * @return string
     221     */
     222    protected static function get_hp_name(): string {
     223        return 'hcap_hp_' . wp_generate_password( 12, false );
    187224    }
    188225
     
    362399     * Whether form protection is enabled/disabled via hCaptcha widget id.
    363400     *
    364      * Return false(protection disabled) in only one case:
     401     * Return false (protection disabled) in only one case:
    365402     * when $_POST['hcaptcha-widget-id'] contains encoded id with proper hash,
    366403     * and hcap_protect_form filter confirms that the form referenced in widget id is not protected.
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Helpers/Utils.php

    r3339595 r3359717  
    195195        );
    196196    }
     197
     198    /**
     199     * Get a comma-separated list string from an array.
     200     *
     201     * @param array $arr Array containing a list.
     202     * @param bool  $sep Separator of the last element.
     203     *
     204     * @return string
     205     */
     206    public static function list_array( array $arr, bool $sep = true ): string {
     207        $separator = $sep ?
     208            __( 'and', 'wpforms-lite' ) :
     209            __( 'or', 'wpforms-lite' );
     210
     211        $last  = array_slice( $arr, - 1 );
     212        $first = implode( ', ', array_slice( $arr, 0, - 1 ) );
     213        $both  = array_filter( array_merge( [ $first ], $last ) );
     214
     215        return implode( ' ' . $separator . ' ', $both );
     216    }
    197217}
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Jetpack/Base.php

    r3339595 r3359717  
    2929
    3030    /**
     31     * Script handle.
     32     */
     33    private const HANDLE = 'hcaptcha-jetpack';
     34
     35    /**
    3136     * Admin script handle.
    3237     */
     
    7984
    8085        add_filter( 'the_content', [ $this, 'the_content_filter' ] );
     86
     87        add_action( 'wp_print_footer_scripts', [ $this, 'enqueue_scripts' ], 9 );
     88        add_filter( 'script_loader_tag', [ $this, 'add_type_module' ], 10, 3 );
    8189
    8290        if ( ! $this->is_editing_jetpack_form_post() ) {
     
    165173    public function print_hcaptcha_scripts( $status ): bool {
    166174        return true;
     175    }
     176
     177    /**
     178     * Enqueue script on the frontend.
     179     *
     180     * @return void
     181     */
     182    public function enqueue_scripts(): void {
     183        if ( ! hcaptcha()->form_shown ) {
     184            return;
     185        }
     186
     187        $min = hcap_min_suffix();
     188
     189        wp_enqueue_script(
     190            self::HANDLE,
     191            constant( 'HCAPTCHA_URL' ) . "/assets/js/hcaptcha-jetpack$min.js",
     192            [ 'hcaptcha' ],
     193            constant( 'HCAPTCHA_VERSION' ),
     194            true
     195        );
     196    }
     197
     198    /**
     199     * Add type="module" attribute to script tag.
     200     *
     201     * @param string|mixed $tag    Script tag.
     202     * @param string       $handle Script handle.
     203     * @param string       $src    Script source.
     204     *
     205     * @return string
     206     * @noinspection PhpUnusedParameterInspection
     207     */
     208    public function add_type_module( $tag, string $handle, string $src ): string {
     209        $tag = (string) $tag;
     210
     211        if ( self::HANDLE !== $handle ) {
     212            return $tag;
     213        }
     214
     215        return HCaptcha::add_type_module( $tag );
    167216    }
    168217
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Main.php

    r3339595 r3359717  
    2828use HCaptcha\ElementorPro\HCaptchaHandler;
    2929use HCaptcha\EventsManager\Booking;
     30use HCaptcha\Helpers\FormSubmitTime;
    3031use HCaptcha\Helpers\HCaptcha;
    3132use HCaptcha\Helpers\Pages;
     
    159160        ( new Fix() )->init();
    160161
     162        // Needs to be loaded early, as it uses short init ajax.
     163        $this->load( FormSubmitTime::class );
     164
    161165        add_action( 'plugins_loaded', [ $this, 'init_hooks' ], self::LOAD_PRIORITY );
    162166    }
     
    220224        add_action( 'login_head', [ $this, 'login_head' ] );
    221225        add_action( 'wp_print_footer_scripts', [ $this, 'print_footer_scripts' ], 0 );
     226        add_action( 'hcap_protect_form', [ $this, 'allow_honeypot_and_fst' ], 10, 3 );
    222227
    223228        $this->auto_verify = new AutoVerify();
     
    477482        $div_logo_white_url = HCAPTCHA_URL . '/assets/images/hcaptcha-div-logo-white.svg';
    478483        $bg                 = $settings->get_custom_theme_background() ?: 'initial';
     484        $load_fail_msg      = __( 'If you see this message, hCaptcha failed to load due to site errors.', 'hcaptcha-for-forms-and-more' );
    479485
    480486        /* language=CSS */
     
    502508    }
    503509
     510    .h-captcha iframe {
     511        z-index: 1;
     512    }
     513
    504514    .h-captcha::before {
    505         content: \'\';
     515        content: "";
    506516        display: block;
    507517        position: absolute;
     
    511521        border: 1px solid transparent;
    512522        border-radius: 4px;
     523        box-sizing: border-box;
     524    }
     525
     526    .h-captcha::after {
     527        content: "' . $load_fail_msg . '";
     528        font: 13px/1.35 system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
     529        display: block;
     530        position: absolute;
     531        top: 0;
     532        left: 0;
     533        box-sizing: border-box;
     534        color: #ff0000;
     535        opacity: 0;
     536    }
     537
     538    .h-captcha:not(:has(iframe))::after {
     539        animation: hcap-msg-fade-in .3s ease forwards;
     540        animation-delay: 2s;
     541    }
     542   
     543    .h-captcha:has(iframe)::after {
     544        animation: none;
     545        opacity: 0;
     546    }
     547   
     548    @keyframes hcap-msg-fade-in {
     549        to { opacity: 1; }
    513550    }
    514551
     
    519556    }
    520557
     558    .h-captcha[data-size="normal"]::after {
     559        padding: 19px 75px 16px 10px;
     560    }
     561
    521562    .h-captcha[data-size="compact"]::before {
    522563        width: 156px;
    523564        height: 136px;
    524565        background-position: 50% 79%;
     566    }
     567
     568    .h-captcha[data-size="compact"]::after {
     569        padding: 10px 10px 16px 10px;
    525570    }
    526571
     
    555600    }
    556601
    557     .h-captcha[data-size="invisible"]::before {
     602    .h-captcha[data-size="invisible"]::before,
     603    .h-captcha[data-size="invisible"]::after {
    558604        display: none;
    559605    }
     
    796842            [ 'params' => wp_json_encode( $params ) ]
    797843        );
     844    }
     845
     846    /**
     847     * Allow honeypot and FST on the supported forms only.
     848     * At this moment, only some forms can use honeypot and fst anti-spam token protection.
     849     * The supported list will be extended in the future.
     850     *
     851     * @param bool|mixed $value   The protection status of a form.
     852     * @param string[]   $source  The source of the form (plugin, theme, WordPress Core).
     853     * @param int|string $form_id Form id.
     854     *
     855     * @return bool
     856     * @noinspection PhpUnusedParameterInspection
     857     */
     858    public function allow_honeypot_and_fst( $value, array $source, $form_id ): bool {
     859        $value = (bool) $value;
     860
     861        $supported_forms = [
     862            [ General::class ], // General settings page.
     863            [ 'WordPress' ], // WordPress Core.
     864            [ 'Avada' ], // Avada theme.
     865            [ 'contact-form-7/wp-contact-form-7.php' ], // Contact Form 7.
     866            [ 'Divi' ], // Divi theme.
     867            [ 'divi-builder/divi-builder.php' ], // Divi Builder.
     868            [ 'essential-addons-for-elementor-lite/essential_adons_elementor.php' ], // Essential Addons for Elementor.
     869            [ 'Extra' ], // Extra theme.
     870            [ 'elementor-pro/elementor-pro.php' ], // Elementor.
     871            [ 'jetpack/jetpack.php' ], // JetPack.
     872            [ 'mailchimp-for-wp/mailchimp-for-wp.php' ], // MailChimp.
     873            [ 'ninja-forms/ninja-forms.php' ], // Ninja Forms.
     874            [ 'woocommerce/woocommerce.php' ], // WooCommerce.
     875            [ 'wpforms/wpforms.php', 'wpforms-lite/wpforms.php' ], // WPForms.
     876            [ 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php' ], // Spectra.
     877            [ hcaptcha()->settings()->get_plugin_name() ], // Protect Content.
     878        ];
     879
     880        if ( ! in_array( $source, $supported_forms, true ) ) {
     881            hcaptcha()->settings()->set( 'honeypot', [ '' ] );
     882            hcaptcha()->settings()->set( 'set_min_submit_time', [ '' ] );
     883        }
     884
     885        return $value;
    798886    }
    799887
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Migrations/Migrations.php

    r3283168 r3359717  
    11<?php
    22/**
    3  * Migrations class file.
     3 * Migration class file.
    44 *
    55 * @package hcaptcha-wp
     
    7878        }
    7979
     80        $this->maybe_prepare_migration_option();
    8081        $this->init_hooks();
    8182    }
     
    112113        $this->check_plugin_update( $migrated );
    113114
    114         $migrations       = array_filter(
    115             get_class_methods( $this ),
    116             static function ( $migration ) {
    117                 return 0 === strpos( $migration, 'migrate_' );
    118             }
    119         );
    120115        $upgrade_versions = [];
    121116
    122         foreach ( $migrations as $migration ) {
     117        foreach ( $this->get_migrations() as $migration ) {
    123118            $upgrade_version    = $this->get_upgrade_version( $migration );
    124119            $upgrade_versions[] = $upgrade_version;
     
    153148        }
    154149
    155         // Remove any keys that are not in the migrations list.
     150        // Set the current version update time if it does not exist.
     151        $current_version_migrated = $migrated[ self::PLUGIN_VERSION ] ?? time();
     152
     153        // Remove any keys that are not in the migration list.
    156154        $migrated = array_intersect_key( $migrated, array_flip( $upgrade_versions ) );
    157155
    158         // Store the current version.
    159         $migrated[ self::PLUGIN_VERSION ] = $migrated[ self::PLUGIN_VERSION ] ?? time();
     156        // Restore the current version update time.
     157        // Prevents updating the option on each request.
     158        $migrated[ self::PLUGIN_VERSION ] = $current_version_migrated;
    160159
    161160        // Sort the array by version.
     
    182181
    183182    /**
     183     * Maybe prepare the migration option.
     184     */
     185    private function maybe_prepare_migration_option(): void {
     186        $migrated = get_option( self::MIGRATED_VERSIONS_OPTION_NAME );
     187
     188        // If the option is an array, it means that it is already prepared.
     189        if ( is_array( $migrated ) ) {
     190            return;
     191        }
     192
     193        $migrated = [];
     194
     195        foreach ( $this->get_migrations() as $migration ) {
     196            $upgrade_version = $this->get_upgrade_version( $migration );
     197
     198            $migrated[ $upgrade_version ] = 0;
     199        }
     200
     201        // Sort the array by version.
     202        uksort( $migrated, 'version_compare' );
     203
     204        update_option( self::MIGRATED_VERSIONS_OPTION_NAME, $migrated );
     205    }
     206
     207    /**
    184208     * Send plugin statistics.
    185209     *
     
    217241     */
    218242    private function get_upgrade_version( string $method ): string {
    219         // Find only the digits and underscores to get version number.
     243        // Find only the digits and underscores to get the version number.
    220244        if ( ! preg_match( '/(\d_?)+/', $method, $matches ) ) {
    221245            // @codeCoverageIgnoreStart
     
    239263
    240264    /**
    241      * Output message into the log file.
     265     * Output the message into the log file.
    242266     *
    243267     * @param string $message Message to log.
     
    344368        }
    345369
    346         // This two lines is a precaution for a case if options in a new format already exist.
     370        // These two lines is a precaution for a case if options in a new format already exist.
    347371        $options = get_option( PluginSettingsBase::OPTION_NAME, [] );
    348372        $options = array_merge( $new_options, $options );
     
    572596
    573597    /**
    574      * Add index to a table.
     598     * Add an index to a table.
    575599     *
    576600     * @param string $table_name Table.
     
    605629        // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
    606630    }
     631
     632    /**
     633     * Get migrations.
     634     *
     635     * @return string[]
     636     */
     637    private function get_migrations(): array {
     638        return array_filter(
     639            get_class_methods( $this ),
     640            static function ( $migration ) {
     641                return 0 === strpos( $migration, 'migrate_' );
     642            }
     643        );
     644    }
    607645}
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/NF/NF.php

    r3215681 r3359717  
    7676        add_filter( "ninja_forms_localize_field_{$name}_preview", [ $this, 'localize_field' ] );
    7777        add_action( 'wp_print_footer_scripts', [ $this, 'nf_captcha_script' ], 9 );
     78        add_filter( 'script_loader_tag', [ $this, 'add_type_module' ], 10, 3 );
    7879    }
    7980
     
    9394
    9495        // Fix bug in Ninja forms.
    95         // For template script id, they expect field->_name in admin, but field->_type on frontend.
     96        // For template script id, they expect field->_name in admin, but field->_type on the frontend.
    9697        // It works for NF fields as all fields have _name === _type.
    9798
     
    130131                    $search,
    131132                    $search . ' style="z-index: 2;"',
    132                     $this->get_hcaptcha( (int) $field['id'] )
     133                    $this->get_hcaptcha( $field['id'] )
    133134                );
    134135
     
    237238        $field = (array) $field;
    238239
    239         $field['settings']['hcaptcha'] = $field['settings']['hcaptcha'] ?? $this->get_hcaptcha( (int) $field['id'] );
     240        $field['settings']['hcaptcha'] = $field['settings']['hcaptcha'] ?? $this->get_hcaptcha( $field['id'] );
    240241
    241242        // Mark hCaptcha as shown in any case. Needed on the preview page.
     
    248249     * Get hCaptcha.
    249250     *
    250      * @param int $field_id Field id.
     251     * @param int|string $field_id Field id.
    251252     *
    252253     * @return string
    253254     */
    254     private function get_hcaptcha( int $field_id ): string {
     255    private function get_hcaptcha( $field_id ): string {
    255256        $hcaptcha_id = uniqid( 'hcaptcha-nf-', true );
    256257
     
    288289        );
    289290    }
     291
     292    /**
     293     * Add type="module" attribute to script tag.
     294     *
     295     * @param string|mixed $tag    Script tag.
     296     * @param string       $handle Script handle.
     297     * @param string       $src    Script source.
     298     *
     299     * @return string
     300     * @noinspection PhpUnusedParameterInspection
     301     */
     302    public function add_type_module( $tag, string $handle, string $src ): string {
     303        $tag = (string) $tag;
     304
     305        if ( self::HANDLE !== $handle ) {
     306            return $tag;
     307        }
     308
     309        return HCaptcha::add_type_module( $tag );
     310    }
    290311}
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/ProtectContent/ProtectContent.php

    r3319903 r3359717  
    123123     */
    124124    protected function verify(): string {
     125        // It is always too fast with Pro.
     126        hcaptcha()->settings()->set( 'set_min_submit_time', [ '' ] );
     127
    125128        $error_message = API::verify_post( self::NONCE, self::ACTION );
    126129
     
    437440                    'size'   => 'normal',
    438441                    'id'     => [
    439                         'source'  => hcaptcha()->settings()->get_plugin_name(),
     442                        'source'  => [ hcaptcha()->settings()->get_plugin_name() ],
    440443                        'form_id' => 'protect',
    441444                    ],
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Settings/Abstracts/SettingsBase.php

    r3339595 r3359717  
    6060     * Form fields.
    6161     *
    62      * @var array
    63      */
    64     protected $form_fields = [];
     62     * @var array|null
     63     */
     64    protected $form_fields;
    6565
    6666    /**
     
    470470     */
    471471    protected function form_fields(): array {
    472         if ( empty( $this->form_fields ) ) {
    473             $this->init_form_fields();
    474             array_walk( $this->form_fields, [ $this, 'set_defaults' ] );
    475         }
     472        if ( null !== $this->form_fields ) {
     473            return $this->form_fields;
     474        }
     475
     476        $this->init_form_fields();
     477        array_walk( $this->form_fields, [ $this, 'set_defaults' ] );
     478
     479        /**
     480         * Filter the form fields.
     481         *
     482         * @param array $form_fields Form fields.
     483         * @param array $this        Settings class instance.
     484         */
     485        $this->form_fields = (array) apply_filters( 'hcap_form_fields', $this->form_fields, $this );
    476486
    477487        return $this->form_fields;
     
    925935     */
    926936    public function sanitize_option_callback( $settings ): array {
     937        $settings = (array) $settings;
     938
    927939        foreach ( $settings as $key => $setting ) {
    928940            if ( ! isset( $this->form_fields[ $key ] ) ) {
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Settings/General.php

    r3339595 r3359717  
    535535                'helper'  => __( 'Protect content of listed URLs. Please specify one URL per line. You may use regular expressions.', 'hcaptcha-for-forms-and-more' ),
    536536            ],
     537            'set_min_submit_time'  => [
     538                'label'   => __( 'Token and Honeypot', 'hcaptcha-for-forms-and-more' ),
     539                'type'    => 'checkbox',
     540                'section' => self::SECTION_ANTISPAM,
     541                'options' => [
     542                    'on' => __( 'Set Minimum Time', 'hcaptcha-for-forms-and-more' ),
     543                ],
     544                'helper'  => __( 'Set a minimum amount of time a user must spend on a form before submitting.', 'hcaptcha-for-forms-and-more' ),
     545            ],
     546            'min_submit_time'      => [
     547                'label'   => __( 'Minimum Time to Submit the Form, sec', 'hcaptcha-for-forms-and-more' ),
     548                'type'    => 'number',
     549                'section' => self::SECTION_ANTISPAM,
     550                'default' => 2,
     551                'min'     => 1,
     552                'helper'  => __( 'Set a minimum amount of time a user must spend on a form before submitting.', 'hcaptcha-for-forms-and-more' ),
     553            ],
     554            'honeypot'             => [
     555                'type'    => 'checkbox',
     556                'section' => self::SECTION_ANTISPAM,
     557                'options' => [
     558                    'on' => __( 'Enable Honeypot Field', 'hcaptcha-for-forms-and-more' ),
     559                ],
     560                'helper'  => __( 'Add a honeypot field to submitted forms for early bot prevention.', 'hcaptcha-for-forms-and-more' ),
     561            ],
    537562            'antispam'             => [
    538                 'label'   => __( 'Enable anti-spam check', 'hcaptcha-for-forms-and-more' ),
     563                'label'   => __( 'Anti-Spam check', 'hcaptcha-for-forms-and-more' ),
    539564                'type'    => 'checkbox',
    540565                'section' => self::SECTION_ANTISPAM,
    541566                'options' => [
    542                     'on' => __( 'Anti-spam check', 'hcaptcha-for-forms-and-more' ),
     567                    'on' => __( 'Enable Anti-Spam check', 'hcaptcha-for-forms-and-more' ),
    543568                ],
    544569                'helper'  => __( 'Enable anti-spam check of submitted forms.', 'hcaptcha-for-forms-and-more' ),
    545570            ],
    546571            'antispam_provider'    => [
    547                 'label'   => __( 'Anti-spam provider', 'hcaptcha-for-forms-and-more' ),
     572                'label'   => __( 'Anti-Spam Provider', 'hcaptcha-for-forms-and-more' ),
    548573                'type'    => 'select',
    549574                'section' => self::SECTION_ANTISPAM,
     
    593618                    'on' => __( 'Remove Data on Uninstall', 'hcaptcha-for-forms-and-more' ),
    594619                ],
    595                 'default' => '',
    596620                'helper'  => __( 'When enabled, all plugin data will be removed when uninstalling the plugin.', 'hcaptcha-for-forms-and-more' ),
    597621            ],
     
    605629            ],
    606630            'login_limit'          => [
    607                 'label'   => __( 'Login attempts before hCaptcha', 'hcaptcha-for-forms-and-more' ),
     631                'label'   => __( 'Login Attempts Before hCaptcha', 'hcaptcha-for-forms-and-more' ),
    608632                'type'    => 'number',
    609633                'section' => self::SECTION_OTHER,
     
    613637            ],
    614638            'login_interval'       => [
    615                 'label'   => __( 'Failed login attempts interval, min', 'hcaptcha-for-forms-and-more' ),
     639                'label'   => __( 'Failed Login Attempts Interval, min', 'hcaptcha-for-forms-and-more' ),
    616640                'type'    => 'number',
    617641                'section' => self::SECTION_OTHER,
     
    621645            ],
    622646            'delay'                => [
    623                 'label'   => __( 'Delay showing hCaptcha, ms', 'hcaptcha-for-forms-and-more' ),
     647                'label'   => __( 'Delay Showing hCaptcha, ms', 'hcaptcha-for-forms-and-more' ),
    624648                'type'    => 'number',
    625649                'section' => self::SECTION_OTHER,
     
    9941018        // phpcs:enable WordPress.Security.NonceVerification.Missing
    9951019
     1020        add_filter( 'hcap_check_honeypot_field', '__return_true' );
     1021        add_filter( 'hcap_verify_fst_token', '__return_true' );
     1022
    9961023        $result = API::verify_request( $hcaptcha_response );
    9971024
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Settings/Integrations.php

    r3339595 r3359717  
    99
    1010use HCaptcha\AntiSpam\AntiSpam;
     11use HCaptcha\AntiSpam\Honeypot;
    1112use HCaptcha\Helpers\Utils;
    1213use KAGG\Settings\Abstracts\SettingsBase;
     
    187188    /**
    188189     * Filter list of plugin to activate.
     190     * Proceed with the special case for blocksy companion plugins.
     191     * Companion plugins produce a fatal error when activated together.
    189192     *
    190193     * @param array|mixed $plugins    List of plugins.
     
    197200        $plugins = (array) $plugins;
    198201
    199         // Companion plugins produce a fatal error when activated together.
    200202        $companions = [
    201203            'blocksy-companion-pro/blocksy-companion.php',
    202204            'blocksy-companion/blocksy-companion.php',
    203205        ];
     206
     207        if ( ! array_intersect( $plugins, $companions ) ) {
     208            return $plugins;
     209        }
    204210
    205211        // Remove Companion plugins from the list to activate.
     
    18521858     * @return array The updated form field data containing antispam configurations.
    18531859     */
    1854     private function prepare_antispam_data( string $status, array $form_field ): array {
     1860    protected function prepare_antispam_data( string $status, array $form_field ): array {
    18551861        static $all_protected_forms;
    18561862
    18571863        if ( ! $all_protected_forms ) {
    1858             $all_protected_forms = AntiSpam::get_protected_forms();
     1864            $all_protected_forms = array_merge( Honeypot::get_protected_forms(), AntiSpam::get_protected_forms() );
    18591865        }
    18601866
     
    18661872            }
    18671873
    1868             $helper = 'hcaptcha' === $type
    1869                 ? __( 'The form is protected by the hCaptcha antispam service.', 'hcaptcha-for-forms-and-more' )
    1870                 : __( 'The form is protected by the native antispam service.', 'hcaptcha-for-forms-and-more' );
    1871 
    18721874            foreach ( $protected_forms[ $status ] as $form ) {
    18731875                if (
    18741876                    'native' === $type ||
    1875                     ( 'hcaptcha' === $type && $settings->is( $status, $form ) )
     1877                    ( 'hcaptcha' === $type && $settings->is( $status, $form ) ) ||
     1878                    ( 'honeypot' === $type && $settings->is( $status, $form ) )
    18761879                ) {
    1877                     $form_field['data'][ $form ]    = [ 'antispam' => $type ];
    1878                     $form_field['helpers'][ $form ] = $helper;
     1880                    $form_field = $this->prepare_form_field_antispam_data( $form_field, $form, $type );
    18791881                }
    18801882            }
    18811883        }
    18821884
     1885        return $this->format_form_antispam_helpers( $form_field );
     1886    }
     1887
     1888    /**
     1889     * Prepare form field antispam data.
     1890     *
     1891     * @param array  $form_field Form field.
     1892     * @param string $form       Form name.
     1893     * @param string $type       Antispam type.
     1894     *
     1895     * @return array
     1896     */
     1897    private function prepare_form_field_antispam_data( array $form_field, string $form, string $type ): array {
     1898        $form_field['data'][ $form ]['antispam']         = '';
     1899        $form_field['data'][ $form ][ "antispam-$type" ] = '';
     1900        $form_field['helpers'][ $form ][]                = $type;
     1901
    18831902        return $form_field;
    18841903    }
     1904
     1905    /**
     1906     * Format antispam helpers.
     1907     *
     1908     * @param array $form_field Form field.
     1909     *
     1910     * @return array
     1911     */
     1912    private function format_form_antispam_helpers( array $form_field ): array {
     1913        if ( ! isset( $form_field['helpers'] ) ) {
     1914            return $form_field;
     1915        }
     1916
     1917        $helpers = [
     1918            'honeypot' => __( 'hCaptcha honeypot', 'hcaptcha-for-forms-and-more' ),
     1919            'native'   => __( 'native antispam service', 'hcaptcha-for-forms-and-more' ),
     1920            'hcaptcha' => __( 'hCaptcha antispam service', 'hcaptcha-for-forms-and-more' ),
     1921        ];
     1922
     1923        foreach ( $form_field['helpers'] as $form => $helper_arr ) {
     1924            $helper_arr = array_map(
     1925                static function ( $type ) use ( $helpers ) {
     1926                    return $helpers[ $type ];
     1927                },
     1928                $helper_arr
     1929            );
     1930
     1931            $helper = sprintf(
     1932            /* translators: 1: form protection methods. */
     1933                __( 'The form is protected by the %1$s.', 'hcaptcha-for-forms-and-more' ),
     1934                Utils::list_array( $helper_arr )
     1935            );
     1936
     1937            $form_field['helpers'][ $form ] = $helper;
     1938        }
     1939
     1940        return $form_field;
     1941    }
    18851942}
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Settings/ListPageBase.php

    r3265103 r3359717  
    348348     * Includes:
    349349     * 1. A list of date filter options for the datepicker module.
    350      * 2. Currently selected filter or date range values. Last "X" days, or i.e. Feb 8, 2023 - Mar 9, 2023.
     350     * 2. Currently selected filter or date range values.
     351     *    Last "X" days, or i.e., Feb 8, 2023 - Mar 9, 2023.
    351352     * 3. Assigned timespan dates.
    352353     *
     
    402403        $dates = (string) filter_input( INPUT_GET, 'date', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
    403404
    404         // Return default timespan if dates are empty.
     405        // Return the default timespan if dates are empty.
    405406        if ( empty( $dates ) ) {
    406407            return $this->get_timespan_dates( self::DEFAULT_TIMESPAN_DAYS );
     
    411412        [ $start_date, $end_date ] = explode( self::TIMESPAN_DELIMITER, $dates );
    412413
    413         // Return default timespan if the start date is more recent than the end date.
     414        // Return the default timespan if the start date is more recent than the end date.
    414415        if ( strtotime( $start_date ) > strtotime( $end_date ) ) {
    415416            return $this->get_timespan_dates( self::DEFAULT_TIMESPAN_DAYS );
     
    427428        }
    428429
    429         // Set time to 0:0:0 for start date and 23:59:59 for end date.
     430        // Set time to 0:0:0 for the start date and 23:59:59 for the end date.
    430431        $start_date = $start_date->setTime( 0, 0 );
    431432        $end_date   = $end_date->setTime( 23, 59, 59 );
     
    434435        $current_date = date_create_immutable( 'now', $timezone )->setTime( 23, 59, 59 );
    435436
    436         // Calculate day difference only if the end date is equal to the current date.
     437        // Calculate the day difference only if the end date is equal to the current date.
    437438        if ( ! $current_date->diff( $end_date )->format( '%a' ) ) {
    438439            $days_diff = $end_date->diff( $start_date )->format( '%a' );
     
    476477        [ $timespan_key, $timespan_label ] = $this->get_date_filter_choices( $days );
    477478
    478         // Bail early, if the given number of days is NOT a number nor a numeric string.
     479        // Bail early if the given number of days is NOT a number nor a numeric string.
    479480        if ( ! is_numeric( $days ) ) {
    480481            return [ '', '', $timespan_key, $timespan_label ];
     
    501502            $end_date,       // WP timezone.
    502503            $timespan_key,   // i.e. 30.
    503             $timespan_label, // i.e. Last 30 days.
     504            $timespan_label, // i.e., Last 30 days.
    504505        ];
    505506    }
     
    525526        ];
    526527
    527         // Bail early, and return the full list of options.
     528        // Bail early and return the full list of options.
    528529        if ( is_null( $key ) ) {
    529530            return $choices;
     
    547548     */
    548549    private function concat_dates( $start_date, $end_date, $fallback = '' ) {
    549         // Bail early, if the given dates are not valid.
     550        // Bail early if the given dates are not valid.
    550551        if ( ! ( $start_date instanceof DateTimeImmutable ) || ! ( $end_date instanceof DateTimeImmutable ) ) {
    551552            return $fallback;
     
    562563
    563564    /**
    564      * Get the ISO 639-2 Language Code from user/site locale.
     565     * Get the ISO 639-2 Language Code from the user / site locale.
    565566     *
    566567     * @see   http://www.loc.gov/standards/iso639-2/php/code_list.php
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Settings/PluginSettingsBase.php

    r3283168 r3359717  
    107107
    108108    /**
    109      * Get plugin base name.
     109     * Get a plugin base name.
    110110     *
    111111     * @return string
     
    176176
    177177    /**
    178      * Show settings page.
     178     * Show the settings page.
    179179     *
    180180     * @return void
     
    206206
    207207    /**
    208      * Show submit button in any place of the form.
     208     * Show the submit button in any place of the form.
    209209     *
    210210     * @return void
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Settings/Settings.php

    r3283168 r3359717  
    1616 * Class Settings
    1717 *
    18  * The central point to get settings from.
     18 * The central point is to get settings from.
    1919 */
    2020class Settings implements SettingsInterface {
     
    115115
    116116    /**
    117      * Get active tab name.
     117     * Get an active tab name.
    118118     *
    119119     * @return string
     
    126126
    127127    /**
    128      * Get plugin name.
     128     * Get the plugin name.
    129129     *
    130130     * @return string
     
    235235
    236236    /**
    237      * Check whether option value equals to the compared one.
     237     * Check whether the option value equals to the compared one.
    238238     *
    239239     * @param string $key     Setting name.
     
    253253
    254254    /**
    255      * Check whether option value is 'on' or just non-empty.
     255     * Check whether the option value is 'on' or just non-empty.
    256256     *
    257257     * @param string $key Setting name.
     
    260260     */
    261261    public function is_on( string $key ): bool {
    262         return ! empty( $this->get( $key ) );
     262        $value = $this->get( $key );
     263
     264        if ( is_array( $value ) ) {
     265            return [ 'on' ] === $value;
     266        }
     267
     268        return ! empty( $value );
    263269    }
    264270
     
    318324
    319325    /**
    320      * Get secret key.
     326     * Get a secret key.
    321327     *
    322328     * @return string
     
    333339
    334340    /**
    335      * Get theme.
     341     * Get a theme.
    336342     *
    337343     * @return string
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/Spectra/Form.php

    r3319903 r3359717  
    6464        add_filter( 'hcap_print_hcaptcha_scripts', [ $this, 'print_hcaptcha_scripts' ], 0 );
    6565        add_action( 'wp_print_footer_scripts', [ $this, 'enqueue_scripts' ], 9 );
     66        add_filter( 'script_loader_tag', [ $this, 'add_type_module' ], 10, 3 );
    6667    }
    6768
     
    126127        // phpcs:enable WordPress.Security.NonceVerification.Missing
    127128
    128         $_POST[ self::NONCE ] = $form_data[ self::NONCE ] ?? '';
     129        $widget_id_name = 'hcaptcha-widget-id';
     130        $hp_sig_name    = 'hcap_hp_sig';
     131        $token_name     = 'hcap_fst_token';
     132        $hp_name        = API::get_hp_name( $form_data );
     133
     134        $_POST[ self::NONCE ]     = $form_data[ self::NONCE ] ?? '';
     135        $_POST[ $widget_id_name ] = $form_data[ $widget_id_name ] ?? '';
     136        $_POST[ $hp_sig_name ]    = $form_data[ $hp_sig_name ] ?? '';
     137        $_POST[ $hp_name ]        = $form_data[ $hp_name ] ?? '';
     138        $_POST[ $token_name ]     = $form_data[ $token_name ] ?? '';
    129139
    130140        $error_message = API::verify( $this->get_entry( $form_data ) );
    131141
    132         unset( $_POST[ self::NONCE ] );
     142        unset(
     143            $_POST[ self::NONCE ],
     144            $_POST[ $widget_id_name ],
     145            $_POST[ $hp_sig_name ],
     146            $_POST[ $hp_name ],
     147            $_POST[ $token_name ]
     148        );
    133149
    134150        if ( null === $error_message ) {
     
    191207            true
    192208        );
     209    }
     210
     211    /**
     212     * Add type="module" attribute to script tag.
     213     *
     214     * @param string|mixed $tag    Script tag.
     215     * @param string       $handle Script handle.
     216     * @param string       $src    Script source.
     217     *
     218     * @return string
     219     * @noinspection PhpUnusedParameterInspection
     220     */
     221    public function add_type_module( $tag, string $handle, string $src ): string {
     222        $tag = (string) $tag;
     223
     224        if ( self::HANDLE !== $handle ) {
     225            return $tag;
     226        }
     227
     228        return HCaptcha::add_type_module( $tag );
    193229    }
    194230
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/WC/Checkout.php

    r3319903 r3359717  
    7373        add_filter( 'rest_request_before_callbacks', [ $this, 'verify_block' ], 10, 3 );
    7474        add_action( 'wp_print_footer_scripts', [ $this, 'enqueue_scripts' ], 9 );
     75        add_filter( 'script_loader_tag', [ $this, 'add_type_module' ], 10, 3 );
    7576    }
    7677
     
    158159        }
    159160
    160         $widget_id_name           = 'hcaptcha-widget-id';
    161         $hcaptcha_response_name   = 'h-captcha-response';
     161        $params         = $request->get_params();
     162        $widget_id_name = 'hcaptcha-widget-id';
     163        $response_name  = 'h-captcha-response';
     164        $hp_sig_name    = 'hcap_hp_sig';
     165        $token_name     = 'hcap_fst_token';
     166        $hp_name        = API::get_hp_name( $params );
     167
    162168        $_POST[ $widget_id_name ] = $request->get_param( $widget_id_name );
    163         $hcaptcha_response        = $request->get_param( $hcaptcha_response_name );
    164 
    165         $error_message = API::verify_request( $hcaptcha_response );
     169        $_POST[ $response_name ]  = $request->get_param( $response_name );
     170        $_POST[ $hp_sig_name ]    = $request->get_param( $hp_sig_name );
     171        $_POST[ $hp_name ]        = $request->get_param( $hp_name );
     172        $_POST[ $token_name ]     = $request->get_param( $token_name );
     173
     174        $error_message = API::verify_request();
    166175
    167176        if ( null === $error_message ) {
     
    202211        }
    203212    }
     213
     214    /**
     215     * Add type="module" attribute to script tag.
     216     *
     217     * @param string|mixed $tag    Script tag.
     218     * @param string       $handle Script handle.
     219     * @param string       $src    Script source.
     220     *
     221     * @return string
     222     * @noinspection PhpUnusedParameterInspection
     223     */
     224    public function add_type_module( $tag, string $handle, string $src ): string {
     225        $tag = (string) $tag;
     226
     227        if ( self::BLOCK_HANDLE !== $handle ) {
     228            return $tag;
     229        }
     230
     231        return HCaptcha::add_type_module( $tag );
     232    }
    204233}
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/WPForms/Form.php

    r3319903 r3359717  
    3030
    3131    /**
     32     * Script handle.
     33     */
     34    private const HANDLE = 'hcaptcha-wpforms';
     35
     36    /**
    3237     * Whether hCaptcha should be auto-added to any form.
    3338     *
     
    8287        add_filter( 'wpforms_process_bypass_captcha', '__return_true' );
    8388        add_action( 'wpforms_process', [ $this, 'verify' ], 10, 3 );
     89
     90        add_action( 'wp_print_footer_scripts', [ $this, 'enqueue_scripts' ], 9 );
    8491    }
    8592
     
    315322
    316323    /**
     324     * Enqueue scripts.
     325     *
     326     * @return void
     327     */
     328    public function enqueue_scripts(): void {
     329        if ( ! hcaptcha()->form_shown ) {
     330            return;
     331        }
     332
     333        $min = hcap_min_suffix();
     334
     335        wp_enqueue_script(
     336            self::HANDLE,
     337            HCAPTCHA_URL . "/assets/js/hcaptcha-wpforms$min.js",
     338            [ 'jquery', 'hcaptcha' ],
     339            HCAPTCHA_VERSION,
     340            true
     341        );
     342    }
     343
     344    /**
    317345     * Show hCaptcha.
    318346     *
  • hcaptcha-for-forms-and-more/tags/4.17.0/src/php/includes/request.php

    r3319903 r3359717  
    9696            'bad-signature'            => __( 'Bad hCaptcha signature!', 'hcaptcha-for-forms-and-more' ),
    9797            'spam'                     => __( 'Anti-spam check failed.', 'hcaptcha-for-forms-and-more' ),
     98            'fst-no-object'            => __( 'FST object does not exist.', 'hcaptcha-for-forms-and-more' ),
     99            'fst-too-fast'             => __( 'Form submitted too quickly.', 'hcaptcha-for-forms-and-more' ),
     100            'fst-replayed-or-expired'  => __( 'Token replayed or expired.', 'hcaptcha-for-forms-and-more' ),
     101            'fst-expired'              => __( 'Token expired.', 'hcaptcha-for-forms-and-more' ),
    98102        ]
    99103    );
     
    125129
    126130    return $header . ' ' . implode( '; ', $message_arr );
     131}
     132
     133/**
     134 * Get WP_Error from hCaptcha error code.
     135 *
     136 * @param string|string[] $error_codes Error codes.
     137 *
     138 * @return WP_Error
     139 */
     140function hcap_get_wp_error( $error_codes ): WP_Error {
     141    $error_codes = (array) $error_codes;
     142    $errors      = hcap_get_error_messages();
     143    $wp_error    = new WP_Error();
     144
     145    foreach ( $error_codes as $error_code ) {
     146        if ( array_key_exists( $error_code, $errors ) ) {
     147            $wp_error->add( $error_code, $errors[ $error_code ] );
     148        }
     149    }
     150
     151    return $wp_error;
    127152}
    128153
  • hcaptcha-for-forms-and-more/tags/4.17.0/vendor/autoload.php

    r3339595 r3359717  
    2020require_once __DIR__ . '/composer/autoload_real.php';
    2121
    22 return ComposerAutoloaderInite907ee6af17ec21150d2317fc40abfc9::getLoader();
     22return ComposerAutoloaderInit0948d9ad69a9f4852d35c417b9397c22::getLoader();
  • hcaptcha-for-forms-and-more/tags/4.17.0/vendor/composer/autoload_classmap.php

    r3339595 r3359717  
    2424    'HCaptcha\\Affiliates\\Register' => $baseDir . '/src/php/Affiliates/Register.php',
    2525    'HCaptcha\\AntiSpam\\AntiSpam' => $baseDir . '/src/php/AntiSpam/AntiSpam.php',
     26    'HCaptcha\\AntiSpam\\Honeypot' => $baseDir . '/src/php/AntiSpam/Honeypot.php',
    2627    'HCaptcha\\AntiSpam\\ProviderBase' => $baseDir . '/src/php/AntiSpam/ProviderBase.php',
    2728    'HCaptcha\\Asgaros\\Base' => $baseDir . '/src/php/Asgaros/Base.php',
     
    9394    'HCaptcha\\Helpers\\API' => $baseDir . '/src/php/Helpers/API.php',
    9495    'HCaptcha\\Helpers\\DB' => $baseDir . '/src/php/Helpers/DB.php',
     96    'HCaptcha\\Helpers\\FormSubmitTime' => $baseDir . '/src/php/Helpers/FormSubmitTime.php',
    9597    'HCaptcha\\Helpers\\HCaptcha' => $baseDir . '/src/php/Helpers/HCaptcha.php',
    9698    'HCaptcha\\Helpers\\Minify\\CSS' => $baseDir . '/src/php/Helpers/Minify/CSS.php',
  • hcaptcha-for-forms-and-more/tags/4.17.0/vendor/composer/autoload_real.php

    r3339595 r3359717  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInite907ee6af17ec21150d2317fc40abfc9
     5class ComposerAutoloaderInit0948d9ad69a9f4852d35c417b9397c22
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInite907ee6af17ec21150d2317fc40abfc9', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInit0948d9ad69a9f4852d35c417b9397c22', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    29         spl_autoload_unregister(array('ComposerAutoloaderInite907ee6af17ec21150d2317fc40abfc9', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInit0948d9ad69a9f4852d35c417b9397c22', 'loadClassLoader'));
    3030
    3131        require __DIR__ . '/autoload_static.php';
    32         call_user_func(\Composer\Autoload\ComposerStaticInite907ee6af17ec21150d2317fc40abfc9::getInitializer($loader));
     32        call_user_func(\Composer\Autoload\ComposerStaticInit0948d9ad69a9f4852d35c417b9397c22::getInitializer($loader));
    3333
    3434        $loader->setClassMapAuthoritative(true);
  • hcaptcha-for-forms-and-more/tags/4.17.0/vendor/composer/autoload_static.php

    r3339595 r3359717  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInite907ee6af17ec21150d2317fc40abfc9
     7class ComposerStaticInit0948d9ad69a9f4852d35c417b9397c22
    88{
    99    public static $prefixLengthsPsr4 = array (
     
    5252        'HCaptcha\\Affiliates\\Register' => __DIR__ . '/../..' . '/src/php/Affiliates/Register.php',
    5353        'HCaptcha\\AntiSpam\\AntiSpam' => __DIR__ . '/../..' . '/src/php/AntiSpam/AntiSpam.php',
     54        'HCaptcha\\AntiSpam\\Honeypot' => __DIR__ . '/../..' . '/src/php/AntiSpam/Honeypot.php',
    5455        'HCaptcha\\AntiSpam\\ProviderBase' => __DIR__ . '/../..' . '/src/php/AntiSpam/ProviderBase.php',
    5556        'HCaptcha\\Asgaros\\Base' => __DIR__ . '/../..' . '/src/php/Asgaros/Base.php',
     
    121122        'HCaptcha\\Helpers\\API' => __DIR__ . '/../..' . '/src/php/Helpers/API.php',
    122123        'HCaptcha\\Helpers\\DB' => __DIR__ . '/../..' . '/src/php/Helpers/DB.php',
     124        'HCaptcha\\Helpers\\FormSubmitTime' => __DIR__ . '/../..' . '/src/php/Helpers/FormSubmitTime.php',
    123125        'HCaptcha\\Helpers\\HCaptcha' => __DIR__ . '/../..' . '/src/php/Helpers/HCaptcha.php',
    124126        'HCaptcha\\Helpers\\Minify\\CSS' => __DIR__ . '/../..' . '/src/php/Helpers/Minify/CSS.php',
     
    240242    {
    241243        return \Closure::bind(function () use ($loader) {
    242             $loader->prefixLengthsPsr4 = ComposerStaticInite907ee6af17ec21150d2317fc40abfc9::$prefixLengthsPsr4;
    243             $loader->prefixDirsPsr4 = ComposerStaticInite907ee6af17ec21150d2317fc40abfc9::$prefixDirsPsr4;
    244             $loader->classMap = ComposerStaticInite907ee6af17ec21150d2317fc40abfc9::$classMap;
     244            $loader->prefixLengthsPsr4 = ComposerStaticInit0948d9ad69a9f4852d35c417b9397c22::$prefixLengthsPsr4;
     245            $loader->prefixDirsPsr4 = ComposerStaticInit0948d9ad69a9f4852d35c417b9397c22::$prefixDirsPsr4;
     246            $loader->classMap = ComposerStaticInit0948d9ad69a9f4852d35c417b9397c22::$classMap;
    245247
    246248        }, null, ClassLoader::class);
  • hcaptcha-for-forms-and-more/tags/4.17.0/vendor/composer/installed.php

    r3339595 r3359717  
    22    'root' => array(
    33        'name' => 'hcaptcha/hcaptcha-wordpress-plugin',
    4         'pretty_version' => '4.16.0',
    5         'version' => '4.16.0.0',
    6         'reference' => 'a7c7adcad35de74072aec91cefc35ea305d55592',
     4        'pretty_version' => '4.17.0',
     5        'version' => '4.17.0.0',
     6        'reference' => '40e0ab01cd7c49bbc7cffe4a5a631783ff44e925',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        'hcaptcha/hcaptcha-wordpress-plugin' => array(
    14             'pretty_version' => '4.16.0',
    15             'version' => '4.16.0.0',
    16             'reference' => 'a7c7adcad35de74072aec91cefc35ea305d55592',
     14            'pretty_version' => '4.17.0',
     15            'version' => '4.17.0.0',
     16            'reference' => '40e0ab01cd7c49bbc7cffe4a5a631783ff44e925',
    1717            'type' => 'wordpress-plugin',
    1818            'install_path' => __DIR__ . '/../../',
  • hcaptcha-for-forms-and-more/trunk/assets/css/general.css

    r3319903 r3359717  
    328328    grid-template-columns: repeat(2, 1fr);
    329329    grid-template-areas:
     330        "set-min-submit-time min-submit-time"
     331        "honeypot min-submit-time"
    330332        "antispam antispam-provider";
    331333    gap: 0 20px;
     
    333335}
    334336
     337.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-set-min-submit-time {
     338    grid-area: set-min-submit-time;
     339}
     340
     341.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-min-submit-time {
     342    grid-area: min-submit-time;
     343}
     344
     345.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-honeypot {
     346    grid-area: honeypot;
     347}
     348
    335349.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-antispam {
    336350    grid-area: antispam;
     351    padding-top: 15px;
    337352}
    338353
    339354.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-antispam-provider {
    340355    grid-area: antispam-provider;
     356    padding-top: 15px;
    341357}
    342358
     
    355371}
    356372
     373.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-min-submit-time td,
    357374.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-antispam-provider td {
    358375    width: auto;
     
    361378.hcaptcha-section-antispam + table tbody tr td input,
    362379.hcaptcha-section-antispam + table tbody tr td select {
     380    width: 100%;
     381}
     382
     383.hcaptcha-section-antispam + table tbody tr.hcaptcha-general-honeypot th {
     384    padding: 0;
     385}
     386
     387.hcaptcha-section-antispam + table tbody tr td input {
    363388    width: 100%;
    364389}
  • hcaptcha-for-forms-and-more/trunk/assets/css/general.min.css

    r3319903 r3359717  
    1 #hcaptcha-message,#setting-error-settings_updated{box-sizing:border-box;max-width:760px}.hcaptcha-loading:before{background:hsla(0,0%,100%,.8);content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:9999}.hcaptcha-loading:after{animation:hcaptcha-spin 1s linear infinite;border:4px solid #ccc;border-radius:50%;border-top-color:#5c6f8a;content:"";height:28px;left:calc(50% - 18px);position:absolute;top:calc(50% - 18px);width:28px;z-index:10000}@keyframes hcaptcha-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}#hcaptcha-options table tbody{background:#fff}#hcaptcha-options table tbody tr{align-self:start;display:grid}#hcaptcha-options table tbody tr th{color:#5c6f8a}#hcaptcha-options table tbody tr td{margin:0;padding:0;position:relative}#hcaptcha-options .h-captcha{margin-bottom:0}#hcaptcha-options.hcaptcha-general h3{background:#fff;box-sizing:border-box;color:#5c6f8a;cursor:pointer;display:flex;justify-content:space-between;margin:1.5em 0 0;max-width:760px;padding:15px 20px}#hcaptcha-options.hcaptcha-general h3.disabled{opacity:.6}.hcaptcha-section-header-toggle:after{content:"\f142";font:normal 20px dashicons;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h3.closed .hcaptcha-section-header-toggle:after{content:"\f140"}#hcaptcha-options.hcaptcha-general h3+table{margin-top:0;max-width:760px;position:relative}#hcaptcha-options.hcaptcha-general h3.disabled+table{opacity:.6}#hcaptcha-options.hcaptcha-general h3.closed+table{display:none}#hcaptcha-options.hcaptcha-general h3+table:before{border-bottom:1px solid #c3c4c7;content:"";margin:0 20px;max-width:720px;position:absolute;top:0;width:calc(100% - 40px)}.hcaptcha-section-keys+table tbody{display:grid;gap:10px 20px;grid-template-areas:"site-key site-key secret-key secret-key" "sample-hcaptcha sample-hcaptcha check-config reset-notifications";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-keys+table tbody th{width:auto}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-site-key{grid-area:site-key}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-secret-key{grid-area:secret-key}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-sample-hcaptcha{grid-area:sample-hcaptcha}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-check-config{grid-area:check-config}.hcaptcha-section-keys+table tbody tr.hcaptcha-reset-notifications{grid-area:reset-notifications}.hcaptcha-section-keys+table tbody tr th{padding:0 0 10px}.hcaptcha-section-keys+table tbody tr td input{width:100%}.hcaptcha-section-appearance+table tbody{display:grid;gap:10px 20px;grid-template-areas:"theme size language mode" "force force position position";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-theme{grid-area:theme}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-size{grid-area:size}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-language{grid-area:language}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-mode{grid-area:mode}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-force{grid-area:force}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-menu-position{grid-area:position}.hcaptcha-section-appearance+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-force td,.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-menu-position td{width:max-content}.hcaptcha-section-appearance+table tbody tr td select{width:100%}.hcaptcha-section-custom+table tbody{display:grid;gap:10px 20px;grid-template-areas:"custom-themes custom-themes config-params config-params" "custom-prop custom-value config-params config-params";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-themes{grid-area:custom-themes}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-config-params{grid-area:config-params}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-prop{grid-area:custom-prop}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-value{grid-area:custom-value}.hcaptcha-section-custom+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-themes td{width:max-content}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-config-params td{width:auto}.hcaptcha-section-custom+table tbody tr td select,.hcaptcha-section-custom+table tbody tr td textarea{width:100%}.hcaptcha-section-custom+table tbody tr td select option:disabled{background:#f0f0f1;color:#2c3338}.hcaptcha-section-custom+table tbody tr td input{height:30px;width:100%}.hcaptcha-section-enterprise+table tbody{display:grid;gap:10px 20px;grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-enterprise+table tbody th{width:auto}.hcaptcha-section-enterprise+table tbody tr th{padding:0 0 10px}.hcaptcha-section-enterprise+table tbody tr td input{width:100%}.hcaptcha-section-content+table tbody{display:grid;gap:0 20px;grid-template-areas:"content protected-urls";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-content+table tbody tr.hcaptcha-general-content{grid-area:content}.hcaptcha-section-content+table tbody tr.hcaptcha-general-protected-urls{grid-area:protected-urls}.hcaptcha-section-content+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-content+table tbody tr td{width:max-content}.hcaptcha-section-content+table tbody tr.hcaptcha-general-protected-urls td{width:auto}.hcaptcha-section-content+table tbody tr td input,.hcaptcha-section-content+table tbody tr td textarea{width:100%}.hcaptcha-section-antispam+table tbody{display:grid;gap:0 20px;grid-template-areas:"antispam antispam-provider";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam{grid-area:antispam}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider{grid-area:antispam-provider}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider div{color:#d63638;margin-top:.5em}.hcaptcha-section-antispam+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-antispam+table tbody tr td{width:max-content}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider td{width:auto}.hcaptcha-section-antispam+table tbody tr td input,.hcaptcha-section-antispam+table tbody tr td select{width:100%}.hcaptcha-section-other+table tbody{display:grid;gap:0 20px;grid-template-areas:"blacklisted whitelisted" "logged recaptcha" "hide-login-errors cleanup-on-uninstall" "network ." "login-limit login-interval" "delay .";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in{grid-area:logged}.hcaptcha-section-other+table tbody tr.hcaptcha-general-recaptcha-compat-off{grid-area:recaptcha}.hcaptcha-section-other+table tbody tr.hcaptcha-general-hide-login-errors{grid-area:hide-login-errors}.hcaptcha-section-other+table tbody tr.hcaptcha-general-cleanup-on-uninstall{grid-area:cleanup-on-uninstall}.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-limit{grid-area:login-limit;padding-top:15px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-interval{grid-area:login-interval;padding-top:15px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips{grid-area:whitelisted}.hcaptcha-section-other+table tbody tr.hcaptcha-general--network-wide{grid-area:network}.hcaptcha-section-other+table tbody tr.hcaptcha-general-delay{grid-area:delay;padding-top:15px}.hcaptcha-section-other+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-other+table tbody tr.hcaptcha-general--network-wide th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-cleanup-on-uninstall th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-hide-login-errors th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-recaptcha-compat-off th{padding:0}.hcaptcha-section-other+table tbody tr td{width:max-content}.hcaptcha-section-other+table tbody tr.hcaptcha-general-blacklisted-ips td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-delay td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-interval td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-limit td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips td{width:auto}.hcaptcha-section-other+table tbody tr td input,.hcaptcha-section-other+table tbody tr td textarea{width:100%}.hcaptcha-section-statistics+table tbody{display:grid;gap:0 20px;grid-template-areas:"statistics collect-ip" "anonymous collect-ua";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-statistics{grid-area:statistics}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-anonymous{grid-area:anonymous}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ip{grid-area:collect-ip}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ua{grid-area:collect-ua}.hcaptcha-section-statistics+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-anonymous th,.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ua th{padding:0}.hcaptcha-section-statistics+table tbody tr td{width:max-content}@media (max-width:600px){.hcaptcha-section-keys+table tbody{grid-template-areas:"site-key site-key" "secret-key secret-key" "sample-hcaptcha sample-hcaptcha" "check-config reset-notifications";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-appearance+table tbody{grid-template-areas:"theme size" "language mode" "force force" "position position";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-appearance+table tbody tr td{width:unset!important}.hcaptcha-section-custom+table tbody{grid-template-areas:"custom-themes custom-themes" "custom-prop custom-value" "config-params config-params";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-custom+table tbody tr td{width:unset!important}.hcaptcha-section-enterprise+table tbody{grid-template-columns:repeat(1,1fr)!important}.hcaptcha-section-enterprise+table tbody tr td{width:unset!important}.hcaptcha-section-content+table tbody{grid-template-areas:"content" "protected-urls";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-content+table tbody tr td{width:unset!important}.hcaptcha-section-antispam+table tbody{grid-template-areas:"antispam" "antispam-provider";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-antispam+table tbody tr td{width:unset!important}.hcaptcha-section-other+table tbody{grid-template-areas:"blacklisted" "whitelisted" "logged" "recaptcha" "hide-login-errors" "cleanup-on-uninstall" "network" "login-limit" "login-interval" "delay";grid-template-columns:repeat(1,1fr)!important}.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in,.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips{padding-top:10px}.hcaptcha-section-other+table tbody tr td{width:unset!important}.hcaptcha-section-statistics+table tbody{grid-template-areas:"statistics" "anonymous" "collect-ip" "collect-ua";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-statistics+table tbody tr td{width:unset!important}}
     1#hcaptcha-message,#setting-error-settings_updated{box-sizing:border-box;max-width:760px}.hcaptcha-loading:before{background:hsla(0,0%,100%,.8);content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:9999}.hcaptcha-loading:after{animation:hcaptcha-spin 1s linear infinite;border:4px solid #ccc;border-radius:50%;border-top-color:#5c6f8a;content:"";height:28px;left:calc(50% - 18px);position:absolute;top:calc(50% - 18px);width:28px;z-index:10000}@keyframes hcaptcha-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}#hcaptcha-options table tbody{background:#fff}#hcaptcha-options table tbody tr{align-self:start;display:grid}#hcaptcha-options table tbody tr th{color:#5c6f8a}#hcaptcha-options table tbody tr td{margin:0;padding:0;position:relative}#hcaptcha-options .h-captcha{margin-bottom:0}#hcaptcha-options.hcaptcha-general h3{background:#fff;box-sizing:border-box;color:#5c6f8a;cursor:pointer;display:flex;justify-content:space-between;margin:1.5em 0 0;max-width:760px;padding:15px 20px}#hcaptcha-options.hcaptcha-general h3.disabled{opacity:.6}.hcaptcha-section-header-toggle:after{content:"\f142";font:normal 20px dashicons;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h3.closed .hcaptcha-section-header-toggle:after{content:"\f140"}#hcaptcha-options.hcaptcha-general h3+table{margin-top:0;max-width:760px;position:relative}#hcaptcha-options.hcaptcha-general h3.disabled+table{opacity:.6}#hcaptcha-options.hcaptcha-general h3.closed+table{display:none}#hcaptcha-options.hcaptcha-general h3+table:before{border-bottom:1px solid #c3c4c7;content:"";margin:0 20px;max-width:720px;position:absolute;top:0;width:calc(100% - 40px)}.hcaptcha-section-keys+table tbody{display:grid;gap:10px 20px;grid-template-areas:"site-key site-key secret-key secret-key" "sample-hcaptcha sample-hcaptcha check-config reset-notifications";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-keys+table tbody th{width:auto}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-site-key{grid-area:site-key}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-secret-key{grid-area:secret-key}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-sample-hcaptcha{grid-area:sample-hcaptcha}.hcaptcha-section-keys+table tbody tr.hcaptcha-general-check-config{grid-area:check-config}.hcaptcha-section-keys+table tbody tr.hcaptcha-reset-notifications{grid-area:reset-notifications}.hcaptcha-section-keys+table tbody tr th{padding:0 0 10px}.hcaptcha-section-keys+table tbody tr td input{width:100%}.hcaptcha-section-appearance+table tbody{display:grid;gap:10px 20px;grid-template-areas:"theme size language mode" "force force position position";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-theme{grid-area:theme}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-size{grid-area:size}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-language{grid-area:language}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-mode{grid-area:mode}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-force{grid-area:force}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-menu-position{grid-area:position}.hcaptcha-section-appearance+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-force td,.hcaptcha-section-appearance+table tbody tr.hcaptcha-general-menu-position td{width:max-content}.hcaptcha-section-appearance+table tbody tr td select{width:100%}.hcaptcha-section-custom+table tbody{display:grid;gap:10px 20px;grid-template-areas:"custom-themes custom-themes config-params config-params" "custom-prop custom-value config-params config-params";grid-template-columns:repeat(4,1fr);padding:15px 20px}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-themes{grid-area:custom-themes}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-config-params{grid-area:config-params}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-prop{grid-area:custom-prop}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-value{grid-area:custom-value}.hcaptcha-section-custom+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-custom-themes td{width:max-content}.hcaptcha-section-custom+table tbody tr.hcaptcha-general-config-params td{width:auto}.hcaptcha-section-custom+table tbody tr td select,.hcaptcha-section-custom+table tbody tr td textarea{width:100%}.hcaptcha-section-custom+table tbody tr td select option:disabled{background:#f0f0f1;color:#2c3338}.hcaptcha-section-custom+table tbody tr td input{height:30px;width:100%}.hcaptcha-section-enterprise+table tbody{display:grid;gap:10px 20px;grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-enterprise+table tbody th{width:auto}.hcaptcha-section-enterprise+table tbody tr th{padding:0 0 10px}.hcaptcha-section-enterprise+table tbody tr td input{width:100%}.hcaptcha-section-content+table tbody{display:grid;gap:0 20px;grid-template-areas:"content protected-urls";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-content+table tbody tr.hcaptcha-general-content{grid-area:content}.hcaptcha-section-content+table tbody tr.hcaptcha-general-protected-urls{grid-area:protected-urls}.hcaptcha-section-content+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-content+table tbody tr td{width:max-content}.hcaptcha-section-content+table tbody tr.hcaptcha-general-protected-urls td{width:auto}.hcaptcha-section-content+table tbody tr td input,.hcaptcha-section-content+table tbody tr td textarea{width:100%}.hcaptcha-section-antispam+table tbody{display:grid;gap:0 20px;grid-template-areas:"set-min-submit-time min-submit-time" "honeypot min-submit-time" "antispam antispam-provider";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-set-min-submit-time{grid-area:set-min-submit-time}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-min-submit-time{grid-area:min-submit-time}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-honeypot{grid-area:honeypot}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam{grid-area:antispam;padding-top:15px}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider{grid-area:antispam-provider;padding-top:15px}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider div{color:#d63638;margin-top:.5em}.hcaptcha-section-antispam+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-antispam+table tbody tr td{width:max-content}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-antispam-provider td,.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-min-submit-time td{width:auto}.hcaptcha-section-antispam+table tbody tr td input,.hcaptcha-section-antispam+table tbody tr td select{width:100%}.hcaptcha-section-antispam+table tbody tr.hcaptcha-general-honeypot th{padding:0}.hcaptcha-section-antispam+table tbody tr td input{width:100%}.hcaptcha-section-other+table tbody{display:grid;gap:0 20px;grid-template-areas:"blacklisted whitelisted" "logged recaptcha" "hide-login-errors cleanup-on-uninstall" "network ." "login-limit login-interval" "delay .";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in{grid-area:logged}.hcaptcha-section-other+table tbody tr.hcaptcha-general-recaptcha-compat-off{grid-area:recaptcha}.hcaptcha-section-other+table tbody tr.hcaptcha-general-hide-login-errors{grid-area:hide-login-errors}.hcaptcha-section-other+table tbody tr.hcaptcha-general-cleanup-on-uninstall{grid-area:cleanup-on-uninstall}.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-limit{grid-area:login-limit;padding-top:15px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-interval{grid-area:login-interval;padding-top:15px}.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips{grid-area:whitelisted}.hcaptcha-section-other+table tbody tr.hcaptcha-general--network-wide{grid-area:network}.hcaptcha-section-other+table tbody tr.hcaptcha-general-delay{grid-area:delay;padding-top:15px}.hcaptcha-section-other+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-other+table tbody tr.hcaptcha-general--network-wide th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-cleanup-on-uninstall th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-hide-login-errors th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in th,.hcaptcha-section-other+table tbody tr.hcaptcha-general-recaptcha-compat-off th{padding:0}.hcaptcha-section-other+table tbody tr td{width:max-content}.hcaptcha-section-other+table tbody tr.hcaptcha-general-blacklisted-ips td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-delay td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-interval td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-login-limit td,.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips td{width:auto}.hcaptcha-section-other+table tbody tr td input,.hcaptcha-section-other+table tbody tr td textarea{width:100%}.hcaptcha-section-statistics+table tbody{display:grid;gap:0 20px;grid-template-areas:"statistics collect-ip" "anonymous collect-ua";grid-template-columns:repeat(2,1fr);padding:15px 20px}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-statistics{grid-area:statistics}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-anonymous{grid-area:anonymous}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ip{grid-area:collect-ip}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ua{grid-area:collect-ua}.hcaptcha-section-statistics+table tbody tr th{padding:0 0 10px;width:auto}.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-anonymous th,.hcaptcha-section-statistics+table tbody tr.hcaptcha-general-collect-ua th{padding:0}.hcaptcha-section-statistics+table tbody tr td{width:max-content}@media (max-width:600px){.hcaptcha-section-keys+table tbody{grid-template-areas:"site-key site-key" "secret-key secret-key" "sample-hcaptcha sample-hcaptcha" "check-config reset-notifications";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-appearance+table tbody{grid-template-areas:"theme size" "language mode" "force force" "position position";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-appearance+table tbody tr td{width:unset!important}.hcaptcha-section-custom+table tbody{grid-template-areas:"custom-themes custom-themes" "custom-prop custom-value" "config-params config-params";grid-template-columns:repeat(2,1fr)!important}.hcaptcha-section-custom+table tbody tr td{width:unset!important}.hcaptcha-section-enterprise+table tbody{grid-template-columns:repeat(1,1fr)!important}.hcaptcha-section-enterprise+table tbody tr td{width:unset!important}.hcaptcha-section-content+table tbody{grid-template-areas:"content" "protected-urls";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-content+table tbody tr td{width:unset!important}.hcaptcha-section-antispam+table tbody{grid-template-areas:"antispam" "antispam-provider";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-antispam+table tbody tr td{width:unset!important}.hcaptcha-section-other+table tbody{grid-template-areas:"blacklisted" "whitelisted" "logged" "recaptcha" "hide-login-errors" "cleanup-on-uninstall" "network" "login-limit" "login-interval" "delay";grid-template-columns:repeat(1,1fr)!important}.hcaptcha-section-other+table tbody tr.hcaptcha-general-off-when-logged-in,.hcaptcha-section-other+table tbody tr.hcaptcha-general-whitelisted-ips{padding-top:10px}.hcaptcha-section-other+table tbody tr td{width:unset!important}.hcaptcha-section-statistics+table tbody{grid-template-areas:"statistics" "anonymous" "collect-ip" "collect-ua";grid-template-columns:repeat(1,1fr)}.hcaptcha-section-statistics+table tbody tr td{width:unset!important}}
  • hcaptcha-for-forms-and-more/trunk/assets/css/integrations.css

    r3319903 r3359717  
    155155}
    156156
     157#hcaptcha-options label + .helper {
     158    position: absolute;
     159    right: 0;
     160    width: 100%;
     161}
     162
    157163#hcaptcha-options label[data-antispam] + .helper::before {
    158164    content: '';
     
    166172}
    167173
    168 #hcaptcha-options label[data-antispam="native"] + .helper::before {
     174#hcaptcha-options label:is([data-antispam-native],[data-antispam-native]) + .helper::before {
    169175    background: url('../images/antispam-yellow.svg');
     176    background-size: cover;
     177}
     178
     179#hcaptcha-options label:is([data-antispam-honeypot],[data-antispam-honeypot]) + .helper::before {
     180    background: url('../images/antispam-honeypot.svg');
    170181    background-size: cover;
    171182}
  • hcaptcha-for-forms-and-more/trunk/assets/css/integrations.min.css

    r3319903 r3359717  
    1 #hcaptcha-options p{margin:.5em 0}.hcaptcha-integrations table tbody{display:grid;gap:10px 20px;grid-template-columns:repeat(4,minmax(100px,1fr))}.hcaptcha-integrations table tr{background:#fff;padding:10px 20px;position:relative}.hcaptcha-integrations table tr:before{background-color:#f0f0f0;bottom:0;content:"";inset-inline-end:0;inset-inline-start:0;opacity:0;position:absolute;top:0;transition:all 1.5s;visibility:hidden}.hcaptcha-integrations table tr.install:before,.hcaptcha-integrations table tr.off:before,.hcaptcha-integrations table tr.on:before{opacity:.7;transition:all 1.5s;visibility:visible}.hcaptcha-integrations table tr:after{background-image:url(../images/spinner-white.svg);background-position:50%;background-repeat:no-repeat;background-size:auto 80%;bottom:0;content:"";inset-inline-end:0;inset-inline-start:0;opacity:0;position:absolute;top:0;transition:all 1.5s;visibility:hidden}.hcaptcha-integrations table tr.install:after,.hcaptcha-integrations table tr.off:after,.hcaptcha-integrations table tr.on:after{background-position:50%;background-repeat:no-repeat;background-size:auto 80%;opacity:1;transition:all 1.5s;visibility:visible}.hcaptcha-integrations table tr.install:after{background-image:url(../images/spinner-gold.svg)}.hcaptcha-integrations table tr.on:after{background-image:url(../images/spinner-green.svg)}.hcaptcha-integrations table tr.off:after{background-image:url(../images/spinner-red.svg)}.hcaptcha-integrations table tr th{align-items:center;display:flex;flex-wrap:wrap;font-size:16px;height:28px;justify-content:space-between;margin-bottom:20px;padding:5px 0 0;width:unset}.hcaptcha-integrations table tr .hcaptcha-integrations-entity{background:#4de1d2;border:1px solid #4de1d2;border-radius:2px;color:#fff;cursor:default;font-size:14px;line-height:18px;padding:4px 8px}.hcaptcha-integrations-logo{position:relative}.hcaptcha-integrations table tr th .hcaptcha-integrations-logo{cursor:pointer;height:28px}.hcaptcha-integrations table tr th .hcaptcha-integrations-logo:hover:before{bottom:0;content:"";inset-inline-start:-14px;position:absolute;top:0;width:4px}.hcaptcha-integrations>table~table tr th .hcaptcha-integrations-logo:hover:before{background-color:#00a32a}.hcaptcha-integrations>table tr th .hcaptcha-integrations-logo:hover:before{background-color:#d63638}.hcaptcha-integrations>table~table tr th .hcaptcha-integrations-logo[data-installed=false]:hover:before{background-color:#dba617}.hcaptcha-integrations table tr th img{max-height:28px;max-width:100%}.hcaptcha-integrations table tr.hcaptcha-integrations-wp-status th .hcaptcha-integrations-logo{cursor:unset}.hcaptcha-integrations table tr.hcaptcha-integrations-wp-status th .hcaptcha-integrations-logo:hover:before{display:none}.hcaptcha-integrations table tr td{display:flex;margin:0;padding:0}.hcaptcha-integrations table tr td fieldset,.hcaptcha-integrations table tr td fieldset label{width:100%}#hcaptcha-options label[data-antispam]+.helper:before{background:url(../images/antispam-green.svg);background-size:cover;border-radius:unset;content:"";height:20px;top:.35em;transform:translate(0);width:18px}#hcaptcha-options label[data-antispam=native]+.helper:before{background:url(../images/antispam-yellow.svg);background-size:cover}#hcaptcha-options fieldset:disabled label[data-antispam]+.helper:before{opacity:.7}#hcaptcha-options label[data-antispam]+.helper .helper-content{transform:translateY(38px)}.hcaptcha-disabled-section{margin:20px 0}.hcaptcha-integrations table.form-table+p.submit{padding:10px 0 0}#hcaptcha-integrations-search-wrap{position:relative}#hcaptcha-integrations-search-wrap:before{background:url(../images/magnifying-glass.svg);background-size:contain;content:"";font-size:16px;height:16px;inset-inline-start:10px;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:16px}#hcaptcha-integrations-search{padding-block-end:1px;padding-block-start:1px;padding-inline-end:8px;padding-inline-start:32px;width:230px}@media (max-width:1279px){.hcaptcha-integrations table tbody{grid-template-columns:repeat(3,minmax(100px,1fr))}}@media (max-width:1023px){.hcaptcha-integrations table tbody{grid-template-columns:repeat(2,minmax(100px,1fr))}}@media (max-width:782px){#hcaptcha-integrations-search{font-size:14px;min-height:unset}}body div.kagg-dialog{--color-activate:#00a32a;--color-deactivate:#d63638;--color-install:#dba617}body div.kagg-dialog.activate .kagg-dialog-container .kagg-dialog-box{color:var(--color-activate)}body div.kagg-dialog.activate .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-activate);color:#fff}body div.kagg-dialog.deactivate .kagg-dialog-container .kagg-dialog-box{color:var(--color-deactivate)}body div.kagg-dialog.deactivate .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-deactivate);color:#fff}body div.kagg-dialog.install .kagg-dialog-container .kagg-dialog-box{color:var(--color-install)}body div.kagg-dialog.install .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-install);color:#fff}
     1#hcaptcha-options p{margin:.5em 0}.hcaptcha-integrations table tbody{display:grid;gap:10px 20px;grid-template-columns:repeat(4,minmax(100px,1fr))}.hcaptcha-integrations table tr{background:#fff;padding:10px 20px;position:relative}.hcaptcha-integrations table tr:before{background-color:#f0f0f0;bottom:0;content:"";inset-inline-end:0;inset-inline-start:0;opacity:0;position:absolute;top:0;transition:all 1.5s;visibility:hidden}.hcaptcha-integrations table tr.install:before,.hcaptcha-integrations table tr.off:before,.hcaptcha-integrations table tr.on:before{opacity:.7;transition:all 1.5s;visibility:visible}.hcaptcha-integrations table tr:after{background-image:url(../images/spinner-white.svg);background-position:50%;background-repeat:no-repeat;background-size:auto 80%;bottom:0;content:"";inset-inline-end:0;inset-inline-start:0;opacity:0;position:absolute;top:0;transition:all 1.5s;visibility:hidden}.hcaptcha-integrations table tr.install:after,.hcaptcha-integrations table tr.off:after,.hcaptcha-integrations table tr.on:after{background-position:50%;background-repeat:no-repeat;background-size:auto 80%;opacity:1;transition:all 1.5s;visibility:visible}.hcaptcha-integrations table tr.install:after{background-image:url(../images/spinner-gold.svg)}.hcaptcha-integrations table tr.on:after{background-image:url(../images/spinner-green.svg)}.hcaptcha-integrations table tr.off:after{background-image:url(../images/spinner-red.svg)}.hcaptcha-integrations table tr th{align-items:center;display:flex;flex-wrap:wrap;font-size:16px;height:28px;justify-content:space-between;margin-bottom:20px;padding:5px 0 0;width:unset}.hcaptcha-integrations table tr .hcaptcha-integrations-entity{background:#4de1d2;border:1px solid #4de1d2;border-radius:2px;color:#fff;cursor:default;font-size:14px;line-height:18px;padding:4px 8px}.hcaptcha-integrations-logo{position:relative}.hcaptcha-integrations table tr th .hcaptcha-integrations-logo{cursor:pointer;height:28px}.hcaptcha-integrations table tr th .hcaptcha-integrations-logo:hover:before{bottom:0;content:"";inset-inline-start:-14px;position:absolute;top:0;width:4px}.hcaptcha-integrations>table~table tr th .hcaptcha-integrations-logo:hover:before{background-color:#00a32a}.hcaptcha-integrations>table tr th .hcaptcha-integrations-logo:hover:before{background-color:#d63638}.hcaptcha-integrations>table~table tr th .hcaptcha-integrations-logo[data-installed=false]:hover:before{background-color:#dba617}.hcaptcha-integrations table tr th img{max-height:28px;max-width:100%}.hcaptcha-integrations table tr.hcaptcha-integrations-wp-status th .hcaptcha-integrations-logo{cursor:unset}.hcaptcha-integrations table tr.hcaptcha-integrations-wp-status th .hcaptcha-integrations-logo:hover:before{display:none}.hcaptcha-integrations table tr td{display:flex;margin:0;padding:0}.hcaptcha-integrations table tr td fieldset,.hcaptcha-integrations table tr td fieldset label{width:100%}#hcaptcha-options label+.helper{position:absolute;right:0;width:100%}#hcaptcha-options label[data-antispam]+.helper:before{background:url(../images/antispam-green.svg);background-size:cover;border-radius:unset;content:"";height:20px;top:.35em;transform:translate(0);width:18px}#hcaptcha-options label:is([data-antispam-native])+.helper:before{background:url(../images/antispam-yellow.svg);background-size:cover}#hcaptcha-options label:is([data-antispam-honeypot])+.helper:before{background:url(../images/antispam-honeypot.svg);background-size:cover}#hcaptcha-options fieldset:disabled label[data-antispam]+.helper:before{opacity:.7}#hcaptcha-options label[data-antispam]+.helper .helper-content{transform:translateY(38px)}.hcaptcha-disabled-section{margin:20px 0}.hcaptcha-integrations table.form-table+p.submit{padding:10px 0 0}#hcaptcha-integrations-search-wrap{position:relative}#hcaptcha-integrations-search-wrap:before{background:url(../images/magnifying-glass.svg);background-size:contain;content:"";font-size:16px;height:16px;inset-inline-start:10px;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:16px}#hcaptcha-integrations-search{padding-block-end:1px;padding-block-start:1px;padding-inline-end:8px;padding-inline-start:32px;width:230px}@media (max-width:1279px){.hcaptcha-integrations table tbody{grid-template-columns:repeat(3,minmax(100px,1fr))}}@media (max-width:1023px){.hcaptcha-integrations table tbody{grid-template-columns:repeat(2,minmax(100px,1fr))}}@media (max-width:782px){#hcaptcha-integrations-search{font-size:14px;min-height:unset}}body div.kagg-dialog{--color-activate:#00a32a;--color-deactivate:#d63638;--color-install:#dba617}body div.kagg-dialog.activate .kagg-dialog-container .kagg-dialog-box{color:var(--color-activate)}body div.kagg-dialog.activate .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-activate);color:#fff}body div.kagg-dialog.deactivate .kagg-dialog-container .kagg-dialog-box{color:var(--color-deactivate)}body div.kagg-dialog.deactivate .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-deactivate);color:#fff}body div.kagg-dialog.install .kagg-dialog-container .kagg-dialog-box{color:var(--color-install)}body div.kagg-dialog.install .kagg-dialog-container .kagg-dialog-box .kagg-dialog-buttons button.btn-ok{background:var(--color-install);color:#fff}
  • hcaptcha-for-forms-and-more/trunk/assets/js/admin-jetpack.js

    r3339595 r3359717  
    33/**
    44 * @param HCaptchaJetpackObject.hCaptcha
    5  * @param window.hCaptchaJetpack
    65 */
    76
  • hcaptcha-for-forms-and-more/trunk/assets/js/apps/hcaptcha.js

    r3339595 r3359717  
    1 (()=>{"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=r(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var o=0,a=function(){};return{s:a,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,c=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return u=t.done,t},e:function(t){c=!0,i=t},f:function(){try{u||null==n.return||n.return()}finally{if(c)throw i}}}}function n(t){return function(t){if(Array.isArray(t))return o(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||r(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(t,e){if(t){if("string"==typeof t)return o(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(t,e):void 0}}function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,i(r.key),r)}}function i(e){var n=function(e,n){if("object"!=t(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,n||"default");if("object"!=t(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}(e,"string");return"symbol"==t(n)?n:n+""}var u=function(){return r=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.foundForms=[],this.params=null,this.observingDarkMode=!1,this.observingPasswordManagers=!1,this.darkElement=null,this.darkClass=null,this.callback=this.callback.bind(this),this.validate=this.validate.bind(this),this.addedDCLCallbacks=new Set},(o=[{key:"generateID",value:function(){var t=function(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)};return t()+"-"+t()+"-"+t()+"-"+t()}},{key:"getFoundFormById",value:function(t){var e;return null!==(e=this.foundForms.filter(function(e){return t===e.hCaptchaId})[0])&&void 0!==e?e:null}},{key:"getWidgetId",value:function(t){var e,n,r;if(void 0===t)return"";var o=null!==(e=null===(n=t.closest(this.formSelector))||void 0===n||null===(n=n.dataset)||void 0===n?void 0:n.hCaptchaId)&&void 0!==e?e:"";if(!o)return"";var a=this.getFoundFormById(o);return null!==(r=null==a?void 0:a.widgetId)&&void 0!==r?r:""}},{key:"reset",value:function(t){var e=this.getWidgetId(t);e&&hcaptcha.reset(e)}},{key:"isSameOrDescendant",value:function(t,e){for(var n=e;n;){if(n===t)return!0;n=n.parentElement}return!1}},{key:"getCurrentForm",value:function(t){var e,n=t.currentTarget.closest(this.formSelector),r=this.getFoundFormById(null==n||null===(e=n.dataset)||void 0===e?void 0:e.hCaptchaId),o=null==r?void 0:r.submitButtonElement,a=null==r?void 0:r.widgetId;if(a&&this.isSameOrDescendant(o,t.target))return t.preventDefault(),t.stopPropagation(),{formElement:n,submitButtonElement:o,widgetId:a}}},{key:"validate",value:function(t){if(this.currentForm=this.getCurrentForm(t),this.currentForm){var e=this.currentForm,n=e.formElement,r=e.widgetId,o=n.querySelector(this.responseSelector),a=o?o.value:"";""===a?hcaptcha.execute(r,{async:!1}):this.callback(a)}}},{key:"isValidated",value:function(){return void 0!==this.currentForm}},{key:"getForms",value:function(){return n(document.querySelectorAll(this.formSelector))}},{key:"getParams",value:function(){if(null!==this.params)return this.params;var t;try{var e,n;t=JSON.parse(wp.hooks.applyFilters("hcaptcha.params",null!==(e=null===(n=HCaptchaMainObject)||void 0===n?void 0:n.params)&&void 0!==e?e:""))}catch(e){t={}}return t.callback=this.callback,t}},{key:"setParams",value:function(t){this.params=t}},{key:"setDarkData",value:function(){var t={"twenty-twenty-one":{darkStyleId:"twenty-twenty-one-style-css",darkElement:document.body,darkClass:"is-dark-theme"},"wp-dark-mode":{darkStyleId:"wp-dark-mode-frontend-css",darkElement:document.documentElement,darkClass:"wp-dark-mode-active"},"droit-dark-mode":{darkStyleId:"dtdr-public-inline-css",darkElement:document.documentElement,darkClass:"drdt-dark-mode"}};t=wp.hooks.applyFilters("hcaptcha.darkData",t);for(var e=0,n=Object.values(t);e<n.length;e++){var r=n[e];if(document.getElementById(r.darkStyleId))return this.darkElement=r.darkElement,void(this.darkClass=r.darkClass)}}},{key:"observeDarkMode",value:function(){var t=this;this.observingDarkMode||(this.observingDarkMode=!0,"auto"!==this.getParams().theme)||(this.setDarkData(),this.darkElement&&this.darkClass&&new MutationObserver(function(n){var r,o=e(n);try{var a=function(){var e=r.value.oldValue,n=t.darkElement.getAttribute("class");e=e?e.split(" "):[],(n=n?n.split(" "):[]).filter(function(t){return!e.includes(t)}).concat(e.filter(function(t){return!n.includes(t)})).includes(t.darkClass)&&t.bindEvents()};for(o.s();!(r=o.n()).done;)a()}catch(t){o.e(t)}finally{o.f()}}).observe(this.darkElement,{attributes:!0,attributeOldValue:!0}))}},{key:"observePasswordManagers",value:function(){var t=this;if(!this.observingPasswordManagers){this.observingPasswordManagers=!0;var n=!1,r=new MutationObserver(function(o){n||(n=!0,requestAnimationFrame(function(){var a,i=e(o);try{for(i.s();!(a=i.n()).done;)if("childList"===a.value.type){var u=document.querySelector("com-1password-button"),c=document.querySelector("div[data-lastpass-icon-root]");if(u||c){r.disconnect(),t.foundForms.map(function(e){var n=e.hCaptchaId,r=e.submitButtonElement;if(!r)return e;var o=document.querySelector('[data-h-captcha-id="'.concat(n,'"]')).querySelector(".h-captcha"),a=o.dataset;return"invisible"===a.size||"true"===a.force||(o.dataset.force="true",r.addEventListener("click",t.validate,!0)),e});break}}}catch(t){i.e(t)}finally{i.f()}n=!1}))});r.observe(document.body,{childList:!0,subtree:!0})}}},{key:"getWidgetByToken",value:function(t){var e=n(document.querySelectorAll(this.responseSelector)).find(function(e){return e.value===t});return e?e.closest(".h-captcha"):null}},{key:"callback",value:function(t){document.dispatchEvent(new CustomEvent("hCaptchaSubmitted",{detail:{token:t}}));var e=this.getParams(),n=this.getWidgetByToken(t),r=n?n.dataset.force:null;("invisible"===e.size||"true"===r&&this.isValidated())&&this.submit()}},{key:"applyAutoTheme",value:function(t){if("auto"!==t.theme)return t;var e;if(t.theme="light",!this.darkElement)return t.theme=null!==(e=window)&&void 0!==e&&e.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",t;var n=this.darkElement.getAttribute("class");return(n=n||"").includes(this.darkClass)&&(t.theme="dark"),t}},{key:"render",value:function(e){this.observeDarkMode(),this.observePasswordManagers();var n,r,o=this.getParams();return"object"===t(o.theme)?null!==(n=null===(r=o)||void 0===r||null===(r=r.theme)||void 0===r||null===(r=r.component)||void 0===r||null===(r=r.checkbox)||void 0===r||null===(r=r.main)||void 0===r?void 0:r.fill)&&void 0!==n&&n&&(e.dataset.theme="custom"):o.theme=e.dataset.theme,o.size=e.dataset.size,o=this.applyAutoTheme(o),hcaptcha.render(e,o)}},{key:"addSyncedEventListener",value:function(t){if("loading"===document.readyState){if(this.addedDCLCallbacks.has(t))return;this.addedDCLCallbacks.add(t),window.addEventListener("DOMContentLoaded",t)}else t()}},{key:"bindEvents",value:function(){var t=this;"undefined"!=typeof hcaptcha&&(this.formSelector=wp.hooks.applyFilters("hcaptcha.formSelector","form, section.cwginstock-subscribe-form, div.sdm_download_item, .gform_editor, #nf-builder, .wpforms-captcha-preview"),this.submitButtonSelector=wp.hooks.applyFilters("hcaptcha.submitButtonSelector",'*[type="submit"]:not(.quform-default-submit), #check_config, button[type="button"].ff-btn, a.et_pb_newsletter_button.et_pb_button, .forminator-button-submit, .frm_button_submit, a.sdm_download, .uagb-forms-main-submit-button'),this.responseSelector='textarea[name="h-captcha-response"]',this.getForms().map(function(e){var n=e.querySelector(".h-captcha");if(null===n)return e;if(n.classList.contains("hcaptcha-widget-id"))return e;n.innerHTML="";var r=t.generateID(),o=e.querySelectorAll(t.submitButtonSelector)[0],a=t.render(n);if(e.dataset.hCaptchaId=r,t.foundForms.push({hCaptchaId:r,submitButtonElement:o,widgetId:a}),!o)return e;var i=n.dataset;return"invisible"!==i.size&&"true"!==i.force||o.addEventListener("click",t.validate,!0),e},this))}},{key:"isAjaxSubmitButton",value:function(t){var e=t.getAttribute("type"),n="submit"!==(e=e?e.toLowerCase():"");return wp.hooks.applyFilters("hcaptcha.ajaxSubmitButton",n,t)}},{key:"submit",value:function(){if(this.currentForm){var t=this.currentForm,e=t.formElement,n=t.submitButtonElement;if("form"!==e.tagName.toLowerCase()||this.isAjaxSubmitButton(n))return n.removeEventListener("click",this.validate,!0),void n.click();e.requestSubmit?e.requestSubmit(n):e.submit()}}}])&&a(r.prototype,o),i&&a(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o,i}();window.HCaptchaMainObject=window.HCaptchaMainObject||{};const c=u;function s(t){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}function l(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,d(r.key),r)}}function d(t){var e=function(t,e){if("object"!=s(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=s(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==s(e)?e:e+""}function f(t,e,n){return e=p(e),function(t,e){if(e&&("object"==s(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,m()?Reflect.construct(e,n||[],p(t).constructor):e.apply(t,n))}function h(t){var e="function"==typeof Map?new Map:void 0;return h=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return function(t,e,n){if(m())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,e);var o=new(t.bind.apply(t,r));return n&&v(o,n.prototype),o}(t,arguments,p(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),v(n,t)},h(t)}function m(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(m=function(){return!!t})()}function v(t,e){return v=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},v(t,e)}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}const y=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),f(this,e,arguments)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&v(t,e)}(e,t),n=e,(r=[{key:"connectedCallback",value:function(){window.hCaptcha.addSyncedEventListener(window.hCaptchaBindEvents)}}])&&l(n.prototype,r),o&&l(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(h(HTMLElement));var b=new c;window.hCaptcha=b,window.hCaptchaGetWidgetId=function(t){b.getWidgetId(t)},window.hCaptchaReset=function(t){b.reset(t)},window.hCaptchaBindEvents=function(){b.bindEvents()},window.hCaptchaSubmit=function(){b.submit()},window.hCaptchaOnLoad=function(){b.addSyncedEventListener(function(){document.dispatchEvent(new CustomEvent("hCaptchaBeforeBindEvents")),window.hCaptchaBindEvents(),document.dispatchEvent(new CustomEvent("hCaptchaLoaded"))})},window.customElements.define("h-captcha",y),document.dispatchEvent(new CustomEvent("hCaptchaBeforeAPI"))})();
     1(()=>{"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=r(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var o=0,a=function(){};return{s:a,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,c=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return u=t.done,t},e:function(t){c=!0,i=t},f:function(){try{u||null==n.return||n.return()}finally{if(c)throw i}}}}function n(t){return function(t){if(Array.isArray(t))return o(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||r(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(t,e){if(t){if("string"==typeof t)return o(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(t,e):void 0}}function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,i(r.key),r)}}function i(e){var n=function(e,n){if("object"!=t(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,n||"default");if("object"!=t(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}(e,"string");return"symbol"==t(n)?n:n+""}var u=function(){return r=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.foundForms=[],this.params=null,this.observingDarkMode=!1,this.observingPasswordManagers=!1,this.darkElement=null,this.darkClass=null,this.callback=this.callback.bind(this),this.validate=this.validate.bind(this),this.addedDCLCallbacks=new Set},(o=[{key:"generateID",value:function(){var t=function(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)};return t()+"-"+t()+"-"+t()+"-"+t()}},{key:"getFoundFormById",value:function(t){var e;return null!==(e=this.foundForms.filter(function(e){return t===e.hCaptchaId})[0])&&void 0!==e?e:null}},{key:"getWidgetId",value:function(t){var e,n,r;if(void 0===t)return"";var o=null!==(e=null===(n=t.closest(this.formSelector))||void 0===n||null===(n=n.dataset)||void 0===n?void 0:n.hCaptchaId)&&void 0!==e?e:"";if(!o)return"";var a=this.getFoundFormById(o);return null!==(r=null==a?void 0:a.widgetId)&&void 0!==r?r:""}},{key:"reset",value:function(t){var e=this.getWidgetId(t);e&&hcaptcha.reset(e)}},{key:"isSameOrDescendant",value:function(t,e){for(var n=e;n;){if(n===t)return!0;n=n.parentElement}return!1}},{key:"getCurrentForm",value:function(t){var e,n=t.currentTarget.closest(this.formSelector),r=this.getFoundFormById(null==n||null===(e=n.dataset)||void 0===e?void 0:e.hCaptchaId),o=null==r?void 0:r.submitButtonElement,a=null==r?void 0:r.widgetId;if(a&&this.isSameOrDescendant(o,t.target))return t.preventDefault(),t.stopPropagation(),{formElement:n,submitButtonElement:o,widgetId:a}}},{key:"validate",value:function(t){if(this.currentForm=this.getCurrentForm(t),this.currentForm){var e=this.currentForm,n=e.formElement,r=e.widgetId,o=n.querySelector(this.responseSelector),a=o?o.value:"";""===a?hcaptcha.execute(r,{async:!1}):this.callback(a)}}},{key:"isValidated",value:function(){return void 0!==this.currentForm}},{key:"getForms",value:function(){return n(document.querySelectorAll(this.formSelector))}},{key:"getParams",value:function(){if(null!==this.params)return this.params;var t;try{var e,n;t=JSON.parse(wp.hooks.applyFilters("hcaptcha.params",null!==(e=null===(n=HCaptchaMainObject)||void 0===n?void 0:n.params)&&void 0!==e?e:""))}catch(e){t={}}return t.callback=this.callback,t}},{key:"setParams",value:function(t){this.params=t}},{key:"setDarkData",value:function(){var t={"twenty-twenty-one":{darkStyleId:"twenty-twenty-one-style-css",darkElement:document.body,darkClass:"is-dark-theme"},"wp-dark-mode":{darkStyleId:"wp-dark-mode-frontend-css",darkElement:document.documentElement,darkClass:"wp-dark-mode-active"},"droit-dark-mode":{darkStyleId:"dtdr-public-inline-css",darkElement:document.documentElement,darkClass:"drdt-dark-mode"}};t=wp.hooks.applyFilters("hcaptcha.darkData",t);for(var e=0,n=Object.values(t);e<n.length;e++){var r=n[e];if(document.getElementById(r.darkStyleId))return this.darkElement=r.darkElement,void(this.darkClass=r.darkClass)}}},{key:"observeDarkMode",value:function(){var t=this;this.observingDarkMode||(this.observingDarkMode=!0,"auto"!==this.getParams().theme)||(this.setDarkData(),this.darkElement&&this.darkClass&&new MutationObserver(function(n){var r,o=e(n);try{var a=function(){var e=r.value.oldValue,n=t.darkElement.getAttribute("class");e=e?e.split(" "):[],(n=n?n.split(" "):[]).filter(function(t){return!e.includes(t)}).concat(e.filter(function(t){return!n.includes(t)})).includes(t.darkClass)&&t.bindEvents()};for(o.s();!(r=o.n()).done;)a()}catch(t){o.e(t)}finally{o.f()}}).observe(this.darkElement,{attributes:!0,attributeOldValue:!0}))}},{key:"observePasswordManagers",value:function(){var t=this;if(!this.observingPasswordManagers){this.observingPasswordManagers=!0;var n=!1,r=new MutationObserver(function(o){n||(n=!0,requestAnimationFrame(function(){var a,i=e(o);try{for(i.s();!(a=i.n()).done;)if("childList"===a.value.type){var u=document.querySelector("com-1password-button"),c=document.querySelector("div[data-lastpass-icon-root]");if(u||c){r.disconnect(),t.foundForms.map(function(e){var n=e.hCaptchaId,r=e.submitButtonElement;if(!r)return e;var o=document.querySelector('[data-h-captcha-id="'.concat(n,'"]')).querySelector(".h-captcha"),a=o.dataset;return"invisible"===a.size||"true"===a.force||(o.dataset.force="true",r.addEventListener("click",t.validate,!0)),e});break}}}catch(t){i.e(t)}finally{i.f()}n=!1}))});r.observe(document.body,{childList:!0,subtree:!0})}}},{key:"getWidgetByToken",value:function(t){var e=n(document.querySelectorAll(this.responseSelector)).find(function(e){return e.value===t});return e?e.closest(".h-captcha"):null}},{key:"callback",value:function(t){document.dispatchEvent(new CustomEvent("hCaptchaSubmitted",{detail:{token:t}}));var e=this.getParams(),n=this.getWidgetByToken(t),r=n?n.dataset.force:null;("invisible"===e.size||"true"===r&&this.isValidated())&&this.submit()}},{key:"applyAutoTheme",value:function(t){if("auto"!==t.theme)return t;var e;if(t.theme="light",!this.darkElement)return t.theme=null!==(e=window)&&void 0!==e&&e.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",t;var n=this.darkElement.getAttribute("class");return(n=n||"").includes(this.darkClass)&&(t.theme="dark"),t}},{key:"render",value:function(e){this.observeDarkMode(),this.observePasswordManagers();var n,r,o=this.getParams();return"object"===t(o.theme)?null!==(n=null===(r=o)||void 0===r||null===(r=r.theme)||void 0===r||null===(r=r.component)||void 0===r||null===(r=r.checkbox)||void 0===r||null===(r=r.main)||void 0===r?void 0:r.fill)&&void 0!==n&&n&&(e.dataset.theme="custom"):o.theme=e.dataset.theme,o.size=e.dataset.size,o=this.applyAutoTheme(o),hcaptcha.render(e,o)}},{key:"addSyncedEventListener",value:function(t){if("loading"===document.readyState){if(this.addedDCLCallbacks.has(t))return;this.addedDCLCallbacks.add(t),window.addEventListener("DOMContentLoaded",t)}else t()}},{key:"moveHP",value:function(t){var e,r;if(t&&"1"!==(null==t||null===(e=t.dataset)||void 0===e?void 0:e.hpMoved)){t.dataset.hpMoved="1";var o=t.querySelector('input[id^="hcap_hp_"]');if(o){var a=n(t.querySelectorAll("input,select,textarea,button")).filter(function(t){return t!==o&&"hidden"!==t.type&&!t.closest(".h-captcha")});if(a.length){var i=a[Math.floor(Math.random()*a.length)];if(i&&i.parentNode){var u=null!==(r=o.getAttribute("id"))&&void 0!==r?r:"",c=u?t.querySelector('label[for="'.concat(u,'"]')):null,l=document.createDocumentFragment();c&&c.isConnected&&l.appendChild(c),l.appendChild(o),i.parentNode.insertBefore(l,i)}}}}}},{key:"addFSTToken",value:function(t){if(t){var e="hcap_fst_token",n=t.querySelector('input[type="hidden"][name="'.concat(e,'"]'));n||((n=document.createElement("input")).type="hidden",n.name=e),t.firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n)}}},{key:"bindEvents",value:function(){var t=this;"undefined"!=typeof hcaptcha&&(this.formSelector=wp.hooks.applyFilters("hcaptcha.formSelector","form, section.cwginstock-subscribe-form, div.sdm_download_item, .gform_editor, #nf-builder, .wpforms-captcha-preview"),this.submitButtonSelector=wp.hooks.applyFilters("hcaptcha.submitButtonSelector",'*[type="submit"]:not(.quform-default-submit), #check_config, button[type="button"].ff-btn, a.et_pb_newsletter_button.et_pb_button, .forminator-button-submit, .frm_button_submit, a.sdm_download, .uagb-forms-main-submit-button'),this.responseSelector='textarea[name="h-captcha-response"]',this.getForms().map(function(e){var n=e.querySelector(".h-captcha");if(null===n)return e;if(n.classList.contains("hcaptcha-widget-id"))return e;t.moveHP(e),t.addFSTToken(e),n.innerHTML="";var r=t.generateID(),o=e.querySelectorAll(t.submitButtonSelector)[0],a=t.render(n);if(e.dataset.hCaptchaId=r,t.foundForms.push({hCaptchaId:r,submitButtonElement:o,widgetId:a}),!o)return e;var i=n.dataset;return"invisible"!==i.size&&"true"!==i.force||o.addEventListener("click",t.validate,!0),e},this))}},{key:"isAjaxSubmitButton",value:function(t){var e=t.getAttribute("type"),n="submit"!==(e=e?e.toLowerCase():"");return wp.hooks.applyFilters("hcaptcha.ajaxSubmitButton",n,t)}},{key:"submit",value:function(){if(this.currentForm){var t=this.currentForm,e=t.formElement,n=t.submitButtonElement;if("form"!==e.tagName.toLowerCase()||this.isAjaxSubmitButton(n))return n.removeEventListener("click",this.validate,!0),void n.click();e.requestSubmit?e.requestSubmit(n):e.submit()}}}])&&a(r.prototype,o),i&&a(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o,i}();window.HCaptchaMainObject=window.HCaptchaMainObject||{};const c=u;function l(t){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l(t)}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,d(r.key),r)}}function d(t){var e=function(t,e){if("object"!=l(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==l(e)?e:e+""}function f(t,e,n){return e=v(e),function(t,e){if(e&&("object"==l(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,m()?Reflect.construct(e,n||[],v(t).constructor):e.apply(t,n))}function h(t){var e="function"==typeof Map?new Map:void 0;return h=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return function(t,e,n){if(m())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,e);var o=new(t.bind.apply(t,r));return n&&p(o,n.prototype),o}(t,arguments,v(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),p(n,t)},h(t)}function m(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(m=function(){return!!t})()}function p(t,e){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},p(t,e)}function v(t){return v=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},v(t)}const y=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),f(this,e,arguments)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&p(t,e)}(e,t),n=e,(r=[{key:"connectedCallback",value:function(){window.hCaptcha.addSyncedEventListener(window.hCaptchaBindEvents)}}])&&s(n.prototype,r),o&&s(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(h(HTMLElement));var b=new c;window.hCaptcha=b,window.hCaptchaGetWidgetId=function(t){b.getWidgetId(t)},window.hCaptchaReset=function(t){b.reset(t)},window.hCaptchaBindEvents=function(){document.dispatchEvent(new CustomEvent("hCaptchaBeforeBindEvents")),b.bindEvents(),document.dispatchEvent(new CustomEvent("hCaptchaAfterBindEvents"))},window.hCaptchaSubmit=function(){b.submit()},window.hCaptchaOnLoad=function(){b.addSyncedEventListener(function(){window.hCaptchaBindEvents(),document.dispatchEvent(new CustomEvent("hCaptchaLoaded",{cancelable:!0}))})},window.customElements.define("h-captcha",y),document.dispatchEvent(new CustomEvent("hCaptchaBeforeAPI"))})();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-back-in-stock-notifier.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var a=r.call(t,e||"default");if("object"!=n(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}r.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,r,n,a){var o,i=null!==(o=e.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(r))){var c=t.getHCaptchaData(a,n);e.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+n+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,e){var r=t.find('[name="h-captcha-response"]').val();r=r||"";var n=t.find('[name="hcaptcha-widget-id"]').val();n=n||"";var a=t.find('[name="'+e+'"]').val();return{response:r,id:n,nonce:a=a||""}}}],(r=null)&&a(e.prototype,r),n&&a(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,n}()}},e={};function r(n){var a=e[n];if(void 0!==a)return a.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,a=r(2981);(n=jQuery).ajaxPrefilter(function(t){a.d.addHCaptchaData(t,"cwginstock_product_subscribe","hcaptcha_back_in_stock_notifier_nonce",n(".cwginstock-subscribe-form"))}),jQuery(document).on("ajaxSuccess",function(t,e,r){var n=new URLSearchParams(r.data);"cwg_trigger_popup_ajax"===n.get("action")&&(document.querySelector('input[name="cwg-product-id"][value="'+n.get("product_id")+'"]')&&window.hCaptchaBindEvents())})})();
     1(()=>{"use strict";var t={2981:(t,e,n)=>{function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function r(t,e){for(var n=0;n<e.length;n++){var a=e[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,o(a.key),a)}}function o(t){var e=function(t,e){if("object"!=a(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=a(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==a(e)?e:e+""}n.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,a=[{key:"addHCaptchaData",value:function(e,n,a,r){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(n))&&(e.data+=t.getHCaptchaData(r,a))}},{key:"getHCaptchaData",value:function(t,e){for(var n,a="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(n=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==n?n:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var c,i=o[r];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";a+="&".concat(i,"=").concat(u)}}return a}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:n}}))}catch(t){}var r=t.apply(void 0,n);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:n,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:n,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:n}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(n=null)&&r(e.prototype,n),a&&r(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,a}()}},e={};function n(a){var r=e[a];if(void 0!==r)return r.exports;var o=e[a]={exports:{}};return t[a](o,o.exports,n),o.exports}n.d=(t,e)=>{for(var a in e)n.o(e,a)&&!n.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var a,r=n(2981);(a=jQuery).ajaxPrefilter(function(t){r.d.addHCaptchaData(t,"cwginstock_product_subscribe","hcaptcha_back_in_stock_notifier_nonce",a(".cwginstock-subscribe-form"))}),jQuery(document).on("ajaxSuccess",function(t,e,n){var a=new URLSearchParams(n.data);"cwg_trigger_popup_ajax"===a.get("action")&&(document.querySelector('input[name="cwg-product-id"][value="'+a.get("product_id")+'"]')&&window.hCaptchaBindEvents())})})();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-beaver-builder.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,e,r)=>{function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function n(t,e){for(var r=0;r<e.length;r++){var a=e[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,o(a.key),a)}}function o(t){var e=function(t,e){if("object"!=a(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==a(e)?e:e+""}r.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,a=[{key:"addHCaptchaData",value:function(e,r,a,n){var o,i=null!==(o=e.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(r))){var c=t.getHCaptchaData(n,a);e.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+a+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,e){var r=t.find('[name="h-captcha-response"]').val();r=r||"";var a=t.find('[name="hcaptcha-widget-id"]').val();a=a||"";var n=t.find('[name="'+e+'"]').val();return{response:r,id:a,nonce:n=n||""}}}],(r=null)&&n(e.prototype,r),a&&n(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,a}()}},e={};function r(a){var n=e[a];if(void 0!==n)return n.exports;var o=e[a]={exports:{}};return t[a](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var a in e)r.o(e,a)&&!r.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var a,n=r(2981);wp.hooks.addFilter("hcaptcha.formSelector","hcaptcha",function(t){return t+", div.fl-login-form"}),wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", a.fl-button"}),(a=jQuery).ajaxPrefilter(function(t){var e,r=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof r){var o=new URLSearchParams(r).get("node_id"),i=a("[data-node="+o+"]");n.d.addHCaptchaData(t,"fl_builder_email","hcaptcha_beaver_builder_nonce",i),n.d.addHCaptchaData(t,"fl_builder_login_form_submit","hcaptcha_login_nonce",i)}})})();
     1(()=>{"use strict";var t={2981:(t,e,a)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function r(t,e){for(var a=0;a<e.length;a++){var n=e[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var r=a.call(t,e||"default");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}a.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,a,n,r){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(a))&&(e.data+=t.getHCaptchaData(r,n))}},{key:"getHCaptchaData",value:function(t,e){for(var a,n="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(a=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==a?a:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var c,i=o[r];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";n+="&".concat(i,"=").concat(u)}}return n}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:a}}))}catch(t){}var r=t.apply(void 0,a);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:a,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:a,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:a}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(a=null)&&r(e.prototype,a),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,a,n}()}},e={};function a(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,a),o.exports}a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,r=a(2981);wp.hooks.addFilter("hcaptcha.formSelector","hcaptcha",function(t){return t+", div.fl-login-form"}),wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", a.fl-button"}),(n=jQuery).ajaxPrefilter(function(t){var e,a=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof a){var o=new URLSearchParams(a).get("node_id"),c=n("[data-node="+o+"]");r.d.addHCaptchaData(t,"fl_builder_email","hcaptcha_beaver_builder_nonce",c),r.d.addHCaptchaData(t,"fl_builder_login_form_submit","hcaptcha_login_nonce",c)}})})();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-brizy.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,e,r)=>{function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function n(t,e){for(var r=0;r<e.length;r++){var a=e[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,o(a.key),a)}}function o(t){var e=function(t,e){if("object"!=a(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==a(e)?e:e+""}r.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,a=[{key:"addHCaptchaData",value:function(e,r,a,n){var o,i=null!==(o=e.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(r))){var c=t.getHCaptchaData(n,a);e.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+a+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,e){var r=t.find('[name="h-captcha-response"]').val();r=r||"";var a=t.find('[name="hcaptcha-widget-id"]').val();a=a||"";var n=t.find('[name="'+e+'"]').val();return{response:r,id:a,nonce:n=n||""}}}],(r=null)&&n(e.prototype,r),a&&n(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,a}()}},e={};function r(a){var n=e[a];if(void 0!==n)return n.exports;var o=e[a]={exports:{}};return t[a](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var a in e)r.o(e,a)&&!r.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var a,n=r(2981);(a=jQuery).ajaxPrefilter(function(t){if("brizy_submit_form"===new URLSearchParams(t.url.split("?")[1]).get("action")){var e=JSON.parse(t.data.get("data")),r="hcaptcha_brizy_nonce",o=a(".brz-form"),i=n.d.getHCaptchaData(o,r);e.push({name:"h-captcha-response",value:i.response,required:!1}),e.push({name:r,value:i.nonce,required:!1}),t.data.set("data",JSON.stringify(e))}})})();
     1(()=>{"use strict";var t={2981:(t,e,a)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function r(t,e){for(var a=0;a<e.length;a++){var n=e[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var r=a.call(t,e||"default");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}a.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,a,n,r){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(a))&&(e.data+=t.getHCaptchaData(r,n))}},{key:"getHCaptchaData",value:function(t,e){for(var a,n="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(a=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==a?a:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var c,i=o[r];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";n+="&".concat(i,"=").concat(u)}}return n}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:a}}))}catch(t){}var r=t.apply(void 0,a);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:a,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:a,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:a}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(a=null)&&r(e.prototype,a),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,a,n}()}},e={};function a(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,a),o.exports}a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,r=a(2981);(n=jQuery).ajaxPrefilter(function(t){if("brizy_submit_form"===new URLSearchParams(t.url.split("?")[1]).get("action")){var e=JSON.parse(t.data.get("data")),a="hcaptcha_brizy_nonce",o=n(".brz-form"),c=r.d.getHCaptchaData(o,a);e.push({name:"h-captcha-response",value:c.response,required:!1}),e.push({name:a,value:c.nonce,required:!1}),t.data.set("data",JSON.stringify(e))}})})();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-customer-reviews.js

    r3339595 r3359717  
    1515                'hcaptcha',
    1616                ( formSelector ) => {
    17                     return formSelector + ', div#tab-reviews, div#tab-cr_qna, div.cr-qna-list-inl-answ';
     17                    return formSelector + ', div#tab-reviews, div#tab-cr_qna, div.cr-qna-list-inl-answ, div.cr-qna-new-q-form';
    1818                },
    1919            );
     
    3434                'click',
    3535                '#tab-title-reviews a, #tab-title-cr_qna a, ' +
    36                 'button.cr-review-form-continue.cr-review-form-error',
     36                'button.cr-review-form-continue.cr-review-form-error, ' +
     37                'button.cr-qna-ask-button',
    3738                function() {
    3839                    hCaptchaBindEvents();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-customer-reviews.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,e,r)=>{function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function n(t,e){for(var r=0;r<e.length;r++){var a=e[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,o(a.key),a)}}function o(t){var e=function(t,e){if("object"!=a(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==a(e)?e:e+""}r.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,a=[{key:"addHCaptchaData",value:function(e,r,a,n){var o,i=null!==(o=e.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(r))){var c=t.getHCaptchaData(n,a);e.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+a+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,e){var r=t.find('[name="h-captcha-response"]').val();r=r||"";var a=t.find('[name="hcaptcha-widget-id"]').val();a=a||"";var n=t.find('[name="'+e+'"]').val();return{response:r,id:a,nonce:n=n||""}}}],(r=null)&&n(e.prototype,r),a&&n(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,a}()}},e={};function r(a){var n=e[a];if(void 0!==n)return n.exports;var o=e[a]={exports:{}};return t[a](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var a in e)r.o(e,a)&&!r.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var a=r(2981),n=window.hCaptchaCustomerReviews||function(t,e,r){var n={init:function(){wp.hooks.addFilter("hcaptcha.formSelector","hcaptcha",function(t){return t+", div#tab-reviews, div#tab-cr_qna, div.cr-qna-list-inl-answ"}),wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", button.cr-review-form-submit"}),r(n.ready)},ready:function(){r(t).on("click","#tab-title-reviews a, #tab-title-cr_qna a, button.cr-review-form-continue.cr-review-form-error",function(){hCaptchaBindEvents()}),r.ajaxPrefilter(function(t){var e,n=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof n){var o,i=new URLSearchParams(n),c=i.get("action");switch(c){case"cr_submit_review":o=r("#review_form");break;case"cr_new_qna":var u=i.get("questionID");o=r(u?'[data-question="'.concat(u,'"]'):"#cr_qna");break;default:return}a.d.addHCaptchaData(t,c,"hcaptcha_customer_reviews_nonce",o)}})}};return n}(document,window,jQuery);window.hCaptchaCustomerReviews=n,n.init()})();
     1(()=>{"use strict";var t={2981:(t,e,n)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,o(r.key),r)}}function o(t){var e=function(t,e){if("object"!=r(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var a=n.call(t,e||"default");if("object"!=r(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==r(e)?e:e+""}n.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,r=[{key:"addHCaptchaData",value:function(e,n,r,a){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(n))&&(e.data+=t.getHCaptchaData(a,r))}},{key:"getHCaptchaData",value:function(t,e){for(var n,r="",a=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(n=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==n?n:"","hcap_hp_sig","hcap_fst_token"];a<o.length;a++){var c,i=o[a];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";r+="&".concat(i,"=").concat(u)}}return r}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:n}}))}catch(t){}var a=t.apply(void 0,n);return a.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:n,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:n,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:n}}))}catch(t){}}),a};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(n=null)&&a(e.prototype,n),r&&a(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,r}()}},e={};function n(r){var a=e[r];if(void 0!==a)return a.exports;var o=e[r]={exports:{}};return t[r](o,o.exports,n),o.exports}n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var r=n(2981),a=window.hCaptchaCustomerReviews||function(t,e,n){var a={init:function(){wp.hooks.addFilter("hcaptcha.formSelector","hcaptcha",function(t){return t+", div#tab-reviews, div#tab-cr_qna, div.cr-qna-list-inl-answ, div.cr-qna-new-q-form"}),wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", button.cr-review-form-submit"}),n(a.ready)},ready:function(){n(t).on("click","#tab-title-reviews a, #tab-title-cr_qna a, button.cr-review-form-continue.cr-review-form-error, button.cr-qna-ask-button",function(){hCaptchaBindEvents()}),n.ajaxPrefilter(function(t){var e,a=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof a){var o,c=new URLSearchParams(a),i=c.get("action");switch(i){case"cr_submit_review":o=n("#review_form");break;case"cr_new_qna":var u=c.get("questionID");o=n(u?'[data-question="'.concat(u,'"]'):"#cr_qna");break;default:return}r.d.addHCaptchaData(t,i,"hcaptcha_customer_reviews_nonce",o)}})}};return a}(document,window,jQuery);window.hCaptchaCustomerReviews=a,a.init()})();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-divi-email-optin.js

    r3064004 r3359717  
    66    // noinspection JSCheckFunctionSignatures
    77    $.ajaxPrefilter( function( options ) {
     8        // eslint-disable-next-line @wordpress/no-global-active-element
     9        let $form = $( document.activeElement ).closest( 'form' );
     10
     11        $form = $form.length ? $form : $( '.et_pb_newsletter_form form' );
     12
    813        helper.addHCaptchaData(
    914            options,
    1015            'et_pb_submit_subscribe_form',
    1116            'hcaptcha_divi_email_optin_nonce',
    12             $( '.et_pb_newsletter_form form' )
     17            $form
    1318        );
    1419    } );
     20
     21    $( document ).on( 'ajaxSuccess', function( event, xhr, settings ) {
     22        const params = new URLSearchParams( settings.data );
     23
     24        if ( params.get( 'action' ) !== 'et_pb_submit_subscribe_form' ) {
     25            return;
     26        }
     27
     28        window.hCaptchaBindEvents();
     29    } );
    1530}( jQuery ) );
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-divi-email-optin.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var a=r.call(t,e||"default");if("object"!=n(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}r.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,r,n,a){var o,i=null!==(o=e.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(r))){var c=t.getHCaptchaData(a,n);e.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+n+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,e){var r=t.find('[name="h-captcha-response"]').val();r=r||"";var n=t.find('[name="hcaptcha-widget-id"]').val();n=n||"";var a=t.find('[name="'+e+'"]').val();return{response:r,id:n,nonce:a=a||""}}}],(r=null)&&a(e.prototype,r),n&&a(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,n}()}},e={};function r(n){var a=e[n];if(void 0!==a)return a.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,a=r(2981);(n=jQuery).ajaxPrefilter(function(t){a.d.addHCaptchaData(t,"et_pb_submit_subscribe_form","hcaptcha_divi_email_optin_nonce",n(".et_pb_newsletter_form form"))})})();
     1(()=>{"use strict";var t={2981:(t,e,n)=>{function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function r(t,e){for(var n=0;n<e.length;n++){var a=e[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,o(a.key),a)}}function o(t){var e=function(t,e){if("object"!=a(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=a(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==a(e)?e:e+""}n.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,a=[{key:"addHCaptchaData",value:function(e,n,a,r){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(n))&&(e.data+=t.getHCaptchaData(r,a))}},{key:"getHCaptchaData",value:function(t,e){for(var n,a="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(n=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==n?n:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var c,i=o[r];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";a+="&".concat(i,"=").concat(u)}}return a}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:n}}))}catch(t){}var r=t.apply(void 0,n);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:n,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:n,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:n}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(n=null)&&r(e.prototype,n),a&&r(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,a}()}},e={};function n(a){var r=e[a];if(void 0!==r)return r.exports;var o=e[a]={exports:{}};return t[a](o,o.exports,n),o.exports}n.d=(t,e)=>{for(var a in e)n.o(e,a)&&!n.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var a,r=n(2981);(a=jQuery).ajaxPrefilter(function(t){var e=a(document.activeElement).closest("form");e=e.length?e:a(".et_pb_newsletter_form form"),r.d.addHCaptchaData(t,"et_pb_submit_subscribe_form","hcaptcha_divi_email_optin_nonce",e)}),a(document).on("ajaxSuccess",function(t,e,n){"et_pb_submit_subscribe_form"===new URLSearchParams(n.data).get("action")&&window.hCaptchaBindEvents()})})();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-helper.js

    r3114572 r3359717  
     1/* global jQuery */
     2
    13export class helper {
    24    static addHCaptchaData( options, action, nonceName, $node ) {
     
    79        }
    810
    9         const hCaptchaData = helper.getHCaptchaData( $node, nonceName );
    10 
    11         options.data +=
    12             '&h-captcha-response=' + hCaptchaData.response +
    13             '&hcaptcha-widget-id=' + hCaptchaData.id +
    14             '&' + nonceName + '=' + hCaptchaData.nonce;
     11        options.data += helper.getHCaptchaData( $node, nonceName );
    1512    }
    1613
     14    /**
     15     * Get hCaptcha data from a node.
     16     *
     17     * @param {jQuery} $node     Node.
     18     * @param {string} nonceName Nonce name.
     19     * @return {string} Data.
     20     */
    1721    static getHCaptchaData( $node, nonceName ) {
    18         let response = $node.find( '[name="h-captcha-response"]' ).val();
    19         response = response ? response : '';
    20         let id = $node.find( '[name="hcaptcha-widget-id"]' ).val();
    21         id = id ? id : '';
    22         let nonce = $node.find( '[name="' + nonceName + '"]' ).val();
    23         nonce = nonce ? nonce : '';
     22        const hpName = $node.find( '[name^="hcap_hp_"]' ).first().attr( 'name' ) ?? '';
     23        const names = [ 'h-captcha-response', 'hcaptcha-widget-id', nonceName, hpName, 'hcap_hp_sig', 'hcap_fst_token' ];
    2424
    25         return { response, id, nonce };
     25        let data = '';
     26
     27        for ( const name of names ) {
     28            if ( ! name ) {
     29                continue;
     30            }
     31
     32            const val = $node.find( `[name="${ name }"]` ).first().val() ?? '';
     33
     34            data += `&${ name }=${ val }`;
     35        }
     36
     37        return data;
     38    }
     39
     40    /**
     41     * Installs a composable wrapper around window.fetch and dispatches custom events.
     42     * - Does not alter request/response behavior.
     43     * - Returns the original Promise from fetch.
     44     * - Safe to call multiple times (idempotent).
     45     */
     46    static installFetchEvents() {
     47        if ( typeof window === 'undefined' || typeof window.fetch !== 'function' ) {
     48            return;
     49        }
     50
     51        // Prevent double wrapping.
     52        if ( window.__hcapFetchWrapped ) {
     53            return;
     54        }
     55
     56        ( function( prevFetch ) {
     57            window.fetch = function( ...args ) {
     58                // Fire "before" event prior to the actual call.
     59                try {
     60                    window.dispatchEvent(
     61                        new CustomEvent( 'hCaptchaFetch:before', { detail: { args } } )
     62                    );
     63                } catch ( e ) {
     64                    // Never break the chain because of event listener errors.
     65                }
     66
     67                const p = prevFetch( ...args );
     68
     69                // Side-subscribe without altering the returned Promise.
     70                p.then( ( response ) => {
     71                    try {
     72                        window.dispatchEvent(
     73                            new CustomEvent( 'hCaptchaFetch:success', {
     74                                detail: { args, response: response.clone() },
     75                            } )
     76                        );
     77                    } catch ( e ) {
     78                    }
     79                } ).catch( ( error ) => {
     80                    try {
     81                        window.dispatchEvent(
     82                            new CustomEvent( 'hCaptchaFetch:error', { detail: { args, error } } )
     83                        );
     84                    } catch ( e ) {
     85                    }
     86                } ).finally( () => {
     87                    try {
     88                        window.dispatchEvent(
     89                            new CustomEvent( 'hCaptchaFetch:complete', { detail: { args } } )
     90                        );
     91                    } catch ( e ) {
     92                    }
     93                } );
     94
     95                return p;
     96            };
     97        }( window.fetch ) );
     98
     99        // Mark as wrapped (non-enumerable if possible).
     100        try {
     101            Object.defineProperty( window, '__hcapFetchWrapped', {
     102                value: true,
     103                configurable: true,
     104            } );
     105        } catch ( e ) {
     106            // Fallback if defineProperty is restricted.
     107            window.__hcapFetchWrapped = true;
     108        }
    26109    }
    27110}
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-nf.js

    r3200161 r3359717  
    1 /**
    2  * Ninja Forms controller file.
    3  */
     1/* global Marionette, nfRadio, jQuery */
    42
    5 /* global Marionette, nfRadio */
     3const hCaptchaNF = window.hCaptchaNF || ( function( window, $ ) {
     4    const app = {
     5        init() {
     6            // Register Ajax submit button.
     7            wp.hooks.addFilter(
     8                'hcaptcha.ajaxSubmitButton',
     9                'hcaptcha',
     10                app.isAjaxSubmitButton
     11            );
    612
    7 wp.hooks.addFilter(
    8     'hcaptcha.ajaxSubmitButton',
    9     'hcaptcha',
    10     ( isAjaxSubmitButton, submitButtonElement ) => {
    11         if ( submitButtonElement.classList.contains( 'nf-element' ) ) {
    12             return true;
    13         }
    14 
    15         return isAjaxSubmitButton;
    16     }
    17 );
    18 
    19 document.addEventListener( 'DOMContentLoaded', function() {
    20     const HCaptchaFieldController = Marionette.Object.extend( {
    21         initialize() {
    22             // On the Form Submission's field validation.
    23             const submitChannel = nfRadio.channel( 'submit' );
    24             this.listenTo( submitChannel, 'validate:field', this.updateHcaptcha );
    25             this.listenTo( submitChannel, 'validate:field', this.updateHcaptcha );
    26 
    27             // On the Field's model value change.
    28             const fieldsChannel = nfRadio.channel( 'fields' );
    29             this.listenTo( fieldsChannel, 'change:modelValue', this.updateHcaptcha );
     13            document.addEventListener( 'DOMContentLoaded', app.onDomReady );
     14            $.ajaxPrefilter( this.ajaxPrefilter() );
     15            $( document ).on( 'ajaxSuccess', app.ajaxSuccessHandler );
    3016        },
    3117
    32         updateHcaptcha( model ) {
    33             // Only validate a specific fields type.
    34             if ( 'hcaptcha-for-ninja-forms' !== model.get( 'type' ) ) {
     18        isAjaxSubmitButton( isAjaxSubmitButton, submitButtonElement ) {
     19            if ( submitButtonElement.classList.contains( 'nf-element' ) ) {
     20                return true;
     21            }
     22
     23            return isAjaxSubmitButton;
     24        },
     25
     26        // Initialize Ninja Forms field controller listeners when DOM is ready.
     27        onDomReady() {
     28            // Create a Marionette controller mirroring the original behavior but scoped here.
     29            const HCaptchaFieldController = Marionette.Object.extend( {
     30                initialize() {
     31                    // On the Form Submission's field validation.
     32                    const submitChannel = nfRadio.channel( 'submit' );
     33                    this.listenTo( submitChannel, 'validate:field', this.updateHcaptcha );
     34
     35                    // On the Field's model value change.
     36                    const fieldsChannel = nfRadio.channel( 'fields' );
     37                    this.listenTo( fieldsChannel, 'change:modelValue', this.updateHcaptcha );
     38                },
     39
     40                updateHcaptcha( model ) {
     41                    // Only validate a specific fields type.
     42                    if ( 'hcaptcha-for-ninja-forms' !== model.get( 'type' ) ) {
     43                        return;
     44                    }
     45
     46                    // Check if the Model has a value.
     47                    if ( model.get( 'value' ) ) {
     48                        // Remove Error from Model.
     49                        nfRadio.channel( 'fields' ).request(
     50                            'remove:error',
     51                            model.get( 'id' ),
     52                            'required-error'
     53                        );
     54                    } else {
     55                        const fieldId = model.get( 'id' );
     56
     57                        /**
     58                         * @type {HTMLTextAreaElement}
     59                         */
     60                        const hcapResponse = document.querySelector(
     61                            `div[data-field-id="${ fieldId }"] textarea[name="h-captcha-response"]`
     62                        );
     63
     64                        model.set( 'value', hcapResponse?.value );
     65                    }
     66                },
     67            } );
     68
     69            // Instantiate our custom field's controller, defined above.
     70            window.hCaptchaFieldController = new HCaptchaFieldController();
     71        },
     72
     73        // Register Ajax prefilter for NF submissions.
     74        ajaxPrefilter() {
     75            return function( options ) {
     76                const data = options.data ?? '';
     77
     78                if ( typeof data !== 'string' ) {
     79                    return;
     80                }
     81
     82                const urlParams = new URLSearchParams( data );
     83                const action = urlParams.get( 'action' );
     84
     85                if ( 'nf_ajax_submit' !== action ) {
     86                    return;
     87                }
     88
     89                const widgetName = 'hcaptcha-widget-id';
     90                const tokenName = 'hcap_fst_token';
     91                const sigName = 'hcap_hp_sig';
     92
     93                const formId = JSON.parse( urlParams.get( 'formData' ) ).id;
     94                const $form = $( `#nf-form-${ formId }-cont` );
     95                const widget = $form.find( `[name="${ widgetName }"]` ).val() ?? '';
     96                const token = $form.find( `[name="${ tokenName }"]` ).val() ?? '';
     97                const sig = $form.find( `[name="${ sigName }"]` ).val() ?? '';
     98                const hcapHp = $form.find( `[id^="hcap_hp_"]` );
     99
     100                urlParams.set( widgetName, widget );
     101                urlParams.set( tokenName, token );
     102                urlParams.set( sigName, sig );
     103                urlParams.set( hcapHp.attr( 'id' ) ?? '', hcapHp.val() ?? '' );
     104
     105                options.data = urlParams.toString();
     106            };
     107        },
     108
     109        // jQuery ajaxSuccess handler.
     110        ajaxSuccessHandler( event, xhr, settings ) {
     111            const data = settings.data ?? '';
     112
     113            if ( typeof data !== 'string' ) {
    35114                return;
    36115            }
    37116
    38             // Check if the Model has a value.
    39             if ( model.get( 'value' ) ) {
    40                 // Remove Error from Model.
    41                 nfRadio.channel( 'fields' ).request(
    42                     'remove:error',
    43                     model.get( 'id' ),
    44                     'required-error'
    45                 );
    46             } else {
    47                 const fieldId = model.get( 'id' );
     117            const action = new URLSearchParams( data ).get( 'action' );
    48118
    49                 /**
    50                  * @type {HTMLTextAreaElement}
    51                  */
    52                 const hcapResponse = document.querySelector(
    53                     '.h-captcha[data-fieldId="' + fieldId + '"] textarea[name="h-captcha-response"]'
    54                 );
     119            if ( 'nf_ajax_submit' !== action ) {
     120                return;
     121            }
    55122
    56                 model.set( 'value', hcapResponse.value );
    57             }
     123            window.hCaptchaBindEvents();
    58124        },
    59     } );
     125    };
    60126
    61     // Instantiate our custom field's controller, defined above.
    62     window.hCaptchaFieldController = new HCaptchaFieldController();
    63 } );
     127    return app;
     128}( window, jQuery ) );
    64129
    65 /* global jQuery */
     130window.hCaptchaNF = hCaptchaNF;
    66131
    67 ( function( $ ) {
    68     // noinspection JSCheckFunctionSignatures
    69     $.ajaxPrefilter( function( options ) {
    70         const data = options.data ?? '';
    71 
    72         if ( ! ( typeof data === 'string' || data instanceof String ) ) {
    73             return;
    74         }
    75 
    76         if ( ! data.startsWith( 'action=nf_ajax_submit' ) ) {
    77             return;
    78         }
    79 
    80         const urlParams = new URLSearchParams( data );
    81         const formId = JSON.parse( urlParams.get( 'formData' ) ).id;
    82         const $form = $( '#nf-form-' + formId + '-cont' );
    83         let id = $form.find( '[name="hcaptcha-widget-id"]' ).val();
    84         id = id ? id : '';
    85         options.data += '&hcaptcha-widget-id=' + id;
    86     } );
    87 }( jQuery ) );
     132hCaptchaNF.init();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-nf.min.js

    r3339595 r3359717  
    1 (()=>{var a;wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(a,t){return!!t.classList.contains("nf-element")||a}),document.addEventListener("DOMContentLoaded",function(){var a=Marionette.Object.extend({initialize:function(){var a=nfRadio.channel("submit");this.listenTo(a,"validate:field",this.updateHcaptcha),this.listenTo(a,"validate:field",this.updateHcaptcha);var t=nfRadio.channel("fields");this.listenTo(t,"change:modelValue",this.updateHcaptcha)},updateHcaptcha:function(a){if("hcaptcha-for-ninja-forms"===a.get("type"))if(a.get("value"))nfRadio.channel("fields").request("remove:error",a.get("id"),"required-error");else{var t=a.get("id"),e=document.querySelector('.h-captcha[data-fieldId="'+t+'"] textarea[name="h-captcha-response"]');a.set("value",e.value)}}});window.hCaptchaFieldController=new a}),(a=jQuery).ajaxPrefilter(function(t){var e,i=null!==(e=t.data)&&void 0!==e?e:"";if(("string"==typeof i||i instanceof String)&&i.startsWith("action=nf_ajax_submit")){var n=new URLSearchParams(i),c=JSON.parse(n.get("formData")).id,r=a("#nf-form-"+c+"-cont").find('[name="hcaptcha-widget-id"]').val();r=r||"",t.data+="&hcaptcha-widget-id="+r}})})();
     1(()=>{var a=window.hCaptchaNF||function(a,t){var e={init:function(){wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",e.isAjaxSubmitButton),document.addEventListener("DOMContentLoaded",e.onDomReady),t.ajaxPrefilter(this.ajaxPrefilter()),t(document).on("ajaxSuccess",e.ajaxSuccessHandler)},isAjaxSubmitButton:function(a,t){return!!t.classList.contains("nf-element")||a},onDomReady:function(){var t=Marionette.Object.extend({initialize:function(){var a=nfRadio.channel("submit");this.listenTo(a,"validate:field",this.updateHcaptcha);var t=nfRadio.channel("fields");this.listenTo(t,"change:modelValue",this.updateHcaptcha)},updateHcaptcha:function(a){if("hcaptcha-for-ninja-forms"===a.get("type"))if(a.get("value"))nfRadio.channel("fields").request("remove:error",a.get("id"),"required-error");else{var t=a.get("id"),e=document.querySelector('div[data-field-id="'.concat(t,'"] textarea[name="h-captcha-response"]'));a.set("value",null==e?void 0:e.value)}}});a.hCaptchaFieldController=new t},ajaxPrefilter:function(){return function(a){var e,n,i,o,c,d,r=null!==(e=a.data)&&void 0!==e?e:"";if("string"==typeof r){var l=new URLSearchParams(r);if("nf_ajax_submit"===l.get("action")){var u="hcaptcha-widget-id",s="hcap_fst_token",f="hcap_hp_sig",h=JSON.parse(l.get("formData")).id,v=t("#nf-form-".concat(h,"-cont")),p=null!==(n=v.find('[name="'.concat(u,'"]')).val())&&void 0!==n?n:"",m=null!==(i=v.find('[name="'.concat(s,'"]')).val())&&void 0!==i?i:"",j=null!==(o=v.find('[name="'.concat(f,'"]')).val())&&void 0!==o?o:"",g=v.find('[id^="hcap_hp_"]');l.set(u,p),l.set(s,m),l.set(f,j),l.set(null!==(c=g.attr("id"))&&void 0!==c?c:"",null!==(d=g.val())&&void 0!==d?d:""),a.data=l.toString()}}}},ajaxSuccessHandler:function(t,e,n){var i,o=null!==(i=n.data)&&void 0!==i?i:"";"string"==typeof o&&("nf_ajax_submit"===new URLSearchParams(o).get("action")&&a.hCaptchaBindEvents())}};return e}(window,jQuery);window.hCaptchaNF=a,a.init()})();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-passster.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var t={2981:(t,a,e)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function n(t,a){for(var e=0;e<a.length;e++){var r=a[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,o(r.key),r)}}function o(t){var a=function(t,a){if("object"!=r(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,a||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===a?String:Number)(t)}(t,"string");return"symbol"==r(a)?a:a+""}e.d(a,{d:()=>i});var i=function(){function t(){!function(t,a){if(!(t instanceof a))throw new TypeError("Cannot call a class as a function")}(this,t)}return a=t,r=[{key:"addHCaptchaData",value:function(a,e,r,n){var o,i=null!==(o=a.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(e))){var c=t.getHCaptchaData(n,r);a.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+r+"="+c.nonce}}},{key:"getHCaptchaData",value:function(t,a){var e=t.find('[name="h-captcha-response"]').val();e=e||"";var r=t.find('[name="hcaptcha-widget-id"]').val();r=r||"";var n=t.find('[name="'+a+'"]').val();return{response:e,id:r,nonce:n=n||""}}}],(e=null)&&n(a.prototype,e),r&&n(a,r),Object.defineProperty(a,"prototype",{writable:!1}),a;var a,e,r}()}},a={};function e(r){var n=a[r];if(void 0!==n)return n.exports;var o=a[r]={exports:{}};return t[r](o,o.exports,e),o.exports}e.d=(t,a)=>{for(var r in a)e.o(a,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:a[r]})},e.o=(t,a)=>Object.prototype.hasOwnProperty.call(t,a);var r,n=e(2981);wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(t,a){return!!a.classList.contains("passster-submit")||t}),(r=jQuery).ajaxPrefilter(function(t){var a,e=null!==(a=t.data)&&void 0!==a?a:"";if("string"==typeof e){var o=new URLSearchParams(e).get("area");n.d.addHCaptchaData(t,"validate_input","hcaptcha_passster_nonce",r("[data-area="+o+"]").closest("form"))}})})();
     1(()=>{"use strict";var t={2981:(t,e,a)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function r(t,e){for(var a=0;a<e.length;a++){var n=e[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var r=a.call(t,e||"default");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}a.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,a,n,r){var o,c=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof c&&c.startsWith("action=".concat(a))&&(e.data+=t.getHCaptchaData(r,n))}},{key:"getHCaptchaData",value:function(t,e){for(var a,n="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(a=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==a?a:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var c,i=o[r];if(i){var p=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";n+="&".concat(i,"=").concat(p)}}return n}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:a}}))}catch(t){}var r=t.apply(void 0,a);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:a,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:a,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:a}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(a=null)&&r(e.prototype,a),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,a,n}()}},e={};function a(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,a),o.exports}a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,r=a(2981);wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(t,e){return!!e.classList.contains("passster-submit")||t}),(n=jQuery).ajaxPrefilter(function(t){var e,a=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof a){var o=new URLSearchParams(a).get("area");r.d.addHCaptchaData(t,"validate_input","hcaptcha_passster_nonce",n("[data-area="+o+"]").closest("form"))}})})();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-spectra.js

    r3319903 r3359717  
    1 const { fetch: originalFetch } = window;
     1import { helper } from './hcaptcha-helper.js';
    22
    3 // Intercept Spectra form fetch to add hCaptcha data.
    4 window.fetch = async ( ...args ) => {
    5     const [ resource, config ] = args;
     3const hCaptchaSpectra = window.hCaptchaSpectra || ( function( window ) {
     4    let style;
    65
    7     // @param {FormData} body
    8     const body = config.body;
    9     const blockId = body.get( 'block_id' );
    10     const inputName = 'h-captcha-response';
    11     const widgetName = 'hcaptcha-widget-id';
    12     const errorClassName = 'hcaptcha-error-message';
    13     const nonceName = 'hcaptcha_spectra_form_nonce';
    14     const formData = JSON.parse( body.get( 'form_data' ) );
     6    const app = {
     7        init() {
     8            helper.installFetchEvents();
     9            window.addEventListener( 'hCaptchaFetch:before', app.fetchBefore );
     10            window.addEventListener( 'hCaptchaFetch:success', app.fetchSuccess );
     11            window.addEventListener( 'hCaptchaFetch:complete', app.fetchComplete );
     12        },
    1513
    16     const selector = `[name="uagb-form-${ blockId }"]`;
    17     const style = document.createElement( 'style' );
     14        fetchBefore( event ) {
     15            const config = event?.detail?.args?.[ 1 ] ?? {};
     16            const body = config.body;
    1817
    19     style.id = `hcaptcha-style-${ blockId }`;
    20     style.textContent = `
     18            if ( ! ( body instanceof URLSearchParams ) ) {
     19                return;
     20            }
     21
     22            // @param {FormData} body
     23            const blockId = body.get( 'block_id' );
     24            const block = document.querySelector( `.uagb-block-${ blockId }` );
     25
     26            // Remove hCaptcha error message.
     27            const errorMessage = block.querySelector( '.hcaptcha-error-message' );
     28
     29            if ( errorMessage ) {
     30                errorMessage.remove();
     31            }
     32
     33            const responseInputName = 'h-captcha-response';
     34            const formData = JSON.parse( body.get( 'form_data' ) );
     35
     36            if ( 'uagb_process_forms' !== body.get( 'action' ) || formData.hasOwnProperty( responseInputName ) ) {
     37                return;
     38            }
     39
     40            const widgetName = 'hcaptcha-widget-id';
     41            const sigInputName = 'hcap_hp_sig';
     42            const tokenName = 'hcap_fst_token';
     43            const nonceName = 'hcaptcha_spectra_form_nonce';
     44
     45            /**
     46             * @type {HTMLInputElement}
     47             */
     48            const widgetId = block.querySelector( `[name="${ widgetName }"]` );
     49
     50            /**
     51             * @type {HTMLTextAreaElement}
     52             */
     53            const hCaptchaResponse = block.querySelector( `[name="${ responseInputName }"]` );
     54
     55            /**
     56             * @type {HTMLInputElement}
     57             */
     58            const nonce = block.querySelector( `[name="${ nonceName }"]` );
     59
     60            /**
     61             * @type {HTMLInputElement}
     62             */
     63            const hcapHp = block.querySelector( `[id^="hcap_hp_"]` );
     64
     65            /**
     66             * @type {HTMLInputElement}
     67             */
     68            const hcapSig = block.querySelector( `[name="${ sigInputName }"]` );
     69
     70            /**
     71             * @type {HTMLInputElement}
     72             */
     73            const token = block.querySelector( `[name="${ tokenName }"]` );
     74
     75            formData[ widgetName ] = widgetId?.value;
     76            formData[ responseInputName ] = hCaptchaResponse?.value;
     77            formData[ nonceName ] = nonce?.value;
     78            formData[ hcapHp?.id ] = hcapHp?.value;
     79            formData[ sigInputName ] = hcapSig?.value;
     80            formData[ tokenName ] = token?.value;
     81
     82            body.set( 'form_data', JSON.stringify( formData ) );
     83
     84            config.body = body;
     85            event.detail.args.config = config;
     86        },
     87
     88        async fetchSuccess( event ) {
     89            const config = event?.detail?.args?.[ 1 ];
     90            const response = event?.detail?.response;
     91
     92            if ( ! config || ! response ) {
     93                return;
     94            }
     95
     96            const body = config.body;
     97
     98            if ( ! ( body instanceof FormData || body instanceof URLSearchParams ) ) {
     99                return;
     100            }
     101
     102            const responseData = await response.clone().json().catch( () => null );
     103
     104            if ( 'uagb_process_forms' !== body.get( 'action' ) || typeof responseData?.data !== 'string' ) {
     105                return;
     106            }
     107
     108            const blockId = body.get( 'block_id' );
     109            const selector = `[name="uagb-form-${ blockId }"]`;
     110
     111            style = document.createElement( 'style' );
     112            style.id = `hcaptcha-style-${ blockId }`;
     113            style.textContent = `
    21114        ${ selector } {
    22115            display: block !important;
     
    24117`;
    25118
    26     // Remove hCaptcha error message.
    27     const errorMessage = document.querySelector( '.uagb-block-' + blockId + ' .' + errorClassName );
     119            // We have hCaptcha error in responseData.
     120            const styleToAdd = document.getElementById( style.id );
    28121
    29     if ( errorMessage ) {
    30         errorMessage.remove();
    31     }
     122            if ( ! styleToAdd ) {
     123                // Add a style preventing hiding the form.
     124                document.head.appendChild( style );
     125            }
    32126
    33     if ( 'uagb_process_forms' === body.get( 'action' ) && ! formData.hasOwnProperty( inputName ) ) {
    34         /**
    35          * @type {HTMLTextAreaElement}
    36          */
    37         const hCaptchaResponse = document.querySelector( '.uagb-block-' + blockId + ' [name="' + inputName + '"]' );
     127            // Remove previous error message (if exists) in the current block.
     128            const prevError = document.querySelector( '.uagb-block-' + blockId + ' .hcaptcha-error-message' );
    38129
    39         /**
    40          * @type {HTMLInputElement}
    41          */
    42         const id = document.querySelector( '.uagb-block-' + blockId + ' [name="' + widgetName + '"]' );
     130            if ( prevError ) {
     131                prevError.remove();
     132            }
    43133
    44         /**
    45          * @type {HTMLInputElement}
    46          */
    47         const nonce = document.querySelector( '.uagb-block-' + blockId + ' [name="' + nonceName + '"]' );
     134            // Show an error message.
     135            const errorContainer = document.createElement( 'div' );
    48136
    49         if ( hCaptchaResponse ) {
    50             formData[ inputName ] = hCaptchaResponse.value;
    51         }
     137            errorContainer.className = 'hcaptcha-error-message';
     138            errorContainer.textContent = responseData.data;
     139            errorContainer.style.color = 'red';
     140            errorContainer.style.padding = '10px 0';
    52141
    53         if ( id ) {
    54             formData[ widgetName ] = id.value;
    55         }
     142            // Find the form container and append the error message
     143            const hcaptchaContainer = document.querySelector( '.uagb-block-' + blockId + ' h-captcha' );
    56144
    57         formData[ nonceName ] = nonce.value;
     145            if ( hcaptchaContainer ) {
     146                hcaptchaContainer.parentNode.insertBefore( errorContainer, hcaptchaContainer );
     147            }
     148        },
    58149
    59         body.set( 'form_data', JSON.stringify( formData ) );
    60         config.body = body;
    61     }
     150        fetchComplete( event ) {
     151            const config = event?.detail?.args?.[ 1 ] ?? {};
     152            const body = config.body;
    62153
    63     const response = await originalFetch( resource, config );
     154            if ( ! ( body instanceof URLSearchParams ) ) {
     155                return;
     156            }
    64157
    65     // Check if the response contains errors we're interested in.
    66     const responseClone = response.clone();
    67     const responseData = await responseClone.json().catch( () => null );
     158            if ( 'uagb_process_forms' !== body.get( 'action' ) ) {
     159                return;
     160            }
    68161
    69     if ( 'uagb_process_forms' === body.get( 'action' ) && typeof responseData?.data === 'string' ) {
    70         // We have hCaptcha error in responseData.
     162            // Remove a style preventing hiding the form.
     163            const styleToRemove = document.getElementById( style?.id );
    71164
    72         const styleToAdd = document.getElementById( style.id );
     165            if ( styleToRemove ) {
     166                styleToRemove.remove();
     167            }
    73168
    74         if ( ! styleToAdd ) {
    75             // Add a style preventing hiding the form.
    76             document.head.appendChild( style );
    77         }
     169            window.hCaptchaBindEvents();
     170        },
     171    };
    78172
    79         // Show an error message.
    80         const errorContainer = document.createElement( 'div' );
    81         errorContainer.className = errorClassName;
    82         errorContainer.textContent = responseData.data;
    83         errorContainer.style.color = 'red';
    84         errorContainer.style.padding = '10px 0';
     173    return app;
     174}( window ) );
    85175
    86         // Find the form container and append the error message
    87         const hcaptchaContainer = document.querySelector( '.uagb-block-' + blockId + ' h-captcha' );
     176window.hCaptchaSpectra = hCaptchaSpectra;
    88177
    89         if ( hcaptchaContainer ) {
    90             hcaptchaContainer.parentNode.insertBefore( errorContainer, hcaptchaContainer );
    91         }
    92 
    93         // Set the data to 400 for Spectra.
    94         responseData.data = 400;
    95 
    96         // Return the original response despite the error.
    97         return response;
    98     }
    99 
    100     // Remove a style preventing hiding the form.
    101     const styleToRemove = document.getElementById( style.id );
    102 
    103     if ( styleToRemove ) {
    104         styleToRemove.remove();
    105     }
    106 
    107     // If no errors or not the errors we're interested in, return the original response.
    108     return response;
    109 };
     178hCaptchaSpectra.init();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-spectra.min.js

    r3339595 r3359717  
    1 (()=>{function t(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var n,r,o="function"==typeof Symbol?Symbol:{},c=o.iterator||"@@iterator",a=o.toStringTag||"@@toStringTag";function u(t,o,c,a){var u=o&&o.prototype instanceof f?o:f,l=Object.create(u.prototype);return e(l,"_invoke",function(t,e,o){var c,a,u,f=0,l=o||[],d=!1,s={p:0,n:0,v:n,a:p,f:p.bind(n,4),d:function(t,e){return c=t,a=0,u=n,s.n=e,i}};function p(t,e){for(a=t,u=e,r=0;!d&&f&&!o&&r<l.length;r++){var o,c=l[r],p=s.p,y=c[2];t>3?(o=y===e)&&(u=c[(a=c[4])?5:(a=3,3)],c[4]=c[5]=n):c[0]<=p&&((o=t<2&&p<c[1])?(a=0,s.v=e,s.n=c[1]):p<y&&(o=t<3||c[0]>e||e>y)&&(c[4]=t,c[5]=e,s.n=y,a=0))}if(o||t>1)return i;throw d=!0,e}return function(o,l,y){if(f>1)throw TypeError("Generator is already running");for(d&&1===l&&p(l,y),a=l,u=y;(r=a<2?n:u)||!d;){c||(a?a<3?(a>1&&(s.n=-1),p(a,u)):s.n=u:s.v=u);try{if(f=2,c){if(a||(o="next"),r=c[o]){if(!(r=r.call(c,u)))throw TypeError("iterator result is not an object");if(!r.done)return r;u=r.value,a<2&&(a=0)}else 1===a&&(r=c.return)&&r.call(c),a<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),a=1);c=n}else if((r=(d=s.n<0)?u:t.call(e,s))!==i)break}catch(t){c=n,a=1,u=t}finally{f=1}}return{value:r,done:d}}}(t,c,a),!0),l}var i={};function f(){}function l(){}function d(){}r=Object.getPrototypeOf;var s=[][c]?r(r([][c]())):(e(r={},c,function(){return this}),r),p=d.prototype=f.prototype=Object.create(s);function y(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,e(t,a,"GeneratorFunction")),t.prototype=Object.create(p),t}return l.prototype=d,e(p,"constructor",d),e(d,"constructor",l),l.displayName="GeneratorFunction",e(d,a,"GeneratorFunction"),e(p),e(p,a,"Generator"),e(p,c,function(){return this}),e(p,"toString",function(){return"[object Generator]"}),(t=function(){return{w:u,m:y}})()}function e(t,n,r,o){var c=Object.defineProperty;try{c({},"",{})}catch(t){c=0}e=function(t,n,r,o){function a(n,r){e(t,n,function(t){return this._invoke(n,r,t)})}n?c?c(t,n,{value:r,enumerable:!o,configurable:!o,writable:!o}):t[n]=r:(a("next",0),a("throw",1),a("return",2))},e(t,n,r,o)}function n(t,e,n,r,o,c,a){try{var u=t[c](a),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,o)}function r(t){return function(){var e=this,r=arguments;return new Promise(function(o,c){var a=t.apply(e,r);function u(t){n(a,o,c,u,i,"next",t)}function i(t){n(a,o,c,u,i,"throw",t)}u(void 0)})}}var o=window.fetch;window.fetch=r(t().m(function e(){var n,r,c,a,u,i,f,l,d,s,p,y,m,h,b,v,g,w,_,O,S,k,j,E,P=arguments;return t().w(function(t){for(;;)switch(t.n){case 0:for(n=P.length,r=new Array(n),c=0;c<n;c++)r[c]=P[c];return a=r[0],u=r[1],i=u.body,f=i.get("block_id"),l="h-captcha-response",d="hcaptcha-widget-id",s="hcaptcha-error-message",p="hcaptcha_spectra_form_nonce",y=JSON.parse(i.get("form_data")),m='[name="uagb-form-'.concat(f,'"]'),(h=document.createElement("style")).id="hcaptcha-style-".concat(f),h.textContent="\n\t\t".concat(m," {\n\t\t\tdisplay: block !important;\n\t\t}\n"),(b=document.querySelector(".uagb-block-"+f+" ."+s))&&b.remove(),"uagb_process_forms"!==i.get("action")||y.hasOwnProperty(l)||(v=document.querySelector(".uagb-block-"+f+' [name="'+l+'"]'),g=document.querySelector(".uagb-block-"+f+' [name="'+d+'"]'),w=document.querySelector(".uagb-block-"+f+' [name="'+p+'"]'),v&&(y[l]=v.value),g&&(y[d]=g.value),y[p]=w.value,i.set("form_data",JSON.stringify(y)),u.body=i),t.n=1,o(a,u);case 1:return _=t.v,O=_.clone(),t.n=2,O.json().catch(function(){return null});case 2:if(S=t.v,"uagb_process_forms"!==i.get("action")||"string"!=typeof(null==S?void 0:S.data)){t.n=3;break}return document.getElementById(h.id)||document.head.appendChild(h),(k=document.createElement("div")).className=s,k.textContent=S.data,k.style.color="red",k.style.padding="10px 0",(j=document.querySelector(".uagb-block-"+f+" h-captcha"))&&j.parentNode.insertBefore(k,j),S.data=400,t.a(2,_);case 3:return(E=document.getElementById(h.id))&&E.remove(),t.a(2,_)}},e)}))})();
     1(()=>{"use strict";var t={2981:(t,e,n)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,a(r.key),r)}}function a(t){var e=function(t,e){if("object"!=r(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||"default");if("object"!=r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==r(e)?e:e+""}n.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,r=[{key:"addHCaptchaData",value:function(e,n,r,o){var a,c=null!==(a=e.data)&&void 0!==a?a:"";"string"==typeof c&&c.startsWith("action=".concat(n))&&(e.data+=t.getHCaptchaData(o,r))}},{key:"getHCaptchaData",value:function(t,e){for(var n,r="",o=0,a=["h-captcha-response","hcaptcha-widget-id",e,null!==(n=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==n?n:"","hcap_hp_sig","hcap_fst_token"];o<a.length;o++){var c,i=a[o];if(i){var u=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";r+="&".concat(i,"=").concat(u)}}return r}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:n}}))}catch(t){}var o=t.apply(void 0,n);return o.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:n,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:n,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:n}}))}catch(t){}}),o};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(n=null)&&o(e.prototype,n),r&&o(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,r}()}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var a=e[r]={exports:{}};return t[r](a,a.exports,n),a.exports}n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var r=n(2981);function o(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var t,e,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",c=n.toStringTag||"@@toStringTag";function i(n,r,o,c){var i=r&&r.prototype instanceof l?r:l,f=Object.create(i.prototype);return a(f,"_invoke",function(n,r,o){var a,c,i,l=0,f=o||[],d=!1,s={p:0,n:0,v:t,a:p,f:p.bind(t,4),d:function(e,n){return a=e,c=0,i=t,s.n=n,u}};function p(n,r){for(c=n,i=r,e=0;!d&&l&&!o&&e<f.length;e++){var o,a=f[e],p=s.p,h=a[2];n>3?(o=h===r)&&(i=a[(c=a[4])?5:(c=3,3)],a[4]=a[5]=t):a[0]<=p&&((o=n<2&&p<a[1])?(c=0,s.v=r,s.n=a[1]):p<h&&(o=n<3||a[0]>r||r>h)&&(a[4]=n,a[5]=r,s.n=h,c=0))}if(o||n>1)return u;throw d=!0,r}return function(o,f,h){if(l>1)throw TypeError("Generator is already running");for(d&&1===f&&p(f,h),c=f,i=h;(e=c<2?t:i)||!d;){a||(c?c<3?(c>1&&(s.n=-1),p(c,i)):s.n=i:s.v=i);try{if(l=2,a){if(c||(o="next"),e=a[o]){if(!(e=e.call(a,i)))throw TypeError("iterator result is not an object");if(!e.done)return e;i=e.value,c<2&&(c=0)}else 1===c&&(e=a.return)&&e.call(a),c<2&&(i=TypeError("The iterator does not provide a '"+o+"' method"),c=1);a=t}else if((e=(d=s.n<0)?i:n.call(r,s))!==u)break}catch(e){a=t,c=1,i=e}finally{l=1}}return{value:e,done:d}}}(n,o,c),!0),f}var u={};function l(){}function f(){}function d(){}e=Object.getPrototypeOf;var s=[][r]?e(e([][r]())):(a(e={},r,function(){return this}),e),p=d.prototype=l.prototype=Object.create(s);function h(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,a(t,c,"GeneratorFunction")),t.prototype=Object.create(p),t}return f.prototype=d,a(p,"constructor",d),a(d,"constructor",f),f.displayName="GeneratorFunction",a(d,c,"GeneratorFunction"),a(p),a(p,c,"Generator"),a(p,r,function(){return this}),a(p,"toString",function(){return"[object Generator]"}),(o=function(){return{w:i,m:h}})()}function a(t,e,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(t){o=0}a=function(t,e,n,r){function c(e,n){a(t,e,function(t){return this._invoke(e,n,t)})}e?o?o(t,e,{value:n,enumerable:!r,configurable:!r,writable:!r}):t[e]=n:(c("next",0),c("throw",1),c("return",2))},a(t,e,n,r)}function c(t,e,n,r,o,a,c){try{var i=t[a](c),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,o)}var i=window.hCaptchaSpectra||function(t){var e,n={init:function(){r.d.installFetchEvents(),t.addEventListener("hCaptchaFetch:before",n.fetchBefore),t.addEventListener("hCaptchaFetch:success",n.fetchSuccess),t.addEventListener("hCaptchaFetch:complete",n.fetchComplete)},fetchBefore:function(t){var e,n,r=null!==(e=null==t||null===(n=t.detail)||void 0===n||null===(n=n.args)||void 0===n?void 0:n[1])&&void 0!==e?e:{},o=r.body;if(o instanceof URLSearchParams){var a=o.get("block_id"),c=document.querySelector(".uagb-block-".concat(a)),i=c.querySelector(".hcaptcha-error-message");i&&i.remove();var u="h-captcha-response",l=JSON.parse(o.get("form_data"));if("uagb_process_forms"===o.get("action")&&!l.hasOwnProperty(u)){var f="hcaptcha-widget-id",d="hcap_hp_sig",s="hcap_fst_token",p="hcaptcha_spectra_form_nonce",h=c.querySelector('[name="'.concat(f,'"]')),v=c.querySelector('[name="'.concat(u,'"]')),y=c.querySelector('[name="'.concat(p,'"]')),m=c.querySelector('[id^="hcap_hp_"]'),b=c.querySelector('[name="'.concat(d,'"]')),g=c.querySelector('[name="'.concat(s,'"]'));l[f]=null==h?void 0:h.value,l[u]=null==v?void 0:v.value,l[p]=null==y?void 0:y.value,l[null==m?void 0:m.id]=null==m?void 0:m.value,l[d]=null==b?void 0:b.value,l[s]=null==g?void 0:g.value,o.set("form_data",JSON.stringify(l)),r.body=o,t.detail.args.config=r}}},fetchSuccess:function(t){return(n=o().m(function n(){var r,a,c,i,u,l,f,d,s,p,h;return o().w(function(n){for(;;)switch(n.n){case 0:if(c=null==t||null===(r=t.detail)||void 0===r||null===(r=r.args)||void 0===r?void 0:r[1],i=null==t||null===(a=t.detail)||void 0===a?void 0:a.response,c&&i){n.n=1;break}return n.a(2);case 1:if((u=c.body)instanceof FormData||u instanceof URLSearchParams){n.n=2;break}return n.a(2);case 2:return n.n=3,i.clone().json().catch(function(){return null});case 3:if(l=n.v,"uagb_process_forms"===u.get("action")&&"string"==typeof(null==l?void 0:l.data)){n.n=4;break}return n.a(2);case 4:f=u.get("block_id"),d='[name="uagb-form-'.concat(f,'"]'),(e=document.createElement("style")).id="hcaptcha-style-".concat(f),e.textContent="\n\t\t".concat(d," {\n\t\t\tdisplay: block !important;\n\t\t}\n"),document.getElementById(e.id)||document.head.appendChild(e),(s=document.querySelector(".uagb-block-"+f+" .hcaptcha-error-message"))&&s.remove(),(p=document.createElement("div")).className="hcaptcha-error-message",p.textContent=l.data,p.style.color="red",p.style.padding="10px 0",(h=document.querySelector(".uagb-block-"+f+" h-captcha"))&&h.parentNode.insertBefore(p,h);case 5:return n.a(2)}},n)}),function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function i(t){c(a,r,o,i,u,"next",t)}function u(t){c(a,r,o,i,u,"throw",t)}i(void 0)})})();var n},fetchComplete:function(n){var r,o,a,c=(null!==(r=null==n||null===(o=n.detail)||void 0===o||null===(o=o.args)||void 0===o?void 0:o[1])&&void 0!==r?r:{}).body;if(c instanceof URLSearchParams&&"uagb_process_forms"===c.get("action")){var i=document.getElementById(null===(a=e)||void 0===a?void 0:a.id);i&&i.remove(),t.hCaptchaBindEvents()}}};return n}(window);window.hCaptchaSpectra=i,i.init()})();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-ultimate-addons.min.js

    r3339595 r3359717  
    1 (()=>{"use strict";var a={2981:(a,t,e)=>{function r(a){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},r(a)}function n(a,t){for(var e=0;e<t.length;e++){var r=t[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(a,o(r.key),r)}}function o(a){var t=function(a,t){if("object"!=r(a)||!a)return a;var e=a[Symbol.toPrimitive];if(void 0!==e){var n=e.call(a,t||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(a)}(a,"string");return"symbol"==r(t)?t:t+""}e.d(t,{d:()=>i});var i=function(){function a(){!function(a,t){if(!(a instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a)}return t=a,r=[{key:"addHCaptchaData",value:function(t,e,r,n){var o,i=null!==(o=t.data)&&void 0!==o?o:"";if("string"==typeof i&&i.startsWith("action=".concat(e))){var c=a.getHCaptchaData(n,r);t.data+="&h-captcha-response="+c.response+"&hcaptcha-widget-id="+c.id+"&"+r+"="+c.nonce}}},{key:"getHCaptchaData",value:function(a,t){var e=a.find('[name="h-captcha-response"]').val();e=e||"";var r=a.find('[name="hcaptcha-widget-id"]').val();r=r||"";var n=a.find('[name="'+t+'"]').val();return{response:e,id:r,nonce:n=n||""}}}],(e=null)&&n(t.prototype,e),r&&n(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}()}},t={};function e(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return a[r](o,o.exports,e),o.exports}e.d=(a,t)=>{for(var r in t)e.o(t,r)&&!e.o(a,r)&&Object.defineProperty(a,r,{enumerable:!0,get:t[r]})},e.o=(a,t)=>Object.prototype.hasOwnProperty.call(a,t);var r,n=e(2981);wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(a,t){return!(!t.classList.contains("uael-login-form-submit")&&!t.classList.contains("uael-register-submit"))||a}),(r=jQuery).ajaxPrefilter(function(a){var t,e=null!==(t=a.data)&&void 0!==t?t:"";if("string"==typeof e){var o=new URLSearchParams(e).get("action");if(o){var i;switch(o){case"uael_login_form_submit":i=r(".uael-login-form");break;case"uael_register_user":i=r(".uael-registration-form");break;default:return}n.d.addHCaptchaData(a,"uael_login_form_submit","hcaptcha_login_nonce",i),n.d.addHCaptchaData(a,"uael_register_user","hcaptcha_ultimate_addons_register_nonce",i)}}}),r(document).on("ajaxSuccess",function(a,t,e){var n,o,i=new URLSearchParams(e.data).get("action");if("uael_login_form_submit"===i||"uael_register_user"===i){window.hCaptchaBindEvents();var c=JSON.parse(t.responseText);if(null==c||!c.success){var u=null!==(n=null==c?void 0:c.data)&&void 0!==n?n:"",s=null!==(o=null==u?void 0:u.hCaptchaError)&&void 0!==o?o:"";s&&r("h-captcha").after('<span class="uael-register-field-message"><span class="uael-loginform-error">'+s+"</span></span>")}}})})();
     1(()=>{"use strict";var t={2981:(t,e,a)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function r(t,e){for(var a=0;a<e.length;a++){var n=e[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var r=a.call(t,e||"default");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}a.d(e,{d:()=>i});var i=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,n=[{key:"addHCaptchaData",value:function(e,a,n,r){var o,i=null!==(o=e.data)&&void 0!==o?o:"";"string"==typeof i&&i.startsWith("action=".concat(a))&&(e.data+=t.getHCaptchaData(r,n))}},{key:"getHCaptchaData",value:function(t,e){for(var a,n="",r=0,o=["h-captcha-response","hcaptcha-widget-id",e,null!==(a=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==a?a:"","hcap_hp_sig","hcap_fst_token"];r<o.length;r++){var i,c=o[r];if(c){var u=null!==(i=t.find('[name="'.concat(c,'"]')).first().val())&&void 0!==i?i:"";n+="&".concat(c,"=").concat(u)}}return n}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:a}}))}catch(t){}var r=t.apply(void 0,a);return r.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:a,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:a,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:a}}))}catch(t){}}),r};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(a=null)&&r(e.prototype,a),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,a,n}()}},e={};function a(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,a),o.exports}a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n,r=a(2981);wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(t,e){return!(!e.classList.contains("uael-login-form-submit")&&!e.classList.contains("uael-register-submit"))||t}),(n=jQuery).ajaxPrefilter(function(t){var e,a=null!==(e=t.data)&&void 0!==e?e:"";if("string"==typeof a){var o=new URLSearchParams(a).get("action");if(o){var i;switch(o){case"uael_login_form_submit":i=n(".uael-login-form");break;case"uael_register_user":i=n(".uael-registration-form");break;default:return}r.d.addHCaptchaData(t,"uael_login_form_submit","hcaptcha_login_nonce",i),r.d.addHCaptchaData(t,"uael_register_user","hcaptcha_ultimate_addons_register_nonce",i)}}}),n(document).on("ajaxSuccess",function(t,e,a){var r,o,i=new URLSearchParams(a.data).get("action");if("uael_login_form_submit"===i||"uael_register_user"===i){window.hCaptchaBindEvents();var c=JSON.parse(e.responseText);if(null==c||!c.success){var u=null!==(r=null==c?void 0:c.data)&&void 0!==r?r:"",s=null!==(o=null==u?void 0:u.hCaptchaError)&&void 0!==o?o:"";s&&n("h-captcha").after('<span class="uael-register-field-message"><span class="uael-loginform-error">'+s+"</span></span>")}}})})();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-wc-block-checkout.js

    r3200161 r3359717  
    1 const { fetch: originalFetch } = window;
    2 const checkoutButtonClass = 'wc-block-components-checkout-place-order-button';
     1import { helper } from './hcaptcha-helper.js';
    32
    4 wp.hooks.addFilter(
    5     'hcaptcha.submitButtonSelector',
    6     'hcaptcha',
    7     ( submitButtonSelector ) => {
    8         return submitButtonSelector + `, .${ checkoutButtonClass }`;
    9     }
    10 );
     3const wcBlockCheckout = window.hCaptchaWCBlockCheckout || ( function( window ) {
     4    const app = {
     5        init() {
     6            const checkoutButtonClass = 'wc-block-components-checkout-place-order-button';
    117
    12 wp.hooks.addFilter(
    13     'hcaptcha.ajaxSubmitButton',
    14     'hcaptcha',
    15     ( isAjaxSubmitButton, submitButtonElement ) => {
    16         if ( submitButtonElement.classList.contains( `${ checkoutButtonClass }` ) ) {
    17             return true;
    18         }
     8            wp.hooks.addFilter(
     9                'hcaptcha.submitButtonSelector',
     10                'hcaptcha',
     11                ( submitButtonSelector ) => {
     12                    return submitButtonSelector + `, .${ checkoutButtonClass }`;
     13                }
     14            );
    1915
    20         return isAjaxSubmitButton;
    21     }
    22 );
     16            wp.hooks.addFilter(
     17                'hcaptcha.ajaxSubmitButton',
     18                'hcaptcha',
     19                ( isAjaxSubmitButton, submitButtonElement ) => {
     20                    if ( submitButtonElement.classList.contains( `${ checkoutButtonClass }` ) ) {
     21                        return true;
     22                    }
    2323
    24 // Intercept WC Checkout form fetch to add hCaptcha data.
    25 window.fetch = async ( ...args ) => {
    26     const [ resource, config ] = args;
     24                    return isAjaxSubmitButton;
     25                }
     26            );
    2727
    28     if ( resource.includes( '/wc/store/v1/checkout' ) ) {
    29         const body = config.body;
    30         const widgetName = 'hcaptcha-widget-id';
    31         const inputName = 'h-captcha-response';
    32         const formData = JSON.parse( body );
    33         const wcCheckoutBlock = document.querySelector( 'div[data-block-name="woocommerce/checkout"]' );
     28            helper.installFetchEvents();
     29            window.addEventListener( 'hCaptchaFetch:before', app.fetchBefore );
     30            window.addEventListener( 'hCaptchaFetch:complete', app.fetchComplete );
     31        },
    3432
    35         /**
    36          * @type {HTMLInputElement}
    37          */
    38         const widgetId = wcCheckoutBlock.querySelector( `[name="${ widgetName }"]` );
     33        fetchBefore( event ) {
     34            const [ resource, config ] = event?.detail?.args;
    3935
    40         /**
    41          * @type {HTMLTextAreaElement}
    42          */
    43         const hCaptchaResponse = wcCheckoutBlock.querySelector( `[name="${ inputName }"]` );
     36            if ( ! resource.includes( '/wc/store/v1/checkout' ) ) {
     37                return;
     38            }
    4439
    45         if ( widgetId && hCaptchaResponse ) {
    46             formData[ widgetName ] = widgetId.value;
    47             formData[ inputName ] = hCaptchaResponse.value;
    48         }
     40            let formData;
    4941
    50         config.body = JSON.stringify( formData );
    51     }
     42            try {
     43                formData = JSON.parse( config.body );
     44            } catch ( e ) {
     45                formData = {};
     46            }
    5247
    53     // noinspection JSCheckFunctionSignatures
    54     return await originalFetch( resource, config );
    55 };
     48            const widgetName = 'hcaptcha-widget-id';
     49            const responseInputName = 'h-captcha-response';
     50            const sigInputName = 'hcap_hp_sig';
     51            const tokenName = 'hcap_fst_token';
     52            const wcCheckoutBlock = document.querySelector( 'div[data-block-name="woocommerce/checkout"]' );
     53
     54            /**
     55             * @type {HTMLInputElement}
     56             */
     57            const widgetId = wcCheckoutBlock.querySelector( `[name="${ widgetName }"]` );
     58
     59            /**
     60             * @type {HTMLTextAreaElement}
     61             */
     62            const hCaptchaResponse = wcCheckoutBlock.querySelector( `[name="${ responseInputName }"]` );
     63
     64            /**
     65             * @type {HTMLInputElement}
     66             */
     67            const hcapHp = wcCheckoutBlock.querySelector( `[id^="hcap_hp_"]` );
     68
     69            /**
     70             * @type {HTMLInputElement}
     71             */
     72            const hcapSig = wcCheckoutBlock.querySelector( `[name="${ sigInputName }"]` );
     73
     74            /**
     75             * @type {HTMLInputElement}
     76             */
     77            const token = wcCheckoutBlock.querySelector( `[name="${ tokenName }"]` );
     78
     79            formData[ widgetName ] = widgetId?.value;
     80            formData[ responseInputName ] = hCaptchaResponse?.value;
     81            formData[ hcapHp.id ] = hcapHp?.value;
     82            formData[ sigInputName ] = hcapSig?.value;
     83            formData[ tokenName ] = token?.value;
     84
     85            config.body = JSON.stringify( formData );
     86
     87            event.detail.args.config = config;
     88        },
     89
     90        fetchComplete( event ) {
     91            const resource = event?.detail?.args?.[ 0 ] ?? '';
     92
     93            if ( ! resource.includes( '/wc/store/v1/checkout' ) ) {
     94                return;
     95            }
     96
     97            window.hCaptchaBindEvents();
     98        },
     99    };
     100
     101    return app;
     102}( window ) );
     103
     104window.hCaptchaWCBlockCheckout = wcBlockCheckout;
     105
     106wcBlockCheckout.init();
  • hcaptcha-for-forms-and-more/trunk/assets/js/hcaptcha-wc-block-checkout.min.js

    r3339595 r3359717  
    1 (()=>{function t(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var r,e,o="function"==typeof Symbol?Symbol:{},c=o.iterator||"@@iterator",a=o.toStringTag||"@@toStringTag";function i(t,o,c,a){var i=o&&o.prototype instanceof f?o:f,l=Object.create(i.prototype);return n(l,"_invoke",function(t,n,o){var c,a,i,f=0,l=o||[],p=!1,h={p:0,n:0,v:r,a:s,f:s.bind(r,4),d:function(t,n){return c=t,a=0,i=r,h.n=n,u}};function s(t,n){for(a=t,i=n,e=0;!p&&f&&!o&&e<l.length;e++){var o,c=l[e],s=h.p,v=c[2];t>3?(o=v===n)&&(i=c[(a=c[4])?5:(a=3,3)],c[4]=c[5]=r):c[0]<=s&&((o=t<2&&s<c[1])?(a=0,h.v=n,h.n=c[1]):s<v&&(o=t<3||c[0]>n||n>v)&&(c[4]=t,c[5]=n,h.n=v,a=0))}if(o||t>1)return u;throw p=!0,n}return function(o,l,v){if(f>1)throw TypeError("Generator is already running");for(p&&1===l&&s(l,v),a=l,i=v;(e=a<2?r:i)||!p;){c||(a?a<3?(a>1&&(h.n=-1),s(a,i)):h.n=i:h.v=i);try{if(f=2,c){if(a||(o="next"),e=c[o]){if(!(e=e.call(c,i)))throw TypeError("iterator result is not an object");if(!e.done)return e;i=e.value,a<2&&(a=0)}else 1===a&&(e=c.return)&&e.call(c),a<2&&(i=TypeError("The iterator does not provide a '"+o+"' method"),a=1);c=r}else if((e=(p=h.n<0)?i:t.call(n,h))!==u)break}catch(t){c=r,a=1,i=t}finally{f=1}}return{value:e,done:p}}}(t,c,a),!0),l}var u={};function f(){}function l(){}function p(){}e=Object.getPrototypeOf;var h=[][c]?e(e([][c]())):(n(e={},c,function(){return this}),e),s=p.prototype=f.prototype=Object.create(h);function v(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,p):(t.__proto__=p,n(t,a,"GeneratorFunction")),t.prototype=Object.create(s),t}return l.prototype=p,n(s,"constructor",p),n(p,"constructor",l),l.displayName="GeneratorFunction",n(p,a,"GeneratorFunction"),n(s),n(s,a,"Generator"),n(s,c,function(){return this}),n(s,"toString",function(){return"[object Generator]"}),(t=function(){return{w:i,m:v}})()}function n(t,r,e,o){var c=Object.defineProperty;try{c({},"",{})}catch(t){c=0}n=function(t,r,e,o){function a(r,e){n(t,r,function(t){return this._invoke(r,e,t)})}r?c?c(t,r,{value:e,enumerable:!o,configurable:!o,writable:!o}):t[r]=e:(a("next",0),a("throw",1),a("return",2))},n(t,r,e,o)}function r(t,n,r,e,o,c,a){try{var i=t[c](a),u=i.value}catch(t){return void r(t)}i.done?n(u):Promise.resolve(u).then(e,o)}function e(t){return function(){var n=this,e=arguments;return new Promise(function(o,c){var a=t.apply(n,e);function i(t){r(a,o,c,i,u,"next",t)}function u(t){r(a,o,c,i,u,"throw",t)}i(void 0)})}}var o=window.fetch,c="wc-block-components-checkout-place-order-button";wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", .".concat(c)}),wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(t,n){return!!n.classList.contains("".concat(c))||t}),window.fetch=e(t().m(function n(){var r,e,c,a,i,u,f,l,p,h,s,v,y=arguments;return t().w(function(t){for(;;)switch(t.n){case 0:for(r=y.length,e=new Array(r),c=0;c<r;c++)e[c]=y[c];return a=e[0],i=e[1],a.includes("/wc/store/v1/checkout")&&(u=i.body,f="hcaptcha-widget-id",l="h-captcha-response",p=JSON.parse(u),h=document.querySelector('div[data-block-name="woocommerce/checkout"]'),s=h.querySelector('[name="'.concat(f,'"]')),v=h.querySelector('[name="'.concat(l,'"]')),s&&v&&(p[f]=s.value,p[l]=v.value),i.body=JSON.stringify(p)),t.n=1,o(a,i);case 1:return t.a(2,t.v)}},n)}))})();
     1(()=>{"use strict";var t={2981:(t,e,n)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,a(r.key),r)}}function a(t){var e=function(t,e){if("object"!=r(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||"default");if("object"!=r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==r(e)?e:e+""}n.d(e,{d:()=>c});var c=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return e=t,r=[{key:"addHCaptchaData",value:function(e,n,r,o){var a,c=null!==(a=e.data)&&void 0!==a?a:"";"string"==typeof c&&c.startsWith("action=".concat(n))&&(e.data+=t.getHCaptchaData(o,r))}},{key:"getHCaptchaData",value:function(t,e){for(var n,r="",o=0,a=["h-captcha-response","hcaptcha-widget-id",e,null!==(n=t.find('[name^="hcap_hp_"]').first().attr("name"))&&void 0!==n?n:"","hcap_hp_sig","hcap_fst_token"];o<a.length;o++){var c,i=a[o];if(i){var l=null!==(c=t.find('[name="'.concat(i,'"]')).first().val())&&void 0!==c?c:"";r+="&".concat(i,"=").concat(l)}}return r}},{key:"installFetchEvents",value:function(){if("undefined"!=typeof window&&"function"==typeof window.fetch&&!window.__hcapFetchWrapped){var t;t=window.fetch,window.fetch=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:before",{detail:{args:n}}))}catch(t){}var o=t.apply(void 0,n);return o.then(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:success",{detail:{args:n,response:t.clone()}}))}catch(t){}}).catch(function(t){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:error",{detail:{args:n,error:t}}))}catch(t){}}).finally(function(){try{window.dispatchEvent(new CustomEvent("hCaptchaFetch:complete",{detail:{args:n}}))}catch(t){}}),o};try{Object.defineProperty(window,"__hcapFetchWrapped",{value:!0,configurable:!0})}catch(t){window.__hcapFetchWrapped=!0}}}}],(n=null)&&o(e.prototype,n),r&&o(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,r}()}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var a=e[r]={exports:{}};return t[r](a,a.exports,n),a.exports}n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var r=n(2981);function o(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,c,i=[],l=!0,u=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(i.push(r.value),i.length!==e);l=!0);}catch(t){u=!0,o=t}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw o}}return i}}(t,e)||function(t,e){if(t){if("string"==typeof t)return a(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var c=window.hCaptchaWCBlockCheckout||function(t){var e={init:function(){var n="wc-block-components-checkout-place-order-button";wp.hooks.addFilter("hcaptcha.submitButtonSelector","hcaptcha",function(t){return t+", .".concat(n)}),wp.hooks.addFilter("hcaptcha.ajaxSubmitButton","hcaptcha",function(t,e){return!!e.classList.contains("".concat(n))||t}),r.d.installFetchEvents(),t.addEventListener("hCaptchaFetch:before",e.fetchBefore),t.addEventListener("hCaptchaFetch:complete",e.fetchComplete)},fetchBefore:function(t){var e,n=o(null==t||null===(e=t.detail)||void 0===e?void 0:e.args,2),r=n[0],a=n[1];if(r.includes("/wc/store/v1/checkout")){var c;try{c=JSON.parse(a.body)}catch(t){c={}}var i="hcaptcha-widget-id",l="h-captcha-response",u="hcap_hp_sig",h="hcap_fst_token",f=document.querySelector('div[data-block-name="woocommerce/checkout"]'),d=f.querySelector('[name="'.concat(i,'"]')),p=f.querySelector('[name="'.concat(l,'"]')),s=f.querySelector('[id^="hcap_hp_"]'),v=f.querySelector('[name="'.concat(u,'"]')),y=f.querySelector('[name="'.concat(h,'"]'));c[i]=null==d?void 0:d.value,c[l]=null==p?void 0:p.value,c[s.id]=null==s?void 0:s.value,c[u]=null==v?void 0:v.value,c[h]=null==y?void 0:y.value,a.body=JSON.stringify(c),t.detail.args.config=a}},fetchComplete:function(e){var n,r;(null!==(n=null==e||null===(r=e.detail)||void 0===r||null===(r=r.args)||void 0===r?void 0:r[0])&&void 0!==n?n:"").includes("/wc/store/v1/checkout")&&t.hCaptchaBindEvents()}};return e}(window);window.hCaptchaWCBlockCheckout=c,c.init()})();
  • hcaptcha-for-forms-and-more/trunk/changelog.txt

    r3339595 r3359717  
     1= 4.17.0 =
     2* Added a hidden honeypot field and minimum submit time for bot detection before processing hCaptcha. Currently supported for WordPress Core, Avada theme, Contact Form 7, Divi theme, Divi Builder, Essential Addons for Elementor, Extra theme, Elementor, Jetpack, Mailchimp, Ninja Forms, Spectra, WooCommerce, WPForms, Protect Content feature.
     3* Added a notification message on the placeholder when hCaptcha failed to load.
     4* Added hCaptcha error messages to the Divi optin email form.
     5* Added hCaptcha error messages to the JetPack form.
     6* Fix conflict with reCaptcha in Divi Contact form.
     7* Fixed running migrations on a fresh installation.
     8* Fixed updating the migration option on each admin request.
     9* Fixed a fatal error on saving the Integration settings with active plugins having all switches off.
     10* Fixed an issue with several Divi optin email forms on the page.
     11* Fixed activation of Blocksy plugins with any theme.
     12* Fixed refreshing hCaptcha upon failed submission in Jetpack.
     13* Fixed Ninja Forms uncaught type error in JS appeared with some field types.
     14* Fixed Ninja Forms integration when form duplicates are on the same page.
     15
    116= 4.16.0 =
    217* Added integration with Germanized for WooCommerce.
  • hcaptcha-for-forms-and-more/trunk/composer.json

    r3339595 r3359717  
    4545    "codeception/module-webdriver": "1.4.1 - 4.0.3",
    4646    "lucatume/function-mocker": "^2.0.0",
    47     "lucatume/wp-browser": "3.7.11 - 4.5.2",
     47    "lucatume/wp-browser": "3.7.11 - 4.5.5",
    4848    "squizlabs/php_codesniffer": "^3.13.2",
    4949    "phpcompatibility/php-compatibility": "^9.3.5",
  • hcaptcha-for-forms-and-more/trunk/hcaptcha.php

    r3339595 r3359717  
    1111 * Plugin URI:           https://www.hcaptcha.com/
    1212 * Description:          hCaptcha keeps out bots and spam while putting privacy first. It is a drop-in replacement for reCAPTCHA.
    13  * Version:              4.16.0
     13 * Version:              4.17.0
    1414 * Requires at least:    5.3
    1515 * Requires PHP:         7.2
     
    4040 * Plugin version.
    4141 */
    42 const HCAPTCHA_VERSION = '4.16.0';
     42const HCAPTCHA_VERSION = '4.17.0';
    4343
    4444/**
  • hcaptcha-for-forms-and-more/trunk/readme.txt

    r3339595 r3359717  
    55Tested up to: 6.8
    66Requires PHP: 7.2
    7 Stable tag: 4.16.0
     7Stable tag: 4.17.0
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    1010
    1111The strongest CAPTCHA. Switch from reCAPTCHA, Turnstile, etc. for free.
    12 Integrates with 50+ popular plugins.
     12Integrates with 60+ popular plugins and themes.
    1313
    1414== Description ==
     
    756756== Changelog ==
    757757
     758= 4.17.0 =
     759* Added a hidden honeypot field and minimum submit time for bot detection before processing hCaptcha. Currently supported for WordPress Core, Avada theme, Contact Form 7, Divi theme, Divi Builder, Essential Addons for Elementor, Extra theme, Elementor, Jetpack, Mailchimp, Ninja Forms, Spectra, WooCommerce, WPForms, Protect Content feature.
     760* Added a notification message on the placeholder when hCaptcha failed to load.
     761* Added hCaptcha error messages to the Divi optin email form.
     762* Added hCaptcha error messages to the JetPack form.
     763* Fix conflict with reCaptcha in Divi Contact form.
     764* Fixed running migrations on a fresh installation.
     765* Fixed updating the migration option on each admin request.
     766* Fixed a fatal error on saving the Integration settings with active plugins having all switches off.
     767* Fixed an issue with several Divi optin email forms on the page.
     768* Fixed activation of Blocksy plugins with any theme.
     769* Fixed refreshing hCaptcha upon failed submission in Jetpack.
     770* Fixed Ninja Forms uncaught type error in JS appeared with some field types.
     771* Fixed Ninja Forms integration when form duplicates are on the same page.
     772
    758773= 4.16.0 =
    759774* Added integration with Germanized for WooCommerce.
  • hcaptcha-for-forms-and-more/trunk/src/php/Abstracts/CommentBase.php

    r3339595 r3359717  
    119119     * Pre-approve comment.
    120120     *
    121      * @param int|string|WP_Error $approved    The approval status. Accepts 1, 0, 'spam', 'trash', or WP_Error.
    122      * @param array               $commentdata Comment data.
     121     * @param int|string|WP_Error $approved     The approval status. Accepts 1, 0, 'spam', 'trash', or WP_Error.
     122     * @param array               $comment_data Comment data.
    123123     *
    124124     * @return int|string|WP_Error
    125125     * @noinspection PhpUnusedParameterInspection
    126126     */
    127     public function pre_comment_approved( $approved, array $commentdata ) {
     127    public function pre_comment_approved( $approved, array $comment_data ) {
    128128        if ( null === $this->result || true === $this->result ) {
    129129            return $approved;
  • hcaptcha-for-forms-and-more/trunk/src/php/Avada/Form.php

    r3319903 r3359717  
    1818
    1919    /**
     20     * Script handle.
     21     */
     22    private const HANDLE = 'hcaptcha-avada';
     23
     24    /**
    2025     * Form id.
    2126     *
     
    4146        add_action( 'fusion_element_form_content', [ $this, 'add_hcaptcha' ], 10, 2 );
    4247        add_filter( 'fusion_form_demo_mode', [ $this, 'verify' ] );
     48        add_action( 'wp_print_footer_scripts', [ $this, 'enqueue_scripts' ], 9 );
    4349    }
    4450
     
    127133
    128134        $_POST['hcaptcha-widget-id'] = $form_data['hcaptcha-widget-id'] ?? '';
     135        $_POST['hcap_fst_token']     = $form_data['hcap_fst_token'] ?? '';
     136        $hp_name                     = API::get_hp_name( $form_data );
     137        $_POST[ $hp_name ]           = $form_data[ $hp_name ] ?? '';
     138        $_POST['hcap_hp_sig']        = $form_data['hcap_hp_sig'] ?? '';
    129139
    130140        $result = API::verify( $this->get_entry( $form_data ) );
     
    145155
    146156    /**
     157     * Enqueue scripts.
     158     *
     159     * @return void
     160     */
     161    public function enqueue_scripts(): void {
     162        if ( ! hcaptcha()->form_shown ) {
     163            return;
     164        }
     165
     166        $min = hcap_min_suffix();
     167
     168        wp_enqueue_script(
     169            self::HANDLE,
     170            HCAPTCHA_URL . "/assets/js/hcaptcha-avada$min.js",
     171            [ 'jquery', 'hcaptcha' ],
     172            HCAPTCHA_VERSION,
     173            true
     174        );
     175    }
     176
     177    /**
    147178     * Get entry.
    148179     *
  • hcaptcha-for-forms-and-more/trunk/src/php/CustomerReviews/QuestionAnswer.php

    r3339595 r3359717  
    2121
    2222    /**
     23     * WC product Q&A tab callback.
     24     *
     25     * @var callable
     26     */
     27    private $qna_callback;
     28
     29    /**
     30     * Whether hCaptcha was added.
     31     *
     32     * @var bool
     33     */
     34    protected $has_hcaptcha = false;
     35
     36    /**
     37     * Init hooks.
     38     *
     39     * @return void
     40     */
     41    protected function init_hooks(): void {
     42        parent::init_hooks();
     43
     44        add_filter( 'woocommerce_product_tabs', [ $this, 'product_tabs' ], 20 );
     45
     46        add_action( 'wp_ajax_cr_new_qna', [ $this, 'verify' ], 0 );
     47        add_action( 'wp_ajax_nopriv_cr_new_qna', [ $this, 'verify' ], 0 );
     48    }
     49
     50    /**
     51     * Filter WC product tabs.
     52     *
     53     * @param array|mixed $tabs Tabs.
     54     *
     55     * @return array
     56     */
     57    public function product_tabs( $tabs ): array {
     58        $tabs = (array) $tabs;
     59
     60        if ( ! isset( $tabs['cr_qna'] ) ) {
     61            return $tabs;
     62        }
     63
     64        $this->qna_callback = $tabs['cr_qna']['callback'];
     65
     66        $tabs['cr_qna']['callback'] = [ $this, 'display_qna_tab' ];
     67
     68        return $tabs;
     69    }
     70
     71    /**
     72     * Display Q&A tab.
     73     *
     74     * @param mixed $attributes Attributes.
     75     *
     76     * @return void
     77     */
     78    public function display_qna_tab( $attributes ): void {
     79        ob_start();
     80        call_user_func( $this->qna_callback, $attributes );
     81        $this->add_captcha( self::WC_TEMPLATE_NAME, '', '', [] );
     82    }
     83
     84    /**
    2385     * 'After template part' action.
    2486     * Gets the output buffer after the template part and adds hCaptcha.
     
    39101        $template = ob_get_clean();
    40102
    41         $args = [
    42             'action' => self::ACTION,
    43             'name'   => self::NONCE,
    44             'id'     => [
    45                 'source'  => HCaptcha::get_class_source( __CLASS__ ),
    46                 'form_id' => 'q&a',
    47             ],
    48         ];
     103        if ( ! $this->has_hcaptcha ) {
     104            $this->has_hcaptcha = true;
    49105
    50         // Find the $search string and insert hCaptcha before it.
    51         $search  = '#<div class="cr-review-form-buttons">\s*<button type="button" class="cr-review-form-submit" data-crcptcha=#';
    52         $replace =
    53             "\n" . '<div class="cr-review-form-item">' .
    54             HCaptcha::form( $args ) .
    55             "\n" . '</div>' .
    56             '$0';
     106            $args = [
     107                'action' => self::ACTION,
     108                'name'   => self::NONCE,
     109                'id'     => [
     110                    'source'  => HCaptcha::get_class_source( __CLASS__ ),
     111                    'form_id' => 'q&a',
     112                ],
     113            ];
    57114
    58         $template = preg_replace( $search, $replace, $template );
     115            // Find the $search string and insert hCaptcha before it.
     116            $search   = '#<div class="cr-review-form-buttons">\s*<button type="button" class="cr-review-form-submit" data-crcptcha=#';
     117            $template = preg_replace_callback(
     118                $search,
     119                static function ( array $m ) use ( $args ) {
     120                    return (
     121                        "\n" . '<div class="cr-review-form-item">' .
     122                        HCaptcha::form( $args ) .
     123                        "\n" . '</div>' .
     124                        $m[0]
     125                    );
     126                },
     127                $template
     128            );
     129        }
    59130
    60131        // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
    61132        echo $template;
    62133    }
    63 
    64     /**
    65      * Init hooks.
    66      *
    67      * @return void
    68      */
    69     protected function init_hooks(): void {
    70         parent::init_hooks();
    71 
    72         add_action( 'wp_ajax_cr_new_qna', [ $this, 'verify' ], 0 );
    73         add_action( 'wp_ajax_nopriv_cr_new_qna', [ $this, 'verify' ], 0 );
    74     }
    75134}
  • hcaptcha-for-forms-and-more/trunk/src/php/CustomerReviews/Review.php

    r3339595 r3359717  
    4949
    5050        // Find the $search string and insert hCaptcha before it.
    51         $search  = '<div class="cr-review-form-buttons">';
    52         $replace =
    53             "\n" . '<div class="cr-review-form-item">' .
    54             HCaptcha::form( $args ) .
    55             "\n" . '</div>' .
    56             $search;
    57 
    58         $template = str_replace( $search, $replace, $template );
     51        $search   = '#<div class="cr-review-form-buttons">#';
     52        $template = preg_replace_callback(
     53            $search,
     54            static function ( array $m ) use ( $args ) {
     55                return (
     56                    "\n" . '<div class="cr-review-form-item">' .
     57                    HCaptcha::form( $args ) .
     58                    "\n" . '</div>' .
     59                    $m[0]
     60                );
     61            },
     62            $template
     63        );
    5964
    6065        // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
  • hcaptcha-for-forms-and-more/trunk/src/php/Divi/Contact.php

    r3319903 r3359717  
    6363
    6464        add_filter( 'et_pb_module_shortcode_attributes', [ $this, 'shortcode_attributes' ], 10, 5 );
    65         add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
     65        add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_scripts' ], 20 );
    6666    }
    6767
     
    143143        // Check that the form was submitted and the et_pb_contact_et_number field is empty to protect from spam.
    144144        if ( $nonce_result && isset( $_POST[ $submit_field ] ) && empty( $_POST[ $number_field ] ) ) {
    145             // Remove hcaptcha from current form fields, because Divi compares current and submitted fields.
     145            // Remove hCaptcha fields from current form fields, because Divi compares current and submitted fields.
    146146            $current_form_field  = 'et_pb_contact_email_fields_' . $this->render_count;
    147147            $current_form_fields = filter_input( INPUT_POST, $current_form_field, FILTER_SANITIZE_FULL_SPECIAL_CHARS );
     
    154154                    $fields_data_array,
    155155                    static function ( $item ) {
    156                         return false === strpos( $item['field_id'], 'captcha' );
     156                        return ! preg_match( '/captcha|hcap_hp_|hcap_fst_token/', $item['field_id'] );
    157157                    }
    158158                );
     
    203203     */
    204204    public function enqueue_scripts(): void {
     205        if ( ! hcaptcha()->form_shown ) {
     206            return;
     207        }
     208
     209        wp_dequeue_script( 'et-core-api-spam-recaptcha' );
     210
    205211        $min = hcap_min_suffix();
    206212
  • hcaptcha-for-forms-and-more/trunk/src/php/Divi/EmailOptin.php

    r3319903 r3359717  
    8484     */
    8585    public function verify(): void {
    86         $error_message = API::verify_post_html( self::NONCE, self::ACTION );
     86        $error_message = API::verify_post( self::NONCE, self::ACTION );
    8787
    8888        if ( null === $error_message ) {
     
    9090        }
    9191
    92         // It is a bug in a Divi script, which doesn't handle the error message.
    93         et_core_die( esc_html( $error_message ) );
     92        wp_send_json( [ 'error' => $error_message ] );
    9493    }
    9594
  • hcaptcha-for-forms-and-more/trunk/src/php/Helpers/API.php

    r3319903 r3359717  
    99
    1010use HCaptcha\AntiSpam\AntiSpam;
     11use WP_Error;
    1112
    1213/**
     
    142143        }
    143144
     145        // Check the honeypot field.
     146        if ( ! self::check_honeypot_field() ) {
     147            $result      = hcap_get_error_messages()['spam'];
     148            $error_codes = [ 'spam' ];
     149
     150            return self::filtered_result( $result, $error_codes );
     151        }
     152
     153        // Check the form submit time token.
     154        $check = self::check_fst_token();
     155
     156        if ( is_wp_error( $check ) ) {
     157            $result      = $check->get_error_message();
     158            $error_codes = $check->get_error_codes();
     159
     160            return self::filtered_result( $result, $error_codes );
     161        }
     162
    144163        $hcaptcha_response_sanitized = htmlspecialchars(
    145164            filter_var( $hcaptcha_response, FILTER_SANITIZE_FULL_SPECIAL_CHARS ),
     
    167186
    168187        return self::process_request( $params );
     188    }
     189
     190    /**
     191     * Get a honeypot field name.
     192     *
     193     * @param array $arr Array of form fields.
     194     *
     195     * @return string
     196     */
     197    public static function get_hp_name( array $arr = [] ): string {
     198        foreach ( array_keys( $arr ) as $key ) {
     199            if ( 'hcap_hp_sig' !== $key && 0 === strpos( $key, 'hcap_hp_' ) ) {
     200                return $key;
     201            }
     202        }
     203
     204        return '';
    169205    }
    170206
     
    296332        return $result;
    297333    }
     334
     335    /**
     336     * Validates the honeypot field for spam prevention.
     337     *
     338     * @return bool True if the honeypot field is valid and empty, false otherwise.
     339     */
     340    private static function check_honeypot_field(): bool {
     341        if ( ! hcaptcha()->settings()->is_on( 'honeypot' ) ) {
     342            return true;
     343        }
     344
     345        // Honeypot check: require valid signature and ensure the honeypot field is empty.
     346        // phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.NonceVerification.Missing
     347        $hp_name      = self::get_hp_name( $_POST );
     348        $hp_value     = Request::filter_input( INPUT_POST, $hp_name );
     349        $hp_signature = Request::filter_input( INPUT_POST, 'hcap_hp_sig' );
     350
     351        // Verify nonce for logged-in users only.
     352        $nonce_verified = ! is_user_logged_in() || wp_verify_nonce( $hp_signature, $hp_name );
     353
     354        $check = $hp_name && $nonce_verified && '' === trim( $hp_value );
     355
     356        /**
     357         * Filters the result of the honeypot field check.
     358         *
     359         * @param bool $check True if the honeypot field is valid and empty, false otherwise.
     360         */
     361        return (bool) apply_filters( 'hcap_check_honeypot_field', $check );
     362    }
     363
     364    /**
     365     * Check Form Submit Time token.
     366     *
     367     * @return true|WP_Error
     368     */
     369    private static function check_fst_token() {
     370        if ( ! hcaptcha()->settings()->is_on( 'set_min_submit_time' ) ) {
     371            return true;
     372        }
     373
     374        /**
     375         * The Form Submit Time object.
     376         *
     377         * @var FormSubmitTime $fst_obj
     378         */
     379        $fst_obj = hcaptcha()->get( FormSubmitTime::class );
     380
     381        if ( ! $fst_obj ) {
     382            return hcap_get_wp_error( 'fst-no-object' );
     383        }
     384
     385        $min_submit_time = hcaptcha()->settings()->get( 'min_submit_time' );
     386
     387        /**
     388         * Filters the result of the Form Submit Time token verification.
     389         *
     390         * @param true|WP_Error $check True, if the Form Submit Time token is valid. WP_Error object otherwise.
     391         */
     392        return apply_filters( 'hcap_verify_fst_token', $fst_obj->verify_token( $min_submit_time ) );
     393    }
    298394}
  • hcaptcha-for-forms-and-more/trunk/src/php/Helpers/DB.php

    r3233179 r3359717  
    1616
    1717    /**
    18      * Changes array of items into string of items, separated by comma and sql-escaped
     18     * Changes an array of items into a string of items, separated by comma and sql-escaped
    1919     *
    2020     * @see https://coderwall.com/p/zepnaw
  • hcaptcha-for-forms-and-more/trunk/src/php/Helpers/HCaptcha.php

    r3339595 r3359717  
    145145            wp_nonce_field( $args['action'], $args['name'] );
    146146        }
     147
     148        self::honeypot_display();
    147149    }
    148150
     
    179181        $args['id']      = (array) $args['id'];
    180182        $args['id']      = [
    181             'source'  => empty( $args['id']['source'] ) ? self::$default_id['source'] : $args['id']['source'],
     183            'source'  => (array) ( empty( $args['id']['source'] ) ? self::$default_id['source'] : $args['id']['source'] ),
    182184            'form_id' => $args['id']['form_id'] ?? self::$default_id['form_id'],
    183185        ];
     
    185187
    186188        return $args;
     189    }
     190
     191    /**
     192     * Display a honeypot for form submissions.
     193     *
     194     * This method injects a honeypot field with a dynamic name and a signature.
     195     *
     196     * @return void
     197     */
     198    private static function honeypot_display(): void {
     199        if ( ! hcaptcha()->settings()->is_on( 'honeypot' ) ) {
     200            return;
     201        }
     202
     203        $hp_name = self::get_hp_name();
     204        $hp_sig  = wp_create_nonce( $hp_name );
     205
     206        ?>
     207        <label for="<?php echo esc_attr( $hp_name ); ?>"></label>
     208        <input
     209                type="text" id="<?php echo esc_attr( $hp_name ); ?>" name="<?php echo esc_attr( $hp_name ); ?>" value=""
     210                readonly inputmode="none" autocomplete="new-password" tabindex="-1" aria-hidden="true"
     211                style="position:absolute; left:-9999px; top:auto; height:0; width:0; opacity:0;"/>
     212        <input type="hidden" name="hcap_hp_sig" value="<?php echo esc_attr( $hp_sig ); ?>"/>
     213        <?php
     214    }
     215
     216    /**
     217     * Get honeypot name.
     218     * Made as a separate function to be able to mock it in tests.
     219     *
     220     * @return string
     221     */
     222    protected static function get_hp_name(): string {
     223        return 'hcap_hp_' . wp_generate_password( 12, false );
    187224    }
    188225
     
    362399     * Whether form protection is enabled/disabled via hCaptcha widget id.
    363400     *
    364      * Return false(protection disabled) in only one case:
     401     * Return false (protection disabled) in only one case:
    365402     * when $_POST['hcaptcha-widget-id'] contains encoded id with proper hash,
    366403     * and hcap_protect_form filter confirms that the form referenced in widget id is not protected.
  • hcaptcha-for-forms-and-more/trunk/src/php/Helpers/Utils.php

    r3339595 r3359717  
    195195        );
    196196    }
     197
     198    /**
     199     * Get a comma-separated list string from an array.
     200     *
     201     * @param array $arr Array containing a list.
     202     * @param bool  $sep Separator of the last element.
     203     *
     204     * @return string
     205     */
     206    public static function list_array( array $arr, bool $sep = true ): string {
     207        $separator = $sep ?
     208            __( 'and', 'wpforms-lite' ) :
     209            __( 'or', 'wpforms-lite' );
     210
     211        $last  = array_slice( $arr, - 1 );
     212        $first = implode( ', ', array_slice( $arr, 0, - 1 ) );
     213        $both  = array_filter( array_merge( [ $first ], $last ) );
     214
     215        return implode( ' ' . $separator . ' ', $both );
     216    }
    197217}
  • hcaptcha-for-forms-and-more/trunk/src/php/Jetpack/Base.php

    r3339595 r3359717  
    2929
    3030    /**
     31     * Script handle.
     32     */
     33    private const HANDLE = 'hcaptcha-jetpack';
     34
     35    /**
    3136     * Admin script handle.
    3237     */
     
    7984
    8085        add_filter( 'the_content', [ $this, 'the_content_filter' ] );
     86
     87        add_action( 'wp_print_footer_scripts', [ $this, 'enqueue_scripts' ], 9 );
     88        add_filter( 'script_loader_tag', [ $this, 'add_type_module' ], 10, 3 );
    8189
    8290        if ( ! $this->is_editing_jetpack_form_post() ) {
     
    165173    public function print_hcaptcha_scripts( $status ): bool {
    166174        return true;
     175    }
     176
     177    /**
     178     * Enqueue script on the frontend.
     179     *
     180     * @return void
     181     */
     182    public function enqueue_scripts(): void {
     183        if ( ! hcaptcha()->form_shown ) {
     184            return;
     185        }
     186
     187        $min = hcap_min_suffix();
     188
     189        wp_enqueue_script(
     190            self::HANDLE,
     191            constant( 'HCAPTCHA_URL' ) . "/assets/js/hcaptcha-jetpack$min.js",
     192            [ 'hcaptcha' ],
     193            constant( 'HCAPTCHA_VERSION' ),
     194            true
     195        );
     196    }
     197
     198    /**
     199     * Add type="module" attribute to script tag.
     200     *
     201     * @param string|mixed $tag    Script tag.
     202     * @param string       $handle Script handle.
     203     * @param string       $src    Script source.
     204     *
     205     * @return string
     206     * @noinspection PhpUnusedParameterInspection
     207     */
     208    public function add_type_module( $tag, string $handle, string $src ): string {
     209        $tag = (string) $tag;
     210
     211        if ( self::HANDLE !== $handle ) {
     212            return $tag;
     213        }
     214
     215        return HCaptcha::add_type_module( $tag );
    167216    }
    168217
  • hcaptcha-for-forms-and-more/trunk/src/php/Main.php

    r3339595 r3359717  
    2828use HCaptcha\ElementorPro\HCaptchaHandler;
    2929use HCaptcha\EventsManager\Booking;
     30use HCaptcha\Helpers\FormSubmitTime;
    3031use HCaptcha\Helpers\HCaptcha;
    3132use HCaptcha\Helpers\Pages;
     
    159160        ( new Fix() )->init();
    160161
     162        // Needs to be loaded early, as it uses short init ajax.
     163        $this->load( FormSubmitTime::class );
     164
    161165        add_action( 'plugins_loaded', [ $this, 'init_hooks' ], self::LOAD_PRIORITY );
    162166    }
     
    220224        add_action( 'login_head', [ $this, 'login_head' ] );
    221225        add_action( 'wp_print_footer_scripts', [ $this, 'print_footer_scripts' ], 0 );
     226        add_action( 'hcap_protect_form', [ $this, 'allow_honeypot_and_fst' ], 10, 3 );
    222227
    223228        $this->auto_verify = new AutoVerify();
     
    477482        $div_logo_white_url = HCAPTCHA_URL . '/assets/images/hcaptcha-div-logo-white.svg';
    478483        $bg                 = $settings->get_custom_theme_background() ?: 'initial';
     484        $load_fail_msg      = __( 'If you see this message, hCaptcha failed to load due to site errors.', 'hcaptcha-for-forms-and-more' );
    479485
    480486        /* language=CSS */
     
    502508    }
    503509
     510    .h-captcha iframe {
     511        z-index: 1;
     512    }
     513
    504514    .h-captcha::before {
    505         content: \'\';
     515        content: "";
    506516        display: block;
    507517        position: absolute;
     
    511521        border: 1px solid transparent;
    512522        border-radius: 4px;
     523        box-sizing: border-box;
     524    }
     525
     526    .h-captcha::after {
     527        content: "' . $load_fail_msg . '";
     528        font: 13px/1.35 system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
     529        display: block;
     530        position: absolute;
     531        top: 0;
     532        left: 0;
     533        box-sizing: border-box;
     534        color: #ff0000;
     535        opacity: 0;
     536    }
     537
     538    .h-captcha:not(:has(iframe))::after {
     539        animation: hcap-msg-fade-in .3s ease forwards;
     540        animation-delay: 2s;
     541    }
     542   
     543    .h-captcha:has(iframe)::after {
     544        animation: none;
     545        opacity: 0;
     546    }
     547   
     548    @keyframes hcap-msg-fade-in {
     549        to { opacity: 1; }
    513550    }
    514551
     
    519556    }
    520557
     558    .h-captcha[data-size="normal"]::after {
     559        padding: 19px 75px 16px 10px;
     560    }
     561
    521562    .h-captcha[data-size="compact"]::before {
    522563        width: 156px;
    523564        height: 136px;
    524565        background-position: 50% 79%;
     566    }
     567
     568    .h-captcha[data-size="compact"]::after {
     569        padding: 10px 10px 16px 10px;
    525570    }
    526571
     
    555600    }
    556601
    557     .h-captcha[data-size="invisible"]::before {
     602    .h-captcha[data-size="invisible"]::before,
     603    .h-captcha[data-size="invisible"]::after {
    558604        display: none;
    559605    }
     
    796842            [ 'params' => wp_json_encode( $params ) ]
    797843        );
     844    }
     845
     846    /**
     847     * Allow honeypot and FST on the supported forms only.
     848     * At this moment, only some forms can use honeypot and fst anti-spam token protection.
     849     * The supported list will be extended in the future.
     850     *
     851     * @param bool|mixed $value   The protection status of a form.
     852     * @param string[]   $source  The source of the form (plugin, theme, WordPress Core).
     853     * @param int|string $form_id Form id.
     854     *
     855     * @return bool
     856     * @noinspection PhpUnusedParameterInspection
     857     */
     858    public function allow_honeypot_and_fst( $value, array $source, $form_id ): bool {
     859        $value = (bool) $value;
     860
     861        $supported_forms = [
     862            [ General::class ], // General settings page.
     863            [ 'WordPress' ], // WordPress Core.
     864            [ 'Avada' ], // Avada theme.
     865            [ 'contact-form-7/wp-contact-form-7.php' ], // Contact Form 7.
     866            [ 'Divi' ], // Divi theme.
     867            [ 'divi-builder/divi-builder.php' ], // Divi Builder.
     868            [ 'essential-addons-for-elementor-lite/essential_adons_elementor.php' ], // Essential Addons for Elementor.
     869            [ 'Extra' ], // Extra theme.
     870            [ 'elementor-pro/elementor-pro.php' ], // Elementor.
     871            [ 'jetpack/jetpack.php' ], // JetPack.
     872            [ 'mailchimp-for-wp/mailchimp-for-wp.php' ], // MailChimp.
     873            [ 'ninja-forms/ninja-forms.php' ], // Ninja Forms.
     874            [ 'woocommerce/woocommerce.php' ], // WooCommerce.
     875            [ 'wpforms/wpforms.php', 'wpforms-lite/wpforms.php' ], // WPForms.
     876            [ 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php' ], // Spectra.
     877            [ hcaptcha()->settings()->get_plugin_name() ], // Protect Content.
     878        ];
     879
     880        if ( ! in_array( $source, $supported_forms, true ) ) {
     881            hcaptcha()->settings()->set( 'honeypot', [ '' ] );
     882            hcaptcha()->settings()->set( 'set_min_submit_time', [ '' ] );
     883        }
     884
     885        return $value;
    798886    }
    799887
  • hcaptcha-for-forms-and-more/trunk/src/php/Migrations/Migrations.php

    r3283168 r3359717  
    11<?php
    22/**
    3  * Migrations class file.
     3 * Migration class file.
    44 *
    55 * @package hcaptcha-wp
     
    7878        }
    7979
     80        $this->maybe_prepare_migration_option();
    8081        $this->init_hooks();
    8182    }
     
    112113        $this->check_plugin_update( $migrated );
    113114
    114         $migrations       = array_filter(
    115             get_class_methods( $this ),
    116             static function ( $migration ) {
    117                 return 0 === strpos( $migration, 'migrate_' );
    118             }
    119         );
    120115        $upgrade_versions = [];
    121116
    122         foreach ( $migrations as $migration ) {
     117        foreach ( $this->get_migrations() as $migration ) {
    123118            $upgrade_version    = $this->get_upgrade_version( $migration );
    124119            $upgrade_versions[] = $upgrade_version;
     
    153148        }
    154149
    155         // Remove any keys that are not in the migrations list.
     150        // Set the current version update time if it does not exist.
     151        $current_version_migrated = $migrated[ self::PLUGIN_VERSION ] ?? time();
     152
     153        // Remove any keys that are not in the migration list.
    156154        $migrated = array_intersect_key( $migrated, array_flip( $upgrade_versions ) );
    157155
    158         // Store the current version.
    159         $migrated[ self::PLUGIN_VERSION ] = $migrated[ self::PLUGIN_VERSION ] ?? time();
     156        // Restore the current version update time.
     157        // Prevents updating the option on each request.
     158        $migrated[ self::PLUGIN_VERSION ] = $current_version_migrated;
    160159
    161160        // Sort the array by version.
     
    182181
    183182    /**
     183     * Maybe prepare the migration option.
     184     */
     185    private function maybe_prepare_migration_option(): void {
     186        $migrated = get_option( self::MIGRATED_VERSIONS_OPTION_NAME );
     187
     188        // If the option is an array, it means that it is already prepared.
     189        if ( is_array( $migrated ) ) {
     190            return;
     191        }
     192
     193        $migrated = [];
     194
     195        foreach ( $this->get_migrations() as $migration ) {
     196            $upgrade_version = $this->get_upgrade_version( $migration );
     197
     198            $migrated[ $upgrade_version ] = 0;
     199        }
     200
     201        // Sort the array by version.
     202        uksort( $migrated, 'version_compare' );
     203
     204        update_option( self::MIGRATED_VERSIONS_OPTION_NAME, $migrated );
     205    }
     206
     207    /**
    184208     * Send plugin statistics.
    185209     *
     
    217241     */
    218242    private function get_upgrade_version( string $method ): string {
    219         // Find only the digits and underscores to get version number.
     243        // Find only the digits and underscores to get the version number.
    220244        if ( ! preg_match( '/(\d_?)+/', $method, $matches ) ) {
    221245            // @codeCoverageIgnoreStart
     
    239263
    240264    /**
    241      * Output message into the log file.
     265     * Output the message into the log file.
    242266     *
    243267     * @param string $message Message to log.
     
    344368        }
    345369
    346         // This two lines is a precaution for a case if options in a new format already exist.
     370        // These two lines is a precaution for a case if options in a new format already exist.
    347371        $options = get_option( PluginSettingsBase::OPTION_NAME, [] );
    348372        $options = array_merge( $new_options, $options );
     
    572596
    573597    /**
    574      * Add index to a table.
     598     * Add an index to a table.
    575599     *
    576600     * @param string $table_name Table.
     
    605629        // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
    606630    }
     631
     632    /**
     633     * Get migrations.
     634     *
     635     * @return string[]
     636     */
     637    private function get_migrations(): array {
     638        return array_filter(
     639            get_class_methods( $this ),
     640            static function ( $migration ) {
     641                return 0 === strpos( $migration, 'migrate_' );
     642            }
     643        );
     644    }
    607645}
  • hcaptcha-for-forms-and-more/trunk/src/php/NF/NF.php

    r3215681 r3359717  
    7676        add_filter( "ninja_forms_localize_field_{$name}_preview", [ $this, 'localize_field' ] );
    7777        add_action( 'wp_print_footer_scripts', [ $this, 'nf_captcha_script' ], 9 );
     78        add_filter( 'script_loader_tag', [ $this, 'add_type_module' ], 10, 3 );
    7879    }
    7980
     
    9394
    9495        // Fix bug in Ninja forms.
    95         // For template script id, they expect field->_name in admin, but field->_type on frontend.
     96        // For template script id, they expect field->_name in admin, but field->_type on the frontend.
    9697        // It works for NF fields as all fields have _name === _type.
    9798
     
    130131                    $search,
    131132                    $search . ' style="z-index: 2;"',
    132                     $this->get_hcaptcha( (int) $field['id'] )
     133                    $this->get_hcaptcha( $field['id'] )
    133134                );
    134135
     
    237238        $field = (array) $field;
    238239
    239         $field['settings']['hcaptcha'] = $field['settings']['hcaptcha'] ?? $this->get_hcaptcha( (int) $field['id'] );
     240        $field['settings']['hcaptcha'] = $field['settings']['hcaptcha'] ?? $this->get_hcaptcha( $field['id'] );
    240241
    241242        // Mark hCaptcha as shown in any case. Needed on the preview page.
     
    248249     * Get hCaptcha.
    249250     *
    250      * @param int $field_id Field id.
     251     * @param int|string $field_id Field id.
    251252     *
    252253     * @return string
    253254     */
    254     private function get_hcaptcha( int $field_id ): string {
     255    private function get_hcaptcha( $field_id ): string {
    255256        $hcaptcha_id = uniqid( 'hcaptcha-nf-', true );
    256257
     
    288289        );
    289290    }
     291
     292    /**
     293     * Add type="module" attribute to script tag.
     294     *
     295     * @param string|mixed $tag    Script tag.
     296     * @param string       $handle Script handle.
     297     * @param string       $src    Script source.
     298     *
     299     * @return string
     300     * @noinspection PhpUnusedParameterInspection
     301     */
     302    public function add_type_module( $tag, string $handle, string $src ): string {
     303        $tag = (string) $tag;
     304
     305        if ( self::HANDLE !== $handle ) {
     306            return $tag;
     307        }
     308
     309        return HCaptcha::add_type_module( $tag );
     310    }
    290311}
  • hcaptcha-for-forms-and-more/trunk/src/php/ProtectContent/ProtectContent.php

    r3319903 r3359717  
    123123     */
    124124    protected function verify(): string {
     125        // It is always too fast with Pro.
     126        hcaptcha()->settings()->set( 'set_min_submit_time', [ '' ] );
     127
    125128        $error_message = API::verify_post( self::NONCE, self::ACTION );
    126129
     
    437440                    'size'   => 'normal',
    438441                    'id'     => [
    439                         'source'  => hcaptcha()->settings()->get_plugin_name(),
     442                        'source'  => [ hcaptcha()->settings()->get_plugin_name() ],
    440443                        'form_id' => 'protect',
    441444                    ],
  • hcaptcha-for-forms-and-more/trunk/src/php/Settings/Abstracts/SettingsBase.php

    r3339595 r3359717  
    6060     * Form fields.
    6161     *
    62      * @var array
    63      */
    64     protected $form_fields = [];
     62     * @var array|null
     63     */
     64    protected $form_fields;
    6565
    6666    /**
     
    470470     */
    471471    protected function form_fields(): array {
    472         if ( empty( $this->form_fields ) ) {
    473             $this->init_form_fields();
    474             array_walk( $this->form_fields, [ $this, 'set_defaults' ] );
    475         }
     472        if ( null !== $this->form_fields ) {
     473            return $this->form_fields;
     474        }
     475
     476        $this->init_form_fields();
     477        array_walk( $this->form_fields, [ $this, 'set_defaults' ] );
     478
     479        /**
     480         * Filter the form fields.
     481         *
     482         * @param array $form_fields Form fields.
     483         * @param array $this        Settings class instance.
     484         */
     485        $this->form_fields = (array) apply_filters( 'hcap_form_fields', $this->form_fields, $this );
    476486
    477487        return $this->form_fields;
     
    925935     */
    926936    public function sanitize_option_callback( $settings ): array {
     937        $settings = (array) $settings;
     938
    927939        foreach ( $settings as $key => $setting ) {
    928940            if ( ! isset( $this->form_fields[ $key ] ) ) {
  • hcaptcha-for-forms-and-more/trunk/src/php/Settings/General.php

    r3339595 r3359717  
    535535                'helper'  => __( 'Protect content of listed URLs. Please specify one URL per line. You may use regular expressions.', 'hcaptcha-for-forms-and-more' ),
    536536            ],
     537            'set_min_submit_time'  => [
     538                'label'   => __( 'Token and Honeypot', 'hcaptcha-for-forms-and-more' ),
     539                'type'    => 'checkbox',
     540                'section' => self::SECTION_ANTISPAM,
     541                'options' => [
     542                    'on' => __( 'Set Minimum Time', 'hcaptcha-for-forms-and-more' ),
     543                ],
     544                'helper'  => __( 'Set a minimum amount of time a user must spend on a form before submitting.', 'hcaptcha-for-forms-and-more' ),
     545            ],
     546            'min_submit_time'      => [
     547                'label'   => __( 'Minimum Time to Submit the Form, sec', 'hcaptcha-for-forms-and-more' ),
     548                'type'    => 'number',
     549                'section' => self::SECTION_ANTISPAM,
     550                'default' => 2,
     551                'min'     => 1,
     552                'helper'  => __( 'Set a minimum amount of time a user must spend on a form before submitting.', 'hcaptcha-for-forms-and-more' ),
     553            ],
     554            'honeypot'             => [
     555                'type'    => 'checkbox',
     556                'section' => self::SECTION_ANTISPAM,
     557                'options' => [
     558                    'on' => __( 'Enable Honeypot Field', 'hcaptcha-for-forms-and-more' ),
     559                ],
     560                'helper'  => __( 'Add a honeypot field to submitted forms for early bot prevention.', 'hcaptcha-for-forms-and-more' ),
     561            ],
    537562            'antispam'             => [
    538                 'label'   => __( 'Enable anti-spam check', 'hcaptcha-for-forms-and-more' ),
     563                'label'   => __( 'Anti-Spam check', 'hcaptcha-for-forms-and-more' ),
    539564                'type'    => 'checkbox',
    540565                'section' => self::SECTION_ANTISPAM,
    541566                'options' => [
    542                     'on' => __( 'Anti-spam check', 'hcaptcha-for-forms-and-more' ),
     567                    'on' => __( 'Enable Anti-Spam check', 'hcaptcha-for-forms-and-more' ),
    543568                ],
    544569                'helper'  => __( 'Enable anti-spam check of submitted forms.', 'hcaptcha-for-forms-and-more' ),
    545570            ],
    546571            'antispam_provider'    => [
    547                 'label'   => __( 'Anti-spam provider', 'hcaptcha-for-forms-and-more' ),
     572                'label'   => __( 'Anti-Spam Provider', 'hcaptcha-for-forms-and-more' ),
    548573                'type'    => 'select',
    549574                'section' => self::SECTION_ANTISPAM,
     
    593618                    'on' => __( 'Remove Data on Uninstall', 'hcaptcha-for-forms-and-more' ),
    594619                ],
    595                 'default' => '',
    596620                'helper'  => __( 'When enabled, all plugin data will be removed when uninstalling the plugin.', 'hcaptcha-for-forms-and-more' ),
    597621            ],
     
    605629            ],
    606630            'login_limit'          => [
    607                 'label'   => __( 'Login attempts before hCaptcha', 'hcaptcha-for-forms-and-more' ),
     631                'label'   => __( 'Login Attempts Before hCaptcha', 'hcaptcha-for-forms-and-more' ),
    608632                'type'    => 'number',
    609633                'section' => self::SECTION_OTHER,
     
    613637            ],
    614638            'login_interval'       => [
    615                 'label'   => __( 'Failed login attempts interval, min', 'hcaptcha-for-forms-and-more' ),
     639                'label'   => __( 'Failed Login Attempts Interval, min', 'hcaptcha-for-forms-and-more' ),
    616640                'type'    => 'number',
    617641                'section' => self::SECTION_OTHER,
     
    621645            ],
    622646            'delay'                => [
    623                 'label'   => __( 'Delay showing hCaptcha, ms', 'hcaptcha-for-forms-and-more' ),
     647                'label'   => __( 'Delay Showing hCaptcha, ms', 'hcaptcha-for-forms-and-more' ),
    624648                'type'    => 'number',
    625649                'section' => self::SECTION_OTHER,
     
    9941018        // phpcs:enable WordPress.Security.NonceVerification.Missing
    9951019
     1020        add_filter( 'hcap_check_honeypot_field', '__return_true' );
     1021        add_filter( 'hcap_verify_fst_token', '__return_true' );
     1022
    9961023        $result = API::verify_request( $hcaptcha_response );
    9971024
  • hcaptcha-for-forms-and-more/trunk/src/php/Settings/Integrations.php

    r3339595 r3359717  
    99
    1010use HCaptcha\AntiSpam\AntiSpam;
     11use HCaptcha\AntiSpam\Honeypot;
    1112use HCaptcha\Helpers\Utils;
    1213use KAGG\Settings\Abstracts\SettingsBase;
     
    187188    /**
    188189     * Filter list of plugin to activate.
     190     * Proceed with the special case for blocksy companion plugins.
     191     * Companion plugins produce a fatal error when activated together.
    189192     *
    190193     * @param array|mixed $plugins    List of plugins.
     
    197200        $plugins = (array) $plugins;
    198201
    199         // Companion plugins produce a fatal error when activated together.
    200202        $companions = [
    201203            'blocksy-companion-pro/blocksy-companion.php',
    202204            'blocksy-companion/blocksy-companion.php',
    203205        ];
     206
     207        if ( ! array_intersect( $plugins, $companions ) ) {
     208            return $plugins;
     209        }
    204210
    205211        // Remove Companion plugins from the list to activate.
     
    18521858     * @return array The updated form field data containing antispam configurations.
    18531859     */
    1854     private function prepare_antispam_data( string $status, array $form_field ): array {
     1860    protected function prepare_antispam_data( string $status, array $form_field ): array {
    18551861        static $all_protected_forms;
    18561862
    18571863        if ( ! $all_protected_forms ) {
    1858             $all_protected_forms = AntiSpam::get_protected_forms();
     1864            $all_protected_forms = array_merge( Honeypot::get_protected_forms(), AntiSpam::get_protected_forms() );
    18591865        }
    18601866
     
    18661872            }
    18671873
    1868             $helper = 'hcaptcha' === $type
    1869                 ? __( 'The form is protected by the hCaptcha antispam service.', 'hcaptcha-for-forms-and-more' )
    1870                 : __( 'The form is protected by the native antispam service.', 'hcaptcha-for-forms-and-more' );
    1871 
    18721874            foreach ( $protected_forms[ $status ] as $form ) {
    18731875                if (
    18741876                    'native' === $type ||
    1875                     ( 'hcaptcha' === $type && $settings->is( $status, $form ) )
     1877                    ( 'hcaptcha' === $type && $settings->is( $status, $form ) ) ||
     1878                    ( 'honeypot' === $type && $settings->is( $status, $form ) )
    18761879                ) {
    1877                     $form_field['data'][ $form ]    = [ 'antispam' => $type ];
    1878                     $form_field['helpers'][ $form ] = $helper;
     1880                    $form_field = $this->prepare_form_field_antispam_data( $form_field, $form, $type );
    18791881                }
    18801882            }
    18811883        }
    18821884
     1885        return $this->format_form_antispam_helpers( $form_field );
     1886    }
     1887
     1888    /**
     1889     * Prepare form field antispam data.
     1890     *
     1891     * @param array  $form_field Form field.
     1892     * @param string $form       Form name.
     1893     * @param string $type       Antispam type.
     1894     *
     1895     * @return array
     1896     */
     1897    private function prepare_form_field_antispam_data( array $form_field, string $form, string $type ): array {
     1898        $form_field['data'][ $form ]['antispam']         = '';
     1899        $form_field['data'][ $form ][ "antispam-$type" ] = '';
     1900        $form_field['helpers'][ $form ][]                = $type;
     1901
    18831902        return $form_field;
    18841903    }
     1904
     1905    /**
     1906     * Format antispam helpers.
     1907     *
     1908     * @param array $form_field Form field.
     1909     *
     1910     * @return array
     1911     */
     1912    private function format_form_antispam_helpers( array $form_field ): array {
     1913        if ( ! isset( $form_field['helpers'] ) ) {
     1914            return $form_field;
     1915        }
     1916
     1917        $helpers = [
     1918            'honeypot' => __( 'hCaptcha honeypot', 'hcaptcha-for-forms-and-more' ),
     1919            'native'   => __( 'native antispam service', 'hcaptcha-for-forms-and-more' ),
     1920            'hcaptcha' => __( 'hCaptcha antispam service', 'hcaptcha-for-forms-and-more' ),
     1921        ];
     1922
     1923        foreach ( $form_field['helpers'] as $form => $helper_arr ) {
     1924            $helper_arr = array_map(
     1925                static function ( $type ) use ( $helpers ) {
     1926                    return $helpers[ $type ];
     1927                },
     1928                $helper_arr
     1929            );
     1930
     1931            $helper = sprintf(
     1932            /* translators: 1: form protection methods. */
     1933                __( 'The form is protected by the %1$s.', 'hcaptcha-for-forms-and-more' ),
     1934                Utils::list_array( $helper_arr )
     1935            );
     1936
     1937            $form_field['helpers'][ $form ] = $helper;
     1938        }
     1939
     1940        return $form_field;
     1941    }
    18851942}
  • hcaptcha-for-forms-and-more/trunk/src/php/Settings/ListPageBase.php

    r3265103 r3359717  
    348348     * Includes:
    349349     * 1. A list of date filter options for the datepicker module.
    350      * 2. Currently selected filter or date range values. Last "X" days, or i.e. Feb 8, 2023 - Mar 9, 2023.
     350     * 2. Currently selected filter or date range values.
     351     *    Last "X" days, or i.e., Feb 8, 2023 - Mar 9, 2023.
    351352     * 3. Assigned timespan dates.
    352353     *
     
    402403        $dates = (string) filter_input( INPUT_GET, 'date', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
    403404
    404         // Return default timespan if dates are empty.
     405        // Return the default timespan if dates are empty.
    405406        if ( empty( $dates ) ) {
    406407            return $this->get_timespan_dates( self::DEFAULT_TIMESPAN_DAYS );
     
    411412        [ $start_date, $end_date ] = explode( self::TIMESPAN_DELIMITER, $dates );
    412413
    413         // Return default timespan if the start date is more recent than the end date.
     414        // Return the default timespan if the start date is more recent than the end date.
    414415        if ( strtotime( $start_date ) > strtotime( $end_date ) ) {
    415416            return $this->get_timespan_dates( self::DEFAULT_TIMESPAN_DAYS );
     
    427428        }
    428429
    429         // Set time to 0:0:0 for start date and 23:59:59 for end date.
     430        // Set time to 0:0:0 for the start date and 23:59:59 for the end date.
    430431        $start_date = $start_date->setTime( 0, 0 );
    431432        $end_date   = $end_date->setTime( 23, 59, 59 );
     
    434435        $current_date = date_create_immutable( 'now', $timezone )->setTime( 23, 59, 59 );
    435436
    436         // Calculate day difference only if the end date is equal to the current date.
     437        // Calculate the day difference only if the end date is equal to the current date.
    437438        if ( ! $current_date->diff( $end_date )->format( '%a' ) ) {
    438439            $days_diff = $end_date->diff( $start_date )->format( '%a' );
     
    476477        [ $timespan_key, $timespan_label ] = $this->get_date_filter_choices( $days );
    477478
    478         // Bail early, if the given number of days is NOT a number nor a numeric string.
     479        // Bail early if the given number of days is NOT a number nor a numeric string.
    479480        if ( ! is_numeric( $days ) ) {
    480481            return [ '', '', $timespan_key, $timespan_label ];
     
    501502            $end_date,       // WP timezone.
    502503            $timespan_key,   // i.e. 30.
    503             $timespan_label, // i.e. Last 30 days.
     504            $timespan_label, // i.e., Last 30 days.
    504505        ];
    505506    }
     
    525526        ];
    526527
    527         // Bail early, and return the full list of options.
     528        // Bail early and return the full list of options.
    528529        if ( is_null( $key ) ) {
    529530            return $choices;
     
    547548     */
    548549    private function concat_dates( $start_date, $end_date, $fallback = '' ) {
    549         // Bail early, if the given dates are not valid.
     550        // Bail early if the given dates are not valid.
    550551        if ( ! ( $start_date instanceof DateTimeImmutable ) || ! ( $end_date instanceof DateTimeImmutable ) ) {
    551552            return $fallback;
     
    562563
    563564    /**
    564      * Get the ISO 639-2 Language Code from user/site locale.
     565     * Get the ISO 639-2 Language Code from the user / site locale.
    565566     *
    566567     * @see   http://www.loc.gov/standards/iso639-2/php/code_list.php
  • hcaptcha-for-forms-and-more/trunk/src/php/Settings/PluginSettingsBase.php

    r3283168 r3359717  
    107107
    108108    /**
    109      * Get plugin base name.
     109     * Get a plugin base name.
    110110     *
    111111     * @return string
     
    176176
    177177    /**
    178      * Show settings page.
     178     * Show the settings page.
    179179     *
    180180     * @return void
     
    206206
    207207    /**
    208      * Show submit button in any place of the form.
     208     * Show the submit button in any place of the form.
    209209     *
    210210     * @return void
  • hcaptcha-for-forms-and-more/trunk/src/php/Settings/Settings.php

    r3283168 r3359717  
    1616 * Class Settings
    1717 *
    18  * The central point to get settings from.
     18 * The central point is to get settings from.
    1919 */
    2020class Settings implements SettingsInterface {
     
    115115
    116116    /**
    117      * Get active tab name.
     117     * Get an active tab name.
    118118     *
    119119     * @return string
     
    126126
    127127    /**
    128      * Get plugin name.
     128     * Get the plugin name.
    129129     *
    130130     * @return string
     
    235235
    236236    /**
    237      * Check whether option value equals to the compared one.
     237     * Check whether the option value equals to the compared one.
    238238     *
    239239     * @param string $key     Setting name.
     
    253253
    254254    /**
    255      * Check whether option value is 'on' or just non-empty.
     255     * Check whether the option value is 'on' or just non-empty.
    256256     *
    257257     * @param string $key Setting name.
     
    260260     */
    261261    public function is_on( string $key ): bool {
    262         return ! empty( $this->get( $key ) );
     262        $value = $this->get( $key );
     263
     264        if ( is_array( $value ) ) {
     265            return [ 'on' ] === $value;
     266        }
     267
     268        return ! empty( $value );
    263269    }
    264270
     
    318324
    319325    /**
    320      * Get secret key.
     326     * Get a secret key.
    321327     *
    322328     * @return string
     
    333339
    334340    /**
    335      * Get theme.
     341     * Get a theme.
    336342     *
    337343     * @return string
  • hcaptcha-for-forms-and-more/trunk/src/php/Spectra/Form.php

    r3319903 r3359717  
    6464        add_filter( 'hcap_print_hcaptcha_scripts', [ $this, 'print_hcaptcha_scripts' ], 0 );
    6565        add_action( 'wp_print_footer_scripts', [ $this, 'enqueue_scripts' ], 9 );
     66        add_filter( 'script_loader_tag', [ $this, 'add_type_module' ], 10, 3 );
    6667    }
    6768
     
    126127        // phpcs:enable WordPress.Security.NonceVerification.Missing
    127128
    128         $_POST[ self::NONCE ] = $form_data[ self::NONCE ] ?? '';
     129        $widget_id_name = 'hcaptcha-widget-id';
     130        $hp_sig_name    = 'hcap_hp_sig';
     131        $token_name     = 'hcap_fst_token';
     132        $hp_name        = API::get_hp_name( $form_data );
     133
     134        $_POST[ self::NONCE ]     = $form_data[ self::NONCE ] ?? '';
     135        $_POST[ $widget_id_name ] = $form_data[ $widget_id_name ] ?? '';
     136        $_POST[ $hp_sig_name ]    = $form_data[ $hp_sig_name ] ?? '';
     137        $_POST[ $hp_name ]        = $form_data[ $hp_name ] ?? '';
     138        $_POST[ $token_name ]     = $form_data[ $token_name ] ?? '';
    129139
    130140        $error_message = API::verify( $this->get_entry( $form_data ) );
    131141
    132         unset( $_POST[ self::NONCE ] );
     142        unset(
     143            $_POST[ self::NONCE ],
     144            $_POST[ $widget_id_name ],
     145            $_POST[ $hp_sig_name ],
     146            $_POST[ $hp_name ],
     147            $_POST[ $token_name ]
     148        );
    133149
    134150        if ( null === $error_message ) {
     
    191207            true
    192208        );
     209    }
     210
     211    /**
     212     * Add type="module" attribute to script tag.
     213     *
     214     * @param string|mixed $tag    Script tag.
     215     * @param string       $handle Script handle.
     216     * @param string       $src    Script source.
     217     *
     218     * @return string
     219     * @noinspection PhpUnusedParameterInspection
     220     */
     221    public function add_type_module( $tag, string $handle, string $src ): string {
     222        $tag = (string) $tag;
     223
     224        if ( self::HANDLE !== $handle ) {
     225            return $tag;
     226        }
     227
     228        return HCaptcha::add_type_module( $tag );
    193229    }
    194230
  • hcaptcha-for-forms-and-more/trunk/src/php/WC/Checkout.php

    r3319903 r3359717  
    7373        add_filter( 'rest_request_before_callbacks', [ $this, 'verify_block' ], 10, 3 );
    7474        add_action( 'wp_print_footer_scripts', [ $this, 'enqueue_scripts' ], 9 );
     75        add_filter( 'script_loader_tag', [ $this, 'add_type_module' ], 10, 3 );
    7576    }
    7677
     
    158159        }
    159160
    160         $widget_id_name           = 'hcaptcha-widget-id';
    161         $hcaptcha_response_name   = 'h-captcha-response';
     161        $params         = $request->get_params();
     162        $widget_id_name = 'hcaptcha-widget-id';
     163        $response_name  = 'h-captcha-response';
     164        $hp_sig_name    = 'hcap_hp_sig';
     165        $token_name     = 'hcap_fst_token';
     166        $hp_name        = API::get_hp_name( $params );
     167
    162168        $_POST[ $widget_id_name ] = $request->get_param( $widget_id_name );
    163         $hcaptcha_response        = $request->get_param( $hcaptcha_response_name );
    164 
    165         $error_message = API::verify_request( $hcaptcha_response );
     169        $_POST[ $response_name ]  = $request->get_param( $response_name );
     170        $_POST[ $hp_sig_name ]    = $request->get_param( $hp_sig_name );
     171        $_POST[ $hp_name ]        = $request->get_param( $hp_name );
     172        $_POST[ $token_name ]     = $request->get_param( $token_name );
     173
     174        $error_message = API::verify_request();
    166175
    167176        if ( null === $error_message ) {
     
    202211        }
    203212    }
     213
     214    /**
     215     * Add type="module" attribute to script tag.
     216     *
     217     * @param string|mixed $tag    Script tag.
     218     * @param string       $handle Script handle.
     219     * @param string       $src    Script source.
     220     *
     221     * @return string
     222     * @noinspection PhpUnusedParameterInspection
     223     */
     224    public function add_type_module( $tag, string $handle, string $src ): string {
     225        $tag = (string) $tag;
     226
     227        if ( self::BLOCK_HANDLE !== $handle ) {
     228            return $tag;
     229        }
     230
     231        return HCaptcha::add_type_module( $tag );
     232    }
    204233}
  • hcaptcha-for-forms-and-more/trunk/src/php/WPForms/Form.php

    r3319903 r3359717  
    3030
    3131    /**
     32     * Script handle.
     33     */
     34    private const HANDLE = 'hcaptcha-wpforms';
     35
     36    /**
    3237     * Whether hCaptcha should be auto-added to any form.
    3338     *
     
    8287        add_filter( 'wpforms_process_bypass_captcha', '__return_true' );
    8388        add_action( 'wpforms_process', [ $this, 'verify' ], 10, 3 );
     89
     90        add_action( 'wp_print_footer_scripts', [ $this, 'enqueue_scripts' ], 9 );
    8491    }
    8592
     
    315322
    316323    /**
     324     * Enqueue scripts.
     325     *
     326     * @return void
     327     */
     328    public function enqueue_scripts(): void {
     329        if ( ! hcaptcha()->form_shown ) {
     330            return;
     331        }
     332
     333        $min = hcap_min_suffix();
     334
     335        wp_enqueue_script(
     336            self::HANDLE,
     337            HCAPTCHA_URL . "/assets/js/hcaptcha-wpforms$min.js",
     338            [ 'jquery', 'hcaptcha' ],
     339            HCAPTCHA_VERSION,
     340            true
     341        );
     342    }
     343
     344    /**
    317345     * Show hCaptcha.
    318346     *
  • hcaptcha-for-forms-and-more/trunk/src/php/includes/request.php

    r3319903 r3359717  
    9696            'bad-signature'            => __( 'Bad hCaptcha signature!', 'hcaptcha-for-forms-and-more' ),
    9797            'spam'                     => __( 'Anti-spam check failed.', 'hcaptcha-for-forms-and-more' ),
     98            'fst-no-object'            => __( 'FST object does not exist.', 'hcaptcha-for-forms-and-more' ),
     99            'fst-too-fast'             => __( 'Form submitted too quickly.', 'hcaptcha-for-forms-and-more' ),
     100            'fst-replayed-or-expired'  => __( 'Token replayed or expired.', 'hcaptcha-for-forms-and-more' ),
     101            'fst-expired'              => __( 'Token expired.', 'hcaptcha-for-forms-and-more' ),
    98102        ]
    99103    );
     
    125129
    126130    return $header . ' ' . implode( '; ', $message_arr );
     131}
     132
     133/**
     134 * Get WP_Error from hCaptcha error code.
     135 *
     136 * @param string|string[] $error_codes Error codes.
     137 *
     138 * @return WP_Error
     139 */
     140function hcap_get_wp_error( $error_codes ): WP_Error {
     141    $error_codes = (array) $error_codes;
     142    $errors      = hcap_get_error_messages();
     143    $wp_error    = new WP_Error();
     144
     145    foreach ( $error_codes as $error_code ) {
     146        if ( array_key_exists( $error_code, $errors ) ) {
     147            $wp_error->add( $error_code, $errors[ $error_code ] );
     148        }
     149    }
     150
     151    return $wp_error;
    127152}
    128153
  • hcaptcha-for-forms-and-more/trunk/vendor/autoload.php

    r3339595 r3359717  
    2020require_once __DIR__ . '/composer/autoload_real.php';
    2121
    22 return ComposerAutoloaderInite907ee6af17ec21150d2317fc40abfc9::getLoader();
     22return ComposerAutoloaderInit0948d9ad69a9f4852d35c417b9397c22::getLoader();
  • hcaptcha-for-forms-and-more/trunk/vendor/composer/autoload_classmap.php

    r3339595 r3359717  
    2424    'HCaptcha\\Affiliates\\Register' => $baseDir . '/src/php/Affiliates/Register.php',
    2525    'HCaptcha\\AntiSpam\\AntiSpam' => $baseDir . '/src/php/AntiSpam/AntiSpam.php',
     26    'HCaptcha\\AntiSpam\\Honeypot' => $baseDir . '/src/php/AntiSpam/Honeypot.php',
    2627    'HCaptcha\\AntiSpam\\ProviderBase' => $baseDir . '/src/php/AntiSpam/ProviderBase.php',
    2728    'HCaptcha\\Asgaros\\Base' => $baseDir . '/src/php/Asgaros/Base.php',
     
    9394    'HCaptcha\\Helpers\\API' => $baseDir . '/src/php/Helpers/API.php',
    9495    'HCaptcha\\Helpers\\DB' => $baseDir . '/src/php/Helpers/DB.php',
     96    'HCaptcha\\Helpers\\FormSubmitTime' => $baseDir . '/src/php/Helpers/FormSubmitTime.php',
    9597    'HCaptcha\\Helpers\\HCaptcha' => $baseDir . '/src/php/Helpers/HCaptcha.php',
    9698    'HCaptcha\\Helpers\\Minify\\CSS' => $baseDir . '/src/php/Helpers/Minify/CSS.php',
  • hcaptcha-for-forms-and-more/trunk/vendor/composer/autoload_real.php

    r3339595 r3359717  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInite907ee6af17ec21150d2317fc40abfc9
     5class ComposerAutoloaderInit0948d9ad69a9f4852d35c417b9397c22
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInite907ee6af17ec21150d2317fc40abfc9', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInit0948d9ad69a9f4852d35c417b9397c22', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    29         spl_autoload_unregister(array('ComposerAutoloaderInite907ee6af17ec21150d2317fc40abfc9', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInit0948d9ad69a9f4852d35c417b9397c22', 'loadClassLoader'));
    3030
    3131        require __DIR__ . '/autoload_static.php';
    32         call_user_func(\Composer\Autoload\ComposerStaticInite907ee6af17ec21150d2317fc40abfc9::getInitializer($loader));
     32        call_user_func(\Composer\Autoload\ComposerStaticInit0948d9ad69a9f4852d35c417b9397c22::getInitializer($loader));
    3333
    3434        $loader->setClassMapAuthoritative(true);
  • hcaptcha-for-forms-and-more/trunk/vendor/composer/autoload_static.php

    r3339595 r3359717  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInite907ee6af17ec21150d2317fc40abfc9
     7class ComposerStaticInit0948d9ad69a9f4852d35c417b9397c22
    88{
    99    public static $prefixLengthsPsr4 = array (
     
    5252        'HCaptcha\\Affiliates\\Register' => __DIR__ . '/../..' . '/src/php/Affiliates/Register.php',
    5353        'HCaptcha\\AntiSpam\\AntiSpam' => __DIR__ . '/../..' . '/src/php/AntiSpam/AntiSpam.php',
     54        'HCaptcha\\AntiSpam\\Honeypot' => __DIR__ . '/../..' . '/src/php/AntiSpam/Honeypot.php',
    5455        'HCaptcha\\AntiSpam\\ProviderBase' => __DIR__ . '/../..' . '/src/php/AntiSpam/ProviderBase.php',
    5556        'HCaptcha\\Asgaros\\Base' => __DIR__ . '/../..' . '/src/php/Asgaros/Base.php',
     
    121122        'HCaptcha\\Helpers\\API' => __DIR__ . '/../..' . '/src/php/Helpers/API.php',
    122123        'HCaptcha\\Helpers\\DB' => __DIR__ . '/../..' . '/src/php/Helpers/DB.php',
     124        'HCaptcha\\Helpers\\FormSubmitTime' => __DIR__ . '/../..' . '/src/php/Helpers/FormSubmitTime.php',
    123125        'HCaptcha\\Helpers\\HCaptcha' => __DIR__ . '/../..' . '/src/php/Helpers/HCaptcha.php',
    124126        'HCaptcha\\Helpers\\Minify\\CSS' => __DIR__ . '/../..' . '/src/php/Helpers/Minify/CSS.php',
     
    240242    {
    241243        return \Closure::bind(function () use ($loader) {
    242             $loader->prefixLengthsPsr4 = ComposerStaticInite907ee6af17ec21150d2317fc40abfc9::$prefixLengthsPsr4;
    243             $loader->prefixDirsPsr4 = ComposerStaticInite907ee6af17ec21150d2317fc40abfc9::$prefixDirsPsr4;
    244             $loader->classMap = ComposerStaticInite907ee6af17ec21150d2317fc40abfc9::$classMap;
     244            $loader->prefixLengthsPsr4 = ComposerStaticInit0948d9ad69a9f4852d35c417b9397c22::$prefixLengthsPsr4;
     245            $loader->prefixDirsPsr4 = ComposerStaticInit0948d9ad69a9f4852d35c417b9397c22::$prefixDirsPsr4;
     246            $loader->classMap = ComposerStaticInit0948d9ad69a9f4852d35c417b9397c22::$classMap;
    245247
    246248        }, null, ClassLoader::class);
  • hcaptcha-for-forms-and-more/trunk/vendor/composer/installed.php

    r3339595 r3359717  
    22    'root' => array(
    33        'name' => 'hcaptcha/hcaptcha-wordpress-plugin',
    4         'pretty_version' => '4.16.0',
    5         'version' => '4.16.0.0',
    6         'reference' => 'a7c7adcad35de74072aec91cefc35ea305d55592',
     4        'pretty_version' => '4.17.0',
     5        'version' => '4.17.0.0',
     6        'reference' => '40e0ab01cd7c49bbc7cffe4a5a631783ff44e925',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        'hcaptcha/hcaptcha-wordpress-plugin' => array(
    14             'pretty_version' => '4.16.0',
    15             'version' => '4.16.0.0',
    16             'reference' => 'a7c7adcad35de74072aec91cefc35ea305d55592',
     14            'pretty_version' => '4.17.0',
     15            'version' => '4.17.0.0',
     16            'reference' => '40e0ab01cd7c49bbc7cffe4a5a631783ff44e925',
    1717            'type' => 'wordpress-plugin',
    1818            'install_path' => __DIR__ . '/../../',
Note: See TracChangeset for help on using the changeset viewer.