From 646c8191adfe7a60a78a5041ef4f2a928e97ca5e Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Wed, 24 Jun 2020 09:53:02 -0600 Subject: [PATCH 01/29] Use class instead of ID in form display CC-162 --- includes/class-display.php | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 80015ff7..f08a7b7d 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -502,7 +502,7 @@ public function build_form_fields( $form_data, $old_values, $req_errors ) { */ public function build_honeypot_field() { return sprintf( - '
', + '
', esc_html__( 'Constant Contact Use.', 'constant-contact-forms' ) ); } @@ -1025,7 +1025,7 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label $class_attr = 'class="' . implode( ' ', $classes ) . '"'; } - $field = ''; + $field = ''; $markup .= sprintf( $field, $req_text, @@ -1204,7 +1204,7 @@ public function get_optin_markup( $label, $value, $show ) { $checked = $show ? '' : 'checked'; $markup = $this->field_top( 'checkbox', 'ctct-opt-in', 'ctct-opt-in', $label, false, false ); - $markup .= ''; + $markup .= ''; $markup .= $this->field_bottom( 'ctct-opt-in', ' ' . wp_kses_post( $label ), false ); return $markup; @@ -1251,7 +1251,7 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = esc_attr( $street ) . $req_label ); $input_street1 = sprintf( - '', + '', $req, esc_attr( $label_placement_class ), esc_attr( $f_id ), @@ -1276,7 +1276,7 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = ); $input_street2 = sprintf( - '', + '', esc_attr( $label_placement_class ), esc_attr( $f_id ), esc_attr( $f_id ), @@ -1302,7 +1302,7 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = ); $input_city = sprintf( - '', + '', $req, esc_attr( $label_placement_class ), esc_attr( $f_id ), @@ -1329,7 +1329,7 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = ); $input_state = sprintf( - '', + '', $req, esc_attr( $label_placement_class ), esc_attr( $f_id ), @@ -1356,7 +1356,7 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = ); $input_zip = sprintf( - '', + '', $req, esc_attr( $label_placement_class ), esc_attr( $f_id ), @@ -1376,10 +1376,10 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = $return = '
%s'; $return .= '
%s
'; - $return .= '
%s
'; - $return .= '
%s
'; - $return .= '
%s
'; - $return .= '
%s
'; + $return .= '
%s
'; + $return .= '
%s
'; + $return .= '
%s
'; + $return .= '
%s
'; $return .= '
'; return sprintf( From 9c06f43415d8372b533dee3fe2b40426e923e93f Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Wed, 24 Jun 2020 11:13:32 -0600 Subject: [PATCH 02/29] Update id to class in styles CC-162 --- assets/css/style.css | 8 ++++---- assets/css/style.min.css | 4 ++-- assets/sass/_inputs.scss | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/assets/css/style.css b/assets/css/style.css index 4a19e4c4..013ce641 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -89,7 +89,7 @@ top: -9999px !important; } -.ctct-form-wrapper #ctct_usage { +.ctct-form-wrapper .ctct_usage { border: 0 none; clip: rect(0, 0, 0, 0); height: 1px; @@ -100,7 +100,7 @@ width: 1px; } -.ctct-form-wrapper .no-recaptcha #ctct-submitted:disabled { +.ctct-form-wrapper .no-recaptcha .ctct-submitted:disabled { background-image: url("../images/oval.min.svg"); background-position: center; background-repeat: no-repeat; @@ -109,7 +109,7 @@ opacity: 0.3; } -.ctct-form-wrapper .has-recaptcha #ctct-submitted:disabled { +.ctct-form-wrapper .has-recaptcha .ctct-submitted:disabled { cursor: not-allowed; } @@ -179,4 +179,4 @@ } } -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQixZQUFZO0FBQ2Q7O0FBRUE7RUFDRSx5Q0FBeUM7RUFDekMscUJBQXFCO0VBQ3JCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSx5Q0FBeUM7RUFDekMscUJBQXFCO0VBQ3JCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxxQkFBcUI7QUFDdkI7O0FBbUNBO0VBQ0UsbURBQW1EO0VBQ25ELDRCQUE0QjtFQUM1Qiw0QkFBNEI7RUFDNUIscUJBQXFCO0VBQ3JCLHFCQUFxQjtFQUNyQixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxxREFBcUQ7RUFDckQseUNBQXlDO0VBQ3pDLDRCQUE0QjtFQUM1QixxQkFBcUI7RUFDckIscUJBQXFCO0VBQ3JCLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxxREFBcUQ7RUFDckQseUNBQXlDO0VBQ3pDLDRCQUE0QjtFQUM1QixxQkFBcUI7RUFDckIscUJBQXFCO0VBQ3JCLGtCQUFrQjtBQUNwQjs7QUFFQTs7RUFFRSxxQkFBcUI7RUFDckIsVUFBVTtBQUNaOztBQUVBO0VBQ0UscUJBQXFCO0VBQ3JCLGdCQUFnQjtFQUNoQixVQUFVO0FBQ1o7O0FBRUE7O0VBRUUscUJBQXFCO0VBQ3JCLGdCQUFnQjtFQUNoQixVQUFVO0FBQ1o7O0FBRUE7RUFDRSxxQkFBcUI7RUFDckIsVUFBVTtBQUNaOztBQUVBO0VBQ0Usd0JBQXdCO0VBQ3hCLDZCQUE2QjtFQUM3Qix1QkFBdUI7QUFDekI7O0FBRUE7RUFDRSxjQUFjO0VBQ2Qsc0JBQXNCO0VBQ3RCLFdBQVc7RUFDWCxZQUFZO0VBQ1osZ0JBQWdCO0VBQ2hCLFVBQVU7RUFDVixrQkFBa0I7RUFDbEIsVUFBVTtBQUNaOztBQUVBO0VBQ0UsK0NBQStDO0VBQy9DLDJCQUEyQjtFQUMzQiw0QkFBNEI7RUFDNUIsa0JBQWtCO0VBQ2xCLFlBQVk7RUFDWixZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsV0FBVztFQUNYLGNBQWM7QUFDaEI7O0FBRUE7O0VBRUUsY0FBYztBQUNoQjs7QUFFQTs7RUFFRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSxZQUFZO0VBQ1osY0FBYztFQUNkLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLFdBQVc7RUFDWCxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLFdBQVc7QUFDYjs7QUE1SkE7RUFDRTtJQUNFLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsVUFBVTtFQUNaO0VBQ0E7SUFDRSxlQUFlO0VBQ2pCO0VBSUE7SUFDRSxXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLFVBQVU7RUFDWjtFQUNBO0lBQ0UsZUFBZTtFQUNqQjtFQUlBO0lBQ0UsV0FBVztJQUNYLGdCQUFnQjtJQUNoQixVQUFVO0VBQ1o7RUFDQTtJQUNFLGVBQWU7RUFDakI7QUFyQkYiLCJmaWxlIjoic3R5bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWJ1dHRvbiB7XG4gIGZvbnQtc2l6ZTogMC45cmVtO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtbWVzc2FnZSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBwYWRkaW5nOiAxZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1tZXNzYWdlLmN0Y3QtZXJyb3Ige1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgNjUsIDU0LCAwLjAyKTtcbiAgYm9yZGVyLWNvbG9yOiAjZmY0MTM2O1xuICBjb2xvcjogI2NmMGIwMDtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LW1lc3NhZ2UuY3RjdC1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg0NiwgMjA0LCA2NCwgMC4wMik7XG4gIGJvcmRlci1jb2xvcjogIzJlY2M0MDtcbiAgY29sb3I6ICMxYjc5MjY7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1mb3JtLWZpZWxkIHtcbiAgbWFyZ2luOiAwIDAgMXJlbTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1oYWxmIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDIlO1xuICAgIHdpZHRoOiA0OCU7XG4gIH1cbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWhhbGY6bGFzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC10aGlyZCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyJTtcbiAgICB3aWR0aDogMzIlO1xuICB9XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC10aGlyZDpsYXN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWZvdXJ0aCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyJTtcbiAgICB3aWR0aDogMjQlO1xuICB9XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1mb3VydGg6bGFzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RleHQnXTpyZXF1aXJlZDp2YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J2VtYWlsJ106cmVxdWlyZWQ6dmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdwYXNzd29yZCddOnJlcXVpcmVkOnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGVsJ106cmVxdWlyZWQ6dmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdudW1iZXInXTpyZXF1aXJlZDp2YWxpZCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltYWdlcy9jaGVja19jaXJjbGUuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IDE4cHg7XG4gIGJvcmRlci1jb2xvcjogIzJlY2M0MDtcbiAgcGFkZGluZy1sZWZ0OiAzMnB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGV4dCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RleHQnXS5jdGN0LWludmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdlbWFpbCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J2VtYWlsJ10uY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ncGFzc3dvcmQnXTpyZXF1aXJlZC5jdGN0LWludmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdwYXNzd29yZCddLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RlbCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RlbCddLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J251bWJlciddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J251bWJlciddLmN0Y3QtaW52YWxpZCB7XG4gIGJhY2tncm91bmQ6ICNmZmYgdXJsKFwiLi4vaW1hZ2VzL2Vycm9yLnN2Z1wiKSBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA2NSwgNTQsIDAuMDIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXNpemU6IDI0cHg7XG4gIGJvcmRlci1jb2xvcjogI2ZmNDEzNjtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZmllbGQtZXJyb3Ige1xuICBmb250LXNpemU6IDAuODVyZW07XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0LmN0Y3QtaW52YWxpZCB7XG4gIGJhY2tncm91bmQ6ICNmZmYgdXJsKFwiLi4vaW1hZ2VzL2Vycm9yLnN2Z1wiKSBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA2NSwgNTQsIDAuMDIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXNpemU6IDI0cHg7XG4gIGJvcmRlci1jb2xvcjogI2ZmNDEzNjtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXQuY3RjdC1sYWJlbC1sZWZ0LFxuLmN0Y3QtZm9ybS13cmFwcGVyIHRleHRhcmVhLmN0Y3QtbGFiZWwtbGVmdCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDc1JTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIHNwYW4uY3RjdC1sYWJlbC1sZWZ0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6IDUlO1xuICB3aWR0aDogMjAlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXQuY3RjdC1sYWJlbC1yaWdodCxcbi5jdGN0LWZvcm0td3JhcHBlciB0ZXh0YXJlYS5jdGN0LWxhYmVsLXJpZ2h0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6IDUlO1xuICB3aWR0aDogNzUlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLXJpZ2h0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjAlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLWhpZGRlbiB7XG4gIGxlZnQ6IC05OTk5cHggIWltcG9ydGFudDtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHRvcDogLTk5OTlweCAhaW1wb3J0YW50O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgI2N0Y3RfdXNhZ2Uge1xuICBib3JkZXI6IDAgbm9uZTtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogLTFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLm5vLXJlY2FwdGNoYSAjY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWFnZXMvb3ZhbC5taW4uc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiB3YWl0O1xuICBvcGFjaXR5OiAwLjM7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuaGFzLXJlY2FwdGNoYSAjY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybTo6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC10b3AgbGFiZWwsXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC1ib3R0b20gbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZvcm0gLmN0Y3QtbGFiZWwtbGVmdCBsYWJlbCxcbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1mb3JtIC5jdGN0LWxhYmVsLXJpZ2h0IGxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSBhYmJyIHtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogI2ZmNDEzNjtcbiAgZm9udC1zaXplOiAwLjlyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1pbnB1dC1jb250YWluZXIgbGFiZWwge1xuICBjb2xvcjogI2FhYTtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1lcnJvciB7XG4gIGNvbG9yOiAjZmY0MTM2O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3Qtc3VibWl0IHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uY3RjdC10d2VudHlmb3VydGVlbiAuY3RjdC1mb3JtLWZpZWxkIGlucHV0IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4iXX0= */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQixZQUFZO0FBQ2Q7O0FBRUE7RUFDRSx5Q0FBeUM7RUFDekMscUJBQXFCO0VBQ3JCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSx5Q0FBeUM7RUFDekMscUJBQXFCO0VBQ3JCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxxQkFBcUI7QUFDdkI7O0FBbUNBO0VBQ0UsbURBQW1EO0VBQ25ELDRCQUE0QjtFQUM1Qiw0QkFBNEI7RUFDNUIscUJBQXFCO0VBQ3JCLHFCQUFxQjtFQUNyQixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxxREFBcUQ7RUFDckQseUNBQXlDO0VBQ3pDLDRCQUE0QjtFQUM1QixxQkFBcUI7RUFDckIscUJBQXFCO0VBQ3JCLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxxREFBcUQ7RUFDckQseUNBQXlDO0VBQ3pDLDRCQUE0QjtFQUM1QixxQkFBcUI7RUFDckIscUJBQXFCO0VBQ3JCLGtCQUFrQjtBQUNwQjs7QUFFQTs7RUFFRSxxQkFBcUI7RUFDckIsVUFBVTtBQUNaOztBQUVBO0VBQ0UscUJBQXFCO0VBQ3JCLGdCQUFnQjtFQUNoQixVQUFVO0FBQ1o7O0FBRUE7O0VBRUUscUJBQXFCO0VBQ3JCLGdCQUFnQjtFQUNoQixVQUFVO0FBQ1o7O0FBRUE7RUFDRSxxQkFBcUI7RUFDckIsVUFBVTtBQUNaOztBQUVBO0VBQ0Usd0JBQXdCO0VBQ3hCLDZCQUE2QjtFQUM3Qix1QkFBdUI7QUFDekI7O0FBRUE7RUFDRSxjQUFjO0VBQ2Qsc0JBQXNCO0VBQ3RCLFdBQVc7RUFDWCxZQUFZO0VBQ1osZ0JBQWdCO0VBQ2hCLFVBQVU7RUFDVixrQkFBa0I7RUFDbEIsVUFBVTtBQUNaOztBQUVBO0VBQ0UsK0NBQStDO0VBQy9DLDJCQUEyQjtFQUMzQiw0QkFBNEI7RUFDNUIsa0JBQWtCO0VBQ2xCLFlBQVk7RUFDWixZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsV0FBVztFQUNYLGNBQWM7QUFDaEI7O0FBRUE7O0VBRUUsY0FBYztBQUNoQjs7QUFFQTs7RUFFRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSxZQUFZO0VBQ1osY0FBYztFQUNkLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLFdBQVc7RUFDWCxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLFdBQVc7QUFDYjs7QUE1SkE7RUFDRTtJQUNFLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsVUFBVTtFQUNaO0VBQ0E7SUFDRSxlQUFlO0VBQ2pCO0VBSUE7SUFDRSxXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLFVBQVU7RUFDWjtFQUNBO0lBQ0UsZUFBZTtFQUNqQjtFQUlBO0lBQ0UsV0FBVztJQUNYLGdCQUFnQjtJQUNoQixVQUFVO0VBQ1o7RUFDQTtJQUNFLGVBQWU7RUFDakI7QUFyQkYiLCJmaWxlIjoic3R5bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWJ1dHRvbiB7XG4gIGZvbnQtc2l6ZTogMC45cmVtO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtbWVzc2FnZSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBwYWRkaW5nOiAxZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1tZXNzYWdlLmN0Y3QtZXJyb3Ige1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgNjUsIDU0LCAwLjAyKTtcbiAgYm9yZGVyLWNvbG9yOiAjZmY0MTM2O1xuICBjb2xvcjogI2NmMGIwMDtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LW1lc3NhZ2UuY3RjdC1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg0NiwgMjA0LCA2NCwgMC4wMik7XG4gIGJvcmRlci1jb2xvcjogIzJlY2M0MDtcbiAgY29sb3I6ICMxYjc5MjY7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1mb3JtLWZpZWxkIHtcbiAgbWFyZ2luOiAwIDAgMXJlbTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1oYWxmIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDIlO1xuICAgIHdpZHRoOiA0OCU7XG4gIH1cbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWhhbGY6bGFzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC10aGlyZCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyJTtcbiAgICB3aWR0aDogMzIlO1xuICB9XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC10aGlyZDpsYXN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWZvdXJ0aCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyJTtcbiAgICB3aWR0aDogMjQlO1xuICB9XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1mb3VydGg6bGFzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RleHQnXTpyZXF1aXJlZDp2YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J2VtYWlsJ106cmVxdWlyZWQ6dmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdwYXNzd29yZCddOnJlcXVpcmVkOnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGVsJ106cmVxdWlyZWQ6dmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdudW1iZXInXTpyZXF1aXJlZDp2YWxpZCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltYWdlcy9jaGVja19jaXJjbGUuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IDE4cHg7XG4gIGJvcmRlci1jb2xvcjogIzJlY2M0MDtcbiAgcGFkZGluZy1sZWZ0OiAzMnB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGV4dCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RleHQnXS5jdGN0LWludmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdlbWFpbCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J2VtYWlsJ10uY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ncGFzc3dvcmQnXTpyZXF1aXJlZC5jdGN0LWludmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdwYXNzd29yZCddLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RlbCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RlbCddLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J251bWJlciddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J251bWJlciddLmN0Y3QtaW52YWxpZCB7XG4gIGJhY2tncm91bmQ6ICNmZmYgdXJsKFwiLi4vaW1hZ2VzL2Vycm9yLnN2Z1wiKSBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA2NSwgNTQsIDAuMDIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXNpemU6IDI0cHg7XG4gIGJvcmRlci1jb2xvcjogI2ZmNDEzNjtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZmllbGQtZXJyb3Ige1xuICBmb250LXNpemU6IDAuODVyZW07XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0LmN0Y3QtaW52YWxpZCB7XG4gIGJhY2tncm91bmQ6ICNmZmYgdXJsKFwiLi4vaW1hZ2VzL2Vycm9yLnN2Z1wiKSBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA2NSwgNTQsIDAuMDIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXNpemU6IDI0cHg7XG4gIGJvcmRlci1jb2xvcjogI2ZmNDEzNjtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXQuY3RjdC1sYWJlbC1sZWZ0LFxuLmN0Y3QtZm9ybS13cmFwcGVyIHRleHRhcmVhLmN0Y3QtbGFiZWwtbGVmdCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDc1JTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIHNwYW4uY3RjdC1sYWJlbC1sZWZ0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6IDUlO1xuICB3aWR0aDogMjAlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXQuY3RjdC1sYWJlbC1yaWdodCxcbi5jdGN0LWZvcm0td3JhcHBlciB0ZXh0YXJlYS5jdGN0LWxhYmVsLXJpZ2h0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6IDUlO1xuICB3aWR0aDogNzUlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLXJpZ2h0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjAlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLWhpZGRlbiB7XG4gIGxlZnQ6IC05OTk5cHggIWltcG9ydGFudDtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHRvcDogLTk5OTlweCAhaW1wb3J0YW50O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3RfdXNhZ2Uge1xuICBib3JkZXI6IDAgbm9uZTtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogLTFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLm5vLXJlY2FwdGNoYSAuY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWFnZXMvb3ZhbC5taW4uc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiB3YWl0O1xuICBvcGFjaXR5OiAwLjM7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuaGFzLXJlY2FwdGNoYSAuY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybTo6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC10b3AgbGFiZWwsXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC1ib3R0b20gbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZvcm0gLmN0Y3QtbGFiZWwtbGVmdCBsYWJlbCxcbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1mb3JtIC5jdGN0LWxhYmVsLXJpZ2h0IGxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSBhYmJyIHtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogI2ZmNDEzNjtcbiAgZm9udC1zaXplOiAwLjlyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1pbnB1dC1jb250YWluZXIgbGFiZWwge1xuICBjb2xvcjogI2FhYTtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1lcnJvciB7XG4gIGNvbG9yOiAjZmY0MTM2O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3Qtc3VibWl0IHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uY3RjdC10d2VudHlmb3VydGVlbiAuY3RjdC1mb3JtLWZpZWxkIGlucHV0IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4iXX0= */ diff --git a/assets/css/style.min.css b/assets/css/style.min.css index 5c2fe75f..2081b516 100644 --- a/assets/css/style.min.css +++ b/assets/css/style.min.css @@ -1,2 +1,2 @@ -.ctct-form-wrapper .ctct-button{font-size:.9rem}.ctct-form-wrapper .ctct-message{border:1px solid;padding:1em}.ctct-form-wrapper .ctct-message.ctct-error{background-color:rgba(255,65,54,.02);border-color:#ff4136;color:#cf0b00}.ctct-form-wrapper .ctct-message.ctct-success{background-color:rgba(46,204,64,.02);border-color:#2ecc40;color:#1b7926}.ctct-form-wrapper .ctct-form-field{margin:0 0 1rem}.ctct-form-wrapper .ctct-field-inline{display:inline-block}.ctct-form-wrapper input[type=email]:required:valid,.ctct-form-wrapper input[type=number]:required:valid,.ctct-form-wrapper input[type=password]:required:valid,.ctct-form-wrapper input[type=tel]:required:valid,.ctct-form-wrapper input[type=text]:required:valid{background-image:url(../images/check_circle.svg);background-position:8px 50%;background-repeat:no-repeat;background-size:18px;border-color:#2ecc40;padding-left:32px}.ctct-form-wrapper input[type=email].ctct-invalid,.ctct-form-wrapper input[type=email]:required.ctct-invalid,.ctct-form-wrapper input[type=number].ctct-invalid,.ctct-form-wrapper input[type=number]:required.ctct-invalid,.ctct-form-wrapper input[type=password].ctct-invalid,.ctct-form-wrapper input[type=password]:required.ctct-invalid,.ctct-form-wrapper input[type=tel].ctct-invalid,.ctct-form-wrapper input[type=tel]:required.ctct-invalid,.ctct-form-wrapper input[type=text].ctct-invalid,.ctct-form-wrapper input[type=text]:required.ctct-invalid{background:#fff url(../images/error.svg) no-repeat;background-color:rgba(255,65,54,.02);background-position:8px 50%;background-size:24px;border-color:#ff4136;padding-left:40px}.ctct-form-wrapper .ctct-field-error{font-size:.85rem;font-style:italic}.ctct-form-wrapper input.ctct-invalid{background:#fff url(../images/error.svg) no-repeat;background-color:rgba(255,65,54,.02);background-position:8px 50%;background-size:24px;border-color:#ff4136;padding-left:40px}.ctct-form-wrapper input.ctct-label-left,.ctct-form-wrapper textarea.ctct-label-left{display:inline-block;width:75%}.ctct-form-wrapper span.ctct-label-left{display:inline-block;margin-right:5%;width:20%}.ctct-form-wrapper input.ctct-label-right,.ctct-form-wrapper textarea.ctct-label-right{display:inline-block;margin-right:5%;width:75%}.ctct-form-wrapper span.ctct-label-right{display:inline-block;width:20%}.ctct-form-wrapper span.ctct-label-hidden{left:-9999px!important;position:absolute!important;top:-9999px!important}.ctct-form-wrapper #ctct_usage{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ctct-form-wrapper .no-recaptcha #ctct-submitted:disabled{background-image:url(../images/oval.min.svg);background-position:50%;background-repeat:no-repeat;color:transparent;cursor:wait;opacity:.3}.ctct-form-wrapper .has-recaptcha #ctct-submitted:disabled{cursor:not-allowed}.ctct-form-wrapper .ctct-form:after{clear:both;content:"";display:table}.ctct-form-wrapper .ctct-form .ctct-label-bottom label,.ctct-form-wrapper .ctct-form .ctct-label-top label{display:block}.ctct-form-wrapper .ctct-form .ctct-label-left label,.ctct-form-wrapper .ctct-form .ctct-label-right label{display:inline-block}.ctct-form-wrapper .ctct-form abbr{border:none;color:#ff4136;font-size:.9rem}.ctct-form-wrapper .ctct-input-container label{color:#aaa;font-size:.8rem}.ctct-form-wrapper .ctct-field-error{color:#ff4136}.ctct-form-wrapper .ctct-submit{cursor:pointer}.ctct-twentyfourteen .ctct-form-field input{width:100%}@media (min-width:992px){.ctct-form-wrapper .ctct-field-half{float:left;margin-right:2%;width:48%}.ctct-form-wrapper .ctct-field-half:last-of-type{margin-right:0}.ctct-form-wrapper .ctct-field-third{float:left;margin-right:2%;width:32%}.ctct-form-wrapper .ctct-field-third:last-of-type{margin-right:0}.ctct-form-wrapper .ctct-field-fourth{float:left;margin-right:2%;width:24%}.ctct-form-wrapper .ctct-field-fourth:last-of-type{margin-right:0}} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FDRSxlQUNGLENBRUEsaUNBQ0UsZ0JBQWlCLENBQ2pCLFdBQ0YsQ0FFQSw0Q0FDRSxvQ0FBeUMsQ0FDekMsb0JBQXFCLENBQ3JCLGFBQ0YsQ0FFQSw4Q0FDRSxvQ0FBeUMsQ0FDekMsb0JBQXFCLENBQ3JCLGFBQ0YsQ0FFQSxvQ0FDRSxlQUNGLENBRUEsc0NBQ0Usb0JBQ0YsQ0FtQ0EscVFBQ0UsZ0RBQW1ELENBQ25ELDJCQUE0QixDQUM1QiwyQkFBNEIsQ0FDNUIsb0JBQXFCLENBQ3JCLG9CQUFxQixDQUNyQixpQkFDRixDQUVBLG1pQkFDRSxrREFBcUQsQ0FDckQsb0NBQXlDLENBQ3pDLDJCQUE0QixDQUM1QixvQkFBcUIsQ0FDckIsb0JBQXFCLENBQ3JCLGlCQUNGLENBRUEscUNBQ0UsZ0JBQWtCLENBQ2xCLGlCQUNGLENBRUEsc0NBQ0Usa0RBQXFELENBQ3JELG9DQUF5QyxDQUN6QywyQkFBNEIsQ0FDNUIsb0JBQXFCLENBQ3JCLG9CQUFxQixDQUNyQixpQkFDRixDQUVBLHFGQUVFLG9CQUFxQixDQUNyQixTQUNGLENBRUEsd0NBQ0Usb0JBQXFCLENBQ3JCLGVBQWdCLENBQ2hCLFNBQ0YsQ0FFQSx1RkFFRSxvQkFBcUIsQ0FDckIsZUFBZ0IsQ0FDaEIsU0FDRixDQUVBLHlDQUNFLG9CQUFxQixDQUNyQixTQUNGLENBRUEsMENBQ0Usc0JBQXdCLENBQ3hCLDJCQUE2QixDQUM3QixxQkFDRixDQUVBLCtCQUNFLFFBQWMsQ0FDZCxrQkFBc0IsQ0FDdEIsVUFBVyxDQUNYLFdBQVksQ0FDWixlQUFnQixDQUNoQixTQUFVLENBQ1YsaUJBQWtCLENBQ2xCLFNBQ0YsQ0FFQSwwREFDRSw0Q0FBK0MsQ0FDL0MsdUJBQTJCLENBQzNCLDJCQUE0QixDQUM1QixpQkFBa0IsQ0FDbEIsV0FBWSxDQUNaLFVBQ0YsQ0FFQSwyREFDRSxrQkFDRixDQUVBLG9DQUNFLFVBQVcsQ0FDWCxVQUFXLENBQ1gsYUFDRixDQUVBLDJHQUVFLGFBQ0YsQ0FFQSwyR0FFRSxvQkFDRixDQUVBLG1DQUNFLFdBQVksQ0FDWixhQUFjLENBQ2QsZUFDRixDQUVBLCtDQUNFLFVBQVcsQ0FDWCxlQUNGLENBRUEscUNBQ0UsYUFDRixDQUVBLGdDQUNFLGNBQ0YsQ0FFQSw0Q0FDRSxVQUNGLENBNUpBLHlCQUNFLG9DQUNFLFVBQVcsQ0FDWCxlQUFnQixDQUNoQixTQUNGLENBQ0EsaURBQ0UsY0FDRixDQUlBLHFDQUNFLFVBQVcsQ0FDWCxlQUFnQixDQUNoQixTQUNGLENBQ0Esa0RBQ0UsY0FDRixDQUlBLHNDQUNFLFVBQVcsQ0FDWCxlQUFnQixDQUNoQixTQUNGLENBQ0EsbURBQ0UsY0FDRixDQXJCRiIsImZpbGUiOiJzdHlsZS5taW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWJ1dHRvbiB7XG4gIGZvbnQtc2l6ZTogMC45cmVtO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtbWVzc2FnZSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBwYWRkaW5nOiAxZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1tZXNzYWdlLmN0Y3QtZXJyb3Ige1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgNjUsIDU0LCAwLjAyKTtcbiAgYm9yZGVyLWNvbG9yOiAjZmY0MTM2O1xuICBjb2xvcjogI2NmMGIwMDtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LW1lc3NhZ2UuY3RjdC1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg0NiwgMjA0LCA2NCwgMC4wMik7XG4gIGJvcmRlci1jb2xvcjogIzJlY2M0MDtcbiAgY29sb3I6ICMxYjc5MjY7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1mb3JtLWZpZWxkIHtcbiAgbWFyZ2luOiAwIDAgMXJlbTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1oYWxmIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDIlO1xuICAgIHdpZHRoOiA0OCU7XG4gIH1cbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWhhbGY6bGFzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC10aGlyZCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyJTtcbiAgICB3aWR0aDogMzIlO1xuICB9XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC10aGlyZDpsYXN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWZvdXJ0aCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyJTtcbiAgICB3aWR0aDogMjQlO1xuICB9XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1mb3VydGg6bGFzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RleHQnXTpyZXF1aXJlZDp2YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J2VtYWlsJ106cmVxdWlyZWQ6dmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdwYXNzd29yZCddOnJlcXVpcmVkOnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGVsJ106cmVxdWlyZWQ6dmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdudW1iZXInXTpyZXF1aXJlZDp2YWxpZCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltYWdlcy9jaGVja19jaXJjbGUuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IDE4cHg7XG4gIGJvcmRlci1jb2xvcjogIzJlY2M0MDtcbiAgcGFkZGluZy1sZWZ0OiAzMnB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGV4dCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RleHQnXS5jdGN0LWludmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdlbWFpbCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J2VtYWlsJ10uY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ncGFzc3dvcmQnXTpyZXF1aXJlZC5jdGN0LWludmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdwYXNzd29yZCddLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RlbCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RlbCddLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J251bWJlciddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J251bWJlciddLmN0Y3QtaW52YWxpZCB7XG4gIGJhY2tncm91bmQ6ICNmZmYgdXJsKFwiLi4vaW1hZ2VzL2Vycm9yLnN2Z1wiKSBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA2NSwgNTQsIDAuMDIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXNpemU6IDI0cHg7XG4gIGJvcmRlci1jb2xvcjogI2ZmNDEzNjtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZmllbGQtZXJyb3Ige1xuICBmb250LXNpemU6IDAuODVyZW07XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0LmN0Y3QtaW52YWxpZCB7XG4gIGJhY2tncm91bmQ6ICNmZmYgdXJsKFwiLi4vaW1hZ2VzL2Vycm9yLnN2Z1wiKSBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA2NSwgNTQsIDAuMDIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXNpemU6IDI0cHg7XG4gIGJvcmRlci1jb2xvcjogI2ZmNDEzNjtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXQuY3RjdC1sYWJlbC1sZWZ0LFxuLmN0Y3QtZm9ybS13cmFwcGVyIHRleHRhcmVhLmN0Y3QtbGFiZWwtbGVmdCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDc1JTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIHNwYW4uY3RjdC1sYWJlbC1sZWZ0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6IDUlO1xuICB3aWR0aDogMjAlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXQuY3RjdC1sYWJlbC1yaWdodCxcbi5jdGN0LWZvcm0td3JhcHBlciB0ZXh0YXJlYS5jdGN0LWxhYmVsLXJpZ2h0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6IDUlO1xuICB3aWR0aDogNzUlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLXJpZ2h0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjAlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLWhpZGRlbiB7XG4gIGxlZnQ6IC05OTk5cHggIWltcG9ydGFudDtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHRvcDogLTk5OTlweCAhaW1wb3J0YW50O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgI2N0Y3RfdXNhZ2Uge1xuICBib3JkZXI6IDAgbm9uZTtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogLTFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLm5vLXJlY2FwdGNoYSAjY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWFnZXMvb3ZhbC5taW4uc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiB3YWl0O1xuICBvcGFjaXR5OiAwLjM7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuaGFzLXJlY2FwdGNoYSAjY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybTo6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC10b3AgbGFiZWwsXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC1ib3R0b20gbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZvcm0gLmN0Y3QtbGFiZWwtbGVmdCBsYWJlbCxcbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1mb3JtIC5jdGN0LWxhYmVsLXJpZ2h0IGxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSBhYmJyIHtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogI2ZmNDEzNjtcbiAgZm9udC1zaXplOiAwLjlyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1pbnB1dC1jb250YWluZXIgbGFiZWwge1xuICBjb2xvcjogI2FhYTtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1lcnJvciB7XG4gIGNvbG9yOiAjZmY0MTM2O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3Qtc3VibWl0IHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uY3RjdC10d2VudHlmb3VydGVlbiAuY3RjdC1mb3JtLWZpZWxkIGlucHV0IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4iXX0= */ +.ctct-form-wrapper .ctct-button{font-size:.9rem}.ctct-form-wrapper .ctct-message{border:1px solid;padding:1em}.ctct-form-wrapper .ctct-message.ctct-error{background-color:rgba(255,65,54,.02);border-color:#ff4136;color:#cf0b00}.ctct-form-wrapper .ctct-message.ctct-success{background-color:rgba(46,204,64,.02);border-color:#2ecc40;color:#1b7926}.ctct-form-wrapper .ctct-form-field{margin:0 0 1rem}.ctct-form-wrapper .ctct-field-inline{display:inline-block}.ctct-form-wrapper input[type=email]:required:valid,.ctct-form-wrapper input[type=number]:required:valid,.ctct-form-wrapper input[type=password]:required:valid,.ctct-form-wrapper input[type=tel]:required:valid,.ctct-form-wrapper input[type=text]:required:valid{background-image:url(../images/check_circle.svg);background-position:8px 50%;background-repeat:no-repeat;background-size:18px;border-color:#2ecc40;padding-left:32px}.ctct-form-wrapper input[type=email].ctct-invalid,.ctct-form-wrapper input[type=email]:required.ctct-invalid,.ctct-form-wrapper input[type=number].ctct-invalid,.ctct-form-wrapper input[type=number]:required.ctct-invalid,.ctct-form-wrapper input[type=password].ctct-invalid,.ctct-form-wrapper input[type=password]:required.ctct-invalid,.ctct-form-wrapper input[type=tel].ctct-invalid,.ctct-form-wrapper input[type=tel]:required.ctct-invalid,.ctct-form-wrapper input[type=text].ctct-invalid,.ctct-form-wrapper input[type=text]:required.ctct-invalid{background:#fff url(../images/error.svg) no-repeat;background-color:rgba(255,65,54,.02);background-position:8px 50%;background-size:24px;border-color:#ff4136;padding-left:40px}.ctct-form-wrapper .ctct-field-error{font-size:.85rem;font-style:italic}.ctct-form-wrapper input.ctct-invalid{background:#fff url(../images/error.svg) no-repeat;background-color:rgba(255,65,54,.02);background-position:8px 50%;background-size:24px;border-color:#ff4136;padding-left:40px}.ctct-form-wrapper input.ctct-label-left,.ctct-form-wrapper textarea.ctct-label-left{display:inline-block;width:75%}.ctct-form-wrapper span.ctct-label-left{display:inline-block;margin-right:5%;width:20%}.ctct-form-wrapper input.ctct-label-right,.ctct-form-wrapper textarea.ctct-label-right{display:inline-block;margin-right:5%;width:75%}.ctct-form-wrapper span.ctct-label-right{display:inline-block;width:20%}.ctct-form-wrapper span.ctct-label-hidden{left:-9999px!important;position:absolute!important;top:-9999px!important}.ctct-form-wrapper .ctct_usage{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ctct-form-wrapper .no-recaptcha .ctct-submitted:disabled{background-image:url(../images/oval.min.svg);background-position:50%;background-repeat:no-repeat;color:transparent;cursor:wait;opacity:.3}.ctct-form-wrapper .has-recaptcha .ctct-submitted:disabled{cursor:not-allowed}.ctct-form-wrapper .ctct-form:after{clear:both;content:"";display:table}.ctct-form-wrapper .ctct-form .ctct-label-bottom label,.ctct-form-wrapper .ctct-form .ctct-label-top label{display:block}.ctct-form-wrapper .ctct-form .ctct-label-left label,.ctct-form-wrapper .ctct-form .ctct-label-right label{display:inline-block}.ctct-form-wrapper .ctct-form abbr{border:none;color:#ff4136;font-size:.9rem}.ctct-form-wrapper .ctct-input-container label{color:#aaa;font-size:.8rem}.ctct-form-wrapper .ctct-field-error{color:#ff4136}.ctct-form-wrapper .ctct-submit{cursor:pointer}.ctct-twentyfourteen .ctct-form-field input{width:100%}@media (min-width:992px){.ctct-form-wrapper .ctct-field-half{float:left;margin-right:2%;width:48%}.ctct-form-wrapper .ctct-field-half:last-of-type{margin-right:0}.ctct-form-wrapper .ctct-field-third{float:left;margin-right:2%;width:32%}.ctct-form-wrapper .ctct-field-third:last-of-type{margin-right:0}.ctct-form-wrapper .ctct-field-fourth{float:left;margin-right:2%;width:24%}.ctct-form-wrapper .ctct-field-fourth:last-of-type{margin-right:0}} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FDRSxlQUNGLENBRUEsaUNBQ0UsZ0JBQWlCLENBQ2pCLFdBQ0YsQ0FFQSw0Q0FDRSxvQ0FBeUMsQ0FDekMsb0JBQXFCLENBQ3JCLGFBQ0YsQ0FFQSw4Q0FDRSxvQ0FBeUMsQ0FDekMsb0JBQXFCLENBQ3JCLGFBQ0YsQ0FFQSxvQ0FDRSxlQUNGLENBRUEsc0NBQ0Usb0JBQ0YsQ0FtQ0EscVFBQ0UsZ0RBQW1ELENBQ25ELDJCQUE0QixDQUM1QiwyQkFBNEIsQ0FDNUIsb0JBQXFCLENBQ3JCLG9CQUFxQixDQUNyQixpQkFDRixDQUVBLG1pQkFDRSxrREFBcUQsQ0FDckQsb0NBQXlDLENBQ3pDLDJCQUE0QixDQUM1QixvQkFBcUIsQ0FDckIsb0JBQXFCLENBQ3JCLGlCQUNGLENBRUEscUNBQ0UsZ0JBQWtCLENBQ2xCLGlCQUNGLENBRUEsc0NBQ0Usa0RBQXFELENBQ3JELG9DQUF5QyxDQUN6QywyQkFBNEIsQ0FDNUIsb0JBQXFCLENBQ3JCLG9CQUFxQixDQUNyQixpQkFDRixDQUVBLHFGQUVFLG9CQUFxQixDQUNyQixTQUNGLENBRUEsd0NBQ0Usb0JBQXFCLENBQ3JCLGVBQWdCLENBQ2hCLFNBQ0YsQ0FFQSx1RkFFRSxvQkFBcUIsQ0FDckIsZUFBZ0IsQ0FDaEIsU0FDRixDQUVBLHlDQUNFLG9CQUFxQixDQUNyQixTQUNGLENBRUEsMENBQ0Usc0JBQXdCLENBQ3hCLDJCQUE2QixDQUM3QixxQkFDRixDQUVBLCtCQUNFLFFBQWMsQ0FDZCxrQkFBc0IsQ0FDdEIsVUFBVyxDQUNYLFdBQVksQ0FDWixlQUFnQixDQUNoQixTQUFVLENBQ1YsaUJBQWtCLENBQ2xCLFNBQ0YsQ0FFQSwwREFDRSw0Q0FBK0MsQ0FDL0MsdUJBQTJCLENBQzNCLDJCQUE0QixDQUM1QixpQkFBa0IsQ0FDbEIsV0FBWSxDQUNaLFVBQ0YsQ0FFQSwyREFDRSxrQkFDRixDQUVBLG9DQUNFLFVBQVcsQ0FDWCxVQUFXLENBQ1gsYUFDRixDQUVBLDJHQUVFLGFBQ0YsQ0FFQSwyR0FFRSxvQkFDRixDQUVBLG1DQUNFLFdBQVksQ0FDWixhQUFjLENBQ2QsZUFDRixDQUVBLCtDQUNFLFVBQVcsQ0FDWCxlQUNGLENBRUEscUNBQ0UsYUFDRixDQUVBLGdDQUNFLGNBQ0YsQ0FFQSw0Q0FDRSxVQUNGLENBNUpBLHlCQUNFLG9DQUNFLFVBQVcsQ0FDWCxlQUFnQixDQUNoQixTQUNGLENBQ0EsaURBQ0UsY0FDRixDQUlBLHFDQUNFLFVBQVcsQ0FDWCxlQUFnQixDQUNoQixTQUNGLENBQ0Esa0RBQ0UsY0FDRixDQUlBLHNDQUNFLFVBQVcsQ0FDWCxlQUFnQixDQUNoQixTQUNGLENBQ0EsbURBQ0UsY0FDRixDQXJCRiIsImZpbGUiOiJzdHlsZS5taW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWJ1dHRvbiB7XG4gIGZvbnQtc2l6ZTogMC45cmVtO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtbWVzc2FnZSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBwYWRkaW5nOiAxZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1tZXNzYWdlLmN0Y3QtZXJyb3Ige1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgNjUsIDU0LCAwLjAyKTtcbiAgYm9yZGVyLWNvbG9yOiAjZmY0MTM2O1xuICBjb2xvcjogI2NmMGIwMDtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LW1lc3NhZ2UuY3RjdC1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg0NiwgMjA0LCA2NCwgMC4wMik7XG4gIGJvcmRlci1jb2xvcjogIzJlY2M0MDtcbiAgY29sb3I6ICMxYjc5MjY7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1mb3JtLWZpZWxkIHtcbiAgbWFyZ2luOiAwIDAgMXJlbTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1oYWxmIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDIlO1xuICAgIHdpZHRoOiA0OCU7XG4gIH1cbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWhhbGY6bGFzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC10aGlyZCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyJTtcbiAgICB3aWR0aDogMzIlO1xuICB9XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC10aGlyZDpsYXN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWZvdXJ0aCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyJTtcbiAgICB3aWR0aDogMjQlO1xuICB9XG4gIC5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1mb3VydGg6bGFzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RleHQnXTpyZXF1aXJlZDp2YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J2VtYWlsJ106cmVxdWlyZWQ6dmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdwYXNzd29yZCddOnJlcXVpcmVkOnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGVsJ106cmVxdWlyZWQ6dmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdudW1iZXInXTpyZXF1aXJlZDp2YWxpZCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltYWdlcy9jaGVja19jaXJjbGUuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IDE4cHg7XG4gIGJvcmRlci1jb2xvcjogIzJlY2M0MDtcbiAgcGFkZGluZy1sZWZ0OiAzMnB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGV4dCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RleHQnXS5jdGN0LWludmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdlbWFpbCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J2VtYWlsJ10uY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ncGFzc3dvcmQnXTpyZXF1aXJlZC5jdGN0LWludmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdwYXNzd29yZCddLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RlbCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3RlbCddLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J251bWJlciddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J251bWJlciddLmN0Y3QtaW52YWxpZCB7XG4gIGJhY2tncm91bmQ6ICNmZmYgdXJsKFwiLi4vaW1hZ2VzL2Vycm9yLnN2Z1wiKSBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA2NSwgNTQsIDAuMDIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXNpemU6IDI0cHg7XG4gIGJvcmRlci1jb2xvcjogI2ZmNDEzNjtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZmllbGQtZXJyb3Ige1xuICBmb250LXNpemU6IDAuODVyZW07XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0LmN0Y3QtaW52YWxpZCB7XG4gIGJhY2tncm91bmQ6ICNmZmYgdXJsKFwiLi4vaW1hZ2VzL2Vycm9yLnN2Z1wiKSBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA2NSwgNTQsIDAuMDIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA4cHggNTAlO1xuICBiYWNrZ3JvdW5kLXNpemU6IDI0cHg7XG4gIGJvcmRlci1jb2xvcjogI2ZmNDEzNjtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXQuY3RjdC1sYWJlbC1sZWZ0LFxuLmN0Y3QtZm9ybS13cmFwcGVyIHRleHRhcmVhLmN0Y3QtbGFiZWwtbGVmdCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDc1JTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIHNwYW4uY3RjdC1sYWJlbC1sZWZ0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6IDUlO1xuICB3aWR0aDogMjAlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXQuY3RjdC1sYWJlbC1yaWdodCxcbi5jdGN0LWZvcm0td3JhcHBlciB0ZXh0YXJlYS5jdGN0LWxhYmVsLXJpZ2h0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6IDUlO1xuICB3aWR0aDogNzUlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLXJpZ2h0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjAlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLWhpZGRlbiB7XG4gIGxlZnQ6IC05OTk5cHggIWltcG9ydGFudDtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHRvcDogLTk5OTlweCAhaW1wb3J0YW50O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3RfdXNhZ2Uge1xuICBib3JkZXI6IDAgbm9uZTtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogLTFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLm5vLXJlY2FwdGNoYSAuY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWFnZXMvb3ZhbC5taW4uc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiB3YWl0O1xuICBvcGFjaXR5OiAwLjM7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuaGFzLXJlY2FwdGNoYSAuY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybTo6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC10b3AgbGFiZWwsXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC1ib3R0b20gbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZvcm0gLmN0Y3QtbGFiZWwtbGVmdCBsYWJlbCxcbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1mb3JtIC5jdGN0LWxhYmVsLXJpZ2h0IGxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSBhYmJyIHtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogI2ZmNDEzNjtcbiAgZm9udC1zaXplOiAwLjlyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1pbnB1dC1jb250YWluZXIgbGFiZWwge1xuICBjb2xvcjogI2FhYTtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1lcnJvciB7XG4gIGNvbG9yOiAjZmY0MTM2O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3Qtc3VibWl0IHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uY3RjdC10d2VudHlmb3VydGVlbiAuY3RjdC1mb3JtLWZpZWxkIGlucHV0IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4iXX0= */ diff --git a/assets/sass/_inputs.scss b/assets/sass/_inputs.scss index 3d71a7f8..7dbe7cf0 100644 --- a/assets/sass/_inputs.scss +++ b/assets/sass/_inputs.scss @@ -77,7 +77,7 @@ top: -9999px !important; } - #ctct_usage { + .ctct_usage { border: 0 none; clip: rect( 0, 0, 0, 0 ); height: 1px; @@ -88,7 +88,7 @@ width: 1px; } - .no-recaptcha #ctct-submitted:disabled { + .no-recaptcha .ctct-submitted:disabled { background-image: url('../images/oval.min.svg'); background-position: center; background-repeat: no-repeat; @@ -97,7 +97,7 @@ opacity: 0.3; } - .has-recaptcha #ctct-submitted:disabled { + .has-recaptcha .ctct-submitted:disabled { cursor: not-allowed; } } From 24dc206710bf46a0ff7645c5c856e155a664113d Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Wed, 24 Jun 2020 11:13:56 -0600 Subject: [PATCH 03/29] Update js references CC-162 --- assets/js/ctct-plugin-frontend.js | 4 ++-- assets/js/ctct-plugin-frontend/util.js | 6 +++--- assets/js/ctct-plugin-frontend/validation.js | 6 +++--- assets/js/ctct-plugin-gutenberg.js | 2 +- assets/js/ctct-plugin-recaptcha-v2.js | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/assets/js/ctct-plugin-frontend.js b/assets/js/ctct-plugin-frontend.js index e64fdd97..ec23ef63 100644 --- a/assets/js/ctct-plugin-frontend.js +++ b/assets/js/ctct-plugin-frontend.js @@ -105,7 +105,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _uti /*! no static exports found */ /***/ (function(module, exports) { -eval("/**\n * General-purpose utility stuff for CC plugin.\n */\n(function (global, $) {\n /**\n * Temporarily prevent the submit button from being clicked.\n */\n $(document).ready(function () {\n $('#ctct-submitted').on('click', function () {\n setTimeout(function () {\n disableSendButton();\n setTimeout(enableSendButton, 3000);\n }, 100);\n });\n });\n /**\n * Disable form submit button.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @return {mixed} jQuery if attribute is set, undefined if not.\n */\n\n function disableSendButton() {\n return $('#ctct-submitted').attr('disabled', 'disabled');\n }\n /**\n * Re-enable form submit buttons.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @return {mixed} jQuery if attribute is set, undefined if not.\n */\n\n\n function enableSendButton() {\n return $('#ctct-submitted').attr('disabled', null);\n }\n})(window, jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tZnJvbnRlbmQvdXRpbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jdGN0LXBsdWdpbi1mcm9udGVuZC91dGlsLmpzPzQ1NWIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmFsLXB1cnBvc2UgdXRpbGl0eSBzdHVmZiBmb3IgQ0MgcGx1Z2luLlxuICovXG4oIGZ1bmN0aW9uKCBnbG9iYWwsICQgKSB7XG5cblx0LyoqXG5cdCAqIFRlbXBvcmFyaWx5IHByZXZlbnQgdGhlIHN1Ym1pdCBidXR0b24gZnJvbSBiZWluZyBjbGlja2VkLlxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5yZWFkeSggKCkgPT4ge1xuXG5cdFx0JCggJyNjdGN0LXN1Ym1pdHRlZCcgKS5vbiggJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0c2V0VGltZW91dCggKCkgPT4ge1xuXHRcdFx0XHRkaXNhYmxlU2VuZEJ1dHRvbigpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCBlbmFibGVTZW5kQnV0dG9uLCAzMDAwICk7XG5cdFx0XHR9LCAxMDAgKTtcblx0XHR9ICk7XG5cdH0gKTtcblxuXHQvKipcblx0ICogRGlzYWJsZSBmb3JtIHN1Ym1pdCBidXR0b24uXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICpcblx0ICogQHJldHVybiB7bWl4ZWR9IGpRdWVyeSBpZiBhdHRyaWJ1dGUgaXMgc2V0LCB1bmRlZmluZWQgaWYgbm90LlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlzYWJsZVNlbmRCdXR0b24oKSB7XG5cdFx0cmV0dXJuICQoICcjY3RjdC1zdWJtaXR0ZWQnICkuYXR0ciggJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlLWVuYWJsZSBmb3JtIHN1Ym1pdCBidXR0b25zLlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEByZXR1cm4ge21peGVkfSBqUXVlcnkgaWYgYXR0cmlidXRlIGlzIHNldCwgdW5kZWZpbmVkIGlmIG5vdC5cblx0ICovXG5cdGZ1bmN0aW9uIGVuYWJsZVNlbmRCdXR0b24oKSB7XG5cdFx0cmV0dXJuICQoICcjY3RjdC1zdWJtaXR0ZWQnICkuYXR0ciggJ2Rpc2FibGVkJywgbnVsbCApO1xuXHR9XG5cbn0gKCB3aW5kb3csIGpRdWVyeSApICk7XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7QUFHQTtBQUVBOzs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-frontend/util.js\n"); +eval("/**\n * General-purpose utility stuff for CC plugin.\n */\n(function (global, $) {\n /**\n * Temporarily prevent the submit button from being clicked.\n */\n $(document).ready(function () {\n $('.ctct-submitted').on('click', function () {\n setTimeout(function () {\n disableSendButton();\n setTimeout(enableSendButton, 3000);\n }, 100);\n });\n });\n /**\n * Disable form submit button.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @return {mixed} jQuery if attribute is set, undefined if not.\n */\n\n function disableSendButton() {\n return $('.ctct-submitted').attr('disabled', 'disabled');\n }\n /**\n * Re-enable form submit buttons.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @return {mixed} jQuery if attribute is set, undefined if not.\n */\n\n\n function enableSendButton() {\n return $('.ctct-submitted').attr('disabled', null);\n }\n})(window, jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tZnJvbnRlbmQvdXRpbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jdGN0LXBsdWdpbi1mcm9udGVuZC91dGlsLmpzPzQ1NWIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmFsLXB1cnBvc2UgdXRpbGl0eSBzdHVmZiBmb3IgQ0MgcGx1Z2luLlxuICovXG4oIGZ1bmN0aW9uKCBnbG9iYWwsICQgKSB7XG5cblx0LyoqXG5cdCAqIFRlbXBvcmFyaWx5IHByZXZlbnQgdGhlIHN1Ym1pdCBidXR0b24gZnJvbSBiZWluZyBjbGlja2VkLlxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5yZWFkeSggKCkgPT4ge1xuXG5cdFx0JCggJy5jdGN0LXN1Ym1pdHRlZCcgKS5vbiggJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0c2V0VGltZW91dCggKCkgPT4ge1xuXHRcdFx0XHRkaXNhYmxlU2VuZEJ1dHRvbigpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCBlbmFibGVTZW5kQnV0dG9uLCAzMDAwICk7XG5cdFx0XHR9LCAxMDAgKTtcblx0XHR9ICk7XG5cdH0gKTtcblxuXHQvKipcblx0ICogRGlzYWJsZSBmb3JtIHN1Ym1pdCBidXR0b24uXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICpcblx0ICogQHJldHVybiB7bWl4ZWR9IGpRdWVyeSBpZiBhdHRyaWJ1dGUgaXMgc2V0LCB1bmRlZmluZWQgaWYgbm90LlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlzYWJsZVNlbmRCdXR0b24oKSB7XG5cdFx0cmV0dXJuICQoICcuY3RjdC1zdWJtaXR0ZWQnICkuYXR0ciggJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlLWVuYWJsZSBmb3JtIHN1Ym1pdCBidXR0b25zLlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEByZXR1cm4ge21peGVkfSBqUXVlcnkgaWYgYXR0cmlidXRlIGlzIHNldCwgdW5kZWZpbmVkIGlmIG5vdC5cblx0ICovXG5cdGZ1bmN0aW9uIGVuYWJsZVNlbmRCdXR0b24oKSB7XG5cdFx0cmV0dXJuICQoICcuY3RjdC1zdWJtaXR0ZWQnICkuYXR0ciggJ2Rpc2FibGVkJywgbnVsbCApO1xuXHR9XG5cbn0gKCB3aW5kb3csIGpRdWVyeSApICk7XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7QUFHQTtBQUVBOzs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-frontend/util.js\n"); /***/ }), @@ -116,7 +116,7 @@ eval("/**\n * General-purpose utility stuff for CC plugin.\n */\n(function (glob /*! no static exports found */ /***/ (function(module, exports) { -eval("/**\n * Front-end form validation.\n *\n * @since 1.0.0\n */\nwindow.CTCTSupport = {};\n\n(function (window, $, app) {\n var _this = this;\n\n /**\n * @constructor\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n app.init = function () {\n app.cache();\n app.bindEvents();\n app.removePlaceholder();\n };\n /**\n * Remove placeholder text values.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.removePlaceholder = function () {\n $('.ctct-form-field input, textarea').focus(function () {\n $(_this).data('placeholder', $(_this).attr('placeholder')).attr('placeholder', '');\n }).blur(function () {\n $(_this).attr('placeholder', $(_this).data('placeholder'));\n });\n };\n /**\n * Cache DOM elements.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.cache = function () {\n app.$c = {\n $forms: []\n }; // Cache each form on the page.\n\n $('.ctct-form-wrapper').each(function (i, formWrapper) {\n app.$c.$forms.push($(formWrapper).find('form'));\n }); // For each form, cache its common elements.\n\n $.each(app.$c.$forms, function (i, form) {\n var $form = $(form);\n app.$c.$forms[i].$honeypot = $form.find('#ctct_usage_field');\n app.$c.$forms[i].$submitButton = $form.find('input[type=submit]');\n app.$c.$forms[i].$recaptcha = $form.find('.g-recaptcha');\n });\n app.timeout = null;\n };\n /**\n * Remove the ctct-invalid class from elements that have it.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.setAllInputsValid = function () {\n $(app.$c.$form + ' .ctct-invalid').removeClass('ctct-invalid');\n };\n /**\n * Adds .ctct-invalid HTML class to inputs whose values are invalid.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} error AJAX response error object.\n */\n\n\n app.processError = function (error) {\n // If we have an id property set.\n if ('undefined' !== typeof error.id) {\n $('#' + error.id).addClass('ctct-invalid');\n }\n };\n /**\n * Check the value of the hidden honeypot field; disable form submission button if anything in it.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} e The change or keyup event triggering this callback.\n * @param {object} $honeyPot The jQuery object for the actual input field being checked.\n * @param {object} $submitButton The jQuery object for the submit button in the same form as the honeypot field.\n */\n\n\n app.checkHoneypot = function (e, $honeyPot, $submitButton) {\n // If there is text in the honeypot, disable the submit button\n if (0 < $honeyPot.val().length) {\n $submitButton.attr('disabled', 'disabled');\n } else {\n $submitButton.attr('disabled', false);\n }\n };\n /**\n * Ensures that we should use AJAX to process the specified form, and that all required fields are not empty.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form being validated.\n * @return {boolean} False if AJAX processing is disabled for this form or if a required field is empty.\n */\n\n\n app.validateSubmission = function ($form) {\n if ('on' !== $form.attr('data-doajax')) {\n return false;\n } // Ensure all required fields in this form are valid.\n\n\n $.each($form.find('[required]'), function (i, field) {\n if (false === field.checkValidity()) {\n return false;\n }\n });\n return true;\n };\n /**\n * Prepends form with a message that fades out in 5 seconds.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form a message is being displayed for.\n * @param {string} message The message content.\n * @param {string} classes Optional. HTML classes to add to the message wrapper.\n */\n\n\n app.showMessage = function ($form, message) {\n var classes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var $p = $('

', {\n 'class': 'ctct-message ' + classes,\n 'text': message\n });\n $p.insertBefore($form).fadeIn(200).delay(5000).slideUp(200, function () {\n $p.remove();\n });\n };\n /**\n * Submits the actual form via AJAX.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form being submitted.\n */\n\n\n app.submitForm = function ($form) {\n $form.find('#ctct-submitted').prop('disabled', true);\n var ajaxData = {\n 'action': 'ctct_process_form',\n 'data': $form.serialize()\n };\n $.post(window.ajaxurl, ajaxData, function (response) {\n $form.find('#ctct-submitted').prop('disabled', false);\n\n if ('undefined' === typeof response.status) {\n return false;\n } // Here we'll want to disable the submit button and add some error classes.\n\n\n if ('success' !== response.status) {\n if ('undefined' !== typeof response.errors) {\n app.setAllInputsValid();\n response.errors.forEach(app.processError);\n } else {\n app.showMessage($form, response.message, 'ctct-error');\n }\n\n return false;\n } // If we're here, the submission was a success; show message and reset form fields.\n\n\n app.showMessage($form, response.message, 'ctct-success');\n $form[0].reset();\n });\n };\n /**\n * Handle the form submission.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} e The submit event.\n * @param {object} $form jQuery object for the current form being handled.\n * @return {boolean} False if unable to validate the form.\n */\n\n\n app.handleSubmission = function (e, $form) {\n if (!app.validateSubmission($form)) {\n return false;\n }\n\n e.preventDefault();\n clearTimeout(app.timeout);\n app.timeout = setTimeout(app.submitForm, 500, $form);\n };\n /**\n * Set up event bindings and callbacks.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.bindEvents = function () {\n // eslint-disable-next-line no-unused-vars\n $.each(app.$c.$forms, function (i, form) {\n // Attach submission handler to each form's Submit button.\n app.$c.$forms[i].on('click', 'input[type=submit]', function (e) {\n app.handleSubmission(e, app.$c.$forms[i]);\n }); // Ensure each form's honeypot is checked.\n\n app.$c.$forms[i].$honeypot.on('change keyup', function (e) {\n app.checkHoneypot(e, app.$c.$forms[i].$honeypot, app.$c.$forms[i].$submitButton);\n }); // Disable the submit button by default until the captcha is passed (if captcha exists).\n\n if (0 < app.$c.$forms[i].$recaptcha.length) {\n app.$c.$forms[i].$submitButton.attr('disabled', 'disabled');\n }\n });\n };\n\n $(app.init);\n})(window, jQuery, window.CTCTSupport);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tZnJvbnRlbmQvdmFsaWRhdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jdGN0LXBsdWdpbi1mcm9udGVuZC92YWxpZGF0aW9uLmpzPzMzOTkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGcm9udC1lbmQgZm9ybSB2YWxpZGF0aW9uLlxuICpcbiAqIEBzaW5jZSAxLjAuMFxuICovXG5cbiB3aW5kb3cuQ1RDVFN1cHBvcnQgPSB7fTtcblxuKCBmdW5jdGlvbiggd2luZG93LCAkLCBhcHAgKSB7XG5cblx0LyoqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqL1xuXHRhcHAuaW5pdCA9ICgpID0+IHtcblx0XHRhcHAuY2FjaGUoKTtcblx0XHRhcHAuYmluZEV2ZW50cygpO1xuXHRcdGFwcC5yZW1vdmVQbGFjZWhvbGRlcigpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZW1vdmUgcGxhY2Vob2xkZXIgdGV4dCB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5yZW1vdmVQbGFjZWhvbGRlciA9ICgpID0+IHtcblx0XHQkKCAnLmN0Y3QtZm9ybS1maWVsZCBpbnB1dCwgdGV4dGFyZWEnICkuZm9jdXMoICgpID0+IHtcblx0XHRcdCQoIHRoaXMgKS5kYXRhKCAncGxhY2Vob2xkZXInLCAkKCB0aGlzICkuYXR0ciggJ3BsYWNlaG9sZGVyJyApICkuYXR0ciggJ3BsYWNlaG9sZGVyJywgJycgKTtcblx0XHR9ICkuYmx1ciggKCkgPT4ge1xuXHRcdFx0JCggdGhpcyApLmF0dHIoICdwbGFjZWhvbGRlcicsICQoIHRoaXMgKS5kYXRhKCAncGxhY2Vob2xkZXInICkgKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIENhY2hlIERPTSBlbGVtZW50cy5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLmNhY2hlID0gKCkgPT4ge1xuXG5cdFx0YXBwLiRjID0ge1xuXHRcdFx0JGZvcm1zOiBbXVxuXHRcdH07XG5cblx0XHQvLyBDYWNoZSBlYWNoIGZvcm0gb24gdGhlIHBhZ2UuXG5cdFx0JCggJy5jdGN0LWZvcm0td3JhcHBlcicgKS5lYWNoKCBmdW5jdGlvbiggaSwgZm9ybVdyYXBwZXIgKSB7XG5cdFx0XHRhcHAuJGMuJGZvcm1zLnB1c2goICQoIGZvcm1XcmFwcGVyICkuZmluZCggJ2Zvcm0nICkgKTtcblx0XHR9ICk7XG5cblx0XHQvLyBGb3IgZWFjaCBmb3JtLCBjYWNoZSBpdHMgY29tbW9uIGVsZW1lbnRzLlxuXHRcdCQuZWFjaCggYXBwLiRjLiRmb3JtcywgZnVuY3Rpb24oIGksIGZvcm0gKSB7XG5cblx0XHRcdHZhciAkZm9ybSA9ICQoIGZvcm0gKTtcblxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRob25leXBvdCAgICAgPSAkZm9ybS5maW5kKCAnI2N0Y3RfdXNhZ2VfZmllbGQnICk7XG5cdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHN1Ym1pdEJ1dHRvbiA9ICRmb3JtLmZpbmQoICdpbnB1dFt0eXBlPXN1Ym1pdF0nICk7XG5cdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHJlY2FwdGNoYSAgICA9ICRmb3JtLmZpbmQoICcuZy1yZWNhcHRjaGEnICk7XG5cdFx0fSApO1xuXG5cdFx0YXBwLnRpbWVvdXQgPSBudWxsO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGN0Y3QtaW52YWxpZCBjbGFzcyBmcm9tIGVsZW1lbnRzIHRoYXQgaGF2ZSBpdC5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLnNldEFsbElucHV0c1ZhbGlkID0gKCkgPT4ge1xuXHRcdCQoIGFwcC4kYy4kZm9ybSArICcgLmN0Y3QtaW52YWxpZCcgKS5yZW1vdmVDbGFzcyggJ2N0Y3QtaW52YWxpZCcgKTtcblx0fTtcblxuXHQvKipcblx0ICogQWRkcyAuY3RjdC1pbnZhbGlkIEhUTUwgY2xhc3MgdG8gaW5wdXRzIHdob3NlIHZhbHVlcyBhcmUgaW52YWxpZC5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZXJyb3IgQUpBWCByZXNwb25zZSBlcnJvciBvYmplY3QuXG5cdCAqL1xuXHRhcHAucHJvY2Vzc0Vycm9yID0gKCBlcnJvciApID0+IHtcblxuXHRcdC8vIElmIHdlIGhhdmUgYW4gaWQgcHJvcGVydHkgc2V0LlxuXHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiggZXJyb3IuaWQgKSApIHtcblx0XHRcdCQoICcjJyArIGVycm9yLmlkICkuYWRkQ2xhc3MoICdjdGN0LWludmFsaWQnICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBDaGVjayB0aGUgdmFsdWUgb2YgdGhlIGhpZGRlbiBob25leXBvdCBmaWVsZDsgZGlzYWJsZSBmb3JtIHN1Ym1pc3Npb24gYnV0dG9uIGlmIGFueXRoaW5nIGluIGl0LlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBlIFRoZSBjaGFuZ2Ugb3Iga2V5dXAgZXZlbnQgdHJpZ2dlcmluZyB0aGlzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gJGhvbmV5UG90IFRoZSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgYWN0dWFsIGlucHV0IGZpZWxkIGJlaW5nIGNoZWNrZWQuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkc3VibWl0QnV0dG9uIFRoZSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgc3VibWl0IGJ1dHRvbiBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZSBob25leXBvdCBmaWVsZC5cblx0ICovXG5cdGFwcC5jaGVja0hvbmV5cG90ID0gKCBlLCAkaG9uZXlQb3QsICRzdWJtaXRCdXR0b24gKSA9PiB7XG5cblx0XHQvLyBJZiB0aGVyZSBpcyB0ZXh0IGluIHRoZSBob25leXBvdCwgZGlzYWJsZSB0aGUgc3VibWl0IGJ1dHRvblxuXHRcdGlmICggMCA8ICRob25leVBvdC52YWwoKS5sZW5ndGggKSB7XG5cdFx0XHQkc3VibWl0QnV0dG9uLmF0dHIoICdkaXNhYmxlZCcsICdkaXNhYmxlZCcgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHN1Ym1pdEJ1dHRvbi5hdHRyKCAnZGlzYWJsZWQnLCBmYWxzZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogRW5zdXJlcyB0aGF0IHdlIHNob3VsZCB1c2UgQUpBWCB0byBwcm9jZXNzIHRoZSBzcGVjaWZpZWQgZm9ybSwgYW5kIHRoYXQgYWxsIHJlcXVpcmVkIGZpZWxkcyBhcmUgbm90IGVtcHR5LlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgZm9ybSBiZWluZyB2YWxpZGF0ZWQuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IEZhbHNlIGlmIEFKQVggcHJvY2Vzc2luZyBpcyBkaXNhYmxlZCBmb3IgdGhpcyBmb3JtIG9yIGlmIGEgcmVxdWlyZWQgZmllbGQgaXMgZW1wdHkuXG5cdCAqL1xuXHRhcHAudmFsaWRhdGVTdWJtaXNzaW9uID0gKCAkZm9ybSApID0+IHtcblxuXHRcdGlmICggJ29uJyAhPT0gJGZvcm0uYXR0ciggJ2RhdGEtZG9hamF4JyApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSBhbGwgcmVxdWlyZWQgZmllbGRzIGluIHRoaXMgZm9ybSBhcmUgdmFsaWQuXG5cdFx0JC5lYWNoKCAkZm9ybS5maW5kKCAnW3JlcXVpcmVkXScgKSwgZnVuY3Rpb24oIGksIGZpZWxkICkge1xuXG5cdFx0XHRpZiAoIGZhbHNlID09PSBmaWVsZC5jaGVja1ZhbGlkaXR5KCkgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXHQvKipcblx0ICogUHJlcGVuZHMgZm9ybSB3aXRoIGEgbWVzc2FnZSB0aGF0IGZhZGVzIG91dCBpbiA1IHNlY29uZHMuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9ICRmb3JtIGpRdWVyeSBvYmplY3QgZm9yIHRoZSBmb3JtIGEgbWVzc2FnZSBpcyBiZWluZyBkaXNwbGF5ZWQgZm9yLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSBjb250ZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NlcyBPcHRpb25hbC4gSFRNTCBjbGFzc2VzIHRvIGFkZCB0byB0aGUgbWVzc2FnZSB3cmFwcGVyLlxuXHQgKi9cblx0YXBwLnNob3dNZXNzYWdlID0gKCAkZm9ybSwgbWVzc2FnZSwgY2xhc3NlcyA9ICcnICkgPT4ge1xuXG5cdFx0dmFyICRwID0gJCggJzxwIC8+Jywge1xuXHRcdFx0J2NsYXNzJzogJ2N0Y3QtbWVzc2FnZSAnICsgY2xhc3Nlcyxcblx0XHRcdCd0ZXh0JzogbWVzc2FnZVxuXHRcdH0gKTtcblxuXHRcdCRwLmluc2VydEJlZm9yZSggJGZvcm0gKS5mYWRlSW4oIDIwMCApLmRlbGF5KCA1MDAwICkuc2xpZGVVcCggMjAwLCAoKSA9PiB7XG5cdFx0XHQkcC5yZW1vdmUoKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGFjdHVhbCBmb3JtIHZpYSBBSkFYLlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgZm9ybSBiZWluZyBzdWJtaXR0ZWQuXG5cdCAqL1xuXHRhcHAuc3VibWl0Rm9ybSA9ICggJGZvcm0gKSA9PiB7XG5cblx0XHQkZm9ybS5maW5kKCAnI2N0Y3Qtc3VibWl0dGVkJyApLnByb3AoICdkaXNhYmxlZCcsIHRydWUgKTtcblxuXHRcdHZhciBhamF4RGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nOiAnY3RjdF9wcm9jZXNzX2Zvcm0nLFxuXHRcdFx0J2RhdGEnOiAkZm9ybS5zZXJpYWxpemUoKVxuXHRcdH07XG5cblx0XHQkLnBvc3QoIHdpbmRvdy5hamF4dXJsLCBhamF4RGF0YSwgKCByZXNwb25zZSApID0+IHtcblxuXHRcdFx0JGZvcm0uZmluZCggJyNjdGN0LXN1Ym1pdHRlZCcgKS5wcm9wKCAnZGlzYWJsZWQnLCBmYWxzZSApO1xuXG5cdFx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2YoIHJlc3BvbnNlLnN0YXR1cyApICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhlcmUgd2UnbGwgd2FudCB0byBkaXNhYmxlIHRoZSBzdWJtaXQgYnV0dG9uIGFuZCBhZGQgc29tZSBlcnJvciBjbGFzc2VzLlxuXHRcdFx0aWYgKCAnc3VjY2VzcycgIT09IHJlc3BvbnNlLnN0YXR1cyApIHtcblxuXHRcdFx0XHRpZiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YoIHJlc3BvbnNlLmVycm9ycyApICkge1xuXHRcdFx0XHRcdGFwcC5zZXRBbGxJbnB1dHNWYWxpZCgpO1xuXHRcdFx0XHRcdHJlc3BvbnNlLmVycm9ycy5mb3JFYWNoKCBhcHAucHJvY2Vzc0Vycm9yICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YXBwLnNob3dNZXNzYWdlKCAkZm9ybSwgcmVzcG9uc2UubWVzc2FnZSwgJ2N0Y3QtZXJyb3InICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHdlJ3JlIGhlcmUsIHRoZSBzdWJtaXNzaW9uIHdhcyBhIHN1Y2Nlc3M7IHNob3cgbWVzc2FnZSBhbmQgcmVzZXQgZm9ybSBmaWVsZHMuXG5cdFx0XHRhcHAuc2hvd01lc3NhZ2UoICRmb3JtLCByZXNwb25zZS5tZXNzYWdlLCAnY3RjdC1zdWNjZXNzJyApO1xuXHRcdFx0JGZvcm1bMF0ucmVzZXQoKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEhhbmRsZSB0aGUgZm9ybSBzdWJtaXNzaW9uLlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBlIFRoZSBzdWJtaXQgZXZlbnQuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgY3VycmVudCBmb3JtIGJlaW5nIGhhbmRsZWQuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IEZhbHNlIGlmIHVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgZm9ybS5cblx0ICovXG5cdGFwcC5oYW5kbGVTdWJtaXNzaW9uID0gKCBlLCAkZm9ybSApID0+IHtcblxuXHRcdGlmICggISBhcHAudmFsaWRhdGVTdWJtaXNzaW9uKCAkZm9ybSApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGNsZWFyVGltZW91dCggYXBwLnRpbWVvdXQgKTtcblxuXHRcdGFwcC50aW1lb3V0ID0gc2V0VGltZW91dCggYXBwLnN1Ym1pdEZvcm0sIDUwMCwgJGZvcm0gKTtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IHVwIGV2ZW50IGJpbmRpbmdzIGFuZCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5iaW5kRXZlbnRzID0gKCkgPT4ge1xuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdFx0JC5lYWNoKCBhcHAuJGMuJGZvcm1zLCBmdW5jdGlvbiggaSwgZm9ybSApIHtcblxuXHRcdFx0Ly8gQXR0YWNoIHN1Ym1pc3Npb24gaGFuZGxlciB0byBlYWNoIGZvcm0ncyBTdWJtaXQgYnV0dG9uLlxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLm9uKCAnY2xpY2snLCAnaW5wdXRbdHlwZT1zdWJtaXRdJywgKCBlICkgPT4ge1xuXHRcdFx0XHRhcHAuaGFuZGxlU3VibWlzc2lvbiggZSwgYXBwLiRjLiRmb3Jtc1sgaSBdICk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdC8vIEVuc3VyZSBlYWNoIGZvcm0ncyBob25leXBvdCBpcyBjaGVja2VkLlxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRob25leXBvdC5vbiggJ2NoYW5nZSBrZXl1cCcsICggZSApID0+IHtcblxuXHRcdFx0XHRhcHAuY2hlY2tIb25leXBvdChcblx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdGFwcC4kYy4kZm9ybXNbIGkgXS4kaG9uZXlwb3QsXG5cdFx0XHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRzdWJtaXRCdXR0b25cblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblxuXHRcdFx0Ly8gRGlzYWJsZSB0aGUgc3VibWl0IGJ1dHRvbiBieSBkZWZhdWx0IHVudGlsIHRoZSBjYXB0Y2hhIGlzIHBhc3NlZCAoaWYgY2FwdGNoYSBleGlzdHMpLlxuXHRcdFx0aWYgKCAwIDwgYXBwLiRjLiRmb3Jtc1sgaSBdLiRyZWNhcHRjaGEubGVuZ3RoICkge1xuXHRcdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHN1Ym1pdEJ1dHRvbi5hdHRyKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XG5cdFx0XHR9XG5cblx0XHR9ICk7XG5cdH07XG5cblx0JCggYXBwLmluaXQgKTtcblxufSAoIHdpbmRvdywgalF1ZXJ5LCB3aW5kb3cuQ1RDVFN1cHBvcnQgKSApO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0FBU0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7O0FBVUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-frontend/validation.js\n"); +eval("/**\n * Front-end form validation.\n *\n * @since 1.0.0\n */\nwindow.CTCTSupport = {};\n\n(function (window, $, app) {\n var _this = this;\n\n /**\n * @constructor\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n app.init = function () {\n app.cache();\n app.bindEvents();\n app.removePlaceholder();\n };\n /**\n * Remove placeholder text values.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.removePlaceholder = function () {\n $('.ctct-form-field input, textarea').focus(function () {\n $(_this).data('placeholder', $(_this).attr('placeholder')).attr('placeholder', '');\n }).blur(function () {\n $(_this).attr('placeholder', $(_this).data('placeholder'));\n });\n };\n /**\n * Cache DOM elements.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.cache = function () {\n app.$c = {\n $forms: []\n }; // Cache each form on the page.\n\n $('.ctct-form-wrapper').each(function (i, formWrapper) {\n app.$c.$forms.push($(formWrapper).find('form'));\n }); // For each form, cache its common elements.\n\n $.each(app.$c.$forms, function (i, form) {\n var $form = $(form);\n app.$c.$forms[i].$honeypot = $form.find('.ctct_usage_field');\n app.$c.$forms[i].$submitButton = $form.find('input[type=submit]');\n app.$c.$forms[i].$recaptcha = $form.find('.g-recaptcha');\n });\n app.timeout = null;\n };\n /**\n * Remove the ctct-invalid class from elements that have it.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.setAllInputsValid = function () {\n $(app.$c.$form + ' .ctct-invalid').removeClass('ctct-invalid');\n };\n /**\n * Adds .ctct-invalid HTML class to inputs whose values are invalid.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} error AJAX response error object.\n */\n\n\n app.processError = function (error) {\n // If we have an id property set.\n if ('undefined' !== typeof error.id) {\n $('#' + error.id).addClass('ctct-invalid');\n }\n };\n /**\n * Check the value of the hidden honeypot field; disable form submission button if anything in it.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} e The change or keyup event triggering this callback.\n * @param {object} $honeyPot The jQuery object for the actual input field being checked.\n * @param {object} $submitButton The jQuery object for the submit button in the same form as the honeypot field.\n */\n\n\n app.checkHoneypot = function (e, $honeyPot, $submitButton) {\n // If there is text in the honeypot, disable the submit button\n if (0 < $honeyPot.val().length) {\n $submitButton.attr('disabled', 'disabled');\n } else {\n $submitButton.attr('disabled', false);\n }\n };\n /**\n * Ensures that we should use AJAX to process the specified form, and that all required fields are not empty.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form being validated.\n * @return {boolean} False if AJAX processing is disabled for this form or if a required field is empty.\n */\n\n\n app.validateSubmission = function ($form) {\n if ('on' !== $form.attr('data-doajax')) {\n return false;\n } // Ensure all required fields in this form are valid.\n\n\n $.each($form.find('[required]'), function (i, field) {\n if (false === field.checkValidity()) {\n return false;\n }\n });\n return true;\n };\n /**\n * Prepends form with a message that fades out in 5 seconds.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form a message is being displayed for.\n * @param {string} message The message content.\n * @param {string} classes Optional. HTML classes to add to the message wrapper.\n */\n\n\n app.showMessage = function ($form, message) {\n var classes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var $p = $('

', {\n 'class': 'ctct-message ' + classes,\n 'text': message\n });\n $p.insertBefore($form).fadeIn(200).delay(5000).slideUp(200, function () {\n $p.remove();\n });\n };\n /**\n * Submits the actual form via AJAX.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form being submitted.\n */\n\n\n app.submitForm = function ($form) {\n $form.find('.ctct-submitted').prop('disabled', true);\n var ajaxData = {\n 'action': 'ctct_process_form',\n 'data': $form.serialize()\n };\n $.post(window.ajaxurl, ajaxData, function (response) {\n $form.find('.ctct-submitted').prop('disabled', false);\n\n if ('undefined' === typeof response.status) {\n return false;\n } // Here we'll want to disable the submit button and add some error classes.\n\n\n if ('success' !== response.status) {\n if ('undefined' !== typeof response.errors) {\n app.setAllInputsValid();\n response.errors.forEach(app.processError);\n } else {\n app.showMessage($form, response.message, 'ctct-error');\n }\n\n return false;\n } // If we're here, the submission was a success; show message and reset form fields.\n\n\n app.showMessage($form, response.message, 'ctct-success');\n $form[0].reset();\n });\n };\n /**\n * Handle the form submission.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} e The submit event.\n * @param {object} $form jQuery object for the current form being handled.\n * @return {boolean} False if unable to validate the form.\n */\n\n\n app.handleSubmission = function (e, $form) {\n if (!app.validateSubmission($form)) {\n return false;\n }\n\n e.preventDefault();\n clearTimeout(app.timeout);\n app.timeout = setTimeout(app.submitForm, 500, $form);\n };\n /**\n * Set up event bindings and callbacks.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.bindEvents = function () {\n // eslint-disable-next-line no-unused-vars\n $.each(app.$c.$forms, function (i, form) {\n // Attach submission handler to each form's Submit button.\n app.$c.$forms[i].on('click', 'input[type=submit]', function (e) {\n app.handleSubmission(e, app.$c.$forms[i]);\n }); // Ensure each form's honeypot is checked.\n\n app.$c.$forms[i].$honeypot.on('change keyup', function (e) {\n app.checkHoneypot(e, app.$c.$forms[i].$honeypot, app.$c.$forms[i].$submitButton);\n }); // Disable the submit button by default until the captcha is passed (if captcha exists).\n\n if (0 < app.$c.$forms[i].$recaptcha.length) {\n app.$c.$forms[i].$submitButton.attr('disabled', 'disabled');\n }\n });\n };\n\n $(app.init);\n})(window, jQuery, window.CTCTSupport);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tZnJvbnRlbmQvdmFsaWRhdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jdGN0LXBsdWdpbi1mcm9udGVuZC92YWxpZGF0aW9uLmpzPzMzOTkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGcm9udC1lbmQgZm9ybSB2YWxpZGF0aW9uLlxuICpcbiAqIEBzaW5jZSAxLjAuMFxuICovXG5cbiB3aW5kb3cuQ1RDVFN1cHBvcnQgPSB7fTtcblxuKCBmdW5jdGlvbiggd2luZG93LCAkLCBhcHAgKSB7XG5cblx0LyoqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqL1xuXHRhcHAuaW5pdCA9ICgpID0+IHtcblx0XHRhcHAuY2FjaGUoKTtcblx0XHRhcHAuYmluZEV2ZW50cygpO1xuXHRcdGFwcC5yZW1vdmVQbGFjZWhvbGRlcigpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZW1vdmUgcGxhY2Vob2xkZXIgdGV4dCB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5yZW1vdmVQbGFjZWhvbGRlciA9ICgpID0+IHtcblx0XHQkKCAnLmN0Y3QtZm9ybS1maWVsZCBpbnB1dCwgdGV4dGFyZWEnICkuZm9jdXMoICgpID0+IHtcblx0XHRcdCQoIHRoaXMgKS5kYXRhKCAncGxhY2Vob2xkZXInLCAkKCB0aGlzICkuYXR0ciggJ3BsYWNlaG9sZGVyJyApICkuYXR0ciggJ3BsYWNlaG9sZGVyJywgJycgKTtcblx0XHR9ICkuYmx1ciggKCkgPT4ge1xuXHRcdFx0JCggdGhpcyApLmF0dHIoICdwbGFjZWhvbGRlcicsICQoIHRoaXMgKS5kYXRhKCAncGxhY2Vob2xkZXInICkgKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIENhY2hlIERPTSBlbGVtZW50cy5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLmNhY2hlID0gKCkgPT4ge1xuXG5cdFx0YXBwLiRjID0ge1xuXHRcdFx0JGZvcm1zOiBbXVxuXHRcdH07XG5cblx0XHQvLyBDYWNoZSBlYWNoIGZvcm0gb24gdGhlIHBhZ2UuXG5cdFx0JCggJy5jdGN0LWZvcm0td3JhcHBlcicgKS5lYWNoKCBmdW5jdGlvbiggaSwgZm9ybVdyYXBwZXIgKSB7XG5cdFx0XHRhcHAuJGMuJGZvcm1zLnB1c2goICQoIGZvcm1XcmFwcGVyICkuZmluZCggJ2Zvcm0nICkgKTtcblx0XHR9ICk7XG5cblx0XHQvLyBGb3IgZWFjaCBmb3JtLCBjYWNoZSBpdHMgY29tbW9uIGVsZW1lbnRzLlxuXHRcdCQuZWFjaCggYXBwLiRjLiRmb3JtcywgZnVuY3Rpb24oIGksIGZvcm0gKSB7XG5cblx0XHRcdHZhciAkZm9ybSA9ICQoIGZvcm0gKTtcblxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRob25leXBvdCAgICAgPSAkZm9ybS5maW5kKCAnLmN0Y3RfdXNhZ2VfZmllbGQnICk7XG5cdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHN1Ym1pdEJ1dHRvbiA9ICRmb3JtLmZpbmQoICdpbnB1dFt0eXBlPXN1Ym1pdF0nICk7XG5cdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHJlY2FwdGNoYSAgICA9ICRmb3JtLmZpbmQoICcuZy1yZWNhcHRjaGEnICk7XG5cdFx0fSApO1xuXG5cdFx0YXBwLnRpbWVvdXQgPSBudWxsO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGN0Y3QtaW52YWxpZCBjbGFzcyBmcm9tIGVsZW1lbnRzIHRoYXQgaGF2ZSBpdC5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLnNldEFsbElucHV0c1ZhbGlkID0gKCkgPT4ge1xuXHRcdCQoIGFwcC4kYy4kZm9ybSArICcgLmN0Y3QtaW52YWxpZCcgKS5yZW1vdmVDbGFzcyggJ2N0Y3QtaW52YWxpZCcgKTtcblx0fTtcblxuXHQvKipcblx0ICogQWRkcyAuY3RjdC1pbnZhbGlkIEhUTUwgY2xhc3MgdG8gaW5wdXRzIHdob3NlIHZhbHVlcyBhcmUgaW52YWxpZC5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZXJyb3IgQUpBWCByZXNwb25zZSBlcnJvciBvYmplY3QuXG5cdCAqL1xuXHRhcHAucHJvY2Vzc0Vycm9yID0gKCBlcnJvciApID0+IHtcblxuXHRcdC8vIElmIHdlIGhhdmUgYW4gaWQgcHJvcGVydHkgc2V0LlxuXHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiggZXJyb3IuaWQgKSApIHtcblx0XHRcdCQoICcjJyArIGVycm9yLmlkICkuYWRkQ2xhc3MoICdjdGN0LWludmFsaWQnICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBDaGVjayB0aGUgdmFsdWUgb2YgdGhlIGhpZGRlbiBob25leXBvdCBmaWVsZDsgZGlzYWJsZSBmb3JtIHN1Ym1pc3Npb24gYnV0dG9uIGlmIGFueXRoaW5nIGluIGl0LlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBlIFRoZSBjaGFuZ2Ugb3Iga2V5dXAgZXZlbnQgdHJpZ2dlcmluZyB0aGlzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gJGhvbmV5UG90IFRoZSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgYWN0dWFsIGlucHV0IGZpZWxkIGJlaW5nIGNoZWNrZWQuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkc3VibWl0QnV0dG9uIFRoZSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgc3VibWl0IGJ1dHRvbiBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZSBob25leXBvdCBmaWVsZC5cblx0ICovXG5cdGFwcC5jaGVja0hvbmV5cG90ID0gKCBlLCAkaG9uZXlQb3QsICRzdWJtaXRCdXR0b24gKSA9PiB7XG5cblx0XHQvLyBJZiB0aGVyZSBpcyB0ZXh0IGluIHRoZSBob25leXBvdCwgZGlzYWJsZSB0aGUgc3VibWl0IGJ1dHRvblxuXHRcdGlmICggMCA8ICRob25leVBvdC52YWwoKS5sZW5ndGggKSB7XG5cdFx0XHQkc3VibWl0QnV0dG9uLmF0dHIoICdkaXNhYmxlZCcsICdkaXNhYmxlZCcgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHN1Ym1pdEJ1dHRvbi5hdHRyKCAnZGlzYWJsZWQnLCBmYWxzZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogRW5zdXJlcyB0aGF0IHdlIHNob3VsZCB1c2UgQUpBWCB0byBwcm9jZXNzIHRoZSBzcGVjaWZpZWQgZm9ybSwgYW5kIHRoYXQgYWxsIHJlcXVpcmVkIGZpZWxkcyBhcmUgbm90IGVtcHR5LlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgZm9ybSBiZWluZyB2YWxpZGF0ZWQuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IEZhbHNlIGlmIEFKQVggcHJvY2Vzc2luZyBpcyBkaXNhYmxlZCBmb3IgdGhpcyBmb3JtIG9yIGlmIGEgcmVxdWlyZWQgZmllbGQgaXMgZW1wdHkuXG5cdCAqL1xuXHRhcHAudmFsaWRhdGVTdWJtaXNzaW9uID0gKCAkZm9ybSApID0+IHtcblxuXHRcdGlmICggJ29uJyAhPT0gJGZvcm0uYXR0ciggJ2RhdGEtZG9hamF4JyApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSBhbGwgcmVxdWlyZWQgZmllbGRzIGluIHRoaXMgZm9ybSBhcmUgdmFsaWQuXG5cdFx0JC5lYWNoKCAkZm9ybS5maW5kKCAnW3JlcXVpcmVkXScgKSwgZnVuY3Rpb24oIGksIGZpZWxkICkge1xuXG5cdFx0XHRpZiAoIGZhbHNlID09PSBmaWVsZC5jaGVja1ZhbGlkaXR5KCkgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXHQvKipcblx0ICogUHJlcGVuZHMgZm9ybSB3aXRoIGEgbWVzc2FnZSB0aGF0IGZhZGVzIG91dCBpbiA1IHNlY29uZHMuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9ICRmb3JtIGpRdWVyeSBvYmplY3QgZm9yIHRoZSBmb3JtIGEgbWVzc2FnZSBpcyBiZWluZyBkaXNwbGF5ZWQgZm9yLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSBjb250ZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NlcyBPcHRpb25hbC4gSFRNTCBjbGFzc2VzIHRvIGFkZCB0byB0aGUgbWVzc2FnZSB3cmFwcGVyLlxuXHQgKi9cblx0YXBwLnNob3dNZXNzYWdlID0gKCAkZm9ybSwgbWVzc2FnZSwgY2xhc3NlcyA9ICcnICkgPT4ge1xuXG5cdFx0dmFyICRwID0gJCggJzxwIC8+Jywge1xuXHRcdFx0J2NsYXNzJzogJ2N0Y3QtbWVzc2FnZSAnICsgY2xhc3Nlcyxcblx0XHRcdCd0ZXh0JzogbWVzc2FnZVxuXHRcdH0gKTtcblxuXHRcdCRwLmluc2VydEJlZm9yZSggJGZvcm0gKS5mYWRlSW4oIDIwMCApLmRlbGF5KCA1MDAwICkuc2xpZGVVcCggMjAwLCAoKSA9PiB7XG5cdFx0XHQkcC5yZW1vdmUoKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGFjdHVhbCBmb3JtIHZpYSBBSkFYLlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgZm9ybSBiZWluZyBzdWJtaXR0ZWQuXG5cdCAqL1xuXHRhcHAuc3VibWl0Rm9ybSA9ICggJGZvcm0gKSA9PiB7XG5cblx0XHQkZm9ybS5maW5kKCAnLmN0Y3Qtc3VibWl0dGVkJyApLnByb3AoICdkaXNhYmxlZCcsIHRydWUgKTtcblxuXHRcdHZhciBhamF4RGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nOiAnY3RjdF9wcm9jZXNzX2Zvcm0nLFxuXHRcdFx0J2RhdGEnOiAkZm9ybS5zZXJpYWxpemUoKVxuXHRcdH07XG5cblx0XHQkLnBvc3QoIHdpbmRvdy5hamF4dXJsLCBhamF4RGF0YSwgKCByZXNwb25zZSApID0+IHtcblxuXHRcdFx0JGZvcm0uZmluZCggJy5jdGN0LXN1Ym1pdHRlZCcgKS5wcm9wKCAnZGlzYWJsZWQnLCBmYWxzZSApO1xuXG5cdFx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2YoIHJlc3BvbnNlLnN0YXR1cyApICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhlcmUgd2UnbGwgd2FudCB0byBkaXNhYmxlIHRoZSBzdWJtaXQgYnV0dG9uIGFuZCBhZGQgc29tZSBlcnJvciBjbGFzc2VzLlxuXHRcdFx0aWYgKCAnc3VjY2VzcycgIT09IHJlc3BvbnNlLnN0YXR1cyApIHtcblxuXHRcdFx0XHRpZiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YoIHJlc3BvbnNlLmVycm9ycyApICkge1xuXHRcdFx0XHRcdGFwcC5zZXRBbGxJbnB1dHNWYWxpZCgpO1xuXHRcdFx0XHRcdHJlc3BvbnNlLmVycm9ycy5mb3JFYWNoKCBhcHAucHJvY2Vzc0Vycm9yICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YXBwLnNob3dNZXNzYWdlKCAkZm9ybSwgcmVzcG9uc2UubWVzc2FnZSwgJ2N0Y3QtZXJyb3InICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHdlJ3JlIGhlcmUsIHRoZSBzdWJtaXNzaW9uIHdhcyBhIHN1Y2Nlc3M7IHNob3cgbWVzc2FnZSBhbmQgcmVzZXQgZm9ybSBmaWVsZHMuXG5cdFx0XHRhcHAuc2hvd01lc3NhZ2UoICRmb3JtLCByZXNwb25zZS5tZXNzYWdlLCAnY3RjdC1zdWNjZXNzJyApO1xuXHRcdFx0JGZvcm1bMF0ucmVzZXQoKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEhhbmRsZSB0aGUgZm9ybSBzdWJtaXNzaW9uLlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBlIFRoZSBzdWJtaXQgZXZlbnQuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgY3VycmVudCBmb3JtIGJlaW5nIGhhbmRsZWQuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IEZhbHNlIGlmIHVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgZm9ybS5cblx0ICovXG5cdGFwcC5oYW5kbGVTdWJtaXNzaW9uID0gKCBlLCAkZm9ybSApID0+IHtcblxuXHRcdGlmICggISBhcHAudmFsaWRhdGVTdWJtaXNzaW9uKCAkZm9ybSApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGNsZWFyVGltZW91dCggYXBwLnRpbWVvdXQgKTtcblxuXHRcdGFwcC50aW1lb3V0ID0gc2V0VGltZW91dCggYXBwLnN1Ym1pdEZvcm0sIDUwMCwgJGZvcm0gKTtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IHVwIGV2ZW50IGJpbmRpbmdzIGFuZCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5iaW5kRXZlbnRzID0gKCkgPT4ge1xuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdFx0JC5lYWNoKCBhcHAuJGMuJGZvcm1zLCBmdW5jdGlvbiggaSwgZm9ybSApIHtcblxuXHRcdFx0Ly8gQXR0YWNoIHN1Ym1pc3Npb24gaGFuZGxlciB0byBlYWNoIGZvcm0ncyBTdWJtaXQgYnV0dG9uLlxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLm9uKCAnY2xpY2snLCAnaW5wdXRbdHlwZT1zdWJtaXRdJywgKCBlICkgPT4ge1xuXHRcdFx0XHRhcHAuaGFuZGxlU3VibWlzc2lvbiggZSwgYXBwLiRjLiRmb3Jtc1sgaSBdICk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdC8vIEVuc3VyZSBlYWNoIGZvcm0ncyBob25leXBvdCBpcyBjaGVja2VkLlxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRob25leXBvdC5vbiggJ2NoYW5nZSBrZXl1cCcsICggZSApID0+IHtcblxuXHRcdFx0XHRhcHAuY2hlY2tIb25leXBvdChcblx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdGFwcC4kYy4kZm9ybXNbIGkgXS4kaG9uZXlwb3QsXG5cdFx0XHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRzdWJtaXRCdXR0b25cblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblxuXHRcdFx0Ly8gRGlzYWJsZSB0aGUgc3VibWl0IGJ1dHRvbiBieSBkZWZhdWx0IHVudGlsIHRoZSBjYXB0Y2hhIGlzIHBhc3NlZCAoaWYgY2FwdGNoYSBleGlzdHMpLlxuXHRcdFx0aWYgKCAwIDwgYXBwLiRjLiRmb3Jtc1sgaSBdLiRyZWNhcHRjaGEubGVuZ3RoICkge1xuXHRcdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHN1Ym1pdEJ1dHRvbi5hdHRyKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XG5cdFx0XHR9XG5cblx0XHR9ICk7XG5cdH07XG5cblx0JCggYXBwLmluaXQgKTtcblxufSAoIHdpbmRvdywgalF1ZXJ5LCB3aW5kb3cuQ1RDVFN1cHBvcnQgKSApO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0FBU0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7O0FBVUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-frontend/validation.js\n"); /***/ }), diff --git a/assets/js/ctct-plugin-frontend/util.js b/assets/js/ctct-plugin-frontend/util.js index aa190573..755c9e08 100644 --- a/assets/js/ctct-plugin-frontend/util.js +++ b/assets/js/ctct-plugin-frontend/util.js @@ -8,7 +8,7 @@ */ $( document ).ready( () => { - $( '#ctct-submitted' ).on( 'click', () => { + $( '.ctct-submitted' ).on( 'click', () => { setTimeout( () => { disableSendButton(); setTimeout( enableSendButton, 3000 ); @@ -25,7 +25,7 @@ * @return {mixed} jQuery if attribute is set, undefined if not. */ function disableSendButton() { - return $( '#ctct-submitted' ).attr( 'disabled', 'disabled' ); + return $( '.ctct-submitted' ).attr( 'disabled', 'disabled' ); } /** @@ -37,7 +37,7 @@ * @return {mixed} jQuery if attribute is set, undefined if not. */ function enableSendButton() { - return $( '#ctct-submitted' ).attr( 'disabled', null ); + return $( '.ctct-submitted' ).attr( 'disabled', null ); } } ( window, jQuery ) ); diff --git a/assets/js/ctct-plugin-frontend/validation.js b/assets/js/ctct-plugin-frontend/validation.js index c8a248d2..c298e9aa 100644 --- a/assets/js/ctct-plugin-frontend/validation.js +++ b/assets/js/ctct-plugin-frontend/validation.js @@ -56,7 +56,7 @@ var $form = $( form ); - app.$c.$forms[ i ].$honeypot = $form.find( '#ctct_usage_field' ); + app.$c.$forms[ i ].$honeypot = $form.find( '.ctct_usage_field' ); app.$c.$forms[ i ].$submitButton = $form.find( 'input[type=submit]' ); app.$c.$forms[ i ].$recaptcha = $form.find( '.g-recaptcha' ); } ); @@ -168,7 +168,7 @@ */ app.submitForm = ( $form ) => { - $form.find( '#ctct-submitted' ).prop( 'disabled', true ); + $form.find( '.ctct-submitted' ).prop( 'disabled', true ); var ajaxData = { 'action': 'ctct_process_form', @@ -177,7 +177,7 @@ $.post( window.ajaxurl, ajaxData, ( response ) => { - $form.find( '#ctct-submitted' ).prop( 'disabled', false ); + $form.find( '.ctct-submitted' ).prop( 'disabled', false ); if ( 'undefined' === typeof( response.status ) ) { return false; diff --git a/assets/js/ctct-plugin-gutenberg.js b/assets/js/ctct-plugin-gutenberg.js index 083d0a1d..1c5769c2 100644 --- a/assets/js/ctct-plugin-gutenberg.js +++ b/assets/js/ctct-plugin-gutenberg.js @@ -106,7 +106,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _com /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar _wp = wp,\n SelectControl = _wp.components.SelectControl,\n apiFetch = _wp.apiFetch,\n Component = _wp.element.Component,\n __ = _wp.i18n.__;\n\nvar SingleFormSelect =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(SingleFormSelect, _Component);\n\n /**\n * Constructor\n * @param props\n */\n function SingleFormSelect(props) {\n var _this;\n\n _classCallCheck(this, SingleFormSelect);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(SingleFormSelect).call(this, props)); // Set the initial state of the component.\n\n _this.state = {\n forms: [{\n label: __('Select a form', 'constant-contact'),\n value: 0\n }]\n };\n return _this;\n }\n /**\n * After the component mounts, retrieve the forms and add them to the local component state.\n */\n\n\n _createClass(SingleFormSelect, [{\n key: \"componentDidMount\",\n value: function () {\n var _componentDidMount = _asyncToGenerator(\n /*#__PURE__*/\n regeneratorRuntime.mark(function _callee() {\n var results, forms;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.prev = 0;\n _context.next = 3;\n return apiFetch({\n path: '/?rest_route=/wp/v2/ctct_forms'\n });\n\n case 3:\n results = _context.sent;\n forms = results.map(function (result) {\n return {\n label: result.title.rendered,\n value: result.id\n };\n });\n this.setState({\n forms: [].concat(_toConsumableArray(this.state.forms), _toConsumableArray(forms))\n });\n _context.next = 11;\n break;\n\n case 8:\n _context.prev = 8;\n _context.t0 = _context[\"catch\"](0);\n console.error('ERROR: ', _context.t0.message);\n\n case 11:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this, [[0, 8]]);\n }));\n\n function componentDidMount() {\n return _componentDidMount.apply(this, arguments);\n }\n\n return componentDidMount;\n }()\n /**\n * Render the Gutenberg block in the admin area.\n */\n\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n // Destructure the selectedFrom from props.\n var selectedForm = this.props.attributes.selectedForm;\n return (\n /*#__PURE__*/\n React.createElement(\"div\", {\n className: \"ctct-block-container\"\n },\n /*#__PURE__*/\n React.createElement(\"h4\", {\n className: \"ctct-block-title\"\n }, __('Constant Contact Forms', 'constant-contact')),\n /*#__PURE__*/\n React.createElement(\"small\", null, __('Choose the form to display with the dropdown below.', 'constant-contact')),\n /*#__PURE__*/\n React.createElement(SelectControl, {\n value: selectedForm,\n options: this.state.forms,\n onChange: function onChange(value) {\n return _this2.props.setAttributes({\n selectedForm: value\n });\n }\n }))\n );\n }\n }]);\n\n return SingleFormSelect;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SingleFormSelect);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tZ3V0ZW5iZXJnL2NvbXBvbmVudHMvc2luZ2xlLWZvcm0tc2VsZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2N0Y3QtcGx1Z2luLWd1dGVuYmVyZy9jb21wb25lbnRzL3NpbmdsZS1mb3JtLXNlbGVjdC5qcz9hNzkzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHtcblx0Y29tcG9uZW50czoge1xuXHRcdFNlbGVjdENvbnRyb2wsXG5cdH0sXG5cdGFwaUZldGNoLFxuXHRlbGVtZW50OiB7XG5cdFx0Q29tcG9uZW50LFxuXHR9LFxuXHRpMThuOiB7XG5cdFx0X18sXG5cdH0sXG59ID0gd3A7XG5cbmNsYXNzIFNpbmdsZUZvcm1TZWxlY3QgZXh0ZW5kcyBDb21wb25lbnQge1xuXHQvKipcblx0ICogQ29uc3RydWN0b3Jcblx0ICogQHBhcmFtIHByb3BzXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIHByb3BzICk7XG5cblx0XHQvLyBTZXQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGNvbXBvbmVudC5cblx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0Zm9ybXM6IFtcblx0XHRcdFx0eyBsYWJlbDogX18oICdTZWxlY3QgYSBmb3JtJywgJ2NvbnN0YW50LWNvbnRhY3QnICksIHZhbHVlOiAwIH1cblx0XHRcdF1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWZ0ZXIgdGhlIGNvbXBvbmVudCBtb3VudHMsIHJldHJpZXZlIHRoZSBmb3JtcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGxvY2FsIGNvbXBvbmVudCBzdGF0ZS5cblx0ICovXG5cdGFzeW5jIGNvbXBvbmVudERpZE1vdW50KCkge1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBhcGlGZXRjaCggeyBwYXRoOiAnLz9yZXN0X3JvdXRlPS93cC92Mi9jdGN0X2Zvcm1zJyB9ICk7XG5cdFx0XHRjb25zdCBmb3JtcyA9IHJlc3VsdHMubWFwKCByZXN1bHQgPT4gKCB7IGxhYmVsOiByZXN1bHQudGl0bGUucmVuZGVyZWQsIHZhbHVlOiByZXN1bHQuaWQgfSApICk7XG5cdFx0XHR0aGlzLnNldFN0YXRlKCB7IGZvcm1zOiBbLi4udGhpcy5zdGF0ZS5mb3JtcywgLi4uZm9ybXMgXSB9ICk7XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdFUlJPUjogJywgZS5tZXNzYWdlICk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbmRlciB0aGUgR3V0ZW5iZXJnIGJsb2NrIGluIHRoZSBhZG1pbiBhcmVhLlxuXHQgKi9cblx0cmVuZGVyKCkge1xuXHRcdC8vIERlc3RydWN0dXJlIHRoZSBzZWxlY3RlZEZyb20gZnJvbSBwcm9wcy5cblx0XHRsZXQgeyBzZWxlY3RlZEZvcm0gfSA9IHRoaXMucHJvcHMuYXR0cmlidXRlcztcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImN0Y3QtYmxvY2stY29udGFpbmVyXCI+XG5cdFx0XHRcdDxoNCBjbGFzc05hbWU9XCJjdGN0LWJsb2NrLXRpdGxlXCI+eyBfXyggJ0NvbnN0YW50IENvbnRhY3QgRm9ybXMnLCAnY29uc3RhbnQtY29udGFjdCcgKSB9PC9oND5cblx0XHRcdFx0PHNtYWxsPnsgX18oICdDaG9vc2UgdGhlIGZvcm0gdG8gZGlzcGxheSB3aXRoIHRoZSBkcm9wZG93biBiZWxvdy4nLCAnY29uc3RhbnQtY29udGFjdCcgKSB9PC9zbWFsbD5cblx0XHRcdFx0PFNlbGVjdENvbnRyb2xcblx0XHRcdFx0XHR2YWx1ZT17IHNlbGVjdGVkRm9ybSB9XG5cdFx0XHRcdFx0b3B0aW9ucz17IHRoaXMuc3RhdGUuZm9ybXMgfVxuXHRcdFx0XHRcdG9uQ2hhbmdlPXsgdmFsdWUgPT4gdGhpcy5wcm9wcy5zZXRBdHRyaWJ1dGVzKCB7IHNlbGVjdGVkRm9ybTogdmFsdWUgfSApIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW5nbGVGb3JtU2VsZWN0O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0E7QUFUQTtBQUVBO0FBRUE7QUFHQTtBQUNBO0FBR0E7Ozs7O0FBQ0E7Ozs7QUFJQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUpBO0FBU0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUE7QUFBQTtBQUFBO0FBQ0E7O0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7Ozs7Ozs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUFHQTs7Ozs7O0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBRUE7QUFGQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQUpBO0FBV0E7Ozs7QUFoREE7QUFDQTtBQWtEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-gutenberg/components/single-form-select.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar _wp = wp,\n SelectControl = _wp.components.SelectControl,\n apiFetch = _wp.apiFetch,\n Component = _wp.element.Component,\n __ = _wp.i18n.__;\n\nvar SingleFormSelect = /*#__PURE__*/function (_Component) {\n _inherits(SingleFormSelect, _Component);\n\n var _super = _createSuper(SingleFormSelect);\n\n /**\n * Constructor\n * @param props\n */\n function SingleFormSelect(props) {\n var _this;\n\n _classCallCheck(this, SingleFormSelect);\n\n _this = _super.call(this, props); // Set the initial state of the component.\n\n _this.state = {\n forms: [{\n label: __('Select a form', 'constant-contact'),\n value: 0\n }]\n };\n return _this;\n }\n /**\n * After the component mounts, retrieve the forms and add them to the local component state.\n */\n\n\n _createClass(SingleFormSelect, [{\n key: \"componentDidMount\",\n value: function () {\n var _componentDidMount = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n var results, forms;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.prev = 0;\n _context.next = 3;\n return apiFetch({\n path: '/?rest_route=/wp/v2/ctct_forms'\n });\n\n case 3:\n results = _context.sent;\n forms = results.map(function (result) {\n return {\n label: result.title.rendered,\n value: result.id\n };\n });\n this.setState({\n forms: [].concat(_toConsumableArray(this.state.forms), _toConsumableArray(forms))\n });\n _context.next = 11;\n break;\n\n case 8:\n _context.prev = 8;\n _context.t0 = _context[\"catch\"](0);\n console.error('ERROR: ', _context.t0.message);\n\n case 11:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this, [[0, 8]]);\n }));\n\n function componentDidMount() {\n return _componentDidMount.apply(this, arguments);\n }\n\n return componentDidMount;\n }()\n /**\n * Render the Gutenberg block in the admin area.\n */\n\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n // Destructure the selectedFrom from props.\n var selectedForm = this.props.attributes.selectedForm;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"ctct-block-container\"\n }, /*#__PURE__*/React.createElement(\"h4\", {\n className: \"ctct-block-title\"\n }, __('Constant Contact Forms', 'constant-contact')), /*#__PURE__*/React.createElement(\"small\", null, __('Choose the form to display with the dropdown below.', 'constant-contact')), /*#__PURE__*/React.createElement(SelectControl, {\n value: selectedForm,\n options: this.state.forms,\n onChange: function onChange(value) {\n return _this2.props.setAttributes({\n selectedForm: value\n });\n }\n }));\n }\n }]);\n\n return SingleFormSelect;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SingleFormSelect);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tZ3V0ZW5iZXJnL2NvbXBvbmVudHMvc2luZ2xlLWZvcm0tc2VsZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2N0Y3QtcGx1Z2luLWd1dGVuYmVyZy9jb21wb25lbnRzL3NpbmdsZS1mb3JtLXNlbGVjdC5qcz9hNzkzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHtcblx0Y29tcG9uZW50czoge1xuXHRcdFNlbGVjdENvbnRyb2wsXG5cdH0sXG5cdGFwaUZldGNoLFxuXHRlbGVtZW50OiB7XG5cdFx0Q29tcG9uZW50LFxuXHR9LFxuXHRpMThuOiB7XG5cdFx0X18sXG5cdH0sXG59ID0gd3A7XG5cbmNsYXNzIFNpbmdsZUZvcm1TZWxlY3QgZXh0ZW5kcyBDb21wb25lbnQge1xuXHQvKipcblx0ICogQ29uc3RydWN0b3Jcblx0ICogQHBhcmFtIHByb3BzXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIHByb3BzICk7XG5cblx0XHQvLyBTZXQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGNvbXBvbmVudC5cblx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0Zm9ybXM6IFtcblx0XHRcdFx0eyBsYWJlbDogX18oICdTZWxlY3QgYSBmb3JtJywgJ2NvbnN0YW50LWNvbnRhY3QnICksIHZhbHVlOiAwIH1cblx0XHRcdF1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWZ0ZXIgdGhlIGNvbXBvbmVudCBtb3VudHMsIHJldHJpZXZlIHRoZSBmb3JtcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGxvY2FsIGNvbXBvbmVudCBzdGF0ZS5cblx0ICovXG5cdGFzeW5jIGNvbXBvbmVudERpZE1vdW50KCkge1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBhcGlGZXRjaCggeyBwYXRoOiAnLz9yZXN0X3JvdXRlPS93cC92Mi9jdGN0X2Zvcm1zJyB9ICk7XG5cdFx0XHRjb25zdCBmb3JtcyA9IHJlc3VsdHMubWFwKCByZXN1bHQgPT4gKCB7IGxhYmVsOiByZXN1bHQudGl0bGUucmVuZGVyZWQsIHZhbHVlOiByZXN1bHQuaWQgfSApICk7XG5cdFx0XHR0aGlzLnNldFN0YXRlKCB7IGZvcm1zOiBbLi4udGhpcy5zdGF0ZS5mb3JtcywgLi4uZm9ybXMgXSB9ICk7XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdFUlJPUjogJywgZS5tZXNzYWdlICk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbmRlciB0aGUgR3V0ZW5iZXJnIGJsb2NrIGluIHRoZSBhZG1pbiBhcmVhLlxuXHQgKi9cblx0cmVuZGVyKCkge1xuXHRcdC8vIERlc3RydWN0dXJlIHRoZSBzZWxlY3RlZEZyb20gZnJvbSBwcm9wcy5cblx0XHRsZXQgeyBzZWxlY3RlZEZvcm0gfSA9IHRoaXMucHJvcHMuYXR0cmlidXRlcztcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImN0Y3QtYmxvY2stY29udGFpbmVyXCI+XG5cdFx0XHRcdDxoNCBjbGFzc05hbWU9XCJjdGN0LWJsb2NrLXRpdGxlXCI+eyBfXyggJ0NvbnN0YW50IENvbnRhY3QgRm9ybXMnLCAnY29uc3RhbnQtY29udGFjdCcgKSB9PC9oND5cblx0XHRcdFx0PHNtYWxsPnsgX18oICdDaG9vc2UgdGhlIGZvcm0gdG8gZGlzcGxheSB3aXRoIHRoZSBkcm9wZG93biBiZWxvdy4nLCAnY29uc3RhbnQtY29udGFjdCcgKSB9PC9zbWFsbD5cblx0XHRcdFx0PFNlbGVjdENvbnRyb2xcblx0XHRcdFx0XHR2YWx1ZT17IHNlbGVjdGVkRm9ybSB9XG5cdFx0XHRcdFx0b3B0aW9ucz17IHRoaXMuc3RhdGUuZm9ybXMgfVxuXHRcdFx0XHRcdG9uQ2hhbmdlPXsgdmFsdWUgPT4gdGhpcy5wcm9wcy5zZXRBdHRyaWJ1dGVzKCB7IHNlbGVjdGVkRm9ybTogdmFsdWUgfSApIH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW5nbGVGb3JtU2VsZWN0O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQVRBO0FBRUE7QUFFQTtBQUdBO0FBQ0E7QUFHQTs7Ozs7QUFDQTs7OztBQUlBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSkE7QUFTQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7O0FBTUE7QUFBQTtBQUFBO0FBQ0E7O0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7Ozs7Ozs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUFHQTs7Ozs7O0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBT0E7Ozs7QUFoREE7QUFDQTtBQWtEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-gutenberg/components/single-form-select.js\n"); /***/ }), diff --git a/assets/js/ctct-plugin-recaptcha-v2.js b/assets/js/ctct-plugin-recaptcha-v2.js index 3b2560ac..71251197 100644 --- a/assets/js/ctct-plugin-recaptcha-v2.js +++ b/assets/js/ctct-plugin-recaptcha-v2.js @@ -81,7 +81,7 @@ /******/ /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 5); +/******/ return __webpack_require__(__webpack_require__.s = 4); /******/ }) /************************************************************************/ /******/ ({ @@ -109,7 +109,7 @@ eval("var ctctEnableBtn = function ctctEnableBtn(index) {\n jQuery(jQuery(\".ct /***/ }), -/***/ 5: +/***/ 4: /*!***********************************************************!*\ !*** multi ./assets/js/ctct-plugin-recaptcha-v2/index.js ***! \***********************************************************/ From 87972076349544dc158259b5a4c1eada1eb317e9 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Wed, 24 Jun 2020 11:20:48 -0600 Subject: [PATCH 04/29] Fix display of class on inputs CC-162 --- includes/class-display.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index f08a7b7d..6756a42d 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -1019,19 +1019,19 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label $classes[] = 'ctct-invalid'; } + $classes[] = $f_id; $class_attr = ''; if ( count( $classes ) ) { $class_attr = 'class="' . implode( ' ', $classes ) . '"'; } - $field = ''; + $field = ''; $markup .= sprintf( $field, $req_text, $type, $f_id, - $f_id, $input_inline_styles, $value, $max_length, From e190ded477c75416ae90bf1d7d4c114f1a6c0b08 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Wed, 24 Jun 2020 11:28:24 -0600 Subject: [PATCH 05/29] Properly target submit button on recaptcha update CC-162 --- assets/js/ctct-plugin-recaptcha-v2.js | 2 +- .../js/ctct-plugin-recaptcha-v2/recaptcha.js | 30 +++++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/assets/js/ctct-plugin-recaptcha-v2.js b/assets/js/ctct-plugin-recaptcha-v2.js index 71251197..a9254991 100644 --- a/assets/js/ctct-plugin-recaptcha-v2.js +++ b/assets/js/ctct-plugin-recaptcha-v2.js @@ -105,7 +105,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _rec /*! no static exports found */ /***/ (function(module, exports) { -eval("var ctctEnableBtn = function ctctEnableBtn(index) {\n jQuery(jQuery(\".ctct-submit\")[index]).attr(\"disabled\", false);\n};\n\nwindow.ctctEnableBtn = ctctEnableBtn;\n\nvar ctctDisableBtn = function ctctDisableBtn(index) {\n jQuery(jQuery(\".ctct-submit\")[index]).attr(\"disabled\", \"disabled\");\n};\n\nwindow.ctctDisableBtn = ctctDisableBtn;\n\nvar renderReCaptcha = function renderReCaptcha() {\n jQuery('.g-recaptcha').each(function (index, el) {\n grecaptcha.render(el, {\n 'sitekey': jQuery(el).attr('data-sitekey'),\n 'size': jQuery(el).attr('data-size'),\n 'tabindex': jQuery(el).attr('data-tabindex'),\n 'callback': function callback() {\n window.ctctEnableBtn(index);\n },\n 'expired-callback': function expiredCallback() {\n window.ctctDisableBtn(index);\n },\n 'isolated': true\n });\n });\n};\n\nwindow.renderReCaptcha = renderReCaptcha;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tcmVjYXB0Y2hhLXYyL3JlY2FwdGNoYS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jdGN0LXBsdWdpbi1yZWNhcHRjaGEtdjIvcmVjYXB0Y2hhLmpzPzlhNDQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0Y3RFbmFibGVCdG4gPSBmdW5jdGlvbiggaW5kZXggKSB7XG4gICAgalF1ZXJ5KCBqUXVlcnkoIFwiLmN0Y3Qtc3VibWl0XCIgKVsgaW5kZXggXSApLmF0dHIoIFwiZGlzYWJsZWRcIiwgZmFsc2UgKTtcbn1cbndpbmRvdy5jdGN0RW5hYmxlQnRuID0gY3RjdEVuYWJsZUJ0bjtcblxudmFyIGN0Y3REaXNhYmxlQnRuID0gZnVuY3Rpb24oIGluZGV4ICkge1xuICAgIGpRdWVyeSggalF1ZXJ5KCBcIi5jdGN0LXN1Ym1pdFwiIClbIGluZGV4IF0gKS5hdHRyKCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiApO1xufVxud2luZG93LmN0Y3REaXNhYmxlQnRuID0gY3RjdERpc2FibGVCdG47XG5cbnZhciByZW5kZXJSZUNhcHRjaGEgPSBmdW5jdGlvbigpIHtcbiAgICBqUXVlcnkoICcuZy1yZWNhcHRjaGEnICkuZWFjaCggZnVuY3Rpb24oIGluZGV4LCBlbCApIHtcbiAgICAgICAgZ3JlY2FwdGNoYS5yZW5kZXIoIGVsLCB7XG4gICAgICAgICAgICAnc2l0ZWtleSc6IGpRdWVyeSggZWwgKS5hdHRyKCAnZGF0YS1zaXRla2V5JyApLFxuICAgICAgICAgICAgJ3NpemUnOiBqUXVlcnkoIGVsICkuYXR0ciggJ2RhdGEtc2l6ZScgKSxcbiAgICAgICAgICAgICd0YWJpbmRleCc6IGpRdWVyeSggZWwgKS5hdHRyKCAnZGF0YS10YWJpbmRleCcgKSxcbiAgICAgICAgICAgICdjYWxsYmFjayc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5jdGN0RW5hYmxlQnRuKCBpbmRleCApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdleHBpcmVkLWNhbGxiYWNrJzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmN0Y3REaXNhYmxlQnRuKCBpbmRleCApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdpc29sYXRlZCc6IHRydWUsXG4gICAgICAgIH0gKTtcbiAgICB9ICk7XG59O1xud2luZG93LnJlbmRlclJlQ2FwdGNoYSA9IHJlbmRlclJlQ2FwdGNoYTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-recaptcha-v2/recaptcha.js\n"); +eval("/**\n * Enable submit button.\n *\n * @author Rebekah Van Epps \n * @since 1.8.3\n *\n * @param {Object} submitBtn Submit DOM element.\n */\nvar ctctEnableBtn = function ctctEnableBtn(submitBtn) {\n jQuery(submitBtn).attr(\"disabled\", false);\n};\n\nwindow.ctctEnableBtn = ctctEnableBtn;\n/**\n * Disable submit button.\n *\n * @author Rebekah Van Epps \n * @since 1.8.3\n *\n * @param {Object} submitBtn Submit DOM element.\n */\n\nvar ctctDisableBtn = function ctctDisableBtn(submitBtn) {\n jQuery(submitBtn).attr(\"disabled\", \"disabled\");\n};\n\nwindow.ctctDisableBtn = ctctDisableBtn;\n\nvar renderReCaptcha = function renderReCaptcha() {\n jQuery('.g-recaptcha').each(function (index, el) {\n var submitBtn = jQuery(el).siblings('.ctct-form-field-submit').find('.ctct-submit');\n grecaptcha.render(el, {\n 'sitekey': jQuery(el).attr('data-sitekey'),\n 'size': jQuery(el).attr('data-size'),\n 'tabindex': jQuery(el).attr('data-tabindex'),\n 'callback': function callback() {\n window.ctctEnableBtn(submitBtn);\n },\n 'expired-callback': function expiredCallback() {\n window.ctctDisableBtn(submitBtn);\n },\n 'isolated': true\n });\n });\n};\n\nwindow.renderReCaptcha = renderReCaptcha;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tcmVjYXB0Y2hhLXYyL3JlY2FwdGNoYS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jdGN0LXBsdWdpbi1yZWNhcHRjaGEtdjIvcmVjYXB0Y2hhLmpzPzlhNDQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbmFibGUgc3VibWl0IGJ1dHRvbi5cbiAqXG4gKiBAYXV0aG9yIFJlYmVrYWggVmFuIEVwcHMgPHJlYmVrYWgudmFuZXBwc0B3ZWJkZXZzdHVkaW9zLmNvbT5cbiAqIEBzaW5jZSAgMS44LjNcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IHN1Ym1pdEJ0biBTdWJtaXQgRE9NIGVsZW1lbnQuXG4gKi9cbnZhciBjdGN0RW5hYmxlQnRuID0gZnVuY3Rpb24oIHN1Ym1pdEJ0biApIHtcbiAgICBqUXVlcnkoIHN1Ym1pdEJ0biApLmF0dHIoIFwiZGlzYWJsZWRcIiwgZmFsc2UgKTtcbn1cbndpbmRvdy5jdGN0RW5hYmxlQnRuID0gY3RjdEVuYWJsZUJ0bjtcblxuLyoqXG4gKiBEaXNhYmxlIHN1Ym1pdCBidXR0b24uXG4gKlxuICogQGF1dGhvciBSZWJla2FoIFZhbiBFcHBzIDxyZWJla2FoLnZhbmVwcHNAd2ViZGV2c3R1ZGlvcy5jb20+XG4gKiBAc2luY2UgIDEuOC4zXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBzdWJtaXRCdG4gU3VibWl0IERPTSBlbGVtZW50LlxuICovXG52YXIgY3RjdERpc2FibGVCdG4gPSBmdW5jdGlvbiggc3VibWl0QnRuICkge1xuICAgIGpRdWVyeSggc3VibWl0QnRuICkuYXR0ciggXCJkaXNhYmxlZFwiLCBcImRpc2FibGVkXCIgKTtcbn1cbndpbmRvdy5jdGN0RGlzYWJsZUJ0biA9IGN0Y3REaXNhYmxlQnRuO1xuXG52YXIgcmVuZGVyUmVDYXB0Y2hhID0gZnVuY3Rpb24oKSB7XG4gICAgalF1ZXJ5KCAnLmctcmVjYXB0Y2hhJyApLmVhY2goIGZ1bmN0aW9uKCBpbmRleCwgZWwgKSB7XG4gICAgICAgIGNvbnN0IHN1Ym1pdEJ0biA9IGpRdWVyeSggZWwgKS5zaWJsaW5ncyggJy5jdGN0LWZvcm0tZmllbGQtc3VibWl0JyApLmZpbmQoICcuY3RjdC1zdWJtaXQnICk7XG5cbiAgICAgICAgZ3JlY2FwdGNoYS5yZW5kZXIoIGVsLCB7XG4gICAgICAgICAgICAnc2l0ZWtleSc6IGpRdWVyeSggZWwgKS5hdHRyKCAnZGF0YS1zaXRla2V5JyApLFxuICAgICAgICAgICAgJ3NpemUnOiBqUXVlcnkoIGVsICkuYXR0ciggJ2RhdGEtc2l6ZScgKSxcbiAgICAgICAgICAgICd0YWJpbmRleCc6IGpRdWVyeSggZWwgKS5hdHRyKCAnZGF0YS10YWJpbmRleCcgKSxcbiAgICAgICAgICAgICdjYWxsYmFjayc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5jdGN0RW5hYmxlQnRuKCBzdWJtaXRCdG4gKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZXhwaXJlZC1jYWxsYmFjayc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5jdGN0RGlzYWJsZUJ0biggc3VibWl0QnRuICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2lzb2xhdGVkJzogdHJ1ZSxcbiAgICAgICAgfSApO1xuICAgIH0gKTtcbn07XG53aW5kb3cucmVuZGVyUmVDYXB0Y2hhID0gcmVuZGVyUmVDYXB0Y2hhO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-recaptcha-v2/recaptcha.js\n"); /***/ }), diff --git a/assets/js/ctct-plugin-recaptcha-v2/recaptcha.js b/assets/js/ctct-plugin-recaptcha-v2/recaptcha.js index cf6e67e9..fe882bd3 100644 --- a/assets/js/ctct-plugin-recaptcha-v2/recaptcha.js +++ b/assets/js/ctct-plugin-recaptcha-v2/recaptcha.js @@ -1,24 +1,42 @@ -var ctctEnableBtn = function( index ) { - jQuery( jQuery( ".ctct-submit" )[ index ] ).attr( "disabled", false ); +/** + * Enable submit button. + * + * @author Rebekah Van Epps + * @since 1.8.3 + * + * @param {Object} submitBtn Submit DOM element. + */ +var ctctEnableBtn = function( submitBtn ) { + jQuery( submitBtn ).attr( "disabled", false ); } window.ctctEnableBtn = ctctEnableBtn; -var ctctDisableBtn = function( index ) { - jQuery( jQuery( ".ctct-submit" )[ index ] ).attr( "disabled", "disabled" ); +/** + * Disable submit button. + * + * @author Rebekah Van Epps + * @since 1.8.3 + * + * @param {Object} submitBtn Submit DOM element. + */ +var ctctDisableBtn = function( submitBtn ) { + jQuery( submitBtn ).attr( "disabled", "disabled" ); } window.ctctDisableBtn = ctctDisableBtn; var renderReCaptcha = function() { jQuery( '.g-recaptcha' ).each( function( index, el ) { + const submitBtn = jQuery( el ).siblings( '.ctct-form-field-submit' ).find( '.ctct-submit' ); + grecaptcha.render( el, { 'sitekey': jQuery( el ).attr( 'data-sitekey' ), 'size': jQuery( el ).attr( 'data-size' ), 'tabindex': jQuery( el ).attr( 'data-tabindex' ), 'callback': function() { - window.ctctEnableBtn( index ); + window.ctctEnableBtn( submitBtn ); }, 'expired-callback': function() { - window.ctctDisableBtn( index ); + window.ctctDisableBtn( submitBtn ); }, 'isolated': true, } ); From 8836c76afcb10df64cea43c4e63fc40cce7869c2 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Wed, 24 Jun 2020 12:10:13 -0600 Subject: [PATCH 06/29] Remove unused data key CC-162 --- includes/class-api.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/includes/class-api.php b/includes/class-api.php index 9d831003..670b0563 100644 --- a/includes/class-api.php +++ b/includes/class-api.php @@ -509,6 +509,11 @@ public function add_contact( $new_contact = [], $form_id = 0 ) { try { $response = $this->cc()->contactService->getContacts( $api_token, [ 'email' => $email ] ); + // Remove ctct-instance if present to avoid errors. + if ( array_key_exists( 'ctct-instance', $new_contact ) ) { + unset( $new_contact['ctct-instance'] ); + } + if ( isset( $response->results ) && ! empty( $response->results ) ) { constant_contact_maybe_log_it( 'API', 'Contact set to be updated', [ 'form' => get_the_title( $form_id ) ] ); $return_contact = $this->update_contact( $response, $api_token, $list, $new_contact, $form_id ); From d48fff4ab0ca85327dcba0c042af566c3f266c27 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 09:33:58 -0600 Subject: [PATCH 07/29] Change display f_id to field_key for clarity CC-162 --- includes/class-display.php | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 6756a42d..00e387e0 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -951,7 +951,7 @@ public function get_label( $f_id, $field_label ) { */ public function input( $type = 'text', $name = '', $id = '', $value = '', $label = '', $req = false, $f_only = false, $field_error = false, $form_id = 0, $label_placement = '' ) { $name = sanitize_text_field( $name ); - $f_id = sanitize_title( $id ); + $field_key = sanitize_title( $id ); $input_inline_styles = ''; $label_placement_class = 'ctct-label-' . $label_placement; $specific_form_styles = $this->specific_form_styles; @@ -966,7 +966,7 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label $label = sanitize_text_field( $label ); $req_text = $req ? 'required' : ''; - $markup = $this->field_top( $type, $name, $f_id, $label, $req ); + $markup = $this->field_top( $type, $name, $field_key, $label, $req ); $req_label = ''; @@ -979,7 +979,7 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label } else { $markup .= ''; } - $markup .= $this->get_label( $f_id, $name . ' ' . $req_label ); + $markup .= $this->get_label( $field_key, $name . ' ' . $req_label ); $markup .= ''; } @@ -994,13 +994,13 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label * Filter to add classes for the rendering input. * * @since 1.2.0 - * @param array $classes Array of classes to apply to the field. - * @param string $type The field type being rendered. - * @param int $form_id Form ID. - * @param int $f_id Field ID. + * @param array $classes Array of classes to apply to the field. + * @param string $type The field type being rendered. + * @param int $form_id Form ID. + * @param int $field_key Field ID. * @return array */ - $classes = apply_filters( 'constant_contact_input_classes', $classes, $type, $form_id, $f_id ); + $classes = apply_filters( 'constant_contact_input_classes', $classes, $type, $form_id, $field_key ); /** * Filters whether or not to remove characters from potential maxlength attribute value. @@ -1019,19 +1019,20 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label $classes[] = 'ctct-invalid'; } - $classes[] = $f_id; + $classes[] = $field_key; $class_attr = ''; if ( count( $classes ) ) { $class_attr = 'class="' . implode( ' ', $classes ) . '"'; } - $field = ''; + $field = ''; $markup .= sprintf( $field, $req_text, $type, - $f_id, + $field_key, + $field_key, $input_inline_styles, $value, $max_length, @@ -1044,7 +1045,7 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label if ( ( 'bottom' === $label_placement || 'right' === $label_placement ) && ( 'submit' !== $type ) && ( 'hidden' !== $type ) ) { $markup .= ''; - $markup .= $this->get_label( $f_id, $name . ' ' . $req_label ); + $markup .= $this->get_label( $field_key, $name . ' ' . $req_label ); $markup .= ''; } From f1c31db843051e24aa6f3f80c92032bed1f14c55 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 09:45:38 -0600 Subject: [PATCH 08/29] Pass instance var through to input methods CC-162 --- includes/class-display.php | 135 +++++++++++++++++++------------------ 1 file changed, 71 insertions(+), 64 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 00e387e0..3f218884 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -346,7 +346,7 @@ public function form( $form_data, $form_id = '', $show_title = false, $instance $return .= $form_err_display; - $return .= $this->build_form_fields( $form_data, $old_values, $req_errors ); + $return .= $this->build_form_fields( $form_data, $old_values, $req_errors, $instance ); if ( ! $disable_recaptcha && ConstantContact_reCAPTCHA::has_recaptcha_keys() ) { $recaptcha_version = ctct_get_settings_option( '_ctct_recaptcha_version', '' ); @@ -459,12 +459,13 @@ public function add_verify_fields( $form_data ) { * * @since 1.0.0 * - * @param array $form_data Formulated cmb2 data for form. - * @param array $old_values Original values. - * @param array $req_errors Errors. + * @param array $form_data Formulated cmb2 data for form. + * @param array $old_values Original values. + * @param array $req_errors Errors. + * @param int $instance Current form instance. * @return string */ - public function build_form_fields( $form_data, $old_values, $req_errors ) { + public function build_form_fields( $form_data, $old_values, $req_errors, $instance ) { $return = ''; $form_id = absint( $form_data['options']['form_id'] ); @@ -482,7 +483,7 @@ public function build_form_fields( $form_data, $old_values, $req_errors ) { if ( isset( $form_data['fields'] ) && is_array( $form_data['fields'] ) ) { foreach ( $form_data['fields'] as $key => $value ) { - $return .= $this->field( $value, $old_values, $req_errors, $form_id, $label_placement ); + $return .= $this->field( $value, $old_values, $req_errors, $form_id, $label_placement, $instance ); } } @@ -607,14 +608,15 @@ public function must_opt_in( array $form_data ) { * @since 1.0.0 * @since 1.4.0 Added label placement parameter. * - * @param array $field Field data. - * @param array $old_values Original values. - * @param array $req_errors Errors. - * @param int $form_id Current form ID. - * @param string $label_placement Label placement location. - * @return string HTML markup + * @param array $field Field data. + * @param array $old_values Original values. + * @param array $req_errors Errors. + * @param int $form_id Current form ID. + * @param string $label_placement Label placement location. + * @param int $instance Current form instance. + * @return string HTML markup */ - public function field( $field, $old_values = [], $req_errors = [], $form_id = 0, $label_placement = 'top' ) { + public function field( $field, $old_values = [], $req_errors = [], $form_id = 0, $label_placement = 'top', $instance = 0 ) { if ( ! isset( $field['name'] ) || ! isset( $field['map_to'] ) ) { return ''; } @@ -678,23 +680,23 @@ public function field( $field, $old_values = [], $req_errors = [], $form_id = 0, case 'company': case 'website': case 'text_field': - return $this->input( 'text', $name, $map, $value, $desc, $req, false, $field_error, $form_id, $label_placement ); + return $this->input( 'text', $name, $map, $value, $desc, $req, false, $field_error, $form_id, $label_placement, $instance ); case 'custom_text_area': - return $this->textarea( $name, $map, $value, $desc, $req, $field_error, 'maxlength="500"', $label_placement ); + return $this->textarea( $name, $map, $value, $desc, $req, $field_error, 'maxlength="500"', $label_placement, $instance ); case 'email': - return $this->input( 'email', $name, $map, $value, $desc, $req, false, $field_error, $form_id, $label_placement ); + return $this->input( 'email', $name, $map, $value, $desc, $req, false, $field_error, $form_id, $label_placement, $instance ); case 'hidden': return $this->input( 'hidden', $name, $map, $value, $desc, $req ); case 'checkbox': - return $this->checkbox( $name, $map, $value, $desc ); + return $this->checkbox( $name, $map, $value, $desc, $instance ); case 'submit': return $this->input( 'submit', $name, $map, $value, $desc, $req, false, $field_error ); case 'address': - return $this->address( $name, $map, $value, $desc, $req, $field_error, $label_placement ); + return $this->address( $name, $map, $value, $desc, $req, $field_error, $label_placement, $instance ); case 'anniversery': case 'birthday': // Need this to be month / day / year. - return $this->dates( $name, $map, $value, $desc, $req, $field_error ); + return $this->dates( $name, $map, $value, $desc, $req, $field_error, $instance ); default: return $this->input( 'text', $name, $map, $value, $desc, $req, false, $field_error ); } @@ -937,19 +939,20 @@ public function get_label( $f_id, $field_label ) { * * @since 1.0.0 * - * @param string $type Type of form field. - * @param string $name ID of form field. - * @param string $id ID attribute value. - * @param string $value pre-filled value. - * @param string $label label text for input. - * @param boolean $req If field required. - * @param boolean $f_only If we only return the field itself, with no label. - * @param boolean $field_error Field error. - * @param int $form_id Current form ID. - * @param string $label_placement Where to place the label. - * @return string HTML markup for field. + * @param string $type Type of form field. + * @param string $name ID of form field. + * @param string $id ID attribute value. + * @param string $value pre-filled value. + * @param string $label label text for input. + * @param boolean $req If field required. + * @param boolean $f_only If we only return the field itself, with no label. + * @param boolean $field_error Field error. + * @param int $form_id Current form ID. + * @param string $label_placement Where to place the label. + * @param int $instance Current form instance. + * @return string HTML markup for field. */ - public function input( $type = 'text', $name = '', $id = '', $value = '', $label = '', $req = false, $f_only = false, $field_error = false, $form_id = 0, $label_placement = '' ) { + public function input( $type = 'text', $name = '', $id = '', $value = '', $label = '', $req = false, $f_only = false, $field_error = false, $form_id = 0, $label_placement = '', $instance = 0 ) { $name = sanitize_text_field( $name ); $field_key = sanitize_title( $id ); $input_inline_styles = ''; @@ -1067,13 +1070,14 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label * * @since 1.0.0 * - * @param string $name Name/it of field. - * @param string $f_id Field ID. - * @param string $value Value of field. - * @param string $label Label / desc text. - * @return string HTML markup for checkbox. + * @param string $name Name/it of field. + * @param string $f_id Field ID. + * @param string $value Value of field. + * @param string $label Label / desc text. + * @param int $instance Current form instance. + * @return string HTML markup for checkbox. */ - public function checkbox( $name = '', $f_id = '', $value = '', $label = '' ) { + public function checkbox( $name = '', $f_id = '', $value = '', $label = '', $instance = 0 ) { $name = sanitize_text_field( $name ); $f_id = sanitize_title( $f_id ); $value = sanitize_text_field( $value ); @@ -1216,16 +1220,17 @@ public function get_optin_markup( $label, $value, $show ) { * * @since 1.0.0 * - * @param string $name Name of fields. - * @param string $f_id Form ID name. - * @param array $value Values of each field. - * @param string $desc Label of field. - * @param boolean $req Whether or not required. - * @param string $field_error Field error value. - * @param string $label_placement Where to put the label. - * @return string field HTML markup. + * @param string $name Name of fields. + * @param string $f_id Form ID name. + * @param array $value Values of each field. + * @param string $desc Label of field. + * @param boolean $req Whether or not required. + * @param string $field_error Field error value. + * @param string $label_placement Where to put the label. + * @param int $instance Current form instance. + * @return string HTML markup. */ - public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = false, $field_error = '', $label_placement = 'top' ) { + public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = false, $field_error = '', $label_placement = 'top', $instance = 0 ) { $street = esc_html__( 'Street Address', 'constant-contact-forms' ); $line_2 = esc_html__( 'Address Line 2', 'constant-contact-forms' ); $city = esc_html__( 'City', 'constant-contact-forms' ); @@ -1405,15 +1410,16 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = * * @since 1.0.0 * - * @param string $name Name of field. - * @param string $f_id Field ID. - * @param array $value Values to pre-fill. - * @param string $desc Description of fields. - * @param boolean $req If is required. - * @param string $field_error Field error text. - * @return string Fields HTML markup. + * @param string $name Name of field. + * @param string $f_id Field ID. + * @param array $value Values to pre-fill. + * @param string $desc Description of fields. + * @param boolean $req If is required. + * @param string $field_error Field error text. + * @param int $instance Current form instance. + * @return string Fields HTML markup. */ - public function dates( $name = '', $f_id = '', $value = [], $desc = '', $req = false, $field_error = '' ) { + public function dates( $name = '', $f_id = '', $value = [], $desc = '', $req = false, $field_error = '', $instance = 0 ) { $month = esc_html__( 'Month', 'constant-contact-forms' ); $day = esc_html__( 'Day', 'constant-contact-forms' ); $year = esc_html__( 'Year', 'constant-contact-forms' ); @@ -1601,17 +1607,18 @@ public function get_days() { * * @since 1.0.0 * - * @param string $name Name of field. - * @param string $map ID of field. - * @param string $value Previous value of field. - * @param string $desc Description/label of field. - * @param boolean $req If is required. - * @param string $field_error Error from field. - * @param string $extra_attrs Extra attributes to append. - * @param string $label_placement Where to place the label. - * @return string HTML markup. + * @param string $name Name of field. + * @param string $map ID of field. + * @param string $value Previous value of field. + * @param string $desc Description/label of field. + * @param boolean $req If is required. + * @param string $field_error Error from field. + * @param string $extra_attrs Extra attributes to append. + * @param string $label_placement Where to place the label. + * @param int $instance Current form instance. + * @return string HTML markup. */ - public function textarea( $name = '', $map = '', $value = '', $desc = '', $req = false, $field_error = '', $extra_attrs = '', $label_placement = 'top' ) { + public function textarea( $name = '', $map = '', $value = '', $desc = '', $req = false, $field_error = '', $extra_attrs = '', $label_placement = 'top', $instance = 0 ) { $classes = [ 'ctct-form-field' ]; $textarea_classes = [ 'ctct-textarea' ]; From a910c8aec6616331f4f4c6cd53de3dad32cecd82 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 09:53:16 -0600 Subject: [PATCH 09/29] Create new field ID var and use for field ID and label CC-162 --- includes/class-display.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 3f218884..0634db4a 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -955,6 +955,7 @@ public function get_label( $f_id, $field_label ) { public function input( $type = 'text', $name = '', $id = '', $value = '', $label = '', $req = false, $f_only = false, $field_error = false, $form_id = 0, $label_placement = '', $instance = 0 ) { $name = sanitize_text_field( $name ); $field_key = sanitize_title( $id ); + $field_id = "{$field_key}_$instance"; $input_inline_styles = ''; $label_placement_class = 'ctct-label-' . $label_placement; $specific_form_styles = $this->specific_form_styles; @@ -982,7 +983,7 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label } else { $markup .= ''; } - $markup .= $this->get_label( $field_key, $name . ' ' . $req_label ); + $markup .= $this->get_label( $field_id, $name . ' ' . $req_label ); $markup .= ''; } @@ -1035,7 +1036,7 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label $req_text, $type, $field_key, - $field_key, + $field_id, $input_inline_styles, $value, $max_length, @@ -1048,12 +1049,12 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label if ( ( 'bottom' === $label_placement || 'right' === $label_placement ) && ( 'submit' !== $type ) && ( 'hidden' !== $type ) ) { $markup .= ''; - $markup .= $this->get_label( $field_key, $name . ' ' . $req_label ); + $markup .= $this->get_label( $field_id, $name . ' ' . $req_label ); $markup .= ''; } if ( $field_error ) { - $markup .= $this->field_bottom( $id, $field_error ); + $markup .= $this->field_bottom( $field_id, $field_error ); } else { $markup .= $this->field_bottom(); } From 17ea5217d6df6be7ffc3de508b0d45cc208b5970 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 09:58:53 -0600 Subject: [PATCH 10/29] Implement field id w/ instance for textarea CC-162 --- includes/class-display.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 0634db4a..efcdad33 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -1623,8 +1623,8 @@ public function textarea( $name = '', $map = '', $value = '', $desc = '', $req = $classes = [ 'ctct-form-field' ]; $textarea_classes = [ 'ctct-textarea' ]; - - $req_text = $req ? 'required' : ''; + $field_id = "{$map}_{$instance}"; + $req_text = $req ? 'required' : ''; if ( $req ) { $classes[] = 'ctct-form-field-required'; @@ -1640,8 +1640,8 @@ public function textarea( $name = '', $map = '', $value = '', $desc = '', $req = } $return = '

'; - $label = ''; - $textarea = ''; + $label = ''; + $textarea = ''; if ( 'top' === $label_placement || 'left' === $label_placement || 'hidden' === $label_placement ) { $return .= $label . $textarea; @@ -1652,7 +1652,7 @@ public function textarea( $name = '', $map = '', $value = '', $desc = '', $req = } if ( $field_error ) { - $return .= ''; + $return .= ''; } return $return . '

'; From 29c81de962ee6e493389eb5ea447fb27ff648354 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 09:59:53 -0600 Subject: [PATCH 11/29] Change display f_id to field_key for clarity CC-162 --- includes/class-display.php | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index efcdad33..9e3cf85a 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -1079,13 +1079,12 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label * @return string HTML markup for checkbox. */ public function checkbox( $name = '', $f_id = '', $value = '', $label = '', $instance = 0 ) { - $name = sanitize_text_field( $name ); - $f_id = sanitize_title( $f_id ); - $value = sanitize_text_field( $value ); - $label = esc_attr( $label ); - $type = 'checkbox'; - - $classes = [ 'ctct-' . esc_attr( $type ) ]; + $name = sanitize_text_field( $name ); + $field_key = sanitize_title( $field_key ); + $value = sanitize_text_field( $value ); + $label = esc_attr( $label ); + $type = 'checkbox'; + $classes = [ 'ctct-' . esc_attr( $type ) ]; /** * Filter to add classes for the rendering input. @@ -1095,10 +1094,10 @@ public function checkbox( $name = '', $f_id = '', $value = '', $label = '', $ins * @param string $type The field type being rendered. * @return array */ - $classes = apply_filters( 'constant_contact_input_classes', $classes, $type ); // @todo if/when we start using the checkbox field type, pass in a $form_id and $f_id value. + $classes = apply_filters( 'constant_contact_input_classes', $classes, $type ); // @todo if/when we start using the checkbox field type, pass in a $form_id and $field_key value. - $markup = $this->field_top( $type, $name, $f_id, $label, false, false ); - $markup .= ''; + $markup = $this->field_top( $type, $name, $field_key, $label, false, false ); + $markup .= ''; $markup .= $this->field_bottom( $name, ' ' . $label ); return $markup; From fd8c4a1982ee0d22f6a0d1a0a978de924f8fafd4 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 10:00:38 -0600 Subject: [PATCH 12/29] Implement field id w/ instance for checkbox CC-162 --- includes/class-display.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 9e3cf85a..4206f4ef 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -1081,6 +1081,7 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label public function checkbox( $name = '', $f_id = '', $value = '', $label = '', $instance = 0 ) { $name = sanitize_text_field( $name ); $field_key = sanitize_title( $field_key ); + $field_id = "{$field_key}_{$instance}"; $value = sanitize_text_field( $value ); $label = esc_attr( $label ); $type = 'checkbox'; @@ -1096,8 +1097,8 @@ public function checkbox( $name = '', $f_id = '', $value = '', $label = '', $ins */ $classes = apply_filters( 'constant_contact_input_classes', $classes, $type ); // @todo if/when we start using the checkbox field type, pass in a $form_id and $field_key value. - $markup = $this->field_top( $type, $name, $field_key, $label, false, false ); - $markup .= ''; + $markup = $this->field_top( $type, $name, $field_id, $label, false, false ); + $markup .= ''; $markup .= $this->field_bottom( $name, ' ' . $label ); return $markup; From 30644a105c0d8ca6abf3d5ad6fd6b8c4e4ea37e6 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 10:26:57 -0600 Subject: [PATCH 13/29] Pass instance to date helper method CC-162 --- includes/class-display.php | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 4206f4ef..b8d77c5a 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -1434,13 +1434,13 @@ public function dates( $name = '', $f_id = '', $value = [], $desc = '', $req = f $return = '

'; $return .= ' ' . esc_attr( $name ) . ''; $return .= '
'; - $return .= $this->get_date_dropdown( $month, $f_id, 'month', $v_month, $req ); + $return .= $this->get_date_dropdown( $month, $f_id, 'month', $v_month, $req, $instance ); $return .= '
'; $return .= '
'; - $return .= $this->get_date_dropdown( $day, $f_id, 'day', $v_day, $req ); + $return .= $this->get_date_dropdown( $day, $f_id, 'day', $v_day, $req, $instance ); $return .= '
'; $return .= '
'; - $return .= $this->get_date_dropdown( $year, $f_id, 'year', $v_year, $req ); + $return .= $this->get_date_dropdown( $year, $f_id, 'year', $v_year, $req, $instance ); $return .= '
'; $return .= '

'; @@ -1453,14 +1453,15 @@ public function dates( $name = '', $f_id = '', $value = [], $desc = '', $req = f * * @since 1.0.0 * - * @param string $text Text for default option. - * @param string $f_id Field ID. - * @param string $type Type of dropdown (day, month, year). - * @param string $selected_value Previous value. - * @param boolean $req If is require. - * @return string field markup. + * @param string $text Text for default option. + * @param string $f_id Field ID. + * @param string $type Type of dropdown (day, month, year). + * @param string $selected_value Previous value. + * @param boolean $req If is require. + * @param int $instance Current form instance. + * @return string Field markup. */ - public function get_date_dropdown( $text = '', $f_id = '', $type = '', $selected_value = '', $req = false ) { + public function get_date_dropdown( $text = '', $f_id = '', $type = '', $selected_value = '', $req = false, $instance = 0 ) { $f_id = str_replace( 'birthday', 'birthday_' . $type, $f_id ); $f_id = str_replace( 'anniversary', 'anniversary_' . $type, $f_id ); From 95361901b534d45058a9e51460d865e3843f5f9f Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 10:27:33 -0600 Subject: [PATCH 14/29] Change date input f_id to field_key for clarity CC-162 --- includes/class-display.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index b8d77c5a..ce96ed0c 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -1454,18 +1454,18 @@ public function dates( $name = '', $f_id = '', $value = [], $desc = '', $req = f * @since 1.0.0 * * @param string $text Text for default option. - * @param string $f_id Field ID. + * @param string $field_key Field ID. * @param string $type Type of dropdown (day, month, year). * @param string $selected_value Previous value. * @param boolean $req If is require. * @param int $instance Current form instance. * @return string Field markup. */ - public function get_date_dropdown( $text = '', $f_id = '', $type = '', $selected_value = '', $req = false, $instance = 0 ) { - $f_id = str_replace( 'birthday', 'birthday_' . $type, $f_id ); - $f_id = str_replace( 'anniversary', 'anniversary_' . $type, $f_id ); + public function get_date_dropdown( $text = '', $field_key = '', $type = '', $selected_value = '', $req = false, $instance = 0 ) { + $field_key = str_replace( 'birthday', 'birthday_' . $type, $field_key ); + $field_key = str_replace( 'anniversary', 'anniversary_' . $type, $field_key ); - $return = ''; if ( $req ) { $return = str_replace( '">', '" required>', $return ); From d2f412a1f943c2242a21f179036c19a9befba96a Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 10:29:59 -0600 Subject: [PATCH 15/29] Implement field id w/ instance for dates CC-162 --- includes/class-display.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/includes/class-display.php b/includes/class-display.php index ce96ed0c..9c2d748a 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -1464,8 +1464,9 @@ public function dates( $name = '', $f_id = '', $value = [], $desc = '', $req = f public function get_date_dropdown( $text = '', $field_key = '', $type = '', $selected_value = '', $req = false, $instance = 0 ) { $field_key = str_replace( 'birthday', 'birthday_' . $type, $field_key ); $field_key = str_replace( 'anniversary', 'anniversary_' . $type, $field_key ); + $field_id = "{$field_key}_{$instance}"; - $return = ''; if ( $req ) { $return = str_replace( '">', '" required>', $return ); From 8339bb1d6c4c2ec6109a511c531bf006b04dc5d4 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 10:34:27 -0600 Subject: [PATCH 16/29] Change address input f_id to field_key for clarity CC-162 --- includes/class-display.php | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 9c2d748a..4343ca99 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -1222,7 +1222,7 @@ public function get_optin_markup( $label, $value, $show ) { * @since 1.0.0 * * @param string $name Name of fields. - * @param string $f_id Form ID name. + * @param string $field_key Form ID name. * @param array $value Values of each field. * @param string $desc Label of field. * @param boolean $req Whether or not required. @@ -1231,7 +1231,7 @@ public function get_optin_markup( $label, $value, $show ) { * @param int $instance Current form instance. * @return string HTML markup. */ - public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = false, $field_error = '', $label_placement = 'top', $instance = 0 ) { + public function address( $name = '', $field_key = '', $value = [], $desc = '', $req = false, $field_error = '', $label_placement = 'top', $instance = 0 ) { $street = esc_html__( 'Street Address', 'constant-contact-forms' ); $line_2 = esc_html__( 'Address Line 2', 'constant-contact-forms' ); $city = esc_html__( 'City', 'constant-contact-forms' ); @@ -1253,7 +1253,7 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = $label_street1 = sprintf( '', esc_attr( $label_placement_class ), - esc_attr( $f_id ), + esc_attr( $field_key ), esc_attr( $inline_font_styles ), esc_attr( $street ) . $req_label ); @@ -1261,8 +1261,8 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = '', $req, esc_attr( $label_placement_class ), - esc_attr( $f_id ), - esc_attr( $f_id ), + esc_attr( $field_key ), + esc_attr( $field_key ), esc_attr( $v_street ) ); @@ -1277,7 +1277,7 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = $label_street2 = sprintf( '', $label_placement_class, - esc_attr( $f_id ), + esc_attr( $field_key ), esc_attr( $inline_font_styles ), esc_attr( $line_2 ) ); @@ -1285,8 +1285,8 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = $input_street2 = sprintf( '', esc_attr( $label_placement_class ), - esc_attr( $f_id ), - esc_attr( $f_id ), + esc_attr( $field_key ), + esc_attr( $field_key ), esc_attr( $v_line_2 ) ); @@ -1303,7 +1303,7 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = $label_city = sprintf( '', $label_placement_class, - esc_attr( $f_id ), + esc_attr( $field_key ), esc_attr( $inline_font_styles ), esc_attr( $city ) . $req_label ); @@ -1312,8 +1312,8 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = '', $req, esc_attr( $label_placement_class ), - esc_attr( $f_id ), - esc_attr( $f_id ), + esc_attr( $field_key ), + esc_attr( $field_key ), esc_attr( $v_city ) ); @@ -1330,7 +1330,7 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = $label_state = sprintf( '', $label_placement_class, - esc_attr( $f_id ), + esc_attr( $field_key ), esc_attr( $inline_font_styles ), esc_attr( $state ) . $req_label ); @@ -1339,8 +1339,8 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = '', $req, esc_attr( $label_placement_class ), - esc_attr( $f_id ), - esc_attr( $f_id ), + esc_attr( $field_key ), + esc_attr( $field_key ), esc_attr( $v_state ) ); @@ -1357,7 +1357,7 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = $label_zip = sprintf( '', $label_placement_class, - esc_attr( $f_id ), + esc_attr( $field_key ), esc_attr( $inline_font_styles ), esc_attr( $zip ) . $req_label ); @@ -1366,8 +1366,8 @@ public function address( $name = '', $f_id = '', $value = [], $desc = '', $req = '', $req, esc_attr( $label_placement_class ), - esc_attr( $f_id ), - esc_attr( $f_id ), + esc_attr( $field_key ), + esc_attr( $field_key ), esc_attr( $v_zip ) ); From cd2b102c14faf0691676fa512e608a73f1484fca Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 10:40:01 -0600 Subject: [PATCH 17/29] Implement field id w/ instance for address fields CC-162 --- includes/class-display.php | 46 +++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 4343ca99..be205133 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -1232,11 +1232,12 @@ public function get_optin_markup( $label, $value, $show ) { * @return string HTML markup. */ public function address( $name = '', $field_key = '', $value = [], $desc = '', $req = false, $field_error = '', $label_placement = 'top', $instance = 0 ) { - $street = esc_html__( 'Street Address', 'constant-contact-forms' ); - $line_2 = esc_html__( 'Address Line 2', 'constant-contact-forms' ); - $city = esc_html__( 'City', 'constant-contact-forms' ); - $state = esc_html__( 'State', 'constant-contact-forms' ); - $zip = esc_html__( 'ZIP Code', 'constant-contact-forms' ); + $field_id = "{$field_key}_{$instance}"; + $street = esc_html__( 'Street Address', 'constant-contact-forms' ); + $line_2 = esc_html__( 'Address Line 2', 'constant-contact-forms' ); + $city = esc_html__( 'City', 'constant-contact-forms' ); + $state = esc_html__( 'State', 'constant-contact-forms' ); + $zip = esc_html__( 'ZIP Code', 'constant-contact-forms' ); $v_street = isset( $value['street_address'] ) ? $value['street_address'] : ''; $v_line_2 = isset( $value['line_2_address'] ) ? $value['line_2_address'] : ''; @@ -1253,17 +1254,18 @@ public function address( $name = '', $field_key = '', $value = [], $desc = '', $ $label_street1 = sprintf( '', esc_attr( $label_placement_class ), - esc_attr( $field_key ), + esc_attr( $field_id ), esc_attr( $inline_font_styles ), esc_attr( $street ) . $req_label ); $input_street1 = sprintf( - '', + '', $req, esc_attr( $label_placement_class ), esc_attr( $field_key ), esc_attr( $field_key ), - esc_attr( $v_street ) + esc_attr( $v_street ), + esc_attr( $field_id ) ); $input_street1_whole = ''; @@ -1277,17 +1279,18 @@ public function address( $name = '', $field_key = '', $value = [], $desc = '', $ $label_street2 = sprintf( '', $label_placement_class, - esc_attr( $field_key ), + esc_attr( $field_id ), esc_attr( $inline_font_styles ), esc_attr( $line_2 ) ); $input_street2 = sprintf( - '', + '', esc_attr( $label_placement_class ), esc_attr( $field_key ), esc_attr( $field_key ), - esc_attr( $v_line_2 ) + esc_attr( $v_line_2 ), + esc_attr( $field_id ) ); $input_street2_whole = ''; @@ -1303,18 +1306,19 @@ public function address( $name = '', $field_key = '', $value = [], $desc = '', $ $label_city = sprintf( '', $label_placement_class, - esc_attr( $field_key ), + esc_attr( $field_id ), esc_attr( $inline_font_styles ), esc_attr( $city ) . $req_label ); $input_city = sprintf( - '', + '', $req, esc_attr( $label_placement_class ), esc_attr( $field_key ), esc_attr( $field_key ), - esc_attr( $v_city ) + esc_attr( $v_city ), + esc_attr( $field_id ) ); $input_city_whole = ''; @@ -1330,18 +1334,19 @@ public function address( $name = '', $field_key = '', $value = [], $desc = '', $ $label_state = sprintf( '', $label_placement_class, - esc_attr( $field_key ), + esc_attr( $field_id ), esc_attr( $inline_font_styles ), esc_attr( $state ) . $req_label ); $input_state = sprintf( - '', + '', $req, esc_attr( $label_placement_class ), esc_attr( $field_key ), esc_attr( $field_key ), - esc_attr( $v_state ) + esc_attr( $v_state ), + esc_attr( $field_id ) ); $input_state_whole = ''; @@ -1357,18 +1362,19 @@ public function address( $name = '', $field_key = '', $value = [], $desc = '', $ $label_zip = sprintf( '', $label_placement_class, - esc_attr( $field_key ), + esc_attr( $field_id ), esc_attr( $inline_font_styles ), esc_attr( $zip ) . $req_label ); $input_zip = sprintf( - '', + '', $req, esc_attr( $label_placement_class ), esc_attr( $field_key ), esc_attr( $field_key ), - esc_attr( $v_zip ) + esc_attr( $v_zip ), + esc_attr( $field_id ) ); $input_zip_whole = ''; From d90984a1b910c33c0d3fda06a9a2448a0f2690e8 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Mon, 29 Jun 2020 12:37:15 -0600 Subject: [PATCH 18/29] Use instance in opt-in field display CC-162 --- includes/class-display.php | 41 +++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index be205133..894ef755 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -488,7 +488,7 @@ public function build_form_fields( $form_data, $old_values, $req_errors, $instan } if ( isset( $form_data['options'] ) ) { - $return .= $this->opt_in( $form_data['options'] ); + $return .= $this->opt_in( $form_data['options'], $instance ); } return $return; @@ -1141,10 +1141,11 @@ public function submit( $form_id = 0 ) { * * @since 1.0.0 * - * @param array $form_data Form data structure. - * @return string Markup of optin form. + * @param array $form_data Form data structure. + * @param int $instance Current form instance. + * @return string Markup of optin form. */ - public function opt_in( $form_data ) { + public function opt_in( $form_data, $instance = 0 ) { if ( ! isset( $form_data['optin'] ) ) { return ''; @@ -1157,7 +1158,7 @@ public function opt_in( $form_data ) { ] ); if ( isset( $optin['list'] ) && $optin['list'] ) { - return $this->optin_display( $optin ); + return $this->optin_display( $optin, $instance ); } return ''; @@ -1168,10 +1169,11 @@ public function opt_in( $form_data ) { * * @since 1.0.0 * - * @param array $optin Optin data. - * @return string HTML markup. + * @param array $optin Optin data. + * @param int $instance Current form instance. + * @return string HTML markup. */ - public function optin_display( $optin ) { + public function optin_display( $optin, $instance = 0 ) { $label = sanitize_text_field( isset( $optin['instructions'] ) ? $optin['instructions'] : '' ); $value = sanitize_text_field( isset( $optin['list'] ) ? $optin['list'] : '' ); @@ -1187,7 +1189,7 @@ public function optin_display( $optin ) { $markup = ''; @@ -1201,17 +1203,20 @@ public function optin_display( $optin ) { * * @since 1.0.0 * - * @param string $label Label for field. - * @param string $value Value of opt in field. - * @param string $show Whether or not we are showing the field. - * @return string HTML markup + * @param string $label Label for field. + * @param string $value Value of opt in field. + * @param string $show Whether or not we are showing the field. + * @param int $instance Current form instance. + * @return string HTML markup */ - public function get_optin_markup( $label, $value, $show ) { - $checked = $show ? '' : 'checked'; + public function get_optin_markup( $label, $value, $show, $instance = 0 ) { + $checked = $show ? '' : 'checked'; + $field_key = 'ctct-opt-in'; + $field_id = "{$field_key}_{$instance}"; - $markup = $this->field_top( 'checkbox', 'ctct-opt-in', 'ctct-opt-in', $label, false, false ); - $markup .= ''; - $markup .= $this->field_bottom( 'ctct-opt-in', ' ' . wp_kses_post( $label ), false ); + $markup = $this->field_top( 'checkbox', $field_key, $field_key, $label, false, false ); + $markup .= ''; + $markup .= $this->field_bottom( $field_id, ' ' . wp_kses_post( $label ), false ); return $markup; } From 5ccbebf5a8a1f257cf2bb18ff360582724592993 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Tue, 30 Jun 2020 09:48:16 -0600 Subject: [PATCH 19/29] Update main input display for hidden fields Remove placeholder and ID, and add tabindex of -1. CC-160 --- includes/class-display.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 894ef755..0ab67ddc 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -1030,18 +1030,20 @@ public function input( $type = 'text', $name = '', $id = '', $value = '', $label $class_attr = 'class="' . implode( ' ', $classes ) . '"'; } - $field = ''; + /* translators: 1: Required text, 2: Field type, 3: Field name, 4: Inline styles, 5: Field value, 6: Max length, 7: Placeholder (non-hidden fields only), 8: Field class(es), 9: Field ID (non-hidden fields only), 10: Tabindex (hidden fields only). */ + $field = ''; $markup .= sprintf( $field, $req_text, $type, $field_key, - $field_id, $input_inline_styles, $value, $max_length, - $label, - $class_attr + 'hidden' !== $type ? "placeholder=\"{$label}\"" : '', + $class_attr, + 'hidden' !== $type ? "id=\"{$field_id}\"" : '', + 'hidden' === $type ? 'tabindex="-1"' : '' ); // Reassign because if we want "field only", like for hidden inputs, we need to still pass a value that went through sprintf(). From b4dc01f9c68bfa99e0f07d7325711e8c38ce91d7 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Tue, 30 Jun 2020 09:49:03 -0600 Subject: [PATCH 20/29] Add tabindex for honeypot CC-160 --- includes/class-display.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/class-display.php b/includes/class-display.php index 0ab67ddc..7efb6561 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -503,7 +503,7 @@ public function build_form_fields( $form_data, $old_values, $req_errors, $instan */ public function build_honeypot_field() { return sprintf( - '
', + '
', esc_html__( 'Constant Contact Use.', 'constant-contact-forms' ) ); } From 8a9a5af533cb3c595114bc6bba38ba00ef045730 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Tue, 30 Jun 2020 10:05:14 -0600 Subject: [PATCH 21/29] Use tel/url type for phone/website fields CC-160 --- includes/class-display.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 7efb6561..7729a287 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -672,13 +672,15 @@ public function field( $field, $old_values = [], $req_errors = [], $form_id = 0, $value = $this->get_submitted_value( $value, $map, $field, $old_values ); switch ( $type ) { + case 'phone_number': + return $this->input( 'tel', $name, $map, $value, $desc, $req, false, $field_error, $form_id, $label_placement, $instance ); + case 'website': + return $this->input( 'url', $name, $map, $value, $desc, $req, false, $field_error, $form_id, $label_placement, $instance ); case 'custom': case 'first_name': case 'last_name': - case 'phone_number': case 'job_title': case 'company': - case 'website': case 'text_field': return $this->input( 'text', $name, $map, $value, $desc, $req, false, $field_error, $form_id, $label_placement, $instance ); case 'custom_text_area': From d845a8713bc9bd88ff82293c3226f718234177eb Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Tue, 30 Jun 2020 10:25:38 -0600 Subject: [PATCH 22/29] Make ajax submission message persistent CC-160 --- assets/js/ctct-plugin-frontend/validation.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/assets/js/ctct-plugin-frontend/validation.js b/assets/js/ctct-plugin-frontend/validation.js index c298e9aa..5c6bca73 100644 --- a/assets/js/ctct-plugin-frontend/validation.js +++ b/assets/js/ctct-plugin-frontend/validation.js @@ -153,9 +153,7 @@ 'text': message } ); - $p.insertBefore( $form ).fadeIn( 200 ).delay( 5000 ).slideUp( 200, () => { - $p.remove(); - } ); + $p.insertBefore( $form ).fadeIn( 200 ); }; /** From d05696a0098995708991080a461901f701c38d19 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Tue, 30 Jun 2020 10:25:46 -0600 Subject: [PATCH 23/29] Add role to message CC-160 --- assets/js/ctct-plugin-frontend.js | 2 +- assets/js/ctct-plugin-frontend/validation.js | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/assets/js/ctct-plugin-frontend.js b/assets/js/ctct-plugin-frontend.js index ec23ef63..2cb0fa86 100644 --- a/assets/js/ctct-plugin-frontend.js +++ b/assets/js/ctct-plugin-frontend.js @@ -116,7 +116,7 @@ eval("/**\n * General-purpose utility stuff for CC plugin.\n */\n(function (glob /*! no static exports found */ /***/ (function(module, exports) { -eval("/**\n * Front-end form validation.\n *\n * @since 1.0.0\n */\nwindow.CTCTSupport = {};\n\n(function (window, $, app) {\n var _this = this;\n\n /**\n * @constructor\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n app.init = function () {\n app.cache();\n app.bindEvents();\n app.removePlaceholder();\n };\n /**\n * Remove placeholder text values.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.removePlaceholder = function () {\n $('.ctct-form-field input, textarea').focus(function () {\n $(_this).data('placeholder', $(_this).attr('placeholder')).attr('placeholder', '');\n }).blur(function () {\n $(_this).attr('placeholder', $(_this).data('placeholder'));\n });\n };\n /**\n * Cache DOM elements.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.cache = function () {\n app.$c = {\n $forms: []\n }; // Cache each form on the page.\n\n $('.ctct-form-wrapper').each(function (i, formWrapper) {\n app.$c.$forms.push($(formWrapper).find('form'));\n }); // For each form, cache its common elements.\n\n $.each(app.$c.$forms, function (i, form) {\n var $form = $(form);\n app.$c.$forms[i].$honeypot = $form.find('.ctct_usage_field');\n app.$c.$forms[i].$submitButton = $form.find('input[type=submit]');\n app.$c.$forms[i].$recaptcha = $form.find('.g-recaptcha');\n });\n app.timeout = null;\n };\n /**\n * Remove the ctct-invalid class from elements that have it.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.setAllInputsValid = function () {\n $(app.$c.$form + ' .ctct-invalid').removeClass('ctct-invalid');\n };\n /**\n * Adds .ctct-invalid HTML class to inputs whose values are invalid.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} error AJAX response error object.\n */\n\n\n app.processError = function (error) {\n // If we have an id property set.\n if ('undefined' !== typeof error.id) {\n $('#' + error.id).addClass('ctct-invalid');\n }\n };\n /**\n * Check the value of the hidden honeypot field; disable form submission button if anything in it.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} e The change or keyup event triggering this callback.\n * @param {object} $honeyPot The jQuery object for the actual input field being checked.\n * @param {object} $submitButton The jQuery object for the submit button in the same form as the honeypot field.\n */\n\n\n app.checkHoneypot = function (e, $honeyPot, $submitButton) {\n // If there is text in the honeypot, disable the submit button\n if (0 < $honeyPot.val().length) {\n $submitButton.attr('disabled', 'disabled');\n } else {\n $submitButton.attr('disabled', false);\n }\n };\n /**\n * Ensures that we should use AJAX to process the specified form, and that all required fields are not empty.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form being validated.\n * @return {boolean} False if AJAX processing is disabled for this form or if a required field is empty.\n */\n\n\n app.validateSubmission = function ($form) {\n if ('on' !== $form.attr('data-doajax')) {\n return false;\n } // Ensure all required fields in this form are valid.\n\n\n $.each($form.find('[required]'), function (i, field) {\n if (false === field.checkValidity()) {\n return false;\n }\n });\n return true;\n };\n /**\n * Prepends form with a message that fades out in 5 seconds.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form a message is being displayed for.\n * @param {string} message The message content.\n * @param {string} classes Optional. HTML classes to add to the message wrapper.\n */\n\n\n app.showMessage = function ($form, message) {\n var classes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var $p = $('

', {\n 'class': 'ctct-message ' + classes,\n 'text': message\n });\n $p.insertBefore($form).fadeIn(200).delay(5000).slideUp(200, function () {\n $p.remove();\n });\n };\n /**\n * Submits the actual form via AJAX.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form being submitted.\n */\n\n\n app.submitForm = function ($form) {\n $form.find('.ctct-submitted').prop('disabled', true);\n var ajaxData = {\n 'action': 'ctct_process_form',\n 'data': $form.serialize()\n };\n $.post(window.ajaxurl, ajaxData, function (response) {\n $form.find('.ctct-submitted').prop('disabled', false);\n\n if ('undefined' === typeof response.status) {\n return false;\n } // Here we'll want to disable the submit button and add some error classes.\n\n\n if ('success' !== response.status) {\n if ('undefined' !== typeof response.errors) {\n app.setAllInputsValid();\n response.errors.forEach(app.processError);\n } else {\n app.showMessage($form, response.message, 'ctct-error');\n }\n\n return false;\n } // If we're here, the submission was a success; show message and reset form fields.\n\n\n app.showMessage($form, response.message, 'ctct-success');\n $form[0].reset();\n });\n };\n /**\n * Handle the form submission.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} e The submit event.\n * @param {object} $form jQuery object for the current form being handled.\n * @return {boolean} False if unable to validate the form.\n */\n\n\n app.handleSubmission = function (e, $form) {\n if (!app.validateSubmission($form)) {\n return false;\n }\n\n e.preventDefault();\n clearTimeout(app.timeout);\n app.timeout = setTimeout(app.submitForm, 500, $form);\n };\n /**\n * Set up event bindings and callbacks.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.bindEvents = function () {\n // eslint-disable-next-line no-unused-vars\n $.each(app.$c.$forms, function (i, form) {\n // Attach submission handler to each form's Submit button.\n app.$c.$forms[i].on('click', 'input[type=submit]', function (e) {\n app.handleSubmission(e, app.$c.$forms[i]);\n }); // Ensure each form's honeypot is checked.\n\n app.$c.$forms[i].$honeypot.on('change keyup', function (e) {\n app.checkHoneypot(e, app.$c.$forms[i].$honeypot, app.$c.$forms[i].$submitButton);\n }); // Disable the submit button by default until the captcha is passed (if captcha exists).\n\n if (0 < app.$c.$forms[i].$recaptcha.length) {\n app.$c.$forms[i].$submitButton.attr('disabled', 'disabled');\n }\n });\n };\n\n $(app.init);\n})(window, jQuery, window.CTCTSupport);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tZnJvbnRlbmQvdmFsaWRhdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jdGN0LXBsdWdpbi1mcm9udGVuZC92YWxpZGF0aW9uLmpzPzMzOTkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGcm9udC1lbmQgZm9ybSB2YWxpZGF0aW9uLlxuICpcbiAqIEBzaW5jZSAxLjAuMFxuICovXG5cbiB3aW5kb3cuQ1RDVFN1cHBvcnQgPSB7fTtcblxuKCBmdW5jdGlvbiggd2luZG93LCAkLCBhcHAgKSB7XG5cblx0LyoqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqL1xuXHRhcHAuaW5pdCA9ICgpID0+IHtcblx0XHRhcHAuY2FjaGUoKTtcblx0XHRhcHAuYmluZEV2ZW50cygpO1xuXHRcdGFwcC5yZW1vdmVQbGFjZWhvbGRlcigpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZW1vdmUgcGxhY2Vob2xkZXIgdGV4dCB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5yZW1vdmVQbGFjZWhvbGRlciA9ICgpID0+IHtcblx0XHQkKCAnLmN0Y3QtZm9ybS1maWVsZCBpbnB1dCwgdGV4dGFyZWEnICkuZm9jdXMoICgpID0+IHtcblx0XHRcdCQoIHRoaXMgKS5kYXRhKCAncGxhY2Vob2xkZXInLCAkKCB0aGlzICkuYXR0ciggJ3BsYWNlaG9sZGVyJyApICkuYXR0ciggJ3BsYWNlaG9sZGVyJywgJycgKTtcblx0XHR9ICkuYmx1ciggKCkgPT4ge1xuXHRcdFx0JCggdGhpcyApLmF0dHIoICdwbGFjZWhvbGRlcicsICQoIHRoaXMgKS5kYXRhKCAncGxhY2Vob2xkZXInICkgKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIENhY2hlIERPTSBlbGVtZW50cy5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLmNhY2hlID0gKCkgPT4ge1xuXG5cdFx0YXBwLiRjID0ge1xuXHRcdFx0JGZvcm1zOiBbXVxuXHRcdH07XG5cblx0XHQvLyBDYWNoZSBlYWNoIGZvcm0gb24gdGhlIHBhZ2UuXG5cdFx0JCggJy5jdGN0LWZvcm0td3JhcHBlcicgKS5lYWNoKCBmdW5jdGlvbiggaSwgZm9ybVdyYXBwZXIgKSB7XG5cdFx0XHRhcHAuJGMuJGZvcm1zLnB1c2goICQoIGZvcm1XcmFwcGVyICkuZmluZCggJ2Zvcm0nICkgKTtcblx0XHR9ICk7XG5cblx0XHQvLyBGb3IgZWFjaCBmb3JtLCBjYWNoZSBpdHMgY29tbW9uIGVsZW1lbnRzLlxuXHRcdCQuZWFjaCggYXBwLiRjLiRmb3JtcywgZnVuY3Rpb24oIGksIGZvcm0gKSB7XG5cblx0XHRcdHZhciAkZm9ybSA9ICQoIGZvcm0gKTtcblxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRob25leXBvdCAgICAgPSAkZm9ybS5maW5kKCAnLmN0Y3RfdXNhZ2VfZmllbGQnICk7XG5cdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHN1Ym1pdEJ1dHRvbiA9ICRmb3JtLmZpbmQoICdpbnB1dFt0eXBlPXN1Ym1pdF0nICk7XG5cdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHJlY2FwdGNoYSAgICA9ICRmb3JtLmZpbmQoICcuZy1yZWNhcHRjaGEnICk7XG5cdFx0fSApO1xuXG5cdFx0YXBwLnRpbWVvdXQgPSBudWxsO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGN0Y3QtaW52YWxpZCBjbGFzcyBmcm9tIGVsZW1lbnRzIHRoYXQgaGF2ZSBpdC5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLnNldEFsbElucHV0c1ZhbGlkID0gKCkgPT4ge1xuXHRcdCQoIGFwcC4kYy4kZm9ybSArICcgLmN0Y3QtaW52YWxpZCcgKS5yZW1vdmVDbGFzcyggJ2N0Y3QtaW52YWxpZCcgKTtcblx0fTtcblxuXHQvKipcblx0ICogQWRkcyAuY3RjdC1pbnZhbGlkIEhUTUwgY2xhc3MgdG8gaW5wdXRzIHdob3NlIHZhbHVlcyBhcmUgaW52YWxpZC5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZXJyb3IgQUpBWCByZXNwb25zZSBlcnJvciBvYmplY3QuXG5cdCAqL1xuXHRhcHAucHJvY2Vzc0Vycm9yID0gKCBlcnJvciApID0+IHtcblxuXHRcdC8vIElmIHdlIGhhdmUgYW4gaWQgcHJvcGVydHkgc2V0LlxuXHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiggZXJyb3IuaWQgKSApIHtcblx0XHRcdCQoICcjJyArIGVycm9yLmlkICkuYWRkQ2xhc3MoICdjdGN0LWludmFsaWQnICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBDaGVjayB0aGUgdmFsdWUgb2YgdGhlIGhpZGRlbiBob25leXBvdCBmaWVsZDsgZGlzYWJsZSBmb3JtIHN1Ym1pc3Npb24gYnV0dG9uIGlmIGFueXRoaW5nIGluIGl0LlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBlIFRoZSBjaGFuZ2Ugb3Iga2V5dXAgZXZlbnQgdHJpZ2dlcmluZyB0aGlzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gJGhvbmV5UG90IFRoZSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgYWN0dWFsIGlucHV0IGZpZWxkIGJlaW5nIGNoZWNrZWQuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkc3VibWl0QnV0dG9uIFRoZSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgc3VibWl0IGJ1dHRvbiBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZSBob25leXBvdCBmaWVsZC5cblx0ICovXG5cdGFwcC5jaGVja0hvbmV5cG90ID0gKCBlLCAkaG9uZXlQb3QsICRzdWJtaXRCdXR0b24gKSA9PiB7XG5cblx0XHQvLyBJZiB0aGVyZSBpcyB0ZXh0IGluIHRoZSBob25leXBvdCwgZGlzYWJsZSB0aGUgc3VibWl0IGJ1dHRvblxuXHRcdGlmICggMCA8ICRob25leVBvdC52YWwoKS5sZW5ndGggKSB7XG5cdFx0XHQkc3VibWl0QnV0dG9uLmF0dHIoICdkaXNhYmxlZCcsICdkaXNhYmxlZCcgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHN1Ym1pdEJ1dHRvbi5hdHRyKCAnZGlzYWJsZWQnLCBmYWxzZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogRW5zdXJlcyB0aGF0IHdlIHNob3VsZCB1c2UgQUpBWCB0byBwcm9jZXNzIHRoZSBzcGVjaWZpZWQgZm9ybSwgYW5kIHRoYXQgYWxsIHJlcXVpcmVkIGZpZWxkcyBhcmUgbm90IGVtcHR5LlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgZm9ybSBiZWluZyB2YWxpZGF0ZWQuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IEZhbHNlIGlmIEFKQVggcHJvY2Vzc2luZyBpcyBkaXNhYmxlZCBmb3IgdGhpcyBmb3JtIG9yIGlmIGEgcmVxdWlyZWQgZmllbGQgaXMgZW1wdHkuXG5cdCAqL1xuXHRhcHAudmFsaWRhdGVTdWJtaXNzaW9uID0gKCAkZm9ybSApID0+IHtcblxuXHRcdGlmICggJ29uJyAhPT0gJGZvcm0uYXR0ciggJ2RhdGEtZG9hamF4JyApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSBhbGwgcmVxdWlyZWQgZmllbGRzIGluIHRoaXMgZm9ybSBhcmUgdmFsaWQuXG5cdFx0JC5lYWNoKCAkZm9ybS5maW5kKCAnW3JlcXVpcmVkXScgKSwgZnVuY3Rpb24oIGksIGZpZWxkICkge1xuXG5cdFx0XHRpZiAoIGZhbHNlID09PSBmaWVsZC5jaGVja1ZhbGlkaXR5KCkgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXHQvKipcblx0ICogUHJlcGVuZHMgZm9ybSB3aXRoIGEgbWVzc2FnZSB0aGF0IGZhZGVzIG91dCBpbiA1IHNlY29uZHMuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9ICRmb3JtIGpRdWVyeSBvYmplY3QgZm9yIHRoZSBmb3JtIGEgbWVzc2FnZSBpcyBiZWluZyBkaXNwbGF5ZWQgZm9yLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSBjb250ZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NlcyBPcHRpb25hbC4gSFRNTCBjbGFzc2VzIHRvIGFkZCB0byB0aGUgbWVzc2FnZSB3cmFwcGVyLlxuXHQgKi9cblx0YXBwLnNob3dNZXNzYWdlID0gKCAkZm9ybSwgbWVzc2FnZSwgY2xhc3NlcyA9ICcnICkgPT4ge1xuXG5cdFx0dmFyICRwID0gJCggJzxwIC8+Jywge1xuXHRcdFx0J2NsYXNzJzogJ2N0Y3QtbWVzc2FnZSAnICsgY2xhc3Nlcyxcblx0XHRcdCd0ZXh0JzogbWVzc2FnZVxuXHRcdH0gKTtcblxuXHRcdCRwLmluc2VydEJlZm9yZSggJGZvcm0gKS5mYWRlSW4oIDIwMCApLmRlbGF5KCA1MDAwICkuc2xpZGVVcCggMjAwLCAoKSA9PiB7XG5cdFx0XHQkcC5yZW1vdmUoKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGFjdHVhbCBmb3JtIHZpYSBBSkFYLlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgZm9ybSBiZWluZyBzdWJtaXR0ZWQuXG5cdCAqL1xuXHRhcHAuc3VibWl0Rm9ybSA9ICggJGZvcm0gKSA9PiB7XG5cblx0XHQkZm9ybS5maW5kKCAnLmN0Y3Qtc3VibWl0dGVkJyApLnByb3AoICdkaXNhYmxlZCcsIHRydWUgKTtcblxuXHRcdHZhciBhamF4RGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nOiAnY3RjdF9wcm9jZXNzX2Zvcm0nLFxuXHRcdFx0J2RhdGEnOiAkZm9ybS5zZXJpYWxpemUoKVxuXHRcdH07XG5cblx0XHQkLnBvc3QoIHdpbmRvdy5hamF4dXJsLCBhamF4RGF0YSwgKCByZXNwb25zZSApID0+IHtcblxuXHRcdFx0JGZvcm0uZmluZCggJy5jdGN0LXN1Ym1pdHRlZCcgKS5wcm9wKCAnZGlzYWJsZWQnLCBmYWxzZSApO1xuXG5cdFx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2YoIHJlc3BvbnNlLnN0YXR1cyApICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhlcmUgd2UnbGwgd2FudCB0byBkaXNhYmxlIHRoZSBzdWJtaXQgYnV0dG9uIGFuZCBhZGQgc29tZSBlcnJvciBjbGFzc2VzLlxuXHRcdFx0aWYgKCAnc3VjY2VzcycgIT09IHJlc3BvbnNlLnN0YXR1cyApIHtcblxuXHRcdFx0XHRpZiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YoIHJlc3BvbnNlLmVycm9ycyApICkge1xuXHRcdFx0XHRcdGFwcC5zZXRBbGxJbnB1dHNWYWxpZCgpO1xuXHRcdFx0XHRcdHJlc3BvbnNlLmVycm9ycy5mb3JFYWNoKCBhcHAucHJvY2Vzc0Vycm9yICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YXBwLnNob3dNZXNzYWdlKCAkZm9ybSwgcmVzcG9uc2UubWVzc2FnZSwgJ2N0Y3QtZXJyb3InICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHdlJ3JlIGhlcmUsIHRoZSBzdWJtaXNzaW9uIHdhcyBhIHN1Y2Nlc3M7IHNob3cgbWVzc2FnZSBhbmQgcmVzZXQgZm9ybSBmaWVsZHMuXG5cdFx0XHRhcHAuc2hvd01lc3NhZ2UoICRmb3JtLCByZXNwb25zZS5tZXNzYWdlLCAnY3RjdC1zdWNjZXNzJyApO1xuXHRcdFx0JGZvcm1bMF0ucmVzZXQoKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEhhbmRsZSB0aGUgZm9ybSBzdWJtaXNzaW9uLlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBlIFRoZSBzdWJtaXQgZXZlbnQuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgY3VycmVudCBmb3JtIGJlaW5nIGhhbmRsZWQuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IEZhbHNlIGlmIHVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgZm9ybS5cblx0ICovXG5cdGFwcC5oYW5kbGVTdWJtaXNzaW9uID0gKCBlLCAkZm9ybSApID0+IHtcblxuXHRcdGlmICggISBhcHAudmFsaWRhdGVTdWJtaXNzaW9uKCAkZm9ybSApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGNsZWFyVGltZW91dCggYXBwLnRpbWVvdXQgKTtcblxuXHRcdGFwcC50aW1lb3V0ID0gc2V0VGltZW91dCggYXBwLnN1Ym1pdEZvcm0sIDUwMCwgJGZvcm0gKTtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IHVwIGV2ZW50IGJpbmRpbmdzIGFuZCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5iaW5kRXZlbnRzID0gKCkgPT4ge1xuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdFx0JC5lYWNoKCBhcHAuJGMuJGZvcm1zLCBmdW5jdGlvbiggaSwgZm9ybSApIHtcblxuXHRcdFx0Ly8gQXR0YWNoIHN1Ym1pc3Npb24gaGFuZGxlciB0byBlYWNoIGZvcm0ncyBTdWJtaXQgYnV0dG9uLlxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLm9uKCAnY2xpY2snLCAnaW5wdXRbdHlwZT1zdWJtaXRdJywgKCBlICkgPT4ge1xuXHRcdFx0XHRhcHAuaGFuZGxlU3VibWlzc2lvbiggZSwgYXBwLiRjLiRmb3Jtc1sgaSBdICk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdC8vIEVuc3VyZSBlYWNoIGZvcm0ncyBob25leXBvdCBpcyBjaGVja2VkLlxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRob25leXBvdC5vbiggJ2NoYW5nZSBrZXl1cCcsICggZSApID0+IHtcblxuXHRcdFx0XHRhcHAuY2hlY2tIb25leXBvdChcblx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdGFwcC4kYy4kZm9ybXNbIGkgXS4kaG9uZXlwb3QsXG5cdFx0XHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRzdWJtaXRCdXR0b25cblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblxuXHRcdFx0Ly8gRGlzYWJsZSB0aGUgc3VibWl0IGJ1dHRvbiBieSBkZWZhdWx0IHVudGlsIHRoZSBjYXB0Y2hhIGlzIHBhc3NlZCAoaWYgY2FwdGNoYSBleGlzdHMpLlxuXHRcdFx0aWYgKCAwIDwgYXBwLiRjLiRmb3Jtc1sgaSBdLiRyZWNhcHRjaGEubGVuZ3RoICkge1xuXHRcdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHN1Ym1pdEJ1dHRvbi5hdHRyKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XG5cdFx0XHR9XG5cblx0XHR9ICk7XG5cdH07XG5cblx0JCggYXBwLmluaXQgKTtcblxufSAoIHdpbmRvdywgalF1ZXJ5LCB3aW5kb3cuQ1RDVFN1cHBvcnQgKSApO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0FBU0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7O0FBVUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-frontend/validation.js\n"); +eval("/**\n * Front-end form validation.\n *\n * @since 1.0.0\n */\nwindow.CTCTSupport = {};\n\n(function (window, $, app) {\n var _this = this;\n\n /**\n * @constructor\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n app.init = function () {\n app.cache();\n app.bindEvents();\n app.removePlaceholder();\n };\n /**\n * Remove placeholder text values.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.removePlaceholder = function () {\n $('.ctct-form-field input, textarea').focus(function () {\n $(_this).data('placeholder', $(_this).attr('placeholder')).attr('placeholder', '');\n }).blur(function () {\n $(_this).attr('placeholder', $(_this).data('placeholder'));\n });\n };\n /**\n * Cache DOM elements.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.cache = function () {\n app.$c = {\n $forms: []\n }; // Cache each form on the page.\n\n $('.ctct-form-wrapper').each(function (i, formWrapper) {\n app.$c.$forms.push($(formWrapper).find('form'));\n }); // For each form, cache its common elements.\n\n $.each(app.$c.$forms, function (i, form) {\n var $form = $(form);\n app.$c.$forms[i].$honeypot = $form.find('.ctct_usage_field');\n app.$c.$forms[i].$submitButton = $form.find('input[type=submit]');\n app.$c.$forms[i].$recaptcha = $form.find('.g-recaptcha');\n });\n app.timeout = null;\n };\n /**\n * Remove the ctct-invalid class from elements that have it.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.setAllInputsValid = function () {\n $(app.$c.$form + ' .ctct-invalid').removeClass('ctct-invalid');\n };\n /**\n * Adds .ctct-invalid HTML class to inputs whose values are invalid.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} error AJAX response error object.\n */\n\n\n app.processError = function (error) {\n // If we have an id property set.\n if ('undefined' !== typeof error.id) {\n $('#' + error.id).addClass('ctct-invalid');\n }\n };\n /**\n * Check the value of the hidden honeypot field; disable form submission button if anything in it.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} e The change or keyup event triggering this callback.\n * @param {object} $honeyPot The jQuery object for the actual input field being checked.\n * @param {object} $submitButton The jQuery object for the submit button in the same form as the honeypot field.\n */\n\n\n app.checkHoneypot = function (e, $honeyPot, $submitButton) {\n // If there is text in the honeypot, disable the submit button\n if (0 < $honeyPot.val().length) {\n $submitButton.attr('disabled', 'disabled');\n } else {\n $submitButton.attr('disabled', false);\n }\n };\n /**\n * Ensures that we should use AJAX to process the specified form, and that all required fields are not empty.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form being validated.\n * @return {boolean} False if AJAX processing is disabled for this form or if a required field is empty.\n */\n\n\n app.validateSubmission = function ($form) {\n if ('on' !== $form.attr('data-doajax')) {\n return false;\n } // Ensure all required fields in this form are valid.\n\n\n $.each($form.find('[required]'), function (i, field) {\n if (false === field.checkValidity()) {\n return false;\n }\n });\n return true;\n };\n /**\n * Prepends form with a message that fades out in 5 seconds.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form a message is being displayed for.\n * @param {string} message The message content.\n * @param {string} classes Optional. HTML classes to add to the message wrapper.\n */\n\n\n app.showMessage = function ($form, message) {\n var classes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var role = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'log';\n $form.parents('.ctct-form-wrapper').find('p.ctct-message').remove();\n var $p = $('

', {\n 'class': 'ctct-message ' + classes,\n 'text': message,\n 'role': role\n });\n $p.insertBefore($form).fadeIn(200);\n };\n /**\n * Submits the actual form via AJAX.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form being submitted.\n */\n\n\n app.submitForm = function ($form) {\n $form.find('.ctct-submitted').prop('disabled', true);\n var ajaxData = {\n 'action': 'ctct_process_form',\n 'data': $form.serialize()\n };\n $.post(window.ajaxurl, ajaxData, function (response) {\n $form.find('.ctct-submitted').prop('disabled', false);\n\n if ('undefined' === typeof response.status) {\n return false;\n } // Here we'll want to disable the submit button and add some error classes.\n\n\n if ('success' !== response.status) {\n if ('undefined' !== typeof response.errors) {\n app.setAllInputsValid();\n response.errors.forEach(app.processError);\n } else {\n app.showMessage($form, response.message, 'ctct-error', 'alert');\n }\n\n return false;\n } // If we're here, the submission was a success; show message and reset form fields.\n\n\n app.showMessage($form, response.message, 'ctct-success', 'status');\n $form[0].reset();\n });\n };\n /**\n * Handle the form submission.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} e The submit event.\n * @param {object} $form jQuery object for the current form being handled.\n * @return {boolean} False if unable to validate the form.\n */\n\n\n app.handleSubmission = function (e, $form) {\n if (!app.validateSubmission($form)) {\n return false;\n }\n\n e.preventDefault();\n clearTimeout(app.timeout);\n app.timeout = setTimeout(app.submitForm, 500, $form);\n };\n /**\n * Set up event bindings and callbacks.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.bindEvents = function () {\n // eslint-disable-next-line no-unused-vars\n $.each(app.$c.$forms, function (i, form) {\n // Attach submission handler to each form's Submit button.\n app.$c.$forms[i].on('click', 'input[type=submit]', function (e) {\n app.handleSubmission(e, app.$c.$forms[i]);\n }); // Ensure each form's honeypot is checked.\n\n app.$c.$forms[i].$honeypot.on('change keyup', function (e) {\n app.checkHoneypot(e, app.$c.$forms[i].$honeypot, app.$c.$forms[i].$submitButton);\n }); // Disable the submit button by default until the captcha is passed (if captcha exists).\n\n if (0 < app.$c.$forms[i].$recaptcha.length) {\n app.$c.$forms[i].$submitButton.attr('disabled', 'disabled');\n }\n });\n };\n\n $(app.init);\n})(window, jQuery, window.CTCTSupport);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tZnJvbnRlbmQvdmFsaWRhdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jdGN0LXBsdWdpbi1mcm9udGVuZC92YWxpZGF0aW9uLmpzPzMzOTkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGcm9udC1lbmQgZm9ybSB2YWxpZGF0aW9uLlxuICpcbiAqIEBzaW5jZSAxLjAuMFxuICovXG5cbiB3aW5kb3cuQ1RDVFN1cHBvcnQgPSB7fTtcblxuKCBmdW5jdGlvbiggd2luZG93LCAkLCBhcHAgKSB7XG5cblx0LyoqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqL1xuXHRhcHAuaW5pdCA9ICgpID0+IHtcblx0XHRhcHAuY2FjaGUoKTtcblx0XHRhcHAuYmluZEV2ZW50cygpO1xuXHRcdGFwcC5yZW1vdmVQbGFjZWhvbGRlcigpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZW1vdmUgcGxhY2Vob2xkZXIgdGV4dCB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5yZW1vdmVQbGFjZWhvbGRlciA9ICgpID0+IHtcblx0XHQkKCAnLmN0Y3QtZm9ybS1maWVsZCBpbnB1dCwgdGV4dGFyZWEnICkuZm9jdXMoICgpID0+IHtcblx0XHRcdCQoIHRoaXMgKS5kYXRhKCAncGxhY2Vob2xkZXInLCAkKCB0aGlzICkuYXR0ciggJ3BsYWNlaG9sZGVyJyApICkuYXR0ciggJ3BsYWNlaG9sZGVyJywgJycgKTtcblx0XHR9ICkuYmx1ciggKCkgPT4ge1xuXHRcdFx0JCggdGhpcyApLmF0dHIoICdwbGFjZWhvbGRlcicsICQoIHRoaXMgKS5kYXRhKCAncGxhY2Vob2xkZXInICkgKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIENhY2hlIERPTSBlbGVtZW50cy5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLmNhY2hlID0gKCkgPT4ge1xuXG5cdFx0YXBwLiRjID0ge1xuXHRcdFx0JGZvcm1zOiBbXVxuXHRcdH07XG5cblx0XHQvLyBDYWNoZSBlYWNoIGZvcm0gb24gdGhlIHBhZ2UuXG5cdFx0JCggJy5jdGN0LWZvcm0td3JhcHBlcicgKS5lYWNoKCBmdW5jdGlvbiggaSwgZm9ybVdyYXBwZXIgKSB7XG5cdFx0XHRhcHAuJGMuJGZvcm1zLnB1c2goICQoIGZvcm1XcmFwcGVyICkuZmluZCggJ2Zvcm0nICkgKTtcblx0XHR9ICk7XG5cblx0XHQvLyBGb3IgZWFjaCBmb3JtLCBjYWNoZSBpdHMgY29tbW9uIGVsZW1lbnRzLlxuXHRcdCQuZWFjaCggYXBwLiRjLiRmb3JtcywgZnVuY3Rpb24oIGksIGZvcm0gKSB7XG5cblx0XHRcdHZhciAkZm9ybSA9ICQoIGZvcm0gKTtcblxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRob25leXBvdCAgICAgPSAkZm9ybS5maW5kKCAnLmN0Y3RfdXNhZ2VfZmllbGQnICk7XG5cdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHN1Ym1pdEJ1dHRvbiA9ICRmb3JtLmZpbmQoICdpbnB1dFt0eXBlPXN1Ym1pdF0nICk7XG5cdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHJlY2FwdGNoYSAgICA9ICRmb3JtLmZpbmQoICcuZy1yZWNhcHRjaGEnICk7XG5cdFx0fSApO1xuXG5cdFx0YXBwLnRpbWVvdXQgPSBudWxsO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGN0Y3QtaW52YWxpZCBjbGFzcyBmcm9tIGVsZW1lbnRzIHRoYXQgaGF2ZSBpdC5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLnNldEFsbElucHV0c1ZhbGlkID0gKCkgPT4ge1xuXHRcdCQoIGFwcC4kYy4kZm9ybSArICcgLmN0Y3QtaW52YWxpZCcgKS5yZW1vdmVDbGFzcyggJ2N0Y3QtaW52YWxpZCcgKTtcblx0fTtcblxuXHQvKipcblx0ICogQWRkcyAuY3RjdC1pbnZhbGlkIEhUTUwgY2xhc3MgdG8gaW5wdXRzIHdob3NlIHZhbHVlcyBhcmUgaW52YWxpZC5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZXJyb3IgQUpBWCByZXNwb25zZSBlcnJvciBvYmplY3QuXG5cdCAqL1xuXHRhcHAucHJvY2Vzc0Vycm9yID0gKCBlcnJvciApID0+IHtcblxuXHRcdC8vIElmIHdlIGhhdmUgYW4gaWQgcHJvcGVydHkgc2V0LlxuXHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiggZXJyb3IuaWQgKSApIHtcblx0XHRcdCQoICcjJyArIGVycm9yLmlkICkuYWRkQ2xhc3MoICdjdGN0LWludmFsaWQnICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBDaGVjayB0aGUgdmFsdWUgb2YgdGhlIGhpZGRlbiBob25leXBvdCBmaWVsZDsgZGlzYWJsZSBmb3JtIHN1Ym1pc3Npb24gYnV0dG9uIGlmIGFueXRoaW5nIGluIGl0LlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBlIFRoZSBjaGFuZ2Ugb3Iga2V5dXAgZXZlbnQgdHJpZ2dlcmluZyB0aGlzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gJGhvbmV5UG90IFRoZSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgYWN0dWFsIGlucHV0IGZpZWxkIGJlaW5nIGNoZWNrZWQuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkc3VibWl0QnV0dG9uIFRoZSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgc3VibWl0IGJ1dHRvbiBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZSBob25leXBvdCBmaWVsZC5cblx0ICovXG5cdGFwcC5jaGVja0hvbmV5cG90ID0gKCBlLCAkaG9uZXlQb3QsICRzdWJtaXRCdXR0b24gKSA9PiB7XG5cblx0XHQvLyBJZiB0aGVyZSBpcyB0ZXh0IGluIHRoZSBob25leXBvdCwgZGlzYWJsZSB0aGUgc3VibWl0IGJ1dHRvblxuXHRcdGlmICggMCA8ICRob25leVBvdC52YWwoKS5sZW5ndGggKSB7XG5cdFx0XHQkc3VibWl0QnV0dG9uLmF0dHIoICdkaXNhYmxlZCcsICdkaXNhYmxlZCcgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHN1Ym1pdEJ1dHRvbi5hdHRyKCAnZGlzYWJsZWQnLCBmYWxzZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogRW5zdXJlcyB0aGF0IHdlIHNob3VsZCB1c2UgQUpBWCB0byBwcm9jZXNzIHRoZSBzcGVjaWZpZWQgZm9ybSwgYW5kIHRoYXQgYWxsIHJlcXVpcmVkIGZpZWxkcyBhcmUgbm90IGVtcHR5LlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgZm9ybSBiZWluZyB2YWxpZGF0ZWQuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IEZhbHNlIGlmIEFKQVggcHJvY2Vzc2luZyBpcyBkaXNhYmxlZCBmb3IgdGhpcyBmb3JtIG9yIGlmIGEgcmVxdWlyZWQgZmllbGQgaXMgZW1wdHkuXG5cdCAqL1xuXHRhcHAudmFsaWRhdGVTdWJtaXNzaW9uID0gKCAkZm9ybSApID0+IHtcblxuXHRcdGlmICggJ29uJyAhPT0gJGZvcm0uYXR0ciggJ2RhdGEtZG9hamF4JyApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSBhbGwgcmVxdWlyZWQgZmllbGRzIGluIHRoaXMgZm9ybSBhcmUgdmFsaWQuXG5cdFx0JC5lYWNoKCAkZm9ybS5maW5kKCAnW3JlcXVpcmVkXScgKSwgZnVuY3Rpb24oIGksIGZpZWxkICkge1xuXG5cdFx0XHRpZiAoIGZhbHNlID09PSBmaWVsZC5jaGVja1ZhbGlkaXR5KCkgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXHQvKipcblx0ICogUHJlcGVuZHMgZm9ybSB3aXRoIGEgbWVzc2FnZSB0aGF0IGZhZGVzIG91dCBpbiA1IHNlY29uZHMuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9ICRmb3JtIGpRdWVyeSBvYmplY3QgZm9yIHRoZSBmb3JtIGEgbWVzc2FnZSBpcyBiZWluZyBkaXNwbGF5ZWQgZm9yLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSBjb250ZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NlcyBPcHRpb25hbC4gSFRNTCBjbGFzc2VzIHRvIGFkZCB0byB0aGUgbWVzc2FnZSB3cmFwcGVyLlxuXHQgKi9cblx0YXBwLnNob3dNZXNzYWdlID0gKCAkZm9ybSwgbWVzc2FnZSwgY2xhc3NlcyA9ICcnLCByb2xlID0gJ2xvZycgKSA9PiB7XG5cblx0XHQkZm9ybS5wYXJlbnRzKCAnLmN0Y3QtZm9ybS13cmFwcGVyJyApLmZpbmQoICdwLmN0Y3QtbWVzc2FnZScgKS5yZW1vdmUoKTtcblxuXHRcdHZhciAkcCA9ICQoICc8cCAvPicsIHtcblx0XHRcdCdjbGFzcyc6ICdjdGN0LW1lc3NhZ2UgJyArIGNsYXNzZXMsXG5cdFx0XHQndGV4dCc6IG1lc3NhZ2UsXG5cdFx0XHQncm9sZSc6IHJvbGVcblx0XHR9ICk7XG5cblx0XHQkcC5pbnNlcnRCZWZvcmUoICRmb3JtICkuZmFkZUluKCAyMDAgKTtcblx0fTtcblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYWN0dWFsIGZvcm0gdmlhIEFKQVguXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9ICRmb3JtIGpRdWVyeSBvYmplY3QgZm9yIHRoZSBmb3JtIGJlaW5nIHN1Ym1pdHRlZC5cblx0ICovXG5cdGFwcC5zdWJtaXRGb3JtID0gKCAkZm9ybSApID0+IHtcblxuXHRcdCRmb3JtLmZpbmQoICcuY3RjdC1zdWJtaXR0ZWQnICkucHJvcCggJ2Rpc2FibGVkJywgdHJ1ZSApO1xuXG5cdFx0dmFyIGFqYXhEYXRhID0ge1xuXHRcdFx0J2FjdGlvbic6ICdjdGN0X3Byb2Nlc3NfZm9ybScsXG5cdFx0XHQnZGF0YSc6ICRmb3JtLnNlcmlhbGl6ZSgpXG5cdFx0fTtcblxuXHRcdCQucG9zdCggd2luZG93LmFqYXh1cmwsIGFqYXhEYXRhLCAoIHJlc3BvbnNlICkgPT4ge1xuXG5cdFx0XHQkZm9ybS5maW5kKCAnLmN0Y3Qtc3VibWl0dGVkJyApLnByb3AoICdkaXNhYmxlZCcsIGZhbHNlICk7XG5cblx0XHRcdGlmICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiggcmVzcG9uc2Uuc3RhdHVzICkgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSGVyZSB3ZSdsbCB3YW50IHRvIGRpc2FibGUgdGhlIHN1Ym1pdCBidXR0b24gYW5kIGFkZCBzb21lIGVycm9yIGNsYXNzZXMuXG5cdFx0XHRpZiAoICdzdWNjZXNzJyAhPT0gcmVzcG9uc2Uuc3RhdHVzICkge1xuXG5cdFx0XHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiggcmVzcG9uc2UuZXJyb3JzICkgKSB7XG5cdFx0XHRcdFx0YXBwLnNldEFsbElucHV0c1ZhbGlkKCk7XG5cdFx0XHRcdFx0cmVzcG9uc2UuZXJyb3JzLmZvckVhY2goIGFwcC5wcm9jZXNzRXJyb3IgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhcHAuc2hvd01lc3NhZ2UoICRmb3JtLCByZXNwb25zZS5tZXNzYWdlLCAnY3RjdC1lcnJvcicsICdhbGVydCcgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2UncmUgaGVyZSwgdGhlIHN1Ym1pc3Npb24gd2FzIGEgc3VjY2Vzczsgc2hvdyBtZXNzYWdlIGFuZCByZXNldCBmb3JtIGZpZWxkcy5cblx0XHRcdGFwcC5zaG93TWVzc2FnZSggJGZvcm0sIHJlc3BvbnNlLm1lc3NhZ2UsICdjdGN0LXN1Y2Nlc3MnLCAnc3RhdHVzJyApO1xuXHRcdFx0JGZvcm1bMF0ucmVzZXQoKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEhhbmRsZSB0aGUgZm9ybSBzdWJtaXNzaW9uLlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBlIFRoZSBzdWJtaXQgZXZlbnQuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgY3VycmVudCBmb3JtIGJlaW5nIGhhbmRsZWQuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IEZhbHNlIGlmIHVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgZm9ybS5cblx0ICovXG5cdGFwcC5oYW5kbGVTdWJtaXNzaW9uID0gKCBlLCAkZm9ybSApID0+IHtcblxuXHRcdGlmICggISBhcHAudmFsaWRhdGVTdWJtaXNzaW9uKCAkZm9ybSApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGNsZWFyVGltZW91dCggYXBwLnRpbWVvdXQgKTtcblxuXHRcdGFwcC50aW1lb3V0ID0gc2V0VGltZW91dCggYXBwLnN1Ym1pdEZvcm0sIDUwMCwgJGZvcm0gKTtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IHVwIGV2ZW50IGJpbmRpbmdzIGFuZCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5iaW5kRXZlbnRzID0gKCkgPT4ge1xuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdFx0JC5lYWNoKCBhcHAuJGMuJGZvcm1zLCBmdW5jdGlvbiggaSwgZm9ybSApIHtcblxuXHRcdFx0Ly8gQXR0YWNoIHN1Ym1pc3Npb24gaGFuZGxlciB0byBlYWNoIGZvcm0ncyBTdWJtaXQgYnV0dG9uLlxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLm9uKCAnY2xpY2snLCAnaW5wdXRbdHlwZT1zdWJtaXRdJywgKCBlICkgPT4ge1xuXHRcdFx0XHRhcHAuaGFuZGxlU3VibWlzc2lvbiggZSwgYXBwLiRjLiRmb3Jtc1sgaSBdICk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdC8vIEVuc3VyZSBlYWNoIGZvcm0ncyBob25leXBvdCBpcyBjaGVja2VkLlxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRob25leXBvdC5vbiggJ2NoYW5nZSBrZXl1cCcsICggZSApID0+IHtcblxuXHRcdFx0XHRhcHAuY2hlY2tIb25leXBvdChcblx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdGFwcC4kYy4kZm9ybXNbIGkgXS4kaG9uZXlwb3QsXG5cdFx0XHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRzdWJtaXRCdXR0b25cblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblxuXHRcdFx0Ly8gRGlzYWJsZSB0aGUgc3VibWl0IGJ1dHRvbiBieSBkZWZhdWx0IHVudGlsIHRoZSBjYXB0Y2hhIGlzIHBhc3NlZCAoaWYgY2FwdGNoYSBleGlzdHMpLlxuXHRcdFx0aWYgKCAwIDwgYXBwLiRjLiRmb3Jtc1sgaSBdLiRyZWNhcHRjaGEubGVuZ3RoICkge1xuXHRcdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHN1Ym1pdEJ1dHRvbi5hdHRyKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XG5cdFx0XHR9XG5cblx0XHR9ICk7XG5cdH07XG5cblx0JCggYXBwLmluaXQgKTtcblxufSAoIHdpbmRvdywgalF1ZXJ5LCB3aW5kb3cuQ1RDVFN1cHBvcnQgKSApO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0FBU0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7O0FBVUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBUUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7OztBQVVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-frontend/validation.js\n"); /***/ }), diff --git a/assets/js/ctct-plugin-frontend/validation.js b/assets/js/ctct-plugin-frontend/validation.js index 5c6bca73..adae3fc2 100644 --- a/assets/js/ctct-plugin-frontend/validation.js +++ b/assets/js/ctct-plugin-frontend/validation.js @@ -146,11 +146,14 @@ * @param {string} message The message content. * @param {string} classes Optional. HTML classes to add to the message wrapper. */ - app.showMessage = ( $form, message, classes = '' ) => { + app.showMessage = ( $form, message, classes = '', role = 'log' ) => { + + $form.parents( '.ctct-form-wrapper' ).find( 'p.ctct-message' ).remove(); var $p = $( '

', { 'class': 'ctct-message ' + classes, - 'text': message + 'text': message, + 'role': role } ); $p.insertBefore( $form ).fadeIn( 200 ); @@ -188,14 +191,14 @@ app.setAllInputsValid(); response.errors.forEach( app.processError ); } else { - app.showMessage( $form, response.message, 'ctct-error' ); + app.showMessage( $form, response.message, 'ctct-error', 'alert' ); } return false; } // If we're here, the submission was a success; show message and reset form fields. - app.showMessage( $form, response.message, 'ctct-success' ); + app.showMessage( $form, response.message, 'ctct-success', 'status' ); $form[0].reset(); } ); }; From 808d3d2f125a69cba40a444fad7f7c5b22c4e5f7 Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Tue, 30 Jun 2020 10:31:09 -0600 Subject: [PATCH 24/29] Add role and "ctct-"-prefixed class to non-ajax submission message CC-160 --- includes/class-display.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/includes/class-display.php b/includes/class-display.php index 7729a287..bf41dc06 100644 --- a/includes/class-display.php +++ b/includes/class-display.php @@ -281,7 +281,7 @@ public function form( $form_data, $form_id = '', $show_title = false, $instance if ( $response && isset( $response['message'] ) && isset( $response['status'] ) ) { if ( 'success' === $response['status'] ) { - return $this->message( 'success', $response['message'] ); + return $this->message( 'success', $response['message'], 'status' ); } else { // If we didn't get a success message, then we want to error. @@ -294,7 +294,7 @@ public function form( $form_data, $form_id = '', $show_title = false, $instance if ( 'error' === $status || $error_message ) { if ( ! empty( $error_message ) ) { - $form_err_display = $this->message( 'error', $error_message ); + $form_err_display = $this->message( 'error', $error_message, 'alert' ); } } @@ -765,17 +765,17 @@ public function get_submitted_value( $value = '', $map = '', $field = [], $submi * * @since 1.0.0 * - * @param string $type Success/error/etc for class. - * @param string $message Message to display to user. - * @return string HTML markup. + * @param string $type Success/error/etc for class. + * @param string $message Message to display to user. + * @param string $role Message role. + * @return string HTML markup. */ - public function message( $type, $message ) { - $role = ( 'error' === $type ) ? ' role="alert"' : ''; - + public function message( $type, $message, $role = 'log' ) { return sprintf( - '

%s

', + '

%s

', + esc_attr( $type ), esc_attr( $type ), - $role, + esc_attr( $role ), esc_html( $message ) ); } From f021e5a6d500946ae5562d3772bdfa942f22396c Mon Sep 17 00:00:00 2001 From: Rebekah Van Epps Date: Wed, 1 Jul 2020 11:35:56 -0600 Subject: [PATCH 25/29] Add dismiss button to ajax notice CC-160 --- assets/js/ctct-plugin-frontend.js | 2 +- assets/js/ctct-plugin-frontend/validation.js | 6 +++++- assets/js/ctct-plugin-gutenberg.js | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/assets/js/ctct-plugin-frontend.js b/assets/js/ctct-plugin-frontend.js index 2cb0fa86..df9ad04d 100644 --- a/assets/js/ctct-plugin-frontend.js +++ b/assets/js/ctct-plugin-frontend.js @@ -116,7 +116,7 @@ eval("/**\n * General-purpose utility stuff for CC plugin.\n */\n(function (glob /*! no static exports found */ /***/ (function(module, exports) { -eval("/**\n * Front-end form validation.\n *\n * @since 1.0.0\n */\nwindow.CTCTSupport = {};\n\n(function (window, $, app) {\n var _this = this;\n\n /**\n * @constructor\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n app.init = function () {\n app.cache();\n app.bindEvents();\n app.removePlaceholder();\n };\n /**\n * Remove placeholder text values.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.removePlaceholder = function () {\n $('.ctct-form-field input, textarea').focus(function () {\n $(_this).data('placeholder', $(_this).attr('placeholder')).attr('placeholder', '');\n }).blur(function () {\n $(_this).attr('placeholder', $(_this).data('placeholder'));\n });\n };\n /**\n * Cache DOM elements.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.cache = function () {\n app.$c = {\n $forms: []\n }; // Cache each form on the page.\n\n $('.ctct-form-wrapper').each(function (i, formWrapper) {\n app.$c.$forms.push($(formWrapper).find('form'));\n }); // For each form, cache its common elements.\n\n $.each(app.$c.$forms, function (i, form) {\n var $form = $(form);\n app.$c.$forms[i].$honeypot = $form.find('.ctct_usage_field');\n app.$c.$forms[i].$submitButton = $form.find('input[type=submit]');\n app.$c.$forms[i].$recaptcha = $form.find('.g-recaptcha');\n });\n app.timeout = null;\n };\n /**\n * Remove the ctct-invalid class from elements that have it.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.setAllInputsValid = function () {\n $(app.$c.$form + ' .ctct-invalid').removeClass('ctct-invalid');\n };\n /**\n * Adds .ctct-invalid HTML class to inputs whose values are invalid.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} error AJAX response error object.\n */\n\n\n app.processError = function (error) {\n // If we have an id property set.\n if ('undefined' !== typeof error.id) {\n $('#' + error.id).addClass('ctct-invalid');\n }\n };\n /**\n * Check the value of the hidden honeypot field; disable form submission button if anything in it.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} e The change or keyup event triggering this callback.\n * @param {object} $honeyPot The jQuery object for the actual input field being checked.\n * @param {object} $submitButton The jQuery object for the submit button in the same form as the honeypot field.\n */\n\n\n app.checkHoneypot = function (e, $honeyPot, $submitButton) {\n // If there is text in the honeypot, disable the submit button\n if (0 < $honeyPot.val().length) {\n $submitButton.attr('disabled', 'disabled');\n } else {\n $submitButton.attr('disabled', false);\n }\n };\n /**\n * Ensures that we should use AJAX to process the specified form, and that all required fields are not empty.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form being validated.\n * @return {boolean} False if AJAX processing is disabled for this form or if a required field is empty.\n */\n\n\n app.validateSubmission = function ($form) {\n if ('on' !== $form.attr('data-doajax')) {\n return false;\n } // Ensure all required fields in this form are valid.\n\n\n $.each($form.find('[required]'), function (i, field) {\n if (false === field.checkValidity()) {\n return false;\n }\n });\n return true;\n };\n /**\n * Prepends form with a message that fades out in 5 seconds.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form a message is being displayed for.\n * @param {string} message The message content.\n * @param {string} classes Optional. HTML classes to add to the message wrapper.\n */\n\n\n app.showMessage = function ($form, message) {\n var classes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var role = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'log';\n $form.parents('.ctct-form-wrapper').find('p.ctct-message').remove();\n var $p = $('

', {\n 'class': 'ctct-message ' + classes,\n 'text': message,\n 'role': role\n });\n $p.insertBefore($form).fadeIn(200);\n };\n /**\n * Submits the actual form via AJAX.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form being submitted.\n */\n\n\n app.submitForm = function ($form) {\n $form.find('.ctct-submitted').prop('disabled', true);\n var ajaxData = {\n 'action': 'ctct_process_form',\n 'data': $form.serialize()\n };\n $.post(window.ajaxurl, ajaxData, function (response) {\n $form.find('.ctct-submitted').prop('disabled', false);\n\n if ('undefined' === typeof response.status) {\n return false;\n } // Here we'll want to disable the submit button and add some error classes.\n\n\n if ('success' !== response.status) {\n if ('undefined' !== typeof response.errors) {\n app.setAllInputsValid();\n response.errors.forEach(app.processError);\n } else {\n app.showMessage($form, response.message, 'ctct-error', 'alert');\n }\n\n return false;\n } // If we're here, the submission was a success; show message and reset form fields.\n\n\n app.showMessage($form, response.message, 'ctct-success', 'status');\n $form[0].reset();\n });\n };\n /**\n * Handle the form submission.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} e The submit event.\n * @param {object} $form jQuery object for the current form being handled.\n * @return {boolean} False if unable to validate the form.\n */\n\n\n app.handleSubmission = function (e, $form) {\n if (!app.validateSubmission($form)) {\n return false;\n }\n\n e.preventDefault();\n clearTimeout(app.timeout);\n app.timeout = setTimeout(app.submitForm, 500, $form);\n };\n /**\n * Set up event bindings and callbacks.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.bindEvents = function () {\n // eslint-disable-next-line no-unused-vars\n $.each(app.$c.$forms, function (i, form) {\n // Attach submission handler to each form's Submit button.\n app.$c.$forms[i].on('click', 'input[type=submit]', function (e) {\n app.handleSubmission(e, app.$c.$forms[i]);\n }); // Ensure each form's honeypot is checked.\n\n app.$c.$forms[i].$honeypot.on('change keyup', function (e) {\n app.checkHoneypot(e, app.$c.$forms[i].$honeypot, app.$c.$forms[i].$submitButton);\n }); // Disable the submit button by default until the captcha is passed (if captcha exists).\n\n if (0 < app.$c.$forms[i].$recaptcha.length) {\n app.$c.$forms[i].$submitButton.attr('disabled', 'disabled');\n }\n });\n };\n\n $(app.init);\n})(window, jQuery, window.CTCTSupport);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tZnJvbnRlbmQvdmFsaWRhdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jdGN0LXBsdWdpbi1mcm9udGVuZC92YWxpZGF0aW9uLmpzPzMzOTkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGcm9udC1lbmQgZm9ybSB2YWxpZGF0aW9uLlxuICpcbiAqIEBzaW5jZSAxLjAuMFxuICovXG5cbiB3aW5kb3cuQ1RDVFN1cHBvcnQgPSB7fTtcblxuKCBmdW5jdGlvbiggd2luZG93LCAkLCBhcHAgKSB7XG5cblx0LyoqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqL1xuXHRhcHAuaW5pdCA9ICgpID0+IHtcblx0XHRhcHAuY2FjaGUoKTtcblx0XHRhcHAuYmluZEV2ZW50cygpO1xuXHRcdGFwcC5yZW1vdmVQbGFjZWhvbGRlcigpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZW1vdmUgcGxhY2Vob2xkZXIgdGV4dCB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5yZW1vdmVQbGFjZWhvbGRlciA9ICgpID0+IHtcblx0XHQkKCAnLmN0Y3QtZm9ybS1maWVsZCBpbnB1dCwgdGV4dGFyZWEnICkuZm9jdXMoICgpID0+IHtcblx0XHRcdCQoIHRoaXMgKS5kYXRhKCAncGxhY2Vob2xkZXInLCAkKCB0aGlzICkuYXR0ciggJ3BsYWNlaG9sZGVyJyApICkuYXR0ciggJ3BsYWNlaG9sZGVyJywgJycgKTtcblx0XHR9ICkuYmx1ciggKCkgPT4ge1xuXHRcdFx0JCggdGhpcyApLmF0dHIoICdwbGFjZWhvbGRlcicsICQoIHRoaXMgKS5kYXRhKCAncGxhY2Vob2xkZXInICkgKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIENhY2hlIERPTSBlbGVtZW50cy5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLmNhY2hlID0gKCkgPT4ge1xuXG5cdFx0YXBwLiRjID0ge1xuXHRcdFx0JGZvcm1zOiBbXVxuXHRcdH07XG5cblx0XHQvLyBDYWNoZSBlYWNoIGZvcm0gb24gdGhlIHBhZ2UuXG5cdFx0JCggJy5jdGN0LWZvcm0td3JhcHBlcicgKS5lYWNoKCBmdW5jdGlvbiggaSwgZm9ybVdyYXBwZXIgKSB7XG5cdFx0XHRhcHAuJGMuJGZvcm1zLnB1c2goICQoIGZvcm1XcmFwcGVyICkuZmluZCggJ2Zvcm0nICkgKTtcblx0XHR9ICk7XG5cblx0XHQvLyBGb3IgZWFjaCBmb3JtLCBjYWNoZSBpdHMgY29tbW9uIGVsZW1lbnRzLlxuXHRcdCQuZWFjaCggYXBwLiRjLiRmb3JtcywgZnVuY3Rpb24oIGksIGZvcm0gKSB7XG5cblx0XHRcdHZhciAkZm9ybSA9ICQoIGZvcm0gKTtcblxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRob25leXBvdCAgICAgPSAkZm9ybS5maW5kKCAnLmN0Y3RfdXNhZ2VfZmllbGQnICk7XG5cdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHN1Ym1pdEJ1dHRvbiA9ICRmb3JtLmZpbmQoICdpbnB1dFt0eXBlPXN1Ym1pdF0nICk7XG5cdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHJlY2FwdGNoYSAgICA9ICRmb3JtLmZpbmQoICcuZy1yZWNhcHRjaGEnICk7XG5cdFx0fSApO1xuXG5cdFx0YXBwLnRpbWVvdXQgPSBudWxsO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGN0Y3QtaW52YWxpZCBjbGFzcyBmcm9tIGVsZW1lbnRzIHRoYXQgaGF2ZSBpdC5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLnNldEFsbElucHV0c1ZhbGlkID0gKCkgPT4ge1xuXHRcdCQoIGFwcC4kYy4kZm9ybSArICcgLmN0Y3QtaW52YWxpZCcgKS5yZW1vdmVDbGFzcyggJ2N0Y3QtaW52YWxpZCcgKTtcblx0fTtcblxuXHQvKipcblx0ICogQWRkcyAuY3RjdC1pbnZhbGlkIEhUTUwgY2xhc3MgdG8gaW5wdXRzIHdob3NlIHZhbHVlcyBhcmUgaW52YWxpZC5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZXJyb3IgQUpBWCByZXNwb25zZSBlcnJvciBvYmplY3QuXG5cdCAqL1xuXHRhcHAucHJvY2Vzc0Vycm9yID0gKCBlcnJvciApID0+IHtcblxuXHRcdC8vIElmIHdlIGhhdmUgYW4gaWQgcHJvcGVydHkgc2V0LlxuXHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiggZXJyb3IuaWQgKSApIHtcblx0XHRcdCQoICcjJyArIGVycm9yLmlkICkuYWRkQ2xhc3MoICdjdGN0LWludmFsaWQnICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBDaGVjayB0aGUgdmFsdWUgb2YgdGhlIGhpZGRlbiBob25leXBvdCBmaWVsZDsgZGlzYWJsZSBmb3JtIHN1Ym1pc3Npb24gYnV0dG9uIGlmIGFueXRoaW5nIGluIGl0LlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBlIFRoZSBjaGFuZ2Ugb3Iga2V5dXAgZXZlbnQgdHJpZ2dlcmluZyB0aGlzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gJGhvbmV5UG90IFRoZSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgYWN0dWFsIGlucHV0IGZpZWxkIGJlaW5nIGNoZWNrZWQuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkc3VibWl0QnV0dG9uIFRoZSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgc3VibWl0IGJ1dHRvbiBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZSBob25leXBvdCBmaWVsZC5cblx0ICovXG5cdGFwcC5jaGVja0hvbmV5cG90ID0gKCBlLCAkaG9uZXlQb3QsICRzdWJtaXRCdXR0b24gKSA9PiB7XG5cblx0XHQvLyBJZiB0aGVyZSBpcyB0ZXh0IGluIHRoZSBob25leXBvdCwgZGlzYWJsZSB0aGUgc3VibWl0IGJ1dHRvblxuXHRcdGlmICggMCA8ICRob25leVBvdC52YWwoKS5sZW5ndGggKSB7XG5cdFx0XHQkc3VibWl0QnV0dG9uLmF0dHIoICdkaXNhYmxlZCcsICdkaXNhYmxlZCcgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHN1Ym1pdEJ1dHRvbi5hdHRyKCAnZGlzYWJsZWQnLCBmYWxzZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogRW5zdXJlcyB0aGF0IHdlIHNob3VsZCB1c2UgQUpBWCB0byBwcm9jZXNzIHRoZSBzcGVjaWZpZWQgZm9ybSwgYW5kIHRoYXQgYWxsIHJlcXVpcmVkIGZpZWxkcyBhcmUgbm90IGVtcHR5LlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgZm9ybSBiZWluZyB2YWxpZGF0ZWQuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IEZhbHNlIGlmIEFKQVggcHJvY2Vzc2luZyBpcyBkaXNhYmxlZCBmb3IgdGhpcyBmb3JtIG9yIGlmIGEgcmVxdWlyZWQgZmllbGQgaXMgZW1wdHkuXG5cdCAqL1xuXHRhcHAudmFsaWRhdGVTdWJtaXNzaW9uID0gKCAkZm9ybSApID0+IHtcblxuXHRcdGlmICggJ29uJyAhPT0gJGZvcm0uYXR0ciggJ2RhdGEtZG9hamF4JyApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSBhbGwgcmVxdWlyZWQgZmllbGRzIGluIHRoaXMgZm9ybSBhcmUgdmFsaWQuXG5cdFx0JC5lYWNoKCAkZm9ybS5maW5kKCAnW3JlcXVpcmVkXScgKSwgZnVuY3Rpb24oIGksIGZpZWxkICkge1xuXG5cdFx0XHRpZiAoIGZhbHNlID09PSBmaWVsZC5jaGVja1ZhbGlkaXR5KCkgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXHQvKipcblx0ICogUHJlcGVuZHMgZm9ybSB3aXRoIGEgbWVzc2FnZSB0aGF0IGZhZGVzIG91dCBpbiA1IHNlY29uZHMuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9ICRmb3JtIGpRdWVyeSBvYmplY3QgZm9yIHRoZSBmb3JtIGEgbWVzc2FnZSBpcyBiZWluZyBkaXNwbGF5ZWQgZm9yLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSBjb250ZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NlcyBPcHRpb25hbC4gSFRNTCBjbGFzc2VzIHRvIGFkZCB0byB0aGUgbWVzc2FnZSB3cmFwcGVyLlxuXHQgKi9cblx0YXBwLnNob3dNZXNzYWdlID0gKCAkZm9ybSwgbWVzc2FnZSwgY2xhc3NlcyA9ICcnLCByb2xlID0gJ2xvZycgKSA9PiB7XG5cblx0XHQkZm9ybS5wYXJlbnRzKCAnLmN0Y3QtZm9ybS13cmFwcGVyJyApLmZpbmQoICdwLmN0Y3QtbWVzc2FnZScgKS5yZW1vdmUoKTtcblxuXHRcdHZhciAkcCA9ICQoICc8cCAvPicsIHtcblx0XHRcdCdjbGFzcyc6ICdjdGN0LW1lc3NhZ2UgJyArIGNsYXNzZXMsXG5cdFx0XHQndGV4dCc6IG1lc3NhZ2UsXG5cdFx0XHQncm9sZSc6IHJvbGVcblx0XHR9ICk7XG5cblx0XHQkcC5pbnNlcnRCZWZvcmUoICRmb3JtICkuZmFkZUluKCAyMDAgKTtcblx0fTtcblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYWN0dWFsIGZvcm0gdmlhIEFKQVguXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9ICRmb3JtIGpRdWVyeSBvYmplY3QgZm9yIHRoZSBmb3JtIGJlaW5nIHN1Ym1pdHRlZC5cblx0ICovXG5cdGFwcC5zdWJtaXRGb3JtID0gKCAkZm9ybSApID0+IHtcblxuXHRcdCRmb3JtLmZpbmQoICcuY3RjdC1zdWJtaXR0ZWQnICkucHJvcCggJ2Rpc2FibGVkJywgdHJ1ZSApO1xuXG5cdFx0dmFyIGFqYXhEYXRhID0ge1xuXHRcdFx0J2FjdGlvbic6ICdjdGN0X3Byb2Nlc3NfZm9ybScsXG5cdFx0XHQnZGF0YSc6ICRmb3JtLnNlcmlhbGl6ZSgpXG5cdFx0fTtcblxuXHRcdCQucG9zdCggd2luZG93LmFqYXh1cmwsIGFqYXhEYXRhLCAoIHJlc3BvbnNlICkgPT4ge1xuXG5cdFx0XHQkZm9ybS5maW5kKCAnLmN0Y3Qtc3VibWl0dGVkJyApLnByb3AoICdkaXNhYmxlZCcsIGZhbHNlICk7XG5cblx0XHRcdGlmICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiggcmVzcG9uc2Uuc3RhdHVzICkgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSGVyZSB3ZSdsbCB3YW50IHRvIGRpc2FibGUgdGhlIHN1Ym1pdCBidXR0b24gYW5kIGFkZCBzb21lIGVycm9yIGNsYXNzZXMuXG5cdFx0XHRpZiAoICdzdWNjZXNzJyAhPT0gcmVzcG9uc2Uuc3RhdHVzICkge1xuXG5cdFx0XHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiggcmVzcG9uc2UuZXJyb3JzICkgKSB7XG5cdFx0XHRcdFx0YXBwLnNldEFsbElucHV0c1ZhbGlkKCk7XG5cdFx0XHRcdFx0cmVzcG9uc2UuZXJyb3JzLmZvckVhY2goIGFwcC5wcm9jZXNzRXJyb3IgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhcHAuc2hvd01lc3NhZ2UoICRmb3JtLCByZXNwb25zZS5tZXNzYWdlLCAnY3RjdC1lcnJvcicsICdhbGVydCcgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2UncmUgaGVyZSwgdGhlIHN1Ym1pc3Npb24gd2FzIGEgc3VjY2Vzczsgc2hvdyBtZXNzYWdlIGFuZCByZXNldCBmb3JtIGZpZWxkcy5cblx0XHRcdGFwcC5zaG93TWVzc2FnZSggJGZvcm0sIHJlc3BvbnNlLm1lc3NhZ2UsICdjdGN0LXN1Y2Nlc3MnLCAnc3RhdHVzJyApO1xuXHRcdFx0JGZvcm1bMF0ucmVzZXQoKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEhhbmRsZSB0aGUgZm9ybSBzdWJtaXNzaW9uLlxuXHQgKlxuXHQgKiBAYXV0aG9yIENvbnN0YW50IENvbnRhY3Rcblx0ICogQHNpbmNlIDEuMC4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBlIFRoZSBzdWJtaXQgZXZlbnQuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSAkZm9ybSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgY3VycmVudCBmb3JtIGJlaW5nIGhhbmRsZWQuXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IEZhbHNlIGlmIHVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgZm9ybS5cblx0ICovXG5cdGFwcC5oYW5kbGVTdWJtaXNzaW9uID0gKCBlLCAkZm9ybSApID0+IHtcblxuXHRcdGlmICggISBhcHAudmFsaWRhdGVTdWJtaXNzaW9uKCAkZm9ybSApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGNsZWFyVGltZW91dCggYXBwLnRpbWVvdXQgKTtcblxuXHRcdGFwcC50aW1lb3V0ID0gc2V0VGltZW91dCggYXBwLnN1Ym1pdEZvcm0sIDUwMCwgJGZvcm0gKTtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IHVwIGV2ZW50IGJpbmRpbmdzIGFuZCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5iaW5kRXZlbnRzID0gKCkgPT4ge1xuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdFx0JC5lYWNoKCBhcHAuJGMuJGZvcm1zLCBmdW5jdGlvbiggaSwgZm9ybSApIHtcblxuXHRcdFx0Ly8gQXR0YWNoIHN1Ym1pc3Npb24gaGFuZGxlciB0byBlYWNoIGZvcm0ncyBTdWJtaXQgYnV0dG9uLlxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLm9uKCAnY2xpY2snLCAnaW5wdXRbdHlwZT1zdWJtaXRdJywgKCBlICkgPT4ge1xuXHRcdFx0XHRhcHAuaGFuZGxlU3VibWlzc2lvbiggZSwgYXBwLiRjLiRmb3Jtc1sgaSBdICk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdC8vIEVuc3VyZSBlYWNoIGZvcm0ncyBob25leXBvdCBpcyBjaGVja2VkLlxuXHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRob25leXBvdC5vbiggJ2NoYW5nZSBrZXl1cCcsICggZSApID0+IHtcblxuXHRcdFx0XHRhcHAuY2hlY2tIb25leXBvdChcblx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdGFwcC4kYy4kZm9ybXNbIGkgXS4kaG9uZXlwb3QsXG5cdFx0XHRcdFx0YXBwLiRjLiRmb3Jtc1sgaSBdLiRzdWJtaXRCdXR0b25cblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblxuXHRcdFx0Ly8gRGlzYWJsZSB0aGUgc3VibWl0IGJ1dHRvbiBieSBkZWZhdWx0IHVudGlsIHRoZSBjYXB0Y2hhIGlzIHBhc3NlZCAoaWYgY2FwdGNoYSBleGlzdHMpLlxuXHRcdFx0aWYgKCAwIDwgYXBwLiRjLiRmb3Jtc1sgaSBdLiRyZWNhcHRjaGEubGVuZ3RoICkge1xuXHRcdFx0XHRhcHAuJGMuJGZvcm1zWyBpIF0uJHN1Ym1pdEJ1dHRvbi5hdHRyKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XG5cdFx0XHR9XG5cblx0XHR9ICk7XG5cdH07XG5cblx0JCggYXBwLmluaXQgKTtcblxufSAoIHdpbmRvdywgalF1ZXJ5LCB3aW5kb3cuQ1RDVFN1cHBvcnQgKSApO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0FBU0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7O0FBVUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBUUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7OztBQVVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-frontend/validation.js\n"); +eval("/**\n * Front-end form validation.\n *\n * @since 1.0.0\n */\nwindow.CTCTSupport = {};\n\n(function (window, $, app) {\n var _this = this;\n\n /**\n * @constructor\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n app.init = function () {\n app.cache();\n app.bindEvents();\n app.removePlaceholder();\n };\n /**\n * Remove placeholder text values.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.removePlaceholder = function () {\n $('.ctct-form-field input, textarea').focus(function () {\n $(_this).data('placeholder', $(_this).attr('placeholder')).attr('placeholder', '');\n }).blur(function () {\n $(_this).attr('placeholder', $(_this).data('placeholder'));\n });\n };\n /**\n * Cache DOM elements.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.cache = function () {\n app.$c = {\n $forms: []\n }; // Cache each form on the page.\n\n $('.ctct-form-wrapper').each(function (i, formWrapper) {\n app.$c.$forms.push($(formWrapper).find('form'));\n }); // For each form, cache its common elements.\n\n $.each(app.$c.$forms, function (i, form) {\n var $form = $(form);\n app.$c.$forms[i].$honeypot = $form.find('.ctct_usage_field');\n app.$c.$forms[i].$submitButton = $form.find('input[type=submit]');\n app.$c.$forms[i].$recaptcha = $form.find('.g-recaptcha');\n });\n app.timeout = null;\n };\n /**\n * Remove the ctct-invalid class from elements that have it.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.setAllInputsValid = function () {\n $(app.$c.$form + ' .ctct-invalid').removeClass('ctct-invalid');\n };\n /**\n * Adds .ctct-invalid HTML class to inputs whose values are invalid.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} error AJAX response error object.\n */\n\n\n app.processError = function (error) {\n // If we have an id property set.\n if ('undefined' !== typeof error.id) {\n $('#' + error.id).addClass('ctct-invalid');\n }\n };\n /**\n * Check the value of the hidden honeypot field; disable form submission button if anything in it.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} e The change or keyup event triggering this callback.\n * @param {object} $honeyPot The jQuery object for the actual input field being checked.\n * @param {object} $submitButton The jQuery object for the submit button in the same form as the honeypot field.\n */\n\n\n app.checkHoneypot = function (e, $honeyPot, $submitButton) {\n // If there is text in the honeypot, disable the submit button\n if (0 < $honeyPot.val().length) {\n $submitButton.attr('disabled', 'disabled');\n } else {\n $submitButton.attr('disabled', false);\n }\n };\n /**\n * Ensures that we should use AJAX to process the specified form, and that all required fields are not empty.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form being validated.\n * @return {boolean} False if AJAX processing is disabled for this form or if a required field is empty.\n */\n\n\n app.validateSubmission = function ($form) {\n if ('on' !== $form.attr('data-doajax')) {\n return false;\n } // Ensure all required fields in this form are valid.\n\n\n $.each($form.find('[required]'), function (i, field) {\n if (false === field.checkValidity()) {\n return false;\n }\n });\n return true;\n };\n /**\n * Prepends form with a message that fades out in 5 seconds.\n *\n * @author Constant Contact\n * @since 1.0.0\n *\n * @param {object} $form jQuery object for the form a message is being displayed for.\n * @param {string} message The message content.\n * @param {string} classes Optional. HTML classes to add to the message wrapper.\n */\n\n\n app.showMessage = function ($form, message) {\n var classes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var role = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'log';\n $form.parents('.ctct-form-wrapper').find('p.ctct-message').remove();\n var $p = $('

', {\n 'class': 'ctct-message ' + classes,\n 'text': message,\n 'role': role\n }).prepend($('