assets/languages/wpforms-lite.pot000064400001264662147400353540013216 0ustar00msgid "" msgstr "" "Project-Id-Version: WPForms Lite 1.9.1.6\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms-lite\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2024-10-25T18:22:58+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.7.1\n" "X-Domain: wpforms-lite\n" #. Plugin Name of the plugin #. Author of the plugin #: includes/admin/class-menu.php:47 #: includes/admin/class-menu.php:48 #: includes/admin/class-menu.php:59 #: includes/admin/class-menu.php:137 #: includes/class-form.php:149 #: includes/integrations.php:41 #: src/Emails/Templates/General.php:94 #: src/Integrations/Divi/WPFormsSelector.php:35 #: src/Integrations/Elementor/Widget.php:53 #: src/Integrations/Gutenberg/FormSelector.php:555 #: src/Lite/Admin/DashboardWidget.php:188 #: templates/admin/dashboard/widget/settings.php:47 msgid "WPForms" msgstr "" #. Plugin URI of the plugin #. Author URI of the plugin msgid "https://wpforms.com" msgstr "" #. Description of the plugin msgid "Beginner friendly WordPress contact form plugin. Use our Drag & Drop form builder to create your WordPress forms." msgstr "" #: includes/admin/admin.php:168 #: includes/admin/admin.php:304 #: includes/fields/class-base.php:3315 #: src/Admin/Forms/Tags.php:179 msgid "Loading..." msgstr "" #: includes/admin/admin.php:169 #: includes/admin/builder/class-builder.php:837 #: includes/fields/class-base.php:3316 #: src/Admin/Forms/Tags.php:180 msgid "No results found" msgstr "" #: includes/admin/admin.php:170 #: includes/fields/class-base.php:3317 msgid "No choices to choose from" msgstr "" #: includes/admin/admin.php:184 #: includes/admin/admin.php:251 #: includes/admin/class-about.php:413 #: includes/functions/education.php:30 #: src/Admin/Builder/Templates.php:185 msgid "Activate" msgstr "" #: includes/admin/admin.php:185 #: includes/admin/class-about.php:405 msgid "Activated" msgstr "" #: includes/admin/admin.php:186 #: includes/admin/class-about.php:402 #: src/Db/Payments/ValueValidator.php:122 msgid "Active" msgstr "" #: includes/admin/admin.php:187 msgid "Deactivate" msgstr "" #: includes/admin/admin.php:188 #: includes/admin/class-about.php:410 msgid "Inactive" msgstr "" #: includes/admin/admin.php:189 msgid "Install Addon" msgstr "" #. translators: %1$s - addon download URL, %2$s - link to manual installation guide, %3$s - link to contact support. #: includes/admin/admin.php:192 #: includes/admin/ajax-actions.php:754 msgid "Could not install the addon. Please download it from wpforms.com and install it manually, or contact support for assistance." msgstr "" #: includes/admin/admin.php:205 msgid "Could not install the plugin automatically. Please download and install it manually." msgstr "" #: includes/admin/admin.php:206 msgid "Searching Addons" msgstr "" #: includes/admin/admin.php:208 #: includes/admin/builder/class-builder.php:724 #: includes/admin/class-editor.php:162 #: src/Admin/Builder/Templates.php:182 #: src/Admin/Education/StringsTrait.php:25 #: src/Admin/Forms/Tags.php:453 #: src/Admin/Payments/Views/Single.php:411 #: src/Integrations/AI/Admin/Builder/Enqueues.php:117 #: src/Integrations/Elementor/Elementor.php:133 #: src/Lite/Admin/Education/LiteConnect.php:237 #: templates/admin/components/datepicker.php:72 #: templates/admin/forms/bulk-edit-tags.php:30 msgid "Cancel" msgstr "" #: includes/admin/admin.php:209 #: src/Forms/IconChoices.php:484 #: templates/admin/challenge/modal.php:74 #: templates/builder/fullscreen/mobile-notice.php:25 msgid "Continue" msgstr "" #: includes/admin/admin.php:210 #: includes/admin/builder/class-builder.php:726 #: includes/admin/class-editor.php:108 #: src/Admin/Education/StringsTrait.php:26 #: src/Forms/Locator.php:376 #: src/Lite/Admin/Education/LiteConnect.php:246 #: templates/builder/fullscreen/mobile-notice.php:28 #: templates/builder/help.php:35 msgid "Close" msgstr "" #: includes/admin/admin.php:211 msgid "Close and Refresh" msgstr "" #: includes/admin/admin.php:212 msgid "Change columns to display" msgstr "" #: includes/admin/admin.php:213 msgid "Sorry, there are no form fields that match your criteria." msgstr "" #: includes/admin/admin.php:214 msgid "Sorry, there is no entry meta that match your criteria." msgstr "" #: includes/admin/admin.php:215 msgid "Are you sure you want to delete this entry? This will also remove all associated files, notes, and logs." msgstr "" #: includes/admin/admin.php:216 msgid "Are you sure you want to delete ALL entries? This will also remove all associated files, notes, and logs." msgstr "" #. translators: %s - entry count. #: includes/admin/admin.php:218 msgid "Are you sure you want to delete %s entries? This will also remove all associated files, notes, and logs." msgstr "" #: includes/admin/admin.php:221 msgid "Are you sure you want to trash this entry? This will also remove all associated files, notes, and logs." msgstr "" #: includes/admin/admin.php:222 msgid "Are you sure you want to trash ALL entries? This will also remove all associated files, notes, and logs." msgstr "" #. translators: %s - entry count. #: includes/admin/admin.php:224 msgid "Are you sure you want to trash %s entries? This will also remove all associated files, notes, and logs." msgstr "" #: includes/admin/admin.php:227 msgid "Hide Empty Fields" msgstr "" #: includes/admin/admin.php:228 msgid "Show Empty Fields" msgstr "" #: includes/admin/admin.php:229 msgid "Are you sure you want to delete this note?" msgstr "" #: includes/admin/admin.php:230 msgid "Unstar entry" msgstr "" #: includes/admin/admin.php:231 msgid "Star entry" msgstr "" #: includes/admin/admin.php:232 msgid "Mark entry read" msgstr "" #: includes/admin/admin.php:233 msgid "Mark entry unread" msgstr "" #: includes/admin/admin.php:234 msgid "Are you sure you want to delete this form and all its entries?" msgstr "" #: includes/admin/admin.php:235 msgid "Are you sure you want to delete this template and all its entries?" msgstr "" #: includes/admin/admin.php:236 msgid "Are you sure you want to delete the selected forms and all their entries?" msgstr "" #: includes/admin/admin.php:237 msgid "Are you sure you want to delete ALL the forms in the trash and all their entries?" msgstr "" #: includes/admin/admin.php:238 msgid "Are you sure you want to duplicate this form?" msgstr "" #: includes/admin/admin.php:239 msgid "Are you sure you want to duplicate this template?" msgstr "" #: includes/admin/admin.php:240 #: includes/admin/builder/class-builder.php:736 #: src/Admin/Education/Builder/Captcha.php:161 #: src/Admin/Tools/Views/Importer.php:223 #: src/Forms/Preview.php:338 #: src/Integrations/Elementor/Elementor.php:132 #: src/Integrations/Gutenberg/FormSelector.php:613 #: wpforms.php:211 msgid "Heads up!" msgstr "" #: includes/admin/admin.php:241 msgid "Please select at least one form to import." msgstr "" #: includes/admin/admin.php:244 msgid "Almost Done" msgstr "" #: includes/admin/admin.php:245 #: src/Admin/Education/StringsTrait.php:111 msgid "Thanks for your interest in WPForms Pro!" msgstr "" #: includes/admin/admin.php:246 msgid "Oops!" msgstr "" #: includes/admin/admin.php:247 #: src/Forms/IconChoices.php:486 msgid "Uh oh!" msgstr "" #: includes/admin/admin.php:248 #: includes/admin/builder/class-builder.php:725 msgid "OK" msgstr "" #: includes/admin/admin.php:249 msgid "Install and Activate" msgstr "" #: includes/admin/admin.php:250 msgid "needs to be installed and activated to import its forms. Would you like us to install and activate it for you?" msgstr "" #: includes/admin/admin.php:252 msgid "needs to be activated to import its forms. Would you like us to activate it for you?" msgstr "" #: includes/admin/admin.php:253 msgid "Are you sure you want to disconnect this account?" msgstr "" #: includes/admin/admin.php:254 msgid "Could not disconnect this account." msgstr "" #: includes/admin/admin.php:255 msgid "Could not authenticate with the provider." msgstr "" #: includes/admin/admin.php:256 msgid "Connecting..." msgstr "" #: includes/admin/admin.php:257 msgid "Save and Refresh" msgstr "" #: includes/admin/admin.php:258 #: templates/admin/dashboard/widget/settings.php:57 msgid "Save Changes" msgstr "" #: includes/admin/admin.php:259 msgid "Unfortunately there was a server connection error." msgstr "" #: includes/admin/admin.php:260 msgid "Unknown error." msgstr "" #. translators: %s - WPForms.com docs page URL. #: includes/admin/admin.php:263 msgid "You've selected Base Styling Only, which may result in styling issues. Please check out our tutorial for common issues and recommendations." msgstr "" #. translators: %s - WPForms.com docs page URL. #: includes/admin/admin.php:277 msgid "You've selected No Styling, which will likely result in significant styling issues and is recommended only for developers. Please check out our tutorial for more details and recommendations." msgstr "" #: includes/admin/admin.php:289 msgid "Testing" msgstr "" #: includes/admin/admin.php:290 msgid "Recreating" msgstr "" #: includes/admin/admin.php:291 msgid "Upgrade was successfully completed!" msgstr "" #: includes/admin/admin.php:292 #: includes/admin/builder/class-builder.php:810 msgid "Upload or Choose Your Image" msgstr "" #: includes/admin/admin.php:293 #: includes/admin/builder/class-builder.php:811 msgid "Use Image" msgstr "" #: includes/admin/admin.php:295 #: includes/admin/builder/class-builder.php:814 msgid "You tried uploading a file type that is not allowed. Please try again." msgstr "" #: includes/admin/admin.php:301 msgid "To edit the License Key, please first click the Remove Key button. Please note that removing this key will remove access to updates, addons, and support." msgstr "" #: includes/admin/admin.php:302 #: includes/admin/builder/class-builder.php:834 msgid "Something went wrong" msgstr "" #: includes/admin/admin.php:303 msgid "Success" msgstr "" #: includes/admin/admin.php:305 #: includes/admin/builder/class-builder.php:769 msgid "Use Default Template" msgstr "" #: includes/admin/admin.php:306 #: includes/admin/builder/class-builder.php:831 msgid "Something went wrong while applying the form template. Please try again. If the error persists, contact our support team." msgstr "" #. translators: %s - link to WPForms.com docs page. #: includes/admin/admin.php:309 msgid "Something went wrong. Please try again, and if the problem persists, contact our support team." msgstr "" #. translators: %1$s - WPForms plugin name; %2$s - WPForms.com URL to a related doc. #: includes/admin/admin.php:584 msgid "Your site is running an outdated version of PHP that is no longer supported and may cause issues with %1$s. Read more for additional information." msgstr "" #: includes/admin/admin.php:598 msgid "Please Note: Support for PHP 7.3 and below will be discontinued soon. After this, if no further action is taken, WPForms functionality will be disabled." msgstr "" #. translators: %s - WPForms.com contact page URL. #: includes/admin/admin.php:635 msgid "Thank you for considering upgrading. If you have any questions, please let us know." msgstr "" #: includes/admin/admin.php:655 msgid "After upgrading, your license key will remain the same.
You may need to do a quick refresh to unlock your new addons. In your WordPress admin, go to WPForms » Settings. If you don't see your updated plan, click refresh." msgstr "" #. translators: %s - WPForms.com upgrade from Lite to paid docs page URL. #: includes/admin/admin.php:666 #: includes/admin/admin.php:716 msgid "Check out our documentation for step-by-step instructions." msgstr "" #. translators: %s - WPForms.com contact page URL. #: includes/admin/admin.php:683 msgid "If you have any questions or issues just let us know." msgstr "" #. translators: %s - license level, WPForms Pro or WPForms Elite. #: includes/admin/admin.php:704 msgid "After purchasing a license, just enter your license key on the WPForms Settings page. This will let your site automatically upgrade to %s! (Don't worry, all your forms and settings will be preserved.)" msgstr "" #: includes/admin/ajax-actions.php:23 #: includes/admin/ajax-actions.php:880 #: includes/fields/class-base.php:2793 #: src/Admin/FormEmbedWizard.php:414 #: src/Integrations/AI/Admin/Ajax/Choices.php:57 msgid "Your session expired. Please reload the builder." msgstr "" #: includes/admin/ajax-actions.php:28 #: includes/fields/class-base.php:2798 #: src/Admin/Builder/Ajax/PanelLoader.php:108 #: src/Admin/Forms/Ajax/Tags.php:205 #: src/Admin/Forms/Ajax/Tags.php:245 msgid "You are not allowed to perform this action." msgstr "" #: includes/admin/ajax-actions.php:33 msgid "Something went wrong while performing this action." msgstr "" #: includes/admin/ajax-actions.php:94 msgid "Something went wrong while saving the form." msgstr "" #: includes/admin/ajax-actions.php:150 msgid "No Form Name Provided" msgstr "" #: includes/admin/ajax-actions.php:164 #: includes/admin/ajax-actions.php:272 msgid "The template you selected is currently not available, but you can try again later. If you continue to have trouble, please reach out to support." msgstr "" #: includes/admin/ajax-actions.php:211 msgid "Error Creating Form" msgstr "" #: includes/admin/ajax-actions.php:256 msgid "No Form ID Provided" msgstr "" #: includes/admin/ajax-actions.php:369 msgid "Error Updating Template" msgstr "" #: includes/admin/ajax-actions.php:486 #: includes/fields/class-base.php:1400 msgid "post type" msgstr "" #: includes/admin/ajax-actions.php:517 #: includes/fields/class-base.php:1408 msgid "taxonomy" msgstr "" #: includes/admin/ajax-actions.php:576 #: includes/admin/ajax-actions.php:615 msgid "You do not have permission to perform this operation." msgstr "" #: includes/admin/ajax-actions.php:586 msgid "Success! Your server can make SSL connections." msgstr "" #: includes/admin/ajax-actions.php:593 msgid "There was an error and the connection failed. Please contact your web host with the technical details below." msgstr "" #: includes/admin/ajax-actions.php:625 msgid "WPForms custom database tables are recreated." msgstr "" #: includes/admin/ajax-actions.php:632 msgid "Error recreating WPForms custom database tables." msgstr "" #: includes/admin/ajax-actions.php:652 msgid "Plugin deactivation is disabled for you on this site." msgstr "" #: includes/admin/ajax-actions.php:665 msgid "Plugin deactivated." msgstr "" #: includes/admin/ajax-actions.php:667 msgid "Addon deactivated." msgstr "" #: includes/admin/ajax-actions.php:671 msgid "Could not deactivate the addon. Please deactivate from the Plugins page." msgstr "" #: includes/admin/ajax-actions.php:688 msgid "Plugin activation is disabled for you on this site." msgstr "" #: includes/admin/ajax-actions.php:692 msgid "Plugin activated." msgstr "" #: includes/admin/ajax-actions.php:693 msgid "Addon activated." msgstr "" #: includes/admin/ajax-actions.php:696 msgid "Could not activate the plugin. Please activate it on the Plugins page." msgstr "" #: includes/admin/ajax-actions.php:697 msgid "Could not activate the addon. Please activate it on the Plugins page." msgstr "" #: includes/admin/ajax-actions.php:742 msgid "There was an error while performing your request." msgstr "" #: includes/admin/ajax-actions.php:751 msgid "Could not install the plugin. Please download and install it manually." msgstr "" #: includes/admin/ajax-actions.php:841 msgid "Plugin installed." msgstr "" #: includes/admin/ajax-actions.php:841 msgid "Addon installed." msgstr "" #: includes/admin/ajax-actions.php:861 #: src/Lite/Admin/Connect.php:203 #: src/Lite/Admin/Connect.php:217 #: src/Lite/Admin/Connect.php:278 msgid "Plugin installed & activated." msgstr "" #: includes/admin/ajax-actions.php:861 msgid "Addon installed & activated." msgstr "" #: includes/admin/ajax-actions.php:884 #: src/Admin/FormEmbedWizard.php:422 msgid "Incorrect usage of this operation." msgstr "" #: includes/admin/builder/class-builder.php:127 #: includes/admin/builder/class-builder.php:152 msgid "It looks like the form you are trying to access is no longer available." msgstr "" #: includes/admin/builder/class-builder.php:141 msgid "Sorry, you are not allowed to create new forms." msgstr "" #: includes/admin/builder/class-builder.php:145 msgid "Sorry, you are not allowed to edit this form." msgstr "" #: includes/admin/builder/class-builder.php:157 msgid "You can't edit this form because it's in the trash." msgstr "" #: includes/admin/builder/class-builder.php:693 msgid "And" msgstr "" #: includes/admin/builder/class-builder.php:695 msgid "Add New Choices" msgstr "" #: includes/admin/builder/class-builder.php:696 #: includes/fields/class-base.php:1307 msgid "Bulk Add" msgstr "" #: includes/admin/builder/class-builder.php:697 msgid "Are you sure you want to leave? You have unsaved changes" msgstr "" #: includes/admin/builder/class-builder.php:698 msgid "Hide Bulk Add" msgstr "" #: includes/admin/builder/class-builder.php:699 msgid "Add Choices (one per line)" msgstr "" #: includes/admin/builder/class-builder.php:700 msgid "" "Blue\n" "Red\n" "Green" msgstr "" #: includes/admin/builder/class-builder.php:701 msgid "Show presets" msgstr "" #: includes/admin/builder/class-builder.php:702 msgid "Hide presets" msgstr "" #. translators: %1$s - data source name (e.g. Categories, Posts), %2$s - data source type (e.g. post type, taxonomy), %3$s - display limit, %4$s - total number of items. #: includes/admin/builder/class-builder.php:708 msgid "The %1$s %2$s contains over %3$s items (%4$s). This may make the field difficult for your visitors to use and/or cause the form to be slow." msgstr "" #. translators: %1$s - data source name (e.g. Categories, Posts), %2$s - data source type (e.g. post type, taxonomy). #: includes/admin/builder/class-builder.php:715 #: includes/fields/class-base.php:3525 msgid "This field will not be displayed in your form since there are no %2$s belonging to %1$s." msgstr "" #: includes/admin/builder/class-builder.php:720 #: includes/fields/class-base.php:3511 msgid "posts" msgstr "" #: includes/admin/builder/class-builder.php:721 #: includes/fields/class-base.php:3516 msgid "terms" msgstr "" #: includes/admin/builder/class-builder.php:727 msgid "Due to form changes, conditional logic rules will be removed or updated:" msgstr "" #: includes/admin/builder/class-builder.php:728 msgid "Are you sure you want to disable conditional logic? This will remove the rules for this field or setting." msgstr "" #: includes/admin/builder/class-builder.php:729 msgid "Field" msgstr "" #: includes/admin/builder/class-builder.php:730 msgid "Field Locked" msgstr "" #: includes/admin/builder/class-builder.php:731 msgid "This field cannot be deleted or duplicated." msgstr "" #: includes/admin/builder/class-builder.php:732 msgid "This field cannot be deleted." msgstr "" #: includes/admin/builder/class-builder.php:733 msgid "This field cannot be duplicated." msgstr "" #: includes/admin/builder/class-builder.php:734 msgid "Available Fields" msgstr "" #: includes/admin/builder/class-builder.php:735 msgid "No fields available" msgstr "" #: includes/admin/builder/class-builder.php:740 msgid "No email fields" msgstr "" #: includes/admin/builder/class-builder.php:741 msgid "Are you sure you want to delete this notification?" msgstr "" #: includes/admin/builder/class-builder.php:742 msgid "Enter a notification name" msgstr "" #: includes/admin/builder/class-builder.php:743 msgid "Eg: User Confirmation" msgstr "" #: includes/admin/builder/class-builder.php:744 msgid "You must provide a notification name" msgstr "" #: includes/admin/builder/class-builder.php:745 #: lite/wpforms-lite.php:197 #: src/Admin/Tools/Importers/PirateForms.php:452 msgid "Default Notification" msgstr "" #: includes/admin/builder/class-builder.php:746 msgid "Are you sure you want to delete this confirmation?" msgstr "" #: includes/admin/builder/class-builder.php:747 msgid "Enter a confirmation name" msgstr "" #: includes/admin/builder/class-builder.php:748 msgid "Eg: Alternative Confirmation" msgstr "" #: includes/admin/builder/class-builder.php:749 msgid "You must provide a confirmation name" msgstr "" #: includes/admin/builder/class-builder.php:750 #: lite/wpforms-lite.php:494 msgid "Default Confirmation" msgstr "" #: includes/admin/builder/class-builder.php:751 #: includes/admin/builder/class-builder.php:1191 msgid "Save" msgstr "" #: includes/admin/builder/class-builder.php:752 msgid "Saving" msgstr "" #: includes/admin/builder/class-builder.php:753 msgid "Saved!" msgstr "" #: includes/admin/builder/class-builder.php:754 msgid "Save and Exit" msgstr "" #: includes/admin/builder/class-builder.php:755 msgid "Save and Embed" msgstr "" #: includes/admin/builder/class-builder.php:757 #: includes/fields/class-base.php:1978 msgid "Show Layouts" msgstr "" #: includes/admin/builder/class-builder.php:758 msgid "Hide Layouts" msgstr "" #: includes/admin/builder/class-builder.php:759 msgid "Select your layout" msgstr "" #: includes/admin/builder/class-builder.php:760 msgid "Select your column" msgstr "" #: includes/admin/builder/class-builder.php:761 #: src/Frontend/Classic.php:389 msgid "Loading" msgstr "" #: includes/admin/builder/class-builder.php:767 #: src/Admin/Forms/UserTemplates.php:333 #: src/Admin/Traits/FormTemplates.php:429 msgid "Use Template" msgstr "" #: includes/admin/builder/class-builder.php:768 msgid "Changing the template on this form will delete existing fields, reset external connections, and unsaved changes will be lost. Are you sure you want to apply the new template?" msgstr "" #: includes/admin/builder/class-builder.php:770 #: includes/admin/builder/class-builder.php:1177 #: includes/admin/builder/class-builder.php:1183 msgid "Embed" msgstr "" #: includes/admin/builder/class-builder.php:771 msgid "Exit" msgstr "" #: includes/admin/builder/class-builder.php:773 msgid "Your form contains unsaved changes. Would you like to save your changes first." msgstr "" #: includes/admin/builder/class-builder.php:774 msgid "Are you sure you want to delete this field?" msgstr "" #: includes/admin/builder/class-builder.php:775 msgid "Are you sure you want to delete this choice?" msgstr "" #: includes/admin/builder/class-builder.php:776 msgid "Are you sure you want to duplicate this field?" msgstr "" #: includes/admin/builder/class-builder.php:777 #: includes/class-form.php:853 #: includes/class-form.php:881 #: includes/class-form.php:973 msgid "(copy)" msgstr "" #: includes/admin/builder/class-builder.php:778 msgid "Please enter a form name." msgstr "" #: includes/admin/builder/class-builder.php:779 msgid "This item must contain at least one choice." msgstr "" #: includes/admin/builder/class-builder.php:780 #: includes/admin/builder/functions.php:458 #: includes/fields/class-base.php:2132 #: src/Admin/Tools/Views/Logs.php:110 #: src/Integrations/Divi/WPFormsSelector.php:78 #: src/Integrations/Divi/WPFormsSelector.php:88 msgid "Off" msgstr "" #: includes/admin/builder/class-builder.php:781 #: includes/admin/builder/functions.php:457 #: src/Admin/Tools/Views/Logs.php:110 #: src/Integrations/Divi/WPFormsSelector.php:79 #: src/Integrations/Divi/WPFormsSelector.php:89 msgid "On" msgstr "" #: includes/admin/builder/class-builder.php:782 #: includes/functions/utilities.php:337 msgid "or" msgstr "" #: includes/admin/builder/class-builder.php:783 msgid "Other" msgstr "" #: includes/admin/builder/class-builder.php:784 msgid "is" msgstr "" #: includes/admin/builder/class-builder.php:785 msgid "is not" msgstr "" #: includes/admin/builder/class-builder.php:786 msgid "empty" msgstr "" #: includes/admin/builder/class-builder.php:787 msgid "not empty" msgstr "" #: includes/admin/builder/class-builder.php:788 #: src/Admin/Payments/Views/Overview/Table.php:699 msgid "contains" msgstr "" #: includes/admin/builder/class-builder.php:789 msgid "does not contain" msgstr "" #: includes/admin/builder/class-builder.php:790 #: src/Admin/Payments/Views/Overview/Table.php:701 msgid "starts with" msgstr "" #: includes/admin/builder/class-builder.php:791 msgid "ends with" msgstr "" #: includes/admin/builder/class-builder.php:792 msgid "greater than" msgstr "" #: includes/admin/builder/class-builder.php:793 msgid "less than" msgstr "" #: includes/admin/builder/class-builder.php:794 msgid "Entry storage is currently disabled, but is required to accept payments. Please enable in your form settings." msgstr "" #: includes/admin/builder/class-builder.php:795 msgid "This form is currently accepting payments. Entry storage is required to accept payments. To disable entry storage, please first disable payments." msgstr "" #: includes/admin/builder/class-builder.php:796 msgid "Previous" msgstr "" #. translators: %s - marketing integration name. #: includes/admin/builder/class-builder.php:798 msgid "In order to complete your form's %s integration, please check that all required (*) fields have been filled out." msgstr "" #: includes/admin/builder/class-builder.php:801 msgid "Create new rule" msgstr "" #: includes/admin/builder/class-builder.php:802 msgid "Add New Group" msgstr "" #: includes/admin/builder/class-builder.php:803 msgid "Delete rule" msgstr "" #: includes/admin/builder/class-builder.php:806 #: includes/admin/builder/functions.php:68 #: includes/fields/class-base.php:1824 msgid "Show Smart Tags" msgstr "" #: includes/admin/builder/class-builder.php:807 msgid "Hide Smart Tags" msgstr "" #: includes/admin/builder/class-builder.php:808 #: src/Providers/Provider/Settings/FormBuilder.php:134 #: src/Providers/Provider/Settings/FormBuilder.php:191 msgid "--- Select Field ---" msgstr "" #: includes/admin/builder/class-builder.php:809 msgid "--- Select Choice ---" msgstr "" #: includes/admin/builder/class-builder.php:812 #: includes/admin/settings-api.php:532 #: includes/fields/class-base.php:1358 #: includes/fields/class-base.php:1521 #: src/Integrations/Gutenberg/FormSelector.php:587 msgid "Remove Image" msgstr "" #: includes/admin/builder/class-builder.php:815 msgid "Add" msgstr "" #: includes/admin/builder/class-builder.php:819 msgid "You should enter a valid absolute address to the Confirmation Redirect URL field." msgstr "" #: includes/admin/builder/class-builder.php:820 msgid "Add Custom Value" msgstr "" #. translators: %s - choice number. #: includes/admin/builder/class-builder.php:822 #: includes/fields/class-checkbox.php:130 #: includes/fields/class-checkbox.php:771 #: includes/fields/class-radio.php:117 #: includes/fields/class-radio.php:612 msgid "Choice %s" msgstr "" #. translators: %s - choice number. #. translators: %s - item number. #: includes/admin/builder/class-builder.php:826 #: src/Forms/Fields/PaymentCheckbox/Field.php:114 #: src/Forms/Fields/PaymentCheckbox/Field.php:389 #: src/Forms/Fields/PaymentMultiple/Field.php:376 #: src/Forms/Fields/PaymentSelect/Field.php:440 msgid "Item %s" msgstr "" #: includes/admin/builder/class-builder.php:829 msgid "Something went wrong while saving the form. Please reload the page and try again." msgstr "" #: includes/admin/builder/class-builder.php:830 msgid "Please contact the plugin support team if this behavior persists." msgstr "" #: includes/admin/builder/class-builder.php:832 msgid "Couldn't load the Setup panel." msgstr "" #: includes/admin/builder/class-builder.php:833 #: includes/templates/class-blank.php:22 msgid "Blank Form" msgstr "" #: includes/admin/builder/class-builder.php:835 msgid "This field cannot be moved." msgstr "" #: includes/admin/builder/class-builder.php:836 #: includes/fields/class-base.php:2458 msgid "Empty Label" msgstr "" #. translators: %1$s - from value %2$s - to value. #: includes/admin/builder/class-builder.php:839 msgid "Please enter a valid value or change the Increment. The nearest valid values are %1$s and %2$s." msgstr "" #. translators: %s - link to the WPForms.com doc article. #: includes/admin/builder/class-builder.php:851 msgid "Disabling entry storage for this form will completely prevent any new submissions from getting saved to your site. If you still intend to keep a record of entries through notification emails, then please test your form to ensure emails send reliably." msgstr "" #. translators: %1$s - link to the plugin search page, %2$s - link to the WPForms.com doc article. #: includes/admin/builder/class-builder.php:871 msgid "This feature cannot be used at this time because the Akismet plugin has not been installed. For information on how to use this feature please refer to our documentation." msgstr "" #. translators: %1$s - link to the plugins page, %2$s - link to the WPForms.com doc article. #: includes/admin/builder/class-builder.php:892 msgid "This feature cannot be used at this time because the Akismet plugin has not been activated. For information on how to use this feature please refer to our documentation." msgstr "" #. translators: %1$s - link to the Akismet settings page, %2$s - link to the WPForms.com doc article. #: includes/admin/builder/class-builder.php:913 msgid "This feature cannot be used at this time because the Akismet plugin has not been properly configured. For information on how to use this feature please refer to our documentation." msgstr "" #: includes/admin/builder/class-builder.php:962 msgid "Countries" msgstr "" #: includes/admin/builder/class-builder.php:966 msgid "Countries Postal Code" msgstr "" #: includes/admin/builder/class-builder.php:970 msgid "States" msgstr "" #: includes/admin/builder/class-builder.php:974 msgid "States Postal Code" msgstr "" #: includes/admin/builder/class-builder.php:978 msgid "Months" msgstr "" #: includes/admin/builder/class-builder.php:982 msgid "Days" msgstr "" #: includes/admin/builder/class-builder.php:1116 #: includes/admin/class-welcome.php:143 #: lite/templates/education/builder/lite-connect/ai-modal.php:15 #: lite/templates/education/lite-connect-modal.php:17 #: src/Lite/Admin/DashboardWidget.php:258 #: templates/admin/challenge/modal.php:52 #: templates/builder/fullscreen/mobile-notice.php:15 #: templates/builder/help.php:32 msgid "Sullie the WPForms mascot" msgstr "" #: includes/admin/builder/class-builder.php:1124 msgid "Now editing" msgstr "" #: includes/admin/builder/class-builder.php:1133 #: src/Admin/Forms/UserTemplates.php:125 #: src/Admin/Settings/Email.php:213 msgid "Template" msgstr "" #: includes/admin/builder/class-builder.php:1145 msgid "Help Ctrl+H" msgstr "" #: includes/admin/builder/class-builder.php:1148 #: src/Admin/Payments/Views/Overview/Helpers.php:83 msgid "Help" msgstr "" #: includes/admin/builder/class-builder.php:1165 msgid "Preview Form Ctrl+P" msgstr "" #: includes/admin/builder/class-builder.php:1168 #: includes/admin/settings-api.php:433 #: src/Admin/Forms/Views.php:602 #: src/Admin/Settings/Captcha/Page.php:194 #: src/Admin/Tools/Views/Importer.php:332 #: templates/builder/notifications/email-template-modal.php:44 msgid "Preview" msgstr "" #: includes/admin/builder/class-builder.php:1176 msgid "You cannot embed a form template" msgstr "" #: includes/admin/builder/class-builder.php:1182 msgid "Embed Form Ctrl+B" msgstr "" #: includes/admin/builder/class-builder.php:1190 msgid "Save Form Ctrl+S" msgstr "" #: includes/admin/builder/class-builder.php:1196 msgid "Exit Ctrl+Q" msgstr "" #. translators: %d - field ID. #: includes/admin/builder/functions.php:280 #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:145 msgid "Field #%d" msgstr "" #: includes/admin/builder/panels/class-fields.php:22 msgid "Fields" msgstr "" #: includes/admin/builder/panels/class-fields.php:84 msgid "Add Fields" msgstr "" #: includes/admin/builder/panels/class-fields.php:90 msgid "Field Options" msgstr "" #: includes/admin/builder/panels/class-fields.php:117 msgid "You need to setup your form before you can manage the fields." msgstr "" #: includes/admin/builder/panels/class-fields.php:179 msgid "Enabled" msgstr "" #: includes/admin/builder/panels/class-fields.php:186 #: includes/admin/builder/panels/class-settings.php:201 #: includes/class-form.php:580 #: includes/templates/class-simple-contact-form.php:59 #: src/Admin/Tools/Importers/ContactForm7.php:124 #: src/Admin/Tools/Importers/NinjaForms.php:129 msgid "Submit" msgstr "" #: includes/admin/builder/panels/class-fields.php:398 #: includes/fields/class-base.php:2847 msgid "Duplicate Field" msgstr "" #: includes/admin/builder/panels/class-fields.php:404 #: includes/fields/class-base.php:2850 msgid "Delete Field" msgstr "" #: includes/admin/builder/panels/class-fields.php:416 #: includes/fields/class-base.php:2861 msgid "Click to Edit" msgstr "" #: includes/admin/builder/panels/class-fields.php:417 #: includes/fields/class-base.php:2862 msgid "Drag to Reorder" msgstr "" #: includes/admin/builder/panels/class-fields.php:418 #: includes/fields/class-base.php:2863 msgid "Hide Helper" msgstr "" #. translators: %s - unavailable field name. #: includes/admin/builder/panels/class-fields.php:495 msgid "Unfortunately, the %s field is not available and will be ignored on the front end." msgstr "" #: includes/admin/builder/panels/class-fields.php:516 #: includes/admin/class-settings.php:128 #: includes/fields/class-internal-information.php:293 #: includes/fields/class-internal-information.php:446 #: includes/fields/class-internal-information.php:654 #: lite/templates/education/builder/did-you-know.php:27 #: src/Admin/Notifications/EventDriven.php:566 #: src/Admin/Notifications/EventDriven.php:632 #: src/Admin/Notifications/EventDriven.php:685 #: src/Admin/Pages/Analytics.php:479 #: src/Admin/Splash/SplashTrait.php:105 #: src/Integrations/UncannyAutomator/UncannyAutomator.php:172 #: src/Lite/Admin/DashboardWidget.php:269 #: src/Lite/Admin/DashboardWidget.php:435 #: src/Lite/Admin/Education/Admin/DidYouKnow.php:130 #: src/Lite/Admin/Education/Admin/DidYouKnow.php:136 msgid "Learn More" msgstr "" #: includes/admin/builder/panels/class-fields.php:517 msgid "Dismiss this message. The field will be deleted as well." msgstr "" #: includes/admin/builder/panels/class-fields.php:536 msgid "You don't have any fields yet." msgstr "" #: includes/admin/builder/panels/class-fields.php:552 msgid "You don't have any fields yet. Add some!" msgstr "" #: includes/admin/builder/panels/class-fields.php:553 msgid "Take your pick from our wide variety of fields and start building out your form!" msgstr "" #. translators: %s - total amount of choices. #: includes/admin/builder/panels/class-fields.php:655 msgid "Showing the first 20 choices.
All %s choices will be displayed when viewing the form." msgstr "" #: includes/admin/builder/panels/class-fields.php:695 msgid "Search fields:" msgstr "" #: includes/admin/builder/panels/class-fields.php:696 msgid "Search fields..." msgstr "" #: includes/admin/builder/panels/class-fields.php:708 msgid "Sorry, we didn't find any fields that match your criteria." msgstr "" #: includes/admin/builder/panels/class-payments.php:22 #: includes/admin/class-menu.php:89 #: includes/admin/class-menu.php:90 #: src/Admin/AdminBarMenu.php:257 #: src/Admin/Forms/Views.php:592 #: src/Admin/Payments/Payments.php:173 #: src/Admin/Payments/Views/Overview/Page.php:142 #: src/Admin/Settings/Payments.php:47 #: src/Admin/Settings/Payments.php:78 msgid "Payments" msgstr "" #: includes/admin/builder/panels/class-payments.php:41 #: includes/admin/builder/panels/class-providers.php:75 #: includes/fields/class-base.php:1793 msgid "Default" msgstr "" #: includes/admin/builder/panels/class-payments.php:62 #: includes/admin/builder/panels/class-providers.php:93 msgid "You need to setup your form before you can manage these settings." msgstr "" #: includes/admin/builder/panels/class-payments.php:83 #: includes/admin/builder/panels/class-payments.php:104 msgid "Install Your Payment Integration" msgstr "" #. translators: %s - addons page URL. #: includes/admin/builder/panels/class-payments.php:87 msgid "It seems you do not have any payment addons activated. You can head over to the Addons page to install and activate the addon for your payment service." msgstr "" #: includes/admin/builder/panels/class-payments.php:105 msgid "It seems you don't have any payment addons activated. Click one of the available addons and start accepting payments today!" msgstr "" #: includes/admin/builder/panels/class-providers.php:22 msgid "Marketing" msgstr "" #: includes/admin/builder/panels/class-providers.php:52 msgid "We need to save your progress to continue to the Marketing panel. Is that OK?" msgstr "" #: includes/admin/builder/panels/class-providers.php:53 msgid "Are you sure you want to delete this connection?" msgstr "" #. translators: %s - connection type. #: includes/admin/builder/panels/class-providers.php:55 msgid "Enter a %s nickname" msgstr "" #: includes/admin/builder/panels/class-providers.php:56 msgid "Eg: Newsletter Optin" msgstr "" #: includes/admin/builder/panels/class-providers.php:57 msgid "You must provide a connection nickname." msgstr "" #: includes/admin/builder/panels/class-providers.php:58 msgid "Field required" msgstr "" #: includes/admin/builder/panels/class-providers.php:116 msgid "Install Your Marketing Integration" msgstr "" #. translators: %s - plugin admin area Addons page. #: includes/admin/builder/panels/class-providers.php:121 msgid "It seems you do not have any marketing addons activated. You can head over to the Addons page to install and activate the addon for your provider." msgstr "" #: includes/admin/builder/panels/class-providers.php:137 msgid "Select Your Marketing Integration" msgstr "" #: includes/admin/builder/panels/class-providers.php:138 msgid "Select your email marketing service provider or CRM from the options on the left. If you don't see your email marketing service listed, then let us know and we'll do our best to get it added as fast as possible." msgstr "" #: includes/admin/builder/panels/class-revisions.php:31 msgid "Revisions" msgstr "" #: includes/admin/builder/panels/class-revisions.php:38 msgid "Form Template Revisions" msgstr "" #: includes/admin/builder/panels/class-revisions.php:39 msgid "Form Revisions" msgstr "" #: includes/admin/builder/panels/class-revisions.php:117 msgid "Select a revision to roll back to that version. All changes, including settings, will be reverted." msgstr "" #: includes/admin/builder/panels/class-revisions.php:172 msgid "Restore this revision" msgstr "" #: includes/admin/builder/panels/class-revisions.php:178 msgid "go back to the current version" msgstr "" #. translators: %1$s - revision date, %2$s - revision time, %3$s - "Restore this revision" link, %4$s - "go back to the current version" link. #: includes/admin/builder/panels/class-revisions.php:182 msgid "You’re currently viewing a form revision from %1$s at %2$s. %3$s or %4$s." msgstr "" #: includes/admin/builder/panels/class-settings.php:29 #: includes/admin/class-menu.php:118 #: includes/admin/class-menu.php:382 msgid "Settings" msgstr "" #: includes/admin/builder/panels/class-settings.php:58 #: includes/admin/builder/panels/class-settings.php:155 #: includes/admin/class-settings.php:302 #: includes/admin/class-settings.php:379 #: includes/fields/class-base.php:1079 msgid "General" msgstr "" #: includes/admin/builder/panels/class-settings.php:59 #: includes/admin/class-about.php:1651 #: src/Admin/Builder/AntiSpam.php:57 msgid "Spam Protection and Security" msgstr "" #: includes/admin/builder/panels/class-settings.php:60 #: src/Integrations/Gutenberg/FormSelector.php:566 msgid "Themes" msgstr "" #: includes/admin/builder/panels/class-settings.php:61 #: lite/wpforms-lite.php:136 #: src/Admin/AdminBarMenu.php:219 #: templates/admin/notifications.php:23 msgid "Notifications" msgstr "" #: includes/admin/builder/panels/class-settings.php:62 #: lite/wpforms-lite.php:482 msgid "Confirmations" msgstr "" #: includes/admin/builder/panels/class-settings.php:120 #: src/Admin/Forms/Tags.php:259 msgid "Press Enter or \",\" key to add new tag" msgstr "" #: includes/admin/builder/panels/class-settings.php:136 msgid "You need to setup your form before you can manage the settings." msgstr "" #: includes/admin/builder/panels/class-settings.php:163 #: src/Integrations/Elementor/Widget.php:234 #: src/SmartTags/SmartTags.php:112 msgid "Form Name" msgstr "" #: includes/admin/builder/panels/class-settings.php:173 #: src/Integrations/Elementor/Widget.php:248 msgid "Form Description" msgstr "" #: includes/admin/builder/panels/class-settings.php:175 msgid "Enter descriptive text or instructions to help your users understand the requirements of your form." msgstr "" #: includes/admin/builder/panels/class-settings.php:185 msgid "Template Description" msgstr "" #: includes/admin/builder/panels/class-settings.php:187 msgid "Describe the use case for your template. Only displayed internally." msgstr "" #: includes/admin/builder/panels/class-settings.php:199 msgid "Submit Button Text" msgstr "" #: includes/admin/builder/panels/class-settings.php:209 msgid "Submit Button Processing Text" msgstr "" #: includes/admin/builder/panels/class-settings.php:211 msgid "Enter the submit button text you would like the button display while the form submit is processing." msgstr "" #: includes/admin/builder/panels/class-settings.php:289 #: src/Admin/Forms/Table/Facades/Columns.php:70 msgid "Tags" msgstr "" #: includes/admin/builder/panels/class-settings.php:294 msgid "Mark form with the tags. To create a new tag, simply type it and press Enter." msgstr "" #: includes/admin/builder/panels/class-settings.php:315 msgid "Form CSS Class" msgstr "" #: includes/admin/builder/panels/class-settings.php:317 msgid "Enter CSS class names for the form wrapper. Multiple class names should be separated with spaces." msgstr "" #: includes/admin/builder/panels/class-settings.php:326 msgid "Submit Button CSS Class" msgstr "" #: includes/admin/builder/panels/class-settings.php:328 msgid "Enter CSS class names for the form submit button. Multiple names should be separated with spaces." msgstr "" #: includes/admin/builder/panels/class-settings.php:337 msgid "Enable Prefill by URL" msgstr "" #: includes/admin/builder/panels/class-settings.php:342 msgid "How to use Prefill by URL" msgstr "" #: includes/admin/builder/panels/class-settings.php:352 msgid "Enable AJAX form submission" msgstr "" #: includes/admin/builder/panels/class-settings.php:354 msgid "Enables form submission without page reload." msgstr "" #: includes/admin/builder/panels/class-settings.php:374 #: includes/fields/class-base.php:1920 #: src/Integrations/Elementor/WidgetModern.php:318 #: src/Integrations/Gutenberg/FormSelector.php:608 #: src/Lite/Admin/Education/Builder/Notifications.php:130 msgid "Advanced" msgstr "" #: includes/admin/builder/panels/class-setup.php:25 msgid "Setup" msgstr "" #: includes/admin/builder/panels/class-setup.php:62 #: templates/admin/challenge/builder.php:15 #: templates/admin/challenge/modal.php:38 msgid "Name Your Form" msgstr "" #: includes/admin/builder/panels/class-setup.php:63 msgid "Enter your form name here…" msgstr "" #: includes/admin/builder/panels/class-setup.php:67 #: src/Admin/Tools/Views/Export.php:207 #: templates/admin/challenge/builder.php:21 #: templates/admin/challenge/modal.php:39 msgid "Select a Template" msgstr "" #. translators: %1$s - create template doc link, %2$s - Contact us page link. #: includes/admin/builder/panels/class-setup.php:75 msgid "To speed up the process you can select from one of our pre-made templates, start with a blank form or create your own. Have a suggestion for a new template? We’d love to hear it!" msgstr "" #: includes/admin/class-about.php:111 #: includes/admin/class-menu.php:178 msgid "About Us" msgstr "" #: includes/admin/class-about.php:112 #: src/Admin/Builder/Help.php:148 msgid "Getting Started" msgstr "" #. translators: %1$s - current license type, %2$s - suggested license type. #: includes/admin/class-about.php:126 msgid "%1$s vs %2$s" msgstr "" #: includes/admin/class-about.php:243 msgid "Hello and welcome to WPForms, the most beginner friendly drag & drop WordPress forms plugin. At WPForms, we build software that helps you create beautiful responsive online forms for your website in minutes." msgstr "" #: includes/admin/class-about.php:246 msgid "Over the years, we found that most WordPress contact form plugins were bloated, buggy, slow, and very hard to use. So we started with a simple goal: build a WordPress forms plugin that’s both easy and powerful." msgstr "" #: includes/admin/class-about.php:249 msgid "Our goal is to take the pain out of creating online forms and make it easy." msgstr "" #. translators: %1$s - WPBeginner URL, %2$s - OptinMonster URL, %3$s - MonsterInsights URL. #: includes/admin/class-about.php:256 msgid "WPForms is brought to you by the same team that’s behind the largest WordPress resource site, WPBeginner, the most popular lead-generation software, OptinMonster, the best WordPress analytics plugin, MonsterInsights, and more!" msgstr "" #: includes/admin/class-about.php:272 msgid "Yup, we know a thing or two about building awesome products that customers love." msgstr "" #: includes/admin/class-about.php:280 msgid "The WPForms Team photo" msgstr "" #: includes/admin/class-about.php:282 msgid "The WPForms Team" msgstr "" #. translators: %s - status label. #: includes/admin/class-about.php:338 msgid "Status: %s" msgstr "" #: includes/admin/class-about.php:351 msgid "WordPress.org" msgstr "" #: includes/admin/class-about.php:424 #: src/Admin/Tools/Views/Import.php:258 msgid "Not Installed" msgstr "" #: includes/admin/class-about.php:427 msgid "Install Plugin" msgstr "" #: includes/admin/class-about.php:462 msgid "Creating Your First Form" msgstr "" #: includes/admin/class-about.php:466 msgid "Want to get started creating your first form with WPForms? By following the step by step instructions in this walkthrough, you can easily publish your first form on your site." msgstr "" #: includes/admin/class-about.php:470 msgid "To begin, you’ll need to be logged into the WordPress admin area. Once there, click on WPForms in the admin sidebar to go to the Forms Overview page." msgstr "" #: includes/admin/class-about.php:474 msgid "In the Forms Overview page, the forms list will be empty because there are no forms yet. To create a new form, click on the Add New button, and this will launch the WPForms Form Builder." msgstr "" #: includes/admin/class-about.php:480 msgid "How to Add a New Form" msgstr "" #: includes/admin/class-about.php:485 msgid "How to Customize Form Fields" msgstr "" #: includes/admin/class-about.php:490 msgid "How to Display Forms on Your Site" msgstr "" #: includes/admin/class-about.php:508 #: lite/wpforms-lite.php:678 msgid "Get WPForms Pro and Unlock all the Powerful Features" msgstr "" #: includes/admin/class-about.php:514 msgid "Thanks for being a loyal WPForms Lite user. Upgrade to WPForms Pro to unlock all the awesome features and experience
why WPForms is consistently rated the best WordPress form builder." msgstr "" #. translators: %s - stars. #: includes/admin/class-about.php:527 msgid "We know that you will truly love WPForms. It has over 13,000+ five star ratings (%s) and is active on over 6 million websites." msgstr "" #. translators: %s - number of templates. #: includes/admin/class-about.php:550 #: lite/wpforms-lite.php:702 msgid "%s customizable form templates" msgstr "" #: includes/admin/class-about.php:557 #: lite/wpforms-lite.php:707 msgid "Store and manage form entries in WordPress" msgstr "" #: includes/admin/class-about.php:561 #: lite/wpforms-lite.php:708 msgid "Unlock all fields & features, including smart conditional logic" msgstr "" #: includes/admin/class-about.php:565 #: lite/wpforms-lite.php:709 msgid "Create powerful custom calculation forms" msgstr "" #: includes/admin/class-about.php:569 #: lite/wpforms-lite.php:710 msgid "Make surveys and generate reports" msgstr "" #: includes/admin/class-about.php:573 #: lite/wpforms-lite.php:711 msgid "Accept user-submitted content with the Post Submissions addon" msgstr "" #: includes/admin/class-about.php:581 #: lite/wpforms-lite.php:714 msgid "7000+ integrations with marketing and payment services" msgstr "" #: includes/admin/class-about.php:585 #: lite/wpforms-lite.php:715 msgid "Let users save & resume submissions to prevent abandonment" msgstr "" #: includes/admin/class-about.php:589 #: lite/wpforms-lite.php:716 msgid "Take payments with Stripe, PayPal, Square, & Authorize.Net" msgstr "" #: includes/admin/class-about.php:593 #: lite/wpforms-lite.php:717 msgid "Export entries to Google Sheets, Excel, and CSV" msgstr "" #: includes/admin/class-about.php:597 #: lite/wpforms-lite.php:718 msgid "Collect signatures, geolocation data, and file uploads" msgstr "" #: includes/admin/class-about.php:601 #: lite/wpforms-lite.php:719 msgid "Create user registration and login forms" msgstr "" #: includes/admin/class-about.php:616 msgid "Get WPForms Pro Today and Unlock all the Powerful Features" msgstr "" #: includes/admin/class-about.php:625 #: includes/admin/class-about.php:847 msgid "Bonus: WPForms Lite users get 50% off regular price, automatically applied at checkout." msgstr "" #: includes/admin/class-about.php:646 msgid "How to Choose the Right Form Field" msgstr "" #: includes/admin/class-about.php:650 msgid "Are you wondering which form fields you have access to in WPForms and what each field does? WPForms has lots of field types to make creating and filling out forms easy. In this tutorial, we’ll cover all of the fields available in WPForms." msgstr "" #: includes/admin/class-about.php:654 #: includes/admin/class-about.php:673 #: includes/admin/class-about.php:692 #: includes/admin/class-about.php:711 msgid "Read Documentation" msgstr "" #: includes/admin/class-about.php:665 msgid "A Complete Guide to WPForms Settings" msgstr "" #: includes/admin/class-about.php:669 msgid "Would you like to learn more about all of the settings available in WPForms? In addition to tons of customization options within the form builder, WPForms has an extensive list of plugin-wide options available. This includes choosing your currency, adding GDPR enhancements, setting up integrations." msgstr "" #: includes/admin/class-about.php:684 msgid "How to Create GDPR Compliant Forms" msgstr "" #: includes/admin/class-about.php:688 msgid "Do you need to check that your forms are compliant with the European Union’s General Data Protection Regulation? The best way to ensure GDPR compliance for your specific site is always to consult legal counsel. In this guide, we’ll discuss general considerations for GDPR compliance in your WordPress forms." msgstr "" #: includes/admin/class-about.php:703 msgid "How to Install and Activate WPForms Addons" msgstr "" #: includes/admin/class-about.php:707 msgid "Would you like to access WPForms addons to extend the functionality of your forms? The first thing you need to do is install WPForms. Once that’s done, let’s go ahead and look at the process of activating addons." msgstr "" #: includes/admin/class-about.php:758 msgid "Get the most out of WPForms by upgrading to Pro and unlocking all of the powerful features." msgstr "" #: includes/admin/class-about.php:767 msgid "Feature" msgstr "" #. translators: %s - next license level. #: includes/admin/class-about.php:836 msgid "Get WPForms %s Today and Unlock all the Powerful Features" msgstr "" #: includes/admin/class-about.php:878 msgid "OptinMonster" msgstr "" #: includes/admin/class-about.php:879 msgid "Instantly get more subscribers, leads, and sales with the #1 conversion optimization toolkit. Create high converting popups, announcement bars, spin a wheel, and more with smart targeting and personalization." msgstr "" #: includes/admin/class-about.php:886 #: src/Admin/Dashboard/Widget.php:188 #: src/Admin/Pages/Analytics.php:414 msgid "MonsterInsights" msgstr "" #: includes/admin/class-about.php:887 #: includes/admin/class-about.php:894 msgid "The leading WordPress analytics plugin that shows you how people find and use your website, so you can make data driven decisions to grow your business. Properly set up Google Analytics without writing code." msgstr "" #: includes/admin/class-about.php:893 msgid "MonsterInsights Pro" msgstr "" #: includes/admin/class-about.php:902 #: src/Admin/Dashboard/Widget.php:212 #: src/Admin/Pages/SMTP.php:402 msgid "WP Mail SMTP" msgstr "" #: includes/admin/class-about.php:903 #: includes/admin/class-about.php:910 msgid "Improve your WordPress email deliverability and make sure that your website emails reach user's inbox with the #1 SMTP plugin for WordPress. Over 3 million websites use it to fix WordPress email issues." msgstr "" #: includes/admin/class-about.php:909 msgid "WP Mail SMTP Pro" msgstr "" #: includes/admin/class-about.php:918 #: src/Admin/Dashboard/Widget.php:196 msgid "AIOSEO" msgstr "" #: includes/admin/class-about.php:919 #: includes/admin/class-about.php:926 msgid "The original WordPress SEO plugin and toolkit that improves your website's search rankings. Comes with all the SEO features like Local SEO, WooCommerce SEO, sitemaps, SEO optimizer, schema, and more." msgstr "" #: includes/admin/class-about.php:925 msgid "AIOSEO Pro" msgstr "" #: includes/admin/class-about.php:934 #: src/Admin/Dashboard/Widget.php:204 msgid "SeedProd" msgstr "" #: includes/admin/class-about.php:935 #: includes/admin/class-about.php:942 msgid "The fastest drag & drop landing page builder for WordPress. Create custom landing pages without writing code, connect them with your CRM, collect subscribers, and grow your audience. Trusted by 1 million sites." msgstr "" #: includes/admin/class-about.php:941 msgid "SeedProd Pro" msgstr "" #: includes/admin/class-about.php:950 msgid "RafflePress" msgstr "" #: includes/admin/class-about.php:951 #: includes/admin/class-about.php:958 msgid "Turn your website visitors into brand ambassadors! Easily grow your email list, website traffic, and social media followers with the most powerful giveaways & contests plugin for WordPress." msgstr "" #: includes/admin/class-about.php:957 msgid "RafflePress Pro" msgstr "" #: includes/admin/class-about.php:966 msgid "PushEngage" msgstr "" #: includes/admin/class-about.php:967 msgid "Connect with your visitors after they leave your website with the leading web push notification software. Over 10,000+ businesses worldwide use PushEngage to send 15 billion notifications each month." msgstr "" #: includes/admin/class-about.php:974 msgid "Smash Balloon Instagram Feeds" msgstr "" #: includes/admin/class-about.php:975 #: includes/admin/class-about.php:982 msgid "Easily display Instagram content on your WordPress site without writing any code. Comes with multiple templates, ability to show content from multiple accounts, hashtags, and more. Trusted by 1 million websites." msgstr "" #: includes/admin/class-about.php:981 msgid "Smash Balloon Instagram Feeds Pro" msgstr "" #: includes/admin/class-about.php:990 msgid "Smash Balloon Facebook Feeds" msgstr "" #: includes/admin/class-about.php:991 #: includes/admin/class-about.php:998 msgid "Easily display Facebook content on your WordPress site without writing any code. Comes with multiple templates, ability to embed albums, group content, reviews, live videos, comments, and reactions." msgstr "" #: includes/admin/class-about.php:997 msgid "Smash Balloon Facebook Feeds Pro" msgstr "" #: includes/admin/class-about.php:1006 msgid "Smash Balloon YouTube Feeds" msgstr "" #: includes/admin/class-about.php:1007 #: includes/admin/class-about.php:1014 msgid "Easily display YouTube videos on your WordPress site without writing any code. Comes with multiple layouts, ability to embed live streams, video filtering, ability to combine multiple channel videos, and more." msgstr "" #: includes/admin/class-about.php:1013 msgid "Smash Balloon YouTube Feeds Pro" msgstr "" #: includes/admin/class-about.php:1022 msgid "Smash Balloon Twitter Feeds" msgstr "" #: includes/admin/class-about.php:1023 #: includes/admin/class-about.php:1030 msgid "Easily display Twitter content in WordPress without writing any code. Comes with multiple layouts, ability to combine multiple Twitter feeds, Twitter card support, tweet moderation, and more." msgstr "" #: includes/admin/class-about.php:1029 msgid "Smash Balloon Twitter Feeds Pro" msgstr "" #: includes/admin/class-about.php:1038 msgid "TrustPulse" msgstr "" #: includes/admin/class-about.php:1039 msgid "Boost your sales and conversions by up to 15% with real-time social proof notifications. TrustPulse helps you show live user activity and purchases to help convince other users to purchase." msgstr "" #: includes/admin/class-about.php:1046 msgid "SearchWP" msgstr "" #: includes/admin/class-about.php:1047 msgid "The most advanced WordPress search plugin. Customize your WordPress search algorithm, reorder search results, track search metrics, and everything you need to leverage search to grow your business." msgstr "" #: includes/admin/class-about.php:1055 msgid "AffiliateWP" msgstr "" #: includes/admin/class-about.php:1056 msgid "The #1 affiliate management plugin for WordPress. Easily create an affiliate program for your eCommerce store or membership site within minutes and start growing your sales with the power of referral marketing." msgstr "" #: includes/admin/class-about.php:1064 msgid "WP Simple Pay" msgstr "" #: includes/admin/class-about.php:1065 #: includes/admin/class-about.php:1072 msgid "The #1 Stripe payments plugin for WordPress. Start accepting one-time and recurring payments on your WordPress site without setting up a shopping cart. No code required." msgstr "" #: includes/admin/class-about.php:1071 msgid "WP Simple Pay Pro" msgstr "" #: includes/admin/class-about.php:1080 msgid "Easy Digital Downloads" msgstr "" #: includes/admin/class-about.php:1081 msgid "The best WordPress eCommerce plugin for selling digital downloads. Start selling eBooks, software, music, digital art, and more within minutes. Accept payments, manage subscriptions, advanced access control, and more." msgstr "" #: includes/admin/class-about.php:1088 msgid "Sugar Calendar" msgstr "" #: includes/admin/class-about.php:1089 #: includes/admin/class-about.php:1096 msgid "A simple & powerful event calendar plugin for WordPress that comes with all the event management features including payments, scheduling, timezones, ticketing, recurring events, and more." msgstr "" #: includes/admin/class-about.php:1095 msgid "Sugar Calendar Pro" msgstr "" #: includes/admin/class-about.php:1103 msgid "Charitable" msgstr "" #: includes/admin/class-about.php:1104 msgid "Top-rated WordPress donation and fundraising plugin. Over 10,000+ non-profit organizations and website owners use Charitable to create fundraising campaigns and raise more money online." msgstr "" #: includes/admin/class-about.php:1110 msgid "WPCode" msgstr "" #: includes/admin/class-about.php:1111 msgid "Future proof your WordPress customizations with the most popular code snippet management plugin for WordPress. Trusted by over 1,500,000+ websites for easily adding code to WordPress right from the admin area." msgstr "" #: includes/admin/class-about.php:1117 msgid "Duplicator" msgstr "" #: includes/admin/class-about.php:1118 msgid "Leading WordPress backup & site migration plugin. Over 1,500,000+ smart website owners use Duplicator to make reliable and secure WordPress backups to protect their websites. It also makes website migration really easy." msgstr "" #: includes/admin/class-about.php:1142 msgid "Entries via Email Only" msgstr "" #: includes/admin/class-about.php:1148 #: includes/admin/class-about.php:1154 #: includes/admin/class-about.php:1160 msgid "Complete Entry Management inside WordPress" msgstr "" #: includes/admin/class-about.php:1168 msgid "Standard and Payment Fields" msgstr "" #: includes/admin/class-about.php:1169 msgid "Name, Email, Single Line Text, Paragraph Text, Dropdown, Multiple Choice, Checkboxes, Numbers, Number Slider, and Payment Fields (Single Item, Total, etc.)" msgstr "" #: includes/admin/class-about.php:1175 #: includes/admin/class-about.php:1182 #: includes/admin/class-about.php:1189 msgid "Access to all Standard, Fancy, and Payment Fields" msgstr "" #: includes/admin/class-about.php:1176 #: includes/admin/class-about.php:1183 #: includes/admin/class-about.php:1190 msgid "Address, Phone, Website / URL, Date / Time, Password, File Upload, Layout, Rich Text, Content, HTML, Pagebreaks, Entry Preview, Section Dividers, Ratings, and Hidden Field" msgstr "" #: includes/admin/class-about.php:1198 msgid "Not available" msgstr "" #: includes/admin/class-about.php:1204 #: includes/admin/class-about.php:1210 #: includes/admin/class-about.php:1216 msgid "Powerful Form Logic for Building Smart Forms" msgstr "" #: includes/admin/class-about.php:1224 #: includes/admin/class-about.php:1230 #: includes/admin/class-about.php:1236 msgid "Basic Form Templates" msgstr "" #. translators: %s - number of templates. #: includes/admin/class-about.php:1244 msgid "All Form Templates including Bonus %s pre-made form templates" msgstr "" #: includes/admin/class-about.php:1255 msgid "Basic Anti-Spam Settings" msgstr "" #: includes/admin/class-about.php:1256 msgid "Basic Protection, reCAPTCHA, hCaptcha, Cloudflare Turnstile and Akismet" msgstr "" #: includes/admin/class-about.php:1262 #: includes/admin/class-about.php:1269 #: includes/admin/class-about.php:1276 msgid "Additional Anti-Spam Settings" msgstr "" #: includes/admin/class-about.php:1263 #: includes/admin/class-about.php:1270 #: includes/admin/class-about.php:1277 msgid "Basic Protection, reCAPTCHA, hCaptcha, Cloudflare Turnstile, Akismet, Country Filter, Keyword Filter, and Custom Captcha" msgstr "" #: includes/admin/class-about.php:1285 #: includes/admin/class-about.php:1292 msgid "Limited Marketing Integration" msgstr "" #: includes/admin/class-about.php:1286 #: includes/admin/class-about.php:1293 msgid "Constant Contact only" msgstr "" #: includes/admin/class-about.php:1299 #: includes/admin/class-about.php:1306 msgid "Additional Marketing Integrations" msgstr "" #: includes/admin/class-about.php:1300 #: includes/admin/class-about.php:1307 msgid "Constant Contact, Mailchimp, AWeber, GetResponse, Campaign Monitor, Brevo, Drip, MailerLite, ConvertKit, and Slack" msgstr "" #: includes/admin/class-about.php:1310 #: includes/admin/class-about.php:1324 #: includes/admin/class-about.php:1338 #: includes/admin/class-about.php:1352 msgid "Bonus: 7000+ integrations with Zapier." msgstr "" #: includes/admin/class-about.php:1320 #: includes/admin/class-about.php:1334 #: includes/admin/class-about.php:1348 msgid "All Marketing Integrations" msgstr "" #: includes/admin/class-about.php:1321 #: includes/admin/class-about.php:1335 #: includes/admin/class-about.php:1349 msgid "ActiveCampaign, Constant Contact, Mailchimp, AWeber, GetResponse, Campaign Monitor, Salesforce, Brevo, HubSpot, Drip, MailerLite, ConvertKit, and Slack" msgstr "" #: includes/admin/class-about.php:1364 #: includes/admin/class-about.php:1371 #: includes/admin/class-about.php:1378 msgid "Limited Payment Forms" msgstr "" #: includes/admin/class-about.php:1365 #: includes/admin/class-about.php:1372 #: includes/admin/class-about.php:1379 msgid "Accept payments using Stripe only" msgstr "" #: includes/admin/class-about.php:1385 #: includes/admin/class-about.php:1392 #: includes/admin/class-about.php:1399 #: includes/admin/class-about.php:1406 msgid "Create Payment Forms" msgstr "" #: includes/admin/class-about.php:1386 msgid "Accept payments using PayPal Commerce, Stripe, Square, and PayPal Standard" msgstr "" #: includes/admin/class-about.php:1393 #: includes/admin/class-about.php:1400 #: includes/admin/class-about.php:1407 msgid "Accept payments using PayPal Commerce, Stripe, Square, PayPal Standard, and Authorize.Net" msgstr "" #: includes/admin/class-about.php:1415 #: includes/admin/class-about.php:1421 #: includes/admin/class-about.php:1427 msgid "Not Available" msgstr "" #: includes/admin/class-about.php:1433 msgid "Create interactive Surveys and Polls with beautiful reports" msgstr "" #: includes/admin/class-about.php:1441 msgid "No Advanced Features" msgstr "" #: includes/admin/class-about.php:1447 #: includes/admin/class-about.php:1454 msgid "Limited Advanced Features" msgstr "" #: includes/admin/class-about.php:1448 msgid "Multi-page Forms, File Upload Forms, Multiple Form Notifications, File Upload and CSV Attachments, Conditional Form Confirmation" msgstr "" #: includes/admin/class-about.php:1455 msgid "Multi-page Forms, File Upload Forms, Multiple Form Notifications, File Upload and CSV Attachments, Conditional Form Confirmation, Save and Resume Form" msgstr "" #: includes/admin/class-about.php:1461 msgid "All Advanced Features" msgstr "" #: includes/admin/class-about.php:1462 msgid "Multi-page Forms, File Upload Forms, Multiple Form Notifications, File Upload and CSV Attachments, Conditional Form Confirmation, Custom CAPTCHA, Offline Forms, Signature Forms, Save and Resume Form, Coupons" msgstr "" #: includes/admin/class-about.php:1470 #: includes/admin/class-about.php:1476 msgid "No Addons Included" msgstr "" #: includes/admin/class-about.php:1482 msgid "Email Marketing Addons included" msgstr "" #: includes/admin/class-about.php:1488 msgid "Pro Addons Included" msgstr "" #: includes/admin/class-about.php:1489 msgid "Calculations, Form Abandonment, Conversational Forms, Lead Forms, Frontend Post Submission, User Registration, Geolocation, Google Sheets, Coupons, and more (30 total)" msgstr "" #: includes/admin/class-about.php:1495 #: includes/admin/class-about.php:1502 #: includes/admin/class-about.php:1509 msgid "All Addons Included" msgstr "" #: includes/admin/class-about.php:1496 #: includes/admin/class-about.php:1503 #: includes/admin/class-about.php:1510 msgid "Calculations, Form Abandonment, Conversational Forms, Lead Forms, Frontend Post Submission, User Registration, Geolocation, Webhooks, Google Sheets, Coupons, and more (30+ total)" msgstr "" #: includes/admin/class-about.php:1518 msgid "Limited Support" msgstr "" #: includes/admin/class-about.php:1524 #: includes/admin/class-about.php:1530 msgid "Standard Support" msgstr "" #: includes/admin/class-about.php:1536 msgid "Priority Support" msgstr "" #: includes/admin/class-about.php:1542 #: includes/admin/class-about.php:1548 #: includes/admin/class-about.php:1554 msgid "Premium Support" msgstr "" #: includes/admin/class-about.php:1562 msgid "1 Site" msgstr "" #: includes/admin/class-about.php:1568 msgid "3 Sites" msgstr "" #: includes/admin/class-about.php:1574 msgid "5 Sites" msgstr "" #: includes/admin/class-about.php:1580 #: includes/admin/class-about.php:1586 #: includes/admin/class-about.php:1592 msgid "Unlimited Sites" msgstr "" #: includes/admin/class-about.php:1648 #: includes/admin/class-menu.php:79 msgid "Form Entries" msgstr "" #: includes/admin/class-about.php:1649 msgid "Form Fields" msgstr "" #: includes/admin/class-about.php:1650 #: includes/admin/class-menu.php:108 #: includes/admin/class-welcome.php:196 #: src/Admin/Pages/Templates.php:98 msgid "Form Templates" msgstr "" #: includes/admin/class-about.php:1652 #: includes/admin/class-welcome.php:208 #: src/Integrations/Stripe/Admin/Builder/Settings.php:299 #: src/Lite/Admin/Education/Builder/Fields.php:79 msgid "Smart Conditional Logic" msgstr "" #: includes/admin/class-about.php:1653 #: includes/admin/class-welcome.php:279 #: src/Admin/Builder/Help.php:152 msgid "Marketing Integrations" msgstr "" #: includes/admin/class-about.php:1654 #: includes/admin/class-welcome.php:270 #: src/Admin/Builder/Help.php:153 msgid "Payment Forms" msgstr "" #: includes/admin/class-about.php:1655 #: includes/admin/class-welcome.php:271 msgid "Surveys & Polls" msgstr "" #: includes/admin/class-about.php:1656 msgid "Advanced Form Features" msgstr "" #: includes/admin/class-about.php:1657 #: includes/admin/class-menu.php:147 #: lite/templates/admin/addons.php:21 msgid "WPForms Addons" msgstr "" #: includes/admin/class-about.php:1658 msgid "Customer Support" msgstr "" #: includes/admin/class-about.php:1659 msgid "Number of Sites" msgstr "" #: includes/admin/class-editor.php:52 #: includes/admin/class-editor.php:166 msgid "Add Form" msgstr "" #: includes/admin/class-editor.php:107 msgid "Insert Form" msgstr "" #. translators: %s - WPForms documentation URL. #: includes/admin/class-editor.php:117 msgid "Heads up! Don't forget to test your form. Check out our complete guide!" msgstr "" #: includes/admin/class-editor.php:133 msgid "Select a form below to insert" msgstr "" #: includes/admin/class-editor.php:139 msgid "Show form name" msgstr "" #: includes/admin/class-editor.php:140 msgid "Show form description" msgstr "" #. translators: %s - WPForms Builder page. #: includes/admin/class-editor.php:146 msgid "Whoops, you haven't created a form yet. Want to give it a go?" msgstr "" #: includes/admin/class-menu.php:60 #: src/Admin/AdminBarMenu.php:238 msgid "All Forms" msgstr "" #: includes/admin/class-menu.php:69 msgid "WPForms Builder" msgstr "" #: includes/admin/class-menu.php:70 #: src/Admin/AdminBarMenu.php:281 #: src/Admin/Forms/Page.php:261 msgid "Add New" msgstr "" #: includes/admin/class-menu.php:80 #: src/Admin/Forms/Table/Facades/Columns.php:82 #: src/Admin/Forms/Views.php:571 #: src/Lite/Admin/DashboardWidget.php:169 #: src/Logger/Log.php:103 #: templates/emails/summary-body-plain.php:52 #: templates/emails/summary-body.php:159 msgid "Entries" msgstr "" #: includes/admin/class-menu.php:107 msgid "WPForms Templates" msgstr "" #: includes/admin/class-menu.php:117 msgid "WPForms Settings" msgstr "" #: includes/admin/class-menu.php:127 msgid "WPForms Tools" msgstr "" #: includes/admin/class-menu.php:128 msgid "Tools" msgstr "" #: includes/admin/class-menu.php:138 #: templates/emails/summary-body.php:280 msgid "Info" msgstr "" #: includes/admin/class-menu.php:148 msgid "Addons" msgstr "" #: includes/admin/class-menu.php:157 #: includes/admin/class-menu.php:158 msgid "Analytics" msgstr "" #: includes/admin/class-menu.php:167 #: includes/admin/class-menu.php:168 msgid "SMTP" msgstr "" #: includes/admin/class-menu.php:177 msgid "About WPForms" msgstr "" #: includes/admin/class-menu.php:187 #: includes/admin/class-menu.php:188 #: src/Admin/AdminBarMenu.php:300 #: src/Admin/Pages/Community.php:137 msgid "Community" msgstr "" #: includes/admin/class-menu.php:197 #: includes/admin/class-menu.php:198 #: lite/templates/education/builder/did-you-know.php:30 #: lite/wpforms-lite.php:1004 #: src/Admin/Builder/AntiSpam.php:308 msgid "Upgrade to Pro" msgstr "" #: includes/admin/class-menu.php:369 #: includes/admin/class-welcome.php:338 #: includes/functions/education.php:79 #: src/Admin/FlyoutMenu.php:112 #: src/Admin/Payments/Views/Coupons/Education.php:143 #: src/Admin/Tools/Views/Importer.php:229 #: src/Lite/Admin/DashboardWidget.php:316 #: src/Lite/Admin/Settings/Access.php:300 #: templates/builder/help.php:91 #: templates/education/admin/page.php:100 msgid "Upgrade to WPForms Pro" msgstr "" #: includes/admin/class-menu.php:370 msgid "Get WPForms Pro" msgstr "" #: includes/admin/class-menu.php:381 msgid "Go to WPForms Settings page" msgstr "" #: includes/admin/class-menu.php:398 msgid "Read the documentation" msgstr "" #: includes/admin/class-menu.php:399 #: includes/admin/class-review.php:305 #: templates/builder/help.php:122 msgid "Docs" msgstr "" #: includes/admin/class-review.php:192 msgid "Hey, there! It looks like you enjoy creating forms with WPForms. Would you do us a favor and take a few seconds to give us a 5-star review? We’d love to hear from you." msgstr "" #: includes/admin/class-review.php:194 msgid "Ok, you deserve it" msgstr "" #: includes/admin/class-review.php:195 msgid "Nope, maybe later" msgstr "" #: includes/admin/class-review.php:196 msgid "I already did" msgstr "" #. translators: $1$s - WPForms plugin name, $2$s - WP.org review link, $3$s - WP.org review link. #: includes/admin/class-review.php:239 msgid "Please rate %1$s ★★★★★ on WordPress.org to help us spread the word." msgstr "" #: includes/admin/class-review.php:296 msgid "Support" msgstr "" #: includes/admin/class-review.php:310 msgid "VIP Circle" msgstr "" #: includes/admin/class-review.php:315 msgid "Free Plugins" msgstr "" #: includes/admin/class-review.php:322 msgid "Made with ♥ by the WPForms Team" msgstr "" #. translators: %1$s - WPForms.com doc page URL; %2$s - button text. #: includes/admin/class-settings.php:115 msgid "It looks like you've downgraded to an older version of WPForms. We recommend always using the latest version as some features may not function as expected in older versions. %2$s" msgstr "" #: includes/admin/class-settings.php:273 msgid "Settings were successfully saved." msgstr "" #: includes/admin/class-settings.php:277 msgid "You've changed your currency. Please double-check the product prices in your forms and verify that they're correct." msgstr "" #: includes/admin/class-settings.php:304 #: includes/admin/class-settings.php:309 #: includes/admin/class-settings.php:324 #: src/Admin/Settings/Captcha/Page.php:124 #: src/Admin/Settings/Email.php:178 #: src/Admin/Settings/Payments.php:49 #: src/Admin/Tools/Views/Logs.php:128 msgid "Save Settings" msgstr "" #: includes/admin/class-settings.php:307 msgid "Validation" msgstr "" #: includes/admin/class-settings.php:312 #: includes/admin/class-settings.php:560 #: includes/admin/class-settings.php:567 msgid "Integrations" msgstr "" #: includes/admin/class-settings.php:317 #: includes/admin/class-welcome.php:276 #: src/Admin/Education/Admin/Settings/Geolocation.php:141 msgid "Geolocation" msgstr "" #: includes/admin/class-settings.php:322 msgid "Misc" msgstr "" #: includes/admin/class-settings.php:367 msgid "License" msgstr "" #: includes/admin/class-settings.php:367 msgid "Your license key provides access to updates and addons." msgstr "" #: includes/admin/class-settings.php:374 msgid "License Key" msgstr "" #: includes/admin/class-settings.php:386 msgid "Include Form Styling" msgstr "" #. translators: %s - WPForms.com form styling setting URL. #: includes/admin/class-settings.php:389 msgid "Determines which CSS files to load and use for the site. \"Base and Form Theme Styling\" is recommended, unless you are experienced with CSS or instructed by support to change settings. Learn More" msgstr "" #: includes/admin/class-settings.php:405 msgid "Base and form theme styling" msgstr "" #: includes/admin/class-settings.php:406 msgid "Base styling only" msgstr "" #: includes/admin/class-settings.php:407 msgid "No styling" msgstr "" #: includes/admin/class-settings.php:412 msgid "Load Assets Globally" msgstr "" #: includes/admin/class-settings.php:413 msgid "Load WPForms assets site-wide. Only check if your site is having compatibility issues or instructed to by support." msgstr "" #: includes/admin/class-settings.php:419 msgid "GDPR" msgstr "" #: includes/admin/class-settings.php:426 msgid "GDPR Enhancements" msgstr "" #. translators: %s - WPForms.com GDPR documentation URL. #: includes/admin/class-settings.php:429 msgid "Enable GDPR related features and enhancements. Learn More" msgstr "" #. translators: %s - WPForms.com smart tags documentation URL. #: includes/admin/class-settings.php:450 msgid "%1$s These messages are displayed to the users as they fill out a form in real-time. Messages can include plain text and/or %2$sSmart Tags%3$s." msgstr "" #: includes/admin/class-settings.php:451 msgid "Validation Messages" msgstr "" #: includes/admin/class-settings.php:462 #: includes/fields/class-base.php:1181 msgid "Required" msgstr "" #: includes/admin/class-settings.php:464 #: includes/functions/escape-sanitize.php:445 #: src/Frontend/Frontend.php:1820 msgid "This field is required." msgstr "" #: includes/admin/class-settings.php:468 #: includes/fields/class-email.php:50 #: includes/fields/class-email.php:144 #: includes/fields/class-email.php:480 #: includes/templates/class-simple-contact-form.php:43 #: src/Admin/Settings/Email.php:177 #: src/Emails/Preview.php:406 #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:221 #: templates/admin/settings/email-heading.php:12 msgid "Email" msgstr "" #: includes/admin/class-settings.php:470 #: src/Frontend/Frontend.php:1821 msgid "Please enter a valid email address." msgstr "" #: includes/admin/class-settings.php:474 msgid "Email Suggestion" msgstr "" #. translators: %s - suggested email address. #: includes/admin/class-settings.php:477 #: src/Frontend/Frontend.php:1825 msgid "Did you mean %s?" msgstr "" #: includes/admin/class-settings.php:483 msgid "Email Restricted" msgstr "" #: includes/admin/class-settings.php:485 #: includes/fields/class-email.php:647 #: includes/fields/class-email.php:655 #: src/Frontend/Frontend.php:1830 msgid "This email address is not allowed." msgstr "" #: includes/admin/class-settings.php:489 msgid "Number" msgstr "" #: includes/admin/class-settings.php:491 #: includes/fields/class-number.php:175 #: src/Frontend/Frontend.php:1831 msgid "Please enter a valid number." msgstr "" #: includes/admin/class-settings.php:495 msgid "Number Positive" msgstr "" #: includes/admin/class-settings.php:497 #: src/Frontend/Frontend.php:1832 msgid "Please enter a valid positive number." msgstr "" #: includes/admin/class-settings.php:501 #: src/Forms/Fields/PaymentSingle/Field.php:417 msgid "Minimum Price" msgstr "" #: includes/admin/class-settings.php:503 #: src/Frontend/Frontend.php:1833 msgid "Amount entered is less than the required minimum." msgstr "" #: includes/admin/class-settings.php:507 msgid "Confirm Value" msgstr "" #: includes/admin/class-settings.php:509 #: src/Frontend/Frontend.php:1834 msgid "Field values do not match." msgstr "" #: includes/admin/class-settings.php:513 msgid "Input Mask Incomplete" msgstr "" #: includes/admin/class-settings.php:515 #: src/Frontend/Frontend.php:1854 msgid "Please fill out the field in required format." msgstr "" #: includes/admin/class-settings.php:519 msgid "Checkbox Selection Limit" msgstr "" #: includes/admin/class-settings.php:521 #: includes/fields/class-checkbox.php:649 #: src/Frontend/Frontend.php:1835 msgid "You have exceeded the number of allowed selections: {#}." msgstr "" #: includes/admin/class-settings.php:525 msgid "Character Limit" msgstr "" #. translators: %1$s - characters limit, %2$s - number of characters left. #: includes/admin/class-settings.php:528 msgid "Limit is %1$s characters. Characters remaining: %2$s." msgstr "" #: includes/admin/class-settings.php:535 msgid "Word Limit" msgstr "" #. translators: %1$s - words limit, %2$s - number of words left. #: includes/admin/class-settings.php:538 msgid "Limit is %1$s words. Words remaining: %2$s." msgstr "" #: includes/admin/class-settings.php:545 msgid "Payment Required" msgstr "" #: includes/admin/class-settings.php:547 #: src/Forms/Fields/PaymentTotal/Field.php:356 #: src/Frontend/Frontend.php:1954 msgid "Payment is required." msgstr "" #: includes/admin/class-settings.php:551 msgid "Credit Card" msgstr "" #: includes/admin/class-settings.php:553 #: src/Frontend/Frontend.php:1955 msgid "Please enter a valid credit card number." msgstr "" #: includes/admin/class-settings.php:560 #: includes/admin/class-settings.php:567 msgid "Manage integrations with popular providers such as Constant Contact, Mailchimp, Zapier, and more." msgstr "" #: includes/admin/class-settings.php:576 msgid "Miscellaneous" msgstr "" #: includes/admin/class-settings.php:583 msgid "Delete Spam Entries" msgstr "" #: includes/admin/class-settings.php:584 msgid "Choose the frequency spam entries are automatically deleted." msgstr "" #: includes/admin/class-settings.php:589 msgid "7 Days" msgstr "" #: includes/admin/class-settings.php:590 msgid "15 Days" msgstr "" #: includes/admin/class-settings.php:591 msgid "30 Days" msgstr "" #: includes/admin/class-settings.php:592 msgid "90 Days" msgstr "" #: includes/admin/class-settings.php:597 msgid "Hide Announcements" msgstr "" #: includes/admin/class-settings.php:598 msgid "Hide plugin announcements and update details." msgstr "" #: includes/admin/class-settings.php:604 msgid "Hide Admin Bar Menu" msgstr "" #: includes/admin/class-settings.php:605 msgid "Hide the WPForms admin bar menu." msgstr "" #: includes/admin/class-settings.php:611 msgid "Uninstall WPForms" msgstr "" #: includes/admin/class-settings.php:640 #: includes/admin/class-settings.php:644 msgid "Remove ALL WPForms data upon plugin deletion." msgstr "" #: includes/admin/class-settings.php:641 msgid "All forms and settings will be unrecoverable." msgstr "" #: includes/admin/class-settings.php:645 msgid "All forms, entries, and uploaded files will be unrecoverable." msgstr "" #: includes/admin/class-welcome.php:67 #: includes/admin/class-welcome.php:68 #: includes/admin/class-welcome.php:147 msgid "Welcome to WPForms" msgstr "" #: includes/admin/class-welcome.php:148 msgid "Thank you for choosing WPForms - the most powerful drag & drop WordPress form builder in the market." msgstr "" #: includes/admin/class-welcome.php:151 #: includes/admin/class-welcome.php:152 msgid "Watch how to create your first form" msgstr "" #: includes/admin/class-welcome.php:157 msgid "WPForms makes it easy to create forms in WordPress. You can watch the video tutorial or read our guide on how create your first form." msgstr "" #: includes/admin/class-welcome.php:162 #: includes/admin/class-welcome.php:331 msgid "Create Your First Form" msgstr "" #: includes/admin/class-welcome.php:168 msgid "Read the Full Guide" msgstr "" #: includes/admin/class-welcome.php:183 msgid "WPForms Features & Addons" msgstr "" #: includes/admin/class-welcome.php:184 msgid "WPForms is both easy to use and extremely powerful. We have tons of helpful features that allow us to give you everything you need from a form builder." msgstr "" #: includes/admin/class-welcome.php:190 msgid "Drag & Drop Form Builder" msgstr "" #: includes/admin/class-welcome.php:191 msgid "Easily create an amazing form in just a few minutes without writing any code." msgstr "" #: includes/admin/class-welcome.php:197 msgid "Start with pre-built form templates to save even more time." msgstr "" #: includes/admin/class-welcome.php:202 msgid "Responsive Mobile Friendly" msgstr "" #: includes/admin/class-welcome.php:203 msgid "WPForms is 100% responsive meaning it works on mobile, tablets & desktop." msgstr "" #: includes/admin/class-welcome.php:209 msgid "Easily create high performance forms with our smart conditional logic." msgstr "" #: includes/admin/class-welcome.php:214 msgid "Instant Notifications" msgstr "" #: includes/admin/class-welcome.php:215 msgid "Respond to leads quickly with our instant form notification feature for your team." msgstr "" #: includes/admin/class-welcome.php:220 #: includes/admin/class-welcome.php:274 #: src/Admin/Builder/Help.php:150 msgid "Entry Management" msgstr "" #: includes/admin/class-welcome.php:221 msgid "View all your leads in one place to streamline your workflow." msgstr "" #: includes/admin/class-welcome.php:226 msgid "Payments Made Easy" msgstr "" #: includes/admin/class-welcome.php:227 msgid "Easily collect payments, donations, and online orders without hiring a developer." msgstr "" #: includes/admin/class-welcome.php:232 msgid "Marketing & Subscriptions" msgstr "" #: includes/admin/class-welcome.php:233 msgid "Create subscription forms and connect with your email marketing service." msgstr "" #: includes/admin/class-welcome.php:238 msgid "Easy to Embed" msgstr "" #: includes/admin/class-welcome.php:239 msgid "Easily embed your forms in blog posts, pages, sidebar widgets, footer, etc." msgstr "" #: includes/admin/class-welcome.php:244 msgid "Spam Protection" msgstr "" #: includes/admin/class-welcome.php:245 msgid "Our smart captcha and spam protection automatically prevents spam submissions." msgstr "" #: includes/admin/class-welcome.php:253 msgid "See All Features" msgstr "" #: includes/admin/class-welcome.php:266 #: src/Admin/Builder/Templates.php:1000 msgid "Upgrade to PRO" msgstr "" #: includes/admin/class-welcome.php:268 msgid "Advanced Fields" msgstr "" #: includes/admin/class-welcome.php:269 #: src/Logger/Log.php:102 msgid "Conditional Logic" msgstr "" #: includes/admin/class-welcome.php:272 msgid "Signatures" msgstr "" #: includes/admin/class-welcome.php:273 msgid "Form Abandonment" msgstr "" #: includes/admin/class-welcome.php:275 msgid "File Uploads" msgstr "" #: includes/admin/class-welcome.php:277 msgid "Conversational Forms" msgstr "" #: includes/admin/class-welcome.php:278 msgid "User Registration" msgstr "" #: includes/admin/class-welcome.php:287 msgid "per year" msgstr "" #: includes/admin/class-welcome.php:291 #: lite/templates/admin/addons.php:89 #: src/Admin/Notifications/EventDriven.php:601 #: src/Admin/Notifications/EventDriven.php:608 #: src/Admin/Notifications/EventDriven.php:615 #: src/Admin/Notifications/EventDriven.php:654 #: src/Admin/Notifications/EventDriven.php:661 #: src/Admin/Notifications/EventDriven.php:668 #: src/Admin/Notifications/EventDriven.php:721 #: src/Admin/Notifications/EventDriven.php:728 #: src/Admin/Notifications/EventDriven.php:735 #: src/Admin/Tools/Views/Importer.php:363 #: src/Lite/Admin/Pages/Addons.php:95 msgid "Upgrade Now" msgstr "" #: includes/admin/class-welcome.php:303 msgid "Testimonials" msgstr "" #: includes/admin/class-welcome.php:307 msgid "WPForms is by far the easiest form plugin to use. My clients love it – it’s one of the few plugins they can use without any training. As a developer I appreciate how fast, modern, clean and extensible it is." msgstr "" #: includes/admin/class-welcome.php:314 msgid "As a business owner, time is my most valuable asset. WPForms allow me to create smart online forms with just a few clicks. With their pre-built form templates and the drag & drop builder, I can create a new form that works in less than 2 minutes without writing a single line of code. Well worth the investment." msgstr "" #. translators: %s - ID of a setting. #: includes/admin/settings-api.php:97 msgid "The callback function used for the %s setting is missing." msgstr "" #: includes/admin/settings-api.php:129 msgid "You're using WPForms Lite - no license needed. Enjoy!" msgstr "" #. translators: %s - WPForms.com upgrade URL. #: includes/admin/settings-api.php:134 msgid "To unlock more features consider upgrading to PRO." msgstr "" #: includes/admin/settings-api.php:151 msgid "As a valued WPForms Lite user you receive 50% off, automatically applied at checkout!" msgstr "" #: includes/admin/settings-api.php:158 msgid "Already purchased? Simply enter your license key below to enable WPForms PRO!" msgstr "" #: includes/admin/settings-api.php:160 msgid "Paste license key here" msgstr "" #: includes/admin/settings-api.php:161 msgid "Verify Key" msgstr "" #: includes/admin/settings-api.php:399 #: templates/builder/notifications/email-template-modal.php:31 msgid "Email Templates" msgstr "" #: includes/admin/settings-api.php:428 #: templates/builder/notifications/email-template-modal.php:40 msgid "Choose" msgstr "" #: includes/admin/settings-api.php:535 #: includes/fields/class-base.php:1368 #: includes/fields/class-base.php:1531 msgid "Upload Image" msgstr "" #: includes/class-form.php:581 #: includes/templates/class-blank.php:38 #: includes/templates/class-simple-contact-form.php:60 msgid "Sending..." msgstr "" #. translators: %s - form name. #: includes/class-form.php:587 #: lite/wpforms-lite.php:246 #: src/Admin/Tools/Importers/ContactForm7.php:133 #: src/Admin/Tools/Importers/ContactForm7.php:445 #: src/Admin/Tools/Importers/NinjaForms.php:138 #: src/Admin/Tools/Importers/NinjaForms.php:427 #: src/Admin/Tools/Importers/PirateForms.php:455 msgid "New Entry: %s" msgstr "" #: includes/class-form.php:598 #: includes/class-process.php:1297 #: includes/templates/class-simple-contact-form.php:73 #: lite/wpforms-lite.php:474 #: lite/wpforms-lite.php:536 #: src/Admin/Tools/Importers/ContactForm7.php:145 #: src/Admin/Tools/Importers/NinjaForms.php:150 #: src/Admin/Tools/Importers/PirateForms.php:468 msgid "Thanks for contacting us! We will be in touch with you shortly." msgstr "" #: includes/class-form.php:1100 msgid "Zaps Have Been Disabled" msgstr "" #. translators: %s - URL the to list of Zaps. #: includes/class-form.php:1103 msgid "Head over to the Zapier settings in the Marketing tab or visit your Zapier account to restore them." msgstr "" #: includes/class-process.php:204 msgid "Invalid form." msgstr "" #. translators: %s - error unique ID. #: includes/class-process.php:241 msgid "Missing form data on form submission process %s" msgstr "" #: includes/class-process.php:242 msgid "Form data is not an array in `\\WPForms_Process::process()`. It might be caused by incorrect data returned by `wpforms_process_before_form_data` filter. Verify whether you have a custom code using this filter and debug value it is returning." msgstr "" #: includes/class-process.php:249 msgid "Your form has not been submitted because data is missing from the entry." msgstr "" #. translators: %s - URL to the WForms Logs admin page. #: includes/class-process.php:254 msgid "Check the WPForms » Tools » Logs for more details." msgstr "" #. translators: %s - error unique ID. #: includes/class-process.php:269 msgid "Error ID: %s." msgstr "" #: includes/class-process.php:396 #: includes/class-process.php:556 #: includes/class-process.php:1462 msgid "Form has not been submitted, please see the errors below." msgstr "" #: includes/class-process.php:420 msgid "The form could not be submitted due to a security issue." msgstr "" #: includes/class-process.php:665 msgid "Anti-spam Honeypot V2 verification was failed, please try again later." msgstr "" #: includes/class-process.php:723 msgid "Direct POST requests are not allowed when the AJAX submission is enabled." msgstr "" #: includes/class-process.php:725 msgid "Direct POST request" msgstr "" #: includes/class-process.php:849 msgid "Please wait a little longer before submitting. We’re running a quick security check." msgstr "" #: includes/class-process.php:918 msgid "Akismet" msgstr "" #. translators: %s - The CAPTCHA provider name. #: includes/class-process.php:981 msgid "%s verification failed, please try again later." msgstr "" #: includes/class-process.php:1196 msgid "Uploaded files combined size exceeds allowed maximum." msgstr "" #: includes/class-process.php:1380 msgid "Redirecting…" msgstr "" #. translators: %1$.3f - total size of the selected files in megabytes, %2$.3f - allowed file upload limit in megabytes. #: includes/class-process.php:1464 msgid "The total size of the selected files %1$.3f MB exceeds the allowed limit %2$.3f MB." msgstr "" #. translators: %s - form name. #: includes/class-process.php:1566 #: lite/wpforms-lite.php:123 msgid "New %s Entry" msgstr "" #: includes/class-widget.php:44 msgctxt "Widget" msgid "Display a form." msgstr "" #: includes/class-widget.php:54 msgctxt "Widget" msgid "WPForms" msgstr "" #: includes/class-widget.php:130 msgctxt "Widget" msgid "Title:" msgstr "" #: includes/class-widget.php:136 msgctxt "Widget" msgid "Form:" msgstr "" #: includes/class-widget.php:143 msgctxt "Widget" msgid "Select your form" msgstr "" #: includes/class-widget.php:149 msgctxt "Widget" msgid "No forms" msgstr "" #: includes/class-widget.php:157 msgctxt "Widget" msgid "Display form name" msgstr "" #: includes/class-widget.php:162 msgctxt "Widget" msgid "Display form description" msgstr "" #: includes/emails/class-emails.php:384 msgid "You cannot send emails with WPForms_WP_Emails() until init/admin_init has been reached." msgstr "" #: includes/emails/class-emails.php:606 #: src/Admin/Education/Fields.php:101 #: src/Emails/Notifications.php:813 #: src/Integrations/Gutenberg/FormSelector.php:666 msgid "Page Break" msgstr "" #: includes/emails/class-emails.php:610 #: src/Emails/Notifications.php:818 msgid "HTML / Code Block" msgstr "" #: includes/emails/class-emails.php:614 #: includes/integrations.php:44 #: src/Admin/Education/Fields.php:125 #: src/Emails/Notifications.php:823 msgid "Content" msgstr "" #: includes/emails/class-emails.php:640 #: includes/emails/class-emails.php:705 #: src/Emails/Notifications.php:529 #: src/Emails/Notifications.php:702 #: src/SmartTags/SmartTag/FieldHtmlId.php:38 msgid "(empty)" msgstr "" #. translators: %d - field ID. #: includes/emails/class-emails.php:646 #: includes/emails/class-emails.php:710 msgid "Field ID #%s" msgstr "" #: includes/emails/class-emails.php:722 #: src/Emails/Notifications.php:410 msgid "An empty form was submitted." msgstr "" #. translators: %s - link to the site. #: includes/emails/templates/footer-default.php:39 #: templates/emails/general-footer.php:24 msgid "Sent from %s" msgstr "" #. translators: %d - choice number. #: includes/fields/class-base.php:539 #: includes/fields/class-base.php:576 #: includes/fields/class-base.php:3570 msgid "Choice %d" msgstr "" #: includes/fields/class-base.php:1094 msgid "Enter text for the form field label. Field labels are recommended and can be hidden in the Advanced Settings." msgstr "" #: includes/fields/class-base.php:1101 #: src/Integrations/Elementor/WidgetModern.php:216 #: src/Integrations/Gutenberg/FormSelector.php:648 msgid "Label" msgstr "" #: includes/fields/class-base.php:1133 msgid "Enter text for the form field description." msgstr "" #: includes/fields/class-base.php:1140 msgid "Description" msgstr "" #: includes/fields/class-base.php:1173 msgid "Check this option to mark the field required. A form will not submit unless all required fields are provided." msgstr "" #: includes/fields/class-base.php:1204 #: src/Admin/Payments/Views/Overview/Table.php:92 #: src/Admin/Payments/Views/Single.php:358 #: src/Admin/Settings/Captcha/ReCaptcha.php:58 #: src/Admin/Settings/Captcha/Turnstile.php:95 #: templates/admin/payments/single/payment-history.php:31 #: templates/admin/payments/single/payment-history.php:50 msgid "Type" msgstr "" #: includes/fields/class-base.php:1228 msgid "Enter code for the form field." msgstr "" #: includes/fields/class-base.php:1235 msgid "Code" msgstr "" #: includes/fields/class-base.php:1267 msgid "Choices" msgstr "" #: includes/fields/class-base.php:1306 #: includes/fields/class-base.php:1471 msgid "Add choices for the form field." msgstr "" #: includes/fields/class-base.php:1422 msgid "Dynamic Choices Active" msgstr "" #. translators: %1$s - source name, %2$s - type name. #: includes/fields/class-base.php:1426 msgid "Choices are dynamically populated from the %1$s %2$s. Go to the Advanced tab to change this." msgstr "" #: includes/fields/class-base.php:1470 msgid "Items" msgstr "" #: includes/fields/class-base.php:1579 msgid "

Images are not cropped or resized.

For best results, they should be the same size and 250x250 pixels or smaller.

" msgstr "" #: includes/fields/class-base.php:1594 msgid "Use image choices" msgstr "" #: includes/fields/class-base.php:1595 msgid "Check this option to enable using images with the choices." msgstr "" #: includes/fields/class-base.php:1623 msgid "Image Choice Style" msgstr "" #: includes/fields/class-base.php:1624 msgid "Select the style for the image choices." msgstr "" #: includes/fields/class-base.php:1637 #: includes/fields/class-base.php:1794 #: includes/fields/class-select.php:319 #: src/Emails/Notifications.php:1104 #: src/Forms/Fields/PaymentSelect/Field.php:296 msgid "Modern" msgstr "" #: includes/fields/class-base.php:1638 #: includes/fields/class-base.php:1795 #: includes/fields/class-select.php:318 #: src/Emails/Notifications.php:1094 #: src/Forms/Fields/PaymentSelect/Field.php:295 msgid "Classic" msgstr "" #: includes/fields/class-base.php:1639 #: includes/fields/class-base.php:1796 #: includes/fields/class-email.php:390 #: src/Admin/Settings/Captcha/Page.php:158 #: src/Integrations/Gutenberg/FormSelector.php:639 msgid "None" msgstr "" #: includes/fields/class-base.php:1669 msgid "Use icon choices" msgstr "" #: includes/fields/class-base.php:1670 msgid "Enable this option to use icons with the choices." msgstr "" #: includes/fields/class-base.php:1695 msgid "Icon Color" msgstr "" #: includes/fields/class-base.php:1696 msgid "Select an accent color for the icon choices." msgstr "" #: includes/fields/class-base.php:1735 msgid "Icon Size" msgstr "" #: includes/fields/class-base.php:1736 msgid "Select icon size." msgstr "" #: includes/fields/class-base.php:1779 msgid "Icon Choice Style" msgstr "" #: includes/fields/class-base.php:1780 msgid "Select the style for the icon choices." msgstr "" #: includes/fields/class-base.php:1823 msgid "Enter text for the default form field value." msgstr "" #: includes/fields/class-base.php:1831 #: includes/fields/class-name.php:312 #: includes/fields/class-name.php:338 #: includes/fields/class-name.php:364 #: includes/fields/class-name.php:390 #: includes/fields/class-number-slider.php:202 msgid "Default Value" msgstr "" #: includes/fields/class-base.php:1865 msgid "Select the default form field size." msgstr "" #: includes/fields/class-base.php:1867 #: src/Admin/Settings/Email.php:367 #: src/Forms/IconChoices.php:141 #: src/Integrations/Elementor/WidgetModern.php:64 #: src/Integrations/Gutenberg/FormSelector.php:651 #: templates/builder/field-context-menu.php:86 msgid "Small" msgstr "" #: includes/fields/class-base.php:1868 #: src/Admin/Settings/Email.php:368 #: src/Forms/IconChoices.php:137 #: src/Integrations/Elementor/WidgetModern.php:65 #: src/Integrations/Gutenberg/FormSelector.php:652 #: templates/builder/field-context-menu.php:96 msgid "Medium" msgstr "" #: includes/fields/class-base.php:1869 #: src/Admin/Settings/Email.php:369 #: src/Forms/IconChoices.php:133 #: src/Integrations/Elementor/WidgetModern.php:66 #: src/Integrations/Gutenberg/FormSelector.php:653 #: templates/builder/field-context-menu.php:106 msgid "Large" msgstr "" #: includes/fields/class-base.php:1881 #: templates/builder/field-context-menu.php:76 msgid "Field Size" msgstr "" #: includes/fields/class-base.php:1934 msgid "Enter text for the form field placeholder." msgstr "" #: includes/fields/class-base.php:1941 msgid "Placeholder Text" msgstr "" #: includes/fields/class-base.php:1975 msgid "Enter CSS class names for the form field container. Class names should be separated with spaces." msgstr "" #: includes/fields/class-base.php:1987 msgid "CSS Classes" msgstr "" #: includes/fields/class-base.php:2020 msgid "Check this option to hide the form field label." msgstr "" #: includes/fields/class-base.php:2029 #: templates/builder/field-context-menu.php:66 msgid "Hide Label" msgstr "" #: includes/fields/class-base.php:2052 msgid "Check this option to hide the form field sublabel." msgstr "" #: includes/fields/class-base.php:2061 msgid "Hide Sublabels" msgstr "" #: includes/fields/class-base.php:2084 msgid "Select the layout for displaying field choices." msgstr "" #: includes/fields/class-base.php:2086 msgid "One Column" msgstr "" #: includes/fields/class-base.php:2087 msgid "Two Columns" msgstr "" #: includes/fields/class-base.php:2088 msgid "Three Columns" msgstr "" #: includes/fields/class-base.php:2089 msgid "Inline" msgstr "" #: includes/fields/class-base.php:2097 msgid "Choice Layout" msgstr "" #: includes/fields/class-base.php:2130 msgid "Select auto-populate method to use." msgstr "" #: includes/fields/class-base.php:2133 #: includes/fields/class-base.php:2185 msgid "Post Type" msgstr "" #: includes/fields/class-base.php:2134 #: includes/fields/class-base.php:2197 msgid "Taxonomy" msgstr "" #: includes/fields/class-base.php:2142 msgid "Dynamic Choices" msgstr "" #. translators: %s - dynamic source type name. #: includes/fields/class-base.php:2211 msgid "Select %s to use for auto-populating field choices." msgstr "" #. translators: %s - dynamic source type name. #: includes/fields/class-base.php:2214 msgid "Dynamic %s Source" msgstr "" #: includes/fields/class-base.php:2275 msgid "Enable quantity for this product to allow customers to purchase more than one." msgstr "" #: includes/fields/class-base.php:2276 msgid "Set the minimum and maximum quantity for this product." msgstr "" #: includes/fields/class-base.php:2282 msgid "Enable Quantity" msgstr "" #: includes/fields/class-base.php:2316 msgid "Range" msgstr "" #: includes/fields/class-base.php:2330 #: templates/fields/number-slider/builder-option-min-max.php:21 msgid "Minimum" msgstr "" #: includes/fields/class-base.php:2349 #: templates/fields/number-slider/builder-option-min-max.php:25 msgid "Maximum" msgstr "" #: includes/fields/class-base.php:2459 msgid "Label Hidden" msgstr "" #: includes/fields/class-base.php:2460 msgid "To ensure your form is accessible, every field should have a descriptive label. If you'd like to hide the label, you can do so by enabling Hide Label in the Advanced Field Options tab." msgstr "" #. translators: %s - total amount of choices. #: includes/fields/class-base.php:2748 msgid "Showing the first %1$s choices.
All %2$s choices will be displayed when viewing the form." msgstr "" #: includes/fields/class-base.php:2803 msgid "No form ID found" msgstr "" #: includes/fields/class-base.php:2808 msgid "No field type found" msgstr "" #: includes/fields/class-base.php:3319 msgid "Only unique values can be added" msgstr "" #: includes/fields/class-base.php:3320 msgid "Only values matching specific conditions can be added" msgstr "" #: includes/fields/class-base.php:3505 msgid "Dynamic choices" msgstr "" #: includes/fields/class-base.php:3506 msgid "items" msgstr "" #. translators: %d - choice number. #: includes/fields/class-base.php:3570 msgid "Item %d" msgstr "" #: includes/fields/class-checkbox.php:22 msgid "Checkboxes" msgstr "" #: includes/fields/class-checkbox.php:23 #: includes/fields/class-select.php:48 msgid "choice" msgstr "" #: includes/fields/class-checkbox.php:29 #: includes/fields/class-radio.php:29 #: includes/fields/class-select.php:54 #: src/Integrations/AI/Admin/Builder/Enqueues.php:205 msgid "First Choice" msgstr "" #: includes/fields/class-checkbox.php:37 #: includes/fields/class-radio.php:37 #: includes/fields/class-select.php:59 #: src/Integrations/AI/Admin/Builder/Enqueues.php:206 msgid "Second Choice" msgstr "" #: includes/fields/class-checkbox.php:45 #: includes/fields/class-radio.php:45 #: includes/fields/class-select.php:64 #: src/Integrations/AI/Admin/Builder/Enqueues.php:207 msgid "Third Choice" msgstr "" #: includes/fields/class-checkbox.php:127 #: src/Forms/Fields/PaymentCheckbox/Field.php:111 msgid "Checked" msgstr "" #: includes/fields/class-checkbox.php:241 #: includes/fields/class-radio.php:214 #: includes/fields/class-select.php:207 #: src/Integrations/AI/Admin/Builder/Enqueues.php:145 msgid "Generate Choices" msgstr "" #: includes/fields/class-checkbox.php:304 #: includes/fields/class-radio.php:277 msgid "Randomize Choices" msgstr "" #: includes/fields/class-checkbox.php:305 #: includes/fields/class-radio.php:278 msgid "Check this option to randomize the order of the choices." msgstr "" #: includes/fields/class-checkbox.php:326 #: includes/fields/class-radio.php:299 #: includes/fields/class-select.php:249 msgid "Show Values" msgstr "" #: includes/fields/class-checkbox.php:327 #: includes/fields/class-radio.php:300 #: includes/fields/class-select.php:250 msgid "Check this option to manually set form field values." msgstr "" #: includes/fields/class-checkbox.php:351 msgid "Choice Limit" msgstr "" #: includes/fields/class-checkbox.php:352 msgid "Limit the number of checkboxes a user can select. Leave empty for unlimited." msgstr "" #: includes/fields/class-checkbox.php:392 msgid "Enable Disclaimer / Terms of Service Display" msgstr "" #: includes/fields/class-checkbox.php:393 msgid "Check this option to adjust the field styling to support Disclaimers and Terms of Service type agreements." msgstr "" #: includes/fields/class-email.php:51 msgid "user" msgstr "" #: includes/fields/class-email.php:168 #: includes/fields/class-email.php:485 msgid "Confirm Email" msgstr "" #: includes/fields/class-email.php:303 msgid "Enable Email Confirmation" msgstr "" #: includes/fields/class-email.php:304 msgid "Check this option to ask users to provide an email address twice." msgstr "" #: includes/fields/class-email.php:346 msgid "Confirmation Placeholder Text" msgstr "" #: includes/fields/class-email.php:347 msgid "Enter text for the confirmation field placeholder." msgstr "" #: includes/fields/class-email.php:377 msgid "Allowlist / Denylist" msgstr "" #: includes/fields/class-email.php:378 msgid "Restrict which email addresses are allowed. Be sure to separate each email address with a comma." msgstr "" #: includes/fields/class-email.php:391 msgid "Allowlist" msgstr "" #: includes/fields/class-email.php:392 msgid "Denylist" msgstr "" #: includes/fields/class-email.php:575 #: includes/fields/class-email.php:625 #: includes/fields/class-email.php:635 #: includes/fields/class-email.php:1083 msgid "The provided email is not valid." msgstr "" #: includes/fields/class-email.php:641 msgid "The provided emails do not match." msgstr "" #: includes/fields/class-email.php:1075 msgid "We’ve detected the same text in your allowlist and denylist. To prevent a conflict, we’ve removed the following text from the list you’re currently viewing:" msgstr "" #: includes/fields/class-email.php:1079 msgid "At least one of the emails in your list contained an error and has been removed." msgstr "" #: includes/fields/class-gdpr-checkbox.php:22 msgid "GDPR Agreement" msgstr "" #: includes/fields/class-gdpr-checkbox.php:28 msgid "I consent to having this website store my submitted information so they can respond to my inquiry." msgstr "" #: includes/fields/class-gdpr-checkbox.php:179 msgid "Agreement" msgstr "" #: includes/fields/class-internal-information.php:30 msgid "Internal Information" msgstr "" #: includes/fields/class-internal-information.php:30 msgid "This field is not editable" msgstr "" #: includes/fields/class-internal-information.php:197 msgid "Heading" msgstr "" #: includes/fields/class-internal-information.php:198 msgid "Enter text for the form field heading." msgstr "" #: includes/fields/class-internal-information.php:237 msgid "Expanded Content" msgstr "" #: includes/fields/class-internal-information.php:238 msgid "Enter text for the form field expanded description." msgstr "" #: includes/fields/class-internal-information.php:255 msgid "Adds an expandable content area below the description." msgstr "" #: includes/fields/class-internal-information.php:282 msgid "CTA Label" msgstr "" #: includes/fields/class-internal-information.php:283 msgid "Enter label for the form field call to action button. The label will be ignored if the field has extended description content: in that case button will be used to expand the description content." msgstr "" #: includes/fields/class-internal-information.php:322 msgid "CTA Link" msgstr "" #: includes/fields/class-internal-information.php:323 msgid "Enter the URL for the form field call to action button. URL will be ignored if the field has extended description content: in that case button will be used to expand the description content." msgstr "" #: includes/fields/class-internal-information.php:340 msgid "CTA is hidden if Expanded Content is used." msgstr "" #: includes/fields/class-internal-information.php:652 msgid "You should enter a valid absolute address to the CTA Link field or leave it empty." msgstr "" #: includes/fields/class-internal-information.php:653 #: src/Lite/Admin/DashboardWidget.php:438 #: templates/admin/dashboard/widget/welcome.php:30 msgid "Dismiss" msgstr "" #: includes/fields/class-internal-information.php:793 msgid "This field is disabled in the editor mode." msgstr "" #: includes/fields/class-name.php:22 #: includes/fields/class-name.php:301 #: includes/templates/class-simple-contact-form.php:36 #: src/Admin/Forms/Table/Facades/Columns.php:66 #: src/Emails/Preview.php:401 msgid "Name" msgstr "" #: includes/fields/class-name.php:23 msgid "user, first, last" msgstr "" #: includes/fields/class-name.php:98 #: includes/fields/class-name.php:448 msgid "First" msgstr "" #: includes/fields/class-name.php:119 #: includes/fields/class-name.php:453 msgid "Middle" msgstr "" #: includes/fields/class-name.php:140 #: includes/fields/class-name.php:458 msgid "Last" msgstr "" #: includes/fields/class-name.php:234 msgid "Format" msgstr "" #: includes/fields/class-name.php:235 msgid "Select format to use for the name form field" msgstr "" #: includes/fields/class-name.php:247 msgid "Simple" msgstr "" #: includes/fields/class-name.php:248 msgid "First Last" msgstr "" #: includes/fields/class-name.php:249 msgid "First Middle Last" msgstr "" #: includes/fields/class-name.php:302 msgid "Name field advanced options." msgstr "" #: includes/fields/class-name.php:308 #: includes/fields/class-name.php:334 #: includes/fields/class-name.php:360 #: includes/fields/class-name.php:386 msgid "Placeholder" msgstr "" #: includes/fields/class-name.php:327 msgid "First Name" msgstr "" #: includes/fields/class-name.php:328 msgid "First name field advanced options." msgstr "" #: includes/fields/class-name.php:353 msgid "Middle Name" msgstr "" #: includes/fields/class-name.php:354 msgid "Middle name field advanced options." msgstr "" #: includes/fields/class-name.php:379 msgid "Last Name" msgstr "" #: includes/fields/class-name.php:380 msgid "Last name field advanced options." msgstr "" #: includes/fields/class-number-slider.php:43 msgid "Number Slider" msgstr "" #: includes/fields/class-number-slider.php:66 msgid "Increment value should be greater than zero. Decimal fractions allowed." msgstr "" #. translators: %1$s - Number slider selected value, %2$s - its minimum value, %3$s - its maximum value. #: includes/fields/class-number-slider.php:98 msgid "%1$s (%2$s min / %3$s max)" msgstr "" #: includes/fields/class-number-slider.php:148 msgid "Value" msgstr "" #: includes/fields/class-number-slider.php:149 msgid "Define the minimum and the maximum values for the slider." msgstr "" #: includes/fields/class-number-slider.php:203 msgid "Enter a default value for this field." msgstr "" #: includes/fields/class-number-slider.php:240 msgid "Increment" msgstr "" #: includes/fields/class-number-slider.php:241 msgid "Determines the increment between selectable values on the slider." msgstr "" #: includes/fields/class-number-slider.php:298 msgid "Value Display" msgstr "" #: includes/fields/class-number-slider.php:299 msgid "Displays the currently selected value below the slider." msgstr "" #. translators: %s - value. #: includes/fields/class-number-slider.php:348 msgid "Selected Value: %s" msgstr "" #: includes/fields/class-number-slider.php:400 msgid "Selected Value: {value}" msgstr "" #: includes/fields/class-number-slider.php:457 msgid "Please provide a valid value." msgstr "" #: includes/fields/class-number.php:22 msgid "Numbers" msgstr "" #: includes/fields/class-radio.php:22 msgid "Multiple Choice" msgstr "" #: includes/fields/class-radio.php:23 msgid "radio" msgstr "" #: includes/fields/class-select.php:47 msgid "Dropdown" msgstr "" #: includes/fields/class-select.php:271 msgid "Multiple Options Selection" msgstr "" #: includes/fields/class-select.php:272 msgid "Allow users to select multiple choices in this field." msgstr "" #. translators: %s - URL to WPForms.com doc article. #: includes/fields/class-select.php:275 msgid "For details, including how this looks and works for your site's visitors, please check out our doc." msgstr "" #: includes/fields/class-select.php:305 #: src/Forms/Fields/PaymentSelect/Field.php:282 msgid "Style" msgstr "" #: includes/fields/class-select.php:306 #: src/Forms/Fields/PaymentSelect/Field.php:283 msgid "Classic style is the default one generated by your browser. Modern has a fresh look and displays all selected options in a single row." msgstr "" #: includes/fields/class-text.php:22 msgid "Single Line Text" msgstr "" #: includes/fields/class-text.php:287 #: includes/fields/class-textarea.php:125 msgid "Limit Length" msgstr "" #: includes/fields/class-text.php:288 #: includes/fields/class-textarea.php:126 msgid "Check this option to limit text length by characters or words count." msgstr "" #: includes/fields/class-text.php:319 #: includes/fields/class-textarea.php:157 msgid "Characters" msgstr "" #: includes/fields/class-text.php:320 #: includes/fields/class-textarea.php:158 msgid "Words" msgstr "" #: includes/fields/class-text.php:343 msgid "Input Mask" msgstr "" #: includes/fields/class-text.php:344 msgid "Enter your custom input mask." msgstr "" #: includes/fields/class-text.php:345 msgid "See Examples & Docs" msgstr "" #. translators: %s - limit characters number. #: includes/fields/class-text.php:543 #: includes/fields/class-textarea.php:365 msgid "Text can't exceed %d character." msgid_plural "Text can't exceed %d characters." msgstr[0] "" msgstr[1] "" #. translators: %s - limit words number. #: includes/fields/class-text.php:550 #: includes/fields/class-textarea.php:372 msgid "Text can't exceed %d word." msgid_plural "Text can't exceed %d words." msgstr[0] "" msgstr[1] "" #: includes/fields/class-textarea.php:22 msgid "Paragraph Text" msgstr "" #: includes/fields/class-textarea.php:23 msgid "textarea" msgstr "" #: includes/functions/data-presets.php:18 msgid "Alabama" msgstr "" #: includes/functions/data-presets.php:19 msgid "Alaska" msgstr "" #: includes/functions/data-presets.php:20 msgid "Arizona" msgstr "" #: includes/functions/data-presets.php:21 msgid "Arkansas" msgstr "" #: includes/functions/data-presets.php:22 msgid "California" msgstr "" #: includes/functions/data-presets.php:23 msgid "Colorado" msgstr "" #: includes/functions/data-presets.php:24 msgid "Connecticut" msgstr "" #: includes/functions/data-presets.php:25 msgid "Delaware" msgstr "" #: includes/functions/data-presets.php:26 msgid "District of Columbia" msgstr "" #: includes/functions/data-presets.php:27 msgid "Florida" msgstr "" #: includes/functions/data-presets.php:28 msgctxt "US State" msgid "Georgia" msgstr "" #: includes/functions/data-presets.php:29 msgid "Hawaii" msgstr "" #: includes/functions/data-presets.php:30 msgid "Idaho" msgstr "" #: includes/functions/data-presets.php:31 msgid "Illinois" msgstr "" #: includes/functions/data-presets.php:32 msgid "Indiana" msgstr "" #: includes/functions/data-presets.php:33 msgid "Iowa" msgstr "" #: includes/functions/data-presets.php:34 msgid "Kansas" msgstr "" #: includes/functions/data-presets.php:35 msgid "Kentucky" msgstr "" #: includes/functions/data-presets.php:36 msgid "Louisiana" msgstr "" #: includes/functions/data-presets.php:37 msgid "Maine" msgstr "" #: includes/functions/data-presets.php:38 msgid "Maryland" msgstr "" #: includes/functions/data-presets.php:39 msgid "Massachusetts" msgstr "" #: includes/functions/data-presets.php:40 msgid "Michigan" msgstr "" #: includes/functions/data-presets.php:41 msgid "Minnesota" msgstr "" #: includes/functions/data-presets.php:42 msgid "Mississippi" msgstr "" #: includes/functions/data-presets.php:43 msgid "Missouri" msgstr "" #: includes/functions/data-presets.php:44 msgid "Montana" msgstr "" #: includes/functions/data-presets.php:45 msgid "Nebraska" msgstr "" #: includes/functions/data-presets.php:46 msgid "Nevada" msgstr "" #: includes/functions/data-presets.php:47 msgid "New Hampshire" msgstr "" #: includes/functions/data-presets.php:48 msgid "New Jersey" msgstr "" #: includes/functions/data-presets.php:49 msgid "New Mexico" msgstr "" #: includes/functions/data-presets.php:50 msgid "New York" msgstr "" #: includes/functions/data-presets.php:51 msgid "North Carolina" msgstr "" #: includes/functions/data-presets.php:52 msgid "North Dakota" msgstr "" #: includes/functions/data-presets.php:53 msgid "Ohio" msgstr "" #: includes/functions/data-presets.php:54 msgid "Oklahoma" msgstr "" #: includes/functions/data-presets.php:55 msgid "Oregon" msgstr "" #: includes/functions/data-presets.php:56 msgid "Pennsylvania" msgstr "" #: includes/functions/data-presets.php:57 msgid "Rhode Island" msgstr "" #: includes/functions/data-presets.php:58 msgid "South Carolina" msgstr "" #: includes/functions/data-presets.php:59 msgid "South Dakota" msgstr "" #: includes/functions/data-presets.php:60 msgid "Tennessee" msgstr "" #: includes/functions/data-presets.php:61 msgid "Texas" msgstr "" #: includes/functions/data-presets.php:62 msgid "Utah" msgstr "" #: includes/functions/data-presets.php:63 msgid "Vermont" msgstr "" #: includes/functions/data-presets.php:64 msgid "Virginia" msgstr "" #: includes/functions/data-presets.php:65 msgid "Washington" msgstr "" #: includes/functions/data-presets.php:66 msgid "West Virginia" msgstr "" #: includes/functions/data-presets.php:67 msgid "Wisconsin" msgstr "" #: includes/functions/data-presets.php:68 msgid "Wyoming" msgstr "" #: includes/functions/data-presets.php:84 msgid "Afghanistan" msgstr "" #: includes/functions/data-presets.php:85 msgid "Åland Islands" msgstr "" #: includes/functions/data-presets.php:86 msgid "Albania" msgstr "" #: includes/functions/data-presets.php:87 msgid "Algeria" msgstr "" #: includes/functions/data-presets.php:88 msgid "American Samoa" msgstr "" #: includes/functions/data-presets.php:89 msgid "Andorra" msgstr "" #: includes/functions/data-presets.php:90 msgid "Angola" msgstr "" #: includes/functions/data-presets.php:91 msgid "Anguilla" msgstr "" #: includes/functions/data-presets.php:92 msgid "Antarctica" msgstr "" #: includes/functions/data-presets.php:93 msgid "Antigua and Barbuda" msgstr "" #: includes/functions/data-presets.php:94 msgid "Argentina" msgstr "" #: includes/functions/data-presets.php:95 msgid "Armenia" msgstr "" #: includes/functions/data-presets.php:96 msgid "Aruba" msgstr "" #: includes/functions/data-presets.php:97 msgid "Australia" msgstr "" #: includes/functions/data-presets.php:98 msgid "Austria" msgstr "" #: includes/functions/data-presets.php:99 msgid "Azerbaijan" msgstr "" #: includes/functions/data-presets.php:100 msgid "Bahamas" msgstr "" #: includes/functions/data-presets.php:101 msgid "Bahrain" msgstr "" #: includes/functions/data-presets.php:102 msgid "Bangladesh" msgstr "" #: includes/functions/data-presets.php:103 msgid "Barbados" msgstr "" #: includes/functions/data-presets.php:104 msgid "Belarus" msgstr "" #: includes/functions/data-presets.php:105 msgid "Belgium" msgstr "" #: includes/functions/data-presets.php:106 msgid "Belize" msgstr "" #: includes/functions/data-presets.php:107 msgid "Benin" msgstr "" #: includes/functions/data-presets.php:108 msgid "Bermuda" msgstr "" #: includes/functions/data-presets.php:109 msgid "Bhutan" msgstr "" #: includes/functions/data-presets.php:110 msgid "Bolivia (Plurinational State of)" msgstr "" #: includes/functions/data-presets.php:111 msgid "Bonaire, Saint Eustatius and Saba" msgstr "" #: includes/functions/data-presets.php:112 msgid "Bosnia and Herzegovina" msgstr "" #: includes/functions/data-presets.php:113 msgid "Botswana" msgstr "" #: includes/functions/data-presets.php:114 msgid "Bouvet Island" msgstr "" #: includes/functions/data-presets.php:115 msgid "Brazil" msgstr "" #: includes/functions/data-presets.php:116 msgid "British Indian Ocean Territory" msgstr "" #: includes/functions/data-presets.php:117 msgid "Brunei Darussalam" msgstr "" #: includes/functions/data-presets.php:118 msgid "Bulgaria" msgstr "" #: includes/functions/data-presets.php:119 msgid "Burkina Faso" msgstr "" #: includes/functions/data-presets.php:120 msgid "Burundi" msgstr "" #: includes/functions/data-presets.php:121 msgid "Cabo Verde" msgstr "" #: includes/functions/data-presets.php:122 msgid "Cambodia" msgstr "" #: includes/functions/data-presets.php:123 msgid "Cameroon" msgstr "" #: includes/functions/data-presets.php:124 msgid "Canada" msgstr "" #: includes/functions/data-presets.php:125 msgid "Cayman Islands" msgstr "" #: includes/functions/data-presets.php:126 msgid "Central African Republic" msgstr "" #: includes/functions/data-presets.php:127 msgid "Chad" msgstr "" #: includes/functions/data-presets.php:128 msgid "Chile" msgstr "" #: includes/functions/data-presets.php:129 msgid "China" msgstr "" #: includes/functions/data-presets.php:130 msgid "Christmas Island" msgstr "" #: includes/functions/data-presets.php:131 msgid "Cocos (Keeling) Islands" msgstr "" #: includes/functions/data-presets.php:132 msgid "Colombia" msgstr "" #: includes/functions/data-presets.php:133 msgid "Comoros" msgstr "" #: includes/functions/data-presets.php:134 msgid "Congo" msgstr "" #: includes/functions/data-presets.php:135 msgid "Congo (Democratic Republic of the)" msgstr "" #: includes/functions/data-presets.php:136 msgid "Cook Islands" msgstr "" #: includes/functions/data-presets.php:137 msgid "Costa Rica" msgstr "" #: includes/functions/data-presets.php:138 msgid "Côte d'Ivoire" msgstr "" #: includes/functions/data-presets.php:139 msgid "Croatia" msgstr "" #: includes/functions/data-presets.php:140 msgid "Cuba" msgstr "" #: includes/functions/data-presets.php:141 msgid "Curaçao" msgstr "" #: includes/functions/data-presets.php:142 msgid "Cyprus" msgstr "" #: includes/functions/data-presets.php:143 msgid "Czech Republic" msgstr "" #: includes/functions/data-presets.php:144 msgid "Denmark" msgstr "" #: includes/functions/data-presets.php:145 msgid "Djibouti" msgstr "" #: includes/functions/data-presets.php:146 msgid "Dominica" msgstr "" #: includes/functions/data-presets.php:147 msgid "Dominican Republic" msgstr "" #: includes/functions/data-presets.php:148 msgid "Ecuador" msgstr "" #: includes/functions/data-presets.php:149 msgid "Egypt" msgstr "" #: includes/functions/data-presets.php:150 msgid "El Salvador" msgstr "" #: includes/functions/data-presets.php:151 msgid "Equatorial Guinea" msgstr "" #: includes/functions/data-presets.php:152 msgid "Eritrea" msgstr "" #: includes/functions/data-presets.php:153 msgid "Estonia" msgstr "" #: includes/functions/data-presets.php:154 msgid "Ethiopia" msgstr "" #: includes/functions/data-presets.php:155 msgid "Falkland Islands (Malvinas)" msgstr "" #: includes/functions/data-presets.php:156 msgid "Faroe Islands" msgstr "" #: includes/functions/data-presets.php:157 msgid "Fiji" msgstr "" #: includes/functions/data-presets.php:158 msgid "Finland" msgstr "" #: includes/functions/data-presets.php:159 msgid "France" msgstr "" #: includes/functions/data-presets.php:160 msgid "French Guiana" msgstr "" #: includes/functions/data-presets.php:161 msgid "French Polynesia" msgstr "" #: includes/functions/data-presets.php:162 msgid "French Southern Territories" msgstr "" #: includes/functions/data-presets.php:163 msgid "Gabon" msgstr "" #: includes/functions/data-presets.php:164 msgid "Gambia" msgstr "" #: includes/functions/data-presets.php:165 msgctxt "Country" msgid "Georgia" msgstr "" #: includes/functions/data-presets.php:166 msgid "Germany" msgstr "" #: includes/functions/data-presets.php:167 msgid "Ghana" msgstr "" #: includes/functions/data-presets.php:168 msgid "Gibraltar" msgstr "" #: includes/functions/data-presets.php:169 msgid "Greece" msgstr "" #: includes/functions/data-presets.php:170 msgid "Greenland" msgstr "" #: includes/functions/data-presets.php:171 msgid "Grenada" msgstr "" #: includes/functions/data-presets.php:172 msgid "Guadeloupe" msgstr "" #: includes/functions/data-presets.php:173 msgid "Guam" msgstr "" #: includes/functions/data-presets.php:174 msgid "Guatemala" msgstr "" #: includes/functions/data-presets.php:175 msgid "Guernsey" msgstr "" #: includes/functions/data-presets.php:176 msgid "Guinea" msgstr "" #: includes/functions/data-presets.php:177 msgid "Guinea-Bissau" msgstr "" #: includes/functions/data-presets.php:178 msgid "Guyana" msgstr "" #: includes/functions/data-presets.php:179 msgid "Haiti" msgstr "" #: includes/functions/data-presets.php:180 msgid "Heard Island and McDonald Islands" msgstr "" #: includes/functions/data-presets.php:181 msgid "Honduras" msgstr "" #: includes/functions/data-presets.php:182 msgid "Hong Kong" msgstr "" #: includes/functions/data-presets.php:183 msgid "Hungary" msgstr "" #: includes/functions/data-presets.php:184 msgid "Iceland" msgstr "" #: includes/functions/data-presets.php:185 msgid "India" msgstr "" #: includes/functions/data-presets.php:186 msgid "Indonesia" msgstr "" #: includes/functions/data-presets.php:187 msgid "Iran (Islamic Republic of)" msgstr "" #: includes/functions/data-presets.php:188 msgid "Iraq" msgstr "" #: includes/functions/data-presets.php:189 msgid "Ireland (Republic of)" msgstr "" #: includes/functions/data-presets.php:190 msgid "Isle of Man" msgstr "" #: includes/functions/data-presets.php:191 msgid "Israel" msgstr "" #: includes/functions/data-presets.php:192 msgid "Italy" msgstr "" #: includes/functions/data-presets.php:193 msgid "Jamaica" msgstr "" #: includes/functions/data-presets.php:194 msgid "Japan" msgstr "" #: includes/functions/data-presets.php:195 msgid "Jersey" msgstr "" #: includes/functions/data-presets.php:196 msgid "Jordan" msgstr "" #: includes/functions/data-presets.php:197 msgid "Kazakhstan" msgstr "" #: includes/functions/data-presets.php:198 msgid "Kenya" msgstr "" #: includes/functions/data-presets.php:199 msgid "Kiribati" msgstr "" #: includes/functions/data-presets.php:200 msgid "Korea (Democratic People's Republic of)" msgstr "" #: includes/functions/data-presets.php:201 msgid "Korea (Republic of)" msgstr "" #: includes/functions/data-presets.php:202 msgid "Kosovo" msgstr "" #: includes/functions/data-presets.php:203 msgid "Kuwait" msgstr "" #: includes/functions/data-presets.php:204 msgid "Kyrgyzstan" msgstr "" #: includes/functions/data-presets.php:205 msgid "Lao People's Democratic Republic" msgstr "" #: includes/functions/data-presets.php:206 msgid "Latvia" msgstr "" #: includes/functions/data-presets.php:207 msgid "Lebanon" msgstr "" #: includes/functions/data-presets.php:208 msgid "Lesotho" msgstr "" #: includes/functions/data-presets.php:209 msgid "Liberia" msgstr "" #: includes/functions/data-presets.php:210 msgid "Libya" msgstr "" #: includes/functions/data-presets.php:211 msgid "Liechtenstein" msgstr "" #: includes/functions/data-presets.php:212 msgid "Lithuania" msgstr "" #: includes/functions/data-presets.php:213 msgid "Luxembourg" msgstr "" #: includes/functions/data-presets.php:214 msgid "Macao" msgstr "" #: includes/functions/data-presets.php:215 msgid "North Macedonia (Republic of)" msgstr "" #: includes/functions/data-presets.php:216 msgid "Madagascar" msgstr "" #: includes/functions/data-presets.php:217 msgid "Malawi" msgstr "" #: includes/functions/data-presets.php:218 msgid "Malaysia" msgstr "" #: includes/functions/data-presets.php:219 msgid "Maldives" msgstr "" #: includes/functions/data-presets.php:220 msgid "Mali" msgstr "" #: includes/functions/data-presets.php:221 msgid "Malta" msgstr "" #: includes/functions/data-presets.php:222 msgid "Marshall Islands" msgstr "" #: includes/functions/data-presets.php:223 msgid "Martinique" msgstr "" #: includes/functions/data-presets.php:224 msgid "Mauritania" msgstr "" #: includes/functions/data-presets.php:225 msgid "Mauritius" msgstr "" #: includes/functions/data-presets.php:226 msgid "Mayotte" msgstr "" #: includes/functions/data-presets.php:227 msgid "Mexico" msgstr "" #: includes/functions/data-presets.php:228 msgid "Micronesia (Federated States of)" msgstr "" #: includes/functions/data-presets.php:229 msgid "Moldova (Republic of)" msgstr "" #: includes/functions/data-presets.php:230 msgid "Monaco" msgstr "" #: includes/functions/data-presets.php:231 msgid "Mongolia" msgstr "" #: includes/functions/data-presets.php:232 msgid "Montenegro" msgstr "" #: includes/functions/data-presets.php:233 msgid "Montserrat" msgstr "" #: includes/functions/data-presets.php:234 msgid "Morocco" msgstr "" #: includes/functions/data-presets.php:235 msgid "Mozambique" msgstr "" #: includes/functions/data-presets.php:236 msgid "Myanmar" msgstr "" #: includes/functions/data-presets.php:237 msgid "Namibia" msgstr "" #: includes/functions/data-presets.php:238 msgid "Nauru" msgstr "" #: includes/functions/data-presets.php:239 msgid "Nepal" msgstr "" #: includes/functions/data-presets.php:240 msgid "Netherlands" msgstr "" #: includes/functions/data-presets.php:241 msgid "New Caledonia" msgstr "" #: includes/functions/data-presets.php:242 msgid "New Zealand" msgstr "" #: includes/functions/data-presets.php:243 msgid "Nicaragua" msgstr "" #: includes/functions/data-presets.php:244 msgid "Niger" msgstr "" #: includes/functions/data-presets.php:245 msgid "Nigeria" msgstr "" #: includes/functions/data-presets.php:246 msgid "Niue" msgstr "" #: includes/functions/data-presets.php:247 msgid "Norfolk Island" msgstr "" #: includes/functions/data-presets.php:248 msgid "Northern Mariana Islands" msgstr "" #: includes/functions/data-presets.php:249 msgid "Norway" msgstr "" #: includes/functions/data-presets.php:250 msgid "Oman" msgstr "" #: includes/functions/data-presets.php:251 msgid "Pakistan" msgstr "" #: includes/functions/data-presets.php:252 msgid "Palau" msgstr "" #: includes/functions/data-presets.php:253 msgid "Palestine (State of)" msgstr "" #: includes/functions/data-presets.php:254 msgid "Panama" msgstr "" #: includes/functions/data-presets.php:255 msgid "Papua New Guinea" msgstr "" #: includes/functions/data-presets.php:256 msgid "Paraguay" msgstr "" #: includes/functions/data-presets.php:257 msgid "Peru" msgstr "" #: includes/functions/data-presets.php:258 msgid "Philippines" msgstr "" #: includes/functions/data-presets.php:259 msgid "Pitcairn" msgstr "" #: includes/functions/data-presets.php:260 msgid "Poland" msgstr "" #: includes/functions/data-presets.php:261 msgid "Portugal" msgstr "" #: includes/functions/data-presets.php:262 msgid "Puerto Rico" msgstr "" #: includes/functions/data-presets.php:263 msgid "Qatar" msgstr "" #: includes/functions/data-presets.php:264 msgid "Réunion" msgstr "" #: includes/functions/data-presets.php:265 msgid "Romania" msgstr "" #: includes/functions/data-presets.php:266 msgid "Russian Federation" msgstr "" #: includes/functions/data-presets.php:267 msgid "Rwanda" msgstr "" #: includes/functions/data-presets.php:268 msgid "Saint Barthélemy" msgstr "" #: includes/functions/data-presets.php:269 msgid "Saint Helena, Ascension and Tristan da Cunha" msgstr "" #: includes/functions/data-presets.php:270 msgid "Saint Kitts and Nevis" msgstr "" #: includes/functions/data-presets.php:271 msgid "Saint Lucia" msgstr "" #: includes/functions/data-presets.php:272 msgid "Saint Martin (French part)" msgstr "" #: includes/functions/data-presets.php:273 msgid "Saint Pierre and Miquelon" msgstr "" #: includes/functions/data-presets.php:274 msgid "Saint Vincent and the Grenadines" msgstr "" #: includes/functions/data-presets.php:275 msgid "Samoa" msgstr "" #: includes/functions/data-presets.php:276 msgid "San Marino" msgstr "" #: includes/functions/data-presets.php:277 msgid "Sao Tome and Principe" msgstr "" #: includes/functions/data-presets.php:278 msgid "Saudi Arabia" msgstr "" #: includes/functions/data-presets.php:279 msgid "Senegal" msgstr "" #: includes/functions/data-presets.php:280 msgid "Serbia" msgstr "" #: includes/functions/data-presets.php:281 msgid "Seychelles" msgstr "" #: includes/functions/data-presets.php:282 msgid "Sierra Leone" msgstr "" #: includes/functions/data-presets.php:283 msgid "Singapore" msgstr "" #: includes/functions/data-presets.php:284 msgid "Sint Maarten (Dutch part)" msgstr "" #: includes/functions/data-presets.php:285 msgid "Slovakia" msgstr "" #: includes/functions/data-presets.php:286 msgid "Slovenia" msgstr "" #: includes/functions/data-presets.php:287 msgid "Solomon Islands" msgstr "" #: includes/functions/data-presets.php:288 msgid "Somalia" msgstr "" #: includes/functions/data-presets.php:289 msgid "South Africa" msgstr "" #: includes/functions/data-presets.php:290 msgid "South Georgia and the South Sandwich Islands" msgstr "" #: includes/functions/data-presets.php:291 msgid "South Sudan" msgstr "" #: includes/functions/data-presets.php:292 msgid "Spain" msgstr "" #: includes/functions/data-presets.php:293 msgid "Sri Lanka" msgstr "" #: includes/functions/data-presets.php:294 msgid "Sudan" msgstr "" #: includes/functions/data-presets.php:295 msgid "Suriname" msgstr "" #: includes/functions/data-presets.php:296 msgid "Svalbard and Jan Mayen" msgstr "" #: includes/functions/data-presets.php:297 msgid "Eswatini (Kingdom of)" msgstr "" #: includes/functions/data-presets.php:298 msgid "Sweden" msgstr "" #: includes/functions/data-presets.php:299 msgid "Switzerland" msgstr "" #: includes/functions/data-presets.php:300 msgid "Syrian Arab Republic" msgstr "" #: includes/functions/data-presets.php:301 msgid "Taiwan, Republic of China" msgstr "" #: includes/functions/data-presets.php:302 msgid "Tajikistan" msgstr "" #: includes/functions/data-presets.php:303 msgid "Tanzania (United Republic of)" msgstr "" #: includes/functions/data-presets.php:304 msgid "Thailand" msgstr "" #: includes/functions/data-presets.php:305 msgid "Timor-Leste" msgstr "" #: includes/functions/data-presets.php:306 msgid "Togo" msgstr "" #: includes/functions/data-presets.php:307 msgid "Tokelau" msgstr "" #: includes/functions/data-presets.php:308 msgid "Tonga" msgstr "" #: includes/functions/data-presets.php:309 msgid "Trinidad and Tobago" msgstr "" #: includes/functions/data-presets.php:310 msgid "Tunisia" msgstr "" #: includes/functions/data-presets.php:311 msgid "Türkiye" msgstr "" #: includes/functions/data-presets.php:312 msgid "Turkmenistan" msgstr "" #: includes/functions/data-presets.php:313 msgid "Turks and Caicos Islands" msgstr "" #: includes/functions/data-presets.php:314 msgid "Tuvalu" msgstr "" #: includes/functions/data-presets.php:315 msgid "Uganda" msgstr "" #: includes/functions/data-presets.php:316 msgid "Ukraine" msgstr "" #: includes/functions/data-presets.php:317 msgid "United Arab Emirates" msgstr "" #: includes/functions/data-presets.php:318 msgid "United Kingdom of Great Britain and Northern Ireland" msgstr "" #: includes/functions/data-presets.php:319 msgid "United States of America" msgstr "" #: includes/functions/data-presets.php:320 msgid "United States Minor Outlying Islands" msgstr "" #: includes/functions/data-presets.php:321 msgid "Uruguay" msgstr "" #: includes/functions/data-presets.php:322 msgid "Uzbekistan" msgstr "" #: includes/functions/data-presets.php:323 msgid "Vanuatu" msgstr "" #: includes/functions/data-presets.php:324 msgid "Vatican City State" msgstr "" #: includes/functions/data-presets.php:325 msgid "Venezuela (Bolivarian Republic of)" msgstr "" #: includes/functions/data-presets.php:326 msgid "Vietnam" msgstr "" #: includes/functions/data-presets.php:327 msgid "Virgin Islands (British)" msgstr "" #: includes/functions/data-presets.php:328 msgid "Virgin Islands (U.S.)" msgstr "" #: includes/functions/data-presets.php:329 msgid "Wallis and Futuna" msgstr "" #: includes/functions/data-presets.php:330 msgid "Western Sahara" msgstr "" #: includes/functions/data-presets.php:331 msgid "Yemen" msgstr "" #: includes/functions/data-presets.php:332 msgid "Zambia" msgstr "" #: includes/functions/data-presets.php:333 msgid "Zimbabwe" msgstr "" #: includes/functions/data-presets.php:349 msgid "January" msgstr "" #: includes/functions/data-presets.php:350 msgid "February" msgstr "" #: includes/functions/data-presets.php:351 msgid "March" msgstr "" #: includes/functions/data-presets.php:352 msgid "April" msgstr "" #: includes/functions/data-presets.php:353 msgid "May" msgstr "" #: includes/functions/data-presets.php:354 msgid "June" msgstr "" #: includes/functions/data-presets.php:355 msgid "July" msgstr "" #: includes/functions/data-presets.php:356 msgid "August" msgstr "" #: includes/functions/data-presets.php:357 msgid "September" msgstr "" #: includes/functions/data-presets.php:358 msgid "October" msgstr "" #: includes/functions/data-presets.php:359 msgid "November" msgstr "" #: includes/functions/data-presets.php:360 msgid "December" msgstr "" #: includes/functions/data-presets.php:376 msgid "Sunday" msgstr "" #: includes/functions/data-presets.php:377 msgid "Monday" msgstr "" #: includes/functions/data-presets.php:378 msgid "Tuesday" msgstr "" #: includes/functions/data-presets.php:379 msgid "Wednesday" msgstr "" #: includes/functions/data-presets.php:380 msgid "Thursday" msgstr "" #: includes/functions/data-presets.php:381 msgid "Friday" msgstr "" #: includes/functions/data-presets.php:382 msgid "Saturday" msgstr "" #. translators: %1$s - formatted date, %2$s - formatted time. #. translators: %1$s - date, %2$s - time when item was created, e.g. "Oct 22, 2022 at 11:11 am". #. translators: %1$s - date, %2$s - time when item was created, e.g. "Oct 22 at 11:11am". #: includes/functions/date-time.php:35 #: src/Admin/Payments/Views/Single.php:992 #: src/Admin/Revisions.php:317 #: templates/admin/payments/single/log.php:34 msgid "%1$s at %2$s" msgstr "" #: includes/functions/education.php:36 msgid "Install & Activate" msgstr "" #: includes/functions/education.php:43 msgid "Plugin installation is disabled for this site." msgstr "" #. translators: %d - post ID. #: includes/functions/form-fields.php:341 msgid "#%d (no title)" msgstr "" #. translators: %d - taxonomy term ID. #: includes/functions/form-fields.php:358 msgid "#%d (no name)" msgstr "" #: includes/functions/form-fields.php:430 msgid "Standard Fields" msgstr "" #: includes/functions/form-fields.php:434 msgid "Fancy Fields" msgstr "" #: includes/functions/form-fields.php:438 msgid "Payment Fields" msgstr "" #: includes/functions/payments.php:19 msgid "U.S. Dollar" msgstr "" #: includes/functions/payments.php:27 msgid "Pound Sterling" msgstr "" #: includes/functions/payments.php:35 msgid "Euro" msgstr "" #: includes/functions/payments.php:43 msgid "Australian Dollar" msgstr "" #: includes/functions/payments.php:51 msgid "Brazilian Real" msgstr "" #: includes/functions/payments.php:59 msgid "Bulgarian Lev" msgstr "" #: includes/functions/payments.php:67 msgid "Canadian Dollar" msgstr "" #: includes/functions/payments.php:75 msgid "Costa Rican Colón" msgstr "" #: includes/functions/payments.php:83 msgid "Central African CFA Franc" msgstr "" #: includes/functions/payments.php:91 msgid "Czech Koruna" msgstr "" #: includes/functions/payments.php:99 msgid "Danish Krone" msgstr "" #: includes/functions/payments.php:107 msgid "Hong Kong Dollar" msgstr "" #: includes/functions/payments.php:115 msgid "Hungarian Forint" msgstr "" #: includes/functions/payments.php:123 msgid "Indian Rupee" msgstr "" #: includes/functions/payments.php:131 msgid "Israeli New Sheqel" msgstr "" #: includes/functions/payments.php:139 msgid "Japanese Yen" msgstr "" #: includes/functions/payments.php:147 msgid "Malaysian Ringgit" msgstr "" #: includes/functions/payments.php:155 msgid "Mexican Peso" msgstr "" #: includes/functions/payments.php:163 msgid "Norwegian Krone" msgstr "" #: includes/functions/payments.php:171 msgid "New Zealand Dollar" msgstr "" #: includes/functions/payments.php:179 msgid "Philippine Peso" msgstr "" #: includes/functions/payments.php:187 msgid "Polish Zloty" msgstr "" #: includes/functions/payments.php:195 msgid "Romanian Leu" msgstr "" #: includes/functions/payments.php:203 msgid "Russian Ruble" msgstr "" #: includes/functions/payments.php:211 msgid "Saudi Arabian Riyal" msgstr "" #: includes/functions/payments.php:219 msgid "Singapore Dollar" msgstr "" #: includes/functions/payments.php:227 msgid "Serbian Dinar" msgstr "" #: includes/functions/payments.php:235 msgid "South African Rand" msgstr "" #: includes/functions/payments.php:243 msgid "South Korean Won" msgstr "" #: includes/functions/payments.php:251 msgid "Sri Lankan Rupee" msgstr "" #: includes/functions/payments.php:259 msgid "Swedish Krona" msgstr "" #: includes/functions/payments.php:267 msgid "Swiss Franc" msgstr "" #: includes/functions/payments.php:275 msgid "Taiwan New Dollar" msgstr "" #: includes/functions/payments.php:283 msgid "Thai Baht" msgstr "" #: includes/functions/payments.php:291 msgid "Turkish Lira" msgstr "" #: includes/functions/payments.php:299 msgid "United Arab Emirates Dirham" msgstr "" #. translators: %1$s - payment amount; %2$d - payment quantity. #: includes/functions/payments.php:771 msgid "%1$s × %2$d" msgstr "" #: includes/functions/utilities.php:336 #: templates/admin/payments/reset-filter-notice.php:57 msgid "and" msgstr "" #: includes/integrations.php:27 msgid "Select a form to display" msgstr "" #: includes/integrations.php:35 msgid "No forms found" msgstr "" #: includes/integrations.php:45 msgid "Add your form" msgstr "" #: includes/integrations.php:49 #: src/Admin/Payments/Views/Overview/Table.php:105 #: src/Forms/Preview.php:185 #: src/Forms/Preview.php:391 #: src/Integrations/Divi/WPFormsSelector.php:65 #: src/Integrations/Elementor/Widget.php:127 #: src/Integrations/Elementor/Widget.php:155 #: src/Integrations/Gutenberg/FormSelector.php:610 #: templates/emails/summary-body-plain.php:52 #: templates/emails/summary-body.php:158 msgid "Form" msgstr "" #: includes/integrations.php:53 msgid "Select a form to add it to your post or page." msgstr "" #: includes/integrations.php:58 msgid "Display Form Name" msgstr "" #: includes/integrations.php:61 #: includes/integrations.php:76 #: src/Integrations/Gutenberg/FormSelector.php:655 msgid "No" msgstr "" #: includes/integrations.php:62 #: includes/integrations.php:77 #: src/Integrations/Gutenberg/FormSelector.php:654 msgid "Yes" msgstr "" #: includes/integrations.php:65 msgid "Would you like to display the forms name?" msgstr "" #: includes/integrations.php:73 msgid "Display Form Description" msgstr "" #: includes/integrations.php:80 msgid "Would you like to display the form description?" msgstr "" #: includes/providers/class-base.php:92 msgid "Connection" msgstr "" #: includes/providers/class-base.php:163 #: includes/providers/class-base.php:1189 #: includes/providers/class-base.php:1237 msgid "You do not have permission" msgstr "" #. translators: %s - Name field label. #: includes/providers/class-base.php:485 msgid "%s (Full)" msgstr "" #. translators: %s - Name field label. #: includes/providers/class-base.php:500 msgid "%s (First)" msgstr "" #. translators: %s - Name field label. #: includes/providers/class-base.php:516 msgid "%s (Middle)" msgstr "" #. translators: %s - Name field label. #: includes/providers/class-base.php:532 msgid "%s (Last)" msgstr "" #: includes/providers/class-base.php:738 msgid "Select Account" msgstr "" #: includes/providers/class-base.php:750 #: includes/providers/class-base.php:1370 #: includes/providers/class-constant-contact.php:504 #: src/Providers/Provider/Settings/FormBuilder.php:512 #: src/Providers/Provider/Settings/PageIntegrations.php:208 msgid "Add New Account" msgstr "" #: includes/providers/class-base.php:783 msgid "Select List" msgstr "" #: includes/providers/class-base.php:829 msgid "Select Groups" msgstr "" #: includes/providers/class-base.php:831 msgid "We also noticed that you have some segments in your list. You can select specific list segments below if needed. This is optional." msgstr "" #: includes/providers/class-base.php:891 #: includes/providers/class-base.php:896 msgid "List Fields" msgstr "" #: includes/providers/class-base.php:896 msgid "Available Form Fields" msgstr "" #: includes/providers/class-base.php:969 #: src/Providers/Provider/Settings/FormBuilder.php:109 msgid "Marketing provider connection" msgstr "" #. translators: %s - provider type. #: includes/providers/class-base.php:1114 msgid "Add New %s" msgstr "" #: includes/providers/class-base.php:1197 #: includes/providers/class-base.php:1248 msgid "Missing data" msgstr "" #: includes/providers/class-base.php:1213 msgid "Connection missing" msgstr "" #: includes/providers/class-base.php:1260 msgid "Could not connect to the provider." msgstr "" #. translators: %1$s - Connection date. #: includes/providers/class-base.php:1272 #: includes/providers/class-base.php:1355 #: src/Providers/Provider/Settings/PageIntegrations.php:176 msgid "Connected on: %1$s" msgstr "" #: includes/providers/class-base.php:1277 #: includes/providers/class-base.php:1360 #: src/Providers/Provider/Settings/PageIntegrations.php:181 msgid "Disconnect" msgstr "" #. translators: %s - provider name. #: includes/providers/class-base.php:1303 #: src/Providers/Provider/Settings/PageIntegrations.php:244 msgid "Connect to %s" msgstr "" #: includes/providers/class-base.php:1321 #: src/Providers/Provider/Settings/PageIntegrations.php:66 msgid "Show Accounts" msgstr "" #. translators: %s - provider name. #: includes/providers/class-base.php:1330 #: lite/templates/education/admin/settings/integrations-item.php:36 #: src/Providers/Provider/Settings/PageIntegrations.php:75 msgid "Integrate %s with WPForms" msgstr "" #: includes/providers/class-base.php:1337 #: src/Providers/Provider/Settings/PageIntegrations.php:82 msgid "Connected" msgstr "" #: includes/providers/class-base.php:1377 #: src/Providers/Provider/Settings/PageIntegrations.php:215 msgid "Please fill out all of the fields below to add your new provider account." msgstr "" #: includes/providers/class-constant-contact.php:507 msgid "Please fill out all of the fields below to register your new Constant Contact account." msgstr "" #: includes/providers/class-constant-contact.php:510 #: includes/providers/class-constant-contact.php:649 msgid "Click here for documentation on connecting WPForms with Constant Contact." msgstr "" #: includes/providers/class-constant-contact.php:515 #: includes/providers/class-constant-contact.php:654 msgid "Because Constant Contact requires external authentication, you will need to register WPForms with Constant Contact before you can proceed." msgstr "" #: includes/providers/class-constant-contact.php:521 #: includes/providers/class-constant-contact.php:660 msgid "Click here to register with Constant Contact" msgstr "" #: includes/providers/class-constant-contact.php:530 #: includes/providers/class-constant-contact.php:669 msgid "Authorization Code" msgstr "" #: includes/providers/class-constant-contact.php:536 #: includes/providers/class-constant-contact.php:675 msgid "Account Nickname" msgstr "" #: includes/providers/class-constant-contact.php:542 msgid "Connect" msgstr "" #: includes/providers/class-constant-contact.php:584 #: includes/providers/class-constant-contact.php:735 msgid "Try Constant Contact for Free" msgstr "" #: includes/providers/class-constant-contact.php:592 msgid "Learn more about the power of email marketing." msgstr "" #: includes/providers/class-constant-contact.php:623 msgid "The \"Authorization Code\" is required." msgstr "" #: includes/providers/class-constant-contact.php:631 msgid "The \"Account Nickname\" is required." msgstr "" #: includes/providers/class-constant-contact.php:726 msgid "Get the most out of the WPForms plugin — use it with an active Constant Contact account." msgstr "" #: includes/providers/class-constant-contact.php:738 msgid "Connect your existing account" msgstr "" #. translators: %s - WPForms Constant Contact internal URL. #: includes/providers/class-constant-contact.php:743 msgid "Learn More about the power of email marketing" msgstr "" #: includes/templates/class-blank.php:26 msgid "The blank form allows you to create any type of form using our drag & drop builder." msgstr "" #: includes/templates/class-simple-contact-form.php:21 msgid "Simple Contact Form" msgstr "" #: includes/templates/class-simple-contact-form.php:28 msgid "Collect the names, emails, and messages from site visitors that need to talk to you." msgstr "" #: includes/templates/class-simple-contact-form.php:50 #: src/Emails/Preview.php:411 msgid "Comment or Message" msgstr "" #: lite/templates/admin/addons.php:25 msgid "Search Addons" msgstr "" #: lite/templates/admin/addons.php:34 msgid "Unknown Addon" msgstr "" #. translators: %s - addon title. #: lite/templates/admin/addons.php:49 msgid "%s logo" msgstr "" #: lite/templates/admin/addons.php:71 #: src/Integrations/Gutenberg/FormSelector.php:620 msgid "Learn more" msgstr "" #: lite/templates/admin/addons.php:96 msgid "Sorry, we didn't find any addons that match your criteria." msgstr "" #: lite/templates/admin/entries/overview/modal.php:17 msgid "Form entries are not stored in WPForms Lite." msgstr "" #: lite/templates/admin/entries/overview/modal.php:22 msgid "View and Manage Your Form Entries inside WordPress" msgstr "" #: lite/templates/admin/entries/overview/modal.php:25 msgid "Once you upgrade to WPForms Pro, all future form entries will be stored in your WordPress database and displayed on this Entries screen." msgstr "" #: lite/templates/admin/entries/overview/modal.php:29 msgid "View Entries in Dashboard" msgstr "" #: lite/templates/admin/entries/overview/modal.php:30 msgid "Export Entries in a CSV File" msgstr "" #: lite/templates/admin/entries/overview/modal.php:31 msgid "Add Notes / Comments" msgstr "" #: lite/templates/admin/entries/overview/modal.php:32 msgid "Save Favorite Entries" msgstr "" #: lite/templates/admin/entries/overview/modal.php:35 msgid "Mark Read / Unread" msgstr "" #: lite/templates/admin/entries/overview/modal.php:36 msgid "Print Entries" msgstr "" #: lite/templates/admin/entries/overview/modal.php:37 msgid "Resend Notifications" msgstr "" #: lite/templates/admin/entries/overview/modal.php:38 msgid "See Geolocation Data" msgstr "" #. translators: %d - backed up entries count. #: lite/templates/admin/entries/overview/modal.php:50 msgid "%d entry has been backed up" msgid_plural "%d entries have been backed up" msgstr[0] "" msgstr[1] "" #. translators: %s - time when Lite Connect was enabled. #: lite/templates/admin/entries/overview/modal.php:64 msgid "since you enabled Lite Connect on %s" msgstr "" #: lite/templates/admin/entries/overview/modal.php:71 msgid "Upgrade to WPForms Pro & Restore Form Entries" msgstr "" #: lite/templates/admin/entries/overview/modal.php:77 msgid "Upgrade to WPForms Pro Now" msgstr "" #: lite/templates/admin/entries/overview/modal.php:84 msgid "Explore Entries & Learn More" msgstr "" #: lite/templates/admin/entries/single/entry.php:25 msgid "Back to All Entries" msgstr "" #: lite/templates/builder/context-menu.php:36 msgid "Duplicate Template" msgstr "" #: lite/templates/builder/context-menu.php:51 msgid "Duplicate Form" msgstr "" #: lite/templates/builder/context-menu.php:64 msgid "Save as Template" msgstr "" #: lite/templates/builder/context-menu.php:83 #: src/Admin/AdminBarMenu.php:359 #: src/Admin/Builder/Shortcuts.php:57 #: src/Forms/Preview.php:238 #: src/Integrations/Gutenberg/FormSelector.php:565 msgid "View Entries" msgstr "" #: lite/templates/builder/context-menu.php:98 #: src/Admin/AdminBarMenu.php:360 #: src/Forms/Preview.php:257 msgid "View Payments" msgstr "" #: lite/templates/builder/context-menu.php:112 #: src/Admin/Builder/Shortcuts.php:75 msgid "Keyboard Shortcuts" msgstr "" #: lite/templates/builder/context-menu.php:126 msgid "What's New" msgstr "" #: lite/templates/education/admin/did-you-know.php:42 #: lite/templates/education/admin/did-you-know.php:56 #: lite/templates/education/admin/notice-bar.php:35 #: lite/templates/education/builder/did-you-know.php:31 #: lite/templates/education/builder/lite-connect/top-bar.php:26 #: lite/wpforms-lite.php:149 #: src/Integrations/Stripe/Admin/Notices.php:173 msgid "Dismiss this message." msgstr "" #: lite/templates/education/admin/lite-connect/challenge-popup-footer.php:19 msgid "One More Thing" msgstr "" #: lite/templates/education/admin/lite-connect/challenge-popup-footer.php:23 msgid "WPForms now offers offsite backups for your form entries. If you decide to upgrade to WPForms Pro, you can restore entries collected while you used WPForms Lite." msgstr "" #: lite/templates/education/admin/lite-connect/challenge-popup-footer.php:31 #: lite/templates/education/builder/lite-connect/top-bar.php:23 msgid "Form Entry Backups Are Enabled" msgstr "" #: lite/templates/education/admin/lite-connect/dashboard-widget-before.php:26 msgid "Restore Entries" msgstr "" #. translators: %s - WPForms.com Upgrade page URL. #: lite/templates/education/admin/notice-bar.php:21 msgid "You're using WPForms Lite. To unlock more features consider upgrading to Pro for 50%% off." msgstr "" #: lite/templates/education/builder/did-you-know.php:21 #: src/Lite/Admin/Education/Admin/DidYouKnow.php:128 #: src/Lite/Admin/Education/Admin/DidYouKnow.php:134 msgid "Did You Know?" msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:16 msgid "Enable AI Features in WPForms" msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:18 msgid "Before you can proceed, we need your permission to record what you input in order to generate content with AI. You’ll also get..." msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:22 #: lite/templates/education/lite-connect-modal.php:44 msgid "WPForms AI." msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:24 #: lite/templates/education/lite-connect-modal.php:46 msgid "WPForms AI" msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:26 #: lite/templates/education/lite-connect-modal.php:48 msgid "Build your forms even faster with state-of-the-art generative AI built right into the form builder." msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:31 #: lite/templates/education/lite-connect-modal.php:24 msgid "Backup and Restore." msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:33 msgid "Form Entry Backup & Restore" msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:35 #: lite/templates/education/lite-connect-modal.php:28 msgid "When you upgrade to WPForms Pro, we'll automatically restore all of the entries that you collected in WPForms Lite." msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:40 msgid "Security & Protection." msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:42 #: lite/templates/education/lite-connect-modal.php:35 msgid "Security & Protection" msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:44 #: lite/templates/education/lite-connect-modal.php:37 msgid "Entries are stored securely and privately until you're ready to upgrade. Our team cannot view your forms or entries." msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:49 #: lite/templates/education/lite-connect-modal.php:55 msgid "WPForms Newsletter." msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:51 #: lite/templates/education/lite-connect-modal.php:57 msgid "WPForms Newsletter" msgstr "" #: lite/templates/education/builder/lite-connect/ai-modal.php:53 #: lite/templates/education/lite-connect-modal.php:59 msgid "Ready to grow your website? Get the latest pro tips and updates from the WPForms team." msgstr "" #. translators: %s - WPForms Terms of Service link. #: lite/templates/education/builder/lite-connect/ai-modal.php:62 #: lite/templates/education/lite-connect-modal.php:69 msgid "By enabling Lite Connect you agree to our Terms of Service and to share your information with WPForms." msgstr "" #: lite/templates/education/builder/lite-connect/top-bar.php:25 msgid "Easily restore your entries when you upgrade to WPForms Pro." msgstr "" #: lite/templates/education/builder/providers-item.php:34 #: src/Admin/Education/Helpers.php:99 #: templates/builder/payment/sidebar.php:28 msgid "Recommended" msgstr "" #: lite/templates/education/lite-connect-modal.php:18 msgid "Form Entry Backups" msgstr "" #: lite/templates/education/lite-connect-modal.php:20 msgid "If your email notifications aren't delivered, you’ll lose form entries. Turn on free backups now and restore your entries when you upgrade to Pro." msgstr "" #: lite/templates/education/lite-connect-modal.php:26 msgid "Backup & Restore" msgstr "" #: lite/templates/education/lite-connect-modal.php:33 msgid "Security and Protection." msgstr "" #: lite/wpforms-lite.php:140 msgid "Multiple notifications" msgstr "" #: lite/wpforms-lite.php:141 msgid "Add New Notification" msgstr "" #. translators: %s - link to the WPForms.com doc article. #: lite/wpforms-lite.php:153 msgid "Notifications are emails sent when a form is submitted. By default, these emails include entry details. For setup and customization options, including a video overview, please see our tutorial." msgstr "" #. translators: 1$s, %2$s - links to the WPForms.com doc articles. #: lite/wpforms-lite.php:168 msgid "After saving these settings, be sure to test a form submission. This lets you see how emails will look, and to ensure that they are delivered successfully." msgstr "" #: lite/wpforms-lite.php:190 msgid "Enable Notifications" msgstr "" #: lite/wpforms-lite.php:208 msgid "Send To Email Address" msgstr "" #: lite/wpforms-lite.php:211 msgid "Enter the email address to receive form entry notifications. For multiple notifications, separate email addresses with a comma." msgstr "" #: lite/wpforms-lite.php:227 msgid "CC" msgstr "" #: lite/wpforms-lite.php:243 msgid "Email Subject Line" msgstr "" #: lite/wpforms-lite.php:261 msgid "From Name" msgstr "" #: lite/wpforms-lite.php:293 msgid "From Email" msgstr "" #: lite/wpforms-lite.php:325 msgid "Reply-To" msgstr "" #. translators: %s - . #: lite/wpforms-lite.php:329 msgid "Enter the email address or email address with recipient's name in \"First Last %s\" format." msgstr "" #: lite/wpforms-lite.php:348 msgid "Email Message" msgstr "" #. translators: %s - {all_fields} Smart Tag. #: lite/wpforms-lite.php:361 msgid "To display all form fields, use the %s Smart Tag." msgstr "" #: lite/wpforms-lite.php:485 msgid "Multiple confirmations" msgstr "" #: lite/wpforms-lite.php:486 msgid "Add New Confirmation" msgstr "" #: lite/wpforms-lite.php:515 msgid "Confirmation Type" msgstr "" #: lite/wpforms-lite.php:519 #: src/Logger/ListTable.php:291 #: src/Logger/ListTable.php:476 msgid "Message" msgstr "" #: lite/wpforms-lite.php:520 msgid "Show Page" msgstr "" #: lite/wpforms-lite.php:521 msgid "Go to URL (Redirect)" msgstr "" #: lite/wpforms-lite.php:534 msgid "Confirmation Message" msgstr "" #: lite/wpforms-lite.php:555 msgid "Automatically scroll to the confirmation message" msgstr "" #: lite/wpforms-lite.php:568 msgid "Confirmation Page" msgstr "" #: lite/wpforms-lite.php:586 msgid "Confirmation Redirect URL" msgstr "" #. translators: %s - WPForms.com docs page URL. #: lite/wpforms-lite.php:641 msgid "You've just turned off notification emails for this form. Since entries are not stored in WPForms Lite, notification emails are recommended for collecting entry details. For setup steps, please see our notification tutorial." msgstr "" #: lite/wpforms-lite.php:677 #: templates/admin/notifications.php:27 msgid "Dismiss this message" msgstr "" #: lite/wpforms-lite.php:679 msgid "Thanks for being a loyal WPForms Lite user. Upgrade to WPForms Pro to unlock all the awesome features and experience why WPForms is consistently rated the best WordPress form builder." msgstr "" #. translators: %s - star icons. #: lite/wpforms-lite.php:684 msgid "We know that you will truly love WPForms. It has over 13,000+ five star ratings (%s) and is active on over 6 million websites." msgstr "" #: lite/wpforms-lite.php:696 msgid "Pro Features:" msgstr "" #: lite/wpforms-lite.php:725 msgid "Get WPForms Pro Today and Unlock all the Powerful Features »" msgstr "" #: lite/wpforms-lite.php:731 msgid "Bonus: WPForms Lite users get 50% off regular price, automatically applied at checkout." msgstr "" #: pro/includes/fields/class-hidden.php:66 msgid "Enter text for the form field label. Never displayed on the front-end." msgstr "" #. translators: %s - addon name. #: src/Admin/Addons/Addons.php:464 #: src/Admin/Education/Builder/Calculations.php:183 #: src/Admin/Education/Builder/Geolocation.php:113 msgid "%s addon" msgstr "" #: src/Admin/AdminBarMenu.php:334 msgid "Help Docs" msgstr "" #: src/Admin/AdminBarMenu.php:358 #: src/Forms/Preview.php:222 #: src/Integrations/Gutenberg/FormSelector.php:564 msgid "Edit Form" msgstr "" #: src/Admin/AdminBarMenu.php:361 msgid "Survey Results" msgstr "" #. translators: %d - form ID. #: src/Admin/AdminBarMenu.php:375 msgid "Form ID: %d" msgstr "" #: src/Admin/Builder/Ajax/PanelLoader.php:79 msgid "Invalid panel." msgstr "" #: src/Admin/Builder/Ajax/PanelLoader.php:103 #: src/Admin/Forms/Ajax/Columns.php:90 #: src/Admin/Forms/Ajax/Tags.php:200 msgid "Most likely, your session expired. Please reload the page." msgstr "" #: src/Admin/Builder/AntiSpam.php:65 msgid "Enable modern anti-spam protection" msgstr "" #: src/Admin/Builder/AntiSpam.php:68 msgid "Turn on invisible modern spam protection." msgstr "" #: src/Admin/Builder/AntiSpam.php:76 msgid "Behind-the-scenes spam filtering that's invisible to your visitors." msgstr "" #: src/Admin/Builder/AntiSpam.php:77 msgid "Protection" msgstr "" #: src/Admin/Builder/AntiSpam.php:87 msgid "Enable anti-spam protection" msgstr "" #: src/Admin/Builder/AntiSpam.php:89 msgid "Turn on invisible spam protection." msgstr "" #: src/Admin/Builder/AntiSpam.php:100 msgid "Enable anti-spam honeypot" msgstr "" #: src/Admin/Builder/AntiSpam.php:124 msgid "Also Available" msgstr "" #: src/Admin/Builder/AntiSpam.php:158 msgid "Enable hCaptcha" msgstr "" #: src/Admin/Builder/AntiSpam.php:159 msgid "Enable Cloudflare Turnstile" msgstr "" #: src/Admin/Builder/AntiSpam.php:161 msgid "Enable Google Checkbox v2 reCAPTCHA" msgstr "" #: src/Admin/Builder/AntiSpam.php:162 msgid "Enable Google Invisible v2 reCAPTCHA" msgstr "" #: src/Admin/Builder/AntiSpam.php:163 msgid "Enable Google v3 reCAPTCHA" msgstr "" #: src/Admin/Builder/AntiSpam.php:182 msgid "Enable third-party CAPTCHAs to prevent form submissions from bots." msgstr "" #: src/Admin/Builder/AntiSpam.php:190 msgid "Automated tests that help to prevent bots from submitting your forms." msgstr "" #: src/Admin/Builder/AntiSpam.php:191 #: src/Admin/Education/Builder/Captcha.php:120 #: src/Admin/Settings/Captcha/Page.php:122 #: src/Admin/Settings/Captcha/Page.php:145 msgid "CAPTCHA" msgstr "" #: src/Admin/Builder/AntiSpam.php:215 msgid "Store spam entries in the database" msgstr "" #: src/Admin/Builder/AntiSpam.php:235 msgid "Enable minimum time to submit" msgstr "" #: src/Admin/Builder/AntiSpam.php:239 msgid "Set a minimum amount of time a user must spend on a form before submitting." msgstr "" #: src/Admin/Builder/AntiSpam.php:249 msgid "Minimum time to submit" msgstr "" #: src/Admin/Builder/AntiSpam.php:256 msgid "seconds" msgstr "" #: src/Admin/Builder/AntiSpam.php:293 msgid "Enable Akismet anti-spam protection" msgstr "" #: src/Admin/Builder/AntiSpam.php:307 msgid "Get Started →" msgstr "" #: src/Admin/Builder/AntiSpam.php:316 msgid "Country Filter" msgstr "" #: src/Admin/Builder/AntiSpam.php:317 msgid "Stop spam at its source. Allow or deny entries from specific countries." msgstr "" #: src/Admin/Builder/AntiSpam.php:325 msgid "Keyword Filter" msgstr "" #: src/Admin/Builder/AntiSpam.php:326 msgid "Block form entries that contain specific words or phrases that you define." msgstr "" #: src/Admin/Builder/AntiSpam.php:334 #: src/Admin/Education/Fields.php:165 msgid "Custom Captcha" msgstr "" #: src/Admin/Builder/AntiSpam.php:335 msgid "Ask custom questions or require your visitor to answer a random math puzzle." msgstr "" #: src/Admin/Builder/AntiSpam.php:337 msgid "Add to Form" msgstr "" #: src/Admin/Builder/AntiSpam.php:344 msgid "Add Google's free anti-spam service and choose between visible or invisible CAPTCHAs." msgstr "" #: src/Admin/Builder/AntiSpam.php:352 msgid "Turn on free, privacy-oriented spam prevention that displays a visual CAPTCHA." msgstr "" #: src/Admin/Builder/AntiSpam.php:360 msgid "Enable free, CAPTCHA-like spam protection that protects data privacy." msgstr "" #: src/Admin/Builder/AntiSpam.php:368 msgid "Integrate the powerful spam-fighting service trusted by millions of sites." msgstr "" #: src/Admin/Builder/Help.php:149 msgid "Form Creation" msgstr "" #: src/Admin/Builder/Help.php:151 msgid "Form Management" msgstr "" #: src/Admin/Builder/Help.php:154 msgid "Payment Processing" msgstr "" #: src/Admin/Builder/Help.php:155 msgid "Spam Prevention and Security" msgstr "" #: src/Admin/Builder/Help.php:156 msgid "Extending Functionality" msgstr "" #: src/Admin/Builder/Help.php:157 msgid "Troubleshooting and Support" msgstr "" #: src/Admin/Builder/Notifications/Advanced/EmailTemplate.php:109 msgid "Email Template" msgstr "" #: src/Admin/Builder/Notifications/Advanced/EmailTemplate.php:119 msgid "Override the default email template for this specific notification." msgstr "" #: src/Admin/Builder/Notifications/Advanced/EmailTemplate.php:172 msgid "Default Template" msgstr "" #: src/Admin/Builder/Settings/Themes.php:43 #: src/Admin/Builder/Settings/Themes.php:159 msgid "Form Themes" msgstr "" #: src/Admin/Builder/Settings/Themes.php:75 msgid "Before You Can Use Form Themes" msgstr "" #: src/Admin/Builder/Settings/Themes.php:78 msgid "Upgrade your forms to use our modern markup and unlock form themes and style controls." msgstr "" #: src/Admin/Builder/Settings/Themes.php:84 msgid "Enable Modern Markup" msgstr "" #: src/Admin/Builder/Settings/Themes.php:107 msgid "Not Using the Block Editor? Let us know!" msgstr "" #: src/Admin/Builder/Settings/Themes.php:110 msgid "If we get enough requests for themes in the form builder we may add them." msgstr "" #: src/Admin/Builder/Settings/Themes.php:118 msgid "Request Feature" msgstr "" #. translators: %s - URL to the documentation. #: src/Admin/Builder/Settings/Themes.php:142 msgid "Customize the look and feel of your form with premade themes or simple style settings that allow you to use your own colors to match your brand. Themes and style settings are in the Block Editor, where you can see a realtime preview.
Learn more about styling your forms" msgstr "" #: src/Admin/Builder/Shortcuts.php:49 msgid "Save Form" msgstr "" #: src/Admin/Builder/Shortcuts.php:50 msgid "Preview Form" msgstr "" #: src/Admin/Builder/Shortcuts.php:51 msgid "Embed Form" msgstr "" #: src/Admin/Builder/Shortcuts.php:52 msgid "Search Fields" msgstr "" #: src/Admin/Builder/Shortcuts.php:55 msgid "Open Help" msgstr "" #: src/Admin/Builder/Shortcuts.php:56 msgid "Toggle Sidebar" msgstr "" #: src/Admin/Builder/Shortcuts.php:58 msgid "Close Builder" msgstr "" #: src/Admin/Builder/Shortcuts.php:76 msgid "Handy shortcuts for common actions in the builder." msgstr "" #: src/Admin/Builder/Templates.php:181 #: src/Admin/Education/StringsTrait.php:38 msgid "Activating" msgstr "" #: src/Admin/Builder/Templates.php:183 #: src/Integrations/Gutenberg/FormSelector.php:668 msgid "Heads Up!" msgstr "" #: src/Admin/Builder/Templates.php:184 msgid "Install and activate" msgstr "" #: src/Admin/Builder/Templates.php:186 #: src/Admin/Education/StringsTrait.php:24 msgid "Ok" msgstr "" #: src/Admin/Builder/Templates.php:187 msgid "Could not install OR activate all the required addons. Please download from wpforms.com and install them manually. Would you like to use the template anyway?" msgstr "" #: src/Admin/Builder/Templates.php:188 msgid "Yes, use template" msgstr "" #: src/Admin/Builder/Templates.php:189 #: src/Integrations/Gutenberg/FormSelector.php:573 msgid "Yes, Delete" msgstr "" #: src/Admin/Builder/Templates.php:190 msgid "Delete Form Template" msgstr "" #: src/Admin/Builder/Templates.php:191 msgid "Are you sure you want to delete this form template? This cannot be undone." msgstr "" #. translators: %1$s - template name, %2$s - addon name(s). #: src/Admin/Builder/Templates.php:196 msgid "The %1$s template requires the %2$s. Would you like to install and activate it?" msgstr "" #. translators: %1$s - template name, %2$s - addon name(s). #: src/Admin/Builder/Templates.php:198 msgid "The %1$s template requires the %2$s. Would you like to install and activate all the required addons?" msgstr "" #. translators: %1$s - template name, %2$s - addon name(s). #: src/Admin/Builder/Templates.php:200 msgid "The %1$s template requires the %2$s addon. Would you like to activate it?" msgstr "" #. translators: %s - addon name(s). #: src/Admin/Builder/Templates.php:203 msgid "To use all of the features in this template, you'll need the %s. Contact your site administrator to install it, then try opening this template again." msgstr "" #. translators: %s - addon name(s). #: src/Admin/Builder/Templates.php:205 msgid "To use all of the features in this template, you'll need the %s. Contact your site administrator to install them, then try opening this template again." msgstr "" #: src/Admin/Builder/Templates.php:818 #: src/Integrations/Elementor/Widget.php:213 msgid "New form" msgstr "" #. translators: %d - templates count. #: src/Admin/Builder/Templates.php:991 msgid "Get Access to Our Library of %d Pre-Made Form Templates" msgstr "" #: src/Admin/Builder/Templates.php:996 msgid "Never start from scratch again! While WPForms Lite allows you to create any type of form, you can save even more time with WPForms Pro. Upgrade to access hundreds more form templates and advanced form fields." msgstr "" #: src/Admin/Builder/Templates.php:1049 msgid "User Registration Form" msgstr "" #: src/Admin/Builder/Templates.php:1055 msgid "Create customized WordPress user registration forms and add them anywhere on your website." msgstr "" #: src/Admin/Builder/Templates.php:1058 msgid "User Login Form" msgstr "" #: src/Admin/Builder/Templates.php:1064 msgid "Allow your users to easily log in to your site with their username and password." msgstr "" #: src/Admin/Builder/Templates.php:1067 msgid "User Password Reset Form" msgstr "" #: src/Admin/Builder/Templates.php:1073 msgid "Allow your users to easily reset their password." msgstr "" #: src/Admin/Builder/Templates.php:1093 msgid "Blog Post Submission Form" msgstr "" #: src/Admin/Builder/Templates.php:1099 msgid "User-submitted content made easy. Allow your users to submit guest blog posts in WordPress. You can add and remove fields as needed." msgstr "" #: src/Admin/Builder/Templates.php:1119 msgid "Survey Form" msgstr "" #: src/Admin/Builder/Templates.php:1125 msgid "Collect customer feedback, then generate survey reports to determine satisfaction and spot trends." msgstr "" #: src/Admin/Builder/Templates.php:1128 msgid "Poll Form" msgstr "" #: src/Admin/Builder/Templates.php:1134 msgid "Ask visitors a question and display the results after they provide an answer." msgstr "" #: src/Admin/Builder/Templates.php:1137 msgid "NPS Survey Simple Form" msgstr "" #: src/Admin/Builder/Templates.php:1143 msgid "Find out if your clients or customers would recommend you to someone else with this basic Net Promoter Score survey template." msgstr "" #: src/Admin/Builder/Templates.php:1146 msgid "NPS Survey Enhanced Form" msgstr "" #: src/Admin/Builder/Templates.php:1152 msgid "Measure customer loyalty and find out exactly what they are thinking with this enhanced Net Promoter Score survey template." msgstr "" #: src/Admin/Dashboard/Widget.php:247 msgid "Select timespan" msgstr "" #. translators: %d - number of days. #: src/Admin/Dashboard/Widget.php:271 msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "" msgstr[1] "" #: src/Admin/Education/Admin/EditPost.php:173 #: src/Admin/Splash/SplashTrait.php:104 #: src/Integrations/Divi/Divi.php:233 #: templates/admin/empty-states/payments/get-started.php:34 #: templates/integrations/elementor/no-forms.php:26 #: assets/js/integrations/gutenberg/formselector-legacy.es5.js:264 #: assets/js/integrations/gutenberg/formselector-legacy.es5.js:307 #: assets/js/integrations/gutenberg/formselector-legacy.js:241 #: assets/js/integrations/gutenberg/formselector-legacy.js:278 #: assets/js/integrations/gutenberg/modules/common.js:750 #: assets/js/integrations/gutenberg/modules/common.js:979 #: assets/lite/js/integrations/gutenberg/formselector.es5.js:3114 #: assets/lite/js/integrations/gutenberg/formselector.es5.js:3313 #: assets/pro/js/integrations/gutenberg/formselector.es5.js:3125 #: assets/pro/js/integrations/gutenberg/formselector.es5.js:3324 msgid "Get Started" msgstr "" #: src/Admin/Education/Admin/EditPost.php:186 msgid "Easily add your contact form" msgstr "" #: src/Admin/Education/Admin/EditPost.php:187 msgid "Oh hey, it looks like you're working on a contact page. Don't forget to embed your contact form. Click the plus icon above and search for WPForms." msgstr "" #: src/Admin/Education/Admin/EditPost.php:191 msgid "Embed your form" msgstr "" #: src/Admin/Education/Admin/EditPost.php:192 msgid "Then click on the WPForms block to embed your desired contact form." msgstr "" #: src/Admin/Education/Admin/EditPost.php:209 msgid "Don't forget to embed your contact form. Simply click the Add Form button below." msgstr "" #. translators: %1$s - link to create a new form. #: src/Admin/Education/Admin/EditPost.php:211 #: src/Admin/Education/Admin/EditPost.php:237 msgid "Did you know that with WPForms, you can create an easy-to-use contact form in a matter of minutes?" msgstr "" #: src/Admin/Education/Admin/EditPost.php:235 msgid "You've already created a form, now add it to the page so your customers can get in touch." msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:113 msgid "City" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:114 msgid "Latitude/Longitude" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:115 msgid "Google Places API" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:116 #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:225 msgid "Country" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:117 #: src/Admin/Education/Builder/Geolocation.php:129 msgid "Address Autocomplete" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:118 msgid "Mapbox API" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:119 msgid "Postal/Zip Code" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:120 msgid "Embedded Map in Forms" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:126 msgid "Location Info in Entries" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:131 msgid "Address Autocomplete Field" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:136 msgid "Smart Address Field" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:144 msgid "Do you want to learn more about visitors who fill out your online forms? Our geolocation addon allows you to collect and store your website visitors geolocation data along with their form submission. This insight can help you to be better informed and turn more leads into customers. Furthermore, add a smart address field that autocompletes using the Google Places API." msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:146 #: src/Lite/Admin/Settings/Access.php:167 msgid "Pro" msgstr "" #: src/Admin/Education/Admin/Settings/Geolocation.php:147 msgid "Powerful location-based insights and features…" msgstr "" #. translators: %1$s - link to the WPForms.com doc article. #: src/Admin/Education/Builder/Calculations.php:92 msgid "Easily perform calculations based on user input. Head over to the Advanced Tab to get started or read our documentation to learn more." msgstr "" #: src/Admin/Education/Builder/Calculations.php:109 #: templates/education/admin/edit-post/classic-notice.php:27 msgid "Dismiss this notice." msgstr "" #: src/Admin/Education/Builder/Calculations.php:199 msgid "Calculations" msgstr "" #: src/Admin/Education/Builder/Calculations.php:225 #: src/Admin/Education/Builder/Calculations.php:236 msgid "Enable Calculation" msgstr "" #: src/Admin/Education/Builder/Captcha.php:61 msgid "No form ID found." msgstr "" #: src/Admin/Education/Builder/Captcha.php:68 #: src/Admin/Pages/Analytics.php:530 #: src/Admin/Pages/SMTP.php:466 #: src/Lite/Admin/Education/LiteConnect.php:410 #: src/Logger/Log.php:200 #: src/Providers/Provider/Settings/PageIntegrations.php:273 msgid "You do not have permission." msgstr "" #: src/Admin/Education/Builder/Captcha.php:79 #: src/Admin/Forms/Tags.php:260 msgid "Something wrong. Please try again later." msgstr "" #: src/Admin/Education/Builder/Captcha.php:124 #: src/Frontend/Amp.php:360 msgid "hCaptcha" msgstr "" #: src/Admin/Education/Builder/Captcha.php:128 msgid "Cloudflare Turnstile" msgstr "" #: src/Admin/Education/Builder/Captcha.php:132 msgid "Google Checkbox v2 reCAPTCHA" msgstr "" #: src/Admin/Education/Builder/Captcha.php:133 msgid "Google Invisible v2 reCAPTCHA" msgstr "" #: src/Admin/Education/Builder/Captcha.php:134 msgid "Google v3 reCAPTCHA" msgstr "" #: src/Admin/Education/Builder/Captcha.php:154 msgid "Something wrong. Please, try again later." msgstr "" #. translators: %1$s - CAPTCHA settings page URL, %2$s - WPForms.com doc URL. #: src/Admin/Education/Builder/Captcha.php:164 msgid "Please complete the setup in your WPForms Settings, and check out our guide to learn about available CAPTCHA solutions." msgstr "" #. translators: %s - CAPTCHA name. #: src/Admin/Education/Builder/Captcha.php:180 msgid "%s has been enabled for this form. Don't forget to save your form!" msgstr "" #. translators: %s - CAPTCHA name. #: src/Admin/Education/Builder/Captcha.php:185 msgid "Are you sure you want to disable %s for this form?" msgstr "" #: src/Admin/Education/Builder/Geolocation.php:132 msgid "We're sorry, Address Autocomplete is part of the Geolocation Addon and not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features." msgstr "" #: src/Admin/Education/Builder/Geolocation.php:155 #: src/Admin/Education/Builder/Geolocation.php:166 msgid "Enable Address Autocomplete" msgstr "" #: src/Admin/Education/Core.php:98 msgid "Please specify a section." msgstr "" #: src/Admin/Education/Core.php:105 #: src/Providers/Provider/Settings/FormBuilder.php:301 msgid "You do not have permission to perform this action." msgstr "" #: src/Admin/Education/Fields.php:37 msgid "Phone" msgstr "" #: src/Admin/Education/Fields.php:45 msgid "Address" msgstr "" #: src/Admin/Education/Fields.php:53 msgid "Date / Time" msgstr "" #: src/Admin/Education/Fields.php:61 msgid "Website / URL" msgstr "" #: src/Admin/Education/Fields.php:69 msgid "File Upload" msgstr "" #: src/Admin/Education/Fields.php:77 msgid "Password" msgstr "" #: src/Admin/Education/Fields.php:85 msgid "Layout" msgstr "" #: src/Admin/Education/Fields.php:93 msgid "Repeater" msgstr "" #: src/Admin/Education/Fields.php:109 msgid "Section Divider" msgstr "" #: src/Admin/Education/Fields.php:117 msgid "Rich Text" msgstr "" #: src/Admin/Education/Fields.php:133 msgid "HTML" msgstr "" #: src/Admin/Education/Fields.php:141 msgid "Entry Preview" msgstr "" #: src/Admin/Education/Fields.php:149 #: src/Integrations/Gutenberg/FormSelector.php:667 msgid "Rating" msgstr "" #: src/Admin/Education/Fields.php:157 msgid "Hidden Field" msgstr "" #: src/Admin/Education/Fields.php:166 msgid "spam, math, maths, question" msgstr "" #: src/Admin/Education/Fields.php:175 msgid "Signature" msgstr "" #: src/Admin/Education/Fields.php:176 msgid "user, e-signature" msgstr "" #: src/Admin/Education/Fields.php:185 msgid "Likert Scale" msgstr "" #: src/Admin/Education/Fields.php:186 msgid "survey, rating scale" msgstr "" #: src/Admin/Education/Fields.php:195 msgid "Net Promoter Score" msgstr "" #: src/Admin/Education/Fields.php:196 msgid "survey, nps" msgstr "" #: src/Admin/Education/Fields.php:205 #: src/Db/Payments/ValueValidator.php:70 #: src/Forms/Fields/Helpers/RequirementsAlerts.php:175 msgid "PayPal Commerce" msgstr "" #: src/Admin/Education/Fields.php:206 #: src/Admin/Education/Fields.php:216 #: src/Admin/Education/Fields.php:226 #: src/Integrations/Stripe/Fields/Traits/CreditCard.php:23 msgid "store, ecommerce, credit card, pay, payment, debit card" msgstr "" #: src/Admin/Education/Fields.php:215 #: src/Db/Payments/ValueValidator.php:72 #: src/Forms/Fields/Helpers/RequirementsAlerts.php:183 msgid "Square" msgstr "" #: src/Admin/Education/Fields.php:225 msgid "Authorize.Net" msgstr "" #: src/Admin/Education/Fields.php:235 #: src/Admin/Payments/Views/Overview/Table.php:96 #: src/Admin/Payments/Views/Single.php:373 #: src/Admin/Payments/Views/Single.php:764 msgid "Coupon" msgstr "" #: src/Admin/Education/Fields.php:236 msgid "discount, sale" msgstr "" #: src/Admin/Education/Fields.php:296 msgid "captcha, spam, antispam" msgstr "" #: src/Admin/Education/Helpers.php:104 msgid "New" msgstr "" #: src/Admin/Education/Helpers.php:108 msgid "Featured" msgstr "" #: src/Admin/Education/Pointers/Payment.php:125 msgid "Payment and Donation Forms are here!" msgstr "" #. translators: %1$s - Payments page URL. #: src/Admin/Education/Pointers/Payment.php:127 msgid "Now available for you: create forms that accept credit cards, Apple Pay, and Google Pay payments. Visit our new Payments area to get started." msgstr "" #. translators: %s - addon name. #: src/Admin/Education/StringsTrait.php:31 msgid "The %s is installed but not activated. Would you like to activate it?" msgstr "" #: src/Admin/Education/StringsTrait.php:35 msgid "Yes, activate" msgstr "" #: src/Admin/Education/StringsTrait.php:36 msgid "Addon activated" msgstr "" #: src/Admin/Education/StringsTrait.php:37 msgid "Plugin activated" msgstr "" #. translators: %s - addon name. #: src/Admin/Education/StringsTrait.php:41 msgid "The %s is not installed. Would you like to install and activate it?" msgstr "" #: src/Admin/Education/StringsTrait.php:45 msgid "Yes, install and activate" msgstr "" #: src/Admin/Education/StringsTrait.php:46 #: src/Integrations/WPCode/WPCode.php:242 msgid "Installing" msgstr "" #: src/Admin/Education/StringsTrait.php:47 msgid "Almost done! Would you like to save and refresh the form builder?" msgstr "" #: src/Admin/Education/StringsTrait.php:48 msgid "Yes, save and refresh" msgstr "" #: src/Admin/Education/StringsTrait.php:49 msgid "Saving ..." msgstr "" #. translators: %s - addon name. #: src/Admin/Education/StringsTrait.php:65 msgid "The %s is not installed. Please install and activate it to use this feature." msgstr "" #. translators: %s - addon name. #: src/Admin/Education/StringsTrait.php:75 msgid "The %s is not installed. Please contact the site administrator." msgstr "" #. translators: %s - addon name. #: src/Admin/Education/StringsTrait.php:87 msgid "The %s is not activated. Please contact the site administrator." msgstr "" #: src/Admin/Education/StringsTrait.php:103 msgid "Bonus: WPForms Lite users get 50% off regular price, automatically applied at checkout." msgstr "" #. translators: %s - level name, either Pro or Elite. #: src/Admin/Education/StringsTrait.php:143 msgid "is a %s Feature" msgstr "" #. translators: %s - level name, either Pro or Elite. #: src/Admin/Education/StringsTrait.php:149 msgid "are a %s Feature" msgstr "" #. translators: %1$s - addon name, %2$s - level name, either Pro or Elite. #: src/Admin/Education/StringsTrait.php:155 msgid "We're sorry, the %1$s is not available on your plan. Please upgrade to the %2$s plan to unlock all these awesome features." msgstr "" #. translators: %1$s - addon name, %2$s - level name, either Pro or Elite. #: src/Admin/Education/StringsTrait.php:162 msgid "We're sorry, %1$s are not available on your plan. Please upgrade to the %2$s plan to unlock all these awesome features." msgstr "" #: src/Admin/Education/StringsTrait.php:170 msgid "Already purchased?" msgstr "" #. translators: %s - level name, either Pro or Elite. #: src/Admin/Education/StringsTrait.php:174 msgid "Upgrade to %s" msgstr "" #: src/Admin/FlyoutMenu.php:63 msgid "See Quick Links" msgstr "" #: src/Admin/FlyoutMenu.php:119 msgid "Support & Docs" msgstr "" #: src/Admin/FlyoutMenu.php:124 msgid "Join Our Community" msgstr "" #: src/Admin/FlyoutMenu.php:129 #: src/Admin/Pages/Community.php:116 #: src/Admin/Pages/Community.php:118 msgid "Suggest a Feature" msgstr "" #: src/Admin/Forms/Ajax/Columns.php:73 msgid "Cannot save columns order." msgstr "" #: src/Admin/Forms/Ajax/Tags.php:231 msgid "No forms selected when trying to add a tag to them." msgstr "" #: src/Admin/Forms/BulkActions.php:291 #: src/Admin/Forms/Views.php:694 #: src/Admin/Payments/Views/Overview/Table.php:497 msgid "Restore" msgstr "" #: src/Admin/Forms/BulkActions.php:292 #: src/Admin/Forms/Views.php:715 #: src/Admin/Payments/Views/Overview/Table.php:498 msgid "Delete Permanently" msgstr "" #: src/Admin/Forms/BulkActions.php:296 #: src/Admin/Payments/Views/Overview/Table.php:503 msgid "Move to Trash" msgstr "" #: src/Admin/Forms/BulkActions.php:345 msgid "Security check failed. Please try again." msgstr "" #. translators: %1$d - trashed forms count, %2$s - post type (form or template). #: src/Admin/Forms/BulkActions.php:366 msgid "%1$d %2$s was successfully moved to Trash." msgid_plural "%1$d %2$ss were successfully moved to Trash." msgstr[0] "" msgstr[1] "" #. translators: %1$d - trashed forms count, %2$s - post type (form or template). #: src/Admin/Forms/BulkActions.php:374 msgid "%1$d %2$s was successfully restored." msgid_plural "%1$d %2$ss were successfully restored." msgstr[0] "" msgstr[1] "" #. translators: %1$d - trashed forms count, %2$s - post type (form or template). #: src/Admin/Forms/BulkActions.php:382 msgid "%1$d %2$s was successfully permanently deleted." msgid_plural "%1$d %2$ss were successfully permanently deleted." msgstr[0] "" msgstr[1] "" #. translators: %1$d - trashed forms count, %2$s - post type (form or template). #: src/Admin/Forms/BulkActions.php:390 msgid "%1$d %2$s was successfully duplicated." msgid_plural "%1$d %2$ss were successfully duplicated." msgstr[0] "" msgstr[1] "" #: src/Admin/Forms/ListTable.php:156 #: src/Admin/Payments/Views/Overview/Helpers.php:50 #: src/Providers/Provider/Settings/PageIntegrations.php:156 #: templates/admin/payments/single/payment-details.php:48 msgid "N/A" msgstr "" #. translators: %1$s - Post created date. #: src/Admin/Forms/ListTable.php:165 msgid "Created
%1$s" msgstr "" #. translators: %1$s - Post modified date. #: src/Admin/Forms/ListTable.php:173 msgid "Last Modified
%1$s" msgstr "" #: src/Admin/Forms/ListTable.php:185 msgid "Entries are securely backed up in the cloud. Upgrade to restore." msgstr "" #: src/Admin/Forms/ListTable.php:318 #: src/Admin/Forms/Views.php:601 msgid "View preview" msgstr "" #: src/Admin/Forms/ListTable.php:335 #: src/Admin/Forms/Views.php:570 msgid "View entries" msgstr "" #: src/Admin/Forms/ListTable.php:352 msgid "Edit This Form" msgstr "" #: src/Admin/Forms/ListTable.php:451 msgid "No form templates found." msgstr "" #: src/Admin/Forms/ListTable.php:452 #: src/Admin/Tools/Views/Importer.php:162 msgid "No forms found." msgstr "" #: src/Admin/Forms/ListTable.php:594 msgid "0 items" msgstr "" #: src/Admin/Forms/Page.php:37 msgid "Pagination" msgstr "" #: src/Admin/Forms/Page.php:40 msgid "Number of forms per page:" msgstr "" #: src/Admin/Forms/Page.php:54 msgid "View" msgstr "" #: src/Admin/Forms/Page.php:57 msgid "Show form templates" msgstr "" #: src/Admin/Forms/Page.php:255 msgid "Forms Overview" msgstr "" #: src/Admin/Forms/Page.php:291 msgid "Search Forms" msgstr "" #: src/Admin/Forms/Page.php:380 msgid "Columns" msgstr "" #. translators: %1$d - number of forms found, %2$s - search term. #: src/Admin/Forms/Search.php:250 msgid "Found %1$d form containing \"%2$s\"" msgid_plural "Found %1$d forms containing \"%2$s\"" msgstr[0] "" msgstr[1] "" #: src/Admin/Forms/Table/Facades/Columns.php:63 msgid "ID" msgstr "" #: src/Admin/Forms/Table/Facades/Columns.php:73 msgid "Author" msgstr "" #: src/Admin/Forms/Table/Facades/Columns.php:76 msgid "Shortcode" msgstr "" #: src/Admin/Forms/Table/Facades/Columns.php:79 #: src/Admin/Payments/Views/Overview/Table.php:84 #: src/Logger/ListTable.php:294 #: src/Logger/ListTable.php:481 #: src/SmartTags/SmartTags.php:116 #: templates/admin/payments/single/payment-history.php:30 #: templates/admin/payments/single/payment-history.php:47 msgid "Date" msgstr "" #: src/Admin/Forms/Tags.php:181 msgid "No tags to choose from" msgstr "" #: src/Admin/Forms/Tags.php:261 #: src/Admin/Forms/Tags.php:505 msgid "All Tags" msgstr "" #: src/Admin/Forms/Tags.php:263 msgid "1 form selected for Bulk Edit." msgstr "" #. translators: %d - number of forms selected for Bulk Edit. #: src/Admin/Forms/Tags.php:267 msgid "%d forms selected for Bulk Edit." msgstr "" #: src/Admin/Forms/Tags.php:270 #: src/Admin/Forms/Tags.php:516 msgid "Manage Tags" msgstr "" #: src/Admin/Forms/Tags.php:271 msgid "Delete tags that you're no longer using. Deleting a tag will remove it from a form, but will not delete the form itself." msgstr "" #: src/Admin/Forms/Tags.php:272 msgid "Delete Tags" msgstr "" #: src/Admin/Forms/Tags.php:274 msgid "You have 1 tag selected for deletion." msgstr "" #. translators: %d - number of forms selected for Bulk Edit. #: src/Admin/Forms/Tags.php:278 msgid "You have %d tags selected for deletion." msgstr "" #: src/Admin/Forms/Tags.php:282 msgid "There are no tags to delete.
Please create at least one by adding it to any form." msgstr "" #: src/Admin/Forms/Tags.php:285 msgid "1 tag was successfully deleted." msgstr "" #. translators: %d - number of deleted tags. #: src/Admin/Forms/Tags.php:287 msgid "%d tags were successfully deleted." msgstr "" #: src/Admin/Forms/Tags.php:288 msgid "Almost done!" msgstr "" #: src/Admin/Forms/Tags.php:289 msgid "In order to update the tags in the forms list, please refresh the page." msgstr "" #: src/Admin/Forms/Tags.php:290 msgid "Refresh" msgstr "" #. translators: used between list items, there is a space after the comma. #: src/Admin/Forms/Tags.php:393 msgid ", " msgstr "" #: src/Admin/Forms/Tags.php:417 #: src/Admin/Forms/Views.php:553 #: src/Admin/Tools/Views/Importer.php:330 #: templates/builder/field-context-menu.php:24 msgid "Edit" msgstr "" #: src/Admin/Forms/Tags.php:454 msgid "Save changes" msgstr "" #: src/Admin/Forms/Tags.php:515 #: templates/admin/payments/tablenav-filters.php:35 msgid "Filter" msgstr "" #: src/Admin/Forms/Tags.php:591 msgid "Edit Tags" msgstr "" #. translators: %s - delay in formatted time. #: src/Admin/Forms/UserTemplates.php:188 msgid "Form template entries are for testing purposes and will be automatically deleted after %s." msgstr "" #. translators: %s - delay in formatted time. #: src/Admin/Forms/UserTemplates.php:242 msgid "Form template entries are for testing purposes. This entry will be automatically deleted in %s." msgstr "" #: src/Admin/Forms/UserTemplates.php:333 #: src/Admin/Traits/FormTemplates.php:426 msgid "Create Form" msgstr "" #: src/Admin/Forms/UserTemplates.php:334 msgid "Edit Template" msgstr "" #: src/Admin/Forms/Views.php:73 #: src/Admin/Payments/Views/Overview/Table.php:1099 msgid "All" msgstr "" #: src/Admin/Forms/Views.php:78 #: src/Admin/Forms/Views.php:648 #: src/Admin/Payments/Views/Overview/Table.php:1113 msgid "Trash" msgstr "" #: src/Admin/Forms/Views.php:95 msgid "Forms" msgstr "" #: src/Admin/Forms/Views.php:103 msgid "Templates" msgstr "" #: src/Admin/Forms/Views.php:552 msgid "Edit this template" msgstr "" #: src/Admin/Forms/Views.php:552 msgid "Edit this form" msgstr "" #: src/Admin/Forms/Views.php:591 msgid "View payments" msgstr "" #: src/Admin/Forms/Views.php:622 msgid "Duplicate this template" msgstr "" #: src/Admin/Forms/Views.php:622 msgid "Duplicate this form" msgstr "" #: src/Admin/Forms/Views.php:624 #: templates/builder/field-context-menu.php:34 msgid "Duplicate" msgstr "" #: src/Admin/Forms/Views.php:647 msgid "Move this form template to trash" msgstr "" #: src/Admin/Forms/Views.php:647 msgid "Move this form to trash" msgstr "" #: src/Admin/Forms/Views.php:693 msgid "Restore this template" msgstr "" #: src/Admin/Forms/Views.php:693 msgid "Restore this form" msgstr "" #: src/Admin/Forms/Views.php:713 msgid "Delete this template permanently" msgstr "" #: src/Admin/Forms/Views.php:713 msgid "Delete this form permanently" msgstr "" #. translators: %1$d - number of forms found in the trash, %2$s - search term. #: src/Admin/Forms/Views.php:743 msgid "Found %1$d form in the trash containing \"%2$s\"" msgid_plural "Found %1$d forms in the trash containing \"%2$s\"" msgstr[0] "" msgstr[1] "" #: src/Admin/Forms/Views.php:795 msgid "Empty Trash" msgstr "" #: src/Admin/Helpers/Datepicker.php:415 msgid "Today" msgstr "" #: src/Admin/Helpers/Datepicker.php:416 msgid "Yesterday" msgstr "" #: src/Admin/Helpers/Datepicker.php:417 msgid "Last 7 days" msgstr "" #: src/Admin/Helpers/Datepicker.php:418 msgid "Last 30 days" msgstr "" #: src/Admin/Helpers/Datepicker.php:419 msgid "Last 90 days" msgstr "" #: src/Admin/Helpers/Datepicker.php:420 msgid "Last 1 year" msgstr "" #: src/Admin/Helpers/Datepicker.php:421 #: src/Admin/Traits/FormTemplates.php:353 msgid "Custom" msgstr "" #: src/Admin/Notifications/EventDriven.php:522 msgid "Welcome to WPForms!" msgstr "" #. translators: %s - number of templates. #: src/Admin/Notifications/EventDriven.php:524 msgid "We’re grateful that you chose WPForms for your website! Now that you’ve installed the plugin, you’re less than 5 minutes away from publishing your first form. To make it easy, we’ve got %s form templates to get you started!" msgstr "" #: src/Admin/Notifications/EventDriven.php:530 msgid "Start Building" msgstr "" #: src/Admin/Notifications/EventDriven.php:537 msgid "Read the Guide" msgstr "" #: src/Admin/Notifications/EventDriven.php:554 msgid "Don’t Miss Your Form Notification Emails!" msgstr "" #: src/Admin/Notifications/EventDriven.php:555 msgid "Did you know that many WordPress sites are not properly configured to send emails? With the free WP Mail SMTP plugin, you can easily optimize your site to send emails, avoid the spam folder, and make sure your emails land in the recipient’s inbox every time." msgstr "" #: src/Admin/Notifications/EventDriven.php:559 #: src/Admin/Notifications/EventDriven.php:619 #: src/Admin/Notifications/EventDriven.php:623 #: src/Admin/Notifications/EventDriven.php:672 #: src/Admin/Notifications/EventDriven.php:676 #: src/Admin/Notifications/EventDriven.php:739 #: src/Admin/Notifications/EventDriven.php:743 #: src/Admin/Pages/Analytics.php:169 #: src/Admin/Pages/Analytics.php:504 #: src/Admin/Pages/SMTP.php:186 #: src/Integrations/UncannyAutomator/UncannyAutomator.php:116 msgid "Install Now" msgstr "" #: src/Admin/Notifications/EventDriven.php:575 msgid "Want to Be a VIP? Join Now!" msgstr "" #: src/Admin/Notifications/EventDriven.php:576 msgid "Running a WordPress site can be challenging. But help is just around the corner! Our Facebook group contains tons of tips and help to get your business growing! When you join our VIP Circle, you’ll get instant access to tips, tricks, and answers from a community of loyal WPForms users. Best of all, membership is 100% free!" msgstr "" #: src/Admin/Notifications/EventDriven.php:580 msgid "Join Now" msgstr "" #: src/Admin/Notifications/EventDriven.php:588 msgid "Want to Know What Your Customers Really Think?" msgstr "" #: src/Admin/Notifications/EventDriven.php:589 msgid "Nothing beats real feedback from your customers and visitors. That’s why many small businesses love our awesome Surveys and Polls addon. Instantly unlock full survey reporting right in your WordPress dashboard. And don’t forget: building a survey is easy with our pre-made templates, so you could get started within a few minutes!" msgstr "" #: src/Admin/Notifications/EventDriven.php:641 msgid "Get More Leads From Your Forms!" msgstr "" #: src/Admin/Notifications/EventDriven.php:642 msgid "Are your forms converting fewer visitors than you hoped? Often, visitors quit forms partway through. That can prevent you from getting all the leads you deserve to capture. With our Form Abandonment addon, you can capture partial entries even if your visitor didn’t hit Submit! From there, it’s easy to follow up with leads and turn them into loyal customers." msgstr "" #: src/Admin/Notifications/EventDriven.php:694 msgid "What’s Your Dream WPForms Feature?" msgstr "" #: src/Admin/Notifications/EventDriven.php:695 msgid "If you could add just one feature to WPForms, what would it be? We want to know! Our team is busy surveying valued customers like you as we plan the year ahead. We’d love to know which features would take your business to the next level! Do you have a second to share your idea with us?" msgstr "" #: src/Admin/Notifications/EventDriven.php:699 msgid "Share Your Idea" msgstr "" #: src/Admin/Notifications/EventDriven.php:708 msgid "Congratulations! You Just Got Your 100th Form Entry!" msgstr "" #: src/Admin/Notifications/EventDriven.php:709 msgid "You just hit 100 entries… and this is just the beginning! Now it’s time to dig into the data and figure out what makes your visitors tick. The User Journey addon shows you what your visitors looked at before submitting your form. Now you can easily find which areas of your site are triggering form conversions." msgstr "" #: src/Admin/Notifications/Notifications.php:790 msgid "Watch Video" msgstr "" #. translators: %s - Lite plugin download URL. #: src/Admin/Pages/Analytics.php:143 #: src/Admin/Pages/SMTP.php:160 msgid "Could not install the plugin automatically. Please download it and install it manually." msgstr "" #. translators: %s - Lite plugin download URL. #: src/Admin/Pages/Analytics.php:155 #: src/Admin/Pages/SMTP.php:172 msgid "Could not activate the plugin. Please activate it on the Plugins page." msgstr "" #: src/Admin/Pages/Analytics.php:166 #: src/Admin/Pages/SMTP.php:183 msgid "Installing..." msgstr "" #: src/Admin/Pages/Analytics.php:167 #: src/Admin/Pages/SMTP.php:184 msgid "Activating..." msgstr "" #: src/Admin/Pages/Analytics.php:168 #: src/Admin/Pages/Analytics.php:422 msgid "MonsterInsights Installed & Activated" msgstr "" #: src/Admin/Pages/Analytics.php:170 #: src/Admin/Pages/Analytics.php:504 #: src/Admin/Pages/SMTP.php:187 #: src/Integrations/UncannyAutomator/UncannyAutomator.php:116 msgid "Activate Now" msgstr "" #: src/Admin/Pages/Analytics.php:171 #: src/Admin/Pages/SMTP.php:188 msgid "Download Now" msgstr "" #: src/Admin/Pages/Analytics.php:172 #: src/Admin/Pages/SMTP.php:189 msgid "Go to Plugins page" msgstr "" #: src/Admin/Pages/Analytics.php:214 msgid "WPForms ♥ MonsterInsights" msgstr "" #: src/Admin/Pages/Analytics.php:215 msgid "The Best Google Analytics Plugin for WordPress" msgstr "" #: src/Admin/Pages/Analytics.php:216 msgid "MonsterInsights connects WPForms to Google Analytics, providing a powerful integration with their Forms addon. MonsterInsights is a sister company of WPForms." msgstr "" #: src/Admin/Pages/Analytics.php:242 msgid "Analytics screenshot" msgstr "" #: src/Admin/Pages/Analytics.php:244 #: src/Admin/Pages/Analytics.php:398 msgid "Track form impressions and conversions." msgstr "" #: src/Admin/Pages/Analytics.php:245 msgid "View form conversion rates from WordPress." msgstr "" #: src/Admin/Pages/Analytics.php:246 msgid "Complete UTM tracking with form entries." msgstr "" #: src/Admin/Pages/Analytics.php:247 msgid "Automatic integration with WPForms." msgstr "" #: src/Admin/Pages/Analytics.php:308 #: src/Admin/Pages/SMTP.php:331 msgid "Step 1" msgstr "" #: src/Admin/Pages/Analytics.php:342 #: src/Admin/Pages/SMTP.php:365 msgid "Step 2" msgstr "" #: src/Admin/Pages/Analytics.php:343 msgid "Setup MonsterInsights" msgstr "" #: src/Admin/Pages/Analytics.php:344 msgid "MonsterInsights has an intuitive setup wizard to guide you through the setup process." msgstr "" #: src/Admin/Pages/Analytics.php:378 msgid "Step 3" msgstr "" #: src/Admin/Pages/Analytics.php:379 msgid "Get Form Conversion Tracking" msgstr "" #: src/Admin/Pages/Analytics.php:380 msgid "With the MonsterInsights Form addon you can easily track your form views, entries, conversion rates, and more." msgstr "" #: src/Admin/Pages/Analytics.php:397 msgid "Install & Activate MonsterInsights" msgstr "" #: src/Admin/Pages/Analytics.php:408 msgid "Install MonsterInsights" msgstr "" #: src/Admin/Pages/Analytics.php:416 msgid "MonsterInsights on WordPress.org" msgstr "" #: src/Admin/Pages/Analytics.php:422 msgid "Activate MonsterInsights" msgstr "" #: src/Admin/Pages/Analytics.php:451 msgid "Run Setup Wizard" msgstr "" #: src/Admin/Pages/Analytics.php:457 msgid "Setup Complete" msgstr "" #: src/Admin/Pages/Analytics.php:540 #: src/Admin/Pages/SMTP.php:476 msgid "Plugin unavailable." msgstr "" #: src/Admin/Pages/Community.php:66 msgid "WPForms VIP Circle Facebook Group" msgstr "" #: src/Admin/Pages/Community.php:67 msgid "Powered by the community, for the community. Anything and everything WPForms: Discussions. Questions. Tutorials. Insights and sneak peaks. Also, exclusive giveaways!" msgstr "" #: src/Admin/Pages/Community.php:68 msgid "Join WPForms VIP Circle" msgstr "" #: src/Admin/Pages/Community.php:76 msgid "WPForms Announcements" msgstr "" #: src/Admin/Pages/Community.php:77 msgid "Check out the latest releases from WPForms. Our team is always innovating to bring you powerful features and functionality that are simple to use. Every release is designed with you in mind!" msgstr "" #: src/Admin/Pages/Community.php:78 msgid "View WPForms Announcements" msgstr "" #: src/Admin/Pages/Community.php:86 msgid "WPForms YouTube Channel" msgstr "" #: src/Admin/Pages/Community.php:87 msgid "Take a visual dive into everything WPForms has to offer. From simple contact forms to advanced payment forms and email marketing integrations, our extensive video collection covers it all." msgstr "" #: src/Admin/Pages/Community.php:88 msgid "Visit WPForms YouTube Channel" msgstr "" #: src/Admin/Pages/Community.php:96 msgid "WPForms Developer Documentation" msgstr "" #: src/Admin/Pages/Community.php:97 msgid "Customize and extend WPForms with code. Our comprehensive developer resources include tutorials, snippets, and documentation on core actions, filters, functions, and more." msgstr "" #: src/Admin/Pages/Community.php:98 msgid "View WPForms Dev Docs" msgstr "" #: src/Admin/Pages/Community.php:106 msgid "WPBeginner Engage Facebook Group" msgstr "" #: src/Admin/Pages/Community.php:107 msgid "Hang out with other WordPress experts and like minded website owners such as yourself! Hosted by WPBeginner, the largest free WordPress site for beginners." msgstr "" #: src/Admin/Pages/Community.php:108 msgid "Join WPBeginner Engage" msgstr "" #: src/Admin/Pages/Community.php:117 msgid "Do you have an idea or suggestion for WPForms? If you have thoughts on features, integrations, addons, or improvements - we want to hear it! We appreciate all feedback and insight from our users." msgstr "" #: src/Admin/Pages/SMTP.php:185 #: src/Admin/Pages/SMTP.php:411 msgid "WP Mail SMTP Installed & Activated" msgstr "" #: src/Admin/Pages/SMTP.php:194 #: src/Admin/Pages/SMTP.php:445 msgid "Go to SMTP settings" msgstr "" #: src/Admin/Pages/SMTP.php:195 #: src/Admin/Pages/SMTP.php:436 msgid "Open Setup Wizard" msgstr "" #: src/Admin/Pages/SMTP.php:234 msgid "WPForms ♥ WP Mail SMTP" msgstr "" #: src/Admin/Pages/SMTP.php:235 msgid "Making Email Deliverability Easy for WordPress" msgstr "" #: src/Admin/Pages/SMTP.php:236 msgid "WP Mail SMTP fixes deliverability problems with your WordPress emails and form notifications. It's built by the same folks behind WPForms." msgstr "" #: src/Admin/Pages/SMTP.php:262 msgid "WP Mail SMTP screenshot" msgstr "" #: src/Admin/Pages/SMTP.php:264 msgid "Improves email deliverability in WordPress." msgstr "" #: src/Admin/Pages/SMTP.php:265 msgid "Used by 2+ million websites." msgstr "" #: src/Admin/Pages/SMTP.php:266 msgid "Free mailers: SendLayer, SMTP.com, Brevo, Google Workspace / Gmail, Mailgun, Postmark, SendGrid." msgstr "" #: src/Admin/Pages/SMTP.php:267 msgid "Pro mailers: Amazon SES, Microsoft 365 / Outlook.com, Zoho Mail." msgstr "" #: src/Admin/Pages/SMTP.php:366 msgid "Set Up WP Mail SMTP" msgstr "" #: src/Admin/Pages/SMTP.php:367 msgid "Select and configure your mailer." msgstr "" #: src/Admin/Pages/SMTP.php:385 msgid "Install and Activate WP Mail SMTP" msgstr "" #: src/Admin/Pages/SMTP.php:386 msgid "Install WP Mail SMTP from the WordPress.org plugin repository." msgstr "" #: src/Admin/Pages/SMTP.php:396 msgid "Install WP Mail SMTP" msgstr "" #: src/Admin/Pages/SMTP.php:404 msgid "WP Mail SMTP on WordPress.org" msgstr "" #: src/Admin/Pages/SMTP.php:411 msgid "Activate WP Mail SMTP" msgstr "" #: src/Admin/Pages/SMTP.php:440 msgid "Start Setup" msgstr "" #: src/Admin/Pages/Templates.php:102 msgid "Get a Head Start With Our Pre-Made Form Templates" msgstr "" #. translators: %1$s - create template doc link; %2$s - Contact us page link. #: src/Admin/Pages/Templates.php:109 msgid "Choose a template to speed up the process of creating your form. You can also start with a blank form or create your own.
Have a suggestion for a new template? We’d love to hear it!" msgstr "" #: src/Admin/Payments/ScreenOptions.php:93 msgid "Number of payments per page:" msgstr "" #: src/Admin/Payments/ScreenOptions.php:119 msgid "Advanced details" msgstr "" #: src/Admin/Payments/ScreenOptions.php:120 #: src/Logger/ListTable.php:45 #: src/Logger/Log.php:105 #: templates/admin/payments/single/log.php:19 msgid "Log" msgstr "" #: src/Admin/Payments/ScreenOptions.php:124 msgid "Additional information" msgstr "" #: src/Admin/Payments/ScreenOptions.php:140 #: src/Logger/ListTable.php:457 #: templates/admin/components/datepicker.php:73 msgid "Apply" msgstr "" #: src/Admin/Payments/Views/Coupons/Education.php:53 #: src/Forms/Fields/Helpers/RequirementsAlerts.php:171 msgid "Coupons" msgstr "" #: src/Admin/Payments/Views/Coupons/Education.php:148 msgid "Custom Coupon Codes" msgstr "" #: src/Admin/Payments/Views/Coupons/Education.php:149 msgid "Percentage or Fixed Discounts" msgstr "" #: src/Admin/Payments/Views/Coupons/Education.php:150 msgid "Start and End Dates" msgstr "" #: src/Admin/Payments/Views/Coupons/Education.php:151 msgid "Maximum Usage Limit" msgstr "" #: src/Admin/Payments/Views/Coupons/Education.php:152 msgid "Once Per Email Address Limit" msgstr "" #: src/Admin/Payments/Views/Coupons/Education.php:153 msgid "Usage Statistics" msgstr "" #: src/Admin/Payments/Views/Coupons/Education.php:159 msgid "Coupons Overview" msgstr "" #: src/Admin/Payments/Views/Coupons/Education.php:164 msgid "Coupon Settings" msgstr "" #. translators: %1$s - WPForms.com Upgrade page URL. #: src/Admin/Payments/Views/Coupons/Education.php:171 msgid "With the Coupons addon, you can offer customers discounts using custom coupon codes. Create your own percentage or fixed rate discount, then add the Coupon field to any payment form. When a customer enters your unique code, they’ll receive the specified discount. You can also add limits to restrict when coupons are available and how often they can be used. The Coupons addon requires a license level of Pro or higher.%s" msgstr "" #: src/Admin/Payments/Views/Coupons/Education.php:184 msgid "Easy to Use, Yet Powerful" msgstr "" #: src/Admin/Payments/Views/Overview/BulkActions.php:89 #: src/Providers/Provider/Settings/PageIntegrations.php:264 #: src/Providers/Provider/Settings/PageIntegrations.php:314 msgid "Your session expired. Please reload the page." msgstr "" #. translators: %d - number of deleted payments. #: src/Admin/Payments/Views/Overview/BulkActions.php:183 msgid "%d payment was successfully permanently deleted." msgid_plural "%d payments were successfully permanently deleted." msgstr[0] "" msgstr[1] "" #. translators: %d - number of restored payments. #: src/Admin/Payments/Views/Overview/BulkActions.php:188 msgid "%d payment was successfully restored." msgid_plural "%d payments were successfully restored." msgstr[0] "" msgstr[1] "" #. translators: %d - number of trashed payments. #: src/Admin/Payments/Views/Overview/BulkActions.php:193 msgid "%d payment was successfully moved to the Trash." msgid_plural "%d payments were successfully moved to the Trash." msgstr[0] "" msgstr[1] "" #: src/Admin/Payments/Views/Overview/Chart.php:92 msgid "Payments Summary" msgstr "" #: src/Admin/Payments/Views/Overview/Chart.php:147 msgid "Viewing Test Data" msgstr "" #: src/Admin/Payments/Views/Overview/Chart.php:168 #: src/Admin/Payments/Views/Overview/Page.php:146 msgid "No payments for selected period" msgstr "" #: src/Admin/Payments/Views/Overview/Chart.php:169 msgid "Please select a different period or check back later." msgstr "" #: src/Admin/Payments/Views/Overview/Chart.php:216 msgid "Total Payments" msgstr "" #: src/Admin/Payments/Views/Overview/Chart.php:222 msgid "Total Sales" msgstr "" #: src/Admin/Payments/Views/Overview/Chart.php:235 msgid "Total Refunded" msgstr "" #: src/Admin/Payments/Views/Overview/Chart.php:244 msgid "New Subscriptions" msgstr "" #: src/Admin/Payments/Views/Overview/Chart.php:261 msgid "Subscription Renewals" msgstr "" #: src/Admin/Payments/Views/Overview/Chart.php:278 msgid "Coupons Redeemed" msgstr "" #: src/Admin/Payments/Views/Overview/Page.php:74 #: templates/emails/summary-body.php:119 msgid "Overview" msgstr "" #: src/Admin/Payments/Views/Overview/Page.php:143 #: src/Providers/Provider/Settings/FormBuilder.php:232 #: templates/admin/payments/single/details.php:79 #: templates/builder/field-context-menu.php:44 #: templates/builder/templates-item.php:78 msgid "Delete" msgstr "" #: src/Admin/Payments/Views/Overview/Page.php:147 msgid "No sales for selected period" msgstr "" #: src/Admin/Payments/Views/Overview/Page.php:148 msgid "No refunds for selected period" msgstr "" #: src/Admin/Payments/Views/Overview/Page.php:149 msgid "No new subscriptions for selected period" msgstr "" #: src/Admin/Payments/Views/Overview/Page.php:150 msgid "No subscription renewals for the selected period" msgstr "" #: src/Admin/Payments/Views/Overview/Page.php:151 msgid "No coupons applied during the selected period" msgstr "" #: src/Admin/Payments/Views/Overview/Page.php:316 msgid "First you need to set up a payment gateway. We've partnered with Stripe to bring easy payment forms to everyone. " msgstr "" #. translators: %s - WPForms Addons admin page URL. #: src/Admin/Payments/Views/Overview/Page.php:319 msgid "Other payment gateways such as PayPal and Square can be installed from the Addons screen." msgstr "" #. translators: %s - WPForms.com Upgrade page URL. #: src/Admin/Payments/Views/Overview/Page.php:330 msgid "If you'd like to use another payment gateway, please consider upgrading to WPForms Pro." msgstr "" #. translators: WPForms.com docs page URL. #: src/Admin/Payments/Views/Overview/Page.php:447 msgid "Deleting one or more selected payments may prevent processing of future subscription renewals. Payment filtering may also be affected. Learn More" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:83 #: src/Logger/Log.php:106 msgid "Payment" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:88 msgid "Gateway" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:99 #: src/Admin/Payments/Views/Single.php:350 #: src/Forms/Fields/PaymentTotal/Field.php:22 #: src/Forms/Fields/PaymentTotal/Field.php:525 #: src/Forms/Fields/PaymentTotal/Field.php:586 #: src/SmartTags/SmartTag/OrderSummary.php:90 #: templates/admin/payments/single/payment-history.php:32 #: templates/admin/payments/single/payment-history.php:53 #: templates/fields/total/summary-preview.php:78 msgid "Total" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:102 #: src/Db/Payments/ValueValidator.php:156 msgid "Subscription" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:106 #: templates/admin/payments/single/payment-history.php:33 #: templates/admin/payments/single/payment-history.php:56 msgid "Status" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:225 msgid "No payments found in the trash." msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:231 msgid "No payments found, please try a different search." msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:236 msgid "No payments found." msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:328 msgid "Search Payments" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:352 msgid "types" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:356 msgid "gateways" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:360 msgid "subscriptions" msgstr "" #. translators: %s - plural label. #: src/Admin/Payments/Views/Overview/Table.php:433 msgid "Multiple %s selected" msgstr "" #. translators: %s - plural label. #: src/Admin/Payments/Views/Overview/Table.php:437 msgid "All %s" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:464 msgid "Select which field to use when searching for payments" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:473 msgid "Select which comparison method to use when searching for payments" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:642 msgid "Payment Title" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:643 #: src/Admin/Payments/Views/Single.php:741 msgid "Transaction ID" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:644 #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:390 #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:463 msgid "Customer Email" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:645 #: src/Admin/Payments/Views/Single.php:746 msgid "Subscription ID" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:646 msgid "Last 4 digits of credit card" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:647 msgid "Any payment field" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:700 msgid "equals" msgstr "" #. translators: %s - relative time difference, e.g. "5 minutes", "12 days". #: src/Admin/Payments/Views/Overview/Table.php:822 #: src/Admin/Revisions.php:312 msgid "%s ago" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:921 msgid "% Refunded" msgstr "" #: src/Admin/Payments/Views/Overview/Table.php:998 msgid "Filter entries by coupon" msgstr "" #: src/Admin/Payments/Views/Overview/Traits/ResetNotices.php:74 msgid "where" msgstr "" #: src/Admin/Payments/Views/Overview/Traits/ResetNotices.php:110 msgid "with the status" msgstr "" #: src/Admin/Payments/Views/Overview/Traits/ResetNotices.php:146 msgid "with the coupon" msgstr "" #: src/Admin/Payments/Views/Overview/Traits/ResetNotices.php:180 msgid "with the form titled" msgstr "" #: src/Admin/Payments/Views/Overview/Traits/ResetNotices.php:209 msgid "with the type" msgid_plural "with the types" msgstr[0] "" msgstr[1] "" #: src/Admin/Payments/Views/Overview/Traits/ResetNotices.php:238 msgid "with the gateway" msgid_plural "with the gateways" msgstr[0] "" msgstr[1] "" #: src/Admin/Payments/Views/Overview/Traits/ResetNotices.php:267 msgid "with the subscription status" msgid_plural "with the subscription statuses" msgstr[0] "" msgstr[1] "" #: src/Admin/Payments/Views/Single.php:150 msgid "Are you sure you want to delete this payment and all its information (details, notes, etc.)?" msgstr "" #: src/Admin/Payments/Views/Single.php:151 msgid "Are you sure you want to refund this payment?" msgstr "" #: src/Admin/Payments/Views/Single.php:152 msgid "Are you sure you want to cancel this subscription?" msgstr "" #: src/Admin/Payments/Views/Single.php:153 msgid "Payment was successfully refunded!" msgstr "" #: src/Admin/Payments/Views/Single.php:154 msgid "Subscription was successfully canceled!" msgstr "" #: src/Admin/Payments/Views/Single.php:170 msgid "It looks like the provided payment ID is not valid." msgstr "" #: src/Admin/Payments/Views/Single.php:180 msgid "It looks like the payment you are trying to access is no longer available." msgstr "" #: src/Admin/Payments/Views/Single.php:188 msgid "You can't edit this payment because it's in the trash." msgstr "" #: src/Admin/Payments/Views/Single.php:333 msgid "Payment Details" msgstr "" #. translators: %s - payment gateway name. #: src/Admin/Payments/Views/Single.php:337 #: src/Admin/Payments/Views/Single.php:407 msgid "View in %s" msgstr "" #: src/Admin/Payments/Views/Single.php:341 msgid "Refund" msgstr "" #: src/Admin/Payments/Views/Single.php:365 msgid "Method" msgstr "" #: src/Admin/Payments/Views/Single.php:404 msgid "Subscription Details" msgstr "" #: src/Admin/Payments/Views/Single.php:420 msgid "Lifetime Total" msgstr "" #: src/Admin/Payments/Views/Single.php:428 msgid "Billing Cycle" msgstr "" #: src/Admin/Payments/Views/Single.php:435 msgid "Times Billed" msgstr "" #: src/Admin/Payments/Views/Single.php:442 msgid "Renewal Date" msgstr "" #: src/Admin/Payments/Views/Single.php:476 msgid "Payment History" msgstr "" #. translators: %s - credit card expiry date. #: src/Admin/Payments/Views/Single.php:649 msgid "Expires %s" msgstr "" #: src/Admin/Payments/Views/Single.php:751 msgid "Customer ID" msgstr "" #: src/Admin/Payments/Views/Single.php:756 msgid "Customer IP Address" msgstr "" #: src/Admin/Payments/Views/Single.php:760 msgid "Payment Method" msgstr "" #. translators: %d - field ID. #: src/Admin/Payments/Views/Single.php:940 msgid "Field ID #%d" msgstr "" #: src/Admin/Payments/Views/Single.php:948 msgid "Empty" msgstr "" #: src/Admin/Revisions.php:453 msgid "You’re about to save a form revision. Continuing will make this the current version." msgstr "" #: src/Admin/Settings/Captcha.php:155 #: src/Admin/Settings/Captcha/Page.php:274 msgid "A preview of your CAPTCHA is displayed below. Please view to verify the CAPTCHA settings are correct." msgstr "" #: src/Admin/Settings/Captcha/HCaptcha.php:58 #: src/Admin/Settings/Captcha/ReCaptcha.php:70 #: src/Admin/Settings/Captcha/Turnstile.php:78 msgid "Site Key" msgstr "" #: src/Admin/Settings/Captcha/HCaptcha.php:63 #: src/Admin/Settings/Captcha/ReCaptcha.php:75 #: src/Admin/Settings/Captcha/Turnstile.php:83 msgid "Secret Key" msgstr "" #: src/Admin/Settings/Captcha/HCaptcha.php:68 #: src/Admin/Settings/Captcha/ReCaptcha.php:80 #: src/Admin/Settings/Captcha/Turnstile.php:88 msgid "Fail Message" msgstr "" #: src/Admin/Settings/Captcha/HCaptcha.php:69 #: src/Admin/Settings/Captcha/ReCaptcha.php:81 #: src/Admin/Settings/Captcha/Turnstile.php:89 msgid "Displays to users who fail the verification process." msgstr "" #: src/Admin/Settings/Captcha/HCaptcha.php:71 msgid "hCaptcha verification failed, please try again later." msgstr "" #: src/Admin/Settings/Captcha/Page.php:145 msgid "A CAPTCHA is an anti-spam technique which helps to protect your website from spam and abuse while letting real people pass through with ease." msgstr "" #. translators: %s - WPForms.com CAPTCHA comparison page URL. #: src/Admin/Settings/Captcha/Page.php:162 msgid "Not sure which service is right for you? Check out our comparison for more details." msgstr "" #: src/Admin/Settings/Captcha/Page.php:186 msgid "No-Conflict Mode" msgstr "" #: src/Admin/Settings/Captcha/Page.php:187 msgid "Forcefully remove other CAPTCHA occurrences in order to prevent conflicts. Only enable this option if your site is having compatibility issues or instructed by support." msgstr "" #: src/Admin/Settings/Captcha/Page.php:195 msgid "Please save settings to generate a preview of your CAPTCHA here." msgstr "" #: src/Admin/Settings/Captcha/Page.php:228 msgid "This CAPTCHA is generated using your site and secret keys. If an error is displayed, please double-check your keys." msgstr "" #: src/Admin/Settings/Captcha/ReCaptcha.php:62 msgid "Checkbox reCAPTCHA v2" msgstr "" #: src/Admin/Settings/Captcha/ReCaptcha.php:63 msgid "Invisible reCAPTCHA v2" msgstr "" #: src/Admin/Settings/Captcha/ReCaptcha.php:64 msgid "reCAPTCHA v3" msgstr "" #: src/Admin/Settings/Captcha/ReCaptcha.php:83 #: src/Frontend/Frontend.php:1852 msgid "Google reCAPTCHA verification failed, please try again later." msgstr "" #: src/Admin/Settings/Captcha/ReCaptcha.php:87 msgid "Score Threshold" msgstr "" #: src/Admin/Settings/Captcha/ReCaptcha.php:88 msgid "reCAPTCHA v3 returns a score (1.0 is very likely a good interaction, 0.0 is very likely a bot). If the score less than or equal to this threshold, the form submission will be blocked and the message above will be displayed." msgstr "" #: src/Admin/Settings/Captcha/ReCaptcha.php:95 msgid "0.4" msgstr "" #: src/Admin/Settings/Captcha/Turnstile.php:91 #: src/Frontend/Frontend.php:1853 msgid "Cloudflare Turnstile verification failed, please try again later." msgstr "" #: src/Admin/Settings/Captcha/Turnstile.php:99 msgid "Auto" msgstr "" #: src/Admin/Settings/Captcha/Turnstile.php:100 #: src/Admin/Settings/Email.php:231 msgid "Light" msgstr "" #: src/Admin/Settings/Captcha/Turnstile.php:101 #: src/Admin/Settings/Email.php:232 msgid "Dark" msgstr "" #: src/Admin/Settings/Email.php:122 msgid "This color combination may be hard to read. Try increasing the contrast between the body and text colors." msgstr "" #: src/Admin/Settings/Email.php:224 msgid "Appearance" msgstr "" #: src/Admin/Settings/Email.php:225 msgid "Modern email clients support viewing emails in light and dark modes. You can upload a header image and customize the style for each appearance mode independently to ensure an optimal reading experience." msgstr "" #: src/Admin/Settings/Email.php:243 #: src/Admin/Tools/Importers/ContactForm7.php:125 #: src/Admin/Tools/Importers/NinjaForms.php:130 #: src/Admin/Tools/Importers/PirateForms.php:448 msgid "Sending" msgstr "" #: src/Admin/Settings/Email.php:250 msgid "Optimize Email Sending" msgstr "" #. translators: %1$s - WPForms.com Email settings documentation URL. #: src/Admin/Settings/Email.php:253 msgid "Send emails asynchronously, which can make processing faster but may delay email delivery by a minute or two. Learn More" msgstr "" #: src/Admin/Settings/Email.php:270 msgid "Carbon Copy" msgstr "" #: src/Admin/Settings/Email.php:271 msgid "Enable the ability to CC: email addresses in the form notification settings." msgstr "" #. translators: %1$s - WPForms.com Email settings legacy template documentation URL. #: src/Admin/Settings/Email.php:304 msgid "Some style settings are not available when using the Legacy template. Learn More" msgstr "" #: src/Admin/Settings/Email.php:351 msgid "Header Image" msgstr "" #: src/Admin/Settings/Email.php:352 msgid "Upload or choose a logo to be displayed at the top of email notifications." msgstr "" #: src/Admin/Settings/Email.php:374 #: src/Admin/Settings/Email.php:379 #: templates/admin/dashboard/widget/settings.php:43 msgid "Color Scheme" msgstr "" #: src/Admin/Settings/Email.php:384 #: src/Admin/Settings/Email.php:388 msgid "Typography" msgstr "" #: src/Admin/Settings/Email.php:385 msgid "Choose the style that’s applied to all text in email notifications." msgstr "" #: src/Admin/Settings/Email.php:394 msgid "Sans Serif" msgstr "" #: src/Admin/Settings/Email.php:395 msgid "Serif" msgstr "" #: src/Admin/Settings/Email.php:449 msgid "Upload or choose a logo to be displayed at the top of email notifications. Light mode image will be used if not set." msgstr "" #: src/Admin/Settings/Email.php:520 #: src/Integrations/Elementor/WidgetModern.php:155 #: src/Integrations/Elementor/WidgetModern.php:286 #: src/Integrations/Gutenberg/FormSelector.php:628 msgid "Background" msgstr "" #: src/Admin/Settings/Email.php:521 msgid "Body" msgstr "" #: src/Admin/Settings/Email.php:522 #: src/Integrations/Elementor/WidgetModern.php:174 #: src/Integrations/Elementor/WidgetModern.php:295 #: src/Integrations/Gutenberg/FormSelector.php:630 #: src/Pro/Forms/Fields/Traits/ContentInput.php:313 msgid "Text" msgstr "" #: src/Admin/Settings/Email.php:523 msgid "Links" msgstr "" #. translators: %1$s - Email template preview URL. #: src/Admin/Settings/Email.php:567 msgid "Preview Email Template" msgstr "" #: src/Admin/Settings/Email.php:604 msgid "Background Color" msgstr "" #: src/Admin/Settings/Email.php:605 msgid "Customize the background color of the email template." msgstr "" #: src/Admin/Settings/ModernMarkup.php:76 msgid "Use Modern Markup" msgstr "" #. translators: %s - WPForms.com form markup setting URL. #: src/Admin/Settings/ModernMarkup.php:79 msgid "Check this option to use modern markup, which has increased accessibility and allows you to easily customize your forms in the block editor. Read our form markup documentation to learn more." msgstr "" #. translators: %s - WPForms Stripe addon URL. #: src/Admin/Settings/ModernMarkup.php:125 msgid "You cannot use modern markup because you’re using the deprecated Credit Card field. If you’d like to use modern markup, replace your credit card field with a payment gateway like Stripe." msgstr "" #: src/Admin/Settings/Payments.php:85 msgid "Currency" msgstr "" #: src/Admin/SiteHealth.php:47 msgid "Version" msgstr "" #: src/Admin/SiteHealth.php:58 msgid "Lite install date" msgstr "" #: src/Admin/SiteHealth.php:65 msgid "Pro install date" msgstr "" #: src/Admin/SiteHealth.php:73 msgid "Uploads directory" msgstr "" #: src/Admin/SiteHealth.php:74 msgid "Writable" msgstr "" #: src/Admin/SiteHealth.php:74 msgid "Not writable" msgstr "" #: src/Admin/SiteHealth.php:81 msgid "Not found" msgstr "" #: src/Admin/SiteHealth.php:84 msgid "DB tables" msgstr "" #: src/Admin/SiteHealth.php:92 msgid "Total forms" msgstr "" #: src/Admin/SiteHealth.php:111 msgid "Total submissions (since v1.5.0)" msgstr "" #: src/Admin/Splash/SplashScreen.php:250 msgid "See the new features!" msgstr "" #: src/Admin/Splash/SplashTrait.php:109 msgid "What’s New in WPForms" msgstr "" #: src/Admin/Splash/SplashTrait.php:110 msgid "Since you’ve been gone, we’ve added some great new features to help grow your business and generate more leads. Here are some highlights..." msgstr "" #: src/Admin/Splash/SplashTrait.php:113 msgid "Start Building Smarter WordPress Forms" msgstr "" #: src/Admin/Splash/SplashTrait.php:114 msgid "Add advanced form fields and conditional logic, plus offer more payment options, manage entries, and connect to your favorite marketing tools – all when you purchase a premium plan." msgstr "" #: src/Admin/Splash/SplashTrait.php:116 msgid "Upgrade to Pro Today" msgstr "" #: src/Admin/Tools/Importers/Base.php:111 msgid "There was an error while creating a new form." msgstr "" #: src/Admin/Tools/Importers/ContactForm7.php:101 msgid "Unknown Form" msgstr "" #: src/Admin/Tools/Importers/ContactForm7.php:102 msgid "The form you are trying to import does not exist." msgstr "" #: src/Admin/Tools/Importers/ContactForm7.php:130 #: src/Admin/Tools/Importers/NinjaForms.php:135 msgid "Notification 1" msgstr "" #: src/Admin/Tools/Importers/ContactForm7.php:159 #: src/Admin/Tools/Importers/NinjaForms.php:164 #: src/Admin/Tools/Importers/PirateForms.php:434 msgid "No form fields found." msgstr "" #: src/Admin/Tools/Importers/ContactForm7.php:335 msgid "Acceptance Field" msgstr "" #: src/Admin/Tools/Importers/ContactForm7.php:442 msgid "Notification 2" msgstr "" #. translators: %1$s - field type, %2$s - field name if available. #: src/Admin/Tools/Importers/ContactForm7.php:536 msgid "%1$s Field %2$s" msgstr "" #: src/Admin/Tools/Importers/NinjaForms.php:241 #: src/Admin/Tools/Importers/PirateForms.php:250 #: src/Admin/Tools/Importers/PirateForms.php:343 msgid "Single Checkbox Field" msgstr "" #: src/Admin/Tools/Importers/NinjaForms.php:424 #: src/Admin/Tools/Importers/NinjaForms.php:441 #: templates/emails/summary-body.php:223 msgid "Notification" msgstr "" #. translators: %s - field type. #: src/Admin/Tools/Importers/NinjaForms.php:494 msgid "%s Field" msgstr "" #: src/Admin/Tools/Importers/PirateForms.php:91 #: src/Admin/Tools/Importers/PirateForms.php:180 msgid "Default Form" msgstr "" #: src/Admin/Tools/Views/ActionScheduler.php:61 #: src/Admin/Tools/Views/ActionSchedulerList.php:39 msgid "Scheduled Actions" msgstr "" #. translators: %s - Action Scheduler website URL. #: src/Admin/Tools/Views/ActionSchedulerList.php:45 msgid "WPForms is using the Action Scheduler library, which allows it to queue and process bigger tasks in the background without making your site slower for your visitors. Below you can see the list of all tasks and their status. This table can be very useful when debugging certain issues." msgstr "" #: src/Admin/Tools/Views/ActionSchedulerList.php:60 msgid "Action Scheduler library is also used by other plugins, like WP Mail SMTP and WooCommerce, so you might see tasks that are not related to our plugin in the table below." msgstr "" #. translators: %s - search term. #: src/Admin/Tools/Views/ActionSchedulerList.php:71 msgid "Search results for %s" msgstr "" #: src/Admin/Tools/Views/CodeSnippets.php:113 #: templates/integrations/wpcode/code-snippets.php:53 msgid "Code Snippets" msgstr "" #: src/Admin/Tools/Views/Export.php:58 #: src/Admin/Tools/Views/Export.php:157 msgid "Export" msgstr "" #: src/Admin/Tools/Views/Export.php:146 msgid "Export Forms" msgstr "" #: src/Admin/Tools/Views/Export.php:148 msgid "Use form export files to create a backup of your forms or to import forms to another site." msgstr "" #: src/Admin/Tools/Views/Export.php:153 msgid "Select Form(s)" msgstr "" #: src/Admin/Tools/Views/Export.php:161 msgid "You need to create a form before you can use form export." msgstr "" #: src/Admin/Tools/Views/Export.php:177 msgid "Export a Form Template" msgstr "" #. translators: %s - WPForms.com docs URL. #: src/Admin/Tools/Views/Export.php:184 msgid "For more information see our documentation." msgstr "" #: src/Admin/Tools/Views/Export.php:196 msgid "The following code can be used to register your custom form template. Copy and paste the following code to your theme's functions.php file or include it within an external file." msgstr "" #: src/Admin/Tools/Views/Export.php:203 msgid "Select a form to generate PHP code that can be used to register a custom form template." msgstr "" #: src/Admin/Tools/Views/Export.php:211 msgid "Export Template" msgstr "" #: src/Admin/Tools/Views/Export.php:215 msgid "You need to create a form before you can generate a template." msgstr "" #: src/Admin/Tools/Views/Import.php:102 #: src/Admin/Tools/Views/Import.php:224 #: src/Admin/Tools/Views/Import.php:276 #: src/Admin/Tools/Views/Importer.php:190 msgid "Import" msgstr "" #: src/Admin/Tools/Views/Import.php:156 msgid "Import was successfully finished." msgstr "" #. translators: %s - forms list page URL. #: src/Admin/Tools/Views/Import.php:161 msgid "You can go and check your forms." msgstr "" #. translators: %s - WPForms contact page URL. #: src/Admin/Tools/Views/Import.php:184 msgid "You can’t import forms because you don’t have unfiltered HTML permissions. Please contact your site administrator or reach out to our support team." msgstr "" #: src/Admin/Tools/Views/Import.php:207 msgid "WPForms Import" msgstr "" #: src/Admin/Tools/Views/Import.php:208 msgid "Select a WPForms export file." msgstr "" #: src/Admin/Tools/Views/Import.php:213 msgid "files selected" msgstr "" #: src/Admin/Tools/Views/Import.php:216 msgid "No file chosen" msgstr "" #: src/Admin/Tools/Views/Import.php:218 msgid "Choose a File" msgstr "" #: src/Admin/Tools/Views/Import.php:241 msgid "Import from Other Form Plugins" msgstr "" #: src/Admin/Tools/Views/Import.php:242 msgid "Not happy with other WordPress contact form plugins?" msgstr "" #: src/Admin/Tools/Views/Import.php:243 msgid "WPForms makes it easy for you to switch by allowing you import your third-party forms with a single click." msgstr "" #: src/Admin/Tools/Views/Import.php:247 msgid "No form importers are currently enabled." msgstr "" #: src/Admin/Tools/Views/Import.php:252 msgid "Select previous contact form plugin..." msgstr "" #: src/Admin/Tools/Views/Import.php:260 msgid "Not Active" msgstr "" #: src/Admin/Tools/Views/Import.php:304 #: src/Admin/Tools/Views/Import.php:354 msgid "Please upload a valid .json form export file." msgstr "" #: src/Admin/Tools/Views/Import.php:305 #: src/Admin/Tools/Views/Import.php:323 #: src/Integrations/Elementor/WidgetModern.php:236 #: src/Lite/Admin/Education/LiteConnect.php:244 msgid "Error" msgstr "" #: src/Admin/Tools/Views/Import.php:347 msgid "The unfiltered HTML permissions are required to import form." msgstr "" #: src/Admin/Tools/Views/Import.php:358 msgid "There was an error saving your form. Please check your file and try again." msgstr "" #: src/Admin/Tools/Views/Importer.php:137 msgid "Form Import" msgstr "" #: src/Admin/Tools/Views/Importer.php:153 msgid "Select the forms you would like to import." msgstr "" #: src/Admin/Tools/Views/Importer.php:157 msgid "Available Forms" msgstr "" #: src/Admin/Tools/Views/Importer.php:176 msgid "Select All" msgstr "" #: src/Admin/Tools/Views/Importer.php:181 msgid "Forms to Import" msgstr "" #. translators: %s - provider name. #: src/Admin/Tools/Views/Importer.php:211 msgid "Analyzing 1 of 0 forms from %s." msgstr "" #: src/Admin/Tools/Views/Importer.php:224 msgid "One or more of your forms contain fields that are not available in WPForms Lite. To properly import these fields, we recommend upgrading to WPForms Pro." msgstr "" #: src/Admin/Tools/Views/Importer.php:225 msgid "You can continue with the import without upgrading, and we will do our best to match the fields. However, some of them will be omitted due to compatibility issues." msgstr "" #: src/Admin/Tools/Views/Importer.php:231 msgid "Continue Import without Upgrading" msgstr "" #: src/Admin/Tools/Views/Importer.php:234 msgid "Below is the list of form fields that may be impacted:" msgstr "" #. translators: %s - provider name. #: src/Admin/Tools/Views/Importer.php:255 msgid "Importing 1 of 0 forms from %s." msgstr "" #: src/Admin/Tools/Views/Importer.php:270 msgid "Congrats, the import process has finished! We have successfully imported forms. You can review the results below." msgstr "" #: src/Admin/Tools/Views/Importer.php:336 msgid "The following fields are available in PRO and were not imported:" msgstr "" #: src/Admin/Tools/Views/Importer.php:344 msgid "The following fields are available in PRO and were imported as text fields:" msgstr "" #: src/Admin/Tools/Views/Importer.php:352 msgid "The following fields are not supported and were not imported:" msgstr "" #: src/Admin/Tools/Views/Importer.php:361 msgid "Upgrade to the PRO plan to import these fields." msgstr "" #: src/Admin/Tools/Views/Logs.php:52 #: src/Logger/ListTable.php:44 msgid "Logs" msgstr "" #: src/Admin/Tools/Views/Logs.php:98 msgid "Log Settings" msgstr "" #: src/Admin/Tools/Views/Logs.php:99 msgid "Enable and configure the logging functionality while debugging behavior of various parts of the plugin, including form and entry processing." msgstr "" #: src/Admin/Tools/Views/Logs.php:103 msgid "Enable Logs" msgstr "" #: src/Admin/Tools/Views/Logs.php:114 msgid "Start logging WPForms-related events. This is recommended only while debugging." msgstr "" #: src/Admin/Tools/Views/Logs.php:153 msgid "Log Types" msgstr "" #: src/Admin/Tools/Views/Logs.php:169 msgid "Select the types of events you want to log. Everything is logged by default." msgstr "" #: src/Admin/Tools/Views/Logs.php:187 msgid "User Roles" msgstr "" #: src/Admin/Tools/Views/Logs.php:208 msgid "Select the user roles you want to log. All roles are logged by default." msgstr "" #: src/Admin/Tools/Views/Logs.php:227 msgid "Users" msgstr "" #: src/Admin/Tools/Views/Logs.php:249 msgid "Log events for specific users only. All users are logged by default." msgstr "" #: src/Admin/Tools/Views/System.php:42 msgid "System Info" msgstr "" #: src/Admin/Tools/Views/System.php:65 msgid "System Information" msgstr "" #: src/Admin/Tools/Views/System.php:71 msgid "Copy System Information" msgstr "" #: src/Admin/Tools/Views/System.php:76 msgid "Test SSL Connections" msgstr "" #: src/Admin/Tools/Views/System.php:77 msgid "Click the button below to verify your web server can perform SSL connections successfully." msgstr "" #: src/Admin/Tools/Views/System.php:79 msgid "Test Connection" msgstr "" #: src/Admin/Tools/Views/System.php:92 msgid "Recreate custom tables" msgstr "" #: src/Admin/Tools/Views/System.php:93 msgid "Click the button below to recreate WPForms custom database tables." msgstr "" #: src/Admin/Tools/Views/System.php:95 msgid "Recreate Tables" msgstr "" #: src/Admin/Traits/FormTemplates.php:101 msgid "Search Templates" msgstr "" #: src/Admin/Traits/FormTemplates.php:117 msgid "Sorry, we didn't find any templates that match your criteria." msgstr "" #: src/Admin/Traits/FormTemplates.php:166 msgid "All Templates" msgstr "" #: src/Admin/Traits/FormTemplates.php:170 msgid "Available Templates" msgstr "" #: src/Admin/Traits/FormTemplates.php:173 msgid "Favorite Templates" msgstr "" #: src/Admin/Traits/FormTemplates.php:174 msgid "New Templates" msgstr "" #: src/Admin/Traits/FormTemplates.php:175 msgid "My Templates" msgstr "" #: src/Admin/Traits/FormTemplates.php:184 msgid "Custom Templates" msgstr "" #: src/Admin/Traits/FormTemplates.php:188 msgid "Addon Templates" msgstr "" #. translators: %s - form template name. #: src/Admin/Traits/FormTemplates.php:336 msgid "%s template" msgstr "" #: src/Admin/Traits/FormTemplates.php:346 msgid "Addon" msgstr "" #: src/Admin/Traits/FormTemplates.php:422 msgid "Create Blank Form" msgstr "" #: src/Db/Payments/ValueValidator.php:45 msgid "Live" msgstr "" #: src/Db/Payments/ValueValidator.php:46 #: templates/admin/payments/single/details.php:70 msgid "Test" msgstr "" #: src/Db/Payments/ValueValidator.php:69 #: src/Forms/Fields/Helpers/RequirementsAlerts.php:179 msgid "PayPal Standard" msgstr "" #: src/Db/Payments/ValueValidator.php:71 #: src/Integrations/Stripe/Admin/Settings.php:273 msgid "Stripe" msgstr "" #: src/Db/Payments/ValueValidator.php:73 msgid "Authorize.net" msgstr "" #: src/Db/Payments/ValueValidator.php:103 msgid "Processed" msgstr "" #: src/Db/Payments/ValueValidator.php:104 msgid "Completed" msgstr "" #: src/Db/Payments/ValueValidator.php:105 msgid "Pending" msgstr "" #: src/Db/Payments/ValueValidator.php:106 #: src/Db/Payments/ValueValidator.php:125 msgid "Failed" msgstr "" #: src/Db/Payments/ValueValidator.php:107 msgid "Refunded" msgstr "" #: src/Db/Payments/ValueValidator.php:108 msgid "Partially Refunded" msgstr "" #: src/Db/Payments/ValueValidator.php:123 msgid "Cancelled" msgstr "" #: src/Db/Payments/ValueValidator.php:124 msgid "Not Synced" msgstr "" #: src/Db/Payments/ValueValidator.php:140 msgid "One-Time" msgstr "" #: src/Db/Payments/ValueValidator.php:157 msgid "Renewal" msgstr "" #: src/Db/Payments/ValueValidator.php:172 msgid "day" msgstr "" #: src/Db/Payments/ValueValidator.php:173 msgid "week" msgstr "" #: src/Db/Payments/ValueValidator.php:174 msgid "month" msgstr "" #: src/Db/Payments/ValueValidator.php:175 msgid "quarter" msgstr "" #: src/Db/Payments/ValueValidator.php:176 msgid "semi-year" msgstr "" #: src/Db/Payments/ValueValidator.php:177 msgid "year" msgstr "" #: src/Emails/Helpers.php:34 msgid "Legacy" msgstr "" #: src/Emails/Mailer.php:311 msgid "New Email Submit" msgstr "" #. translators: %1$s - namespaced class name, %2$s - invalid email. #: src/Emails/Mailer.php:477 msgid "%1$s Invalid email address %2$s." msgstr "" #. translators: %s - namespaced class name. #: src/Emails/Mailer.php:486 msgid "%s Empty subject line." msgstr "" #. translators: %s - namespaced class name. #: src/Emails/Mailer.php:493 msgid "%s Empty message." msgstr "" #: src/Emails/Mailer.php:539 msgid "You cannot send emails with WPForms\\Emails\\Mailer until init/admin_init has been reached." msgstr "" #. translators: %1$d - field ID. #: src/Emails/Notifications.php:973 msgid "Field ID #%1$s" msgstr "" #: src/Emails/Notifications.php:1099 msgid "Compact" msgstr "" #: src/Emails/Notifications.php:1109 msgid "Elegant" msgstr "" #: src/Emails/Notifications.php:1114 msgid "Tech" msgstr "" #: src/Emails/Notifications.php:1119 msgid "Plain Text" msgstr "" #: src/Emails/Summaries.php:118 msgid "Disable Email Summaries weekly delivery." msgstr "" #: src/Emails/Summaries.php:121 msgid "View Email Summary Example" msgstr "" #: src/Emails/Summaries.php:133 msgid "Disable Email Summaries" msgstr "" #: src/Emails/Summaries.php:263 msgid "Weekly WPForms Email Summaries" msgstr "" #. translators: %s - site domain. #: src/Emails/Summaries.php:321 msgid "Your Weekly WPForms Summary for %s" msgstr "" #: src/Forms/Akismet.php:318 msgid "Anti-spam verification failed, please try again later." msgstr "" #. translators: %1$s - addons list. #: src/Forms/Fields/Helpers/RequirementsAlerts.php:59 msgid "The following addons require an update to support product quantities: %1$s" msgstr "" #: src/Forms/Fields/Helpers/RequirementsAlerts.php:76 msgid "You're using an older version of the Coupons addon that does not support order summary." msgstr "" #. translators: %1$s - addon name. #: src/Forms/Fields/Helpers/RequirementsAlerts.php:143 msgid "You're using an older version of the %1$s addon that does not support the Repeater field." msgstr "" #: src/Forms/Fields/Helpers/RequirementsAlerts.php:187 msgid "Save and Resume" msgstr "" #: src/Forms/Fields/Helpers/RequirementsAlerts.php:213 msgid "Update Required" msgstr "" #: src/Forms/Fields/Helpers/RequirementsAlerts.php:216 msgid "Update Now" msgstr "" #: src/Forms/Fields/PaymentCheckbox/Field.php:20 msgid "Checkbox Items" msgstr "" #: src/Forms/Fields/PaymentCheckbox/Field.php:21 #: src/Forms/Fields/PaymentMultiple/Field.php:21 #: src/Forms/Fields/PaymentSelect/Field.php:39 #: src/Forms/Fields/PaymentSingle/Field.php:57 msgid "product, store, ecommerce, pay, payment" msgstr "" #: src/Forms/Fields/PaymentCheckbox/Field.php:28 #: src/Forms/Fields/PaymentMultiple/Field.php:28 #: src/Forms/Fields/PaymentSelect/Field.php:46 msgid "First Item" msgstr "" #: src/Forms/Fields/PaymentCheckbox/Field.php:36 #: src/Forms/Fields/PaymentMultiple/Field.php:36 #: src/Forms/Fields/PaymentSelect/Field.php:51 msgid "Second Item" msgstr "" #: src/Forms/Fields/PaymentCheckbox/Field.php:44 #: src/Forms/Fields/PaymentMultiple/Field.php:44 #: src/Forms/Fields/PaymentSelect/Field.php:56 msgid "Third Item" msgstr "" #: src/Forms/Fields/PaymentCheckbox/Field.php:269 #: src/Forms/Fields/PaymentMultiple/Field.php:256 #: src/Forms/Fields/PaymentSelect/Field.php:245 msgid "Show price after item labels" msgstr "" #: src/Forms/Fields/PaymentCheckbox/Field.php:270 #: src/Forms/Fields/PaymentMultiple/Field.php:257 #: src/Forms/Fields/PaymentSelect/Field.php:246 msgid "Check this option to show price of the item after the label." msgstr "" #: src/Forms/Fields/PaymentCheckbox/Field.php:482 #: src/Forms/Fields/PaymentMultiple/Field.php:466 msgid "Invalid payment option." msgstr "" #: src/Forms/Fields/PaymentMultiple/Field.php:20 msgid "Multiple Items" msgstr "" #: src/Forms/Fields/PaymentSelect/Field.php:38 msgid "Dropdown Items" msgstr "" #: src/Forms/Fields/PaymentSelect/Field.php:477 msgid "Invalid payment option" msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:56 #: src/Forms/Fields/PaymentSingle/Field.php:351 msgid "Single Item" msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:247 msgid "Price Display" msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:248 msgid "Specify how the price is displayed under the product name." msgstr "" #. translators: %s - Single item field price label. #: src/Forms/Fields/PaymentSingle/Field.php:286 msgid "Price: %s" msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:304 msgid "Enter the price of the item, without a currency symbol." msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:311 msgid "Item Price" msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:349 msgid "Select the item type." msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:352 msgid "User Defined" msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:353 msgid "Hidden" msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:361 msgid "Item Type" msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:409 msgid "Enter the minimum price of the item, without a currency symbol." msgstr "" #. translators: %1$s - the default minimum price. #: src/Forms/Fields/PaymentSingle/Field.php:439 msgid "Requiring a minimum price of at least %1$s helps protect you against card testing by fraudsters." msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:450 msgid "Security Recommendation" msgstr "" #. translators: %1$s - Item Price value. #: src/Forms/Fields/PaymentSingle/Field.php:505 msgid "Price: %1$s" msgstr "" #. translators: %1$s - Minimum Price value. #: src/Forms/Fields/PaymentSingle/Field.php:542 msgid "Minimum Price: %1$s" msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:554 msgid "Note: Item type is set to hidden and will not be visible when viewing the form." msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:670 msgid "Amount mismatch" msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:683 msgid "Amount can't be negative" msgstr "" #: src/Forms/Fields/PaymentSingle/Field.php:693 msgid "Amount can't be less than the required minimum." msgstr "" #. translators: %1$s - Minimum Price value. #: src/Forms/Fields/PaymentSingle/Field.php:751 msgid "Minimum Price: %1$s" msgstr "" #: src/Forms/Fields/PaymentTotal/Field.php:23 msgid "store, ecommerce, pay, payment, sum" msgstr "" #: src/Forms/Fields/PaymentTotal/Field.php:400 msgid "Enable Summary" msgstr "" #: src/Forms/Fields/PaymentTotal/Field.php:401 msgid "Enable order summary for this field." msgstr "" #: src/Forms/Fields/PaymentTotal/Field.php:447 msgid "Example data is shown in the form editor. Actual products and totals will be displayed when you preview or embed your form." msgstr "" #: src/Forms/Fields/PaymentTotal/Field.php:482 msgid "Example Product 1" msgstr "" #: src/Forms/Fields/PaymentTotal/Field.php:488 msgid "Example Product 2" msgstr "" #: src/Forms/Fields/PaymentTotal/Field.php:494 msgid "Example Product 3" msgstr "" #: src/Forms/Fields/PaymentTotal/Field.php:750 msgid "Show order summary after confirmation message" msgstr "" #: src/Forms/Honeypot.php:79 msgid "WPForms honeypot field triggered." msgstr "" #: src/Forms/IconChoices.php:485 msgid "Done!" msgstr "" #: src/Forms/IconChoices.php:497 msgid "In order to use the Icon Choices feature, an icon library must be downloaded and installed. It's quick and easy, and you'll only have to do this once." msgstr "" #: src/Forms/IconChoices.php:498 msgid "Installing Icon Library" msgstr "" #: src/Forms/IconChoices.php:499 msgid "This should only take a minute. Please don’t close or reload your browser window." msgstr "" #: src/Forms/IconChoices.php:500 msgid "The icon library has been installed successfully. We will now save your form and reload the form builder." msgstr "" #. translators: %s - WPForms Support URL. #: src/Forms/IconChoices.php:503 msgid "There was an error installing the icon library. Please try again later or contact support if the issue persists." msgstr "" #: src/Forms/IconChoices.php:520 msgid "The icon library appears to be missing or damaged. It will now be reinstalled." msgstr "" #: src/Forms/IconChoices.php:521 msgid "Icon Picker" msgstr "" #: src/Forms/IconChoices.php:522 msgid "Browse or search for the perfect icon." msgstr "" #: src/Forms/IconChoices.php:523 msgid "Search 2000+ icons..." msgstr "" #: src/Forms/IconChoices.php:524 msgid "Sorry, we didn't find any matching icons." msgstr "" #: src/Forms/Locator.php:182 msgid "WPForms Widget" msgstr "" #: src/Forms/Locator.php:183 msgid "Text Widget" msgstr "" #: src/Forms/Locator.php:184 msgid "Block Widget" msgstr "" #: src/Forms/Locator.php:238 #: src/Forms/Locator.php:258 #: src/Forms/Locator.php:262 #: src/Forms/Locator.php:338 msgid "Locations" msgstr "" #: src/Forms/Locator.php:239 #: src/Forms/Locator.php:263 msgid "Form locations" msgstr "" #: src/Forms/Locator.php:307 #: src/Forms/Locator.php:337 msgid "View form locations" msgstr "" #: src/Forms/Locator.php:375 msgid "Form Locations" msgstr "" #: src/Forms/Locator.php:459 msgid "Inactive widgets" msgstr "" #: src/Forms/Locator.php:480 msgid "Site editor template" msgstr "" #: src/Forms/Locator.php:642 msgid "(no title)" msgstr "" #. translators: %s - form name. #: src/Forms/Preview.php:178 msgid "%s Template Preview" msgstr "" #: src/Forms/Preview.php:179 msgid "Form Template" msgstr "" #. translators: %s - form name. #: src/Forms/Preview.php:184 #: src/Forms/Preview.php:390 msgid "%s Preview" msgstr "" #: src/Forms/Preview.php:222 msgid "Edit Form Template" msgstr "" #: src/Forms/Preview.php:264 msgid "Close this window" msgstr "" #: src/Forms/Preview.php:274 msgid "This is a preview of the latest saved revision of your form template. If this preview does not match your template, save your changes and then refresh this page. This template preview is not publicly accessible." msgstr "" #: src/Forms/Preview.php:275 msgid "This is a preview of the latest saved revision of your form. If this preview does not match your form, save your changes and then refresh this page. This form preview is not publicly accessible." msgstr "" #. translators: %s - WPForms doc link. #: src/Forms/Preview.php:298 msgid "For form testing tips, check out our complete guide!" msgstr "" #: src/Forms/Preview.php:339 msgid "You're viewing a preview of a form template." msgstr "" #. translators: %s - time period, e.g. 24 hours. #: src/Forms/Preview.php:347 msgid "Entries are automatically deleted after %s." msgstr "" #: src/Forms/Token.php:273 msgid "Antispam token is invalid." msgstr "" #: src/Forms/Token.php:285 msgid "Antispam filter did not allow your data to pass through." msgstr "" #: src/Forms/Token.php:299 msgid "Please reload the page and try submitting the form again." msgstr "" #. translators: placeholders are links. #: src/Forms/Token.php:322 msgid "Please check out our %1$stroubleshooting guide%2$s for details on resolving this issue." msgstr "" #: src/Forms/Token.php:341 msgid "Error updating token. Please try again or contact support if the issue persists." msgstr "" #: src/Forms/Token.php:345 msgid "Network error or server is unreachable. Check your connection or try again later." msgstr "" #. translators: %s - URL to a non-amp version of a page with the form. #: src/Frontend/Amp.php:95 msgid "Go to the full page to view and submit the form." msgstr "" #: src/Frontend/Amp.php:360 msgid "Google reCAPTCHA v2" msgstr "" #. translators: %1$s - CAPTCHA provider name, %2$s - URL to reCAPTCHA documentation. #: src/Frontend/Amp.php:365 msgid "%1$s is not supported by AMP and is currently disabled.
Upgrade to reCAPTCHA v3 for full AMP support.
Please note: this message is only displayed to site administrators." msgstr "" #: src/Frontend/Frontend.php:754 msgid "Please enable JavaScript in your browser to complete this form." msgstr "" #: src/Frontend/Frontend.php:1829 msgid "Click to accept this suggestion." msgstr "" #. translators: %1$s - characters count, %2$s - characters limit. #: src/Frontend/Frontend.php:1839 msgid "%1$s of %2$s max characters." msgstr "" #. translators: %1$s - words count, %2$s - words limit. #: src/Frontend/Frontend.php:1847 msgid "%1$s of %2$s max words." msgstr "" #: src/Frontend/Frontend.php:1870 msgid "Country list" msgstr "" #. translators: %s - URL to the troubleshooting guide. #: src/Frontend/Frontend.php:2149 msgid "Heads up! WPForms has detected an issue with JavaScript on this page. JavaScript is required for this form to work properly, so this form may not work as expected. See our troubleshooting guide to learn more or contact support." msgstr "" #: src/Frontend/Frontend.php:2162 msgid "This message is only displayed to site administrators." msgstr "" #: src/Frontend/Modern.php:73 #: src/Frontend/Modern.php:86 #: src/Frontend/Modern.php:290 msgid "Form error message" msgstr "" #: src/Frontend/Modern.php:96 msgid "Recaptcha error message" msgstr "" #: src/Frontend/Modern.php:244 #: src/Frontend/Modern.php:291 msgid "Error message" msgstr "" #: src/Frontend/Modern.php:292 msgid "Submit button is disabled during form submission." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:114 msgid "Bad response" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:115 msgid "Clear chat history" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:116 msgid "Yes, Continue" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:119 msgid "Clear Chat History" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:120 msgid "Are you sure you want to clear the AI chat history and start over?" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:123 msgid "An error occurred." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:124 #: src/Integrations/AI/API/Http/Response.php:79 msgid "There appears to be a network error." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:125 msgid "I'm not sure what to do with that." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:128 msgid "Please try again." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:129 msgid "Please try a different prompt. You might need to be more descriptive." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:146 msgid "Describe the choices you would like to create or use one of the examples below to get started." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:148 msgid "What do you think of these choices? If you’re happy with them, you can insert these choices, or make changes by entering additional prompts." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:153 msgid "Learn more about WPForms AI" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:154 msgid "It looks like you have some existing choices in this field. If you generate new choices, your existing choices will be overwritten. You can simply close this window if you’d like to keep your existing choices." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:155 msgid "What would you like to create?" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:156 msgid "Just a minute..." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:157 msgid "Insert Choices" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:160 msgid "An error occurred while generating choices." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:161 msgid "Sorry, you've reached your daily limit for generating choices." msgstr "" #. translators: %s - WPForms contact support link. #: src/Integrations/AI/Admin/Builder/Enqueues.php:166 msgid "You may only generate choices 50 times per day. If you believe this is an error, please contact WPForms support." msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:181 msgid "american public holidays with dates in brackets" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:185 msgid "provinces of canada ordered by population" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:189 msgid "top 5 social networks in europe" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:193 msgid "top 10 most spoken languages in the world" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:197 msgid "top 20 most popular tropical travel destinations" msgstr "" #: src/Integrations/AI/Admin/Builder/Enqueues.php:201 msgid "30 household item categories for a marketplace" msgstr "" #: src/Integrations/AI/Admin/Builder/FieldOption.php:66 msgid "Open AI Modal" msgstr "" #: src/Integrations/AI/Admin/Builder/FieldOption.php:123 msgid "WPForms AI is not available on local sites." msgstr "" #: src/Integrations/AI/Admin/Settings.php:49 msgid "Hide AI Features" msgstr "" #: src/Integrations/AI/Admin/Settings.php:50 msgid "Hide everything related to AI in WPForms." msgstr "" #: src/Integrations/AI/Admin/Settings.php:59 msgid "AI features were hidden by filter or constant." msgstr "" #. translators: %s - forms overview page URL. #: src/Integrations/DefaultContent/DefaultContent.php:58 msgctxt "Theme starter content" msgid "Create your contact form with WPForms in minutes." msgstr "" #: src/Integrations/Divi/Divi.php:227 #: templates/integrations/elementor/no-forms.php:20 #: assets/js/integrations/gutenberg/modules/common.js:962 #: assets/lite/js/integrations/gutenberg/formselector.es5.js:3305 #: assets/pro/js/integrations/gutenberg/formselector.es5.js:3316 msgid "You can use WPForms to build contact forms, surveys, payment forms, and more with just a few clicks." msgstr "" #: src/Integrations/Divi/Divi.php:235 msgid "comprehensive guide" msgstr "" #: src/Integrations/Divi/Divi.php:236 msgid "Need some help? Check out our" msgstr "" #: src/Integrations/Divi/WPFormsSelector.php:59 msgid "Select form" msgstr "" #: src/Integrations/Divi/WPFormsSelector.php:73 #: src/Integrations/Gutenberg/FormSelector.php:611 msgid "Show Title" msgstr "" #: src/Integrations/Divi/WPFormsSelector.php:83 #: src/Integrations/Gutenberg/FormSelector.php:612 msgid "Show Description" msgstr "" #: src/Integrations/Elementor/Elementor.php:134 msgid "Confirm" msgstr "" #: src/Integrations/Elementor/Elementor.php:135 #: src/Integrations/Elementor/WidgetModern.php:368 msgid "Reset Style Settings" msgstr "" #: src/Integrations/Elementor/Elementor.php:136 msgid "Are you sure you want to reset the style settings for this form? All your current styling will be removed and canʼt be recovered." msgstr "" #: src/Integrations/Elementor/Elementor.php:137 #: src/Integrations/Gutenberg/FormSelector.php:657 msgid "There was an error parsing your JSON code. Please check your code and try again." msgstr "" #: src/Integrations/Elementor/Widget.php:141 msgid "You haven't created a form yet.
What are you waiting for?" msgstr "" #. translators: %s - WPForms documentation link. #: src/Integrations/Elementor/Widget.php:169 msgid "Need to make changes? Edit the selected form." msgstr "" #. translators: %s - WPForms documentation link. #: src/Integrations/Elementor/Widget.php:185 msgid "Heads up! Don't forget to test your form. Check out our complete guide!" msgstr "" #: src/Integrations/Elementor/Widget.php:223 msgid "Display Options" msgstr "" #: src/Integrations/Elementor/Widget.php:236 #: src/Integrations/Elementor/Widget.php:250 msgid "Show" msgstr "" #: src/Integrations/Elementor/Widget.php:237 #: src/Integrations/Elementor/Widget.php:251 msgid "Hide" msgstr "" #: src/Integrations/Elementor/Widget.php:393 msgid "Select a form" msgstr "" #: src/Integrations/Elementor/WidgetModern.php:113 #: src/Integrations/Gutenberg/FormSelector.php:577 msgid "Field Styles" msgstr "" #: src/Integrations/Elementor/WidgetModern.php:125 #: src/Integrations/Gutenberg/FormSelector.php:624 msgid "Form Styles are disabled because Lead Form Mode is turned on." msgstr "" #: src/Integrations/Elementor/WidgetModern.php:126 #: src/Integrations/Gutenberg/FormSelector.php:625 msgid "To change the styling for this form, open it in the form builder and edit the options in the Lead Forms settings." msgstr "" #: src/Integrations/Elementor/WidgetModern.php:136 #: src/Integrations/Elementor/WidgetModern.php:206 #: src/Integrations/Elementor/WidgetModern.php:267 #: src/Integrations/Gutenberg/FormSelector.php:626 msgid "Size" msgstr "" #: src/Integrations/Elementor/WidgetModern.php:146 #: src/Integrations/Elementor/WidgetModern.php:277 msgid "Border Radius (px)" msgstr "" #: src/Integrations/Elementor/WidgetModern.php:164 #: src/Integrations/Gutenberg/FormSelector.php:629 #: src/Integrations/Gutenberg/FormSelector.php:646 msgid "Border" msgstr "" #: src/Integrations/Elementor/WidgetModern.php:198 #: src/Integrations/Gutenberg/FormSelector.php:581 msgid "Label Styles" msgstr "" #: src/Integrations/Elementor/WidgetModern.php:226 #: src/Integrations/Gutenberg/FormSelector.php:649 msgid "Sublabel & Hint" msgstr "" #: src/Integrations/Elementor/WidgetModern.php:259 #: src/Integrations/Gutenberg/FormSelector.php:584 msgid "Button Styles" msgstr "" #: src/Integrations/Elementor/WidgetModern.php:326 msgid "Additional Classes" msgstr "" #: src/Integrations/Elementor/WidgetModern.php:328 msgid "Separate multiple classes with spaces." msgstr "" #: src/Integrations/Elementor/WidgetModern.php:346 #: src/Integrations/Gutenberg/FormSelector.php:656 msgid "Copy / Paste Style Settings" msgstr "" #: src/Integrations/Elementor/WidgetModern.php:348 #: src/Integrations/Gutenberg/FormSelector.php:658 msgid "If you've copied style settings from another form, you can paste them here to add the same styling to this form. Any current style settings will be overwritten." msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:556 msgid "Select and display one of your forms." msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:558 msgid "form" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:559 msgid "contact" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:560 msgid "survey" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:562 msgid "Select a Form" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:563 msgid "Form Settings" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:567 msgid "Theme Name" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:568 msgid "Delete Theme" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:569 msgid "Delete Form Theme" msgstr "" #. Translators: %1$s: Theme name. #: src/Integrations/Gutenberg/FormSelector.php:571 msgid "Are you sure you want to delete the %1$s theme?" msgstr "" #. Translators: %1$s: Theme name. #: src/Integrations/Gutenberg/FormSelector.php:572 msgid "This cannot be undone." msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:574 msgid "Copy" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:575 msgid "Custom Theme" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:576 msgid "Noname Theme" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:578 msgid "Field Label" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:579 msgid "Field Sublabel" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:580 msgid "Field Border" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:582 msgid "Button Background" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:583 msgid "Button Text" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:585 msgid "Container Styles" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:586 msgid "Background Styles" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:588 msgid "Position" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:589 msgid "Top Left" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:590 msgid "Top Center" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:591 msgid "Top Right" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:592 msgid "Center Left" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:593 msgid "Center Center" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:594 msgid "Center Right" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:595 msgid "Bottom Left" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:596 msgid "Bottom Center" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:597 msgid "Bottom Right" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:598 msgid "Repeat" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:599 msgid "No Repeat" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:600 msgid "Repeat Horizontal" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:601 msgid "Repeat Vertical" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:602 msgid "Tile" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:603 msgid "Cover" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:604 msgid "Dimensions" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:605 msgid "Width" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:606 msgid "Height" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:607 msgid "Also used for other fields like Multiple Choice, Checkboxes, Rating, and NPS Survey." msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:609 msgid "Additional CSS Classes" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:614 msgid "Do not forget to test your form." msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:616 msgid "Check out our complete guide!" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:617 #: src/Integrations/Gutenberg/FormSelector.php:621 msgid "Want to customize your form styles without editing CSS?" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:618 msgid "Update WordPress to the latest version to use our modern markup and unlock the controls below." msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:622 msgid "Enable modern markup in your WPForms settings to unlock the controls below." msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:627 msgid "Padding" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:631 msgid "Menu" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:632 msgid "Image" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:633 msgid "Media Library" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:634 msgid "Choose Image" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:635 msgid "Stock Photo" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:636 msgid "Border Radius" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:637 #: src/Integrations/Gutenberg/FormSelector.php:645 msgid "Border Size" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:638 msgid "Border Style" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:640 msgid "Solid" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:641 msgid "Dashed" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:642 msgid "Dotted" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:643 msgid "Double" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:644 msgid "Shadow" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:647 msgid "Colors" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:650 msgid "Error Message" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:659 msgid "Custom CSS" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:660 msgid "Further customize the look of this form without having to edit theme files." msgstr "" #. Translators: %1$s: Opening strong tag, %2$s: Closing strong tag. #: src/Integrations/Gutenberg/FormSelector.php:662 msgid "You can use %1$sWPForms%2$s to build contact forms, surveys, payment forms, and more with just a few clicks." msgstr "" #. Translators: %1$s: Opening anchor tag, %2$s: Closing achor tag. #: src/Integrations/Gutenberg/FormSelector.php:664 msgid "Need some help? Check out our %1$scomprehensive guide.%2$s" msgstr "" #. Translators: %1$s: Opening anchor tag, %2$s: Closing achor tag. #: src/Integrations/Gutenberg/FormSelector.php:665 msgid "Other Styles" msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:669 msgid "It looks like the form you had selected is in the Trash or has been permanently deleted." msgstr "" #: src/Integrations/Gutenberg/FormSelector.php:966 msgid "The form cannot be displayed." msgstr "" #: src/Integrations/Gutenberg/RestApi.php:129 msgid "This route is private." msgstr "" #: src/Integrations/Gutenberg/RestApi.php:186 msgid "Can't create themes storage file." msgstr "" #: src/Integrations/Gutenberg/RestApi.php:200 msgid "Can't save theme data." msgstr "" #. translators: %s - WPForms documentation link. #: src/Integrations/LiteConnect/Integration.php:366 msgid "Your form entries can’t be backed up because WPForms can’t connect to the backup server. If you’d like to back up your entries, find out how to fix entry backup issues." msgstr "" #: src/Integrations/LiteConnect/LiteConnect.php:240 msgid "This is the Lite Connect endpoint page." msgstr "" #: src/Integrations/SMTP/Notifications.php:66 msgid "Please enter a valid email address. Your notifications won't be sent if the field is not filled in correctly." msgstr "" #: src/Integrations/SMTP/Notifications.php:90 #: src/Integrations/SMTP/Notifications.php:123 msgid "Notifications can only use 1 From Email. Please do not enter multiple addresses." msgstr "" #. translators: %1$s - WordPress site domain. #: src/Integrations/SMTP/Notifications.php:178 msgid "The current 'From Email' address does not match your website domain name (%1$s). This can cause your notification emails to be blocked or marked as spam." msgstr "" #. translators: %1$s - WP Mail SMTP install page URL. #: src/Integrations/SMTP/Notifications.php:191 msgid "We strongly recommend that you install the free WP Mail SMTP plugin! The Setup Wizard makes it easy to fix your emails." msgstr "" #. translators: %1$s - WordPress site domain. #: src/Integrations/SMTP/Notifications.php:207 msgid "Alternately, try using a From Address that matches your website domain (admin@%1$s)." msgstr "" #. translators: %1$s - fixing email delivery issues doc URL. #: src/Integrations/SMTP/Notifications.php:213 msgid "Please check out our doc on fixing email delivery issues for more details." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Enqueues.php:47 msgid "When recurring subscription payments are enabled, the Customer Email is required. Please go to the Stripe payment settings and select a Customer Email." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Enqueues.php:91 #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:423 msgid "Plan Name" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Enqueues.php:92 msgid "You can only use one payment type at a time. If you'd like to enable Recurring Payments, please disable One-Time Payments." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Enqueues.php:93 msgid "You can only use one payment type at a time. If you'd like to enable One-Time Payments, please disable Recurring Payments." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Settings.php:241 msgid "Enable Conditional Logic" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Settings.php:281 msgid "The Stripe Pro addon is required to enable conditional logic for payments. Would you like to install and activate it?" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Settings.php:291 msgid "The Stripe Pro addon is required to enable conditional logic for payments. Would you like to activate it?" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:111 msgid "One-Time Payments" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:119 msgid "Enable one-time payments" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:123 msgid "Allow your customers to one-time pay via the form." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:145 msgid "Recurring Payments " msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:156 #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:333 msgid "Enable recurring subscription payments" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:160 msgid "Allow your customer to pay recurringly via the form." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:199 msgid "Add New Plan" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:216 msgid "Stripe Pro" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:226 msgid "Multiple Stripe Subscription Plans" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:251 msgid "Heads up! Stripe payments can't be enabled yet." msgstr "" #. translators: %1$s - admin area Payments settings page URL. #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:255 msgid "First, please connect to your Stripe account on the WPForms Settings page." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:287 msgid "To use Stripe, first add the Stripe payment field to your form." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:307 msgid "Enable Stripe payments" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:326 msgid "Subscriptions" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:362 msgid "Payment Description" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:365 msgid "Enter your payment description. Eg: Donation for the soccer team. Only used for standard one-time payments." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:375 msgid "Stripe Payment Receipt" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:379 #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:394 #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:469 msgid "--- Select Email ---" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:380 msgid "If you would like to have Stripe send a receipt after payment, select the email field to use. This is optional but recommended. Only used for standard one-time payments." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:395 msgid "Select the field that contains the customer's email address. This is optional but recommended." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:428 msgid "Enter the subscription name. Eg: Email Newsletter. Subscription period and price are automatically appended. If left empty the form name will be used." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:439 msgid "Recurring Period" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:446 #: src/Integrations/Stripe/Api/Common.php:349 msgid "Daily" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:447 #: src/Integrations/Stripe/Api/Common.php:355 msgid "Weekly" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:448 #: src/Integrations/Stripe/Api/Common.php:361 msgid "Monthly" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:449 #: src/Integrations/Stripe/Api/Common.php:367 msgid "Quarterly" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:450 #: src/Integrations/Stripe/Api/Common.php:373 msgid "Semi-Yearly" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:451 #: src/Integrations/Stripe/Api/Common.php:379 msgid "Yearly" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:453 msgid "How often you would like the charge to recur." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:470 msgid "Select the field that contains the customer's email address. This field is required." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:492 msgid "Connect WPForms to Stripe." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:508 msgid "Learn more about our Stripe integration." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:526 msgid "--- Select Name ---" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:527 msgid "Select the field that contains the customer's name. This is optional but recommended." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:540 msgid "Customer Name" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:560 msgid "--- Select Address ---" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:576 #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:591 msgid "Customer Address" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:583 msgid "Select the field that contains the customer's address. This is optional but required for some regions." msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:601 #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:611 msgid "Shipping Address" msgstr "" #: src/Integrations/Stripe/Admin/Builder/Traits/ContentTrait.php:603 msgid "Select the field that contains the shipping address. This is optional but required for some regions." msgstr "" #. translators: %s - general admin settings page URL. #: src/Integrations/Stripe/Admin/Notices.php:75 msgid "Pay-as-you-go Pricing
3%% fee per-transaction + Stripe fees. Activate your license to remove additional fees and unlock powerful features." msgstr "" #. translators: %s - general admin settings page URL. #: src/Integrations/Stripe/Admin/Notices.php:91 msgid "Pay-as-you-go Pricing
3%% fee per-transaction + Stripe fees. Renew your license to remove additional fees and unlock powerful features." msgstr "" #. translators: %s - WPForms.com Upgrade page URL. #: src/Integrations/Stripe/Admin/Notices.php:122 msgid "Pay-as-you-go Pricing
3%% fee per-transaction + Stripe fees. Upgrade to Pro to remove additional fees and unlock powerful features." msgstr "" #: src/Integrations/Stripe/Admin/Notices.php:153 msgid "A new and improved Stripe interface is available with new Stripe Pro addon." msgstr "" #: src/Integrations/Stripe/Admin/Notices.php:155 msgid "A new and improved Stripe interface is available when you create new forms." msgstr "" #: src/Integrations/Stripe/Admin/Notices.php:167 msgid "What's new?" msgstr "" #: src/Integrations/Stripe/Admin/Payments/SingleActionsHandler.php:95 msgid "Missing payment ID." msgstr "" #: src/Integrations/Stripe/Admin/Payments/SingleActionsHandler.php:105 msgid "Payment not found in the database." msgstr "" #: src/Integrations/Stripe/Admin/Payments/SingleActionsHandler.php:118 msgid "Refund failed." msgstr "" #: src/Integrations/Stripe/Admin/Payments/SingleActionsHandler.php:135 msgid "Refund successful." msgstr "" #: src/Integrations/Stripe/Admin/Payments/SingleActionsHandler.php:138 msgid "Saving refund in the database failed." msgstr "" #: src/Integrations/Stripe/Admin/Payments/SingleActionsHandler.php:151 msgid "Payment ID not provided." msgstr "" #: src/Integrations/Stripe/Admin/Payments/SingleActionsHandler.php:161 msgid "Subscription not found in the database." msgstr "" #: src/Integrations/Stripe/Admin/Payments/SingleActionsHandler.php:167 msgid "Subscription cancellation failed." msgstr "" #: src/Integrations/Stripe/Admin/Payments/SingleActionsHandler.php:171 msgid "Subscription cancelled." msgstr "" #: src/Integrations/Stripe/Admin/Payments/SingleActionsHandler.php:174 msgid "Updating subscription in the database failed." msgstr "" #: src/Integrations/Stripe/Admin/Settings.php:78 msgid "Stripe is not connected for your current payment mode. Please press the \"Connect with Stripe\" button to complete this setup." msgstr "" #. translators: %1$s - Selected currency on the WPForms Settings admin page. #: src/Integrations/Stripe/Admin/Settings.php:114 msgid "Payments Cannot Be Processed
The currency you have set (%1$s) is not supported by Stripe. Please choose a different currency." msgstr "" #: src/Integrations/Stripe/Admin/Settings.php:151 msgid "

Switching test/live modes requires Stripe account reconnection.

Press the \"Connect with Stripe\" button after saving the settings to reconnect.

" msgstr "" #: src/Integrations/Stripe/Admin/Settings.php:196 msgid "Connection Status" msgstr "" #: src/Integrations/Stripe/Admin/Settings.php:202 msgid "Test Mode" msgstr "" #. translators: %s - WPForms.com URL for Stripe payments with more details. #: src/Integrations/Stripe/Admin/Settings.php:207 msgid "Prevent Stripe from processing live transactions. Please see our documentation on Stripe test payments for full details." msgstr "" #: src/Integrations/Stripe/Admin/Settings.php:230 msgid "Credit Card Field Mode" msgstr "" #: src/Integrations/Stripe/Admin/Settings.php:235 msgid "Card Element" msgstr "" #: src/Integrations/Stripe/Admin/Settings.php:236 msgid "Payment Element" msgstr "" #. translators: %s - WPForms.com Stripe documentation article URL. #: src/Integrations/Stripe/Admin/Settings.php:277 msgid "Easily collect credit card payments with Stripe. For getting started and more information, see our Stripe documentation." msgstr "" #. translators: %1$s - Stripe account name connected, %2$s - Stripe mode connected (live or test). #: src/Integrations/Stripe/Admin/Settings.php:342 msgid "Connected to Stripe as %1$s in %2$s Mode." msgstr "" #. translators: %s - Stripe connect URL. #: src/Integrations/Stripe/Admin/Settings.php:356 msgid "Switch Accounts" msgstr "" #. translators: %s - WPForms.com Stripe documentation article URL. #: src/Integrations/Stripe/Admin/Settings.php:383 msgid "Securely connect to Stripe with just a few clicks to begin accepting payments! Learn More" msgstr "" #: src/Integrations/Stripe/Admin/Settings.php:399 msgid "Connect with Stripe" msgstr "" #. translators: %s - WPForms.com Stripe documentation article URL. #: src/Integrations/Stripe/Admin/Settings.php:415 msgid "Please see our documentation on Stripe Credit Card field modes for full details." msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:47 msgid "Enable Webhooks" msgstr "" #. translators: %s - WPForms.com URL for Stripe webhooks documentation. #: src/Integrations/Stripe/Admin/WebhookSettings.php:53 msgid "Stripe uses webhooks to notify WPForms when an event has occurred in your Stripe account. Please see our documentation on Stripe webhooks for full details." msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:77 msgid "Webhooks Method" msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:81 msgid "REST API (recommended)" msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:82 msgid "PHP listener" msgstr "" #. translators: %s - WPForms.com URL for Stripe webhooks documentation. #: src/Integrations/Stripe/Admin/WebhookSettings.php:86 msgid "Choose the method of communication between Stripe and WPForms. If REST API support is disabled for WordPress, use PHP listener. Learn more." msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:102 msgid "Webhooks Endpoint" msgstr "" #. translators: %s - Stripe Webhooks Settings url. #: src/Integrations/Stripe/Admin/WebhookSettings.php:107 msgid "Ensure an endpoint with the above URL is present in the Stripe webhook settings." msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:123 msgid "Webhooks Test ID" msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:131 msgid "Webhooks Test Secret" msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:139 msgid "Webhooks Live ID" msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:147 msgid "Webhooks Live Secret" msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:168 msgid "Live Mode Endpoint ID" msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:169 msgid "Test Mode Endpoint ID" msgstr "" #. translators: %1$s - Live Mode Endpoint ID or Test Mode Endpoint ID. %2$s - WPForms.com Stripe documentation article URL. #: src/Integrations/Stripe/Admin/WebhookSettings.php:174 msgid "Retrieve your %1$s from your Stripe webhook settings. Select the endpoint, then click Copy button." msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:200 msgid "Live Mode Signing Secret" msgstr "" #: src/Integrations/Stripe/Admin/WebhookSettings.php:201 msgid "Test Mode Signing Secret" msgstr "" #. translators: %1$s - Live Mode Signing Secret or Test Mode Signing Secret. %2$s - WPForms.com Stripe documentation article URL. #: src/Integrations/Stripe/Admin/WebhookSettings.php:206 msgid "Retrieve your %1$s from your Stripe webhook settings. Select the endpoint, then click Reveal." msgstr "" #: src/Integrations/Stripe/Api/Common.php:292 msgid "Too many requests made to the API too quickly." msgstr "" #: src/Integrations/Stripe/Api/Common.php:293 msgid "Invalid parameters were supplied to Stripe API." msgstr "" #: src/Integrations/Stripe/Api/Common.php:294 msgid "Authentication with Stripe API failed." msgstr "" #: src/Integrations/Stripe/Api/Common.php:295 msgid "Network communication with Stripe failed." msgstr "" #: src/Integrations/Stripe/Api/Common.php:296 msgid "Unable to process Stripe payment." msgstr "" #: src/Integrations/Stripe/Api/Common.php:297 msgid "Unable to process payment." msgstr "" #: src/Integrations/Stripe/Api/PaymentIntents.php:244 msgid "Stripe payment stopped, missing both PaymentMethod and PaymentIntent ids." msgstr "" #: src/Integrations/Stripe/Api/PaymentIntents.php:443 msgid "Stripe payment stopped, missing PaymentMethod id." msgstr "" #: src/Integrations/Stripe/Api/PaymentIntents.php:479 msgid "Stripe payment stopped. Invalid PaymentIntent status." msgstr "" #: src/Integrations/Stripe/Api/PaymentIntents.php:516 msgid "Stripe payment was not confirmed. Please check your Stripe dashboard." msgstr "" #: src/Integrations/Stripe/Api/PaymentIntents.php:558 msgid "Stripe subscription stopped, missing PaymentMethod id." msgstr "" #: src/Integrations/Stripe/Api/PaymentIntents.php:622 msgid "Stripe subscription stopped. invalid PaymentIntent status." msgstr "" #: src/Integrations/Stripe/Api/PaymentIntents.php:659 msgid "Stripe subscription was not confirmed. Please check your Stripe dashboard." msgstr "" #: src/Integrations/Stripe/Api/WebhookRoute.php:152 msgid "It seems to be request to Stripe PHP Listener method handler but the site is not configured to use it." msgstr "" #. translators: %1$s - Stripe.com URL for domains registration documentation. #: src/Integrations/Stripe/DomainHealthCheck.php:140 msgid "Heads up! It looks like there's a problem with your domain verification, and Stripe Apple Pay may stop working. If this notice does not disappear in a day, please register it manually." msgstr "" #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:60 msgid "Link Email" msgstr "" #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:61 msgid "Select an Email field to autofill your customers’ payment information using Link." msgstr "" #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:76 #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:134 msgid "Stripe Credit Card Email" msgstr "" #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:96 msgid "Sublabel Position" msgstr "" #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:108 msgid "Above" msgstr "" #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:109 msgid "Floating" msgstr "" #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:222 msgid "Card Number" msgstr "" #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:223 msgid "Expiration" msgstr "" #: src/Integrations/Stripe/Fields/PaymentElementCreditCard.php:224 msgid "CVC" msgstr "" #: src/Integrations/Stripe/Fields/StripeCreditCard.php:61 #: src/Integrations/Stripe/Fields/StripeCreditCard.php:160 msgid "Card" msgstr "" #: src/Integrations/Stripe/Fields/StripeCreditCard.php:82 #: src/Integrations/Stripe/Fields/StripeCreditCard.php:166 msgid "Name on Card" msgstr "" #: src/Integrations/Stripe/Fields/StripeCreditCard.php:120 msgid "Name on Card Placeholder Text" msgstr "" #: src/Integrations/Stripe/Fields/StripeCreditCard.php:142 #: src/Integrations/Stripe/Fields/StripeCreditCard.php:247 msgid "Card number" msgstr "" #: src/Integrations/Stripe/Fields/Traits/CreditCard.php:22 msgid "Stripe Credit Card" msgstr "" #: src/Integrations/Stripe/Fields/Traits/CreditCard.php:213 msgid "

AJAX form submissions are required when using the Stripe Credit Card field.

To proceed, please go to Settings » General » Advanced and check Enable AJAX form submission.

" msgstr "" #: src/Integrations/Stripe/Fields/Traits/CreditCard.php:221 msgid "

Stripe account connection is required when using the Stripe Credit Card field.

To proceed, please go to WPForms Settings » Payments » Stripe and press Connect with Stripe button.

" msgstr "" #: src/Integrations/Stripe/Fields/Traits/CreditCard.php:229 msgid "

Stripe Payments must be enabled when using the Stripe Credit Card field.

To proceed, please go to Payments » Stripe and check Enable Stripe payments.

" msgstr "" #: src/Integrations/Stripe/Fields/Traits/CreditCard.php:338 msgid "This page is insecure. Credit Card field should be used for testing purposes only." msgstr "" #: src/Integrations/Stripe/Fields/Traits/CreditCard.php:344 msgid "Credit Card field is disabled, Stripe keys are missing." msgstr "" #: src/Integrations/Stripe/Fields/Traits/CreditCard.php:352 msgid "Credit Card field is disabled, Stripe payments are not enabled in the form settings." msgstr "" #: src/Integrations/Stripe/Frontend.php:168 msgid "Please fill out payment details to continue." msgstr "" #: src/Integrations/Stripe/Frontend.php:169 msgid "Payment Element failed to load. Stripe API responded with the message:" msgstr "" #: src/Integrations/Stripe/Process.php:209 msgid "Unable to process payment, please try again later." msgstr "" #: src/Integrations/Stripe/Process.php:571 msgid "Stripe payment stopped, missing keys." msgstr "" #: src/Integrations/Stripe/Process.php:577 msgid "Stripe payment stopped, missing payment fields." msgstr "" #: src/Integrations/Stripe/Process.php:582 msgid "Stripe payment stopped, invalid/empty amount." msgstr "" #: src/Integrations/Stripe/Process.php:586 msgid "Stripe payment stopped, amount less than minimum charge required." msgstr "" #: src/Integrations/Stripe/Process.php:772 msgid "Stripe Subscription payment stopped validation error." msgstr "" #. translators: %s - error message. #: src/Integrations/Stripe/Process.php:904 msgid "Payment Error: %s" msgstr "" #: src/Integrations/Stripe/Process.php:911 msgid "Stripe subscription payment stopped by error" msgstr "" #: src/Integrations/Stripe/Process.php:913 msgid "Stripe payment stopped by error" msgstr "" #: src/Integrations/Stripe/Process.php:1030 msgid "Stripe subscription payment stopped, missing form settings." msgstr "" #: src/Integrations/Stripe/Process.php:1035 msgid "Stripe subscription payment stopped, customer email not found." msgstr "" #: src/Integrations/Stripe/Process.php:1148 msgid "Secondary form submission was declined." msgstr "" #: src/Integrations/Stripe/Process.php:1166 msgid "Irregular activity detected. Your submission has been declined and payment refunded." msgstr "" #: src/Integrations/Stripe/StripeAddonCompatibility.php:87 msgid "The WPForms Stripe addon is out of date. To avoid payment processing issues, please upgrade the Stripe addon to the latest version." msgstr "" #. translators: %s - WPForms.com URL for Stripe webhooks documentation. #: src/Integrations/Stripe/WebhooksHealthCheck.php:227 msgid "Heads up! Looks like you have a problem with your webhooks configuration. Please check and confirm that you've configured the WPForms webhooks in your Stripe account. This notice will disappear automatically when a new Stripe request comes in. See our documentation for more information." msgstr "" #: src/Integrations/UncannyAutomator/UncannyAutomator.php:69 msgid "Uncanny Automator" msgstr "" #. translators: %s - plugin name. #: src/Integrations/UncannyAutomator/UncannyAutomator.php:150 msgid "%s plugin" msgstr "" #: src/Integrations/UncannyAutomator/UncannyAutomator.php:165 msgid "Put Your WordPress Site on Autopilot" msgstr "" #: src/Integrations/UncannyAutomator/UncannyAutomator.php:166 msgid "Build powerful automations that control what happens on form submission. Connect your forms to Google Sheets, Zoom, social media, membership plugins, elearning platforms, and more with Uncanny Automator." msgstr "" #: src/Integrations/UsageTracking/UsageTracking.php:109 msgid "Allow Usage Tracking" msgstr "" #: src/Integrations/UsageTracking/UsageTracking.php:110 msgid "By allowing us to track usage data, we can better help you, as we will know which WordPress configurations, themes, and plugins we should test." msgstr "" #: src/Integrations/WooCommerce/Notifications.php:133 #: templates/education/admin/settings/smtp-notice.php:15 msgid "Make Sure Important Emails Reach Your Customers" msgstr "" #: src/Integrations/WooCommerce/Notifications.php:137 msgid "Solve common email deliverability issues for good." msgstr "" #: src/Integrations/WooCommerce/Notifications.php:141 msgid "Get WP Mail SMTP" msgstr "" #: src/Integrations/WooCommerce/Notifications.php:147 msgid "Close the notification" msgstr "" #. translators: %s - URL WP Mail SMTP settings. #: src/Integrations/WPMailSMTP/Notifications.php:188 msgid "This setting is disabled because you have the \"Force From Name\" setting enabled in the WP Mail SMTP plugin." msgstr "" #. translators: %s - URL WP Mail SMTP settings. #: src/Integrations/WPMailSMTP/Notifications.php:217 msgid "This setting is disabled because you have the \"Force From Email\" setting enabled in the WP Mail SMTP plugin." msgstr "" #: src/Lite/Admin/Connect.php:79 msgid "You are not allowed to install plugins." msgstr "" #: src/Lite/Admin/Connect.php:87 msgid "There must be a non-developer Lite version installed to upgrade." msgstr "" #: src/Lite/Admin/Connect.php:94 msgid "Please enter your license key to connect." msgstr "" #: src/Lite/Admin/Connect.php:99 msgid "Only the Lite version can be upgraded." msgstr "" #: src/Lite/Admin/Connect.php:115 msgid "WPForms Pro is installed but not activated." msgstr "" #: src/Lite/Admin/Connect.php:166 msgid "There was an error while installing an upgrade. Please download the plugin from wpforms.com and install it manually." msgstr "" #: src/Lite/Admin/Connect.php:225 msgid "There was an error while installing an upgrade. Please check file system permissions and try again. Also, you can download the plugin from wpforms.com and install it manually." msgstr "" #: src/Lite/Admin/Connect.php:251 msgid "No key provided." msgstr "" #: src/Lite/Admin/Connect.php:282 msgid "Pro version installed but needs to be activated on the Plugins page inside your WordPress admin." msgstr "" #: src/Lite/Admin/ConnectSkin.php:31 msgid "There was an error installing WPForms Pro. Please try again." msgstr "" #: src/Lite/Admin/DashboardWidget.php:166 #: src/Lite/Admin/DashboardWidget.php:397 msgid "Show More" msgstr "" #: src/Lite/Admin/DashboardWidget.php:167 msgid "Show Less" msgstr "" #: src/Lite/Admin/DashboardWidget.php:259 msgid "Create Your First Form to Start Collecting Leads" msgstr "" #: src/Lite/Admin/DashboardWidget.php:260 #: templates/admin/empty-states/no-forms.php:18 msgid "You can use WPForms to build contact forms, surveys, payment forms, and more with just a few clicks." msgstr "" #: src/Lite/Admin/DashboardWidget.php:264 #: templates/admin/empty-states/no-forms.php:25 msgid "Create Your Form" msgstr "" #: src/Lite/Admin/DashboardWidget.php:310 msgid "View all Form Entries inside the WordPress Dashboard" msgstr "" #: src/Lite/Admin/DashboardWidget.php:311 msgid "Form entries reports are not available." msgstr "" #: src/Lite/Admin/DashboardWidget.php:312 msgid "Form entries are not stored in Lite." msgstr "" #: src/Lite/Admin/DashboardWidget.php:313 msgid "Upgrade to Pro and get access to the reports." msgstr "" #: src/Lite/Admin/DashboardWidget.php:327 msgid "Total Entries by Form" msgstr "" #: src/Lite/Admin/DashboardWidget.php:368 msgid "No entries were submitted yet." msgstr "" #: src/Lite/Admin/DashboardWidget.php:396 msgid "Show all forms" msgstr "" #: src/Lite/Admin/DashboardWidget.php:427 msgid "Recommended Plugin:" msgstr "" #: src/Lite/Admin/DashboardWidget.php:432 msgid "Install" msgstr "" #. translators: %s - WPForms version. #: src/Lite/Admin/DashboardWidget.php:455 msgid "Welcome to WPForms %s" msgstr "" #: src/Lite/Admin/Education/Admin/DidYouKnow.php:69 msgid "Entries are not stored in WPForms Lite" msgstr "" #: src/Lite/Admin/Education/Admin/DidYouKnow.php:70 msgid "Entries are available through email notifications. If you enable Entry Backups, you can restore them once you upgrade to WPForms Pro." msgstr "" #: src/Lite/Admin/Education/Admin/DidYouKnow.php:71 #: src/Lite/Admin/Education/LiteConnect.php:226 #: src/Lite/Integrations/LiteConnect/LiteConnect.php:112 msgid "Enable Entry Backups" msgstr "" #: src/Lite/Admin/Education/Admin/DidYouKnow.php:77 msgid "Entries Backups Are Enabled" msgstr "" #: src/Lite/Admin/Education/Admin/DidYouKnow.php:78 msgid "Restore Form Entries" msgstr "" #. translators: %d - backed up entries count. #: src/Lite/Admin/Education/Admin/DidYouKnow.php:159 #: src/Lite/Admin/Education/LiteConnect.php:265 msgid "%d entry backed up" msgid_plural "%d entries backed up" msgstr[0] "" msgstr[1] "" #. translators: %1$s - time when Lite Connect was enabled. #: src/Lite/Admin/Education/Admin/DidYouKnow.php:173 msgid "since %1$s" msgstr "" #: src/Lite/Admin/Education/Builder/Confirmations.php:66 msgid "Show entry preview after confirmation" msgstr "" #: src/Lite/Admin/Education/Builder/Confirmations.php:75 msgid "Show Entry Preview" msgstr "" #: src/Lite/Admin/Education/Builder/DidYouKnow.php:61 msgid "You can have multiple notifications with conditional logic." msgstr "" #: src/Lite/Admin/Education/Builder/DidYouKnow.php:74 msgid "You can have multiple confirmations with conditional logic." msgstr "" #: src/Lite/Admin/Education/Builder/Fields.php:81 msgid "Smart Logic" msgstr "" #: src/Lite/Admin/Education/Builder/Notifications.php:77 msgid "Enable File Upload Attachments" msgstr "" #: src/Lite/Admin/Education/Builder/Notifications.php:85 msgid "File Upload Attachments" msgstr "" #: src/Lite/Admin/Education/Builder/Notifications.php:102 msgid "Enable Entry CSV Attachment" msgstr "" #: src/Lite/Admin/Education/Builder/Notifications.php:110 msgid "Entry CSV Attachment" msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:227 msgid "No Thanks" msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:230 msgid "Enable AI Features" msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:231 msgid "AI Features Enabled" msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:234 msgid "Are you sure?" msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:235 msgid "If you disable Lite Connect, you will no longer be able to restore your entries when you upgrade to WPForms Pro." msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:236 msgid "Disable Entry Backups" msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:240 msgid "Entry Backups Enabled" msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:241 msgid "Awesome! If you decide to upgrade to WPForms Pro, you can restore your entries and will have instant access to reports." msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:242 msgid "Entry Backups Disabled" msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:243 msgid "Form Entry Backups were successfully disabled." msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:245 msgid "Unfortunately, the error occurs while updating Form Entry Backups setting. Please try again later." msgstr "" #. translators: %s - time when Lite Connect was enabled. #: src/Lite/Admin/Education/LiteConnect.php:278 msgid "since %s" msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:303 msgid "Enable Form Entry Backups" msgstr "" #: src/Lite/Admin/Education/LiteConnect.php:347 #: src/Lite/Admin/Education/LiteConnect.php:383 msgid "Enable Form Entry Backups for Free" msgstr "" #: src/Lite/Admin/Pages/Addons.php:92 msgid "Upgrade to Unlock WPForms Addons" msgstr "" #: src/Lite/Admin/Pages/Addons.php:93 msgid "Access powerful marketing and payment integrations, advanced form fields, and more when you purchase our Plus, Pro, or Elite plans." msgstr "" #: src/Lite/Admin/Settings/Access.php:86 msgid "Access" msgstr "" #: src/Lite/Admin/Settings/Access.php:129 #: src/Lite/Admin/Settings/Access.php:254 msgid "Create Forms" msgstr "" #: src/Lite/Admin/Settings/Access.php:130 #: src/Lite/Admin/Settings/Access.php:261 msgid "Delete Forms" msgstr "" #: src/Lite/Admin/Settings/Access.php:131 #: src/Lite/Admin/Settings/Access.php:267 msgid "Edit Forms Entries" msgstr "" #: src/Lite/Admin/Settings/Access.php:132 #: src/Lite/Admin/Settings/Access.php:255 msgid "Edit Forms" msgstr "" #: src/Lite/Admin/Settings/Access.php:133 #: src/Lite/Admin/Settings/Access.php:262 msgid "Delete Others Forms" msgstr "" #: src/Lite/Admin/Settings/Access.php:134 #: src/Lite/Admin/Settings/Access.php:268 msgid "Edit Others Forms Entries" msgstr "" #: src/Lite/Admin/Settings/Access.php:135 #: src/Lite/Admin/Settings/Access.php:256 msgid "Edit Others Forms" msgstr "" #: src/Lite/Admin/Settings/Access.php:136 #: src/Lite/Admin/Settings/Access.php:263 msgid "View Forms Entries" msgstr "" #: src/Lite/Admin/Settings/Access.php:137 #: src/Lite/Admin/Settings/Access.php:269 msgid "Delete Forms Entries" msgstr "" #: src/Lite/Admin/Settings/Access.php:138 #: src/Lite/Admin/Settings/Access.php:257 msgid "View Forms" msgstr "" #: src/Lite/Admin/Settings/Access.php:139 #: src/Lite/Admin/Settings/Access.php:264 msgid "View Others Forms Entries" msgstr "" #: src/Lite/Admin/Settings/Access.php:140 #: src/Lite/Admin/Settings/Access.php:270 msgid "Delete Others Forms Entries" msgstr "" #: src/Lite/Admin/Settings/Access.php:141 #: src/Lite/Admin/Settings/Access.php:258 msgid "View Others Forms" msgstr "" #: src/Lite/Admin/Settings/Access.php:147 #: src/Lite/Admin/Settings/Access.php:215 #: src/Lite/Admin/Settings/Access.php:216 msgid "Simple Built-in Controls" msgstr "" #: src/Lite/Admin/Settings/Access.php:152 #: src/Lite/Admin/Settings/Access.php:225 #: src/Lite/Admin/Settings/Access.php:226 msgid "Members Integration" msgstr "" #: src/Lite/Admin/Settings/Access.php:157 #: src/Lite/Admin/Settings/Access.php:235 #: src/Lite/Admin/Settings/Access.php:236 msgid "User Role Editor Integration" msgstr "" #: src/Lite/Admin/Settings/Access.php:162 #: src/Lite/Admin/Settings/Access.php:184 msgid "Access Controls" msgstr "" #: src/Lite/Admin/Settings/Access.php:165 msgid "Access controls allows you to manage and customize access to WPForms functionality. You can easily grant or restrict access using the simple built-in controls, or use our official integrations with Members and User Role Editor plugins." msgstr "" #: src/Lite/Admin/Settings/Access.php:168 #: src/Lite/Admin/Settings/Access.php:274 msgid "Custom access to the following capabilities…" msgstr "" #: src/Lite/Admin/Settings/Access.php:186 msgid "Access controls allows you to manage and customize access to WPForms functionality." msgstr "" #: src/Lite/Admin/Settings/Access.php:187 msgid "You can easily grant or restrict access using the simple built-in controls, or use our official integrations with Members and User Role Editor plugins." msgstr "" #: src/Lite/Emails/Summaries.php:82 msgid "Calculate WPForms Lite Weekly Entries Count" msgstr "" #: src/Lite/Integrations/LiteConnect/LiteConnect.php:111 msgid "Lite Connect" msgstr "" #. translators: %s - upgrade to WPForms Pro landing page URL. #: src/Lite/Integrations/LiteConnect/LiteConnect.php:119 msgid "Your form entries are not being stored locally, but are backed up remotely. If you upgrade to WPForms PRO, you can restore your entries and they’ll be available in the WordPress dashboard." msgstr "" #. translators: %s - upgrade to WPForms Pro landing page URL. #: src/Lite/Integrations/LiteConnect/LiteConnect.php:134 msgid "Your form entries are not being stored in WordPress, and your entry backups are not active. If there's a problem with deliverability, you'll lose form entries. We recommend that you enable Entry Backups, especially if you're considering upgrading to WPForms PRO." msgstr "" #: src/Logger/ListTable.php:290 #: src/Logger/ListTable.php:472 msgid "Log Title" msgstr "" #: src/Logger/ListTable.php:292 #: src/Logger/ListTable.php:495 #: src/SmartTags/SmartTags.php:111 msgid "Form ID" msgstr "" #: src/Logger/ListTable.php:293 #: src/Logger/ListTable.php:485 msgid "Types" msgstr "" #: src/Logger/ListTable.php:307 msgid "View Logs" msgstr "" #. translators: %s - search query. #: src/Logger/ListTable.php:312 msgid "Search results for \"%s\"" msgstr "" #: src/Logger/ListTable.php:321 msgid "Search Logs" msgstr "" #: src/Logger/ListTable.php:376 msgid "Delete All Logs" msgstr "" #: src/Logger/ListTable.php:416 msgid "No logs found." msgstr "" #: src/Logger/ListTable.php:448 msgid "All Logs" msgstr "" #: src/Logger/ListTable.php:491 msgid "Log ID" msgstr "" #: src/Logger/ListTable.php:507 msgid "Entry ID" msgstr "" #: src/Logger/ListTable.php:519 #: src/SmartTags/SmartTags.php:119 msgid "User ID" msgstr "" #: src/Logger/Log.php:104 msgid "Errors" msgstr "" #: src/Logger/Log.php:107 msgid "Providers" msgstr "" #: src/Logger/Log.php:108 msgid "Security" msgstr "" #: src/Logger/Log.php:109 msgid "Spam" msgstr "" #: src/Logger/Log.php:110 msgid "Translation" msgstr "" #: src/Logger/Log.php:206 msgid "Record ID not found" msgstr "" #: src/Logger/Log.php:212 msgid "No such record." msgstr "" #: src/Migrations/Upgrade177.php:29 msgid "Please fill out all blanks." msgstr "" #: src/Pro/Forms/Fields/Traits/ContentInput.php:164 msgid "Insert into form" msgstr "" #: src/Pro/Forms/Fields/Traits/ContentInput.php:165 msgid "Uploaded to this form" msgstr "" #: src/Pro/Forms/Fields/Traits/ContentInput.php:305 msgid "Add Media" msgstr "" #: src/Pro/Forms/Fields/Traits/ContentInput.php:310 msgid "Visual" msgstr "" #: src/Pro/Forms/Fields/Traits/ContentInput.php:355 msgid "

Add Text and Images to Your Form With Ease

To get started, replace this text with your own.

" msgstr "" #: src/Pro/Forms/Fields/Traits/ContentInput.php:356 msgid "Expand Editor" msgstr "" #: src/Pro/Forms/Fields/Traits/ContentInput.php:357 msgid "Collapse Editor" msgstr "" #: src/Pro/Forms/Fields/Traits/ContentInput.php:358 msgid "Update Preview" msgstr "" #: src/Providers/Provider/Settings/FormBuilder.php:122 msgid "Custom Field Name" msgstr "" #: src/Providers/Provider/Settings/FormBuilder.php:123 msgid "Form Field Value" msgstr "" #: src/Providers/Provider/Settings/FormBuilder.php:149 #: src/Providers/Provider/Settings/FormBuilder.php:204 msgid "Field Name" msgstr "" #: src/Providers/Provider/Settings/FormBuilder.php:156 #: src/Providers/Provider/Settings/FormBuilder.php:211 msgid "--- Select Form Field ---" msgstr "" #: src/Providers/Provider/Settings/FormBuilder.php:173 #: src/Providers/Provider/Settings/FormBuilder.php:226 msgid "Add Another" msgstr "" #: src/Providers/Provider/Settings/FormBuilder.php:179 msgid "Remove" msgstr "" #: src/Providers/Provider/Settings/FormBuilder.php:242 msgid "Map custom fields (or properties) to form fields values." msgstr "" #: src/Providers/Provider/Settings/FormBuilder.php:307 msgid "Something went wrong while performing an AJAX request." msgstr "" #. translators: %s - provider name. #: src/Providers/Provider/Settings/FormBuilder.php:457 msgid "Get the most out of WPForms — use it with an active %s account." msgstr "" #: src/Providers/Provider/Settings/FormBuilder.php:506 msgid "Add New Connection" msgstr "" #: src/Providers/Provider/Settings/PageIntegrations.php:171 msgid "No Label" msgstr "" #: src/Providers/Provider/Settings/PageIntegrations.php:281 msgid "Missing data." msgstr "" #: src/Providers/Provider/Settings/PageIntegrations.php:297 msgid "Connection missing." msgstr "" #: src/Providers/Provider/Settings/PageIntegrations.php:323 msgid "You do not have permissions." msgstr "" #: src/Providers/Provider/Settings/PageIntegrations.php:331 msgid "Missing required data in payload." msgstr "" #. translators: %s - required PHP version. #: src/Requirements/Requirements.php:854 msgid "Read more for additional information." msgstr "" #: src/Requirements/Requirements.php:870 msgid "WPForms plugin" msgstr "" #. translators: translators: %1$s - WPForms addon name. #: src/Requirements/Requirements.php:875 msgid "%1$s addon" msgstr "" #. translators: translators: %1$s - WPForms plugin or addon name, %2$d - requirements message. #: src/Requirements/Requirements.php:882 msgid "The %1$s requires %2$s." msgstr "" #. translators: %s - PHP extension name(s). #: src/Requirements/Requirements.php:975 msgid "%s PHP extension" msgid_plural "%s PHP extensions" msgstr[0] "" msgstr[1] "" #. translators: %s - license name(s). #: src/Requirements/Requirements.php:1046 msgid "%s license" msgstr "" #: src/Requirements/Requirements.php:1069 msgid "self" msgstr "" #. translators: %1$s - What is being checked (PHP, WPForms, etc.), %2$s - required version. This is used as the completion of the sentence "The {addon name} addon requires {here goes this string}". #: src/Requirements/Requirements.php:1156 msgid "%1$s %2$s or above" msgstr "" #. translators: %1$s - What is being checked (PHP, WPForms, etc.), %2$s - required version. This is used as the completion of the sentence "The {addon name} addon requires {here goes this string}". #: src/Requirements/Requirements.php:1158 msgid "%1$s %2$s or below" msgstr "" #. translators: %1$s - What is being checked (PHP, WPForms, etc.), %2$s - required version. This is used as the completion of the sentence "The {addon name} addon requires {here goes this string}". #: src/Requirements/Requirements.php:1161 msgid "a newer version of %1$s than %2$s" msgstr "" #. translators: %1$s - What is being checked (PHP, WPForms, etc.), %2$s - required version. This is used as the completion of the sentence "The {addon name} addon requires {here goes this string}". #: src/Requirements/Requirements.php:1163 msgid "an older version of %1$s than %2$s" msgstr "" #: src/SmartTags/SmartTag/OrderSummary.php:191 msgid "Subtotal" msgstr "" #. translators: %s - Coupon value. #: src/SmartTags/SmartTag/OrderSummary.php:198 msgid "Coupon (%s)" msgstr "" #: src/SmartTags/SmartTags.php:107 msgid "Site Administrator Email" msgstr "" #: src/SmartTags/SmartTags.php:108 msgid "Field ID" msgstr "" #: src/SmartTags/SmartTags.php:109 msgid "Field HTML ID" msgstr "" #: src/SmartTags/SmartTags.php:110 msgid "Field Value" msgstr "" #: src/SmartTags/SmartTags.php:113 msgid "Embedded Post/Page Title" msgstr "" #: src/SmartTags/SmartTags.php:114 msgid "Embedded Post/Page URL" msgstr "" #: src/SmartTags/SmartTags.php:115 msgid "Embedded Post/Page ID" msgstr "" #: src/SmartTags/SmartTags.php:117 msgid "Query String Variable" msgstr "" #: src/SmartTags/SmartTags.php:118 msgid "User IP Address" msgstr "" #: src/SmartTags/SmartTags.php:120 msgid "User Display Name" msgstr "" #: src/SmartTags/SmartTags.php:121 msgid "User Full Name" msgstr "" #: src/SmartTags/SmartTags.php:122 msgid "User First Name" msgstr "" #: src/SmartTags/SmartTags.php:123 msgid "User Last Name" msgstr "" #: src/SmartTags/SmartTags.php:124 msgid "User Email" msgstr "" #: src/SmartTags/SmartTags.php:125 msgid "User Meta" msgstr "" #: src/SmartTags/SmartTags.php:126 msgid "Author ID" msgstr "" #: src/SmartTags/SmartTags.php:127 msgid "Author Name" msgstr "" #: src/SmartTags/SmartTags.php:128 msgid "Author Email" msgstr "" #: src/SmartTags/SmartTags.php:129 msgid "Referrer URL" msgstr "" #: src/SmartTags/SmartTags.php:130 msgid "Login URL" msgstr "" #: src/SmartTags/SmartTags.php:131 msgid "Logout URL" msgstr "" #: src/SmartTags/SmartTags.php:132 msgid "Register URL" msgstr "" #: src/SmartTags/SmartTags.php:133 msgid "Lost Password URL" msgstr "" #: src/SmartTags/SmartTags.php:134 msgid "Unique Value" msgstr "" #: src/SmartTags/SmartTags.php:135 msgid "Site Name" msgstr "" #: src/SmartTags/SmartTags.php:136 #: templates/fields/total/summary-preview.php:73 msgid "Order Summary" msgstr "" #: templates/admin/challenge/builder.php:16 msgid "Give your form a name so you can easily identify it." msgstr "" #: templates/admin/challenge/builder.php:17 #: templates/admin/challenge/builder.php:27 #: templates/admin/challenge/builder.php:33 #: templates/admin/challenge/embed.php:44 #: templates/admin/form-embed-wizard/tooltip.php:41 msgid "Done" msgstr "" #: templates/admin/challenge/builder.php:22 msgid "Build your form from scratch or use one of our pre-made templates." msgstr "" #: templates/admin/challenge/builder.php:26 msgid "You can add additional fields to your form, if you need them." msgstr "" #: templates/admin/challenge/builder.php:31 msgid "Check Notification Settings" msgstr "" #: templates/admin/challenge/builder.php:32 msgid "The default notification settings might be sufficient, but double‑check to be sure." msgstr "" #: templates/admin/challenge/builder.php:40 msgid "Welcome to the Form Builder" msgstr "" #: templates/admin/challenge/builder.php:41 msgid "Our form builder is a full-screen, distraction-free experience where you manage your forms. The following steps will walk you through essential areas." msgstr "" #: templates/admin/challenge/builder.php:42 #: templates/admin/form-embed-wizard/popup.php:41 msgid "Let’s Go!" msgstr "" #: templates/admin/challenge/embed.php:19 #: templates/admin/form-embed-wizard/tooltip.php:17 msgid "Add a Block" msgstr "" #. translators: %s - link to the WPForms documentation page. #: templates/admin/challenge/embed.php:25 #: templates/admin/form-embed-wizard/tooltip.php:22 msgid "Click the plus button, search for WPForms, click the block to
embed it. Learn More" msgstr "" #: templates/admin/challenge/embed.php:41 #: templates/admin/challenge/modal.php:42 #: templates/admin/form-embed-wizard/popup.php:18 #: templates/admin/form-embed-wizard/tooltip.php:38 msgid "Embed in a Page" msgstr "" #: templates/admin/challenge/embed.php:42 #: templates/admin/form-embed-wizard/tooltip.php:39 msgid "Click the “Add Form” button, select your form, then add the embed code." msgstr "" #: templates/admin/challenge/embed.php:53 msgid "Congrats, You Did It!" msgstr "" #. translators: %1$s - number of minutes in HTML container, %2$s - singular or plural form of 'minute', %3$s - number of seconds in HTML container, %4$s - singular or plural form of 'second', %5$s - 5 rating star symbols HTML. #: templates/admin/challenge/embed.php:61 msgid "You completed the WPForms Challenge in %1$s %2$s %3$s %4$s. Share your success story with other WPForms users and help us spread the word by giving WPForms a 5-star rating (%5$s) on WordPress.org. Thanks for your support and we look forward to bringing you more awesome features." msgstr "" #: templates/admin/challenge/embed.php:63 #: templates/admin/challenge/embed.php:101 #: templates/admin/challenge/modal.php:31 msgid "minute" msgid_plural "minutes" msgstr[0] "" msgstr[1] "" #: templates/admin/challenge/embed.php:65 msgid "second" msgid_plural "seconds" msgstr[0] "" msgstr[1] "" #: templates/admin/challenge/embed.php:81 msgid "Rate WPForms on WordPress.org" msgstr "" #: templates/admin/challenge/embed.php:93 msgid "Do you need more help?" msgstr "" #. translators: %1$d - number of minutes, %2$s - singular or plural form of 'minute'. #: templates/admin/challenge/embed.php:99 msgid "We're sorry that it took longer than %1$d %2$s to publish your form. Our goal is to create the most beginner-friendly WordPress form plugin.
How can we help you to be successful? Please send us your feedback. Our support team is standing by to help." msgstr "" #: templates/admin/challenge/embed.php:110 msgid "Yes, I give WPForms permission to contact me for any follow up questions." msgstr "" #: templates/admin/challenge/embed.php:113 msgid "Submit Feedback" msgstr "" #: templates/admin/challenge/modal.php:21 msgid "Toggle list" msgstr "" #: templates/admin/challenge/modal.php:22 msgid "Skip challenge" msgstr "" #: templates/admin/challenge/modal.php:23 msgid "Cancel challenge" msgstr "" #. translators: %1$d - number of minutes, %2$s - singular or plural form of 'minute'. #: templates/admin/challenge/modal.php:29 msgid "Complete the WPForms Challenge and get up and running within %1$d %2$s." msgstr "" #: templates/admin/challenge/modal.php:40 msgid "Add Fields to Your Form" msgstr "" #: templates/admin/challenge/modal.php:41 msgid "Check Notifications" msgstr "" #: templates/admin/challenge/modal.php:43 msgid "Challenge Complete" msgstr "" #: templates/admin/challenge/modal.php:54 msgid "WPForms Challenge" msgstr "" #. translators: %s - minutes in 2:00 format. #: templates/admin/challenge/modal.php:59 msgid "%s remaining" msgstr "" #: templates/admin/challenge/modal.php:70 msgid "Start Challenge" msgstr "" #: templates/admin/challenge/modal.php:73 msgid "Pause" msgstr "" #: templates/admin/challenge/modal.php:75 msgid "End Challenge" msgstr "" #: templates/admin/challenge/welcome.php:15 msgid "Take the WPForms Challenge" msgstr "" #: templates/admin/challenge/welcome.php:16 msgid "Create your first form with our guided setup wizard in less than 5 minutes to experience the WPForms difference." msgstr "" #: templates/admin/challenge/welcome.php:19 msgid "Start the WPForms Challenge" msgstr "" #: templates/admin/components/datepicker.php:58 msgid "Datepicker options" msgstr "" #: templates/admin/dashboard/widget/settings.php:27 msgid "Graph Style" msgstr "" #: templates/admin/dashboard/widget/settings.php:31 msgid "Bar" msgstr "" #: templates/admin/dashboard/widget/settings.php:35 msgid "Line" msgstr "" #: templates/admin/dashboard/widget/settings.php:51 msgid "WordPress" msgstr "" #: templates/admin/empty-states/no-forms.php:15 #: templates/admin/empty-states/no-user-templates.php:15 #: templates/admin/empty-states/payments/get-started.php:27 #: templates/admin/empty-states/payments/no-payments.php:16 #: templates/admin/payments/single/no-payment.php:17 #: templates/builder/fullscreen/abort-message.php:18 #: templates/emails/summary-body-plain.php:23 #: templates/emails/summary-body.php:36 msgid "Hi there!" msgstr "" #: templates/admin/empty-states/no-forms.php:17 msgid "It looks like you haven’t created any forms yet." msgstr "" #. translators: %s - URL to the documentation article. #: templates/admin/empty-states/no-forms.php:32 msgid "Need some help? Check out our comprehensive guide." msgstr "" #: templates/admin/empty-states/no-user-templates.php:18 msgid "Did you know you can save your forms as reusable templates?" msgstr "" #: templates/admin/empty-states/no-user-templates.php:19 msgid "Save your custom forms to the templates library for quick and easy use." msgstr "" #. translators: %s - URL to the documentation article. #: templates/admin/empty-states/no-user-templates.php:27 msgid "Need some help? Check out our documentation." msgstr "" #: templates/admin/empty-states/payments/get-started.php:28 msgid "Ready to start collecting payments from your customers?" msgstr "" #. translators: %s - URL to the comprehensive guide. #: templates/admin/empty-states/payments/get-started.php:42 #: templates/admin/empty-states/payments/no-payments.php:31 msgid "Need some help? Check out our comprehensive guide." msgstr "" #: templates/admin/empty-states/payments/no-payments.php:17 msgid "It looks like you haven't received any payments yet." msgstr "" #: templates/admin/empty-states/payments/no-payments.php:18 msgid "Your payment gateway has been configured and you're ready to go." msgstr "" #: templates/admin/empty-states/payments/no-payments.php:23 msgid "Go To All Forms" msgstr "" #: templates/admin/form-embed-wizard/popup.php:20 msgid "We can help embed your form with just a few clicks!" msgstr "" #: templates/admin/form-embed-wizard/popup.php:23 msgid "Would you like to embed your form in an existing page, or create a new one?" msgstr "" #: templates/admin/form-embed-wizard/popup.php:29 msgid "Select the page you would like to embed your form in." msgstr "" #: templates/admin/form-embed-wizard/popup.php:32 msgid "What would you like to call the new page?" msgstr "" #: templates/admin/form-embed-wizard/popup.php:35 msgid "Select Existing Page" msgstr "" #: templates/admin/form-embed-wizard/popup.php:36 msgid "Create New Page" msgstr "" #: templates/admin/form-embed-wizard/popup.php:40 msgid "Name Your Page" msgstr "" #. translators: %1$s - video tutorial toggle CSS classes, %2$s - shortcode toggle CSS classes. #: templates/admin/form-embed-wizard/popup.php:58 msgid "You can also embed your form manually or use a shortcode" msgstr "" #. translators: %1$s - video tutorial toggle CSS classes, %2$s - shortcode toggle CSS classes. #: templates/admin/form-embed-wizard/popup.php:69 msgid "You can embed your form using the WPForms block or a shortcode." msgstr "" #: templates/admin/form-embed-wizard/popup.php:82 msgid "Copy embed code to clipboard" msgstr "" #: templates/admin/form-embed-wizard/popup.php:89 msgid "Go back" msgstr "" #: templates/admin/forms/bulk-edit-tags.php:34 msgid "Update" msgstr "" #: templates/admin/forms/search-reset.php:25 msgid "Clear search and return to All Forms" msgstr "" #: templates/admin/notifications.php:36 msgid "Previous message" msgstr "" #: templates/admin/notifications.php:40 msgid "Next message" msgstr "" #: templates/admin/pages/constant-contact.php:15 msgid "Constant Contact" msgstr "" #: templates/admin/pages/constant-contact.php:17 msgid "Grow Your Website with WPForms + Email Marketing" msgstr "" #: templates/admin/pages/constant-contact.php:18 msgid "Wondering if email marketing is really worth your time?" msgstr "" #: templates/admin/pages/constant-contact.php:22 msgid "Email is hands-down the most effective way to nurture leads and turn them into customers, with a return on investment (ROI) of $44 back for every $1 spent according to DMA." msgstr "" #: templates/admin/pages/constant-contact.php:27 msgid "Here are 3 big reasons why every smart business in the world has an email list:" msgstr "" #: templates/admin/pages/constant-contact.php:41 msgid "Email is still #1 - At least 91% of consumers check their email on a daily basis. You get direct access to your subscribers, without having to play by social media's rules and algorithms." msgstr "" #: templates/admin/pages/constant-contact.php:49 msgid "You own your email list - Unlike with social media, your list is your property and no one can revoke your access to it." msgstr "" #: templates/admin/pages/constant-contact.php:57 msgid "Email converts - People who buy products marketed through email spend 138% more than those who don't receive email offers." msgstr "" #: templates/admin/pages/constant-contact.php:63 msgid "That's why it's crucial to start collecting email addresses and building your list as soon as possible." msgstr "" #. translators: %s - WPBeginners.com Guide to Email Lists URL. #: templates/admin/pages/constant-contact.php:68 msgid "For more details, see this guide on why building your email list is so important." msgstr "" #: templates/admin/pages/constant-contact.php:82 msgid "You've Already Started - Here's the Next Step (It's Easy)" msgstr "" #: templates/admin/pages/constant-contact.php:83 msgid "Here are the 3 things you need to build an email list:" msgstr "" #: templates/admin/pages/constant-contact.php:85 msgid "A Website or Blog" msgstr "" #: templates/admin/pages/constant-contact.php:86 msgid "High-Converting Form Builder" msgstr "" #: templates/admin/pages/constant-contact.php:87 msgid "The Best Email Marketing Service" msgstr "" #: templates/admin/pages/constant-contact.php:89 msgid "With a powerful email marketing service like Constant Contact, you can instantly send out mass notifications and beautifully designed newsletters to engage your subscribers." msgstr "" #: templates/admin/pages/constant-contact.php:92 msgid "Get Started with Constant Contact for Free" msgstr "" #: templates/admin/pages/constant-contact.php:95 msgid "WPForms plugin makes it fast and easy to capture all kinds of visitor information right from your WordPress site - even if you don't have a Constant Contact account." msgstr "" #: templates/admin/pages/constant-contact.php:96 msgid "But when you combine WPForms with Constant Contact, you can nurture your contacts and engage with them even after they leave your website. When you use Constant Contact + WPForms together, you can:" msgstr "" #: templates/admin/pages/constant-contact.php:98 msgid "Seamlessly add new contacts to your email list" msgstr "" #: templates/admin/pages/constant-contact.php:99 msgid "Create and send professional email newsletters" msgstr "" #: templates/admin/pages/constant-contact.php:100 msgid "Get expert marketing and support" msgstr "" #: templates/admin/pages/constant-contact.php:104 msgid "Try Constant Contact Today" msgstr "" #: templates/admin/pages/constant-contact.php:108 msgid "WPForms Makes List Building Easy" msgstr "" #: templates/admin/pages/constant-contact.php:109 msgid "When creating WPForms, our goal was to make a WordPress forms plugin that's both EASY and POWERFUL." msgstr "" #: templates/admin/pages/constant-contact.php:110 msgid "We made the form creation process extremely intuitive, so you can create a form to start capturing emails within 5 minutes or less." msgstr "" #: templates/admin/pages/constant-contact.php:111 msgid "Here's how it works." msgstr "" #: templates/admin/pages/constant-contact.php:116 msgid "Select from our pre-built templates, or create a form from scratch." msgstr "" #: templates/admin/pages/constant-contact.php:117 msgid "Drag and drop any field you want onto your signup form." msgstr "" #: templates/admin/pages/constant-contact.php:118 msgid "Connect your Constant Contact email list." msgstr "" #: templates/admin/pages/constant-contact.php:119 msgid "Add your new form to any post, page, or sidebar." msgstr "" #: templates/admin/pages/constant-contact.php:136 msgid "It doesn't matter what kind of business you run, what kind of website you have, or what industry you are in - you need to start building your email list today." msgstr "" #: templates/admin/pages/constant-contact.php:137 msgid "With Constant Contact + WPForms, growing your list is easy." msgstr "" #: templates/admin/payments/mode-toggle.php:18 msgid "Toggle between live and test data" msgstr "" #: templates/admin/payments/mode-toggle.php:20 msgid "Test Data" msgstr "" #: templates/admin/payments/reports.php:20 msgid "Payments report indicators" msgstr "" #: templates/admin/payments/reports.php:22 msgid "List of data points available for filtering. Click a data point for a detailed report." msgstr "" #: templates/admin/payments/reports.php:45 msgid "Comparison to previous period" msgstr "" #. translators: %d - number of payments found. #: templates/admin/payments/reset-filter-notice.php:23 msgid "Found %d payment" msgid_plural "Found %d payments" msgstr[0] "" msgstr[1] "" #: templates/admin/payments/reset-filter-notice.php:52 msgid "Reset search" msgstr "" #: templates/admin/payments/single/advanced-details.php:19 msgid "Advanced Details" msgstr "" #: templates/admin/payments/single/details.php:25 msgid "Details" msgstr "" #: templates/admin/payments/single/details.php:35 msgid "Submitted:" msgstr "" #: templates/admin/payments/single/details.php:43 msgid "Gateway:" msgstr "" #: templates/admin/payments/single/details.php:50 msgid "Form:" msgstr "" #: templates/admin/payments/single/details.php:69 msgid "Payment Mode:" msgstr "" #: templates/admin/payments/single/entry-details.php:24 msgid "Entry Summary" msgstr "" #: templates/admin/payments/single/entry-details.php:62 msgid "View Entry" msgstr "" #: templates/admin/payments/single/heading-navigation.php:25 #: templates/admin/payments/single/no-payment.php:24 msgid "Back to All Payments" msgstr "" #. translators: %1$d - current number of payment, %2$d - total number of payments. #: templates/admin/payments/single/heading-navigation.php:32 msgid "Payment %1$d of %2$d" msgstr "" #: templates/admin/payments/single/heading-navigation.php:41 msgid "Previous payment" msgstr "" #: templates/admin/payments/single/heading-navigation.php:48 msgid "Current payment" msgstr "" #: templates/admin/payments/single/heading-navigation.php:53 msgid "Next payment" msgstr "" #: templates/admin/payments/single/log.php:26 msgid "No Logs" msgstr "" #: templates/admin/payments/single/payment-details.php:62 msgid "Status:" msgstr "" #: templates/admin/payments/single/payment-history.php:26 msgid "Subscription Renewal History Table" msgstr "" #: templates/admin/payments/single/payment-history.php:29 #: templates/admin/payments/single/payment-history.php:42 msgid "Payment ID" msgstr "" #: templates/admin/settings/email-heading.php:15 msgid "Customize your email template and sending preferences." msgstr "" #: templates/admin/settings/hcaptcha-description.php:12 msgid "hCaptcha is a free and privacy-oriented spam prevention service. Within your forms, hCaptcha will display a checkbox asking users to prove they're human (much like Google's v2 Checkbox reCAPTCHA). This is a simple step for legitimate site visitors, but is extremely effective at blocking spam." msgstr "" #. translators: %s - WPForms.com Setup hCaptcha URL. #: templates/admin/settings/hcaptcha-description.php:17 msgid "For more details on how hCaptcha works, as well as a step by step setup guide, please check out our documentation." msgstr "" #: templates/admin/settings/recaptcha-description.php:12 msgid "reCAPTCHA is a free anti-spam service from Google which helps to protect your website from spam and abuse while letting real people pass through with ease." msgstr "" #: templates/admin/settings/recaptcha-description.php:13 msgid "Google offers 3 versions of reCAPTCHA (all supported within WPForms):" msgstr "" #: templates/admin/settings/recaptcha-description.php:18 msgid "v2 Checkbox reCAPTCHA: Prompts users to check a box to prove they're human." msgstr "" #: templates/admin/settings/recaptcha-description.php:26 msgid "v2 Invisible reCAPTCHA: Uses advanced technology to detect real users without requiring any input." msgstr "" #: templates/admin/settings/recaptcha-description.php:34 msgid "v3 reCAPTCHA: Uses a behind-the-scenes scoring system to detect abusive traffic, and lets you decide the minimum passing score. Recommended for advanced use only (or if using Google AMP)." msgstr "" #: templates/admin/settings/recaptcha-description.php:40 msgid "Sites already using one type of reCAPTCHA will need to create new site keys before switching to a different option." msgstr "" #. translators: %s - WPForms.com Setup reCAPTCHA URL. #: templates/admin/settings/recaptcha-description.php:45 msgid "Read our walk through to learn more and for step-by-step directions." msgstr "" #: templates/admin/settings/turnstile-description.php:12 msgid "Cloudflare Turnstile is a free, CAPTCHA-like service for preventing form spam while protecting data privacy. It offers a user-friendly experience by confirming visitors are real humans without requiring them to solve puzzles or math questions." msgstr "" #. translators: %s - WPForms.com Setup Cloudflare Turnstile URL. #: templates/admin/settings/turnstile-description.php:17 msgid "For more details on how Turnstile works, as well as a step by step setup guide, please check out our documentation." msgstr "" #: templates/admin/splash/section.php:31 msgid "New Feature" msgstr "" #: templates/builder/field-context-menu.php:55 msgid "Mark as Optional" msgstr "" #: templates/builder/field-context-menu.php:56 msgid "Mark as Required" msgstr "" #: templates/builder/field-context-menu.php:65 msgid "Show Label" msgstr "" #: templates/builder/field-context-menu.php:120 msgid "Edit Smart Logic" msgstr "" #: templates/builder/fullscreen/abort-message.php:27 #: templates/builder/fullscreen/ie-notice.php:40 #: templates/builder/fullscreen/mobile-notice.php:22 msgid "Back to All Forms" msgstr "" #: templates/builder/fullscreen/ie-notice.php:16 msgid "You are using an outdated browser!" msgstr "" #. translators: %1$s - link to the update Internet Explorer page, %2$s - link to the browse happy page. #: templates/builder/fullscreen/ie-notice.php:22 msgid "The Internet Explorer browser no more supported.
Our form builder is optimized for modern browsers.
Please install Microsoft Edge or learn
how to browse happy." msgstr "" #: templates/builder/fullscreen/mobile-notice.php:17 msgid "Our form builder is optimized for desktop computers." msgstr "" #: templates/builder/fullscreen/mobile-notice.php:18 msgid "We recommend that you edit your forms on a bigger screen. If you'd like to proceed, please understand that some functionality might not behave as expected." msgstr "" #: templates/builder/help.php:42 msgid "Ask a question or search the docs..." msgstr "" #: templates/builder/help.php:43 msgid "Clear" msgstr "" #: templates/builder/help.php:51 msgid "No docs found" msgstr "" #: templates/builder/help.php:62 msgid "View Documentation" msgstr "" #: templates/builder/help.php:63 msgid "Browse documentation, reference material, and tutorials for WPForms." msgstr "" #: templates/builder/help.php:68 msgid "View All Documentation" msgstr "" #: templates/builder/help.php:74 msgid "Get Support" msgstr "" #: templates/builder/help.php:77 msgid "Submit a ticket and our world class support team will be in touch soon." msgstr "" #: templates/builder/help.php:82 msgid "Submit a Support Ticket" msgstr "" #: templates/builder/help.php:86 msgid "Upgrade to WPForms Pro to access our world class customer support." msgstr "" #: templates/builder/help.php:122 msgid "View All" msgstr "" #: templates/builder/help.php:132 msgid "Unfortunately the error occurred while downloading help data." msgstr "" #. translators: %1$s - Opening anchor tag, %2$s - Closing anchor tag. #: templates/builder/notifications/email-template-link.php:20 msgid "Select a template to use for this notification or %1$sview templates%2$s." msgstr "" #: templates/builder/notifications/email-template-modal.php:21 msgid "Choose a Template" msgstr "" #: templates/builder/notifications/email-template-modal.php:24 msgid "Browse through our collection of email notification templates." msgstr "" #: templates/builder/revisions/list.php:30 msgid "Current Version" msgstr "" #. translators: %s - form revision author name. #: templates/builder/revisions/list.php:38 #: templates/builder/revisions/list.php:68 msgid "by %s" msgstr "" #: templates/builder/revisions/list.php:39 #: templates/builder/revisions/list.php:69 msgid "Unknown user" msgstr "" #: templates/builder/revisions/notice-disabled.php:20 msgid "Form Revisions Are Disabled" msgstr "" #: templates/builder/revisions/notice-disabled.php:21 msgid "It appears that revisions are disabled on your WordPress installation. You can enable revisions for WPForms while leaving posts revisions disabled." msgstr "" #: templates/builder/revisions/notice-disabled.php:24 #: templates/builder/revisions/notice-limited.php:33 msgid "Learn How" msgstr "" #: templates/builder/revisions/notice-limited.php:22 msgid "Form Revisions Are Limited" msgstr "" #. translators: %d - maximum number of revisions to keep. #: templates/builder/revisions/notice-limited.php:26 msgid "Revisions are enabled, but they’re limited to %d. You can increase this by making a simple change to your WordPress configuration." msgstr "" #: templates/builder/templates-item.php:83 msgid "Remove from Favorites" msgstr "" #: templates/builder/templates-item.php:84 msgid "Mark as Favorite" msgstr "" #: templates/builder/templates-item.php:115 msgid "View Demo" msgstr "" #: templates/education/admin/edit-post/notice.php:17 msgid "Oh hey, it looks like you're working on a Contact page." msgstr "" #: templates/education/admin/payments/single-page.php:16 msgid "Get More Out of Payments" msgstr "" #. translators: %s - WPForms.com Upgrade page URL. #: templates/education/admin/payments/single-page.php:22 msgid "Unlock conditional logic, coupons, lower Stripe fees, and more. Upgrade to Pro!" msgstr "" #: templates/education/admin/payments/single-page.php:43 #: templates/education/admin/settings/smtp-notice.php:37 msgid "Dismiss this notice" msgstr "" #. translators: %1$s - link to WPForms SMTP page. #: templates/education/admin/settings/smtp-notice.php:20 msgid "Solve common email deliverability issues for good. Get WP Mail SMTP!" msgstr "" #. translators: %1$s - site URL; %2$s - site title. #: templates/emails/classic-footer.php:26 #: templates/emails/compact-footer.php:26 msgid "Sent from %2$s" msgstr "" #: templates/emails/summary-body-plain.php:25 #: templates/emails/summary-body.php:37 msgid "Let’s see how your forms performed in the past week." msgstr "" #: templates/emails/summary-body-plain.php:28 msgid "Below is the total number of submissions for each form, however actual entries are not stored in WPForms Lite." msgstr "" #: templates/emails/summary-body-plain.php:29 msgid "To view future entries inside your WordPress dashboard, and get more detailed reports, consider upgrading to Pro:" msgstr "" #. translators: %1$d - number of entries. #: templates/emails/summary-body-plain.php:38 #: templates/emails/summary-body.php:126 msgid "%1$d Total" msgstr "" #: templates/emails/summary-body-plain.php:44 #: templates/emails/summary-body.php:132 msgid "Entry This Week" msgid_plural "Entries This Week" msgstr[0] "" msgstr[1] "" #: templates/emails/summary-body-plain.php:67 #: templates/emails/summary-body.php:201 msgid "It appears you do not have any form entries yet." msgstr "" #: templates/emails/summary-body.php:40 msgid "Below is the total number of submissions for each form. However, form entries are not stored by WPForms Lite." msgstr "" #: templates/emails/summary-body.php:45 msgid "We’ve got you covered!" msgstr "" #. translators: %1$s - WPForms.com Upgrade page URL. #: templates/emails/summary-body.php:49 msgid "Your entries are being backed up securely in the cloud. When you’re ready to manage your entries inside WordPress, just upgrade to Pro and we’ll automatically import them in seconds!" msgstr "" #: templates/emails/summary-body.php:67 msgid "Check out what else you’ll get with your Pro license." msgstr "" #: templates/emails/summary-body.php:73 msgid "Note: Entry backups are not enabled." msgstr "" #: templates/emails/summary-body.php:74 msgid "We recommend that you enable entry backups to guard against lost entries." msgstr "" #. translators: %1$s - WPForms.com Documentation page URL. #: templates/emails/summary-body.php:80 msgid "Backups are completely free, 100%% secure, and you can turn them on in a few clicks! Enable entry backups now." msgstr "" #. translators: %1$s - WPForms.com Upgrade page URL. #: templates/emails/summary-body.php:97 msgid "When you’re ready to manage your entries inside WordPress, upgrade to Pro to import your entries." msgstr "" #. translators: %s - link to the site. #: templates/emails/summary-footer-plain.php:18 msgid "This email was auto-generated and sent from %s." msgstr "" #. translators: %s - link to the documentation. #: templates/emails/summary-footer-plain.php:23 msgid "Learn how to disable: %s." msgstr "" #. translators: %1$s - site URL, %2$s - link to the documentation. #: templates/emails/summary-footer.php:23 msgid "This email was auto-generated and sent from %1$s. Learn how to disable" msgstr "" #: templates/fields/total/summary-preview.php:76 msgid "Item" msgstr "" #: templates/fields/total/summary-preview.php:77 msgid "Quantity" msgstr "" #: templates/fields/total/summary-preview.php:83 msgid "There are no products selected." msgstr "" #. translators: %s - URL to the documentation article. #: templates/integrations/elementor/no-forms.php:32 msgid "Need some help? Check out our comprehensive guide." msgstr "" #: templates/integrations/wpcode/code-snippets.php:20 msgid "Please Install WPCode to Use the WPForms Snippet Library" msgstr "" #: templates/integrations/wpcode/code-snippets.php:21 msgid "Install + Activate WPCode" msgstr "" #: templates/integrations/wpcode/code-snippets.php:24 msgid "Please Update WPCode to Use the WPForms Snippet Library" msgstr "" #: templates/integrations/wpcode/code-snippets.php:25 msgid "Update + Activate WPCode" msgstr "" #: templates/integrations/wpcode/code-snippets.php:29 msgid "Please Activate WPCode to Use the WPForms Snippet Library" msgstr "" #: templates/integrations/wpcode/code-snippets.php:30 msgid "Activate WPCode" msgstr "" #: templates/integrations/wpcode/code-snippets.php:39 msgid "Using WPCode, you can install WPForms code snippets with 1 click right from this page or the WPCode Library in the WordPress admin." msgstr "" #: templates/integrations/wpcode/code-snippets.php:45 msgid "Learn more about WPCode" msgstr "" #. translators: %s - WPCode library website URL. #: templates/integrations/wpcode/code-snippets.php:58 msgid "Using WPCode, you can install WPForms code snippets with 1 click directly from this page or the WPCode library." msgstr "" #: templates/integrations/wpcode/code-snippets.php:75 msgid "Search Snippets" msgstr "" #: templates/integrations/wpcode/code-snippets.php:84 msgid "Edit Snippet" msgstr "" #: templates/integrations/wpcode/code-snippets.php:84 msgid "Install Snippet" msgstr "" #: templates/integrations/wpcode/code-snippets.php:87 msgid "Installed" msgstr "" #: templates/integrations/wpcode/code-snippets.php:104 msgid "Sorry, we didn't find any snippets that match your criteria." msgstr "" #. translators: %s - Path to installed plugins. #: wpforms.php:198 msgid "Your site already has WPForms Pro activated. If you want to switch to WPForms Lite, please first go to %s and deactivate WPForms. Then, you can activate WPForms Lite." msgstr "" #: wpforms.php:199 msgid "Network Admin → Plugins → Installed Plugins" msgstr "" #: wpforms.php:199 msgid "Plugins → Installed Plugins" msgstr "" #. translators: %s - WPBeginner URL for recommended WordPress hosting. #: wpforms.php:249 msgid "Your site is running an insecure version of PHP that is no longer supported. Please contact your web hosting provider to update your PHP version or switch to a recommended WordPress hosting company." msgstr "" #. translators: %s - WPForms.com URL for documentation with more details. #: wpforms.php:267 msgid "Note: The WPForms plugin is disabled on your site until you fix the issue. Read more for additional information." msgstr "" #. translators: %s - WordPress version. #: wpforms.php:317 msgid "The WPForms plugin is disabled because it requires WordPress %s or later." msgstr "" #: assets/js/integrations/gutenberg/formselector-legacy.es5.js:301 #: assets/js/integrations/gutenberg/formselector-legacy.js:268 #: assets/js/integrations/gutenberg/modules/common.js:740 #: assets/lite/js/integrations/gutenberg/formselector.es5.js:3108 #: assets/pro/js/integrations/gutenberg/formselector.es5.js:3119 msgid "You haven’t created a form, yet!" msgstr "" #: assets/js/integrations/gutenberg/formselector-legacy.es5.js:301 #: assets/js/integrations/gutenberg/formselector-legacy.js:269 #: assets/js/integrations/gutenberg/modules/common.js:741 #: assets/lite/js/integrations/gutenberg/formselector.es5.js:3108 #: assets/pro/js/integrations/gutenberg/formselector.es5.js:3119 msgid "What are you waiting for?" msgstr "" #: assets/js/integrations/gutenberg/modules/common.js:984 #: assets/lite/js/integrations/gutenberg/formselector.es5.js:3315 #: assets/pro/js/integrations/gutenberg/formselector.es5.js:3326 msgid "Need some help? Check out our comprehensive guide." msgstr "" assets/lib/jquery.confirm/jquery-confirm.min.js000064400000054502147400353540015674 0ustar00/*! * jQuery.Confirm Reloaded v1.0.0 * * https://github.com/awesomemotive/jquery-confirm-reloaded/ * Licensed under MIT (https://github.com/craftpip/jquery-confirm/blob/master/LICENSE) */ !function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&module.exports?module.exports=function(n,i){return void 0===i&&(i="undefined"!=typeof window?require("jquery"):require("jquery")(n)),t(i),i}:t(jQuery)}((function(t){"use strict";var n=window;t.fn.confirm=function(i,o){return void 0===i&&(i={}),"string"==typeof i&&(i={content:i,title:o||!1}),t(this).each((function(){var o=t(this);o.attr("jc-attached")?console.warn("jConfirm has already been attached to this element ",o[0]):(o.on("click",(function(e){e.preventDefault();var s=t.extend({},i);if(o.attr("data-title")&&(s.title=o.attr("data-title")),o.attr("data-content")&&(s.content=o.attr("data-content")),void 0===s.buttons&&(s.buttons={}),s.$target=o,o.attr("href")&&0===Object.keys(s.buttons).length){var a=t.extend(!0,{},n.jconfirm.pluginDefaults.defaultButtons,(n.jconfirm.defaults||{}).defaultButtons||{}),c=Object.keys(a)[0];s.buttons=a,s.buttons[c].action=function(){location.href=o.attr("href")}}s.closeIcon=!1;t.confirm(s)})),o.attr("jc-attached",!0))})),t(this)},t.confirm=function(i,o){void 0===i&&(i={}),"string"==typeof i&&(i={content:i,title:o||!1});var e=!(!1===i.buttons);if("object"!=typeof i.buttons&&(i.buttons={}),0===Object.keys(i.buttons).length&&e){var s=t.extend(!0,{},n.jconfirm.pluginDefaults.defaultButtons,(n.jconfirm.defaults||{}).defaultButtons||{});i.buttons=s}return n.jconfirm(i)},t.alert=function(i,o){void 0===i&&(i={}),"string"==typeof i&&(i={content:i,title:o||!1});var e=!(!1===i.buttons);if("object"!=typeof i.buttons&&(i.buttons={}),0===Object.keys(i.buttons).length&&e){var s=t.extend(!0,{},n.jconfirm.pluginDefaults.defaultButtons,(n.jconfirm.defaults||{}).defaultButtons||{}),a=Object.keys(s)[0];i.buttons[a]=s[a]}return n.jconfirm(i)},t.dialog=function(t,i){return void 0===t&&(t={}),"string"==typeof t&&(t={content:t,title:i||!1,closeIcon:function(){}}),t.buttons={},void 0===t.closeIcon&&(t.closeIcon=function(){}),t.confirmKeys=[13],n.jconfirm(t)},n.jconfirm=function(i){void 0===i&&(i={});var o=t.extend(!0,{},n.jconfirm.pluginDefaults);n.jconfirm.defaults&&(o=t.extend(!0,o,n.jconfirm.defaults)),o=t.extend(!0,{},o,i);var e=new n.Jconfirm(o);return n.jconfirm.instances.push(e),e},n.Jconfirm=function(n){t.extend(this,n),this._init()},n.Jconfirm.prototype={_init:function(){var i=this;n.jconfirm.instances.length||(n.jconfirm.lastFocused=t("body").find(":focus")),this._id=Math.round(99999*Math.random()),this.contentParsed=t(document.createElement("div")),this.lazyOpen||setTimeout((function(){i.open()}),0)},_buildHTML:function(){var n=this;this._parseAnimation(this.animation,"o"),this._parseAnimation(this.closeAnimation,"c"),this._parseBgDismissAnimation(this.backgroundDismissAnimation),this._parseColumnClass(this.columnClass),this._parseTheme(this.theme),this._parseType(this.type);var i=t(this.template);i.find(".jconfirm-box").addClass(this.animationParsed).addClass(this.backgroundDismissAnimationParsed).addClass(this.typeParsed),this.typeAnimated&&i.find(".jconfirm-box").addClass("jconfirm-type-animated"),this.useBootstrap?(i.find(".jc-bs3-row").addClass(this.bootstrapClasses.row),i.find(".jc-bs3-row").addClass("justify-content-md-center justify-content-sm-center justify-content-xs-center justify-content-lg-center"),i.find(".jconfirm-box-container").addClass(this.columnClassParsed),this.containerFluid?i.find(".jc-bs3-container").addClass(this.bootstrapClasses.containerFluid):i.find(".jc-bs3-container").addClass(this.bootstrapClasses.container)):i.find(".jconfirm-box").css("max-width",this.boxWidth),this.titleClass&&i.find(".jconfirm-title-c").addClass(this.titleClass),i.addClass(this.themeParsed);var o="jconfirm-box"+this._id;i.find(".jconfirm-box").attr("aria-labelledby",o).attr("tabindex",-1),i.find(".jconfirm-content").attr("id",o),null!==this.bgOpacity&&i.find(".jconfirm-bg").css("opacity",this.bgOpacity),this.rtl&&i.addClass("jconfirm-rtl"),this.$el=i.appendTo(this.container),this.$jconfirmBoxContainer=this.$el.find(".jconfirm-box-container"),this.$jconfirmBox=this.$body=this.$el.find(".jconfirm-box"),this.$jconfirmBg=this.$el.find(".jconfirm-bg"),this.$title=this.$el.find(".jconfirm-title"),this.$titleContainer=this.$el.find(".jconfirm-title-c"),this.$content=this.$el.find("div.jconfirm-content"),this.$contentPane=this.$el.find(".jconfirm-content-pane"),this.$icon=this.$el.find(".jconfirm-icon-c"),this.$closeIcon=this.$el.find(".jconfirm-closeIcon"),this.$holder=this.$el.find(".jconfirm-holder"),this.$btnc=this.$el.find(".jconfirm-buttons"),this.$scrollPane=this.$el.find(".jconfirm-scrollpane"),n.setStartingPoint(),this._contentReady=t.Deferred(),this._modalReady=t.Deferred(),this.$holder.css({"padding-top":this.offsetTop,"padding-bottom":this.offsetBottom}),this.setTitle(),this.setIcon(),this._setButtons(),this._parseContent(),this.initDraggable(),this.isAjax&&this.showLoading(!1),t.when(this._contentReady,this._modalReady).then((function(){n.isAjaxLoading?setTimeout((function(){n.isAjaxLoading=!1,n.setContent(),n.setTitle(),n.setIcon(),setTimeout((function(){n.hideLoading(!1),n._updateContentMaxHeight()}),100),"function"==typeof n.onContentReady&&n.onContentReady()}),50):(n._updateContentMaxHeight(),n.setTitle(),n.setIcon(),"function"==typeof n.onContentReady&&n.onContentReady()),n.autoClose&&n._startCountDown()})).then((function(){n._watchContent()})),"none"===this.animation&&(this.animationSpeed=1,this.animationBounce=1),this.$body.css(this._getCSS(this.animationSpeed,this.animationBounce)),this.$contentPane.css(this._getCSS(this.animationSpeed,1)),this.$jconfirmBg.css(this._getCSS(this.animationSpeed,1)),this.$jconfirmBoxContainer.css(this._getCSS(this.animationSpeed,1))},_typePrefix:"jconfirm-type-",typeParsed:"",_parseType:function(t){this.typeParsed=this._typePrefix+t},setType:function(t){var n=this.typeParsed;this._parseType(t),this.$jconfirmBox.removeClass(n).addClass(this.typeParsed)},themeParsed:"",_themePrefix:"jconfirm-",setTheme:function(t){var n=this.theme;this.theme=t||this.theme,this._parseTheme(this.theme),n&&this.$el.removeClass(n),this.$el.addClass(this.themeParsed),this.theme=t},_parseTheme:function(n){var i=this;n=n.split(","),t.each(n,(function(o,e){-1===e.indexOf(i._themePrefix)&&(n[o]=i._themePrefix+t.trim(e))})),this.themeParsed=n.join(" ").toLowerCase()},backgroundDismissAnimationParsed:"",_bgDismissPrefix:"jconfirm-hilight-",_parseBgDismissAnimation:function(n){var i=n.split(","),o=this;t.each(i,(function(n,e){-1===e.indexOf(o._bgDismissPrefix)&&(i[n]=o._bgDismissPrefix+t.trim(e))})),this.backgroundDismissAnimationParsed=i.join(" ").toLowerCase()},animationParsed:"",closeAnimationParsed:"",_animationPrefix:"jconfirm-animation-",setAnimation:function(t){this.animation=t||this.animation,this._parseAnimation(this.animation,"o")},_parseAnimation:function(n,i){i=i||"o";var o=n.split(","),e=this;t.each(o,(function(n,i){-1===i.indexOf(e._animationPrefix)&&(o[n]=e._animationPrefix+t.trim(i))}));var s=o.join(" ").toLowerCase();return"o"===i?this.animationParsed=s:this.closeAnimationParsed=s,s},setCloseAnimation:function(t){this.closeAnimation=t||this.closeAnimation,this._parseAnimation(this.closeAnimation,"c")},setAnimationSpeed:function(t){this.animationSpeed=t||this.animationSpeed},columnClassParsed:"",setColumnClass:function(t){this.useBootstrap?(this.columnClass=t||this.columnClass,this._parseColumnClass(this.columnClass),this.$jconfirmBoxContainer.addClass(this.columnClassParsed)):console.warn("cannot set columnClass, useBootstrap is set to false")},_updateContentMaxHeight:function(){var n=t(window).height()-(this.$jconfirmBox.outerHeight()-this.$contentPane.outerHeight())-(this.offsetTop+this.offsetBottom);this.$contentPane.css({"max-height":n+"px"})},setBoxWidth:function(t){this.useBootstrap?console.warn("cannot set boxWidth, useBootstrap is set to true"):(this.boxWidth=t,this.$jconfirmBox.css("max-width",t))},_parseColumnClass:function(t){var n;switch(t=t.toLowerCase()){case"xl":case"xlarge":n="col-md-12";break;case"l":case"large":n="col-md-8 col-md-offset-2";break;case"m":case"medium":n="col-md-6 col-md-offset-3";break;case"s":case"small":n="col-md-4 col-md-offset-4";break;case"xs":case"xsmall":n="col-md-2 col-md-offset-5";break;default:n=t}this.columnClassParsed=n},initDraggable:function(){var n=this,i=this.$titleContainer;this.resetDrag(),this.draggable&&(i.on("mousedown",(function(t){i.addClass("jconfirm-hand"),n.mouseX=t.clientX,n.mouseY=t.clientY,n.isDrag=!0})),t(window).on("mousemove."+this._id,(function(t){n.isDrag&&(n.movingX=t.clientX-n.mouseX+n.initialX,n.movingY=t.clientY-n.mouseY+n.initialY,n.setDrag())})),t(window).on("mouseup."+this._id,(function(){i.removeClass("jconfirm-hand"),n.isDrag&&(n.isDrag=!1,n.initialX=n.movingX,n.initialY=n.movingY)})))},resetDrag:function(){this.isDrag=!1,this.initialX=0,this.initialY=0,this.movingX=0,this.movingY=0,this.mouseX=0,this.mouseY=0,this.$jconfirmBoxContainer.css("transform","translate(0px, 0px)")},setDrag:function(){if(this.draggable){this.alignMiddle=!1;var n=this.$jconfirmBox.outerWidth(),i=this.$jconfirmBox.outerHeight(),o=t(window).width(),e=t(window).height(),s=this;if(s.movingX%1==0||s.movingY%1==0){if(s.dragWindowBorder){var a=o/2-n/2,c=e/2-i/2;c-=s.dragWindowGap,(a-=s.dragWindowGap)+s.movingX<0?s.movingX=-a:a-s.movingX<0&&(s.movingX=a),c+s.movingY<0?s.movingY=-c:c-s.movingY<0&&(s.movingY=c)}s.$jconfirmBoxContainer.css("transform","translate("+s.movingX+"px, "+s.movingY+"px)")}}},_scrollTop:function(){if("undefined"!=typeof pageYOffset)return pageYOffset;var t=document.body,n=document.documentElement;return(n=n.clientHeight?n:t).scrollTop},_watchContent:function(){var n=this;this._timer&&clearInterval(this._timer);var i=0;this._timer=setInterval((function(){if(n.smoothContent){var o=n.$content.outerHeight()||0;o!==i&&(i=o);var e=t(window).height();n.offsetTop+n.offsetBottom+n.$jconfirmBox.outerHeight()-n.$contentPane.outerHeight()+n.$content.outerHeight()').html(n.buttons[o].text).addClass(n.buttons[o].btnClass).prop("disabled",n.buttons[o].isDisabled).css("display",n.buttons[o].isHidden?"none":"").click((function(t){t.preventDefault();var i=n.buttons[o].action.apply(n,[n.buttons[o]]);n.onAction.apply(n,[o,n.buttons[o]]),n._stopCountDown(),(void 0===i||i)&&n.close()}));n.buttons[o].el=s,n.buttons[o].setText=function(t){s.html(t)},n.buttons[o].addClass=function(t){s.addClass(t)},n.buttons[o].removeClass=function(t){s.removeClass(t)},n.buttons[o].disable=function(){n.buttons[o].isDisabled=!0,s.prop("disabled",!0)},n.buttons[o].enable=function(){n.buttons[o].isDisabled=!1,s.prop("disabled",!1)},n.buttons[o].show=function(){n.buttons[o].isHidden=!1,s.css("display","")},n.buttons[o].hide=function(){n.buttons[o].isHidden=!0,s.css("display","none")},n["$_"+o]=n["$$"+o]=s,n.$btnc.append(s)})),0===i&&this.$btnc.hide(),null===this.closeIcon&&0===i&&(this.closeIcon=!0),this.closeIcon){if(this.closeIconClass){var o='';this.$closeIcon.html(o)}this.$closeIcon.click((function(t){t.preventDefault();var i,o=!1,e=!1;if("string"==typeof(i="function"==typeof n.closeIcon?n.closeIcon():n.closeIcon)&&void 0!==n.buttons[i]?(o=i,e=!1):e=void 0===i||!0==!!i,o){var s=n.buttons[o].action.apply(n);e=void 0===s||!!s}e&&n.close()})),this.$closeIcon.show()}else this.$closeIcon.hide()},setTitle:function(t,n){if(n=n||!1,void 0!==t)if("string"==typeof t)this.title=t;else if("function"==typeof t){"function"==typeof t.promise&&console.error("Promise was returned from title function, this is not supported.");var i=t();this.title="string"==typeof i&&i}else this.title=!1;this.isAjaxLoading&&!n||(this.$title.html(this.title||""),this.updateTitleContainer())},setIcon:function(t,n){if(n=n||!1,void 0!==t)if("string"==typeof t)this.icon=t;else if("function"==typeof t){var i=t();this.icon="string"==typeof i&&i}else this.icon=!1;this.isAjaxLoading&&!n||(this.$icon.html(this.icon?'':""),this.updateTitleContainer())},updateTitleContainer:function(){this.title||this.icon?this.$titleContainer.show():this.$titleContainer.hide()},setContentPrepend:function(t,n){t&&this.contentParsed.prepend(t)},setContentAppend:function(t){t&&this.contentParsed.append(t)},setContent:function(t,n){n=!!n;var i=this;t&&this.contentParsed.html("").append(t),this.isAjaxLoading&&!n||(this.$content.html(""),this.$content.append(this.contentParsed),setTimeout((function(){i.$body.find("input[autofocus]:visible:first").focus()}),100))},loadingSpinner:!1,showLoading:function(t){this.loadingSpinner=!0,this.$jconfirmBox.addClass("loading"),t&&this.$btnc.find("button").prop("disabled",!0)},hideLoading:function(t){this.loadingSpinner=!1,this.$jconfirmBox.removeClass("loading"),t&&this.$btnc.find("button").prop("disabled",!1)},ajaxResponse:!1,contentParsed:"",isAjax:!1,isAjaxLoading:!1,_parseContent:function(){var n=this,i=" ";if("function"==typeof this.content){var o=this.content.apply(this);"string"==typeof o?this.content=o:"object"==typeof o&&"function"==typeof o.always?(this.isAjax=!0,this.isAjaxLoading=!0,o.always((function(t,i,o){n.ajaxResponse={data:t,status:i,xhr:o},n._contentReady.resolve(t,i,o),"function"==typeof n.contentLoaded&&n.contentLoaded(t,i,o)})),this.content=i):this.content=i}if("string"==typeof this.content&&"url:"===this.content.substr(0,4).toLowerCase()){this.isAjax=!0,this.isAjaxLoading=!0;var e=this.content.substring(4,this.content.length);t.get(e).done((function(t){n.contentParsed.html(t)})).always((function(t,i,o){n.ajaxResponse={data:t,status:i,xhr:o},n._contentReady.resolve(t,i,o),"function"==typeof n.contentLoaded&&n.contentLoaded(t,i,o)}))}this.content||(this.content=i),this.isAjax||(this.contentParsed.html(this.content),this.setContent(),n._contentReady.resolve())},_stopCountDown:function(){clearInterval(this.autoCloseInterval),this.$cd&&this.$cd.remove()},_startCountDown:function(){var n=this,i=this.autoClose.split("|");if(2!==i.length)return console.error("Invalid option for autoClose. example 'close|10000'"),!1;var o=i[0],e=parseInt(i[1]);if(void 0===this.buttons[o])return console.error("Invalid button key '"+o+"' for autoClose"),!1;var s=Math.ceil(e/1e3);this.$cd=t(' ('+s+")").appendTo(this["$_"+o]),this.autoCloseInterval=setInterval((function(){n.$cd.html(" ("+(s-=1)+") "),s<=0&&(n["$$"+o].trigger("click"),n._stopCountDown())}),1e3)},_getKey:function(t){switch(t){case 192:return"tilde";case 13:return"enter";case 16:return"shift";case 9:return"tab";case 20:return"capslock";case 17:return"ctrl";case 91:return"win";case 18:return"alt";case 27:return"esc";case 32:return"space"}var n=String.fromCharCode(t);return!!/^[A-z0-9]+$/.test(n)&&n.toLowerCase()},reactOnKey:function(n){var i=this,o=t(".jconfirm");if(o.eq(o.length-1)[0]!==this.$el[0])return!1;var e=n.which;if(this.$content.find(":input").is(":focus")&&/13|32/.test(e))return!1;var s=this._getKey(e);if("esc"===s&&this.escapeKey)if(!0===this.escapeKey)this.$scrollPane.trigger("click");else if("string"==typeof this.escapeKey||"function"==typeof this.escapeKey){var a;(a="function"==typeof this.escapeKey?this.escapeKey():this.escapeKey)&&(void 0===this.buttons[a]?console.warn("Invalid escapeKey, no buttons found with key "+a):this["$_"+a].trigger("click"))}t.each(this.buttons,(function(t,n){-1!==n.keys.indexOf(s)&&i["$_"+t].trigger("click")}))},setDialogCenter:function(){console.info("setDialogCenter is deprecated, dialogs are centered with CSS3 tables")},_unwatchContent:function(){clearInterval(this._timer)},close:function(i){var o=this;return"function"==typeof this.onClose&&this.onClose(i),this._unwatchContent(),t(window).unbind("resize."+this._id),t(window).unbind("keyup."+this._id),t(window).unbind("jcKeyDown."+this._id),this.draggable&&(t(window).unbind("mousemove."+this._id),t(window).unbind("mouseup."+this._id),this.$titleContainer.unbind("mousedown")),o.$el.removeClass(o.loadedClass),t("body").removeClass("jconfirm-no-scroll-"+o._id),o.$jconfirmBoxContainer.removeClass("jconfirm-no-transition"),setTimeout((function(){o.$body.addClass(o.closeAnimationParsed),o.$jconfirmBg.addClass("jconfirm-bg-h");var i="none"===o.closeAnimation?1:o.animationSpeed;setTimeout((function(){o.$el.remove();n.jconfirm.instances;for(var i=n.jconfirm.instances.length-1;i>=0;i--)n.jconfirm.instances[i]._id===o._id&&n.jconfirm.instances.splice(i,1);if(!n.jconfirm.instances.length&&o.scrollToPreviousElement&&n.jconfirm.lastFocused&&n.jconfirm.lastFocused.length&&t.contains(document,n.jconfirm.lastFocused[0])){var e=n.jconfirm.lastFocused;if(o.scrollToPreviousElementAnimate){var s=t(window).scrollTop(),a=n.jconfirm.lastFocused.offset().top,c=t(window).height();if(a>s&&ar||Math.abs(c)>l)return!1;this.$jconfirmBoxContainer.css("transform","translate("+c+"px, "+a+"px)")},_open:function(){var t=this;"function"==typeof t.onOpenBefore&&t.onOpenBefore(),this.$body.removeClass(this.animationParsed),this.$jconfirmBg.removeClass("jconfirm-bg-h"),this.$body.focus(),t.$jconfirmBoxContainer.css("transform","translate(0px, 0px)"),setTimeout((function(){t.$body.css(t._getCSS(t.animationSpeed,1)),t.$body.css({"transition-property":t.$body.css("transition-property")+", margin"}),t.$jconfirmBoxContainer.addClass("jconfirm-no-transition"),t._modalReady.resolve(),"function"==typeof t.onOpen&&t.onOpen(),t.$el.addClass(t.loadedClass)}),this.animationSpeed)},loadedClass:"jconfirm-open",isClosed:function(){return!this.$el||0===this.$el.parent().length},isOpen:function(){return!this.isClosed()},toggle:function(){this.isOpen()?this.close():this.open()}},n.jconfirm.instances=[],n.jconfirm.lastFocused=!1,n.jconfirm.pluginDefaults={template:'
',title:"Hello",titleClass:"",type:"default",typeAnimated:!0,draggable:!0,dragWindowGap:15,dragWindowBorder:!0,animateFromElement:!0,alignMiddle:!0,smoothContent:!0,content:"Are you sure to continue?",buttons:{},defaultButtons:{ok:{action:function(){}},close:{action:function(){}}},contentLoaded:function(){},icon:"",lazyOpen:!1,bgOpacity:null,theme:"light",animation:"scale",closeAnimation:"scale",animationSpeed:400,animationBounce:1,escapeKey:!0,rtl:!1,container:"body",containerFluid:!1,backgroundDismiss:!1,backgroundDismissAnimation:"shake",autoClose:!1,closeIcon:null,closeIconClass:!1,watchInterval:100,columnClass:"col-md-4 col-md-offset-4 col-sm-6 col-sm-offset-3 col-xs-10 col-xs-offset-1",boxWidth:"50%",scrollToPreviousElement:!0,scrollToPreviousElementAnimate:!0,useBootstrap:!0,offsetTop:40,offsetBottom:40,bootstrapClasses:{container:"container",containerFluid:"container-fluid",row:"row"},onContentReady:function(){},onOpenBefore:function(){},onOpen:function(){},onClose:function(){},onDestroy:function(){},onAction:function(){}};let i=!1;t(window).on("keydown",(function(n){if(!i){let o=!1;t(n.target).closest(".jconfirm-box").length&&(o=!0),o&&t(window).trigger("jcKeyDown"),i=!0}})),t(window).on("keyup",(function(){i=!1})),n.jconfirm.lastClicked=!1,t(document).on("mousedown","button, a, [jc-source]",(function(){n.jconfirm.lastClicked=t(this)}))}));assets/lib/jquery.confirm/jquery-confirm.min.css000064400000043376147400353540016057 0ustar00/*! * jQuery.Confirm Reloaded v1.0.0 * * https://github.com/awesomemotive/jquery-confirm-reloaded/ * Licensed under MIT (https://github.com/craftpip/jquery-confirm/blob/master/LICENSE) */@keyframes jconfirm-adjust-hue{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}body[class*=jconfirm-no-scroll-]{overflow:hidden !important}.jconfirm{position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999999;font-family:inherit;overflow:hidden}.jconfirm .jconfirm-bg{position:fixed;top:0;left:0;right:0;bottom:0;transition:opacity .4s}.jconfirm .jconfirm-bg.jconfirm-bg-h{opacity:0 !important}.jconfirm .jconfirm-scrollpane{perspective:500px;perspective-origin:center;display:table;width:100%;height:100%}.jconfirm .jconfirm-row{display:table-row;width:100%}.jconfirm .jconfirm-cell{display:table-cell;vertical-align:middle}.jconfirm .jconfirm-holder{max-height:100%;padding:50px 0}.jconfirm .jconfirm-box-container{transition:transform}.jconfirm .jconfirm-box-container.jconfirm-no-transition{transition:none !important}.jconfirm .jconfirm-box{box-sizing:border-box;width:90%;background:#fff;border-radius:4px;position:relative;outline:none;padding:15px 15px 0;overflow:hidden;margin-left:auto;margin-right:auto}@keyframes type-blue{1%,100%{border-color:#3498db}50%{border-color:#5faee3}}@keyframes type-green{1%,100%{border-color:#2ecc71}50%{border-color:#54d98c}}@keyframes type-red{1%,100%{border-color:#e74c3c}50%{border-color:#ed7669}}@keyframes type-orange{1%,100%{border-color:#f1c40f}50%{border-color:#f4d03f}}@keyframes type-purple{1%,100%{border-color:#9b59b6}50%{border-color:#b07cc6}}@keyframes type-dark{1%,100%{border-color:#34495e}50%{border-color:#46637f}}.jconfirm .jconfirm-box.jconfirm-type-animated{animation-duration:2s;animation-iteration-count:infinite}.jconfirm .jconfirm-box.jconfirm-type-blue{border-top:solid 7px #3498db;animation-name:type-blue}.jconfirm .jconfirm-box.jconfirm-type-green{border-top:solid 7px #2ecc71;animation-name:type-green}.jconfirm .jconfirm-box.jconfirm-type-red{border-top:solid 7px #e74c3c;animation-name:type-red}.jconfirm .jconfirm-box.jconfirm-type-orange{border-top:solid 7px #f1c40f;animation-name:type-orange}.jconfirm .jconfirm-box.jconfirm-type-purple{border-top:solid 7px #9b59b6;animation-name:type-purple}.jconfirm .jconfirm-box.jconfirm-type-dark{border-top:solid 7px #34495e;animation-name:type-dark}.jconfirm .jconfirm-box.loading{height:120px}.jconfirm .jconfirm-box.loading:before{content:"";position:absolute;left:0;background:#fff;right:0;top:0;bottom:0;border-radius:10px;z-index:1}.jconfirm .jconfirm-box.loading:after{opacity:.6;content:"";height:30px;width:30px;border:solid 3px rgba(0,0,0,0);position:absolute;left:50%;margin-left:-15px;border-radius:50%;animation:jconfirm-adjust-hue 1s infinite linear;border-bottom-color:#1e90ff;top:50%;margin-top:-15px;z-index:2}.jconfirm .jconfirm-box div.jconfirm-closeIcon{height:20px;width:20px;position:absolute;top:10px;right:10px;cursor:pointer;opacity:.6;text-align:center;font-size:27px !important;line-height:14px !important;display:none;z-index:1}.jconfirm .jconfirm-box div.jconfirm-closeIcon:empty{display:none}.jconfirm .jconfirm-box div.jconfirm-closeIcon .fa{font-size:16px}.jconfirm .jconfirm-box div.jconfirm-closeIcon .glyphicon{font-size:16px}.jconfirm .jconfirm-box div.jconfirm-closeIcon .zmdi{font-size:16px}.jconfirm .jconfirm-box div.jconfirm-closeIcon:hover{opacity:1}.jconfirm .jconfirm-box div.jconfirm-title-c{display:block;font-size:22px;line-height:20px;user-select:none;cursor:default;padding-bottom:15px}.jconfirm .jconfirm-box div.jconfirm-title-c.jconfirm-hand{cursor:move}.jconfirm .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c{font-size:inherit;display:inline-block;vertical-align:middle}.jconfirm .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c i{vertical-align:middle}.jconfirm .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c:empty{display:none}.jconfirm .jconfirm-box div.jconfirm-title-c .jconfirm-title{user-select:none;font-size:inherit;font-family:inherit;display:inline-block;vertical-align:middle}.jconfirm .jconfirm-box div.jconfirm-title-c .jconfirm-title:empty{display:none}.jconfirm .jconfirm-box div.jconfirm-content-pane{margin-bottom:15px;height:auto;transition:height .4s ease-in;display:inline-block;width:100%;position:relative;overflow-x:hidden;overflow-y:auto}.jconfirm .jconfirm-box div.jconfirm-content-pane.no-scroll{overflow-y:hidden}.jconfirm .jconfirm-box div.jconfirm-content-pane::-webkit-scrollbar{width:3px}.jconfirm .jconfirm-box div.jconfirm-content-pane::-webkit-scrollbar-track{background:rgba(0,0,0,.1)}.jconfirm .jconfirm-box div.jconfirm-content-pane::-webkit-scrollbar-thumb{background:#666;border-radius:3px}.jconfirm .jconfirm-box div.jconfirm-content-pane .jconfirm-content{overflow:auto}.jconfirm .jconfirm-box div.jconfirm-content-pane .jconfirm-content img{max-width:100%;height:auto}.jconfirm .jconfirm-box div.jconfirm-content-pane .jconfirm-content:empty{display:none}.jconfirm .jconfirm-box .jconfirm-buttons{padding-bottom:11px}.jconfirm .jconfirm-box .jconfirm-buttons>button{margin-bottom:4px;margin-left:2px;margin-right:2px}.jconfirm .jconfirm-box .jconfirm-buttons button{display:inline-block;padding:6px 12px;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:4px;min-height:1em;transition:opacity .1s ease,background-color .1s ease,color .1s ease,box-shadow .1s ease,background .1s ease;-webkit-tap-highlight-color:rgba(0,0,0,0);border:none;background-image:none}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-blue{background-color:#3498db;color:#fff;text-shadow:none;transition:background .2s}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-blue:hover{background-color:#2980b9;color:#fff}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-green{background-color:#2ecc71;color:#fff;text-shadow:none;transition:background .2s}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-green:hover{background-color:#27ae60;color:#fff}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-red{background-color:#e74c3c;color:#fff;text-shadow:none;transition:background .2s}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-red:hover{background-color:#c0392b;color:#fff}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-orange{background-color:#f1c40f;color:#fff;text-shadow:none;transition:background .2s}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-orange:hover{background-color:#f39c12;color:#fff}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-default{background-color:#ecf0f1;color:#000;text-shadow:none;transition:background .2s}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-default:hover{background-color:#bdc3c7;color:#000}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-purple{background-color:#9b59b6;color:#fff;text-shadow:none;transition:background .2s}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-purple:hover{background-color:#8e44ad;color:#fff}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-dark{background-color:#34495e;color:#fff;text-shadow:none;transition:background .2s}.jconfirm .jconfirm-box .jconfirm-buttons button.btn-dark:hover{background-color:#2c3e50;color:#fff}.jconfirm .jconfirm-box.jconfirm-type-red .jconfirm-title-c .jconfirm-icon-c{color:#e74c3c !important}.jconfirm .jconfirm-box.jconfirm-type-blue .jconfirm-title-c .jconfirm-icon-c{color:#3498db !important}.jconfirm .jconfirm-box.jconfirm-type-green .jconfirm-title-c .jconfirm-icon-c{color:#2ecc71 !important}.jconfirm .jconfirm-box.jconfirm-type-purple .jconfirm-title-c .jconfirm-icon-c{color:#9b59b6 !important}.jconfirm .jconfirm-box.jconfirm-type-orange .jconfirm-title-c .jconfirm-icon-c{color:#f1c40f !important}.jconfirm .jconfirm-box.jconfirm-type-dark .jconfirm-title-c .jconfirm-icon-c{color:#34495e !important}.jconfirm .jconfirm-clear{clear:both}.jconfirm.jconfirm-rtl{direction:rtl}.jconfirm.jconfirm-rtl div.jconfirm-closeIcon{left:5px;right:auto}.jconfirm.jconfirm-white .jconfirm-bg,.jconfirm.jconfirm-light .jconfirm-bg{background-color:#444;opacity:.2}.jconfirm.jconfirm-white .jconfirm-box,.jconfirm.jconfirm-light .jconfirm-box{box-shadow:0 2px 6px rgba(0,0,0,.2);border-radius:5px}.jconfirm.jconfirm-white .jconfirm-box .jconfirm-title-c .jconfirm-icon-c,.jconfirm.jconfirm-light .jconfirm-box .jconfirm-title-c .jconfirm-icon-c{margin-right:8px;margin-left:0}.jconfirm.jconfirm-white .jconfirm-box .jconfirm-buttons,.jconfirm.jconfirm-light .jconfirm-box .jconfirm-buttons{float:right}.jconfirm.jconfirm-white .jconfirm-box .jconfirm-buttons button,.jconfirm.jconfirm-light .jconfirm-box .jconfirm-buttons button{text-transform:uppercase;font-size:14px;font-weight:bold;text-shadow:none}.jconfirm.jconfirm-white .jconfirm-box .jconfirm-buttons button.btn-default,.jconfirm.jconfirm-light .jconfirm-box .jconfirm-buttons button.btn-default{box-shadow:none;color:#333}.jconfirm.jconfirm-white .jconfirm-box .jconfirm-buttons button.btn-default:hover,.jconfirm.jconfirm-light .jconfirm-box .jconfirm-buttons button.btn-default:hover{background:#ddd}.jconfirm.jconfirm-white.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c,.jconfirm.jconfirm-light.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c{margin-left:8px;margin-right:0}.jconfirm.jconfirm-black .jconfirm-bg,.jconfirm.jconfirm-dark .jconfirm-bg{background-color:#2f4f4f;opacity:.4}.jconfirm.jconfirm-black .jconfirm-box,.jconfirm.jconfirm-dark .jconfirm-box{box-shadow:0 2px 6px rgba(0,0,0,.2);background:#444;border-radius:5px;color:#fff}.jconfirm.jconfirm-black .jconfirm-box .jconfirm-title-c .jconfirm-icon-c,.jconfirm.jconfirm-dark .jconfirm-box .jconfirm-title-c .jconfirm-icon-c{margin-right:8px;margin-left:0}.jconfirm.jconfirm-black .jconfirm-box .jconfirm-buttons,.jconfirm.jconfirm-dark .jconfirm-box .jconfirm-buttons{float:right}.jconfirm.jconfirm-black .jconfirm-box .jconfirm-buttons button,.jconfirm.jconfirm-dark .jconfirm-box .jconfirm-buttons button{border:none;background-image:none;text-transform:uppercase;font-size:14px;font-weight:bold;text-shadow:none;transition:background .1s;color:#fff}.jconfirm.jconfirm-black .jconfirm-box .jconfirm-buttons button.btn-default,.jconfirm.jconfirm-dark .jconfirm-box .jconfirm-buttons button.btn-default{box-shadow:none;color:#fff;background:none}.jconfirm.jconfirm-black .jconfirm-box .jconfirm-buttons button.btn-default:hover,.jconfirm.jconfirm-dark .jconfirm-box .jconfirm-buttons button.btn-default:hover{background:#666}.jconfirm.jconfirm-black.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c,.jconfirm.jconfirm-dark.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c{margin-left:8px;margin-right:0}.jconfirm .jconfirm-box.hilight.jconfirm-hilight-shake{animation:shake .82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;transform:translate3d(0, 0, 0)}.jconfirm .jconfirm-box.hilight.jconfirm-hilight-glow{animation:glow .82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;transform:translate3d(0, 0, 0)}@keyframes shake{10%,90%{transform:translate3d(-2px, 0, 0)}20%,80%{transform:translate3d(4px, 0, 0)}30%,50%,70%{transform:translate3d(-8px, 0, 0)}40%,60%{transform:translate3d(8px, 0, 0)}}@keyframes glow{0%,100%{box-shadow:0 0 0 red}50%{box-shadow:0 0 30px red}}.jconfirm{perspective:400px}.jconfirm .jconfirm-box{opacity:1;transition-property:all}.jconfirm .jconfirm-box.jconfirm-animation-top,.jconfirm .jconfirm-box.jconfirm-animation-left,.jconfirm .jconfirm-box.jconfirm-animation-right,.jconfirm .jconfirm-box.jconfirm-animation-bottom,.jconfirm .jconfirm-box.jconfirm-animation-opacity,.jconfirm .jconfirm-box.jconfirm-animation-zoom,.jconfirm .jconfirm-box.jconfirm-animation-scale,.jconfirm .jconfirm-box.jconfirm-animation-none,.jconfirm .jconfirm-box.jconfirm-animation-rotate,.jconfirm .jconfirm-box.jconfirm-animation-rotatex,.jconfirm .jconfirm-box.jconfirm-animation-rotatey,.jconfirm .jconfirm-box.jconfirm-animation-scaley,.jconfirm .jconfirm-box.jconfirm-animation-scalex{opacity:0}.jconfirm .jconfirm-box.jconfirm-animation-rotate{transform:rotate(90deg)}.jconfirm .jconfirm-box.jconfirm-animation-rotatex{transform:rotateX(90deg);transform-origin:center}.jconfirm .jconfirm-box.jconfirm-animation-rotatexr{transform:rotateX(-90deg);transform-origin:center}.jconfirm .jconfirm-box.jconfirm-animation-rotatey{transform:rotatey(90deg);transform-origin:center}.jconfirm .jconfirm-box.jconfirm-animation-rotateyr{transform:rotatey(-90deg);transform-origin:center}.jconfirm .jconfirm-box.jconfirm-animation-scaley{transform:scaley(1.5);transform-origin:center}.jconfirm .jconfirm-box.jconfirm-animation-scalex{transform:scalex(1.5);transform-origin:center}.jconfirm .jconfirm-box.jconfirm-animation-top{transform:translate(0px, -100px)}.jconfirm .jconfirm-box.jconfirm-animation-left{transform:translate(-100px, 0px)}.jconfirm .jconfirm-box.jconfirm-animation-right{transform:translate(100px, 0px)}.jconfirm .jconfirm-box.jconfirm-animation-bottom{transform:translate(0px, 100px)}.jconfirm .jconfirm-box.jconfirm-animation-zoom{transform:scale(1.2)}.jconfirm .jconfirm-box.jconfirm-animation-scale{transform:scale(0.5)}.jconfirm .jconfirm-box.jconfirm-animation-none{visibility:hidden}.jconfirm.jconfirm-supervan .jconfirm-bg{background-color:rgba(54,70,93,.95)}.jconfirm.jconfirm-supervan .jconfirm-box{background-color:rgba(0,0,0,0)}.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-blue{border:none}.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-green{border:none}.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-red{border:none}.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-orange{border:none}.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-purple{border:none}.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-dark{border:none}.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-closeIcon{color:#fff}.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-title-c{text-align:center;color:#fff;font-size:28px;font-weight:normal}.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-title-c>*{padding-bottom:25px}.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c{margin-right:8px;margin-left:0}.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-content-pane{margin-bottom:25px}.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-content{text-align:center;color:#fff}.jconfirm.jconfirm-supervan .jconfirm-box .jconfirm-buttons{text-align:center}.jconfirm.jconfirm-supervan .jconfirm-box .jconfirm-buttons button{font-size:16px;border-radius:2px;background:#303f53;text-shadow:none;border:none;color:#fff;padding:10px;min-width:100px}.jconfirm.jconfirm-supervan.jconfirm-rtl .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c{margin-left:8px;margin-right:0}.jconfirm.jconfirm-material .jconfirm-bg{background-color:rgba(0,0,0,.67)}.jconfirm.jconfirm-material .jconfirm-box{background-color:#fff;box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12);padding:30px 25px 10px 25px}.jconfirm.jconfirm-material .jconfirm-box .jconfirm-title-c .jconfirm-icon-c{margin-right:8px;margin-left:0}.jconfirm.jconfirm-material .jconfirm-box div.jconfirm-closeIcon{color:rgba(0,0,0,.87)}.jconfirm.jconfirm-material .jconfirm-box div.jconfirm-title-c{color:rgba(0,0,0,.87);font-size:22px;font-weight:bold}.jconfirm.jconfirm-material .jconfirm-box div.jconfirm-content{color:rgba(0,0,0,.87)}.jconfirm.jconfirm-material .jconfirm-box .jconfirm-buttons{text-align:right}.jconfirm.jconfirm-material .jconfirm-box .jconfirm-buttons button{text-transform:uppercase;font-weight:500}.jconfirm.jconfirm-material.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c{margin-left:8px;margin-right:0}.jconfirm.jconfirm-bootstrap .jconfirm-bg{background-color:rgba(0,0,0,.21)}.jconfirm.jconfirm-bootstrap .jconfirm-box{background-color:#fff;box-shadow:0 3px 8px 0 rgba(0,0,0,.2);border:solid 1px rgba(0,0,0,.4);padding:15px 0 0}.jconfirm.jconfirm-bootstrap .jconfirm-box .jconfirm-title-c .jconfirm-icon-c{margin-right:8px;margin-left:0}.jconfirm.jconfirm-bootstrap .jconfirm-box div.jconfirm-closeIcon{color:rgba(0,0,0,.87)}.jconfirm.jconfirm-bootstrap .jconfirm-box div.jconfirm-title-c{color:rgba(0,0,0,.87);font-size:22px;font-weight:bold;padding-left:15px;padding-right:15px}.jconfirm.jconfirm-bootstrap .jconfirm-box div.jconfirm-content{color:rgba(0,0,0,.87);padding:0 15px}.jconfirm.jconfirm-bootstrap .jconfirm-box .jconfirm-buttons{text-align:right;padding:10px;margin:-5px 0 0px;border-top:solid 1px #ddd;overflow:hidden;border-radius:0 0 4px 4px}.jconfirm.jconfirm-bootstrap .jconfirm-box .jconfirm-buttons button{font-weight:500}.jconfirm.jconfirm-bootstrap.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c{margin-left:8px;margin-right:0}.jconfirm.jconfirm-modern .jconfirm-bg{background-color:#708090;opacity:.6}.jconfirm.jconfirm-modern .jconfirm-box{background-color:#fff;box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12);padding:30px 30px 15px}.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-closeIcon{color:rgba(0,0,0,.87);top:15px;right:15px}.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-title-c{color:rgba(0,0,0,.87);font-size:24px;font-weight:bold;text-align:center;margin-bottom:10px}.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c{transition:transform .5s;transform:scale(0);display:block;margin-right:0;margin-left:0;margin-bottom:10px;font-size:69px;color:#aaa}.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-content{text-align:center;font-size:15px;color:#777;margin-bottom:25px}.jconfirm.jconfirm-modern .jconfirm-box .jconfirm-buttons{text-align:center}.jconfirm.jconfirm-modern .jconfirm-box .jconfirm-buttons button{font-weight:bold;text-transform:uppercase;transition:background .1s;padding:10px 20px}.jconfirm.jconfirm-modern .jconfirm-box .jconfirm-buttons button+button{margin-left:4px}.jconfirm.jconfirm-modern.jconfirm-open .jconfirm-box .jconfirm-title-c .jconfirm-icon-c{transform:scale(1)}assets/lib/list.min.js000064400000046114147400353540010722 0ustar00/*! List.js v2.3.0 (http://listjs.com) by Jonny Strömberg (http://javve.com) */ var List;List=function(){var t={"./src/add-async.js":function(t){t.exports=function(t){return function e(r,n,s){var i=r.splice(0,50);s=(s=s||[]).concat(t.add(i)),r.length>0?setTimeout((function(){e(r,n,s)}),1):(t.update(),n(s))}}},"./src/filter.js":function(t){t.exports=function(t){return t.handlers.filterStart=t.handlers.filterStart||[],t.handlers.filterComplete=t.handlers.filterComplete||[],function(e){if(t.trigger("filterStart"),t.i=1,t.reset.filter(),void 0===e)t.filtered=!1;else{t.filtered=!0;for(var r=t.items,n=0,s=r.length;nv.page,a=new g(t[s],void 0,n),v.items.push(a),r.push(a)}return v.update(),r}m(t.slice(0),e)}},this.show=function(t,e){return this.i=t,this.page=e,v.update(),v},this.remove=function(t,e,r){for(var n=0,s=0,i=v.items.length;s-1&&r.splice(n,1),v},this.trigger=function(t){for(var e=v.handlers[t].length;e--;)v.handlers[t][e](v);return v},this.reset={filter:function(){for(var t=v.items,e=t.length;e--;)t[e].filtered=!1;return v},search:function(){for(var t=v.items,e=t.length;e--;)t[e].found=!1;return v}},this.update=function(){var t=v.items,e=t.length;v.visibleItems=[],v.matchingItems=[],v.templater.clear();for(var r=0;r=v.i&&v.visibleItems.lengthe},innerWindow:function(t,e,r){return t>=e-r&&t<=e+r},dotted:function(t,e,r,n,s,i,a){return this.dottedLeft(t,e,r,n,s,i)||this.dottedRight(t,e,r,n,s,i,a)},dottedLeft:function(t,e,r,n,s,i){return e==r+1&&!this.innerWindow(e,s,i)&&!this.right(e,n)},dottedRight:function(t,e,r,n,s,i,a){return!t.items[a-1].values().dotted&&(e==n&&!this.innerWindow(e,s,i)&&!this.right(e,n))}};return function(e){var n=new i(t.listContainer.id,{listClass:e.paginationClass||"pagination",item:e.item||"
  • ",valueNames:["page","dotted"],searchClass:"pagination-search-that-is-not-supposed-to-exist",sortClass:"pagination-sort-that-is-not-supposed-to-exist"});s.bind(n.listContainer,"click",(function(e){var r=e.target||e.srcElement,n=t.utils.getAttribute(r,"data-page"),s=t.utils.getAttribute(r,"data-i");s&&t.show((s-1)*n+1,n)})),t.on("updated",(function(){r(n,e)})),r(n,e)}}},"./src/parse.js":function(t,e,r){t.exports=function(t){var e=r("./src/item.js")(t),n=function(r,n){for(var s=0,i=r.length;s0?setTimeout((function(){e(r,s)}),1):(t.update(),t.trigger("parseComplete"))};return t.handlers.parseComplete=t.handlers.parseComplete||[],function(){var e=function(t){for(var e=t.childNodes,r=[],n=0,s=e.length;n]/g.exec(t)){var e=document.createElement("tbody");return e.innerHTML=t,e.firstElementChild}if(-1!==t.indexOf("<")){var r=document.createElement("div");return r.innerHTML=t,r.firstElementChild}}},a=function(e,r,n){var s=void 0,i=function(e){for(var r=0,n=t.valueNames.length;r=1;)t.list.removeChild(t.list.firstChild)},function(){var r;if("function"!=typeof t.item){if(!(r="string"==typeof t.item?-1===t.item.indexOf("<")?document.getElementById(t.item):i(t.item):s()))throw new Error("The list needs to have at least one item on init otherwise you'll have to add a template.");r=n(r,t.valueNames),e=function(){return r.cloneNode(!0)}}else e=function(e){var r=t.item(e);return i(r)}}()};t.exports=function(t){return new e(t)}},"./src/utils/classes.js":function(t,e,r){var n=r("./src/utils/index-of.js"),s=/\s+/;Object.prototype.toString;function i(t){if(!t||!t.nodeType)throw new Error("A DOM element reference is required");this.el=t,this.list=t.classList}t.exports=function(t){return new i(t)},i.prototype.add=function(t){if(this.list)return this.list.add(t),this;var e=this.array();return~n(e,t)||e.push(t),this.el.className=e.join(" "),this},i.prototype.remove=function(t){if(this.list)return this.list.remove(t),this;var e=this.array(),r=n(e,t);return~r&&e.splice(r,1),this.el.className=e.join(" "),this},i.prototype.toggle=function(t,e){return this.list?(void 0!==e?e!==this.list.toggle(t,e)&&this.list.toggle(t):this.list.toggle(t),this):(void 0!==e?e?this.add(t):this.remove(t):this.has(t)?this.remove(t):this.add(t),this)},i.prototype.array=function(){var t=(this.el.getAttribute("class")||"").replace(/^\s+|\s+$/g,"").split(s);return""===t[0]&&t.shift(),t},i.prototype.has=i.prototype.contains=function(t){return this.list?this.list.contains(t):!!~n(this.array(),t)}},"./src/utils/events.js":function(t,e,r){var n=window.addEventListener?"addEventListener":"attachEvent",s=window.removeEventListener?"removeEventListener":"detachEvent",i="addEventListener"!==n?"on":"",a=r("./src/utils/to-array.js");e.bind=function(t,e,r,s){for(var o=0,l=(t=a(t)).length;o32)return!1;var a=n,o=function(){var t,r={};for(t=0;t=p;b--){var j=o[t.charAt(b-1)];if(C[b]=0===m?(C[b+1]<<1|1)&j:(C[b+1]<<1|1)&j|(v[b+1]|v[b])<<1|1|v[b+1],C[b]&d){var x=l(m,b-1);if(x<=u){if(u=x,!((c=b-1)>a))break;p=Math.max(1,2*a-c)}}}if(l(m+1,a)>u)break;v=C}return!(c<0)}},"./src/utils/get-attribute.js":function(t){t.exports=function(t,e){var r=t.getAttribute&&t.getAttribute(e)||null;if(!r)for(var n=t.attributes,s=n.length,i=0;i=48&&t<=57}function i(t,e){for(var i=(t+="").length,a=(e+="").length,o=0,l=0;o=i&&l=a?-1:l>=a&&o=i?1:i-a}i.caseInsensitive=i.i=function(t,e){return i((""+t).toLowerCase(),(""+e).toLowerCase())},Object.defineProperties(i,{alphabet:{get:function(){return e},set:function(t){r=[];var s=0;if(e=t)for(;si.width()&&(u=i.width()),g>i.height()&&(g=i.height()),i.parent().is(".minicolors-slider-wheel")&&h.parent().is(".minicolors-grid")&&(s=75-u,a=75-g,n=Math.sqrt(s*s+a*a),(r=Math.atan2(a,s))<0&&(r+=2*Math.PI),75>16,g:(65280&i)>>8,b:255&i}}C.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",defaultValue:"",format:"hex",hide:null,hideSpeed:100,inline:!1,keywords:"",letterCase:"lowercase",opacity:!1,position:"bottom",show:null,showSpeed:100,theme:"default",swatches:[]}},C.extend(C.fn,{minicolors:function(i,t){switch(i){case"destroy":return C(this).each(function(){o(C(this))}),C(this);case"hide":return a(),C(this);case"opacity":return void 0===t?C(this).attr("data-opacity"):(C(this).each(function(){d(C(this).attr("data-opacity",t))}),C(this));case"rgbObject":return function(i){var t,o=C(i).attr("data-opacity");{var s;t=T(C(i).val())?I(C(i).val(),!0):(s=M(C(i).val(),!0),L(s))}if(!t)return null;void 0!==o&&C.extend(t,{a:parseFloat(o)});return t}(C(this));case"rgbString":case"rgbaString":return function(i,t){var o,s=C(i).attr("data-opacity");{var a;o=T(C(i).val())?I(C(i).val(),!0):(a=M(C(i).val(),!0),L(a))}if(!o)return null;void 0===s&&(s=1);return t?"rgba("+o.r+", "+o.g+", "+o.b+", "+parseFloat(s)+")":"rgb("+o.r+", "+o.g+", "+o.b+")"}(C(this),"rgbaString"===i);case"settings":return void 0===t?C(this).data("minicolors-settings"):(C(this).each(function(){var i=C(this).data("minicolors-settings")||{};o(C(this)),C(this).minicolors(C.extend(!0,i,t))}),C(this));case"show":return s(C(this).eq(0)),C(this);case"value":return void 0===t?C(this).val():(C(this).each(function(){"object"==typeof t&&null!==t?(void 0!==t.opacity&&C(this).attr("data-opacity",F(t.opacity,0,1)),t.color&&C(this).val(t.color)):C(this).val(t),d(C(this))}),C(this));default:return"create"!==i&&(t=i),C(this).each(function(){!function(t,i){var o,s,a,n,r,e,c,l=C('
    '),h=C.minicolors.defaults;if(t.data("minicolors-initialized"))return;i=C.extend(!0,{},h,i),l.addClass("minicolors-theme-"+i.theme).toggleClass("minicolors-with-opacity",i.opacity),void 0!==i.position&&C.each(i.position.split(" "),function(){l.addClass("minicolors-position-"+this)});s="rgb"===i.format?i.opacity?"25":"20":i.keywords?"11":"7";t.addClass("minicolors-input").data("minicolors-initialized",!1).data("minicolors-settings",i).prop("size",s).wrap(l).after('
    '),i.inline||(t.after(''),t.next(".minicolors-input-swatch").on("click",function(i){i.preventDefault(),t.trigger("focus")}));if((e=t.parent().find(".minicolors-panel")).on("selectstart",function(){return!1}).end(),i.swatches&&0!==i.swatches.length)for(e.addClass("minicolors-with-swatches"),a=C('
      ').appendTo(e),c=0;c').attr("title",o).appendTo(a).data("swatch-color",r).find(".minicolors-swatch-color").css({backgroundColor:"transparent"!==r?p(n):"transparent",opacity:String(n.a)}),i.swatches[c]=n;i.inline&&t.parent().addClass("minicolors-inline");d(t,!1),t.data("minicolors-initialized",!0)}(C(this),t)}),C(this)}}}),C([document]).on("mousedown.minicolors touchstart.minicolors",function(i){C(i.target).parents().add(i.target).hasClass("minicolors")||a()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider",function(i){var t=C(this);i.preventDefault(),C(i.delegateTarget).data("minicolors-target",t),n(t,i,!0)}).on("mousemove.minicolors touchmove.minicolors",function(i){var t=C(i.delegateTarget).data("minicolors-target");t&&n(t,i)}).on("mouseup.minicolors touchend.minicolors",function(){C(this).removeData("minicolors-target")}).on("click.minicolors",".minicolors-swatches li",function(i){i.preventDefault();var t=C(this),o=t.parents(".minicolors").find(".minicolors-input"),s=t.data("swatch-color");x(o,s,D(s)),d(o)}).on("mousedown.minicolors touchstart.minicolors",".minicolors-input-swatch",function(i){var t=C(this).parent().find(".minicolors-input");i.preventDefault(),s(t)}).on("focus.minicolors",".minicolors-input",function(){var i=C(this);i.data("minicolors-initialized")&&s(i)}).on("blur.minicolors",".minicolors-input",function(){var i,t,o,s,a,n=C(this),r=n.data("minicolors-settings");n.data("minicolors-initialized")&&(i=r.keywords?C.map(r.keywords.split(","),function(i){return i.toLowerCase().trim()}):[],a=""!==n.val()&&-1 span").css("opacity",String(s)),n.val(a),""===n.val()&&n.val(z(r.defaultValue,!0)),n.val(k(n.val(),r.letterCase)))}).on("keydown.minicolors",".minicolors-input",function(i){var t=C(this);if(t.data("minicolors-initialized"))switch(i.which){case 9:a();break;case 13:case 27:a(),t.blur()}}).on("keyup.minicolors",".minicolors-input",function(){var i=C(this);i.data("minicolors-initialized")&&d(i,!0)}).on("paste.minicolors",".minicolors-input",function(){var i=C(this);i.data("minicolors-initialized")&&setTimeout(function(){d(i,!0)},1)})});assets/lib/jquery.minicolors/jquery.minicolors.min.css000064400000017766147400353540017326 0ustar00.minicolors{position:relative}.minicolors-sprite{background-image:url(../../images/jquery.minicolors.png)}.minicolors-swatch{position:absolute;vertical-align:middle;background-position:-80px 0;cursor:text;padding:0;margin:0;display:inline-block}.minicolors-swatch::after{content:'';position:absolute;top:0;left:0;width:100%;height:100%;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);border-radius:2px}.minicolors-swatch-color{position:absolute;top:0;left:0;right:0;bottom:0}.minicolors input[type=hidden]+.minicolors-swatch{width:28px;position:static;cursor:pointer}.minicolors input[type=hidden][disabled]+.minicolors-swatch{cursor:default}.minicolors-panel{position:absolute;width:173px;background:#fff;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.2);z-index:99999;box-sizing:content-box;display:none;touch-action:none}.minicolors-panel.minicolors-visible,.minicolors-with-opacity .minicolors-opacity-slider{display:block}.minicolors-position-top .minicolors-panel{top:-154px}.minicolors-position-right .minicolors-panel,[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch,[dir=rtl] .minicolors-theme-default .minicolors-swatches .minicolors-swatch,[dir=rtl] .minicolors-theme-semanticui .minicolors-swatch{right:0}.minicolors-position-bottom .minicolors-panel{top:auto}.minicolors-position-left .minicolors-panel{left:0}.minicolors-with-opacity .minicolors-panel{width:194px}.minicolors .minicolors-grid{position:relative;top:1px;left:1px;width:150px;height:150px;margin-bottom:2px;background-position:-120px 0;cursor:crosshair}[dir=rtl] .minicolors .minicolors-grid{right:1px}.minicolors .minicolors-grid-inner{position:absolute;top:0;left:0;width:150px;height:150px}.minicolors-slider-saturation .minicolors-grid{background-position:-420px 0}.minicolors-slider-saturation .minicolors-grid-inner{background-position:-270px 0;background-image:inherit}.minicolors-slider-brightness .minicolors-grid{background-position:-570px 0}.minicolors-slider-brightness .minicolors-grid-inner{background-color:#000}.minicolors-slider-wheel .minicolors-grid{background-position:-720px 0}.minicolors-opacity-slider,.minicolors-slider{position:absolute;top:1px;left:152px;width:20px;height:150px;background-color:#fff;background-position:0 0;cursor:row-resize}[dir=rtl] .minicolors-opacity-slider,[dir=rtl] .minicolors-slider{right:152px}.minicolors-slider-saturation .minicolors-slider{background-position:-60px 0}.minicolors-slider-brightness .minicolors-slider,.minicolors-slider-wheel .minicolors-slider{background-position:-20px 0}.minicolors-opacity-slider{left:173px;background-position:-40px 0;display:none}[dir=rtl] .minicolors-opacity-slider{right:173px}.minicolors-grid .minicolors-picker{position:absolute;top:70px;left:70px;width:12px;height:12px;box-shadow:0 0 0 1px rgba(0,0,0,.25);border-radius:10px;margin-top:-6px;margin-left:-6px;background:0 0}.minicolors-grid .minicolors-picker>div{position:absolute;top:0;left:0;width:8px;height:8px;border-radius:8px;border:2px solid #fff;box-sizing:content-box}.minicolors-picker{position:absolute;top:0;left:0;width:18px;height:3px;background:#fff;box-shadow:0 0 0 1px rgba(0,0,0,.25);border-radius:2px;margin-top:-2px;margin-left:1px;box-sizing:content-box}.minicolors-swatches,.minicolors-swatches li{margin:5px 0 3px 5px;padding:0;list-style:none;overflow:hidden}[dir=rtl] .minicolors-swatches,[dir=rtl] .minicolors-swatches li{margin:5px 5px 3px 0}.minicolors-swatches .minicolors-swatch{position:relative;float:left;cursor:pointer;margin:0 4px 0 0}[dir=rtl] .minicolors-swatches .minicolors-swatch{float:right;margin:0 0 0 4px}.minicolors-with-opacity .minicolors-swatches .minicolors-swatch{margin-right:7px}[dir=rtl] .minicolors-with-opacity .minicolors-swatches .minicolors-swatch{margin-right:0;margin-left:7px}.minicolors-swatch.selected{border-color:#000}.minicolors-inline{display:inline-block}.minicolors-inline .minicolors-input{display:none!important}.minicolors-inline .minicolors-panel{position:relative;top:auto;left:auto;box-shadow:none;z-index:auto;display:inline-block}[dir=rtl] .minicolors-inline .minicolors-panel{right:auto}.minicolors-theme-default .minicolors-swatch{top:5px;left:5px;width:18px;height:18px}[dir=rtl] .minicolors-theme-default .minicolors-swatch{right:5px}.minicolors-theme-default .minicolors-swatches .minicolors-swatch{margin-bottom:2px;top:0;left:0;width:18px;height:18px}.minicolors-theme-default.minicolors-position-right .minicolors-swatch{left:auto;right:5px}[dir=rtl] .minicolors-theme-default.minicolors-position-left .minicolors-swatch{right:auto;left:5px}.minicolors-theme-default.minicolors{width:auto;display:inline-block}.minicolors-theme-default .minicolors-input{height:20px;width:auto;display:inline-block;padding-left:26px}[dir=rtl] .minicolors-theme-default .minicolors-input{text-align:right;unicode-bidi:plaintext;padding-left:1px;padding-right:26px}.minicolors-theme-default.minicolors-position-right .minicolors-input{padding-right:26px;padding-left:inherit}[dir=rtl] .minicolors-theme-default.minicolors-position-left .minicolors-input{padding-right:inherit;padding-left:26px}.minicolors-theme-bootstrap .minicolors-swatch{z-index:2;top:3px;left:3px;width:28px;height:28px;border-radius:2px}[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatch{right:3px}.minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch{margin-bottom:2px;top:0;left:0;width:20px;height:20px}.minicolors-theme-bootstrap .minicolors-swatch-color{border-radius:inherit}.minicolors-theme-bootstrap.minicolors-position-right>.minicolors-swatch{left:auto;right:3px}[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left>.minicolors-swatch{right:auto;left:3px}.minicolors-theme-bootstrap .minicolors-input{float:none;padding-left:44px}[dir=rtl] .minicolors-theme-bootstrap .minicolors-input{text-align:right;unicode-bidi:plaintext;padding-left:12px;padding-right:44px}.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input{padding-right:44px;padding-left:12px}[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left .minicolors-input{padding-right:12px;padding-left:44px}.minicolors-theme-bootstrap .minicolors-input.input-lg+.minicolors-swatch{top:4px;left:4px;width:37px;height:37px;border-radius:5px}[dir=rtl] .minicolors-theme-bootstrap .minicolors-input.input-lg+.minicolors-swatch{right:4px}.minicolors-theme-bootstrap .minicolors-input.input-sm+.minicolors-swatch{width:24px;height:24px}.minicolors-theme-bootstrap .minicolors-input.input-xs+.minicolors-swatch{width:18px;height:18px}.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input,[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:last-child) .minicolors-input{border-top-left-radius:0;border-bottom-left-radius:0}[dir=rtl] .input-group .minicolors-theme-bootstrap .minicolors-input{border-radius:4px}[dir=rtl] .input-group .form-control:last-child,[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input,[dir=rtl] .input-group-addon:last-child,[dir=rtl] .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,[dir=rtl] .input-group-btn:first-child>.btn:not(:first-child),[dir=rtl] .input-group-btn:last-child>.btn,[dir=rtl] .input-group-btn:last-child>.btn-group>.btn,[dir=rtl] .input-group-btn:last-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .input-group .form-control,[dir=rtl] .input-group-addon,[dir=rtl] .input-group-btn>.btn,[dir=rtl] .input-group-btn>.btn-group>.btn,[dir=rtl] .input-group-btn>.dropdown-toggle{border:1px solid #ccc;border-radius:4px}[dir=rtl] .input-group .form-control:first-child,[dir=rtl] .input-group-addon:first-child,[dir=rtl] .input-group-btn:first-child>.btn,[dir=rtl] .input-group-btn:first-child>.btn-group>.btn,[dir=rtl] .input-group-btn:first-child>.dropdown-toggle,[dir=rtl] .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,[dir=rtl] .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-left-radius:0;border-bottom-left-radius:0;border-left:0}.minicolors-theme-semanticui .minicolors-swatch{top:0;left:0;padding:18px}.minicolors-theme-semanticui input{text-indent:30px} assets/lib/punycode.min.js000064400000003261147400353540011571 0ustar00"use strict";var punycode=new function(){this.utf16={decode:function(r){for(var e,o,t=[],n=0,f=r.length;n>>10&1023|55296)),e=56320|1023&e),o.push(String.fromCharCode(e))}return o.join("")}};var v=36,A=2147483647;this.decode=function(r,e){var o,t,n,f,h,a,i,c,l=[],u=[],d=r.length,s=128,g=0,C=72,p=r.lastIndexOf("-");for(p<0&&(p=0),t=0;t= 0x80");l.push(r.charCodeAt(t))}for(n=0Math.floor((A-g)/h))return;if(g+=c*h,c<(c=a<=C?1:C+26<=a?26:a-C))break;if(h>Math.floor(A/(v-c)))return;h*=v-c}if(C=function(r,e,o){var t;for(r=o?Math.floor(r/700):r>>1,r+=Math.floor(r/e),t=0;455A-s)return;s+=Math.floor(g/o),g%=o,e&&u.splice(g,0,r.charCodeAt(n-1)-65<26),l.splice(g,0,s),g++}if(e)for(g=0,i=l.length;g1?n-1:0),r=1;r2&&void 0!==arguments[2]?arguments[2]:f;t&&t(e,null);let i=o.length;for(;i--;){let t=o[i];if("string"==typeof t){const e=r(t);e!==t&&(n(o)||(o[i]=e),t=e)}e[t]=!0}return e}function R(e){for(let t=0;t/gm),B=a(/\${[\w\W]*}/gm),W=a(/^data-[\-\w.\u00B7-\uFFFF]/),G=a(/^aria-[\-\w]+$/),Y=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),j=a(/^(?:\w+script|data):/i),X=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),q=a(/^html$/i),$=a(/^[a-z][.\w]*(-[.\w]+)+$/i);var K=Object.freeze({__proto__:null,MUSTACHE_EXPR:H,ERB_EXPR:z,TMPLIT_EXPR:B,DATA_ATTR:W,ARIA_ATTR:G,IS_ALLOWED_URI:Y,IS_SCRIPT_OR_DATA:j,ATTR_WHITESPACE:X,DOCTYPE_NAME:q,CUSTOM_ELEMENT:$});const V=1,Z=3,J=7,Q=8,ee=9,te=function(){return"undefined"==typeof window?null:window};var ne=function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:te();const o=e=>t(e);if(o.version="3.1.6",o.removed=[],!n||!n.document||n.document.nodeType!==ee)return o.isSupported=!1,o;let{document:r}=n;const a=r,c=a.currentScript,{DocumentFragment:s,HTMLTemplateElement:N,Node:b,Element:R,NodeFilter:H,NamedNodeMap:z=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:B,DOMParser:W,trustedTypes:G}=n,j=R.prototype,X=C(j,"cloneNode"),$=C(j,"remove"),ne=C(j,"nextSibling"),oe=C(j,"childNodes"),re=C(j,"parentNode");if("function"==typeof N){const e=r.createElement("template");e.content&&e.content.ownerDocument&&(r=e.content.ownerDocument)}let ie,ae="";const{implementation:le,createNodeIterator:ce,createDocumentFragment:se,getElementsByTagName:ue}=r,{importNode:me}=a;let pe={};o.isSupported="function"==typeof e&&"function"==typeof re&&le&&void 0!==le.createHTMLDocument;const{MUSTACHE_EXPR:fe,ERB_EXPR:de,TMPLIT_EXPR:he,DATA_ATTR:ge,ARIA_ATTR:Te,IS_SCRIPT_OR_DATA:ye,ATTR_WHITESPACE:Ee,CUSTOM_ELEMENT:_e}=K;let{IS_ALLOWED_URI:Ae}=K,Ne=null;const be=S({},[...L,...D,...v,...x,...M]);let Se=null;const Re=S({},[...I,...U,...P,...F]);let we=Object.seal(l(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ce=null,Le=null,De=!0,ve=!0,Oe=!1,xe=!0,ke=!1,Me=!0,Ie=!1,Ue=!1,Pe=!1,Fe=!1,He=!1,ze=!1,Be=!0,We=!1,Ge=!0,Ye=!1,je={},Xe=null;const qe=S({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let $e=null;const Ke=S({},["audio","video","img","source","image","track"]);let Ve=null;const Ze=S({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Je="http://www.w3.org/1998/Math/MathML",Qe="http://www.w3.org/2000/svg",et="http://www.w3.org/1999/xhtml";let tt=et,nt=!1,ot=null;const rt=S({},[Je,Qe,et],d);let it=null;const at=["application/xhtml+xml","text/html"];let lt=null,ct=null;const st=r.createElement("form"),ut=function(e){return e instanceof RegExp||e instanceof Function},mt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!ct||ct!==e){if(e&&"object"==typeof e||(e={}),e=w(e),it=-1===at.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,lt="application/xhtml+xml"===it?d:f,Ne=E(e,"ALLOWED_TAGS")?S({},e.ALLOWED_TAGS,lt):be,Se=E(e,"ALLOWED_ATTR")?S({},e.ALLOWED_ATTR,lt):Re,ot=E(e,"ALLOWED_NAMESPACES")?S({},e.ALLOWED_NAMESPACES,d):rt,Ve=E(e,"ADD_URI_SAFE_ATTR")?S(w(Ze),e.ADD_URI_SAFE_ATTR,lt):Ze,$e=E(e,"ADD_DATA_URI_TAGS")?S(w(Ke),e.ADD_DATA_URI_TAGS,lt):Ke,Xe=E(e,"FORBID_CONTENTS")?S({},e.FORBID_CONTENTS,lt):qe,Ce=E(e,"FORBID_TAGS")?S({},e.FORBID_TAGS,lt):{},Le=E(e,"FORBID_ATTR")?S({},e.FORBID_ATTR,lt):{},je=!!E(e,"USE_PROFILES")&&e.USE_PROFILES,De=!1!==e.ALLOW_ARIA_ATTR,ve=!1!==e.ALLOW_DATA_ATTR,Oe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,xe=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,ke=e.SAFE_FOR_TEMPLATES||!1,Me=!1!==e.SAFE_FOR_XML,Ie=e.WHOLE_DOCUMENT||!1,Fe=e.RETURN_DOM||!1,He=e.RETURN_DOM_FRAGMENT||!1,ze=e.RETURN_TRUSTED_TYPE||!1,Pe=e.FORCE_BODY||!1,Be=!1!==e.SANITIZE_DOM,We=e.SANITIZE_NAMED_PROPS||!1,Ge=!1!==e.KEEP_CONTENT,Ye=e.IN_PLACE||!1,Ae=e.ALLOWED_URI_REGEXP||Y,tt=e.NAMESPACE||et,we=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&ut(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(we.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&ut(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(we.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(we.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),ke&&(ve=!1),He&&(Fe=!0),je&&(Ne=S({},M),Se=[],!0===je.html&&(S(Ne,L),S(Se,I)),!0===je.svg&&(S(Ne,D),S(Se,U),S(Se,F)),!0===je.svgFilters&&(S(Ne,v),S(Se,U),S(Se,F)),!0===je.mathMl&&(S(Ne,x),S(Se,P),S(Se,F))),e.ADD_TAGS&&(Ne===be&&(Ne=w(Ne)),S(Ne,e.ADD_TAGS,lt)),e.ADD_ATTR&&(Se===Re&&(Se=w(Se)),S(Se,e.ADD_ATTR,lt)),e.ADD_URI_SAFE_ATTR&&S(Ve,e.ADD_URI_SAFE_ATTR,lt),e.FORBID_CONTENTS&&(Xe===qe&&(Xe=w(Xe)),S(Xe,e.FORBID_CONTENTS,lt)),Ge&&(Ne["#text"]=!0),Ie&&S(Ne,["html","head","body"]),Ne.table&&(S(Ne,["tbody"]),delete Ce.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');ie=e.TRUSTED_TYPES_POLICY,ae=ie.createHTML("")}else void 0===ie&&(ie=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const o="data-tt-policy-suffix";t&&t.hasAttribute(o)&&(n=t.getAttribute(o));const r="dompurify"+(n?"#"+n:"");try{return e.createPolicy(r,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+r+" could not be created."),null}}(G,c)),null!==ie&&"string"==typeof ae&&(ae=ie.createHTML(""));i&&i(e),ct=e}},pt=S({},["mi","mo","mn","ms","mtext"]),ft=S({},["foreignobject","annotation-xml"]),dt=S({},["title","style","font","a","script"]),ht=S({},[...D,...v,...O]),gt=S({},[...x,...k]),Tt=function(e){p(o.removed,{element:e});try{re(e).removeChild(e)}catch(t){$(e)}},yt=function(e,t){try{p(o.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){p(o.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!Se[e])if(Fe||He)try{Tt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},Et=function(e){let t=null,n=null;if(Pe)e=""+e;else{const t=h(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===it&&tt===et&&(e=''+e+"");const o=ie?ie.createHTML(e):e;if(tt===et)try{t=(new W).parseFromString(o,it)}catch(e){}if(!t||!t.documentElement){t=le.createDocument(tt,"template",null);try{t.documentElement.innerHTML=nt?ae:o}catch(e){}}const i=t.body||t.documentElement;return e&&n&&i.insertBefore(r.createTextNode(n),i.childNodes[0]||null),tt===et?ue.call(t,Ie?"html":"body")[0]:Ie?t.documentElement:i},_t=function(e){return ce.call(e.ownerDocument||e,e,H.SHOW_ELEMENT|H.SHOW_COMMENT|H.SHOW_TEXT|H.SHOW_PROCESSING_INSTRUCTION|H.SHOW_CDATA_SECTION,null)},At=function(e){return e instanceof B&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof z)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},Nt=function(e){return"function"==typeof b&&e instanceof b},bt=function(e,t,n){pe[e]&&u(pe[e],(e=>{e.call(o,t,n,ct)}))},St=function(e){let t=null;if(bt("beforeSanitizeElements",e,null),At(e))return Tt(e),!0;const n=lt(e.nodeName);if(bt("uponSanitizeElement",e,{tagName:n,allowedTags:Ne}),e.hasChildNodes()&&!Nt(e.firstElementChild)&&_(/<[/\w]/g,e.innerHTML)&&_(/<[/\w]/g,e.textContent))return Tt(e),!0;if(e.nodeType===J)return Tt(e),!0;if(Me&&e.nodeType===Q&&_(/<[/\w]/g,e.data))return Tt(e),!0;if(!Ne[n]||Ce[n]){if(!Ce[n]&&wt(n)){if(we.tagNameCheck instanceof RegExp&&_(we.tagNameCheck,n))return!1;if(we.tagNameCheck instanceof Function&&we.tagNameCheck(n))return!1}if(Ge&&!Xe[n]){const t=re(e)||e.parentNode,n=oe(e)||e.childNodes;if(n&&t){for(let o=n.length-1;o>=0;--o){const r=X(n[o],!0);r.__removalCount=(e.__removalCount||0)+1,t.insertBefore(r,ne(e))}}}return Tt(e),!0}return e instanceof R&&!function(e){let t=re(e);t&&t.tagName||(t={namespaceURI:tt,tagName:"template"});const n=f(e.tagName),o=f(t.tagName);return!!ot[e.namespaceURI]&&(e.namespaceURI===Qe?t.namespaceURI===et?"svg"===n:t.namespaceURI===Je?"svg"===n&&("annotation-xml"===o||pt[o]):Boolean(ht[n]):e.namespaceURI===Je?t.namespaceURI===et?"math"===n:t.namespaceURI===Qe?"math"===n&&ft[o]:Boolean(gt[n]):e.namespaceURI===et?!(t.namespaceURI===Qe&&!ft[o])&&!(t.namespaceURI===Je&&!pt[o])&&!gt[n]&&(dt[n]||!ht[n]):!("application/xhtml+xml"!==it||!ot[e.namespaceURI]))}(e)?(Tt(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!_(/<\/no(script|embed|frames)/i,e.innerHTML)?(ke&&e.nodeType===Z&&(t=e.textContent,u([fe,de,he],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(o.removed,{element:e.cloneNode()}),e.textContent=t)),bt("afterSanitizeElements",e,null),!1):(Tt(e),!0)},Rt=function(e,t,n){if(Be&&("id"===t||"name"===t)&&(n in r||n in st))return!1;if(ve&&!Le[t]&&_(ge,t));else if(De&&_(Te,t));else if(!Se[t]||Le[t]){if(!(wt(e)&&(we.tagNameCheck instanceof RegExp&&_(we.tagNameCheck,e)||we.tagNameCheck instanceof Function&&we.tagNameCheck(e))&&(we.attributeNameCheck instanceof RegExp&&_(we.attributeNameCheck,t)||we.attributeNameCheck instanceof Function&&we.attributeNameCheck(t))||"is"===t&&we.allowCustomizedBuiltInElements&&(we.tagNameCheck instanceof RegExp&&_(we.tagNameCheck,n)||we.tagNameCheck instanceof Function&&we.tagNameCheck(n))))return!1}else if(Ve[t]);else if(_(Ae,g(n,Ee,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==T(n,"data:")||!$e[e]){if(Oe&&!_(ye,g(n,Ee,"")));else if(n)return!1}else;return!0},wt=function(e){return"annotation-xml"!==e&&h(e,_e)},Ct=function(e){bt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Se};let r=t.length;for(;r--;){const i=t[r],{name:a,namespaceURI:l,value:c}=i,s=lt(a);let p="value"===a?c:y(c);if(n.attrName=s,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,bt("uponSanitizeAttribute",e,n),p=n.attrValue,Me&&_(/((--!?|])>)|<\/(style|title)/i,p)){yt(a,e);continue}if(n.forceKeepAttr)continue;if(yt(a,e),!n.keepAttr)continue;if(!xe&&_(/\/>/i,p)){yt(a,e);continue}ke&&u([fe,de,he],(e=>{p=g(p,e," ")}));const f=lt(e.nodeName);if(Rt(f,s,p)){if(!We||"id"!==s&&"name"!==s||(yt(a,e),p="user-content-"+p),ie&&"object"==typeof G&&"function"==typeof G.getAttributeType)if(l);else switch(G.getAttributeType(f,s)){case"TrustedHTML":p=ie.createHTML(p);break;case"TrustedScriptURL":p=ie.createScriptURL(p)}try{l?e.setAttributeNS(l,a,p):e.setAttribute(a,p),At(e)?Tt(e):m(o.removed)}catch(e){}}}bt("afterSanitizeAttributes",e,null)},Lt=function e(t){let n=null;const o=_t(t);for(bt("beforeSanitizeShadowDOM",t,null);n=o.nextNode();)bt("uponSanitizeShadowNode",n,null),St(n)||(n.content instanceof s&&e(n.content),Ct(n));bt("afterSanitizeShadowDOM",t,null)};return o.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,r=null,i=null,l=null;if(nt=!e,nt&&(e="\x3c!--\x3e"),"string"!=typeof e&&!Nt(e)){if("function"!=typeof e.toString)throw A("toString is not a function");if("string"!=typeof(e=e.toString()))throw A("dirty is not a string, aborting")}if(!o.isSupported)return e;if(Ue||mt(t),o.removed=[],"string"==typeof e&&(Ye=!1),Ye){if(e.nodeName){const t=lt(e.nodeName);if(!Ne[t]||Ce[t])throw A("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof b)n=Et("\x3c!----\x3e"),r=n.ownerDocument.importNode(e,!0),r.nodeType===V&&"BODY"===r.nodeName||"HTML"===r.nodeName?n=r:n.appendChild(r);else{if(!Fe&&!ke&&!Ie&&-1===e.indexOf("<"))return ie&&ze?ie.createHTML(e):e;if(n=Et(e),!n)return Fe?null:ze?ae:""}n&&Pe&&Tt(n.firstChild);const c=_t(Ye?e:n);for(;i=c.nextNode();)St(i)||(i.content instanceof s&&Lt(i.content),Ct(i));if(Ye)return e;if(Fe){if(He)for(l=se.call(n.ownerDocument);n.firstChild;)l.appendChild(n.firstChild);else l=n;return(Se.shadowroot||Se.shadowrootmode)&&(l=me.call(a,l,!0)),l}let m=Ie?n.outerHTML:n.innerHTML;return Ie&&Ne["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&_(q,n.ownerDocument.doctype.name)&&(m="\n"+m),ke&&u([fe,de,he],(e=>{m=g(m,e," ")})),ie&&ze?ie.createHTML(m):m},o.setConfig=function(){mt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Ue=!0},o.clearConfig=function(){ct=null,Ue=!1},o.isValidAttribute=function(e,t,n){ct||mt({});const o=lt(e),r=lt(t);return Rt(o,r,n)},o.addHook=function(e,t){"function"==typeof t&&(pe[e]=pe[e]||[],p(pe[e],t))},o.removeHook=function(e){if(pe[e])return m(pe[e])},o.removeHooks=function(e){pe[e]&&(pe[e]=[])},o.removeAllHooks=function(){pe={}},o}();return ne})); assets/lib/jquery.insert-at-caret.min.js000064400000001636147400353540014267 0ustar00/*! * jQuery insertAtCaret 1.1.4 * http://www.karalamalar.net/ * * Copyright (c) 2013 İzzet Emre Erkan * Licensed under GPLv2 or later. * http://www.gnu.org/licenses/gpl-2.0.txt * * Contributors: * [@kittsville](https://github.com/kittsville) * */ !function(e,t){e.fn.insertAtCaret=function(e){return this.each(function(){var a,n,r,o,c=this,l=0,s="selectionStart"in c&&"selectionEnd"in c;(c.tagName&&"textarea"===c.tagName.toLowerCase()||c.tagName&&"input"===c.tagName.toLowerCase()&&"text"===c.type.toLowerCase())&&(a=c.scrollTop,s?l=c.selectionStart:(c.focus(),o=t.selection.createRange(),o.moveStart("character",-c.value.length),l=o.text.length),n=c.value.substring(0,l),r=c.value.substring(l,c.value.length),c.value=n+e+r,l+=e.length,s?(c.selectionStart=l,c.selectionEnd=l):(o=t.selection.createRange(),o.moveStart("character",l),o.moveEnd("character",0),o.select()),c.scrollTop=a)})}}(jQuery,document,window);assets/lib/wpforms-multiselect/wpforms-multiselect-checkboxes.min.js000064400000023060147400353540022130 0ustar00!function(e,t){const s="WPFormsMultiSelectCheckbox";"function"==typeof define&&define.amd?define([],t(s)):"object"==typeof exports?module.exports=t(s):e[s]=t(s)}(this,(function(e){class t{static defaults={showSearch:!1,showTags:!1,showClear:!1,showMask:!1,tagsPlacement:"top",delimiter:", ",customOpener:null};static i18n={search:"Search",clear:"Clear",all:"All",multiple:"Multiple"};constructor(e,s={}){this.element=e,this.i18n=Object.assign({},t.i18n,s.i18n),s.i18n&&delete s.i18n,this.settings=Object.assign({},t.defaults,s),this.wrapper=document.createElement("div"),this.wrapInner=document.createElement("div"),this.formWrapper=document.createElement("div"),this.input=document.createElement("input"),this.list=document.createElement("div"),this.selectedOptionsContainer=null,this.clearButton=null,this.search=null,this.mask=null}init(){try{const e="string"==typeof this.element?document.getElementById(this.element):this.element;if(!e)throw new s("The specified element could not be found.");if(!(e instanceof HTMLSelectElement))throw new s("This plugin can only be used on select fields.");if(!e.multiple)throw new s('This plugin can only be used on select fields with the "multiple" attribute.');if(0===e.options.length)throw new s("This plugin can only be used on select fields with available options.");let t;try{t=JSON.parse(e.getAttribute("data-settings"))||{}}catch(e){throw new s("Failed to parse the plugin settings. Please ensure that the settings are provided in valid JSON format.")}if(this.i18n=Object.assign({},this.i18n,t.i18n),this.settings=Object.assign({},this.settings,t),"boolean"!=typeof this.settings.showSearch)throw new s('The "showSearch" property must be a boolean value.');if("boolean"!=typeof this.settings.showTags)throw new s('The "showTags" property must be a boolean value.');if("boolean"!=typeof this.settings.showClear)throw new s('The "showClear" property must be a boolean value.');if("string"!=typeof this.settings.tagsPlacement||!["top","bottom","left","right"].includes(this.settings.tagsPlacement))throw new s('The "tagsPlacement" property must be a string value and one of the following: top, bottom, left, right.');i.call(this,e)}catch(e){n(e)}}update(e,t){try{if(!e)throw new s('The update method requires the "element" parameter.');if(!(e instanceof HTMLSelectElement))throw new s("This plugin can only be used on select fields.");if(!Array.isArray(t))throw new s('The update method requires the "values" parameter to be an array.');const i=Array.from(e.parentNode.querySelectorAll('input[type="checkbox"]'));if(0===i.length)throw new s("Could not find the checkboxes associated with the select field.");i.forEach((e=>{e.checked=t.includes(e.value)}));const n=e.parentNode.querySelector(".wpforms-multiselect-checkbox-list");if(!n)throw new s("Could not find the list element associated with the select field.");n.dispatchEvent(new CustomEvent("change",{detail:{isForced:!0}}))}catch(e){n(e)}}}class s extends Error{constructor(t){super(t),this.name=e}}function i(e){e.style.display="none";const{showSearch:s,showTags:i,showClear:n,showMask:a,tagsPlacement:l,delimiter:o}=this.settings;this.wrapper.classList.add("wpforms-multiselect-checkbox-dropdown"),e.parentNode.insertBefore(this.wrapper,e),this.wrapper.appendChild(e),this.wrapInner.classList.add("wpforms-multiselect-checkbox-wrapper"),this.wrapper.appendChild(this.wrapInner),this.formWrapper.classList.add("wpforms-multiselect-checkbox-form-outline"),this.wrapInner.appendChild(this.formWrapper),a&&(this.wrapper.classList.add("has-mask"),this.mask=document.createElement("span"),this.mask.classList.add("wpforms-multiselect-checkbox-input-mask"),this.formWrapper.appendChild(this.mask));const r=e.getAttribute("placeholder")||"";Object.assign(this.input,{type:"text",name:e.name,disabled:e.disabled,placeholder:r,className:"wpforms-multiselect-checkbox-input",readOnly:!0,autocomplete:"off",autocapitalize:"none",spellcheck:!1,role:"combobox",tabIndex:0,ariaAutoComplete:"list",ariaHasPopup:!0,ariaExpanded:!1,ariaMultiSelectable:!0,ariaReadOnly:!0,ariaDisabled:e.disabled}),this.formWrapper.appendChild(this.input),e.removeAttribute("name");const c=document.createElement("span");Object.assign(c,{className:"wpforms-multiselect-checkbox-input-placeholder",role:"presentation"}),c.textContent=r,this.formWrapper.appendChild(c);const h=document.createElement("span");if(h.setAttribute("role","presentation"),h.classList.add("wpforms-multiselect-checkbox-arrow"),this.formWrapper.appendChild(h),e.disabled)return void this.formWrapper.classList.add("disabled");n&&(this.wrapper.classList.add("has-clear"),this.clearButton=document.createElement("span"),Object.assign(this.clearButton,{innerHTML:"×",className:"wpforms-multiselect-checkbox-clear",role:"button",ariaLabel:t.i18n.clear}),this.formWrapper.appendChild(this.clearButton)),this.list.classList.add("wpforms-multiselect-checkbox-list"),this.wrapInner.appendChild(this.list),i&&(this.selectedOptionsContainer=document.createElement("div"),this.selectedOptionsContainer.classList.add("wpforms-multiselect-checkbox-selected"),this.wrapper.classList.add(`has-tags-${l}`),this.wrapper.appendChild(this.selectedOptionsContainer)),s&&(this.wrapper.classList.add("has-search"),this.search=document.createElement("input"),Object.assign(this.search,{type:"search",className:"wpforms-multiselect-checkbox-search",placeholder:t.i18n.search,ariaLabel:t.i18n.search}),this.list.appendChild(this.search));const p=document.createElement("div");Object.assign(p,{role:"listbox",className:"wpforms-multiselect-checkbox-items",ariaLabel:this.input.getAttribute("placeholder"),ariaHidden:!1}),this.list.appendChild(p);let d=null;const u=Array.from(e.options).map((e=>{const t=document.createElement("label"),s=document.createElement("span"),i=document.createElement("input"),n="OPTGROUP"===e.parentNode.tagName?e.parentNode.label:null;if(n&&n!==d){const e=document.createElement("span");e.classList.add("wpforms-multiselect-checkbox-optgroup"),e.textContent=n,p.appendChild(e),d=n}return s.textContent=e.textContent,t.classList.toggle("disabled",e.disabled),t.setAttribute("role","option"),p.appendChild(t),Object.assign(i,{type:"checkbox",disabled:e.disabled,value:e.value,checked:e.selected,ariaDisabled:e.disabled}),t.appendChild(i),t.appendChild(s),i})),m=()=>{const t=Array.from(u).filter((e=>e.checked)).map((e=>e.value));if(this.input.value=t.join(o),this.input.setAttribute("value",this.input.value),i){if(this.selectedOptionsContainer.textContent="",0===t.length)return this.input.value="",this.input.removeAttribute("value"),void(this.clearButton&&(this.clearButton.style.visibility="hidden"));t.forEach((e=>{const t=document.createElement("span");t.classList.add("wpforms-multiselect-checkbox-selected-option"),t.textContent=e;const s=document.createElement("span");s.dataset.value=e,Object.assign(s,{innerHTML:"×",className:"wpforms-multiselect-checkbox-remove",role:"button",ariaLabel:`Remove ${e}`}),t.appendChild(s),this.selectedOptionsContainer.appendChild(t)}))}a&&(t.length===u.length&&u.length>1?(c.textContent="",this.mask.textContent=this.i18n.all):0===t.length||1===t.length?(this.mask.textContent=b(t[0]),c.textContent=r):(c.textContent="",this.mask.textContent=this.i18n.multiple.replace("{count}",t.length))),this.clearButton&&(this.clearButton.style.visibility=t.length?"visible":"hidden");const s=new CustomEvent("wpforms_multiselect_checkbox_changed",{bubbles:!0,cancelable:!0,detail:{selectedOptions:t}});e.dispatchEvent(s)},b=t=>{const s=Array.from(e.options).find((e=>e.value===t));return s?s.textContent.trim():""},f=t=>{const s=this.list.querySelector(`input[value="${t}"]`);if(!s)return;s.checked=!1,m();const i=new CustomEvent("wpforms_multiselect_checkbox_removed",{bubbles:!0,cancelable:!0,detail:{removedOption:t}});e.dispatchEvent(i)},w=({target:e})=>{const t=this.list.classList.toggle("open");if(e.setAttribute("aria-expanded",t),x(t),!t)return k(),void this.list.classList.remove("open-up");const s=this.list.getBoundingClientRect(),i=window.innerHeight||document.documentElement.clientHeight;s.top+s.height>i?this.list.classList.add("open-up"):this.list.classList.remove("open-up")},g=()=>{u.forEach((e=>{e.checked=!1})),m(),y({},!0)},v=({target:e})=>{const t=e.value.toLowerCase();Array.from(this.list.querySelectorAll("label")).forEach((e=>{const s=e.querySelector("span").textContent.toLowerCase();e.style.display=s.includes(t)||0===t.length?"inline-flex":"none"}))},C=({target:e})=>{if(!e.classList.contains("wpforms-multiselect-checkbox-remove"))return;const t=e.dataset.value;f(t)},y=({target:e},t=!1)=>{this.wrapper.contains(e)&&!t||this.settings.customOpener&&this.settings.customOpener?.contains(e)||(k(),this.list.classList.remove("open","open-up"),this.input.setAttribute("aria-expanded",!1),x(!1))},k=()=>{this.search&&(this.search.value="",this.search.dispatchEvent(new Event("input")))},x=t=>{const s=new CustomEvent("wpforms_multiselect_checkbox_list_toggle",{bubbles:!0,detail:{isOpen:t}});e.dispatchEvent(s)};this.input.addEventListener("click",w),this.input.addEventListener("keydown",(e=>{" "!==e.key&&"Spacebar"!==e.key||(e.preventDefault(),w(e))})),this.list.addEventListener("change",(({target:e,detail:t})=>{"INPUT"!==e.tagName&&"checkbox"!==e.type&&!0!==t?.isForced||m()})),document.addEventListener("click",y),this.settings.customOpener&&this.settings.customOpener.addEventListener("click",w),this.selectedOptionsContainer&&this.selectedOptionsContainer.addEventListener("click",C),this.clearButton&&this.clearButton.addEventListener("click",g),this.search&&this.search.addEventListener("input",function(e,t){let s;return function(...i){clearTimeout(s),s=setTimeout((()=>{e.apply(this,i)}),t)}}(v,300)),m()}function n(e){console.error(e)}return t})); assets/lib/wpforms-multiselect/wpforms-multiselect-checkboxes.min.css000064400000013266147400353540022313 0ustar00.wpforms-multiselect-checkbox-dropdown{align-items:center;display:inline-flex;flex-wrap:wrap;font-size:14px;gap:10px;line-height:16.7px;max-width:100%}.wpforms-multiselect-checkbox-dropdown.has-tags-bottom,.wpforms-multiselect-checkbox-dropdown.has-tags-top{flex-direction:column}.wpforms-multiselect-checkbox-wrapper{max-width:100%;position:relative;width:100%}.wpforms-multiselect-checkbox-form-outline{align-items:center;background:#fff;border:1px solid #8c8f94;border-radius:3px;box-sizing:border-box;color:#32373c;display:flex;height:30px;min-width:126px;padding-block:0;padding-inline:9px 27px}.wpforms-multiselect-checkbox-dropdown:focus-within .wpforms-multiselect-checkbox-form-outline,.wpforms-multiselect-checkbox-form-outline:focus,.wpforms-multiselect-checkbox-form-outline:focus-within{border-color:#036aab;box-shadow:0 0 0 1px #036aab}.wpforms-multiselect-checkbox-dropdown.has-clear .wpforms-multiselect-checkbox-form-outline{padding-inline-end:38px}.wpforms-multiselect-checkbox-form-outline.disabled{background:#f8f8f8;border-color:rgba(220,220,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04)}.wpforms-multiselect-checkbox-form-outline.disabled,.wpforms-multiselect-checkbox-form-outline.disabled [disabled],.wpforms-multiselect-checkbox-form-outline.disabled>span,.wpforms-multiselect-checkbox-list label.disabled{color:rgba(44,51,56,.5)}.wpforms-multiselect-checkbox-arrow{border-color:currentcolor;border-style:hidden solid solid hidden;border-width:1.6px;box-sizing:border-box;color:#50575e;height:8px;inset-inline-end:10px;margin-top:-3px;position:absolute;transform:rotate(45deg);width:8px}.wpforms-multiselect-checkbox-clear{cursor:pointer;font-size:16px;inset-inline-end:25px;position:absolute;z-index:2}.wpforms-multiselect-checkbox-clear:hover{color:#d63638}.wpforms-multiselect-checkbox-wrapper .wpforms-multiselect-checkbox-input{background:0 0;border:0;box-shadow:none;color:inherit;cursor:pointer;height:100%;inset-inline-start:0;margin:0;outline:0;padding:inherit;position:absolute;text-overflow:ellipsis;white-space:nowrap;width:100%;z-index:1}.wpforms-multiselect-checkbox-input[disabled]{cursor:not-allowed}.wpforms-multiselect-checkbox-input-mask:not(:empty)+.wpforms-multiselect-checkbox-input:not(:placeholder-shown),.wpforms-multiselect-checkbox-input::placeholder{color:transparent}.wpforms-multiselect-checkbox-input-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wpforms-multiselect-checkbox-input:not(:placeholder-shown)+.wpforms-multiselect-checkbox-input-placeholder{display:none}.wpforms-multiselect-checkbox-list{background:#fff;border-radius:6px;box-shadow:0 5px 15px rgba(0,0,0,.15);color:#50575e;display:none;inset-inline-start:0;margin-top:6px;max-width:90vw;min-width:100%;padding-block:5px;position:absolute;text-align:start;top:100%;width:max-content;z-index:30}.wpforms-multiselect-checkbox-list.open{display:block}.wpforms-multiselect-checkbox-list.open-up{bottom:100%;margin:0 0 9px;top:auto}.wpforms-multiselect-checkbox-search{background:#fff;border:1px solid #8c8f94;border-radius:3px;color:#3c434a;font-size:14px;height:30px;line-height:30px;margin:0 9px 10px;outline-offset:0;padding:0 10px;width:calc(100% - 18px)}.wpforms-multiselect-checkbox-items{display:flex;flex-direction:column;max-height:350px;overflow-y:auto}.wpforms-multiselect-checkbox-items::-webkit-scrollbar{width:2px}.wpforms-multiselect-checkbox-items::-webkit-scrollbar-thumb{background-color:#8c8f94}.wpforms-multiselect-checkbox-items .wpforms-multiselect-checkbox-optgroup{color:#8c8f94;font-weight:600;font-size:14px;line-height:19px;padding:0 0 0 10px;margin:9px 0;border-top:1px solid #dcdcde;padding-top:10px;user-select:none}.wpforms-multiselect-checkbox-items .wpforms-multiselect-checkbox-optgroup:first-of-type{border-top:none;padding-top:0}.wpforms-multiselect-checkbox-items label{align-items:flex-start;cursor:pointer;display:flex;gap:10px;padding-block:5px;margin:0 10px}.wpforms-multiselect-checkbox-items label.disabled{cursor:not-allowed}.wpforms-multiselect-checkbox-items label:not(.disabled):hover{color:#1d2327}.wpforms-multiselect-checkbox-items [type=checkbox]{box-shadow:none;height:16px;margin:0;padding:0;position:relative;width:16px}.wpforms-multiselect-checkbox-items [type=checkbox]:checked{background-color:#056aab;border-color:#056aab!important;box-shadow:none!important}.wpforms-multiselect-checkbox-items [type=checkbox]:checked::before{-webkit-mask-image:url(data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.83%204.89l1.34.94-5.81%208.38H9.02L5.78%209.67l1.34-1.25%202.57%202.4z%27%20fill%3D%27%233582c4%27%2F%3E%3C%2Fsvg%3E);background-color:#fff;content:"";height:18px;left:-2.5px;margin:0;mask-image:url(data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.83%204.89l1.34.94-5.81%208.38H9.02L5.78%209.67l1.34-1.25%202.57%202.4z%27%20fill%3D%27%233582c4%27%2F%3E%3C%2Fsvg%3E);position:absolute;top:-1.5px;width:18px}.wpforms-multiselect-checkbox-selected{display:flex;flex-wrap:wrap;gap:3px}.has-tags-left>.wpforms-multiselect-checkbox-selected,.has-tags-top>.wpforms-multiselect-checkbox-selected{order:-1}.wpforms-multiselect-checkbox-selected:empty{display:none}.wpforms-multiselect-checkbox-selected-option{align-items:center;background-color:#036aab;border-radius:2px;color:#fff;display:flex;font-size:11px;gap:3px;padding:4px 7px;word-break:break-word}.wpforms-multiselect-checkbox-remove{background:#fff;border-radius:50%;color:#036aab;cursor:pointer;height:12px;line-height:1;min-width:12px;opacity:.75}@media (max-width:782px){.wpforms-multiselect-checkbox-form-outline{font-size:16px;min-height:40px;padding-inline-start:8px}} assets/lib/flatpickr/flatpickr.min.css000064400000037404147400353540014063 0ustar00.flatpickr-calendar * { box-sizing: border-box; } .flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08)}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9)}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{/* /*rtl:begin:ignore*/left:0/* /*rtl:end:ignore*/}/* /*rtl:begin:ignore*/ /* /*rtl:end:ignore*/ .flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{/* /*rtl:begin:ignore*/right:0/* /*rtl:end:ignore*/}/* /*rtl:begin:ignore*/ /* /*rtl:end:ignore*/ .flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,0.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,0.1)}.numInputWrapper span:active{background:rgba(0,0,0,0.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,0.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,0.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,0.5)}.numInputWrapper:hover{background:rgba(0,0,0,0.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,0.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,0.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,0.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,0.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer + .dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,0.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,0.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,0.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:bold}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}} assets/lib/flatpickr/flatpickr.min.js000064400000141007147400353540013702 0ustar00/* flatpickr v4.6.9,, @license MIT */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).flatpickr=t()}(this,(function(){"use strict";var e=function(){return(e=Object.assign||function(e){for(var t,n=1,a=arguments.length;n",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},i={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},o=function(e,t){return void 0===t&&(t=2),("000"+e).slice(-1*t)},r=function(e){return!0===e?1:0};function l(e,t){var n;return function(){var a=this;clearTimeout(n),n=setTimeout((function(){return e.apply(a,arguments)}),t)}}var c=function(e){return e instanceof Array?e:[e]};function d(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function s(e,t,n){var a=window.document.createElement(e);return t=t||"",n=n||"",a.className=t,void 0!==n&&(a.textContent=n),a}function u(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function f(e,t){return t(e)?e:e.parentNode?f(e.parentNode,t):void 0}function m(e,t){var n=s("div","numInputWrapper"),a=s("input","numInput "+e),i=s("span","arrowUp"),o=s("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?a.type="number":(a.type="text",a.pattern="\\d*"),void 0!==t)for(var r in t)a.setAttribute(r,t[r]);return n.appendChild(a),n.appendChild(i),n.appendChild(o),n}function g(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(t){return e.target}}var p=function(){},h=function(e,t,n){return n.months[t?"shorthand":"longhand"][e]},v={D:p,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours(parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*r(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t,n){var a=parseInt(t),i=new Date(e.getFullYear(),0,2+7*(a-1),0,0,0,0);return i.setDate(i.getDate()-i.getDay()+n.firstDayOfWeek),i},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours(parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:p,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},u:function(e,t){return new Date(parseFloat(t))},w:p,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},D={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},w={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[w.w(e,t,n)]},F:function(e,t,n){return h(w.n(e,t,n)-1,!1,t)},G:function(e,t,n){return o(w.h(e,t,n))},H:function(e){return o(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[r(e.getHours()>11)]},M:function(e,t){return h(e.getMonth(),!0,t)},S:function(e){return o(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return o(e.getFullYear(),4)},d:function(e){return o(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return o(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return o(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},b=function(e){var t=e.config,n=void 0===t?a:t,o=e.l10n,r=void 0===o?i:o,l=e.isMobile,c=void 0!==l&&l;return function(e,t,a){var i=a||r;return void 0===n.formatDate||c?t.split("").map((function(t,a,o){return w[t]&&"\\"!==o[a-1]?w[t](e,i,n):"\\"!==t?t:""})).join(""):n.formatDate(e,t,i)}},C=function(e){var t=e.config,n=void 0===t?a:t,o=e.l10n,r=void 0===o?i:o;return function(e,t,i,o){if(0===e||e){var l,c=o||r,d=e;if(e instanceof Date)l=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)l=new Date(e);else if("string"==typeof e){var s=t||(n||a).dateFormat,u=String(e).trim();if("today"===u)l=new Date,i=!0;else if(/Z$/.test(u)||/GMT$/.test(u))l=new Date(e);else if(n&&n.parseDate)l=n.parseDate(e,s);else{l=n&&n.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f=void 0,m=[],g=0,p=0,h="";g=0?new Date:new Date(w.config.minDate.getTime()),n=x(w.config);t.setHours(n.hours,n.minutes,n.seconds,t.getMilliseconds()),w.selectedDates=[t],w.latestSelectedDateObj=t}void 0!==e&&"blur"!==e.type&&function(e){e.preventDefault();var t="keydown"===e.type,n=g(e),a=n;void 0!==w.amPM&&n===w.amPM&&(w.amPM.textContent=w.l10n.amPM[r(w.amPM.textContent===w.l10n.amPM[0])]);var i=parseFloat(a.getAttribute("min")),l=parseFloat(a.getAttribute("max")),c=parseFloat(a.getAttribute("step")),d=parseInt(a.value,10),s=e.delta||(t?38===e.which?1:-1:0),u=d+c*s;if(void 0!==a.value&&2===a.value.length){var f=a===w.hourElement,m=a===w.minuteElement;ul&&(u=a===w.hourElement?u-l-r(!w.amPM):i,m&&j(void 0,1,w.hourElement)),w.amPM&&f&&(1===c?u+d===23:Math.abs(u-d)>c)&&(w.amPM.textContent=w.l10n.amPM[r(w.amPM.textContent===w.l10n.amPM[0])]),a.value=o(u)}}(e);var a=w._input.value;S(),be(),w._input.value!==a&&w._debouncedChange()}function S(){if(void 0!==w.hourElement&&void 0!==w.minuteElement){var e,t,n=(parseInt(w.hourElement.value.slice(-2),10)||0)%24,a=(parseInt(w.minuteElement.value,10)||0)%60,i=void 0!==w.secondElement?(parseInt(w.secondElement.value,10)||0)%60:0;void 0!==w.amPM&&(e=n,t=w.amPM.textContent,n=e%12+12*r(t===w.l10n.amPM[1]));var o=void 0!==w.config.minTime||w.config.minDate&&w.minDateHasTime&&w.latestSelectedDateObj&&0===M(w.latestSelectedDateObj,w.config.minDate,!0);if(void 0!==w.config.maxTime||w.config.maxDate&&w.maxDateHasTime&&w.latestSelectedDateObj&&0===M(w.latestSelectedDateObj,w.config.maxDate,!0)){var l=void 0!==w.config.maxTime?w.config.maxTime:w.config.maxDate;(n=Math.min(n,l.getHours()))===l.getHours()&&(a=Math.min(a,l.getMinutes())),a===l.getMinutes()&&(i=Math.min(i,l.getSeconds()))}if(o){var c=void 0!==w.config.minTime?w.config.minTime:w.config.minDate;(n=Math.max(n,c.getHours()))===c.getHours()&&a=12)]),void 0!==w.secondElement&&(w.secondElement.value=o(n)))}function F(e){var t=g(e),n=parseInt(t.value)+(e.delta||0);(n/1e3>1||"Enter"===e.key&&!/[^\d]/.test(n.toString()))&&Q(n)}function A(e,t,n,a){return t instanceof Array?t.forEach((function(t){return A(e,t,n,a)})):e instanceof Array?e.forEach((function(e){return A(e,t,n,a)})):(e.addEventListener(t,n,a),void w._handlers.push({remove:function(){return e.removeEventListener(t,n)}}))}function N(){pe("onChange")}function P(e,t){var n=void 0!==e?w.parseDate(e):w.latestSelectedDateObj||(w.config.minDate&&w.config.minDate>w.now?w.config.minDate:w.config.maxDate&&w.config.maxDate=0&&M(e,w.selectedDates[1])<=0)}(t)&&!ve(t)&&o.classList.add("inRange"),w.weekNumbers&&1===w.config.showMonths&&"prevMonthDay"!==e&&n%7==1&&w.weekNumbers.insertAdjacentHTML("beforeend",""+w.config.getWeek(t)+""),pe("onDayCreate",o),o}function L(e){e.focus(),"range"===w.config.mode&&ae(e)}function W(e){for(var t=e>0?0:w.config.showMonths-1,n=e>0?w.config.showMonths:-1,a=t;a!=n;a+=e)for(var i=w.daysContainer.children[a],o=e>0?0:i.children.length-1,r=e>0?i.children.length:-1,l=o;l!=r;l+=e){var c=i.children[l];if(-1===c.className.indexOf("hidden")&&X(c.dateObj))return c}}function R(e,t){var n=ee(document.activeElement||document.body),a=void 0!==e?e:n?document.activeElement:void 0!==w.selectedDateElem&&ee(w.selectedDateElem)?w.selectedDateElem:void 0!==w.todayDateElem&&ee(w.todayDateElem)?w.todayDateElem:W(t>0?1:-1);void 0===a?w._input.focus():n?function(e,t){for(var n=-1===e.className.indexOf("Month")?e.dateObj.getMonth():w.currentMonth,a=t>0?w.config.showMonths:-1,i=t>0?1:-1,o=n-w.currentMonth;o!=a;o+=i)for(var r=w.daysContainer.children[o],l=n-w.currentMonth===o?e.$i+t:t<0?r.children.length-1:0,c=r.children.length,d=l;d>=0&&d0?c:-1);d+=i){var s=r.children[d];if(-1===s.className.indexOf("hidden")&&X(s.dateObj)&&Math.abs(e.$i-d)>=Math.abs(t))return L(s)}w.changeMonth(i),R(W(i),0)}(a,t):L(a)}function B(e,t){for(var n=(new Date(e,t,1).getDay()-w.l10n.firstDayOfWeek+7)%7,a=w.utils.getDaysInMonth((t-1+12)%12,e),i=w.utils.getDaysInMonth(t,e),o=window.document.createDocumentFragment(),r=w.config.showMonths>1,l=r?"prevMonthDay hidden":"prevMonthDay",c=r?"nextMonthDay hidden":"nextMonthDay",d=a+1-n,u=0;d<=a;d++,u++)o.appendChild(H(l,new Date(e,t-1,d),d,u));for(d=1;d<=i;d++,u++)o.appendChild(H("",new Date(e,t,d),d,u));for(var f=i+1;f<=42-n&&(1===w.config.showMonths||u%7!=0);f++,u++)o.appendChild(H(c,new Date(e,t+1,f%i),f,u));var m=s("div","dayContainer");return m.appendChild(o),m}function J(){if(void 0!==w.daysContainer){u(w.daysContainer),w.weekNumbers&&u(w.weekNumbers);for(var e=document.createDocumentFragment(),t=0;t1||"dropdown"!==w.config.monthSelectorType)){var e=function(e){return!(void 0!==w.config.minDate&&w.currentYear===w.config.minDate.getFullYear()&&ew.config.maxDate.getMonth())};w.monthsDropdownContainer.tabIndex=-1,w.monthsDropdownContainer.innerHTML="";for(var t=0;t<12;t++)if(e(t)){var n=s("option","flatpickr-monthDropdown-month");n.value=new Date(w.currentYear,t).getMonth().toString(),n.textContent=h(t,w.config.shorthandCurrentMonth,w.l10n),n.tabIndex=-1,w.currentMonth===t&&(n.selected=!0),w.monthsDropdownContainer.appendChild(n)}}}function U(){var e,t=s("div","flatpickr-month"),n=window.document.createDocumentFragment();w.config.showMonths>1||"static"===w.config.monthSelectorType?e=s("span","cur-month"):(w.monthsDropdownContainer=s("select","flatpickr-monthDropdown-months"),w.monthsDropdownContainer.setAttribute("aria-label",w.l10n.monthAriaLabel),A(w.monthsDropdownContainer,"change",(function(e){var t=g(e),n=parseInt(t.value,10);w.changeMonth(n-w.currentMonth),pe("onMonthChange")})),K(),e=w.monthsDropdownContainer);var a=m("cur-year",{tabindex:"-1"}),i=a.getElementsByTagName("input")[0];i.setAttribute("aria-label",w.l10n.yearAriaLabel),w.config.minDate&&i.setAttribute("min",w.config.minDate.getFullYear().toString()),w.config.maxDate&&(i.setAttribute("max",w.config.maxDate.getFullYear().toString()),i.disabled=!!w.config.minDate&&w.config.minDate.getFullYear()===w.config.maxDate.getFullYear());var o=s("div","flatpickr-current-month");return o.appendChild(e),o.appendChild(a),n.appendChild(o),t.appendChild(n),{container:t,yearElement:i,monthElement:e}}function q(){u(w.monthNav),w.monthNav.appendChild(w.prevMonthNav),w.config.showMonths&&(w.yearElements=[],w.monthElements=[]);for(var e=w.config.showMonths;e--;){var t=U();w.yearElements.push(t.yearElement),w.monthElements.push(t.monthElement),w.monthNav.appendChild(t.container)}w.monthNav.appendChild(w.nextMonthNav)}function $(){w.weekdayContainer?u(w.weekdayContainer):w.weekdayContainer=s("div","flatpickr-weekdays");for(var e=w.config.showMonths;e--;){var t=s("div","flatpickr-weekdaycontainer");w.weekdayContainer.appendChild(t)}return z(),w.weekdayContainer}function z(){if(w.weekdayContainer){var e=w.l10n.firstDayOfWeek,n=t(w.l10n.weekdays.shorthand);e>0&&e\n "+n.join("")+"\n \n "}}function G(e,t){void 0===t&&(t=!0);var n=t?e:e-w.currentMonth;n<0&&!0===w._hidePrevMonthArrow||n>0&&!0===w._hideNextMonthArrow||(w.currentMonth+=n,(w.currentMonth<0||w.currentMonth>11)&&(w.currentYear+=w.currentMonth>11?1:-1,w.currentMonth=(w.currentMonth+12)%12,pe("onYearChange"),K()),J(),pe("onMonthChange"),De())}function V(e){return!(!w.config.appendTo||!w.config.appendTo.contains(e))||w.calendarContainer.contains(e)}function Z(e){if(w.isOpen&&!w.config.inline){var t=g(e),n=V(t),a=t===w.input||t===w.altInput||w.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(w.input)||~e.path.indexOf(w.altInput)),i="blur"===e.type?a&&e.relatedTarget&&!V(e.relatedTarget):!a&&!n&&!V(e.relatedTarget),o=!w.config.ignoredFocusElements.some((function(e){return e.contains(t)}));i&&o&&(void 0!==w.timeContainer&&void 0!==w.minuteElement&&void 0!==w.hourElement&&""!==w.input.value&&void 0!==w.input.value&&I(),w.close(),w.config&&"range"===w.config.mode&&1===w.selectedDates.length&&(w.clear(!1),w.redraw()))}}function Q(e){if(!(!e||w.config.minDate&&ew.config.maxDate.getFullYear())){var t=e,n=w.currentYear!==t;w.currentYear=t||w.currentYear,w.config.maxDate&&w.currentYear===w.config.maxDate.getFullYear()?w.currentMonth=Math.min(w.config.maxDate.getMonth(),w.currentMonth):w.config.minDate&&w.currentYear===w.config.minDate.getFullYear()&&(w.currentMonth=Math.max(w.config.minDate.getMonth(),w.currentMonth)),n&&(w.redraw(),pe("onYearChange"),K())}}function X(e,t){var n;void 0===t&&(t=!0);var a=w.parseDate(e,void 0,t);if(w.config.minDate&&a&&M(a,w.config.minDate,void 0!==t?t:!w.minDateHasTime)<0||w.config.maxDate&&a&&M(a,w.config.maxDate,void 0!==t?t:!w.maxDateHasTime)>0)return!1;if(!w.config.enable&&0===w.config.disable.length)return!0;if(void 0===a)return!1;for(var i=!!w.config.enable,o=null!==(n=w.config.enable)&&void 0!==n?n:w.config.disable,r=0,l=void 0;r=l.from.getTime()&&a.getTime()<=l.to.getTime())return i}return!i}function ee(e){return void 0!==w.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&w.daysContainer.contains(e))}function te(e){!(e.target===w._input)||!(w.selectedDates.length>0||w._input.value.length>0)||e.relatedTarget&&V(e.relatedTarget)||w.setDate(w._input.value,!0,e.target===w.altInput?w.config.altFormat:w.config.dateFormat)}function ne(e){var t=g(e),n=w.config.wrap?p.contains(t):t===w._input,a=w.config.allowInput,i=w.isOpen&&(!a||!n),o=w.config.inline&&n&&!a;if(13===e.keyCode&&n){if(a)return w.setDate(w._input.value,!0,t===w.altInput?w.config.altFormat:w.config.dateFormat),t.blur();w.open()}else if(V(t)||i||o){var r=!!w.timeContainer&&w.timeContainer.contains(t);switch(e.keyCode){case 13:r?(e.preventDefault(),I(),se()):ue(e);break;case 27:e.preventDefault(),se();break;case 8:case 46:n&&!w.config.allowInput&&(e.preventDefault(),w.clear());break;case 37:case 39:if(r||n)w.hourElement&&w.hourElement.focus();else if(e.preventDefault(),void 0!==w.daysContainer&&(!1===a||document.activeElement&&ee(document.activeElement))){var l=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),G(l),R(W(1),0)):R(void 0,l)}break;case 38:case 40:e.preventDefault();var c=40===e.keyCode?1:-1;w.daysContainer&&void 0!==t.$i||t===w.input||t===w.altInput?e.ctrlKey?(e.stopPropagation(),Q(w.currentYear-c),R(W(1),0)):r||R(void 0,7*c):t===w.currentYearElement?Q(w.currentYear-c):w.config.enableTime&&(!r&&w.hourElement&&w.hourElement.focus(),I(e),w._debouncedChange());break;case 9:if(r){var d=[w.hourElement,w.minuteElement,w.secondElement,w.amPM].concat(w.pluginElements).filter((function(e){return e})),s=d.indexOf(t);if(-1!==s){var u=d[s+(e.shiftKey?-1:1)];e.preventDefault(),(u||w._input).focus()}}else!w.config.noCalendar&&w.daysContainer&&w.daysContainer.contains(t)&&e.shiftKey&&(e.preventDefault(),w._input.focus())}}if(void 0!==w.amPM&&t===w.amPM)switch(e.key){case w.l10n.amPM[0].charAt(0):case w.l10n.amPM[0].charAt(0).toLowerCase():w.amPM.textContent=w.l10n.amPM[0],S(),be();break;case w.l10n.amPM[1].charAt(0):case w.l10n.amPM[1].charAt(0).toLowerCase():w.amPM.textContent=w.l10n.amPM[1],S(),be()}(n||V(t))&&pe("onKeyDown",e)}function ae(e){if(1===w.selectedDates.length&&(!e||e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():w.days.firstElementChild.dateObj.getTime(),n=w.parseDate(w.selectedDates[0],void 0,!0).getTime(),a=Math.min(t,w.selectedDates[0].getTime()),i=Math.max(t,w.selectedDates[0].getTime()),o=!1,r=0,l=0,c=a;ca&&cr)?r=c:c>n&&(!l||c0&&m0&&m>l;return g?(f.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach((function(e){f.classList.remove(e)})),"continue"):o&&!g?"continue":(["startRange","inRange","endRange","notAllowed"].forEach((function(e){f.classList.remove(e)})),void(void 0!==e&&(e.classList.add(t<=w.selectedDates[0].getTime()?"startRange":"endRange"),nt&&m===n&&f.classList.add("endRange"),m>=r&&(0===l||m<=l)&&(d=n,u=t,(c=m)>Math.min(d,u)&&c0||n.getMinutes()>0||n.getSeconds()>0),w.selectedDates&&(w.selectedDates=w.selectedDates.filter((function(e){return X(e)})),w.selectedDates.length||"min"!==e||_(n),be()),w.daysContainer&&(de(),void 0!==n?w.currentYearElement[e]=n.getFullYear().toString():w.currentYearElement.removeAttribute(e),w.currentYearElement.disabled=!!a&&void 0!==n&&a.getFullYear()===n.getFullYear())}}function re(){return w.config.wrap?p.querySelector("[data-input]"):p}function le(){"object"!=typeof w.config.locale&&void 0===T.l10ns[w.config.locale]&&w.config.errorHandler(new Error("flatpickr: invalid locale "+w.config.locale)),w.l10n=e(e({},T.l10ns.default),"object"==typeof w.config.locale?w.config.locale:"default"!==w.config.locale?T.l10ns[w.config.locale]:void 0),D.K="("+w.l10n.amPM[0]+"|"+w.l10n.amPM[1]+"|"+w.l10n.amPM[0].toLowerCase()+"|"+w.l10n.amPM[1].toLowerCase()+")",void 0===e(e({},v),JSON.parse(JSON.stringify(p.dataset||{}))).time_24hr&&void 0===T.defaultConfig.time_24hr&&(w.config.time_24hr=w.l10n.time_24hr),w.formatDate=b(w),w.parseDate=C({config:w.config,l10n:w.l10n})}function ce(e){if("function"!=typeof w.config.position){if(void 0!==w.calendarContainer){pe("onPreCalendarPosition");var t=e||w._positionElement,n=Array.prototype.reduce.call(w.calendarContainer.children,(function(e,t){return e+t.offsetHeight}),0),a=w.calendarContainer.offsetWidth,i=w.config.position.split(" "),o=i[0],r=i.length>1?i[1]:null,l=t.getBoundingClientRect(),c=window.innerHeight-l.bottom,s="above"===o||"below"!==o&&cn,u=window.pageYOffset+l.top+(s?-n-2:t.offsetHeight+2);if(d(w.calendarContainer,"arrowTop",!s),d(w.calendarContainer,"arrowBottom",s),!w.config.inline){var f=window.pageXOffset+l.left,m=!1,g=!1;"center"===r?(f-=(a-l.width)/2,m=!0):"right"===r&&(f-=a-l.width,g=!0),d(w.calendarContainer,"arrowLeft",!m&&!g),d(w.calendarContainer,"arrowCenter",m),d(w.calendarContainer,"arrowRight",g);var p=window.document.body.offsetWidth-(window.pageXOffset+l.right),h=f+a>window.document.body.offsetWidth,v=p+a>window.document.body.offsetWidth;if(d(w.calendarContainer,"rightMost",h),!w.config.static)if(w.calendarContainer.style.top=u+"px",h)if(v){var D=function(){for(var e=null,t=0;tw.currentMonth+w.config.showMonths-1)&&"range"!==w.config.mode;if(w.selectedDateElem=n,"single"===w.config.mode)w.selectedDates=[a];else if("multiple"===w.config.mode){var o=ve(a);o?w.selectedDates.splice(parseInt(o),1):w.selectedDates.push(a)}else"range"===w.config.mode&&(2===w.selectedDates.length&&w.clear(!1,!1),w.latestSelectedDateObj=a,w.selectedDates.push(a),0!==M(a,w.selectedDates[0],!0)&&w.selectedDates.sort((function(e,t){return e.getTime()-t.getTime()})));if(S(),i){var r=w.currentYear!==a.getFullYear();w.currentYear=a.getFullYear(),w.currentMonth=a.getMonth(),r&&(pe("onYearChange"),K()),pe("onMonthChange")}if(De(),J(),be(),i||"range"===w.config.mode||1!==w.config.showMonths?void 0!==w.selectedDateElem&&void 0===w.hourElement&&w.selectedDateElem&&w.selectedDateElem.focus():L(n),void 0!==w.hourElement&&void 0!==w.hourElement&&w.hourElement.focus(),w.config.closeOnSelect){var l="single"===w.config.mode&&!w.config.enableTime,c="range"===w.config.mode&&2===w.selectedDates.length&&!w.config.enableTime;(l||c)&&se()}N()}}w.parseDate=C({config:w.config,l10n:w.l10n}),w._handlers=[],w.pluginElements=[],w.loadedPlugins=[],w._bind=A,w._setHoursFromDate=_,w._positionCalendar=ce,w.changeMonth=G,w.changeYear=Q,w.clear=function(e,t){void 0===e&&(e=!0);void 0===t&&(t=!0);w.input.value="",void 0!==w.altInput&&(w.altInput.value="");void 0!==w.mobileInput&&(w.mobileInput.value="");w.selectedDates=[],w.latestSelectedDateObj=void 0,!0===t&&(w.currentYear=w._initialDate.getFullYear(),w.currentMonth=w._initialDate.getMonth());if(!0===w.config.enableTime){var n=x(w.config),a=n.hours,i=n.minutes,o=n.seconds;O(a,i,o)}w.redraw(),e&&pe("onChange")},w.close=function(){w.isOpen=!1,w.isMobile||(void 0!==w.calendarContainer&&w.calendarContainer.classList.remove("open"),void 0!==w._input&&w._input.classList.remove("active"));pe("onClose")},w._createElement=s,w.destroy=function(){void 0!==w.config&&pe("onDestroy");for(var e=w._handlers.length;e--;)w._handlers[e].remove();if(w._handlers=[],w.mobileInput)w.mobileInput.parentNode&&w.mobileInput.parentNode.removeChild(w.mobileInput),w.mobileInput=void 0;else if(w.calendarContainer&&w.calendarContainer.parentNode)if(w.config.static&&w.calendarContainer.parentNode){var t=w.calendarContainer.parentNode;if(t.lastChild&&t.removeChild(t.lastChild),t.parentNode){for(;t.firstChild;)t.parentNode.insertBefore(t.firstChild,t);t.parentNode.removeChild(t)}}else w.calendarContainer.parentNode.removeChild(w.calendarContainer);w.altInput&&(w.input.type="text",w.altInput.parentNode&&w.altInput.parentNode.removeChild(w.altInput),delete w.altInput);w.input&&(w.input.type=w.input._type,w.input.classList.remove("flatpickr-input"),w.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach((function(e){try{delete w[e]}catch(e){}}))},w.isEnabled=X,w.jumpToDate=P,w.open=function(e,t){void 0===t&&(t=w._positionElement);if(!0===w.isMobile){if(e){e.preventDefault();var n=g(e);n&&n.blur()}return void 0!==w.mobileInput&&(w.mobileInput.focus(),w.mobileInput.click()),void pe("onOpen")}if(w._input.disabled||w.config.inline)return;var a=w.isOpen;w.isOpen=!0,a||(w.calendarContainer.classList.add("open"),w._input.classList.add("active"),pe("onOpen"),ce(t));!0===w.config.enableTime&&!0===w.config.noCalendar&&(!1!==w.config.allowInput||void 0!==e&&w.timeContainer.contains(e.relatedTarget)||setTimeout((function(){return w.hourElement.select()}),50))},w.redraw=de,w.set=function(e,t){if(null!==e&&"object"==typeof e)for(var a in Object.assign(w.config,e),e)void 0!==fe[a]&&fe[a].forEach((function(e){return e()}));else w.config[e]=t,void 0!==fe[e]?fe[e].forEach((function(e){return e()})):n.indexOf(e)>-1&&(w.config[e]=c(t));w.redraw(),be(!0)},w.setDate=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=w.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return w.clear(t);me(e,n),w.latestSelectedDateObj=w.selectedDates[w.selectedDates.length-1],w.redraw(),P(void 0,t),_(),0===w.selectedDates.length&&w.clear(!1);be(t),t&&pe("onChange")},w.toggle=function(e){if(!0===w.isOpen)return w.close();w.open(e)};var fe={locale:[le,z],showMonths:[q,k,$],minDate:[P],maxDate:[P],clickOpens:[function(){!0===w.config.clickOpens?(A(w._input,"focus",w.open),A(w._input,"click",w.open)):(w._input.removeEventListener("focus",w.open),w._input.removeEventListener("click",w.open))}]};function me(e,t){var n=[];if(e instanceof Array)n=e.map((function(e){return w.parseDate(e,t)}));else if(e instanceof Date||"number"==typeof e)n=[w.parseDate(e,t)];else if("string"==typeof e)switch(w.config.mode){case"single":case"time":n=[w.parseDate(e,t)];break;case"multiple":n=e.split(w.config.conjunction).map((function(e){return w.parseDate(e,t)}));break;case"range":n=e.split(w.l10n.rangeSeparator).map((function(e){return w.parseDate(e,t)}))}else w.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));w.selectedDates=w.config.allowInvalidPreload?n:n.filter((function(e){return e instanceof Date&&X(e,!1)})),"range"===w.config.mode&&w.selectedDates.sort((function(e,t){return e.getTime()-t.getTime()}))}function ge(e){return e.slice().map((function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?w.parseDate(e,void 0,!0):e&&"object"==typeof e&&e.from&&e.to?{from:w.parseDate(e.from,void 0),to:w.parseDate(e.to,void 0)}:e})).filter((function(e){return e}))}function pe(e,t){if(void 0!==w.config){var n=w.config[e];if(void 0!==n&&n.length>0)for(var a=0;n[a]&&a1||"static"===w.config.monthSelectorType?w.monthElements[t].textContent=h(n.getMonth(),w.config.shorthandCurrentMonth,w.l10n)+" ":w.monthsDropdownContainer.value=n.getMonth().toString(),e.value=n.getFullYear().toString()})),w._hidePrevMonthArrow=void 0!==w.config.minDate&&(w.currentYear===w.config.minDate.getFullYear()?w.currentMonth<=w.config.minDate.getMonth():w.currentYearw.config.maxDate.getMonth():w.currentYear>w.config.maxDate.getFullYear()))}function we(e){return w.selectedDates.map((function(t){return w.formatDate(t,e)})).filter((function(e,t,n){return"range"!==w.config.mode||w.config.enableTime||n.indexOf(e)===t})).join("range"!==w.config.mode?w.config.conjunction:w.l10n.rangeSeparator)}function be(e){void 0===e&&(e=!0),void 0!==w.mobileInput&&w.mobileFormatStr&&(w.mobileInput.value=void 0!==w.latestSelectedDateObj?w.formatDate(w.latestSelectedDateObj,w.mobileFormatStr):""),w.input.value=we(w.config.dateFormat),void 0!==w.altInput&&(w.altInput.value=we(w.config.altFormat)),!1!==e&&pe("onValueUpdate")}function Ce(e){var t=g(e),n=w.prevMonthNav.contains(t),a=w.nextMonthNav.contains(t);n||a?G(n?-1:1):w.yearElements.indexOf(t)>=0?t.select():t.classList.contains("arrowUp")?w.changeYear(w.currentYear+1):t.classList.contains("arrowDown")&&w.changeYear(w.currentYear-1)}return function(){w.element=w.input=p,w.isOpen=!1,function(){var t=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],i=e(e({},JSON.parse(JSON.stringify(p.dataset||{}))),v),o={};w.config.parseDate=i.parseDate,w.config.formatDate=i.formatDate,Object.defineProperty(w.config,"enable",{get:function(){return w.config._enable},set:function(e){w.config._enable=ge(e)}}),Object.defineProperty(w.config,"disable",{get:function(){return w.config._disable},set:function(e){w.config._disable=ge(e)}});var r="time"===i.mode;if(!i.dateFormat&&(i.enableTime||r)){var l=T.defaultConfig.dateFormat||a.dateFormat;o.dateFormat=i.noCalendar||r?"H:i"+(i.enableSeconds?":S":""):l+" H:i"+(i.enableSeconds?":S":"")}if(i.altInput&&(i.enableTime||r)&&!i.altFormat){var d=T.defaultConfig.altFormat||a.altFormat;o.altFormat=i.noCalendar||r?"h:i"+(i.enableSeconds?":S K":" K"):d+" h:i"+(i.enableSeconds?":S":"")+" K"}Object.defineProperty(w.config,"minDate",{get:function(){return w.config._minDate},set:oe("min")}),Object.defineProperty(w.config,"maxDate",{get:function(){return w.config._maxDate},set:oe("max")});var s=function(e){return function(t){w.config["min"===e?"_minTime":"_maxTime"]=w.parseDate(t,"H:i:S")}};Object.defineProperty(w.config,"minTime",{get:function(){return w.config._minTime},set:s("min")}),Object.defineProperty(w.config,"maxTime",{get:function(){return w.config._maxTime},set:s("max")}),"time"===i.mode&&(w.config.noCalendar=!0,w.config.enableTime=!0);Object.assign(w.config,o,i);for(var u=0;u-1?w.config[m]=c(f[m]).map(E).concat(w.config[m]):void 0===i[m]&&(w.config[m]=f[m])}i.altInputClass||(w.config.altInputClass=re().className+" "+w.config.altInputClass);pe("onParseConfig")}(),le(),function(){if(w.input=re(),!w.input)return void w.config.errorHandler(new Error("Invalid input element specified"));w.input._type=w.input.type,w.input.type="text",w.input.classList.add("flatpickr-input"),w._input=w.input,w.config.altInput&&(w.altInput=s(w.input.nodeName,w.config.altInputClass),w._input=w.altInput,w.altInput.placeholder=w.input.placeholder,w.altInput.disabled=w.input.disabled,w.altInput.required=w.input.required,w.altInput.tabIndex=w.input.tabIndex,w.altInput.type="text",w.input.setAttribute("type","hidden"),!w.config.static&&w.input.parentNode&&w.input.parentNode.insertBefore(w.altInput,w.input.nextSibling));w.config.allowInput||w._input.setAttribute("readonly","readonly");w._positionElement=w.config.positionElement||w._input}(),function(){w.selectedDates=[],w.now=w.parseDate(w.config.now)||new Date;var e=w.config.defaultDate||("INPUT"!==w.input.nodeName&&"TEXTAREA"!==w.input.nodeName||!w.input.placeholder||w.input.value!==w.input.placeholder?w.input.value:null);e&&me(e,w.config.dateFormat);w._initialDate=w.selectedDates.length>0?w.selectedDates[0]:w.config.minDate&&w.config.minDate.getTime()>w.now.getTime()?w.config.minDate:w.config.maxDate&&w.config.maxDate.getTime()0&&(w.latestSelectedDateObj=w.selectedDates[0]);void 0!==w.config.minTime&&(w.config.minTime=w.parseDate(w.config.minTime,"H:i"));void 0!==w.config.maxTime&&(w.config.maxTime=w.parseDate(w.config.maxTime,"H:i"));w.minDateHasTime=!!w.config.minDate&&(w.config.minDate.getHours()>0||w.config.minDate.getMinutes()>0||w.config.minDate.getSeconds()>0),w.maxDateHasTime=!!w.config.maxDate&&(w.config.maxDate.getHours()>0||w.config.maxDate.getMinutes()>0||w.config.maxDate.getSeconds()>0)}(),w.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=w.currentMonth),void 0===t&&(t=w.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:w.l10n.daysInMonth[e]}},w.isMobile||function(){var e=window.document.createDocumentFragment();if(w.calendarContainer=s("div","flatpickr-calendar"),w.calendarContainer.tabIndex=-1,!w.config.noCalendar){if(e.appendChild((w.monthNav=s("div","flatpickr-months"),w.yearElements=[],w.monthElements=[],w.prevMonthNav=s("span","flatpickr-prev-month"),w.prevMonthNav.innerHTML=w.config.prevArrow,w.nextMonthNav=s("span","flatpickr-next-month"),w.nextMonthNav.innerHTML=w.config.nextArrow,q(),Object.defineProperty(w,"_hidePrevMonthArrow",{get:function(){return w.__hidePrevMonthArrow},set:function(e){w.__hidePrevMonthArrow!==e&&(d(w.prevMonthNav,"flatpickr-disabled",e),w.__hidePrevMonthArrow=e)}}),Object.defineProperty(w,"_hideNextMonthArrow",{get:function(){return w.__hideNextMonthArrow},set:function(e){w.__hideNextMonthArrow!==e&&(d(w.nextMonthNav,"flatpickr-disabled",e),w.__hideNextMonthArrow=e)}}),w.currentYearElement=w.yearElements[0],De(),w.monthNav)),w.innerContainer=s("div","flatpickr-innerContainer"),w.config.weekNumbers){var t=function(){w.calendarContainer.classList.add("hasWeeks");var e=s("div","flatpickr-weekwrapper");e.appendChild(s("span","flatpickr-weekday",w.l10n.weekAbbreviation));var t=s("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}(),n=t.weekWrapper,a=t.weekNumbers;w.innerContainer.appendChild(n),w.weekNumbers=a,w.weekWrapper=n}w.rContainer=s("div","flatpickr-rContainer"),w.rContainer.appendChild($()),w.daysContainer||(w.daysContainer=s("div","flatpickr-days"),w.daysContainer.tabIndex=-1),J(),w.rContainer.appendChild(w.daysContainer),w.innerContainer.appendChild(w.rContainer),e.appendChild(w.innerContainer)}w.config.enableTime&&e.appendChild(function(){w.calendarContainer.classList.add("hasTime"),w.config.noCalendar&&w.calendarContainer.classList.add("noCalendar");var e=x(w.config);w.timeContainer=s("div","flatpickr-time"),w.timeContainer.tabIndex=-1;var t=s("span","flatpickr-time-separator",":"),n=m("flatpickr-hour",{"aria-label":w.l10n.hourAriaLabel});w.hourElement=n.getElementsByTagName("input")[0];var a=m("flatpickr-minute",{"aria-label":w.l10n.minuteAriaLabel});w.minuteElement=a.getElementsByTagName("input")[0],w.hourElement.tabIndex=w.minuteElement.tabIndex=-1,w.hourElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getHours():w.config.time_24hr?e.hours:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(e.hours)),w.minuteElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getMinutes():e.minutes),w.hourElement.setAttribute("step",w.config.hourIncrement.toString()),w.minuteElement.setAttribute("step",w.config.minuteIncrement.toString()),w.hourElement.setAttribute("min",w.config.time_24hr?"0":"1"),w.hourElement.setAttribute("max",w.config.time_24hr?"23":"12"),w.hourElement.setAttribute("maxlength","2"),w.minuteElement.setAttribute("min","0"),w.minuteElement.setAttribute("max","59"),w.minuteElement.setAttribute("maxlength","2"),w.timeContainer.appendChild(n),w.timeContainer.appendChild(t),w.timeContainer.appendChild(a),w.config.time_24hr&&w.timeContainer.classList.add("time24hr");if(w.config.enableSeconds){w.timeContainer.classList.add("hasSeconds");var i=m("flatpickr-second");w.secondElement=i.getElementsByTagName("input")[0],w.secondElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getSeconds():e.seconds),w.secondElement.setAttribute("step",w.minuteElement.getAttribute("step")),w.secondElement.setAttribute("min","0"),w.secondElement.setAttribute("max","59"),w.secondElement.setAttribute("maxlength","2"),w.timeContainer.appendChild(s("span","flatpickr-time-separator",":")),w.timeContainer.appendChild(i)}w.config.time_24hr||(w.amPM=s("span","flatpickr-am-pm",w.l10n.amPM[r((w.latestSelectedDateObj?w.hourElement.value:w.config.defaultHour)>11)]),w.amPM.title=w.l10n.toggleTitle,w.amPM.tabIndex=-1,w.timeContainer.appendChild(w.amPM));return w.timeContainer}());d(w.calendarContainer,"rangeMode","range"===w.config.mode),d(w.calendarContainer,"animate",!0===w.config.animate),d(w.calendarContainer,"multiMonth",w.config.showMonths>1),w.calendarContainer.appendChild(e);var i=void 0!==w.config.appendTo&&void 0!==w.config.appendTo.nodeType;if((w.config.inline||w.config.static)&&(w.calendarContainer.classList.add(w.config.inline?"inline":"static"),w.config.inline&&(!i&&w.element.parentNode?w.element.parentNode.insertBefore(w.calendarContainer,w._input.nextSibling):void 0!==w.config.appendTo&&w.config.appendTo.appendChild(w.calendarContainer)),w.config.static)){var l=s("div","flatpickr-wrapper");w.element.parentNode&&w.element.parentNode.insertBefore(l,w.element),l.appendChild(w.element),w.altInput&&l.appendChild(w.altInput),l.appendChild(w.calendarContainer)}w.config.static||w.config.inline||(void 0!==w.config.appendTo?w.config.appendTo:window.document.body).appendChild(w.calendarContainer)}(),function(){w.config.wrap&&["open","close","toggle","clear"].forEach((function(e){Array.prototype.forEach.call(w.element.querySelectorAll("[data-"+e+"]"),(function(t){return A(t,"click",w[e])}))}));if(w.isMobile)return void function(){var e=w.config.enableTime?w.config.noCalendar?"time":"datetime-local":"date";w.mobileInput=s("input",w.input.className+" flatpickr-mobile"),w.mobileInput.tabIndex=1,w.mobileInput.type=e,w.mobileInput.disabled=w.input.disabled,w.mobileInput.required=w.input.required,w.mobileInput.placeholder=w.input.placeholder,w.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",w.selectedDates.length>0&&(w.mobileInput.defaultValue=w.mobileInput.value=w.formatDate(w.selectedDates[0],w.mobileFormatStr));w.config.minDate&&(w.mobileInput.min=w.formatDate(w.config.minDate,"Y-m-d"));w.config.maxDate&&(w.mobileInput.max=w.formatDate(w.config.maxDate,"Y-m-d"));w.input.getAttribute("step")&&(w.mobileInput.step=String(w.input.getAttribute("step")));w.input.type="hidden",void 0!==w.altInput&&(w.altInput.type="hidden");try{w.input.parentNode&&w.input.parentNode.insertBefore(w.mobileInput,w.input.nextSibling)}catch(e){}A(w.mobileInput,"change",(function(e){w.setDate(g(e).value,!1,w.mobileFormatStr),pe("onChange"),pe("onClose")}))}();var e=l(ie,50);w._debouncedChange=l(N,300),w.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&A(w.daysContainer,"mouseover",(function(e){"range"===w.config.mode&&ae(g(e))}));A(window.document.body,"keydown",ne),w.config.inline||w.config.static||A(window,"resize",e);void 0!==window.ontouchstart?A(window.document,"touchstart",Z):A(window.document,"mousedown",Z);A(window.document,"focus",Z,{capture:!0}),!0===w.config.clickOpens&&(A(w._input,"focus",w.open),A(w._input,"click",w.open));void 0!==w.daysContainer&&(A(w.monthNav,"click",Ce),A(w.monthNav,["keyup","increment"],F),A(w.daysContainer,"click",ue));if(void 0!==w.timeContainer&&void 0!==w.minuteElement&&void 0!==w.hourElement){var t=function(e){return g(e).select()};A(w.timeContainer,["increment"],I),A(w.timeContainer,"blur",I,{capture:!0}),A(w.timeContainer,"click",Y),A([w.hourElement,w.minuteElement],["focus","click"],t),void 0!==w.secondElement&&A(w.secondElement,"focus",(function(){return w.secondElement&&w.secondElement.select()})),void 0!==w.amPM&&A(w.amPM,"click",(function(e){I(e),N()}))}w.config.allowInput&&A(w._input,"blur",te)}(),(w.selectedDates.length||w.config.noCalendar)&&(w.config.enableTime&&_(w.config.noCalendar?w.latestSelectedDateObj:void 0),be(!1)),k();var t=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!w.isMobile&&t&&ce(),pe("onReady")}(),w}function k(e,t){for(var n=Array.prototype.slice.call(e).filter((function(e){return e instanceof HTMLElement})),a=[],i=0;i").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),!(c.settings.submitHandler&&!c.settings.debug)||(e=c.settings.submitHandler.call(c,c.currentForm,b),d&&d.remove(),void 0!==e&&e)}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0],k="undefined"!=typeof this.attr("contenteditable")&&"false"!==this.attr("contenteditable");if(null!=j&&(!j.form&&k&&(j.form=this.closest("form")[0],j.name=this.attr("name")),null!=j.form)){if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(a,b){i[b]=f[b],delete f[b]}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g)),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}});var b=function(a){return a.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")};a.extend(a.expr.pseudos||a.expr[":"],{blank:function(c){return!b(""+a(c).val())},filled:function(c){var d=a(c).val();return null!==d&&!!b(""+d)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||a.inArray(c.keyCode,d)!==-1||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c="undefined"!=typeof a(this).attr("contenteditable")&&"false"!==a(this).attr("contenteditable");if(!this.form&&c&&(this.form=a(this).closest("form")[0],this.name=a(this).attr("name")),d===this.form){var e=a.data(this.form,"validator"),f="on"+b.type.replace(/^validate/,""),g=e.settings;g[f]&&!a(this).is(g.ignore)&&g[f].call(e,this,b)}}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.currentForm,e=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){e[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=g.check(e)&&h))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)void 0!==a[b]&&null!==a[b]&&a[b]!==!1&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").trigger("focus").trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name"),e="undefined"!=typeof a(this).attr("contenteditable")&&"false"!==a(this).attr("contenteditable");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),e&&(this.form=a(this).closest("form")[0],this.name=d),this.form===b.currentForm&&(!(d in c||!b.objectLength(a(this).rules()))&&(c[d]=!0,!0))})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type,g="undefined"!=typeof e.attr("contenteditable")&&"false"!==e.attr("contenteditable");return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=g?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f,g=a(b).rules(),h=a.map(g,function(a,b){return b}).length,i=!1,j=this.elementValue(b);this.abortRequest(b),"function"==typeof g.normalizer?f=g.normalizer:"function"==typeof this.settings.normalizer&&(f=this.settings.normalizer),f&&(j=f.call(b,j),delete g.normalizer);for(d in g){e={method:d,parameters:g[d]};try{if(c=a.validator.methods[d].call(this,j,b,e.parameters),"dependency-mismatch"===c&&1===h){i=!0;continue}if(i=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(k){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",k),k instanceof TypeError&&(k.message+=". Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),k}}if(!i)return this.objectLength(g)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;aWarning: No message defined for "+b.name+""),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),this.settings&&this.settings.escapeHtml?h.text(c||""):h.html(c||"")):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass),this.settings&&this.settings.escapeHtml?h.text(c||""):h.html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return void 0===a?"":a.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},elementAjaxPort:function(a){return"validate"+a.name},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()&&0===this.pendingRequest?(a(this.currentForm).trigger("submit"),this.submitButton&&a("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},abortRequest:function(b){var c;this.pending[b.name]&&(c=this.elementAjaxPort(b),a.ajaxAbort(c),this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass))},previousValue:function(b,c){return c="string"==typeof c&&c||"remote",a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur").find(".validate-lessThan-blur").off(".validate-lessThan").removeClass("validate-lessThan-blur").find(".validate-lessThanEqual-blur").off(".validate-lessThanEqual").removeClass("validate-lessThanEqual-blur").find(".validate-greaterThanEqual-blur").off(".validate-greaterThanEqual").removeClass("validate-greaterThanEqual-blur").find(".validate-greaterThan-blur").off(".validate-greaterThan").removeClass("validate-greaterThan-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a["date"===b?"dateISO":c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),""===d&&(d=!0),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(a,d){b[a]="function"==typeof d&&"normalizer"!==a?d(c):d}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var a;b[this]&&(Array.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(a=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(a[0]),Number(a[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:void 0!==b&&null!==b&&b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:(?:[^\]\[?\/<~#`!@$^&*()+=}|:";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\]\[?\/<~#`!@$^&*()+=}|:";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(a)},date:function(){var a=!1;return function(b,c){return a||(a=!0,this.settings.debug&&window.console&&console.warn("The `date` method is deprecated and will be removed in version '2.0.0'.\nPlease don't use it, since it relies on the Date constructor, which\nbehaves very differently across browsers and locales. Use `dateISO`\ninstead or one of the locale specific methods in `localizations/`\nand `additional-methods.js`.")),this.optional(c)||!/Invalid|NaN/.test(new Date(b).toString())}}(),dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(a,b,c){var d=Array.isArray(a)?a.length:this.getLength(a,b);return this.optional(b)||d>=c},maxlength:function(a,b,c){var d=Array.isArray(a)?a.length:this.getLength(a,b);return this.optional(b)||d<=c},rangelength:function(a,b,c){var d=Array.isArray(a)?a.length:this.getLength(a,b);return this.optional(b)||d>=c[0]&&d<=c[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr("type"),g="Step attribute on input type "+f+" is not supported.",h=["text","number","range"],i=new RegExp("\\b"+f+"\\b"),j=f&&!i.test(h.join()),k=function(a){var b=(""+a).match(/(?:\.(\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),null!==i.valid&&i.old===h?i.valid:(i.old=h,i.valid=null,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:this.elementAjaxPort(c),dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var c,d={};return a.ajaxPrefilter?a.ajaxPrefilter(function(b,c,e){var f=b.port;"abort"===b.mode&&(a.ajaxAbort(f),d[f]=e)}):(c=a.ajax,a.ajax=function(b){var e=("mode"in b?b:a.ajaxSettings).mode,f=("port"in b?b:a.ajaxSettings).port;return"abort"===e?(a.ajaxAbort(f),d[f]=c.apply(this,arguments),d[f]):c.apply(this,arguments)}),a.ajaxAbort=function(a){d[a]&&(d[a].abort(),delete d[a])},a}); assets/lib/jquery.tooltipster/jquery.tooltipster.min.js000064400000115734147400353540017570 0ustar00/*! tooltipster v4.2.6 */!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){function b(a){this.$container,this.constraints=null,this.__$tooltip,this.__init(a)}function c(b,c){var d=!0;return a.each(b,function(a,e){return void 0===c[a]||b[a]!==c[a]?(d=!1,!1):void 0}),d}function d(b){var c=b.attr("id"),d=c?h.window.document.getElementById(c):null;return d?d===b[0]:a.contains(h.window.document.body,b[0])}function e(){if(!g)return!1;var a=g.document.body||g.document.documentElement,b=a.style,c="transition",d=["Moz","Webkit","Khtml","O","ms"];if("string"==typeof b[c])return!0;c=c.charAt(0).toUpperCase()+c.substr(1);for(var e=0;e0?e=c.__plugins[d]:a.each(c.__plugins,function(a,b){return b.name.substring(b.name.length-d.length-1)=="."+d?(e=b,!1):void 0}),e}if(b.name.indexOf(".")<0)throw new Error("Plugins must be namespaced");return c.__plugins[b.name]=b,b.core&&c.__bridge(b.core,c,b.name),this},_trigger:function(){var a=Array.prototype.slice.apply(arguments);return"string"==typeof a[0]&&(a[0]={type:a[0]}),this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,a),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,a),this},instances:function(b){var c=[],d=b||".tooltipstered";return a(d).each(function(){var b=a(this),d=b.data("tooltipster-ns");d&&a.each(d,function(a,d){c.push(b.data(d))})}),c},instancesLatest:function(){return this.__instancesLatestArr},off:function(){return this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},origins:function(b){var c=b?b+" ":"";return a(c+".tooltipstered").toArray()},setDefaults:function(b){return a.extend(f,b),this},triggerHandler:function(){return this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.tooltipster=new i,a.Tooltipster=function(b,c){this.__callbacks={close:[],open:[]},this.__closingTime,this.__Content,this.__contentBcr,this.__destroyed=!1,this.__$emitterPrivate=a({}),this.__$emitterPublic=a({}),this.__enabled=!0,this.__garbageCollector,this.__Geometry,this.__lastPosition,this.__namespace="tooltipster-"+Math.round(1e6*Math.random()),this.__options,this.__$originParents,this.__pointerIsOverOrigin=!1,this.__previousThemes=[],this.__state="closed",this.__timeouts={close:[],open:null},this.__touchEvents=[],this.__tracker=null,this._$origin,this._$tooltip,this.__init(b,c)},a.Tooltipster.prototype={__init:function(b,c){var d=this;if(d._$origin=a(b),d.__options=a.extend(!0,{},f,c),d.__optionsFormat(),!h.IE||h.IE>=d.__options.IEmin){var e=null;if(void 0===d._$origin.data("tooltipster-initialTitle")&&(e=d._$origin.attr("title"),void 0===e&&(e=null),d._$origin.data("tooltipster-initialTitle",e)),null!==d.__options.content)d.__contentSet(d.__options.content);else{var g,i=d._$origin.attr("data-tooltip-content");i&&(g=a(i)),g&&g[0]?d.__contentSet(g.first()):d.__contentSet(e)}d._$origin.removeAttr("title").addClass("tooltipstered"),d.__prepareOrigin(),d.__prepareGC(),a.each(d.__options.plugins,function(a,b){d._plug(b)}),h.hasTouchCapability&&a(h.window.document.body).on("touchmove."+d.__namespace+"-triggerOpen",function(a){d._touchRecordEvent(a)}),d._on("created",function(){d.__prepareTooltip()})._on("repositioned",function(a){d.__lastPosition=a.position})}else d.__options.disabled=!0},__contentInsert:function(){var a=this,b=a._$tooltip.find(".tooltipster-content"),c=a.__Content,d=function(a){c=a};return a._trigger({type:"format",content:a.__Content,format:d}),a.__options.functionFormat&&(c=a.__options.functionFormat.call(a,a,{origin:a._$origin[0]},a.__Content)),"string"!=typeof c||a.__options.contentAsHTML?b.empty().append(c):b.text(c),a},__contentSet:function(b){return b instanceof a&&this.__options.contentCloning&&(b=b.clone(!0)),this.__Content=b,this._trigger({type:"updated",content:b}),this},__destroyError:function(){throw new Error("This tooltip has been destroyed and cannot execute your method call.")},__geometry:function(){var b=this,c=b._$origin,d=b._$origin.is("area");if(d){var e=b._$origin.parent().attr("name");c=a('img[usemap="#'+e+'"]')}var f=c[0].getBoundingClientRect(),g=a(h.window.document),i=a(h.window),j=c,k={available:{document:null,window:null},document:{size:{height:g.height(),width:g.width()}},window:{scroll:{left:h.window.scrollX||h.window.document.documentElement.scrollLeft,top:h.window.scrollY||h.window.document.documentElement.scrollTop},size:{height:i.height(),width:i.width()}},origin:{fixedLineage:!1,offset:{},size:{height:f.bottom-f.top,width:f.right-f.left},usemapImage:d?c[0]:null,windowOffset:{bottom:f.bottom,left:f.left,right:f.right,top:f.top}}};if(d){var l=b._$origin.attr("shape"),m=b._$origin.attr("coords");if(m&&(m=m.split(","),a.map(m,function(a,b){m[b]=parseInt(a)})),"default"!=l)switch(l){case"circle":var n=m[0],o=m[1],p=m[2],q=o-p,r=n-p;k.origin.size.height=2*p,k.origin.size.width=k.origin.size.height,k.origin.windowOffset.left+=r,k.origin.windowOffset.top+=q;break;case"rect":var s=m[0],t=m[1],u=m[2],v=m[3];k.origin.size.height=v-t,k.origin.size.width=u-s,k.origin.windowOffset.left+=s,k.origin.windowOffset.top+=t;break;case"poly":for(var w=0,x=0,y=0,z=0,A="even",B=0;By&&(y=C,0===B&&(w=y)),w>C&&(w=C),A="odd"):(C>z&&(z=C,1==B&&(x=z)),x>C&&(x=C),A="even")}k.origin.size.height=z-x,k.origin.size.width=y-w,k.origin.windowOffset.left+=w,k.origin.windowOffset.top+=x}}var D=function(a){k.origin.size.height=a.height,k.origin.windowOffset.left=a.left,k.origin.windowOffset.top=a.top,k.origin.size.width=a.width};for(b._trigger({type:"geometry",edit:D,geometry:{height:k.origin.size.height,left:k.origin.windowOffset.left,top:k.origin.windowOffset.top,width:k.origin.size.width}}),k.origin.windowOffset.right=k.origin.windowOffset.left+k.origin.size.width,k.origin.windowOffset.bottom=k.origin.windowOffset.top+k.origin.size.height,k.origin.offset.left=k.origin.windowOffset.left+k.window.scroll.left,k.origin.offset.top=k.origin.windowOffset.top+k.window.scroll.top,k.origin.offset.bottom=k.origin.offset.top+k.origin.size.height,k.origin.offset.right=k.origin.offset.left+k.origin.size.width,k.available.document={bottom:{height:k.document.size.height-k.origin.offset.bottom,width:k.document.size.width},left:{height:k.document.size.height,width:k.origin.offset.left},right:{height:k.document.size.height,width:k.document.size.width-k.origin.offset.right},top:{height:k.origin.offset.top,width:k.document.size.width}},k.available.window={bottom:{height:Math.max(k.window.size.height-Math.max(k.origin.windowOffset.bottom,0),0),width:k.window.size.width},left:{height:k.window.size.height,width:Math.max(k.origin.windowOffset.left,0)},right:{height:k.window.size.height,width:Math.max(k.window.size.width-Math.max(k.origin.windowOffset.right,0),0)},top:{height:Math.max(k.origin.windowOffset.top,0),width:k.window.size.width}};"html"!=j[0].tagName.toLowerCase();){if("fixed"==j.css("position")){k.origin.fixedLineage=!0;break}j=j.parent()}return k},__optionsFormat:function(){return"number"==typeof this.__options.animationDuration&&(this.__options.animationDuration=[this.__options.animationDuration,this.__options.animationDuration]),"number"==typeof this.__options.delay&&(this.__options.delay=[this.__options.delay,this.__options.delay]),"number"==typeof this.__options.delayTouch&&(this.__options.delayTouch=[this.__options.delayTouch,this.__options.delayTouch]),"string"==typeof this.__options.theme&&(this.__options.theme=[this.__options.theme]),null===this.__options.parent?this.__options.parent=a(h.window.document.body):"string"==typeof this.__options.parent&&(this.__options.parent=a(this.__options.parent)),"hover"==this.__options.trigger?(this.__options.triggerOpen={mouseenter:!0,touchstart:!0},this.__options.triggerClose={mouseleave:!0,originClick:!0,touchleave:!0}):"click"==this.__options.trigger&&(this.__options.triggerOpen={click:!0,tap:!0},this.__options.triggerClose={click:!0,tap:!0}),this._trigger("options"),this},__prepareGC:function(){var b=this;return b.__options.selfDestruction?b.__garbageCollector=setInterval(function(){var c=(new Date).getTime();b.__touchEvents=a.grep(b.__touchEvents,function(a,b){return c-a.time>6e4}),d(b._$origin)||b.close(function(){b.destroy()})},2e4):clearInterval(b.__garbageCollector),b},__prepareOrigin:function(){var a=this;if(a._$origin.off("."+a.__namespace+"-triggerOpen"),h.hasTouchCapability&&a._$origin.on("touchstart."+a.__namespace+"-triggerOpen touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen",function(b){a._touchRecordEvent(b)}),a.__options.triggerOpen.click||a.__options.triggerOpen.tap&&h.hasTouchCapability){var b="";a.__options.triggerOpen.click&&(b+="click."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.tap&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&a._open(b)})}if(a.__options.triggerOpen.mouseenter||a.__options.triggerOpen.touchstart&&h.hasTouchCapability){var b="";a.__options.triggerOpen.mouseenter&&(b+="mouseenter."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.touchstart&&h.hasTouchCapability&&(b+="touchstart."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){!a._touchIsTouchEvent(b)&&a._touchIsEmulatedEvent(b)||(a.__pointerIsOverOrigin=!0,a._openShortly(b))})}if(a.__options.triggerClose.mouseleave||a.__options.triggerClose.touchleave&&h.hasTouchCapability){var b="";a.__options.triggerClose.mouseleave&&(b+="mouseleave."+a.__namespace+"-triggerOpen "),a.__options.triggerClose.touchleave&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&(a.__pointerIsOverOrigin=!1)})}return a},__prepareTooltip:function(){var b=this,c=b.__options.interactive?"auto":"";return b._$tooltip.attr("id",b.__namespace).css({"pointer-events":c,zIndex:b.__options.zIndex}),a.each(b.__previousThemes,function(a,c){b._$tooltip.removeClass(c)}),a.each(b.__options.theme,function(a,c){b._$tooltip.addClass(c)}),b.__previousThemes=a.merge([],b.__options.theme),b},__scrollHandler:function(b){var c=this;if(c.__options.triggerClose.scroll)c._close(b);else if(d(c._$origin)&&d(c._$tooltip)){var e=null;if(b.target===h.window.document)c.__Geometry.origin.fixedLineage||c.__options.repositionOnScroll&&c.reposition(b);else{e=c.__geometry();var f=!1;if("fixed"!=c._$origin.css("position")&&c.__$originParents.each(function(b,c){var d=a(c),g=d.css("overflow-x"),h=d.css("overflow-y");if("visible"!=g||"visible"!=h){var i=c.getBoundingClientRect();if("visible"!=g&&(e.origin.windowOffset.lefti.right))return f=!0,!1;if("visible"!=h&&(e.origin.windowOffset.topi.bottom))return f=!0,!1}return"fixed"==d.css("position")?!1:void 0}),f)c._$tooltip.css("visibility","hidden");else if(c._$tooltip.css("visibility","visible"),c.__options.repositionOnScroll)c.reposition(b);else{var g=e.origin.offset.left-c.__Geometry.origin.offset.left,i=e.origin.offset.top-c.__Geometry.origin.offset.top;c._$tooltip.css({left:c.__lastPosition.coord.left+g,top:c.__lastPosition.coord.top+i})}}c._trigger({type:"scroll",event:b,geo:e})}return c},__stateSet:function(a){return this.__state=a,this._trigger({type:"state",state:a}),this},__timeoutsClear:function(){return clearTimeout(this.__timeouts.open),this.__timeouts.open=null,a.each(this.__timeouts.close,function(a,b){clearTimeout(b)}),this.__timeouts.close=[],this},__trackerStart:function(){var a=this,b=a._$tooltip.find(".tooltipster-content");return a.__options.trackTooltip&&(a.__contentBcr=b[0].getBoundingClientRect()),a.__tracker=setInterval(function(){if(d(a._$origin)&&d(a._$tooltip)){if(a.__options.trackOrigin){var e=a.__geometry(),f=!1;c(e.origin.size,a.__Geometry.origin.size)&&(a.__Geometry.origin.fixedLineage?c(e.origin.windowOffset,a.__Geometry.origin.windowOffset)&&(f=!0):c(e.origin.offset,a.__Geometry.origin.offset)&&(f=!0)),f||(a.__options.triggerClose.mouseleave?a._close():a.reposition())}if(a.__options.trackTooltip){var g=b[0].getBoundingClientRect();g.height===a.__contentBcr.height&&g.width===a.__contentBcr.width||(a.reposition(),a.__contentBcr=g)}}else a._close()},a.__options.trackerInterval),a},_close:function(b,c,d){var e=this,f=!0;if(e._trigger({type:"close",event:b,stop:function(){f=!1}}),f||d){c&&e.__callbacks.close.push(c),e.__callbacks.open=[],e.__timeoutsClear();var g=function(){a.each(e.__callbacks.close,function(a,c){c.call(e,e,{event:b,origin:e._$origin[0]})}),e.__callbacks.close=[]};if("closed"!=e.__state){var i=!0,j=new Date,k=j.getTime(),l=k+e.__options.animationDuration[1];if("disappearing"==e.__state&&l>e.__closingTime&&e.__options.animationDuration[1]>0&&(i=!1),i){e.__closingTime=l,"disappearing"!=e.__state&&e.__stateSet("disappearing");var m=function(){clearInterval(e.__tracker),e._trigger({type:"closing",event:b}),e._$tooltip.off("."+e.__namespace+"-triggerClose").removeClass("tooltipster-dying"),a(h.window).off("."+e.__namespace+"-triggerClose"),e.__$originParents.each(function(b,c){a(c).off("scroll."+e.__namespace+"-triggerClose")}),e.__$originParents=null,a(h.window.document.body).off("."+e.__namespace+"-triggerClose"),e._$origin.off("."+e.__namespace+"-triggerClose"),e._off("dismissable"),e.__stateSet("closed"),e._trigger({type:"after",event:b}),e.__options.functionAfter&&e.__options.functionAfter.call(e,e,{event:b,origin:e._$origin[0]}),g()};h.hasTransitions?(e._$tooltip.css({"-moz-animation-duration":e.__options.animationDuration[1]+"ms","-ms-animation-duration":e.__options.animationDuration[1]+"ms","-o-animation-duration":e.__options.animationDuration[1]+"ms","-webkit-animation-duration":e.__options.animationDuration[1]+"ms","animation-duration":e.__options.animationDuration[1]+"ms","transition-duration":e.__options.animationDuration[1]+"ms"}),e._$tooltip.clearQueue().removeClass("tooltipster-show").addClass("tooltipster-dying"),e.__options.animationDuration[1]>0&&e._$tooltip.delay(e.__options.animationDuration[1]),e._$tooltip.queue(m)):e._$tooltip.stop().fadeOut(e.__options.animationDuration[1],m)}}else g()}return e},_off:function(){return this.__$emitterPrivate.off.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_on:function(){return this.__$emitterPrivate.on.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_one:function(){return this.__$emitterPrivate.one.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_open:function(b,c){var e=this;if(!e.__destroying&&d(e._$origin)&&e.__enabled){var f=!0;if("closed"==e.__state&&(e._trigger({type:"before",event:b,stop:function(){f=!1}}),f&&e.__options.functionBefore&&(f=e.__options.functionBefore.call(e,e,{event:b,origin:e._$origin[0]}))),f!==!1&&null!==e.__Content){c&&e.__callbacks.open.push(c),e.__callbacks.close=[],e.__timeoutsClear();var g,i=function(){"stable"!=e.__state&&e.__stateSet("stable"),a.each(e.__callbacks.open,function(a,b){b.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}),e.__callbacks.open=[]};if("closed"!==e.__state)g=0,"disappearing"===e.__state?(e.__stateSet("appearing"),h.hasTransitions?(e._$tooltip.clearQueue().removeClass("tooltipster-dying").addClass("tooltipster-show"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i)):e._$tooltip.stop().fadeIn(i)):"stable"==e.__state&&i();else{if(e.__stateSet("appearing"),g=e.__options.animationDuration[0],e.__contentInsert(),e.reposition(b,!0),h.hasTransitions?(e._$tooltip.addClass("tooltipster-"+e.__options.animation).addClass("tooltipster-initial").css({"-moz-animation-duration":e.__options.animationDuration[0]+"ms","-ms-animation-duration":e.__options.animationDuration[0]+"ms","-o-animation-duration":e.__options.animationDuration[0]+"ms","-webkit-animation-duration":e.__options.animationDuration[0]+"ms","animation-duration":e.__options.animationDuration[0]+"ms","transition-duration":e.__options.animationDuration[0]+"ms"}),setTimeout(function(){"closed"!=e.__state&&(e._$tooltip.addClass("tooltipster-show").removeClass("tooltipster-initial"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i))},0)):e._$tooltip.css("display","none").fadeIn(e.__options.animationDuration[0],i),e.__trackerStart(),a(h.window).on("resize."+e.__namespace+"-triggerClose",function(b){var c=a(document.activeElement);(c.is("input")||c.is("textarea"))&&a.contains(e._$tooltip[0],c[0])||e.reposition(b)}).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)}),e.__$originParents=e._$origin.parents(),e.__$originParents.each(function(b,c){a(c).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)})}),e.__options.triggerClose.mouseleave||e.__options.triggerClose.touchleave&&h.hasTouchCapability){e._on("dismissable",function(a){a.dismissable?a.delay?(m=setTimeout(function(){e._close(a.event)},a.delay),e.__timeouts.close.push(m)):e._close(a):clearTimeout(m)});var j=e._$origin,k="",l="",m=null;e.__options.interactive&&(j=j.add(e._$tooltip)),e.__options.triggerClose.mouseleave&&(k+="mouseenter."+e.__namespace+"-triggerClose ",l+="mouseleave."+e.__namespace+"-triggerClose "),e.__options.triggerClose.touchleave&&h.hasTouchCapability&&(k+="touchstart."+e.__namespace+"-triggerClose",l+="touchend."+e.__namespace+"-triggerClose touchcancel."+e.__namespace+"-triggerClose"),j.on(l,function(a){if(e._touchIsTouchEvent(a)||!e._touchIsEmulatedEvent(a)){var b="mouseleave"==a.type?e.__options.delay:e.__options.delayTouch;e._trigger({delay:b[1],dismissable:!0,event:a,type:"dismissable"})}}).on(k,function(a){!e._touchIsTouchEvent(a)&&e._touchIsEmulatedEvent(a)||e._trigger({dismissable:!1,event:a,type:"dismissable"})})}e.__options.triggerClose.originClick&&e._$origin.on("click."+e.__namespace+"-triggerClose",function(a){e._touchIsTouchEvent(a)||e._touchIsEmulatedEvent(a)||e._close(a)}),(e.__options.triggerClose.click||e.__options.triggerClose.tap&&h.hasTouchCapability)&&setTimeout(function(){if("closed"!=e.__state){var b="",c=a(h.window.document.body);e.__options.triggerClose.click&&(b+="click."+e.__namespace+"-triggerClose "),e.__options.triggerClose.tap&&h.hasTouchCapability&&(b+="touchend."+e.__namespace+"-triggerClose"),c.on(b,function(b){e._touchIsMeaningfulEvent(b)&&(e._touchRecordEvent(b),e.__options.interactive&&a.contains(e._$tooltip[0],b.target)||e._close(b))}),e.__options.triggerClose.tap&&h.hasTouchCapability&&c.on("touchstart."+e.__namespace+"-triggerClose",function(a){e._touchRecordEvent(a)})}},0),e._trigger("ready"),e.__options.functionReady&&e.__options.functionReady.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}if(e.__options.timer>0){var m=setTimeout(function(){e._close()},e.__options.timer+g);e.__timeouts.close.push(m)}}}return e},_openShortly:function(a){var b=this,c=!0;if("stable"!=b.__state&&"appearing"!=b.__state&&!b.__timeouts.open&&(b._trigger({type:"start",event:a,stop:function(){c=!1}}),c)){var d=0==a.type.indexOf("touch")?b.__options.delayTouch:b.__options.delay;d[0]?b.__timeouts.open=setTimeout(function(){b.__timeouts.open=null,b.__pointerIsOverOrigin&&b._touchIsMeaningfulEvent(a)?(b._trigger("startend"),b._open(a)):b._trigger("startcancel")},d[0]):(b._trigger("startend"),b._open(a))}return b},_optionsExtract:function(b,c){var d=this,e=a.extend(!0,{},c),f=d.__options[b];return f||(f={},a.each(c,function(a,b){var c=d.__options[a];void 0!==c&&(f[a]=c)})),a.each(e,function(b,c){void 0!==f[b]&&("object"!=typeof c||c instanceof Array||null==c||"object"!=typeof f[b]||f[b]instanceof Array||null==f[b]?e[b]=f[b]:a.extend(e[b],f[b]))}),e},_plug:function(b){var c=a.tooltipster._plugin(b);if(!c)throw new Error('The "'+b+'" plugin is not defined');return c.instance&&a.tooltipster.__bridge(c.instance,this,c.name),this},_touchIsEmulatedEvent:function(a){for(var b=!1,c=(new Date).getTime(),d=this.__touchEvents.length-1;d>=0;d--){var e=this.__touchEvents[d];if(!(c-e.time<500))break;e.target===a.target&&(b=!0)}return b},_touchIsMeaningfulEvent:function(a){return this._touchIsTouchEvent(a)&&!this._touchSwiped(a.target)||!this._touchIsTouchEvent(a)&&!this._touchIsEmulatedEvent(a)},_touchIsTouchEvent:function(a){return 0==a.type.indexOf("touch")},_touchRecordEvent:function(a){return this._touchIsTouchEvent(a)&&(a.time=(new Date).getTime(),this.__touchEvents.push(a)),this},_touchSwiped:function(a){for(var b=!1,c=this.__touchEvents.length-1;c>=0;c--){var d=this.__touchEvents[c];if("touchmove"==d.type){b=!0;break}if("touchstart"==d.type&&a===d.target)break}return b},_trigger:function(){var b=Array.prototype.slice.apply(arguments);return"string"==typeof b[0]&&(b[0]={type:b[0]}),b[0].instance=this,b[0].origin=this._$origin?this._$origin[0]:null,b[0].tooltip=this._$tooltip?this._$tooltip[0]:null,this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,b),a.tooltipster._trigger.apply(a.tooltipster,b),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,b),this},_unplug:function(b){var c=this;if(c[b]){var d=a.tooltipster._plugin(b);d.instance&&a.each(d.instance,function(a,d){c[a]&&c[a].bridged===c[b]&&delete c[a]}),c[b].__destroy&&c[b].__destroy(),delete c[b]}return c},close:function(a){return this.__destroyed?this.__destroyError():this._close(null,a),this},content:function(a){var b=this;if(void 0===a)return b.__Content;if(b.__destroyed)b.__destroyError();else if(b.__contentSet(a),null!==b.__Content){if("closed"!==b.__state&&(b.__contentInsert(),b.reposition(),b.__options.updateAnimation))if(h.hasTransitions){var c=b.__options.updateAnimation;b._$tooltip.addClass("tooltipster-update-"+c),setTimeout(function(){"closed"!=b.__state&&b._$tooltip.removeClass("tooltipster-update-"+c)},1e3)}else b._$tooltip.fadeTo(200,.5,function(){"closed"!=b.__state&&b._$tooltip.fadeTo(200,1)})}else b._close();return b},destroy:function(){var b=this;if(b.__destroyed)b.__destroyError();else{"closed"!=b.__state?b.option("animationDuration",0)._close(null,null,!0):b.__timeoutsClear(),b._trigger("destroy"),b.__destroyed=!0,b._$origin.removeData(b.__namespace).off("."+b.__namespace+"-triggerOpen"),a(h.window.document.body).off("."+b.__namespace+"-triggerOpen");var c=b._$origin.data("tooltipster-ns");if(c)if(1===c.length){var d=null;"previous"==b.__options.restoration?d=b._$origin.data("tooltipster-initialTitle"):"current"==b.__options.restoration&&(d="string"==typeof b.__Content?b.__Content:a("
      ").append(b.__Content).html()),d&&b._$origin.attr("title",d),b._$origin.removeClass("tooltipstered"),b._$origin.removeData("tooltipster-ns").removeData("tooltipster-initialTitle")}else c=a.grep(c,function(a,c){return a!==b.__namespace}),b._$origin.data("tooltipster-ns",c);b._trigger("destroyed"),b._off(),b.off(),b.__Content=null,b.__$emitterPrivate=null,b.__$emitterPublic=null,b.__options.parent=null,b._$origin=null,b._$tooltip=null,a.tooltipster.__instancesLatestArr=a.grep(a.tooltipster.__instancesLatestArr,function(a,c){return b!==a}),clearInterval(b.__garbageCollector)}return b},disable:function(){return this.__destroyed?(this.__destroyError(),this):(this._close(),this.__enabled=!1,this)},elementOrigin:function(){return this.__destroyed?void this.__destroyError():this._$origin[0]},elementTooltip:function(){return this._$tooltip?this._$tooltip[0]:null},enable:function(){return this.__enabled=!0,this},hide:function(a){return this.close(a)},instance:function(){return this},off:function(){return this.__destroyed||this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},open:function(a){return this.__destroyed?this.__destroyError():this._open(null,a),this},option:function(b,c){return void 0===c?this.__options[b]:(this.__destroyed?this.__destroyError():(this.__options[b]=c,this.__optionsFormat(),a.inArray(b,["trigger","triggerClose","triggerOpen"])>=0&&this.__prepareOrigin(),"selfDestruction"===b&&this.__prepareGC()),this)},reposition:function(a,b){var c=this;return c.__destroyed?c.__destroyError():"closed"!=c.__state&&d(c._$origin)&&(b||d(c._$tooltip))&&(b||c._$tooltip.detach(),c.__Geometry=c.__geometry(),c._trigger({type:"reposition",event:a,helper:{geo:c.__Geometry}})),c},show:function(a){return this.open(a)},status:function(){return{destroyed:this.__destroyed,enabled:this.__enabled,open:"closed"!==this.__state,state:this.__state}},triggerHandler:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.fn.tooltipster=function(){var b=Array.prototype.slice.apply(arguments),c="You are using a single HTML element as content for several tooltips. You probably want to set the contentCloning option to TRUE.";if(0===this.length)return this;if("string"==typeof b[0]){var d="#*$~&";return this.each(function(){var e=a(this).data("tooltipster-ns"),f=e?a(this).data(e[0]):null;if(!f)throw new Error("You called Tooltipster's \""+b[0]+'" method on an uninitialized element');if("function"!=typeof f[b[0]])throw new Error('Unknown method "'+b[0]+'"');this.length>1&&"content"==b[0]&&(b[1]instanceof a||"object"==typeof b[1]&&null!=b[1]&&b[1].tagName)&&!f.__options.contentCloning&&f.__options.debug&&console.log(c);var g=f[b[0]](b[1],b[2]);return g!==f||"instance"===b[0]?(d=g,!1):void 0}),"#*$~&"!==d?d:this}a.tooltipster.__instancesLatestArr=[];var e=b[0]&&void 0!==b[0].multiple,g=e&&b[0].multiple||!e&&f.multiple,h=b[0]&&void 0!==b[0].content,i=h&&b[0].content||!h&&f.content,j=b[0]&&void 0!==b[0].contentCloning,k=j&&b[0].contentCloning||!j&&f.contentCloning,l=b[0]&&void 0!==b[0].debug,m=l&&b[0].debug||!l&&f.debug;return this.length>1&&(i instanceof a||"object"==typeof i&&null!=i&&i.tagName)&&!k&&m&&console.log(c),this.each(function(){var c=!1,d=a(this),e=d.data("tooltipster-ns"),f=null;e?g?c=!0:m&&(console.log("Tooltipster: one or more tooltips are already attached to the element below. Ignoring."),console.log(this)):c=!0,c&&(f=new a.Tooltipster(this,b[0]),e||(e=[]),e.push(f.__namespace),d.data("tooltipster-ns",e),d.data(f.__namespace,f),f.__options.functionInit&&f.__options.functionInit.call(f,f,{origin:this}),f._trigger("init")),a.tooltipster.__instancesLatestArr.push(f)}),this},b.prototype={__init:function(b){this.__$tooltip=b,this.__$tooltip.css({left:0,overflow:"hidden",position:"absolute",top:0}).find(".tooltipster-content").css("overflow","auto"),this.$container=a('
      ').append(this.__$tooltip).appendTo(h.window.document.body)},__forceRedraw:function(){var a=this.__$tooltip.parent();this.__$tooltip.detach(),this.__$tooltip.appendTo(a)},constrain:function(a,b){return this.constraints={width:a,height:b},this.__$tooltip.css({display:"block",height:"",overflow:"auto",width:a}),this},destroy:function(){this.__$tooltip.detach().find(".tooltipster-content").css({display:"",overflow:""}),this.$container.remove()},free:function(){return this.constraints=null,this.__$tooltip.css({display:"",height:"",overflow:"visible",width:""}),this},measure:function(){this.__forceRedraw();var a=this.__$tooltip[0].getBoundingClientRect(),b={size:{height:a.height||a.bottom-a.top,width:a.width||a.right-a.left}};if(this.constraints){var c=this.__$tooltip.find(".tooltipster-content"),d=this.__$tooltip.outerHeight(),e=c[0].getBoundingClientRect(),f={height:d<=this.constraints.height,width:a.width<=this.constraints.width&&e.width>=c[0].scrollWidth-1};b.fits=f.height&&f.width}return h.IE&&h.IE<=11&&b.size.width!==h.window.document.documentElement.clientWidth&&(b.size.width=Math.ceil(b.size.width)+1),b}};var j=navigator.userAgent.toLowerCase();-1!=j.indexOf("msie")?h.IE=parseInt(j.split("msie")[1]):-1!==j.toLowerCase().indexOf("trident")&&-1!==j.indexOf(" rv:11")?h.IE=11:-1!=j.toLowerCase().indexOf("edge/")&&(h.IE=parseInt(j.toLowerCase().split("edge/")[1]));var k="tooltipster.sideTip";return a.tooltipster._plugin({name:k,instance:{__defaults:function(){return{arrow:!0,distance:6,functionPosition:null,maxWidth:null,minIntersection:16,minWidth:0,position:null,side:"top",viewportAware:!0}},__init:function(a){var b=this;b.__instance=a,b.__namespace="tooltipster-sideTip-"+Math.round(1e6*Math.random()),b.__previousState="closed",b.__options,b.__optionsFormat(),b.__instance._on("state."+b.__namespace,function(a){"closed"==a.state?b.__close():"appearing"==a.state&&"closed"==b.__previousState&&b.__create(),b.__previousState=a.state}),b.__instance._on("options."+b.__namespace,function(){b.__optionsFormat()}),b.__instance._on("reposition."+b.__namespace,function(a){b.__reposition(a.event,a.helper)})},__close:function(){this.__instance.content()instanceof a&&this.__instance.content().detach(),this.__instance._$tooltip.remove(),this.__instance._$tooltip=null},__create:function(){var b=a('
      ');this.__options.arrow||b.find(".tooltipster-box").css("margin",0).end().find(".tooltipster-arrow").hide(),this.__options.minWidth&&b.css("min-width",this.__options.minWidth+"px"),this.__options.maxWidth&&b.css("max-width",this.__options.maxWidth+"px"), this.__instance._$tooltip=b,this.__instance._trigger("created")},__destroy:function(){this.__instance._off("."+self.__namespace)},__optionsFormat:function(){var b=this;if(b.__options=b.__instance._optionsExtract(k,b.__defaults()),b.__options.position&&(b.__options.side=b.__options.position),"object"!=typeof b.__options.distance&&(b.__options.distance=[b.__options.distance]),b.__options.distance.length<4&&(void 0===b.__options.distance[1]&&(b.__options.distance[1]=b.__options.distance[0]),void 0===b.__options.distance[2]&&(b.__options.distance[2]=b.__options.distance[0]),void 0===b.__options.distance[3]&&(b.__options.distance[3]=b.__options.distance[1]),b.__options.distance={top:b.__options.distance[0],right:b.__options.distance[1],bottom:b.__options.distance[2],left:b.__options.distance[3]}),"string"==typeof b.__options.side){var c={top:"bottom",right:"left",bottom:"top",left:"right"};b.__options.side=[b.__options.side,c[b.__options.side]],"left"==b.__options.side[0]||"right"==b.__options.side[0]?b.__options.side.push("top","bottom"):b.__options.side.push("right","left")}6===a.tooltipster._env.IE&&b.__options.arrow!==!0&&(b.__options.arrow=!1)},__reposition:function(b,c){var d,e=this,f=e.__targetFind(c),g=[];e.__instance._$tooltip.detach();var h=e.__instance._$tooltip.clone(),i=a.tooltipster._getRuler(h),j=!1,k=e.__instance.option("animation");switch(k&&h.removeClass("tooltipster-"+k),a.each(["window","document"],function(d,k){var l=null;if(e.__instance._trigger({container:k,helper:c,satisfied:j,takeTest:function(a){l=a},results:g,type:"positionTest"}),1==l||0!=l&&0==j&&("window"!=k||e.__options.viewportAware))for(var d=0;d=h.outerSize.width&&c.geo.available[k][n].height>=h.outerSize.height?h.fits=!0:h.fits=!1:h.fits=p.fits,"window"==k&&(h.fits?"top"==n||"bottom"==n?h.whole=c.geo.origin.windowOffset.right>=e.__options.minIntersection&&c.geo.window.size.width-c.geo.origin.windowOffset.left>=e.__options.minIntersection:h.whole=c.geo.origin.windowOffset.bottom>=e.__options.minIntersection&&c.geo.window.size.height-c.geo.origin.windowOffset.top>=e.__options.minIntersection:h.whole=!1),g.push(h),h.whole)j=!0;else if("natural"==h.mode&&(h.fits||h.size.width<=c.geo.available[k][n].width))return!1}})}}),e.__instance._trigger({edit:function(a){g=a},event:b,helper:c,results:g,type:"positionTested"}),g.sort(function(a,b){if(a.whole&&!b.whole)return-1;if(!a.whole&&b.whole)return 1;if(a.whole&&b.whole){var c=e.__options.side.indexOf(a.side),d=e.__options.side.indexOf(b.side);return d>c?-1:c>d?1:"natural"==a.mode?-1:1}if(a.fits&&!b.fits)return-1;if(!a.fits&&b.fits)return 1;if(a.fits&&b.fits){var c=e.__options.side.indexOf(a.side),d=e.__options.side.indexOf(b.side);return d>c?-1:c>d?1:"natural"==a.mode?-1:1}return"document"==a.container&&"bottom"==a.side&&"natural"==a.mode?-1:1}),d=g[0],d.coord={},d.side){case"left":case"right":d.coord.top=Math.floor(d.target-d.size.height/2);break;case"bottom":case"top":d.coord.left=Math.floor(d.target-d.size.width/2)}switch(d.side){case"left":d.coord.left=c.geo.origin.windowOffset.left-d.outerSize.width;break;case"right":d.coord.left=c.geo.origin.windowOffset.right+d.distance.horizontal;break;case"top":d.coord.top=c.geo.origin.windowOffset.top-d.outerSize.height;break;case"bottom":d.coord.top=c.geo.origin.windowOffset.bottom+d.distance.vertical}"window"==d.container?"top"==d.side||"bottom"==d.side?d.coord.left<0?c.geo.origin.windowOffset.right-this.__options.minIntersection>=0?d.coord.left=0:d.coord.left=c.geo.origin.windowOffset.right-this.__options.minIntersection-1:d.coord.left>c.geo.window.size.width-d.size.width&&(c.geo.origin.windowOffset.left+this.__options.minIntersection<=c.geo.window.size.width?d.coord.left=c.geo.window.size.width-d.size.width:d.coord.left=c.geo.origin.windowOffset.left+this.__options.minIntersection+1-d.size.width):d.coord.top<0?c.geo.origin.windowOffset.bottom-this.__options.minIntersection>=0?d.coord.top=0:d.coord.top=c.geo.origin.windowOffset.bottom-this.__options.minIntersection-1:d.coord.top>c.geo.window.size.height-d.size.height&&(c.geo.origin.windowOffset.top+this.__options.minIntersection<=c.geo.window.size.height?d.coord.top=c.geo.window.size.height-d.size.height:d.coord.top=c.geo.origin.windowOffset.top+this.__options.minIntersection+1-d.size.height):(d.coord.left>c.geo.window.size.width-d.size.width&&(d.coord.left=c.geo.window.size.width-d.size.width),d.coord.left<0&&(d.coord.left=0)),e.__sideChange(h,d.side),c.tooltipClone=h[0],c.tooltipParent=e.__instance.option("parent").parent[0],c.mode=d.mode,c.whole=d.whole,c.origin=e.__instance._$origin[0],c.tooltip=e.__instance._$tooltip[0],delete d.container,delete d.fits,delete d.mode,delete d.outerSize,delete d.whole,d.distance=d.distance.horizontal||d.distance.vertical;var l=a.extend(!0,{},d);if(e.__instance._trigger({edit:function(a){d=a},event:b,helper:c,position:l,type:"position"}),e.__options.functionPosition){var m=e.__options.functionPosition.call(e,e.__instance,c,l);m&&(d=m)}i.destroy();var n,o;"top"==d.side||"bottom"==d.side?(n={prop:"left",val:d.target-d.coord.left},o=d.size.width-this.__options.minIntersection):(n={prop:"top",val:d.target-d.coord.top},o=d.size.height-this.__options.minIntersection),n.valo&&(n.val=o);var p;p=c.geo.origin.fixedLineage?c.geo.origin.windowOffset:{left:c.geo.origin.windowOffset.left+c.geo.window.scroll.left,top:c.geo.origin.windowOffset.top+c.geo.window.scroll.top},d.coord={left:p.left+(d.coord.left-c.geo.origin.windowOffset.left),top:p.top+(d.coord.top-c.geo.origin.windowOffset.top)},e.__sideChange(e.__instance._$tooltip,d.side),c.geo.origin.fixedLineage?e.__instance._$tooltip.css("position","fixed"):e.__instance._$tooltip.css("position",""),e.__instance._$tooltip.css({left:d.coord.left,top:d.coord.top,height:d.size.height,width:d.size.width}).find(".tooltipster-arrow").css({left:"",top:""}).css(n.prop,n.val),e.__instance._$tooltip.appendTo(e.__instance.option("parent")),e.__instance._trigger({type:"repositioned",event:b,position:d})},__sideChange:function(a,b){a.removeClass("tooltipster-bottom").removeClass("tooltipster-left").removeClass("tooltipster-right").removeClass("tooltipster-top").addClass("tooltipster-"+b)},__targetFind:function(a){var b={},c=this.__instance._$origin[0].getClientRects();if(c.length>1){var d=this.__instance._$origin.css("opacity");1==d&&(this.__instance._$origin.css("opacity",.99),c=this.__instance._$origin[0].getClientRects(),this.__instance._$origin.css("opacity",1))}if(c.length<2)b.top=Math.floor(a.geo.origin.windowOffset.left+a.geo.origin.size.width/2),b.bottom=b.top,b.left=Math.floor(a.geo.origin.windowOffset.top+a.geo.origin.size.height/2),b.right=b.left;else{var e=c[0];b.top=Math.floor(e.left+(e.right-e.left)/2),e=c.length>2?c[Math.ceil(c.length/2)-1]:c[0],b.right=Math.floor(e.top+(e.bottom-e.top)/2),e=c[c.length-1],b.bottom=Math.floor(e.left+(e.right-e.left)/2),e=c.length>2?c[Math.ceil((c.length+1)/2)-1]:c[c.length-1],b.left=Math.floor(e.top+(e.bottom-e.top)/2)}return b}}}),a});assets/lib/jquery.tooltipster/jquery.tooltipster.min.css000064400000015436147400353540017742 0ustar00.tooltipster-base{display:flex;pointer-events:none;position:absolute}.tooltipster-box{flex:1 1 auto}.tooltipster-content{box-sizing:border-box;max-height:100%;max-width:100%;overflow:auto}.tooltipster-ruler{bottom:0;left:0;overflow:hidden;position:fixed;right:0;top:0;visibility:hidden}.tooltipster-fade{opacity:0;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;-ms-transition-property:opacity;transition-property:opacity}.tooltipster-fade.tooltipster-show{opacity:1}.tooltipster-grow{-webkit-transform:scale(0, 0);-moz-transform:scale(0, 0);-o-transform:scale(0, 0);-ms-transform:scale(0, 0);transform:scale(0, 0);-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-backface-visibility:hidden}.tooltipster-grow.tooltipster-show{-webkit-transform:scale(1, 1);-moz-transform:scale(1, 1);-o-transform:scale(1, 1);-ms-transform:scale(1, 1);transform:scale(1, 1);-webkit-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);-webkit-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);-moz-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);-ms-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);-o-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15)}.tooltipster-swing{opacity:0;-webkit-transform:rotateZ(4deg);-moz-transform:rotateZ(4deg);-o-transform:rotateZ(4deg);-ms-transform:rotateZ(4deg);transform:rotateZ(4deg);-webkit-transition-property:-webkit-transform, opacity;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform}.tooltipster-swing.tooltipster-show{opacity:1;-webkit-transform:rotateZ(0deg);-moz-transform:rotateZ(0deg);-o-transform:rotateZ(0deg);-ms-transform:rotateZ(0deg);transform:rotateZ(0deg);-webkit-transition-timing-function:cubic-bezier(0.23, 0.635, 0.495, 1);-webkit-transition-timing-function:cubic-bezier(0.23, 0.635, 0.495, 2.4);-moz-transition-timing-function:cubic-bezier(0.23, 0.635, 0.495, 2.4);-ms-transition-timing-function:cubic-bezier(0.23, 0.635, 0.495, 2.4);-o-transition-timing-function:cubic-bezier(0.23, 0.635, 0.495, 2.4);transition-timing-function:cubic-bezier(0.23, 0.635, 0.495, 2.4)}.tooltipster-fall{-webkit-transition-property:top;-moz-transition-property:top;-o-transition-property:top;-ms-transition-property:top;transition-property:top;-webkit-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);-webkit-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);-moz-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);-ms-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);-o-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15)}.tooltipster-fall.tooltipster-initial{top:0 !important}.tooltipster-fall.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;top:0 !important;opacity:0}.tooltipster-slide{-webkit-transition-property:left;-moz-transition-property:left;-o-transition-property:left;-ms-transition-property:left;transition-property:left;-webkit-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);-webkit-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);-moz-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);-ms-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);-o-transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15);transition-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1.15)}.tooltipster-slide.tooltipster-initial{left:-40px !important}.tooltipster-slide.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;left:0 !important;opacity:0}@keyframes tooltipster-fading{0%{opacity:0}100%{opacity:1}}.tooltipster-update-fade{animation:tooltipster-fading 400ms}@keyframes tooltipster-rotating{25%{transform:rotate(-2deg)}75%{transform:rotate(2deg)}100%{transform:rotate(0)}}.tooltipster-update-rotate{animation:tooltipster-rotating 600ms}@keyframes tooltipster-scaling{50%{transform:scale(1.1)}100%{transform:scale(1)}}.tooltipster-update-scale{animation:tooltipster-scaling 600ms}.tooltipster-sidetip .tooltipster-box{background:#565656;border:2px solid black;border-radius:4px}.tooltipster-sidetip.tooltipster-bottom .tooltipster-box{margin-top:8px}.tooltipster-sidetip.tooltipster-left .tooltipster-box{margin-right:8px}.tooltipster-sidetip.tooltipster-right .tooltipster-box{margin-left:8px}.tooltipster-sidetip.tooltipster-top .tooltipster-box{margin-bottom:8px}.tooltipster-sidetip .tooltipster-content{color:white;line-height:18px;padding:6px 14px}.tooltipster-sidetip .tooltipster-content a{color:white}.tooltipster-sidetip .tooltipster-arrow{overflow:hidden;position:absolute}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow{height:10px;margin-left:-10px;top:0;width:20px}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow{height:20px;margin-top:-10px;right:0;top:0;width:10px}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow{height:20px;margin-top:-10px;left:0;top:0;width:10px}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow{bottom:0;height:10px;margin-left:-10px;width:20px}.tooltipster-sidetip .tooltipster-arrow-background,.tooltipster-sidetip .tooltipster-arrow-border{height:0;position:absolute;width:0}.tooltipster-sidetip .tooltipster-arrow-background{border:10px solid transparent}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background{border-bottom-color:#565656;left:0;top:3px}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background{border-left-color:#565656;left:-3px;top:0}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background{border-right-color:#565656;left:3px;top:0}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background{border-top-color:#565656;left:0;top:-3px}.tooltipster-sidetip .tooltipster-arrow-border{border:10px solid transparent;left:0;top:0}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:black}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border{border-left-color:black}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border{border-right-color:black}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border{border-top-color:black}.tooltipster-sidetip .tooltipster-arrow-uncropped{position:relative}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped{top:-10px}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped{left:-10px} assets/lib/mailcheck.min.js000064400000007656147400353540011677 0ustar00/*! mailcheck v1.1.2 @licence MIT */var Mailcheck={domainThreshold:2,secondLevelThreshold:2,topLevelThreshold:2,defaultDomains:["msn.com","bellsouth.net","telus.net","comcast.net","optusnet.com.au","earthlink.net","qq.com","sky.com","icloud.com","mac.com","sympatico.ca","googlemail.com","att.net","xtra.co.nz","web.de","cox.net","gmail.com","ymail.com","aim.com","rogers.com","verizon.net","rocketmail.com","google.com","optonline.net","sbcglobal.net","aol.com","me.com","btinternet.com","charter.net","shaw.ca"],defaultSecondLevelDomains:["yahoo","hotmail","mail","live","outlook","gmx"],defaultTopLevelDomains:["com","com.au","com.tw","ca","co.nz","co.uk","de","fr","it","ru","net","org","edu","gov","jp","nl","kr","se","eu","ie","co.il","us","at","be","dk","hk","es","gr","ch","no","cz","in","net","net.au","info","biz","mil","co.jp","sg","hu","uk"],run:function(a){a.domains=a.domains||Mailcheck.defaultDomains,a.secondLevelDomains=a.secondLevelDomains||Mailcheck.defaultSecondLevelDomains,a.topLevelDomains=a.topLevelDomains||Mailcheck.defaultTopLevelDomains,a.distanceFunction=a.distanceFunction||Mailcheck.sift4Distance;var b=function(a){return a},c=a.suggested||b,d=a.empty||b,e=Mailcheck.suggest(Mailcheck.encodeEmail(a.email),a.domains,a.secondLevelDomains,a.topLevelDomains,a.distanceFunction);return e?c(e):d()},suggest:function(a,b,c,d,e){a=a.toLowerCase();var f=this.splitEmail(a);if(c&&d&&-1!==c.indexOf(f.secondLevelDomain)&&-1!==d.indexOf(f.topLevelDomain))return!1;var g=this.findClosestDomain(f.domain,b,e,this.domainThreshold);if(g)return g==f.domain?!1:{address:f.address,domain:g,full:f.address+"@"+g};var h=this.findClosestDomain(f.secondLevelDomain,c,e,this.secondLevelThreshold),i=this.findClosestDomain(f.topLevelDomain,d,e,this.topLevelThreshold);if(f.domain){g=f.domain;var j=!1;if(h&&h!=f.secondLevelDomain&&(g=g.replace(f.secondLevelDomain,h),j=!0),i&&i!=f.topLevelDomain&&""!==f.secondLevelDomain&&(g=g.replace(new RegExp(f.topLevelDomain+"$"),i),j=!0),j)return{address:f.address,domain:g,full:f.address+"@"+g}}return!1},findClosestDomain:function(a,b,c,d){d=d||this.topLevelThreshold;var e,f=1/0,g=null;if(!a||!b)return!1;c||(c=this.sift4Distance);for(var h=0;he&&(f=e,g=b[h])}return d>=f&&null!==g?g:!1},sift4Distance:function(a,b,c){if(void 0===c&&(c=5),!a||!a.length)return b?b.length:0;if(!b||!b.length)return a.length;for(var d=a.length,e=b.length,f=0,g=0,h=0,i=0,j=0,k=[];d>f&&e>g;){if(a.charAt(f)==b.charAt(g)){i++;for(var l=!1,m=0;m=Math.abs(n.c2-n.c1),l?j++:n.trans||(n.trans=!0,j++);break}f>n.c2&&g>n.c1?k.splice(m,1):m++}k.push({c1:f,c2:g,trans:l})}else{h+=i,i=0,f!=g&&(f=g=Math.min(f,g));for(var o=0;c>o&&(d>f+o||e>g+o);o++){if(d>f+o&&a.charAt(f+o)==b.charAt(g)){f+=o-1,g--;break}if(e>g+o&&a.charAt(f)==b.charAt(g+o)){f--,g+=o-1;break}}}f++,g++,(f>=d||g>=e)&&(h+=i,i=0,f=g=Math.min(f,g))}return h+=i,Math.round(Math.max(d,e)-h+j)},splitEmail:function(a){a=null!==a?a.replace(/^\s*/,"").replace(/\s*$/,""):null;var b=a.split("@");if(b.length<2)return!1;for(var c=0;cli{position:relative} .fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center} .fa-li.fa-lg{left:-1.85714286em} .fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em} .fa-pull-left{float:left} .fa-pull-right{float:right} .fa.fa-pull-left{margin-right:.3em} .fa.fa-pull-right{margin-left:.3em} .pull-right{float:right} .pull-left{float:left} .fa.pull-left{margin-right:.3em} .fa.pull-right{margin-left:.3em} .fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear} .fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)} @-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} @keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} .fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)} .fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)} .fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)} .fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)} .fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)} :root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none} .fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle} .fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center} .fa-stack-1x{line-height:inherit} .fa-stack-2x{font-size:2em} .fa-inverse{color:#fff} .fa-glass:before{content:"\f000"} .fa-music:before{content:"\f001"} .fa-search:before{content:"\f002"} .fa-envelope-o:before{content:"\f003"} .fa-heart:before{content:"\f004"} .fa-star:before{content:"\f005"} .fa-star-o:before{content:"\f006"} .fa-user:before{content:"\f007"} .fa-film:before{content:"\f008"} .fa-th-large:before{content:"\f009"} .fa-th:before{content:"\f00a"} .fa-th-list:before{content:"\f00b"} .fa-check:before{content:"\f00c"} .fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"} .fa-search-plus:before{content:"\f00e"} .fa-search-minus:before{content:"\f010"} .fa-power-off:before{content:"\f011"} .fa-signal:before{content:"\f012"} .fa-gear:before,.fa-cog:before{content:"\f013"} .fa-trash-o:before{content:"\f014"} .fa-home:before{content:"\f015"} .fa-file-o:before{content:"\f016"} .fa-clock-o:before{content:"\f017"} .fa-road:before{content:"\f018"} .fa-download:before{content:"\f019"} .fa-arrow-circle-o-down:before{content:"\f01a"} .fa-arrow-circle-o-up:before{content:"\f01b"} .fa-inbox:before{content:"\f01c"} .fa-play-circle-o:before{content:"\f01d"} .fa-rotate-right:before,.fa-repeat:before{content:"\f01e"} .fa-refresh:before{content:"\f021"} .fa-list-alt:before{content:"\f022"} .fa-lock:before{content:"\f023"} .fa-flag:before{content:"\f024"} .fa-headphones:before{content:"\f025"} .fa-volume-off:before{content:"\f026"} .fa-volume-down:before{content:"\f027"} .fa-volume-up:before{content:"\f028"} .fa-qrcode:before{content:"\f029"} .fa-barcode:before{content:"\f02a"} .fa-tag:before{content:"\f02b"} .fa-tags:before{content:"\f02c"} .fa-book:before{content:"\f02d"} .fa-bookmark:before{content:"\f02e"} .fa-print:before{content:"\f02f"} .fa-camera:before{content:"\f030"} .fa-font:before{content:"\f031"} .fa-bold:before{content:"\f032"} .fa-italic:before{content:"\f033"} .fa-text-height:before{content:"\f034"} .fa-text-width:before{content:"\f035"} .fa-align-left:before{content:"\f036"} .fa-align-center:before{content:"\f037"} .fa-align-right:before{content:"\f038"} .fa-align-justify:before{content:"\f039"} .fa-list:before{content:"\f03a"} .fa-dedent:before,.fa-outdent:before{content:"\f03b"} .fa-indent:before{content:"\f03c"} .fa-video-camera:before{content:"\f03d"} .fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"} .fa-pencil:before{content:"\f040"} .fa-map-marker:before{content:"\f041"} .fa-adjust:before{content:"\f042"} .fa-tint:before{content:"\f043"} .fa-edit:before,.fa-pencil-square-o:before{content:"\f044"} .fa-share-square-o:before{content:"\f045"} .fa-check-square-o:before{content:"\f046"} .fa-arrows:before{content:"\f047"} .fa-step-backward:before{content:"\f048"} .fa-fast-backward:before{content:"\f049"} .fa-backward:before{content:"\f04a"} .fa-play:before{content:"\f04b"} .fa-pause:before{content:"\f04c"} .fa-stop:before{content:"\f04d"} .fa-forward:before{content:"\f04e"} .fa-fast-forward:before{content:"\f050"} .fa-step-forward:before{content:"\f051"} .fa-eject:before{content:"\f052"} .fa-chevron-left:before{content:"\f053"} .fa-chevron-right:before{content:"\f054"} .fa-plus-circle:before{content:"\f055"} .fa-minus-circle:before{content:"\f056"} .fa-times-circle:before{content:"\f057"} .fa-check-circle:before{content:"\f058"} .fa-question-circle:before{content:"\f059"} .fa-info-circle:before{content:"\f05a"} .fa-crosshairs:before{content:"\f05b"} .fa-times-circle-o:before{content:"\f05c"} .fa-check-circle-o:before{content:"\f05d"} .fa-ban:before{content:"\f05e"} .fa-arrow-left:before{content:"\f060"} .fa-arrow-right:before{content:"\f061"} .fa-arrow-up:before{content:"\f062"} .fa-arrow-down:before{content:"\f063"} .fa-mail-forward:before,.fa-share:before{content:"\f064"} .fa-expand:before{content:"\f065"} .fa-compress:before{content:"\f066"} .fa-plus:before{content:"\f067"} .fa-minus:before{content:"\f068"} .fa-asterisk:before{content:"\f069"} .fa-exclamation-circle:before{content:"\f06a"} .fa-gift:before{content:"\f06b"} .fa-leaf:before{content:"\f06c"} .fa-fire:before{content:"\f06d"} .fa-eye:before{content:"\f06e"} .fa-eye-slash:before{content:"\f070"} .fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"} .fa-plane:before{content:"\f072"} .fa-calendar:before{content:"\f073"} .fa-random:before{content:"\f074"} .fa-comment:before{content:"\f075"} .fa-magnet:before{content:"\f076"} .fa-chevron-up:before{content:"\f077"} .fa-chevron-down:before{content:"\f078"} .fa-retweet:before{content:"\f079"} .fa-shopping-cart:before{content:"\f07a"} .fa-folder:before{content:"\f07b"} .fa-folder-open:before{content:"\f07c"} .fa-arrows-v:before{content:"\f07d"} .fa-arrows-h:before{content:"\f07e"} .fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"} .fa-twitter-square:before{content:"\f081"} .fa-facebook-square:before{content:"\f082"} .fa-camera-retro:before{content:"\f083"} .fa-key:before{content:"\f084"} .fa-gears:before,.fa-cogs:before{content:"\f085"} .fa-comments:before{content:"\f086"} .fa-thumbs-o-up:before{content:"\f087"} .fa-thumbs-o-down:before{content:"\f088"} .fa-star-half:before{content:"\f089"} .fa-heart-o:before{content:"\f08a"} .fa-sign-out:before{content:"\f08b"} .fa-linkedin-square:before{content:"\f08c"} .fa-thumb-tack:before{content:"\f08d"} .fa-external-link:before{content:"\f08e"} .fa-sign-in:before{content:"\f090"} .fa-trophy:before{content:"\f091"} .fa-github-square:before{content:"\f092"} .fa-upload:before{content:"\f093"} .fa-lemon-o:before{content:"\f094"} .fa-phone:before{content:"\f095"} .fa-square-o:before{content:"\f096"} .fa-bookmark-o:before{content:"\f097"} .fa-phone-square:before{content:"\f098"} .fa-twitter:before{content:"\f099"} .fa-facebook-f:before,.fa-facebook:before{content:"\f09a"} .fa-github:before{content:"\f09b"} .fa-unlock:before{content:"\f09c"} .fa-credit-card:before{content:"\f09d"} .fa-feed:before,.fa-rss:before{content:"\f09e"} .fa-hdd-o:before{content:"\f0a0"} .fa-bullhorn:before{content:"\f0a1"} .fa-bell:before{content:"\f0f3"} .fa-certificate:before{content:"\f0a3"} .fa-hand-o-right:before{content:"\f0a4"} .fa-hand-o-left:before{content:"\f0a5"} .fa-hand-o-up:before{content:"\f0a6"} .fa-hand-o-down:before{content:"\f0a7"} .fa-arrow-circle-left:before{content:"\f0a8"} .fa-arrow-circle-right:before{content:"\f0a9"} .fa-arrow-circle-up:before{content:"\f0aa"} .fa-arrow-circle-down:before{content:"\f0ab"} .fa-globe:before{content:"\f0ac"} .fa-wrench:before{content:"\f0ad"} .fa-tasks:before{content:"\f0ae"} .fa-filter:before{content:"\f0b0"} .fa-briefcase:before{content:"\f0b1"} .fa-arrows-alt:before{content:"\f0b2"} .fa-group:before,.fa-users:before{content:"\f0c0"} .fa-chain:before,.fa-link:before{content:"\f0c1"} .fa-cloud:before{content:"\f0c2"} .fa-flask:before{content:"\f0c3"} .fa-cut:before,.fa-scissors:before{content:"\f0c4"} .fa-copy:before,.fa-files-o:before{content:"\f0c5"} .fa-paperclip:before{content:"\f0c6"} .fa-save:before,.fa-floppy-o:before{content:"\f0c7"} .fa-square:before{content:"\f0c8"} .fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"} .fa-list-ul:before{content:"\f0ca"} .fa-list-ol:before{content:"\f0cb"} .fa-strikethrough:before{content:"\f0cc"} .fa-underline:before{content:"\f0cd"} .fa-table:before{content:"\f0ce"} .fa-magic:before{content:"\f0d0"} .fa-truck:before{content:"\f0d1"} .fa-pinterest:before{content:"\f0d2"} .fa-pinterest-square:before{content:"\f0d3"} .fa-google-plus-square:before{content:"\f0d4"} .fa-google-plus:before{content:"\f0d5"} .fa-money:before{content:"\f0d6"} .fa-caret-down:before{content:"\f0d7"} .fa-caret-up:before{content:"\f0d8"} .fa-caret-left:before{content:"\f0d9"} .fa-caret-right:before{content:"\f0da"} .fa-columns:before{content:"\f0db"} .fa-unsorted:before,.fa-sort:before{content:"\f0dc"} .fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"} .fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"} .fa-envelope:before{content:"\f0e0"} .fa-linkedin:before{content:"\f0e1"} .fa-rotate-left:before,.fa-undo:before{content:"\f0e2"} .fa-legal:before,.fa-gavel:before{content:"\f0e3"} .fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"} .fa-comment-o:before{content:"\f0e5"} .fa-comments-o:before{content:"\f0e6"} .fa-flash:before,.fa-bolt:before{content:"\f0e7"} .fa-sitemap:before{content:"\f0e8"} .fa-umbrella:before{content:"\f0e9"} .fa-paste:before,.fa-clipboard:before{content:"\f0ea"} .fa-lightbulb-o:before{content:"\f0eb"} .fa-exchange:before{content:"\f0ec"} .fa-cloud-download:before{content:"\f0ed"} .fa-cloud-upload:before{content:"\f0ee"} .fa-user-md:before{content:"\f0f0"} .fa-stethoscope:before{content:"\f0f1"} .fa-suitcase:before{content:"\f0f2"} .fa-bell-o:before{content:"\f0a2"} .fa-coffee:before{content:"\f0f4"} .fa-cutlery:before{content:"\f0f5"} .fa-file-text-o:before{content:"\f0f6"} .fa-building-o:before{content:"\f0f7"} .fa-hospital-o:before{content:"\f0f8"} .fa-ambulance:before{content:"\f0f9"} .fa-medkit:before{content:"\f0fa"} .fa-fighter-jet:before{content:"\f0fb"} .fa-beer:before{content:"\f0fc"} .fa-h-square:before{content:"\f0fd"} .fa-plus-square:before{content:"\f0fe"} .fa-angle-double-left:before{content:"\f100"} .fa-angle-double-right:before{content:"\f101"} .fa-angle-double-up:before{content:"\f102"} .fa-angle-double-down:before{content:"\f103"} .fa-angle-left:before{content:"\f104"} .fa-angle-right:before{content:"\f105"} .fa-angle-up:before{content:"\f106"} .fa-angle-down:before{content:"\f107"} .fa-desktop:before{content:"\f108"} .fa-laptop:before{content:"\f109"} .fa-tablet:before{content:"\f10a"} .fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"} .fa-circle-o:before{content:"\f10c"} .fa-quote-left:before{content:"\f10d"} .fa-quote-right:before{content:"\f10e"} .fa-spinner:before{content:"\f110"} .fa-circle:before{content:"\f111"} .fa-mail-reply:before,.fa-reply:before{content:"\f112"} .fa-github-alt:before{content:"\f113"} .fa-folder-o:before{content:"\f114"} .fa-folder-open-o:before{content:"\f115"} .fa-smile-o:before{content:"\f118"} .fa-frown-o:before{content:"\f119"} .fa-meh-o:before{content:"\f11a"} .fa-gamepad:before{content:"\f11b"} .fa-keyboard-o:before{content:"\f11c"} .fa-flag-o:before{content:"\f11d"} .fa-flag-checkered:before{content:"\f11e"} .fa-terminal:before{content:"\f120"} .fa-code:before{content:"\f121"} .fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"} .fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"} .fa-location-arrow:before{content:"\f124"} .fa-crop:before{content:"\f125"} .fa-code-fork:before{content:"\f126"} .fa-unlink:before,.fa-chain-broken:before{content:"\f127"} .fa-question:before{content:"\f128"} .fa-info:before{content:"\f129"} .fa-exclamation:before{content:"\f12a"} .fa-superscript:before{content:"\f12b"} .fa-subscript:before{content:"\f12c"} .fa-eraser:before{content:"\f12d"} .fa-puzzle-piece:before{content:"\f12e"} .fa-microphone:before{content:"\f130"} .fa-microphone-slash:before{content:"\f131"} .fa-shield:before{content:"\f132"} .fa-calendar-o:before{content:"\f133"} .fa-fire-extinguisher:before{content:"\f134"} .fa-rocket:before{content:"\f135"} .fa-maxcdn:before{content:"\f136"} .fa-chevron-circle-left:before{content:"\f137"} .fa-chevron-circle-right:before{content:"\f138"} .fa-chevron-circle-up:before{content:"\f139"} .fa-chevron-circle-down:before{content:"\f13a"} .fa-html5:before{content:"\f13b"} .fa-css3:before{content:"\f13c"} .fa-anchor:before{content:"\f13d"} .fa-unlock-alt:before{content:"\f13e"} .fa-bullseye:before{content:"\f140"} .fa-ellipsis-h:before{content:"\f141"} .fa-ellipsis-v:before{content:"\f142"} .fa-rss-square:before{content:"\f143"} .fa-play-circle:before{content:"\f144"} .fa-ticket:before{content:"\f145"} .fa-minus-square:before{content:"\f146"} .fa-minus-square-o:before{content:"\f147"} .fa-level-up:before{content:"\f148"} .fa-level-down:before{content:"\f149"} .fa-check-square:before{content:"\f14a"} .fa-pencil-square:before{content:"\f14b"} .fa-external-link-square:before{content:"\f14c"} .fa-share-square:before{content:"\f14d"} .fa-compass:before{content:"\f14e"} .fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"} .fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"} .fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"} .fa-euro:before,.fa-eur:before{content:"\f153"} .fa-gbp:before{content:"\f154"} .fa-dollar:before,.fa-usd:before{content:"\f155"} .fa-rupee:before,.fa-inr:before{content:"\f156"} .fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"} .fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"} .fa-won:before,.fa-krw:before{content:"\f159"} .fa-bitcoin:before,.fa-btc:before{content:"\f15a"} .fa-file:before{content:"\f15b"} .fa-file-text:before{content:"\f15c"} .fa-sort-alpha-asc:before{content:"\f15d"} .fa-sort-alpha-desc:before{content:"\f15e"} .fa-sort-amount-asc:before{content:"\f160"} .fa-sort-amount-desc:before{content:"\f161"} .fa-sort-numeric-asc:before{content:"\f162"} .fa-sort-numeric-desc:before{content:"\f163"} .fa-thumbs-up:before{content:"\f164"} .fa-thumbs-down:before{content:"\f165"} .fa-youtube-square:before{content:"\f166"} .fa-youtube:before{content:"\f167"} .fa-xing:before{content:"\f168"} .fa-xing-square:before{content:"\f169"} .fa-youtube-play:before{content:"\f16a"} .fa-dropbox:before{content:"\f16b"} .fa-stack-overflow:before{content:"\f16c"} .fa-instagram:before{content:"\f16d"} .fa-flickr:before{content:"\f16e"} .fa-adn:before{content:"\f170"} .fa-bitbucket:before{content:"\f171"} .fa-bitbucket-square:before{content:"\f172"} .fa-tumblr:before{content:"\f173"} .fa-tumblr-square:before{content:"\f174"} .fa-long-arrow-down:before{content:"\f175"} .fa-long-arrow-up:before{content:"\f176"} .fa-long-arrow-left:before{content:"\f177"} .fa-long-arrow-right:before{content:"\f178"} .fa-apple:before{content:"\f179"} .fa-windows:before{content:"\f17a"} .fa-android:before{content:"\f17b"} .fa-linux:before{content:"\f17c"} .fa-dribbble:before{content:"\f17d"} .fa-skype:before{content:"\f17e"} .fa-foursquare:before{content:"\f180"} .fa-trello:before{content:"\f181"} .fa-female:before{content:"\f182"} .fa-male:before{content:"\f183"} .fa-gittip:before,.fa-gratipay:before{content:"\f184"} .fa-sun-o:before{content:"\f185"} .fa-moon-o:before{content:"\f186"} .fa-archive:before{content:"\f187"} .fa-bug:before{content:"\f188"} .fa-vk:before{content:"\f189"} .fa-weibo:before{content:"\f18a"} .fa-renren:before{content:"\f18b"} .fa-pagelines:before{content:"\f18c"} .fa-stack-exchange:before{content:"\f18d"} .fa-arrow-circle-o-right:before{content:"\f18e"} .fa-arrow-circle-o-left:before{content:"\f190"} .fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"} .fa-dot-circle-o:before{content:"\f192"} .fa-wheelchair:before{content:"\f193"} .fa-vimeo-square:before{content:"\f194"} .fa-turkish-lira:before,.fa-try:before{content:"\f195"} .fa-plus-square-o:before{content:"\f196"} .fa-space-shuttle:before{content:"\f197"} .fa-slack:before{content:"\f198"} .fa-envelope-square:before{content:"\f199"} .fa-wordpress:before{content:"\f19a"} .fa-openid:before{content:"\f19b"} .fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"} .fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"} .fa-yahoo:before{content:"\f19e"} .fa-google:before{content:"\f1a0"} .fa-reddit:before{content:"\f1a1"} .fa-reddit-square:before{content:"\f1a2"} .fa-stumbleupon-circle:before{content:"\f1a3"} .fa-stumbleupon:before{content:"\f1a4"} .fa-delicious:before{content:"\f1a5"} .fa-digg:before{content:"\f1a6"} .fa-pied-piper-pp:before{content:"\f1a7"} .fa-pied-piper-alt:before{content:"\f1a8"} .fa-drupal:before{content:"\f1a9"} .fa-joomla:before{content:"\f1aa"} .fa-language:before{content:"\f1ab"} .fa-fax:before{content:"\f1ac"} .fa-building:before{content:"\f1ad"} .fa-child:before{content:"\f1ae"} .fa-paw:before{content:"\f1b0"} .fa-spoon:before{content:"\f1b1"} .fa-cube:before{content:"\f1b2"} .fa-cubes:before{content:"\f1b3"} .fa-behance:before{content:"\f1b4"} .fa-behance-square:before{content:"\f1b5"} .fa-steam:before{content:"\f1b6"} .fa-steam-square:before{content:"\f1b7"} .fa-recycle:before{content:"\f1b8"} .fa-automobile:before,.fa-car:before{content:"\f1b9"} .fa-cab:before,.fa-taxi:before{content:"\f1ba"} .fa-tree:before{content:"\f1bb"} .fa-spotify:before{content:"\f1bc"} .fa-deviantart:before{content:"\f1bd"} .fa-soundcloud:before{content:"\f1be"} .fa-database:before{content:"\f1c0"} .fa-file-pdf-o:before{content:"\f1c1"} .fa-file-word-o:before{content:"\f1c2"} .fa-file-excel-o:before{content:"\f1c3"} .fa-file-powerpoint-o:before{content:"\f1c4"} .fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"} .fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"} .fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"} .fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"} .fa-file-code-o:before{content:"\f1c9"} .fa-vine:before{content:"\f1ca"} .fa-codepen:before{content:"\f1cb"} .fa-jsfiddle:before{content:"\f1cc"} .fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"} .fa-circle-o-notch:before{content:"\f1ce"} .fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"} .fa-ge:before,.fa-empire:before{content:"\f1d1"} .fa-git-square:before{content:"\f1d2"} .fa-git:before{content:"\f1d3"} .fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"} .fa-tencent-weibo:before{content:"\f1d5"} .fa-qq:before{content:"\f1d6"} .fa-wechat:before,.fa-weixin:before{content:"\f1d7"} .fa-send:before,.fa-paper-plane:before{content:"\f1d8"} .fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"} .fa-history:before{content:"\f1da"} .fa-circle-thin:before{content:"\f1db"} .fa-header:before{content:"\f1dc"} .fa-paragraph:before{content:"\f1dd"} .fa-sliders:before{content:"\f1de"} .fa-share-alt:before{content:"\f1e0"} .fa-share-alt-square:before{content:"\f1e1"} .fa-bomb:before{content:"\f1e2"} .fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"} .fa-tty:before{content:"\f1e4"} .fa-binoculars:before{content:"\f1e5"} .fa-plug:before{content:"\f1e6"} .fa-slideshare:before{content:"\f1e7"} .fa-twitch:before{content:"\f1e8"} .fa-yelp:before{content:"\f1e9"} .fa-newspaper-o:before{content:"\f1ea"} .fa-wifi:before{content:"\f1eb"} .fa-calculator:before{content:"\f1ec"} .fa-paypal:before{content:"\f1ed"} .fa-google-wallet:before{content:"\f1ee"} .fa-cc-visa:before{content:"\f1f0"} .fa-cc-mastercard:before{content:"\f1f1"} .fa-cc-discover:before{content:"\f1f2"} .fa-cc-amex:before{content:"\f1f3"} .fa-cc-paypal:before{content:"\f1f4"} .fa-cc-stripe:before{content:"\f1f5"} .fa-bell-slash:before{content:"\f1f6"} .fa-bell-slash-o:before{content:"\f1f7"} .fa-trash:before{content:"\f1f8"} .fa-copyright:before{content:"\f1f9"} .fa-at:before{content:"\f1fa"} .fa-eyedropper:before{content:"\f1fb"} .fa-paint-brush:before{content:"\f1fc"} .fa-birthday-cake:before{content:"\f1fd"} .fa-area-chart:before{content:"\f1fe"} .fa-pie-chart:before{content:"\f200"} .fa-line-chart:before{content:"\f201"} .fa-lastfm:before{content:"\f202"} .fa-lastfm-square:before{content:"\f203"} .fa-toggle-off:before{content:"\f204"} .fa-toggle-on:before{content:"\f205"} .fa-bicycle:before{content:"\f206"} .fa-bus:before{content:"\f207"} .fa-ioxhost:before{content:"\f208"} .fa-angellist:before{content:"\f209"} .fa-cc:before{content:"\f20a"} .fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"} .fa-meanpath:before{content:"\f20c"} .fa-buysellads:before{content:"\f20d"} .fa-connectdevelop:before{content:"\f20e"} .fa-dashcube:before{content:"\f210"} .fa-forumbee:before{content:"\f211"} .fa-leanpub:before{content:"\f212"} .fa-sellsy:before{content:"\f213"} .fa-shirtsinbulk:before{content:"\f214"} .fa-simplybuilt:before{content:"\f215"} .fa-skyatlas:before{content:"\f216"} .fa-cart-plus:before{content:"\f217"} .fa-cart-arrow-down:before{content:"\f218"} .fa-diamond:before{content:"\f219"} .fa-ship:before{content:"\f21a"} .fa-user-secret:before{content:"\f21b"} .fa-motorcycle:before{content:"\f21c"} .fa-street-view:before{content:"\f21d"} .fa-heartbeat:before{content:"\f21e"} .fa-venus:before{content:"\f221"} .fa-mars:before{content:"\f222"} .fa-mercury:before{content:"\f223"} .fa-intersex:before,.fa-transgender:before{content:"\f224"} .fa-transgender-alt:before{content:"\f225"} .fa-venus-double:before{content:"\f226"} .fa-mars-double:before{content:"\f227"} .fa-venus-mars:before{content:"\f228"} .fa-mars-stroke:before{content:"\f229"} .fa-mars-stroke-v:before{content:"\f22a"} .fa-mars-stroke-h:before{content:"\f22b"} .fa-neuter:before{content:"\f22c"} .fa-genderless:before{content:"\f22d"} .fa-facebook-official:before{content:"\f230"} .fa-pinterest-p:before{content:"\f231"} .fa-whatsapp:before{content:"\f232"} .fa-server:before{content:"\f233"} .fa-user-plus:before{content:"\f234"} .fa-user-times:before{content:"\f235"} .fa-hotel:before,.fa-bed:before{content:"\f236"} .fa-viacoin:before{content:"\f237"} .fa-train:before{content:"\f238"} .fa-subway:before{content:"\f239"} .fa-medium:before{content:"\f23a"} .fa-yc:before,.fa-y-combinator:before{content:"\f23b"} .fa-optin-monster:before{content:"\f23c"} .fa-opencart:before{content:"\f23d"} .fa-expeditedssl:before{content:"\f23e"} .fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"} .fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"} .fa-battery-2:before,.fa-battery-half:before{content:"\f242"} .fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"} .fa-battery-0:before,.fa-battery-empty:before{content:"\f244"} .fa-mouse-pointer:before{content:"\f245"} .fa-i-cursor:before{content:"\f246"} .fa-object-group:before{content:"\f247"} .fa-object-ungroup:before{content:"\f248"} .fa-sticky-note:before{content:"\f249"} .fa-sticky-note-o:before{content:"\f24a"} .fa-cc-jcb:before{content:"\f24b"} .fa-cc-diners-club:before{content:"\f24c"} .fa-clone:before{content:"\f24d"} .fa-balance-scale:before{content:"\f24e"} .fa-hourglass-o:before{content:"\f250"} .fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"} .fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"} .fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"} .fa-hourglass:before{content:"\f254"} .fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"} .fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"} .fa-hand-scissors-o:before{content:"\f257"} .fa-hand-lizard-o:before{content:"\f258"} .fa-hand-spock-o:before{content:"\f259"} .fa-hand-pointer-o:before{content:"\f25a"} .fa-hand-peace-o:before{content:"\f25b"} .fa-trademark:before{content:"\f25c"} .fa-registered:before{content:"\f25d"} .fa-creative-commons:before{content:"\f25e"} .fa-gg:before{content:"\f260"} .fa-gg-circle:before{content:"\f261"} .fa-tripadvisor:before{content:"\f262"} .fa-odnoklassniki:before{content:"\f263"} .fa-odnoklassniki-square:before{content:"\f264"} .fa-get-pocket:before{content:"\f265"} .fa-wikipedia-w:before{content:"\f266"} .fa-safari:before{content:"\f267"} .fa-chrome:before{content:"\f268"} .fa-firefox:before{content:"\f269"} .fa-opera:before{content:"\f26a"} .fa-internet-explorer:before{content:"\f26b"} .fa-tv:before,.fa-television:before{content:"\f26c"} .fa-contao:before{content:"\f26d"} .fa-500px:before{content:"\f26e"} .fa-amazon:before{content:"\f270"} .fa-calendar-plus-o:before{content:"\f271"} .fa-calendar-minus-o:before{content:"\f272"} .fa-calendar-times-o:before{content:"\f273"} .fa-calendar-check-o:before{content:"\f274"} .fa-industry:before{content:"\f275"} .fa-map-pin:before{content:"\f276"} .fa-map-signs:before{content:"\f277"} .fa-map-o:before{content:"\f278"} .fa-map:before{content:"\f279"} .fa-commenting:before{content:"\f27a"} .fa-commenting-o:before{content:"\f27b"} .fa-houzz:before{content:"\f27c"} .fa-vimeo:before{content:"\f27d"} .fa-black-tie:before{content:"\f27e"} .fa-fonticons:before{content:"\f280"} .fa-reddit-alien:before{content:"\f281"} .fa-edge:before{content:"\f282"} .fa-credit-card-alt:before{content:"\f283"} .fa-codiepie:before{content:"\f284"} .fa-modx:before{content:"\f285"} .fa-fort-awesome:before{content:"\f286"} .fa-usb:before{content:"\f287"} .fa-product-hunt:before{content:"\f288"} .fa-mixcloud:before{content:"\f289"} .fa-scribd:before{content:"\f28a"} .fa-pause-circle:before{content:"\f28b"} .fa-pause-circle-o:before{content:"\f28c"} .fa-stop-circle:before{content:"\f28d"} .fa-stop-circle-o:before{content:"\f28e"} .fa-shopping-bag:before{content:"\f290"} .fa-shopping-basket:before{content:"\f291"} .fa-hashtag:before{content:"\f292"} .fa-bluetooth:before{content:"\f293"} .fa-bluetooth-b:before{content:"\f294"} .fa-percent:before{content:"\f295"} .fa-gitlab:before{content:"\f296"} .fa-wpbeginner:before{content:"\f297"} .fa-wpforms:before{content:"\f298"} .fa-envira:before{content:"\f299"} .fa-universal-access:before{content:"\f29a"} .fa-wheelchair-alt:before{content:"\f29b"} .fa-question-circle-o:before{content:"\f29c"} .fa-blind:before{content:"\f29d"} .fa-audio-description:before{content:"\f29e"} .fa-volume-control-phone:before{content:"\f2a0"} .fa-braille:before{content:"\f2a1"} .fa-assistive-listening-systems:before{content:"\f2a2"} .fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"} .fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"} .fa-glide:before{content:"\f2a5"} .fa-glide-g:before{content:"\f2a6"} .fa-signing:before,.fa-sign-language:before{content:"\f2a7"} .fa-low-vision:before{content:"\f2a8"} .fa-viadeo:before{content:"\f2a9"} .fa-viadeo-square:before{content:"\f2aa"} .fa-snapchat:before{content:"\f2ab"} .fa-snapchat-ghost:before{content:"\f2ac"} .fa-snapchat-square:before{content:"\f2ad"} .fa-pied-piper:before{content:"\f2ae"} .fa-first-order:before{content:"\f2b0"} .fa-yoast:before{content:"\f2b1"} .fa-themeisle:before{content:"\f2b2"} .fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"} .fa-fa:before,.fa-font-awesome:before{content:"\f2b4"} .fa-handshake-o:before{content:"\f2b5"} .fa-envelope-open:before{content:"\f2b6"} .fa-envelope-open-o:before{content:"\f2b7"} .fa-linode:before{content:"\f2b8"} .fa-address-book:before{content:"\f2b9"} .fa-address-book-o:before{content:"\f2ba"} .fa-vcard:before,.fa-address-card:before{content:"\f2bb"} .fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"} .fa-user-circle:before{content:"\f2bd"} .fa-user-circle-o:before{content:"\f2be"} .fa-user-o:before{content:"\f2c0"} .fa-id-badge:before{content:"\f2c1"} .fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"} .fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"} .fa-quora:before{content:"\f2c4"} .fa-free-code-camp:before{content:"\f2c5"} .fa-telegram:before{content:"\f2c6"} .fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"} .fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"} .fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"} .fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"} .fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"} .fa-shower:before{content:"\f2cc"} .fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"} .fa-podcast:before{content:"\f2ce"} .fa-window-maximize:before{content:"\f2d0"} .fa-window-minimize:before{content:"\f2d1"} .fa-window-restore:before{content:"\f2d2"} .fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"} .fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"} .fa-bandcamp:before{content:"\f2d5"} .fa-grav:before{content:"\f2d6"} .fa-etsy:before{content:"\f2d7"} .fa-imdb:before{content:"\f2d8"} .fa-ravelry:before{content:"\f2d9"} .fa-eercast:before{content:"\f2da"} .fa-microchip:before{content:"\f2db"} .fa-snowflake-o:before{content:"\f2dc"} .fa-superpowers:before{content:"\f2dd"} .fa-wpexplorer:before{content:"\f2de"} .fa-meetup:before{content:"\f2e0"} .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0} .sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} assets/lib/font-awesome/fonts/fontawesome-webfont.woff000064400000277350147400353540017250 0ustar00wOFF~ FFTM0kGGDEFL OS/2l>`2z@cmapi :gaspglyf _yLMheadb36-hheab$ hmtxb Eylocae \maxpl ,namemD㗋posto`u=O<01hxc`d``b `b`d`d:$Y< xc`fdbʢb l |6F0#Fnx͒Jqgje>"D>{EO >,"u^[[[jos_M%:0g80B.Lszðפ 1YlKWvest)Mk^Zֵ֪m׉Θbk̳26>'YҖjukZۺgm2 (4-iEkЖv}XB Y``c9ZJV5eY߆6G ΂`3| 6[uIpn-[pL0Lp;׸%8o>F8 G8`Wί"E^_=(K,FK+ybx TՕ0o}{uuuwUWիnnjmz-nvEEAAJ!*(hD2c%FʦEbb6$&7߹UUW7 tw{98m8bI ڃ݌7 SEG!3j㔐=w;P^IA;RRnkLS.)o8G([)9O,,AtS h yujZupPGxN on{ho2AD-r]u5e^dMX8=r5ͻ^Q\~2V0 o0kC qA跍 G< 9v`|NXWI:"'aW޺O=}k#"7e %Vs~-y$ŵXw&'q.n.EK#JDڝn봽7=|wL:Ӎ2vmrRv:=0P@DۓVZ7eOd7HMSY|[of'BL}ƷҗV^+{W=uҤ֦='j,| ;vAo=0q8"I³8yZ6Ǵo9q< i3k1%& uk {H}@΁W—^qԷ4;gg7Ny/ qPOЌL4q,ԇ"Sv=jL /UjC-woȍnj̮{j\ vEk z>pn=^=ajID(෠quF;э5֮s7 ;QC7U[׈yZIۘػ*!$ dⵄŖ-ˇ?{mf6po~mԽwoG6Moza--m#]?]?Vkzܥܵ.>)9NH%&T/ _IAxOB]8(.v)G=HPSUP>fFE-GGs|'?~zI*R|[` -V'ݙGP3b'\RI̞#n;W ٟDTѹb80^s6,rȥ ism15kk,}qWȝ;tseYqqC/0q|> 3W/ըsF"sIoAHI 8C„ w~@ _(]h=r9p! ;H-[Ifw;%=d꯵bmH)k=o\hEi 7i:-!mn:`[G]GE,;syH62ƈs՗:I@^\wOVõ<g?]Y{?qKgH[X&tdn[,Z!H6#=nݳ;OWUG4]]6ٰp7[aM5PB]?4P呂7o\!׺ߜؤ 2>8/p2h@k~ھB~a[r=Pr8SescF ӗ S#P|0z'zS)8aFBFE VrJ(EfDpU\'h4P jd3}CvfM}Zlf,.pj1tYj2lƗ,U<:zt[%Y!1vMfrc:_n"7zwvm zuidtO.3Ku =.#Cjn(,THu_Z 6qhhP4#JH%jt3M)#zzdt1Dn~9/ȋB@NV?p'r f: ;bBQHb$h3CG|#v2ydm)esvw~٬fp~DG r 0^XzˣՇcl& \`\8HHa IC?6:5H;lވ4C&\FjԬ,|MCݔ/f8ܮ2 .ҍl _/AkTVΝg ~T΂<`2Q&;XAW@@gj{j, suuE ֟:A 8,&ռ }|b0lFQ$px=4ddm7nru"N:O u^x@񝂍CG*%F>Tm?2.opˮ1r\T١K+L؜cn:8qyN\Dvj[ܦDy/*=H [0l8=`Dd&76tOd٧,崅v2+׷ TU[NHN8W|fG{ܘlT_Z1 8j `Ar㼌` h *b #ռBj0s$n^7w $Gɡ;N .A>3;My?zpͥΙ4aqp҃GFw|]֯!ؾbvq8e+)h.,U~4]h.P4s)+kqD2uϸuE3 V⭯ҟfS8/D]5ޖ*xWGj}l&klnçiPv'6#(%)>qEo6U+6ŋ8ۢlޏ> `Mn''zB-t/ꬱ3ik3 55Z 1ao|+ őm 0$YəOa1ag9up9Gת+b=H߀Q1hT]ҒQ^?s9ػ lB|4TNYBL, g#5A㉐=!7~=/X]WuwZW避[ꞞWd==Bm®ҏ΋v?$ E# L!7ط!TRRI4)H#l*:#H.)pӇ źRMB=ƅ(ǂ͵˥>A,_2%5pyn6/Mbt,L֮l+9QGb]*D; {PZ!*U1|s{"3\gGχyG:-nQg7`ԏ3xAx%ÏUXMZ&HX9>osGa '!lü|EW-ebbxsY06E>)VH ߰}V=G~Ykh/;ۇ0{4.c\h`5 FA5Tg[4#So3yuy=<'j{ hNk6 @1c/5 -T:`YX]g~ilp!e>1x06?eoAsb̪fyb3@B߂Yq?;m)h4skP UfW62c>8F(t*GC ym srp? ICY:ϻ&͜99TY-k%)@|FFh9*(RtKǻTXM-IP.%C"?,+ˆ= >tUgQWw#Υ7 ݋[P ޮ'j7 7̗9ZI SO4YkDE͂B~`Ig;mu֢zSg)rE܉=mK9ZD]4~7߉R6Hۂ(ji!BldpӜ^zz拾gF:qꢝkWl/СuX2rTsBנͫڂt}}ƶ_5 k4 A;oHLϹ)z.quAzyxjk5F-@lҙcڗҗ\6= O]9/5ڔ볝\tOCT3f(i ]w PiQwγ=JߌvGޮy[[,Et&QocÂyb66kMK|֋$Yz%P(^87DrK`%5.: Ďx=mnًm]Ю&2G(-@Q7xu3%@p~нt S]=)AG AVg; *=$mz -|_EZˢk<5U5fFIj`=H})0~F,"N6k"}ṒkT"$mZPc',ϛtzՅ];+j +NG>K#h-zp6\;yb~9.m \=qrqü=fS 6u(؍3#0  :Nz{SM]"`R .Cr`-U{낍znq tx ic+Ԛ:3Y㳙N*aVP `1Qb@fc^X9̼ܶjtҜY ӂhھ3 ijs+\8Tvi|Q< v߹c81-t\16GInJ:̇hX Gr+4Hjv4l!,cC54{ٱ4dR~p*;9nC%d}dA 4Q8iOi TgdulUSAq$.j6U;MǶۏێۏj9JDvAFbmLOI=`jf:>IǁJ! 6Txưqn̓S9ĀM|!ґ8X)hͅͳ(,ӌ2+lD3Qɕp$`Pt[ DV2opo%xZ)n:p4N)F ՆtT7Mu`8P*r >(O^tXi(M4! t(>hcU<@ܦç$M'(J׳Q܃<8Vjj7P?Ͼ;_!Q.h|:B)Ӓxܘs_d9aN=.WO.\|_O&tk.".Dp53͓ 6`8IuKjk/wiUSusUlr ̥;ѠMe`TB&n¦\ g2pd[0Ovz I'm%41}@€:įZ/r @1m8_.WRlv(F5Aս~]*@Qؿ VgM܊:MʞQZ㖵. HfJwKIA\f7zl}5VzG Ɛ u̻vߋaɰZ(S6W z7ek[j #6[6iSڣn@d`[}i]<{bN&kG[Q`Ek$|'GOR4: yX1dhz3TʷL-3DG%Z b锥3I陌R^cy,3P!@ieNq좀FS'}@4шÏ~*T(PY+=!?}>Ю+w*3Usƽ i[9a\uWeY5 +,iK\ʚe<zKC&Hdbktݩ7!;BTR@J vKU8bUH^Q;Okb%[QHO 9谉0r0}U>ʔV5^ܵ}ecFmۈrqLEl "I5ڦfU2cW+O, MJ񝁧6y?*0&Nݚxq?)>e( @qTVx>sjAi2W@WU{LГK^ A'96&E[ h8J*X>wyW+Vc*YP!3 ^ %"`ɒRcD@2ܵG5gL6}*Xl틵\"*p9B4MzA65L.2k,0^>G@@Hty Z4iepWtAh,8<{9ȽǷƶwZOYE< Z)t#/崐\F7ʔB>(&6ldit/=n>?&s]@Ν0Z.3Ĥ9MG6XIJHXa:C}3 6~>D3UO>[vZ_}סqN!ʃ -W S Ha)Y'lg8=`z(bwvi:2E!`;x,Y ߩ =Іj^ǻQ^_Yy`Q[&aYQ us0{&m胑*j)TC$ YQ>*P}H˥_7!n?Vا(sOGRBXbG/*󨴉bE("lrʔ$ΫdJwGp6 P/#j mtCR0}Bj̣RXvI>(j=:ECtV:O[h[5"uE3W. f[eܫ8P)e 0Rԁd.ُ:~}t<)/Q cOBGGp<"-G-b΢y3b#5RPCk{d˚ ح6d]LdLu鋶 LCzӮIYs;A@*nyڢKˏɩEWeMâx[*u -zҗrizH> 2$ =_j7{!h7Ύ|pfs%9LAQ,2WH(EEug&/ $̃cm$0^(K_ C]Di+/TRhOJ?Nޛ j; 쁳#ISm0Q4WՏ5_fd "0ԏ ~D}R'k GK1(_/TFȤ8>Q8m.mstÁ-`wZaxx";ͯ2o2:h*4X-hW3snP,ɞ "ޗ`7Nw8ɐD\ (,f鄝 IM|؟նkÿl5nv xL/LM}ݻ/Еum.umd>Nh&kԵ-h# +qs}v.L8c|P=/2,T,\fxP!:*}uLvyj{C [ ^܋lV͛CZk9~_+2_ʗ7%\~NVw|:$^fH-œl6[DniD>=}4b=U{xCu:6ݨ18=Z%ܓ&?i*V߻"z,K=,5keb PÒ}aM)dŐ".Aǝ2AnK% %7; QΤx9: J's9:(w̿sltWN~+lAڏm[w77n\W<9-N߹ti?";iw[;LvP2zrgkcl;#E*b8*<~h!:Q@qӼek/#@wꪫ' r*2_2mppm"Oގ:wFgRۜ{zh?U_3m3ؾ)[_./d jG̨.+{7g|6w6؟>d5;{O"-<+jaW22pWagy6&BhI2%1S*[ϤF۷%nwT QĶ!=00!dP$Oj!%l6bd[6,6`^Hfɖ3V ߶[8|\MQ lƜYxj?KO3ٲ%))JrGƼQ̼)2c"^–;@Y5u!'hVGTi M9#(ן<4s{@efQ`Gy 8L"KB3+fOx_c`= C@d-TOj+Jw]f1򉠦J -L[,Əvu&}z)AԫyzX߶"MWwP-蒺Mrk 44LZvɎiZcKU/Nja,a !"Y<]K-{S &,- l5V(DSJZU+6UԤ)jȀMXju5xkOxkCf>v;oĂu)O[H%rJrZNCQn?|x_B*kgYn3:B4WͤuQ.RMF2>8G3J<ZŠrVŗY~P9w;< +iչ+5DDhp,;ʹjfƼ=䵫9 3Ƒ,@('h:Ƌ&mTkPq8󨴱!ä.#Q{== 4V#mx _)IfC#yFN uQRPQyQ u:]g*OU֧c'PfՅԭںo>x,uP^"yXdci+Y_'z6~(+q$U;{S<^xGn}ouvXt%&3`.:gA'%O0j@Ew:мjdqge4c&ūY3]*tI* r6% &AR^3$p,a2GÇ}O>W476Ոn7[YNqOecu/=cm:&4Co<}iAO6ăNYm:̲f3J"MK:Ek:e-O7 6;kh}x?1/\g^y}7|4q'7o^ o.Uξ&d5v 3_P MpĹVjlU  a^vqǹ܈\?虽쪰:Oob2AL29zXvQ VUq^k%@$Ǡ#o}TscFW}$yF$y^2:l4/maԽ&oL3ѤNIq!#ĺ~N>0=ٞbDAw Oh CTѡ ֩FI.M#Œ3ze{EvceR] ecsERn`{ahZ]'3W0vIxV[mQ8f64Sc%WrF.aR6aLv0n=,L ZBU\]aJXL7e銛 ljQƀcHj\}MGޛ [X@"WdNS<+#(;<"w~omyL'DpEbY?~{{,o,RD(JbC>ܶ_dՇwffsܦk3ގ&~L =$&Cyd"le؄ tQRʉ@*΋7JՄpC#5-Vgo !Gi 4&NpOo޴խ9k'y=JS4/;٬vY3MiB< (Yuv<9_m@|zU _<';^;#b})Kywno%6,i7-+v(k6ic"Ym=t#WRTmR[nafʭklW޼(IdrUU5=^Dfj}-:$rp( %\x+>wW؄ Ou gq/,W:˺/Ɏ+ y+&Lo) @[@exbiu;:Ykw[50x:rsS&_Xxf[bT:7ak}Yx<5r'(>q-proɴ2HU&I-Kmhɠ\YFY`|fM0]63Bw5%#'iH(8[*k.Etc&aNmVJQKTMbX4?#4c왓Q,<v5?J [Js'ڛiӒӇC>䶵hMz__m27b2HC' j ,JN؋ LuqMZW7'./^L^DL%S n4:OW^of߷Rпlq{\PȖ叙y4*xBav kx@͗qY’.3HQF|:rƔ9`P_SRL 6b|jAn~<DN"u0Q\ Wuާfn6oH玤N N'S;)̓vGvejOXJUPsps<׷4}am}SjTYCheubm20~t'r3:_H7M笜YrN:1!-z\MaP}l&pq6*_UYIG~O_KU8FT{t( av"CBf_F;QnqӳB$MU*rg,^GD,IH:7FD Jlk6c']u;& FbFiB"&͙MykUP\M]J~qZ JP$5K?1/,# K:I)DoY:Mg!'S$M }ÊN~$Ū3wm6]r׊sO^ ll 6H{RvBoLg(iZhVd˂]w!r<3H/7CyYN9Y@LceY֖Y $rz2dk`8v1gI1"0k~,c$ tyh2 ^/sv骩m{ TUM~{WÏɿmkUٹ?΅s4a:ZDg;@Vם4`gلw]x/goLvw'vڟڔyK<+Ǟ~NF=ΐ7.'hٖ}t)vSK4Yԉs]kWN-ЯK`~kR-^"9BF%`%5S'$^\o;NKM#_5yr֖ jKgMdn7Y n NlݮmGYN̂09E&WKbK|ĸJﱵWr{ݷkQcZ\2R؛Oۡ_h]Ըy&܈V;~M/׭n߮>_[./m2A qJ{ >L M8Af]'vHTUOμŃ̚u\eAb~u:ynwݥIٸ$j[QV*b 聇nEC*ZɭEo?҃&k=t#=KTrfWQjJN^yٔQW/Oo^rrj;NM4I`0wϚ _ߜ !Iouz#3tzi kjmfL'k ^9uDћVnǼ^߲rn_CSC "6Gi1#W0=p']@8z}Q/ F"̒ &=lFwdF3v1FuDFYV'F`.bNu䡁 Vl|I׀ɷ*~)Z*!+uQvCM/vԂ.qcYs, wDiN6 YrLU߲[crcq5)V!c031;B0ތeG͝UaVNUe (;;|d;_TA"?/}Mi ;]wt7WY㰛nNgh7EB7_RE=SxV5P sm`ržYazRat k_F= dVٿgCj߇%T}[n.Z$Uq:ۛ*<ggnGh (U?.b=Ђ z3ek 4 v^QVJRT+N1Ey D;YC+dNA݇n$9MAyhpJ=^蹭%[ҫ{\r8L^Rڠg8ޥ~ad8U=gP'1.#l =ΑѬzR6np~[EfnG+y|:fE˻~E׶Mʟ]f}jE3qMOϚ{d?]uU?#/;s~򹃫ؚǀK-6B'闘̵Lgcg&=G' }S唩VCIsyRCM)rd7&UC͝w4Nsca7fl]tTwݵFè4ou֍2B>#o7(J~jE(EM-P3/rQQ@Wヌ(QUm)!sG7ꜜZ4 …U lڟpd:Cce's2E;u*'$]" c4} vzyDzɨn4bTF.b4R#P*~6tjtŋdۥy1 W!ןD}glْW_A4R/u|]P Ǯ~:t[94{-.ǀyA0 x6-NMvM$c50ghQ61BnW_us;BEg}\"\aQ=#ͧվv1ŊSY(R.i[9 JdQӜ< 0@BNya)j0Vh2쬄sOeP5>I~1!-A8agjNq^76e/쾇ݳRuԢZ&UEJlpYo<2"_:979f阎.! hI4 RkCjGBu +btQPu/ А1TZ5V:+zp8jy\ST!zru8Y۸$ՅFuFY Tj +[kj`GŦ+yl֦Y닍4R,+h")=U>yV˕!V]Z8G_ jW pH ֬Q6P8=wQ9]W809{z$5p+҃D%ꔒ-R`5CbJihEI@xQ@-Jhnא!7#םY ѣX2MnƔi&#ix2nB~#}2n)Ͱ.woB( Yk"5nG PTF;NQ@(奣$%l7Q?lRPfB!wҤJƝaîGٍJ vKgWOӬL_$ta[!i&M>JLBfR% ۣ6!o "$,J{l2"Qo#BQ'!"# H:. o <9*a$ <1ʔ/- ᪠(J&$ f^o ћ}6,+7 g2.;H\Ұf,-JǒEw\Bwjǎ>fM..klDj.Xv}mW\:5֔jKضV3BS$l&ijDYdIO~q!rW)\3 H.iT2R ˔D'i>-(*Qoc$`g#Aꆘ0ߨn7.>x;w,yc?Ơ36I61q ($,Njwܴtr(yh2l{s\p@ 5H?]JHʽgIhhh{ ef zUs|+DWxst -}"<;p> #?X;$}upȖow/&ν'dޒM-3g֛떤$yIEuR ;5ItБfb{g-:6ާ>k0ڹQs.A,1xBU\tBBA= )~3.{ҍPa~OBP:sQS=:Ufs1KɗM @PsygQ')_@\l`|N16fpp3,Y,wZ1~טOnoy'ǗlfCW?Ot=Kz (UQCdPn.<=y]Sd2KZu{d^&P^ qhEAakFQ7><~̈^=QbyAsX Gr9Aժ` ΕMʆ돱, ,)4KݑYZ?0Jd\;|h~ki?ev宰Kv2)i9Jcj~Uivo V޴ʍX~eCkˆƆKڰZn߹ZXkon퀭:h7ΤG+Ș}I]Sfn"u!`*ئ(E3 M N4jnRXMGs/MtbRS{i+-v aJu3Z/WS9ZK]>Ɵյ68N^~i>v$$&x;ό/nTu _pdR7#ƌ]Kqk^:J1)Ǥ5$2 ;ʗ$X[Z(ޜhJ7*%2E叙#zg{hLK,M#ǤOkdւ nnVZĦپ[ȷkV%ʂ:@S>Զ}S~.vm[kl&żVLsHuvM[2/z9ն.S<#y\6 nGfmȬ@xʃEӻeiwXDv [#:bL_hkm[-NٌEZ~emM%Y뛮%Zbth%:9}6xn.^%,uXF>.1^xoUQO7}\1B,53V̒ׄ'Ōzw67Oi6o_rUqp,1qOi#*n;6F(Ny'+ܣcTq333~xh4[ A=,Oc⋢rx{+=.zfGA=SMϒk߉kѥ1|ug\==j=$rR3, xٰU`B!"LQ Jc@({˯F/43ibM6A >A 0Z( zcdI Q&Z+8LTW& aQ<a"*FS)1^T}uМ5`-q'6nh־ ڻO׬%3<h%rܿe :b VY zlN]6p/oyiOc5xrM{>_ؾv5>9Xruʓ3r0rdet|¶Ld_*5hct,g}Wi\<csp=iv6l۽N8E߹ٿ}aq̈́s+Wߚ DٶD^؉>[DPjq\j3th d[)7rhUW]jiK97 X|/>g],pK4YW_ځ/&-.S0+0:AH4bc7o|~۶FyWub^yV{1 o8S8#(緥~w޹jҢ6ĉ"h0PT u) $`]+E:Eq؎W7jD-7(3uŲ{Ql`Y$OCoɊ= ;h>E3g^tPeNB*ʘ!x % ֙Y}IK %epH ZR ́H+!)ʵ * 1B1ˬB`> &)ç & ),~)|H}ؚ"odA[aO:)禓GwLr(yļCgQ#[UN84~c!yzݰҔZ3;zss.FMؾ1 FSI`A 4QByE軼a"OiPSbnByḰXKG`SVЍC/|WM߫ʪkjv! :|uQ(UϜe׷]N#h<;vU{}fjH%X&? Vu~V~j6A'MYvM!GP۹re紳 Dk/s)kq8vI8#x G,c?;_?!syٯ3ηw>w`||tuP~IhhnE/&jy+ٸuTS6ooOoh-Np8ޗU2$u]v$0$ c ߂ST6hBڭw.ci[ҙ-: g*Khq{FA lW?}'MR~<3.([v 'Tgx4JA]ԧ?21:yAc4Qd8`b4Dlu*l.]&' NY ?_EJOG#yn ^TA/UB {dȎU}xX1r_i}~8b*=^]W*s->KdfgQU(s,ZeM\]2)1 $l!?OnG'o~P]h꙾V'E6Fo/q+Zj z*S`OƁ| MUa{o03g}(骪5J8+5OOWU$# +Z J,2Yin>ŖXp 'E!4l񺻜i S(߁TR_ʠ̈́$^ŊMOwޯ,cӊф惞\I`T)&IX3W Sv$Fݸ{e1fHțaw(Q \9u\Ox7NЍ%hۑ\WTT۪˻UmʂjrS-kU-nE*+g]4u,}뮻mfmsMX9UuuUNGQ>+UUG7O(YA!9ې#I%y\gf6)+{?DC<Ukmb~c|T`ᾮ& >E7"B1;/ ʤA$vBfYtجG_))P@ p7:z3hfa2 :v(^&m胍ɛ7Mi(&+;vv&1S {\ر%W[7mnYm}5qoqQˊc^nBq]dZCG6\i9I/`b}ޥ75!parHٰ) |\n@s؇Ӂfs޿jZV+m#~xd Iq|Y;$`kG^i[يFTX *QlN+xDՑ -ML[J ϧ},i.F,2"BGщ0~IeOÖ[咛o}Ta>ľ/oz>E}ʋ `vz%5QlҥH++l6gSÔ|Bh8ڱt}C_Ꮐ֣*=d[™M{WJfw.a44D o*VVA8sP-Ҟ}A" @"Ȥt0+||E4N Łݓ1 9)*YѶQoP@ J2::b?2Hϴ3Y_nx[b¼Y1-Mҧi.#?\!Бck3Fʷ׌8'חed($lٷYS hC:Sli,ɯ䝂Fi$柌tn_=PpT ;(3V{ID{iEZLI sҢc"3[*8#^NG#c`4cCf4q&E:r@B$=DMRI'04 'yP^?RxS^3Ԡj"!psmhg8G41$G>LxNy8.'RԇG@"LC8S1I.uߣBG?> sj6خ0FƆ{17qDXSJRʳR%FL!sM(~l^0av$.XV]Υt:Jt1"GЏeC7aR.#*fE|[rX\pM[\c3`Z*؇qfPW3f!u61SJrmoXQN[1c_.ʁ 6a<K#QGRs7gc7P߀sޝtos02zr {V{n͕{6>]yTЊX(|'׵h%" ׫{i`./Md!]Ђ[x C9w<XcpKCabP#lmПur8/^W`Mfs (=TA{r \X݃f?8:4gdYc O*EuDmO[, fs 6W X6 b%֢Bۇߕ"l?YkZ&|l !\I8 |`&11P/ IK)){@'ZYhv&g @6` wE&yIIJ9DI=Ab̚|/HuD@& 찇NQz^~y @^,, Q `qq__X(.l{^//T8 c#*bi&OaS l"y$&̲Ds7Pu =j\.Qܑ?҆|rz4ʻ}ǃ ufůsfBQBEv^M94$?8<"<.L3jL(L5FVw߽wpf.p©Mnc^8(Uν>n.Key@{SF׆{`| 737KݒpȕHdQ"p(@dY T cTYK KJ+VOwdC$ZѧtHοn w? &iG, 蛙|шD>yA-@K#Lҗ|sĩi@3@gM/<X6t\_ey̺q*+j/2+&Z=9s{] FlƎp7@Ŭ7G/Ð"^9M4%?}e %Ci*fFii&8{L?pG[mXګ`dl'k&cb5ncd`A0g -X RY< zŽU-̞w' v8 jBXV>גk5`Y TTj,OƧ. fء6;*;ZdNywM" 0ԈKՒ4D=#eLpEH6_-8(uwʫ%S$#0zޓd%NQoc[:@~ƹOqS>P 䬕}Ǐ{"f+wm3;a8Zx 9a>n  f|}XϓѸ?Gc"[yggYQ@z䛒K="aU5v:t op I+' /NAO٠#HzK/ ]^z 1Q80)]h" +_TaU8icm<ǥe}d@ųAc`h9NQS&ݫMXKX~ JЃ͠X)=PԯuM7:u&eVb{u+9denWjdSX 6>A8ozt+$5Fv_iN&,>V2 7>#_f 0ZҬ`>&$+H кeH!oڇևhN+?]¿0Ck~\,?0evgφ cuH`s$%C_V@DbQRUͫYA$|E{Z|uaޡU_CSnn "k ǥESʇ8A 2}桫j >M_dd2/?(Jt5XOwNn r>-|<+> z?=y W~><W䯀\0gj[yc~޷CՀCC<9OE2VnK+gj2*j~y\'oޱL+0+1{iuW7*voܨUjFc=|LƦ~߮e˴P9i̫ˉ~d 9yr }uf**?8?'a"U[/͑zyU@ʙpy=K.۳H+9ې3۽RNgQ l]}g+Dd3E d٠C|="猖D$1K/%cio&5OpFrrre+9Sn*YLID##@ fq 패a#'b}=I\̮' Zh|,=:=(T")F`EEVj,Q|FQ_/a| 2rKbIxX^bI&$Jt2(i]NEWؗ,ޥxVcmpF&+a) z؇d=>>1F_9=!~S`;{L|cpn|U^;-.߄m";aX(Ȑ1|YYz_-^U{3u!C+Hn9d>)Ȯ˵UIͧ@E$*}*~ V9_XAW6Я5DT@BlEM+Քd0X v mRfFu%Tc^*-q)tS9岠G)AojYJ}A8I}JJer(Z`Y~IrXimf)~U(0$(@z)p_\zvOw^9;]WU 5c(? z?ܶg'hNrG]ua!z"!`4yp A72E{\ G9 T2 ftBIQ WsxnRP> #G\(:4QSR 7~F9r@ :bQ&eP3RNZD%&J ~2{@1HrX/SV18cYϷw5m4y /T4"9 |O"u(M(֍nb.e1"r% ӆڠgt }*ݶ7DHBlg]rt9m72Z.T 6kuuN^=ŒBaF_lcY@2n6J Ea (z6id0[\IoھfЅ<jW}qG9aM\WWr!(^k=sF-멜 jH NQkpè],/?nMb=Zdy׻pQ/{B5T)~ +0cы[pkM[J%~uD.7Jwuw:l{ٻp=[amEeĉuB=\,UX簙ŀb\CӴq 倢#ҤZa͍ta[;OgxlLl {]WlwGO܏z a5xsbV3wgug=N~%8wo%q1c>(G3J&iJtX2E4} {ѯDVV"oN`4~[b1BM%CvL|"0-m}Fq$Y";(:jш-P=4]W im+wԀvZ9Zی|d涋]v8Uzxc]NnSz묝-'<ShC5j<Ҕ {=.t(F~>WZYfu3 i7QKT h2 SF}R&U*0, 61*ap2Հ::A/J\``AI _/qZΤoޒWz]aГ2KV@o/,hZ[8FCwЗ<O~pz7Q3;{aN jiZC1jvWqӰ^@ub w+#!δƮ2_Y~t$ّI)s";gZA IeߔZ=FaV;vkuvfe[ϳ}{XOV `^B5 5յvvNNyJ>)M`h3ͮsw׈sR7mKWlXu8wNYok׬?޲<;Y(6.x&U8ǹՓ9G̯/!?C#Fl ndB]]yu? y;x m/1HB D_A//Q!;tB!Ll 1q]ee%]/+ 8{k:|KVUY3i$ambAl]Vjoinݮr.xIA->9XhJf3UVa1s8ٗ7RmDC1/Th&Dc5[O`LoFE &_ugKy%:jz%!W`׌Ot\hԆMKMgZ" H{<ܲh䂥3BNOsimM6W˂͢oab x+@] &m 6bZؑʩ;G_^W"Z-FE/.[XGe#^eY3,1h@$NE `u:i4jAy : ~% |8@0mLtJ<,a ZZQ x7YfK'_6=iV;h vo8?i;ZWdu.;9 _H@X~w+*&V݄0ƳG3y&|fsGjlO8vN_Z?dy1BK:87+UZf{R[$Ґ&w(T5!=.MdnEk2M =2Mt,uEFq7-_ h᢯!ZESQ=w"6xoגyyQ;aZ@dԋc?ڭ% <%]C^%=Dhtw 2}Og+a9g5ԸA~ij]iXcǴXmŕc- kU¢HQ .aQiӍ.nz ~LC}SPaa#Tf-V5K-=?QUqxl#_X ,U{/~|ijQ?iځuo'?<]~dlp@`KysMI8pj 22 A8_;ͪKpAu|Q__nNg)!(NiU~[^T VmCg-V祯̌$eEz h΁v@bap([Ӣ~^՘)8oy#km>-<n~"5 > `,g0}`O1k(O1FN/2+lESs_*3 - D[H |$>h^zN R % xN!+ސ_SRCAp4Xetf+XO\7뮋/FähZ, :oEJRb[ hX`l @6)?llGz0=,El#;BcY[7?6s>9=1, ?䟃"zs`<h\Ȥ?,/gyLIhkh6ҋ;^ ׮}|GioH'anCҧvѻKNuu9/ mBrhSڱtb9y97e4O1 ĺb.yp vY&k[j_8ӟ籺\$%i2NC;q*O<$~J>oIzwm"8#e"L :R4pE\t#)_/9^\-}\_r9*GBpH~}>jƊOf/aAl}ع03wWrKDoSB﹄E;N#iQ"H܅ :33#^bZ=.* t7 /lN3/]#ԊYod/2'a-ra|ƙpg+}C2ٌ,KKK<]`mfkẔ&ˆ-NZhn;]-_TDךNjڢnNO]eOȽP4]}iCS]I_%VuY[ 4doD:9a*XP} 3FU. !nS`9^ik3XWG sJAyx4͢}}4WNIk{+B6c[z=kKLw|c\k)[#^ '?'xP:̚wkyݺ^tZ&gX^Z<4\kr|UrH`4͇ >pklw*iBU ~u㪗K:_m-\bl@jGC1`Y*IbQԟ X=G,=i[:[Y3 fȏgY\.۸EC铞|; FS[Z|QЁ> Y`-tSkESI]Sq ` k:/mդ7);psk~&*.(O^ްoPTQ1j}l~e6w댂NèZU@NfIbb0SB4TVq5H `9;Xed$i8p3!3@7f%St3w(7f*ojB(%&4H x*LTB<qJ7;xĒB1u9hԏ0P7@š!Ov)c?pY"h#^ކV!ю@JI+h Xjȏ3n AVpZC/LU:4qaEaa. `M18@ a)p#`DIqhފո>IP!`6N$Or[FY-aMz-JRƤsjh642@ =?4 yioO.6&@ƪ8 g/"*,vh_.@ku-X+v& N8,s{YkUCӂv#tᬘVf(:fi 46/9-ehtGS&T#h*zDlB J@]BZGzղ2Q\g9Fc6i, 2FV;䝎+ ( S@VL)ݛ%NV :aE(B?M'8iѪp|GA5A{z```]wxBaU&$nunw/E!ltg6tF^`r ΀vMs²=j_/ʷNS\ֶBrgUX49m_C{3 SjҚ=&@ h(6UCZEJ`pj&=`ZJBsŌ aL fɤee2[4_6{A\qڊ % k ^qTUJjZlpUHݖymĠWOY\jY`B xqz0 `4 ?1FQKnEF6Ȏz2zKg,zBy|Dk`t鳲T9 vCh hnBӺi~l/tkck6x֮r(rXc7L)D ElP{W(@*M1G3Q_\UܶeIsP( p[Ym\zipG>6o|vݫȃxHwxIJQ$*c|ZBSʳr_ tB[Q́F&FDǦ ݵ>FF^n4ĻHdZg03LE-6tmYQy[n[uZ]k]O-\JXwP4Qg8vi"3bN ~S QK.B.S(Wb d'~LYR4@lm$/kmȕX_51 isQ u Pf`>yIt/&NK4GK at=K2A≫ l6QK'? ݛR:!+ t³BGw$Iz508;6 ob-b!B6 uٳϢ) )egKY@\͍4VB}f$9zx+C#…{ i<AǜJ=żTgյ4kB(gjt7Lp:d<ÈSo^,齺S v5ku&sQ9QcsFlǜ- EЈ`s5DrYuo{wigamj `Ihf܄vSWzM?6YNB&Cm @SY:hk]һ 0b_c␾_]|Ik:dMZ#kv:##^55ZO]ƬNgcD#5XJxb[ZBPCcHTT 9FXe*:~gbmQ(-D6n]]}o #˧QA?W&Md8qWаcۼIS@.js1 /1 Ņ9l\>$6eb/_SfŲ'{n,8>;lO00-q`@6m5 zԡwգ2ӝX㬞VKuycRT9|b $OmkǤ%̣bgDܣ/</_ʷ_}~PDx5(߿|omC٫gߤ俾 F~VYCN$mk/4U9'(h, 6qpiĢU,i8hxk#9dwz-]|VٲY>rI@ڒ\0׷˷D]}JNJ9 W.h,cи H%,g5Px j̭fvU\hH[m\h5՘;;9i6_Q}֢c&;ڢ19-}>WAb .c)In%UD>,/h021:AJ1{+[{q`)~jocGj1iL b*idS!2}5ca2Zldiˊ9KqsTɴ; ;afTU>%+kbGYjQ,VCj)[eP G<\x՞[]jt=~'} 6*#A8ϭT 2 XbKpDZ(׷e!?x2K-_ȥ 5‚Ap ~Uj,{??Z/go~ڒ[ "m'N:La: hx>,jQ 8;Ѡ;_+BU۴}KPkj6uO{{iI= ?s~^X@,h**#Q԰Q3aXHp)Brk$,1J=$_ߥ9$t0us0(LL>(U3')˲X|bk{.$#{b*M 3R*V.+r?Q~{3FO]j\x _b}*JpPh=->"WT>#БZ: a^a"/9$3yɘHy❕;/)aPp-YVtEzk;KKCm?9 iN_u"iS"bPɦ˿ w:W(x 7(cغDdb Q"!24: nH%Ux;R<4~:wCr\32;^q]9;ʉ4q6{;-g*{tGwGUe{{7f'3Nzhw ahb(Qv,(YZPς sLt??0}s9eqr>rtA/;wS@ʇ*]Nr J=RҵԞguH(-]RR$l^ }{n"<̩'T] Gh=:6'cğ0J1HC1TOk0q)}F?H}wÊہ 4i؟qOm'ێj%#=k3:)%ї¾袺sql&{dܑxMJfW8O  %ET O'%_IhN$tϚ"58>sdO2~$3џ~烌VJLLLdRJjˡ\䰼N1=f21]8GЋARyã[f jSGZ3GZ ] &D g`6Ko$XL ZU}xRy$fsw,J6ؐR( K |FKdUX:4ri8Je~YhO!y΢R>zVtUGVw<0v&7TG8VlƢ!;^8OW/&H#LD90((ѓ? a)Am!L<| ئ%\ÌL4⏕`n?`VWkhb+iŚb%8ti5@/th$pK套sGXh%bɻb/u5K:`Ěcbֈ^:Mžrݹ׶gY5e\pA:K#xs"Nt;f dBC 3vDk/U1ղ9GsX-BC<27ǽ M.EguL͋\yY6{ZbuyE5%.wAP3}Snc ez52QYͫx`բ*'/ΗCi~E'`ciE*&9ҞKA# \:+/c)q!r^={pn7\ݱdq;zkڗ,\Ր9N.N[EZ4w^/<4z29愘+GU=0R= 9#}^)trgrt:".^Q~;3ʪrmNEE@~}Pf\tzMբI`/81iSNMPVv<_aO6)hNv9dyXOJA1`SNF 0d 7`z$ 8g0: aї Z\f0< \oqg~1?8`|l"[nb1 MysB'F~ZbvGN u_f͉kE/˚>6D٘HN T1P>GO6g\=WNeqot#uz:JO')%A]4QWCMR& $%j¢ 7Hl%GmPPF @9sBM\+,u`4cNZ#,U̥.aLQ<4I&ũ1@aWN]P9h^^=T0}\$y'ѾY!aED*nĈ\nE*eS4OpD1Kr2B}qj1Ʀ/T 78KYY&駵lWSJ9=4OG:ٝf+\*Z8Nʢ g^@$|%-ϦWHM VLR:/QJh{8s*dXJ5`j[pk&UYbd`l&LSTr@ tڞ){iEڲZw:0Th &!̀\V`);^L1C|]ߢr.-8eu J|W>RNr 8xA#b+<SfLM6e- !d#_ԚQ&qqPBkA(#ZqƗ!Jpl"1ײkIZVp@?-=6Ss,e:3eZ5R9+7N9InۇםXgCSٮ嫳lmu ,3m9zOPEǰB^rF&B^mc r4sͅj\g1H9T1rFBCZ0JPhwan]bյP5ނGnWgkuʥC?■ͮ |@-^%;x>@5eyAU954mƄWbp\!,GhD" 3! 鄛HT\6H8`9LE5tV\){`{ ꔻ@`N{9瞞ݷv5ٛ:WnYu?={%14*v e\{z?gme&b+hP9B{ OQ,mճU[`l\5zHṽu=`zrX ~UӚ gv^5y#Q(2'}CWKs륊O67Րo6kCD&PS㯳XNoQ5\8<On}թNh f ft+x2mS48vו2 )ѻ$:(Z1FbpB2kYcÐQ+Ꮏn#4wݩ/+kOT=#ʶN= ;33Q @&.֯ɗ/oD{ L=aMM=I;eχ,'d(E5^BK1gՀbAtp7oC/Ҳj8QQޢ>”YnPj.$Qlw[Dž@>|rFR=v?$ksH Lk꿿 N \|D gC ]ݭ~wS$cwT<б|"QDRMcjId*Y N5~wQHպAk3`$0 t1B(_%ZUh*\TzR׋PyRя9h`AsdӬb ဟRX| NjhZ; 'h0{*AZ+ehȦ`<r^PHm˄V}TWkO' #gmkOW.QZQ {p=4A6 Ҙ‹B3?#9Db%>OCxu'@<>W8-{j>9أW9.Yz&omC}s1e5\Z|犩] C-`.* 45K}_.]|[NIwzd 6?rp%K끼5kqAgZ 3g!BE RǕ>Cl)I]{km;sZ=-Cs[֯{l|~󪧭[OVƀ#@Ik<I{wKk[V?ZE?oxtϥA E?PR> Tk lR"7(/CmUe@$8} , a[ҳxq^Q:ZRPjVu t%n2f9ر]7~,Un6c6:gѫ +-.?M&fv߱s#zVwq:꙱m۫۷c$_g)O&&\@bd34n'BX̡1R;q"LN,`/mO䔰m8F0V\6&yhM&t3J0`g@5zzX—#Ն1oԠRڮT}V*yp-"D$ן2pԓ1 8G07Oy#xh(> MswLiw:&mH)yi*F)I$qKwN^~2I6JU`>u0P5mh9vyռ%M|Vεz0cQ[} Уcvg-3 盲^Y)Vؿ娢VԳVBa\Α.ї-&<_60¡0z̈B@} 0gI=FS]+(]` \x\J KRqbN38ʔʗ5 f jA3]֚@ZOjM$%RN Y[wzterZlJYV9q* N&[5L[2<2?Kl*}*g?je܏Id?r `^1}/U߃wyE|k4~ NT~WrZ@ څ _(Z VT%ZZ#X>u㲻^Eo2˽T'v <Ր*`cN-FK+P WAv4?JScF'c73 SRӀ\Q>j2;ⱳIܯ3s:,([.edW=s ~=; !FKl*`DǯP 1I𿐁I Ș,a8pc3X)WW`:5KQy7j$uE|pM5* `lh $J6R/#4*8BݺؖWX.m)R3fa-v4+JP%Fvځ'C78-6F @6aY9_,GoЧͳ%{#QkA6>ohͻ㥌d͟_G蓌/tk `RӍ) |:2r ⯿s<ʖ5E躉]]Zm/xƜO XR\roytX Q]$^Ӎiܠ*nR gf5/C7A5 (1Gu@|,J$4 DIIDmx8=9="zcq2wНvȅ GZ55!_u*ZmߴN3^#7$QLZu%!^A I1)91C|GDM߰A7Y݌:֨n;VBNRSq%yo|&5زgt1cL0o1Cٍe^w>½!6jf4K Gzi dߴL]/y rEF~ӛUQ@߉`1qUwb\L(bY%) ZRlҿ˪0-WiUФIS+_!y]+r=`'tv7{}1{\ǃ$ cϜZ; ;usg,kv۸U߻|ozrPQwGb "]lɵ\{h7{‡{8ֻo=`#vN_2}N$sSz̙Z 6t6@fn:6i!T$" W8=(}mZx}}5hKż{8P޾7yƾ7^:8,B7l{8O<Ĥlt jC`)7a9Jl6C/?4gZ+q+IaɅq&g w.yEZEW~q7 K&*/: ;,woܳeCk57nug͵&շ7ڱf}?uP;o>r;N}ztPu]C<֘јsUۧ. o bo?7gW ,I$Z* !N|˲f<s&|헪m:?^KgzQtc+kx>7n鸧H1L"bN65|#.hd `/0뉚]R>[K R;tHdNkVrh*<;?Gj3 d4 ьi1;^Cg&cP SV9y8xqcn蒳ѡϷ]j^ 閪8w<:ml튵ݳGVt*魏7Ϛq0Jg!=B_Sb>7LS*J&o#'q&]+F.O s!qLCDktK||4cLzbU[)3K!wY޶oXq¾é [?b(\5La乖/{s atq/RˀƓ/=V!疕 rR|BDPxt|߳eg)VA"#^A qF$ڻ"db&B%+ձa6U{nm0YoM}4Ғ|y|*I{6b =} 6d1yݰ=s/}qU|gFOS1 j~;q/^u 5eZXnKDkc`LSUxM֔v)#(&:!P UԤ:ˮ>eKqGe6(ABO3cC~QgTh&*F&ak[:V#UJ5.Ugp+* ¢*f=c(ךW1^4٠.QK wƐetC<(a,zB0V<[M>CwUc:y'܃i9}^< C08C\OPE^1sZR5Hvn}}n6mpb1, P ؊ A1eWv5wǽ# h#/_]ps3:u8ifٟ>0[v۶DY4ag "DR 9KvHR]SPŷzJƛ3в ?X§)VF 1Io0O%eœhyw xA;2ބI>gvz _ap^i5ҕp}ϛwJ9ˉlԔV4W5qH >.{C[|_B>N=^[r9^5bUΙvJڂk|߰8NgNJhJ,JA9*rDx0s{P6_WFjpm8Ϛl#)ku?!ḰГ V{=ӓi3a3 `F`vin`n7< 2n7unhC"$T/^BdG#yYl޼rU 5) 嘭C/YZ,[, rͱZhXqE~Djŗ=kqW[Y$9.v1rqj3܈m7%q\br2:.G!D8<%rըרi^`:X+r:]<cr6 yi䜂?DE;x6@KIhu϶aںqV-6 uU;V3 VZG>E ;B41zb_h {b#g¼ p9t(J8!RY'%saX{D_!"8dr50.&ʷӾ6ې9p:X qw3Ϡhu8eD07D{ s&Byfth sȤ'7VT lL./!”.75^FV= .H*^WR֮,_0.iW]ee+ܸ&wo]MP{(aW80=p\qZkք΁w3V]"Kf EJne*kT7*>q{-ȕ*LnwWXr. ҫ.z=b69bX`-Q @w?qmEp_|#KWW%eB3µ{ҷe(K@ږ ˃K{[@ Ǹys0df Q9)8{!p笯k.U }>}kk׳v@՗.q٥W&oE3C^?C?G[۷={b<}aA uip(uiW2JM_+X  ^]"~ǡ@)<MN=BóM-L!mL!]}c@ж\%:%Ko`**|3*]I˰@uXK {(|I|~_ hq% A_&A%D̠ڍޠ-hCxB>Y3=8:Y7bzS8?%,S/ҋ^$(3HݝH $#BL*f@pO UFٳ \@ݟ e EHquAo=SgDQ.b&.{f׋w Z%0.7s??~u?sȊ 'D;FFEl188:UgFͯ_6m 0cYV7wU֜'706L6rh+FZ|T~8155ipMVOKZ۲s6žbD K읁;!f I5k%fpoZNK$p܉7&x8"~}3c@qL4GK2m L5 TNy#4I <1BD,5X ay$yRcTPYLєP ZWfjzA3*SUs(go.KZ!Jڊ&A 0%Έ-B:)NゝKg u\6߸~-o_wSg+ggC.f$]Hx Ghc n@dV`2]zuܸVJ hsUW+w,WD}nOӤ тf}́Rj5NͧyO8<lH.6N;@{ È^x]8!Dh"=eN 23x,> I$,>扵pB]41+RKH)'!G,~%!z}< A &d!t2B &Jd41Q4yAI@6d=c2/c~{V̢4 WwvÑ@|']_41zJqKOtT)j$4+ӎ0KQ1sm|~2k5oZDnHg 1,:/X9c^k4yUzKqjNo6yu4vg(tN')&]tjJC!SF4!H!C3Ą'$O={bj6iA9CN@qz|jP8uMn˦{n2z$aF/K17~;D1cA2=|ɪx\T>m:Vb̗o}Yn[7}_Yj/c 7N\vu؆-5\ƭI~ĩ /,H]>|xq"vJϠ | .(D߼*+੧R\N?hp;$OUUӁzY&7uj^c`+)4U3ұsX&:tq{,8qd>IML]Z EM1V C9eV H꙾rJ XEE ֣o_rUxv|0'5#GTO|x\.PިDK8ćGKgd,Xo3.A 5 $@k37_ c%ByN;IpMhZUTM6 ;$==<RIR5cX6IQ!3;*j n^JCCYzAHElEz@.Y!ᩡlI%Y@Գ2+^D*ԿV" h2-0e򽻴2.tKUr]Uт@@]bҿk5ԥ-:TB nz҈܄ n"(E.VX䫋\I^X+PM2q2$ E)2(O\"DO}Q :Z B"g[?kDQ3[]Ь,eR*7j w킗ƤwFFP^A}AA=pQdrעļڲ33)wgys&p߷W7z0 D{satD ]3jA%S VW-80{WtNBD[|D`- BU0?1DɠXTFvKR8|dO2iMA9 6ز4OIwI~y~4=:"`h0* 64` F)br#!f"G#jS1s2_F8tr}]Fsu9bW&Se!n%~g!a?FD[&NתM8! !P+:lbmVֶ̯sYD󂼊%tH@`u* za-N2T_⾗+ZR>Y-{=MA<ɭ;S;xށ>\23 ['4'͝y6dF[Ha,rTH*OQW/JUZ<֋puBL!LHQXPu%!]Dkաm[")\0$R.w`бsZ"ebEVŸ]ӭ(8&t{+s^7{lyENK5c5*.J`sZϙmW'|/w;.Ѯx`mi3._#,9bnVw~6(b#0֟dD0Tپ0)H -^L*KlD?t0̹Ep|e ,uO =kv g8b#+6B'G|bLzpӓ ʜ%?ϔO31d~rQ|ϻ~!*LGZ<C-%< 2ɴxXnW<{;dmKQU&!h9W!sDߣ7#w_@ '|Ļ_oPF>K *5D"ђb2x8@ Yx ">!~S&JZ4O>ˑ!ټ;֗ eMkd#+MO#@ *)T=/9NW 1ńA)_$7">sZ̔JSrmXē`;o]5'\G] O3`TD.ķҕ'130#nCXoa.& aH% & )!i-{`D6 P fӌxI;RRw%cÆŒN^^n[^Y օ+p [0-XE=J0#,!1@Q8T #~!?؄~<!vCq_&`f} 󆂭t~5d&{ZpNMWd]iV\WBQFID$#N$5L ]qPXTMjVDIh>d]2tx9>>]rհ"0|fڜ ; ۬n-{w*EXP*sǎpj9V8jhJG;H[K·%';VW9hJ wTOoϢ1Ҿvire/g}}?\cS[ڲڧѭ5^sZ18x3N]3L5i'O݅$ #럍 8\|Տ,t' z"`Հ4,{K};?}͍^ge5r[<4LLuB Н/8ԭkGV$ʗ͒<pX֢c \?SP{zmZhH Zx*RkjJZ;oR%UYOVV*__?M̺vvqRc =80jY3}B-Ӎa{- VTD8h{} e9$![N;#gV[eɲ$WȒle٘blf馛N$@BO@R)0KB A84\KliJl}̛7oDNOŦt^'`HT.MҀF -' =I$ݨPWشY0V3V"ར4h=sF1\U l?|U'EX^*ՓbhV |(S16mZy|^v'`K€ ,,,/_>_G_?)egΌ1(; xϯMϯ}Bh* !(0zOެGvJJ<{cy K1qA| ^t@K9 #72e|:?\}c` G0%S вO?\0=C}%76 OuL:{gp1`]LKXcr,w'cAL /?d${mX3x9OC&~ϜbϞ/N W {C{m߾7[5ƼsO?ӧ,\x]!.gRښY:*doarrs3[{VEy>v[ˡoXM@Z! +VxV4Fxanwud<,>8d7[1j:pBZ~f3B5S~VrnV n# ~0,/x聞?^ԙ3e /]wuow$3gbj4ר7!*FyjgQ;9 ?2~~hўtO:)t='݃==CuY4$[:, tBoEԘLoHMe@-5 ,Bo;{q^̍,f4&vphȻv)"< '*|0Nز0[JnEE.W :LD.D8ߵ?ODPI1Wes烏8bavzigk6~[~΍qD >MfU^OM8Ru6.x~jTAkMgzև:j崉aU3iPRtLUxY`(@|R* EDzgcg@ 'uA`2+,vЋć/ DtUwmKbI"et'&d{bDrRINf$U`>[2ThӌNՅk-z*FO<(:sXv7b2uTt\k.7ǻt(?GC߱7N95Ct%igC̉gS`/@χU0>`;lc(|0v0:Җi#!5a *:0,O <R|MYJ)llj*SnE뇀`ODokͨCb +z%089fx1ÆiaPp_?=/!Uz2,lOZt9@`~mnCNNPf.l/IMlLX\ܗKj)Eu%u*bN c 7kg1(  ;p{1-g1@\2t 7D P4-oo')%z29L5)2<:B&):O¤T]EݶK~M [uN9\[F_)6TVpHtKu4ӬV6_WʧU;(+4%ɤfei^oH$S;C!; 竭>N5)D{ʎ! K} rљyVЌw1Hde;N \DFChWvπw;ty9rӹp \;>#~`)ahZbizYjq;~\lЛS +rjBkoPl )^NA]'ޮh}f"c.!ok岭o<PB{?L'Eԗ D =]*.gJŶ}Bot&& e\E^׭{/NK޽DX9#^4xC_ jK"wCjM{.(,ր+MsQD QcTP^/4y5@^+/'w4} Zsũ"`W% yGIpC0:E?kݺYɎ+ U"5U@SxW.0pKaX}:]zInN6C̦߾uQ'|䘔UVєN=?v7 9l&mONb{#pG^]/ SJVN\*T-@vfVO!h4RhtLaH\d,Ӏ"F'aKDPo(z p=cwd7b]Z8p`"2X:"ŋ׃'H-2s֯{/Ǿh{ThrĐ!CT0b/b  Ԝ[9>(^0atvav؀ńQ1So4Vx E Nln=˜zxϒŒ;ؼѤ$. )_$1(}5$ӊEP۔&~F̩8ޫ`(1E(ѻ&G"T¹|b,i((18W0w#BSGXK{_gS.ф6g?{i֛뷛⥶v=vlTRa dځӖȔ \v힁UU7V͋ *5}$2uC0w҇AåήCvELSY>{4&~MjF %ۇt_O\',}%l)h z%ۺZyIF]݂Շ_'7~U) <2N(;h-Pq]aV%?yyNM َy[{[h1r#}B+:>̮ׅ N " ܖ7Aq0t#I$O*}~TwDE 7^ ٝ#D(%M*6X>$@p^ ") zAG% b>>T^}; OǘQ;c-/ ^#7wVt s&G'*-#צQ%^M'pc"-W+*m9zLԎp힒{ɑ]}}(b0};ax]t[)Q@]gД vÉ7g㮆'fToJfȬ"Rۚ˫DŽ* S?u=95jU!9F9j.4p|P{wΔ"Nz(mW`yخ`ŰKf?~Fm(ȑX0sr6D#P2 ='HBL"-0j0dNG̏rF=/tu?"Ju*/^]2Q.Uԩ\|OYw/^p9ߡ%Ԟv%( -FʋkBeNk=vuP37g, }QįK L Z>:MN⏆/"[I}II}{R…wu R_KnxRFmX`HS]}Gŝ-g(KqAM"qpn 8o|5Rg1:?M N 1a%O0<;,A[w* X '!(=i}&?#^$ ^2)m4sDE|gPb2Dq>n.*?W̸x(Ļ8sDSD<\"53PsA907@R Fq 1xodYХ&]bnʁdbzya(rj~}@8  >>4J.]RRŨ 2*F A6r]eH}KK۔JҡObƆL G hN'%+Sx̒jU,V/}2D5NwY8G,JeAh*c幔‚wޡ.0{DxSfѢ2w$F-:WY\D,oIyךnNI ,i)m#YǪjU-3Y$v%%3ZpV򒲗.#cNf.5 d$C},KSצIX$fX͊DM^uVJ0Rs0=t@kToRZ$bX*eVEWϕ5T0Tnkޑ 7&$2iyThF7ubqey#lR*[)IMk\a#u[N^3VqאnL(v\fTGQI7p=3?קw(snYISMg''gaFmL*1JJ2U,O}}]&k9-Di-%}jS*0XXWb%cRLR)$MNK,NcإUdfI$DĢ*$R fLMMuLձK7)lJehZ%V1՛ ڒS.u4elJ=RSj>rlڮb4%ǎ-Y ]#,EJ ؈]?Sgz-K=:b+ 4A|hFCR("F'ch)= EjjR7﫧W*JoJL2lXBa ar:ZcůM?'-V xn ]mPQY 5eS0 Ư_?^:w.rMP ToܞL"ʛ_b^GS7eZUd lX>ͧAGM1 0Bǖc(B0lEguK Ppl G»vh[!A9v qo9b\#}v@04> B4ZQ)?ݘ:>uX vn(zHE~Jńs(7Pz Xx@?n;E)҃4EJACuJyc>,FuUiZ: ^{P?cYոOBk3Xt5PTErׁn*~)pD M0;bMA폨p[인ւ 4]Lvky4a.YB\UE/5lbK2#M%PJvWθnpk'`@ɴ`iʌPW8Ġl%t %ʌSQ~Vpj*$w^#G1i6}"vw"bzrMZښ]].?+;z##Jz~:vvۻ$31~eݹ+tJG;I mWyؤqk*dƜ^VX_<:7''wtq}aYa#TH 3:#CyVZWjU֕?;AY|.d7R]&ODh<*z@ i݉AwNA%L @vI0c*T.39R[VJЩ,՜bM1WR ߫>EƉN, `õ>U8z/{23Yh확b^āpQ{/RX_߲d8Ȭ6e;зk }B rfq HˠfŬD ζ%,Ĭm ?sx\j\WWUqCS~mlY3M>qs3`ػoSL4.\剶jlu[I77쵥S4m323ȧꑳlg@ ͢؏1W%`T;ω ExCt#8*g30Gx{!w>滢xi$plɣ` ;f7kAfyh3>>GU4VO-HM֌oK<')m? %{[2p;>κK>e}}ڸ0D2`TIHnP(A!6Ƣ2hk}U3Yެșt#d}s|'s|\P_ξGփ$į8;BhQ",Ƙ{ 5k'ZUָߚ8~)A^R--.fGWԋZGE*.FzӘP.$-J}&\VTTnv?a/'n-{4yʐ`ʡ5e9<4eU斕dT U6?AX&튨Řf5?MA6eb$d`t%Qp3`sb3NnMSpU5G [6CnqҀ 0y"U(tK\SR*1S$AW~gSvtQR[ %ZԛgXo3c(|:c(sVl` nHz*_~uzP5X"ݫ~P]#jDy%Kj $-v!F~32ܪQ5`.|ap>nw/y#?X##Jw5( Nx4슩qV^=~R'Ҫe,ҧXM}jJ-)T:אw3rT'x}scFy7k V0\SM(2@u:-YzǮS8W[4;0qƷr6SBIXqLt&t&#M G#&t ڠ470݆IpX2M LuwDo2` %\7߳g ^mlmW)sX7ao`BfbnQ1J)?FT7ѣ;C6XV}EBq:ٗzhW*S/'W I~F,앀 Ud A:ɫ+z:b4'Ŵ؉szkܮ.08q/8kYHE>QvŋgO~aժ bx.쨽'TY&7(w^;[Ս$\0w/6p'">@'w.XHZɋ(jXyc\X{'Dy>z-zxy>xm˔ۜS^O]Ђ{E&``w)+ySL>cua=$+h)V,7RH֯a=U<35@fF9Ni@6݅LDQs-cr졂 z W^׏~чS25$Z}݊#q~d{VF^ުԚYl&'Jk~O V{W|šG&$d]8/vDj&7xҤU떦ʐ3 {W(1O-T}2k@NH:e i|},Nj$}^\X,_+Vr{-sv7d/zkuxC499/%Vϕ4] j3=/#TQcϱͫHBw _Ee^f[џ3 76N3w\"R1v/}}"O{?1 E>9|.mV 40 lK҇k|2A?g`f.}WF\[XQ:J1D~NN*(|C^&@Gj1:;kN\ 0ƅfӨp?$0oGG߽0Cは/zF4X~dIE[.9љwI` 샧'ab$~+/m`.- Qb'͛"+6XJ̓n+fA0H+l_sʴ!-TdؿOdɜiLjNqJɘeO;;%G'o;"),=K ][ g|Mo<< 4/c遷xj~ܱja>txkla^3qniiЗ1MɎH͌و KQj1$ag2g#K|!yeDQLxX{i4{{VNl Ѩr|_IG$iu,N?TW߂bt*xAutAՏ7Ѐ \84dه&I~Xsul0eZ~rsUJkG )2S~mVyn#~chVA+c%YY Z!W1tA1y51+AE8ICo.V3[ '1;Sv2Q:pؽ{/fb/vܽ1l^:fy%6?a2Gy8rmngô0.ׂ~XnjcpD1N70%p{ UWܥ҄oS(آ  v-6=C=s"n"^D͐8'ݿ ڊEBTPAEU!DwUIOep$FZo|놪'܈s!}q"TPd(le+ VW^DlYs:ahI`XkUq&HIR& 5 R r#F-M>/?}DLeJ{L':y!=lgwKsC83jwV˩}. 'v cU Q)I{W-Ly}0W_훰S%  YIV١gD7;;ZX4vhH;n}5>J13U!P3xd}?1mډwER`*A 36?M~hIxY= 28Lq,6h=΅Pt{k0f7?rFR8`vG<ؔk TzgL+VaLwp # &ɼS,Y~>o~3b!wcE. k,)O>e 1z<gT%5" V*1'_nFBQX !I'P!q`3QltStb‚ /<;ɖ?&%yD,eOp8jb> @Tᄊcη歿Zyw~?zEgZsq snݴŖ'2;͹Gz,>#QQ?_bNɆӍivnjj~w`GS^`=O3cM#!ȧtxۄ~.k:D!,茮?:At$6p9*> bi([nϠA#鰺Ih*~[Dqt珓j`my. 7e5/6u_T BXa ?-t :Ufr4RJJoE--j#髳,*v>&$Q?㰗.;Q ]'׬=f͚S' 3rxW˯f8{)VLo0床|`;& ޱ~Riqì^OMNTuG:I.AR(_Mo=pNtMj7#~s&#K( =q0:]pN8DG^>HY4׻]F# ÷,FhLuO'zܴ%*cvvd Elg:1hr35kgFatu~ˆm>џz9qLI)U<gx _ifmљ `.l8 sdg鶍yXWx6ݴ e}ư_("/[0:ӻއ6: l6%P,4 P8u,:N/6Ƿ7.Aߎgd 6{r0x؋LF"\b6(%D"`Fvpg!b` _ J*eK83|q(ԦJ>WR!&)A|r*2H8%ݠJe[|MojP?C[8ra93{cbqo5&0 4%eٳw<<` [S7߇?CӞ̶{"yPn)hAcWzZ*yb.urܚ[%XqᏣ605n'Ny'ND~ ^%s%藂]ML cBuJDO_D~_8;U\W#'soMgC=P9NWǐu0-ת׶Nnk9tz9MF̍("QIS?E@!&O">H@!}Z%? ? qx6rD.L0"*r 8"GO5E7 9?Е)Aֆu)~Q}@l Lrz\'I,\zӷyMڞ0`V+έxFGO_C?ҭm 2h0~|lClq槇L?dnOuD`mptGDVf롷G3H >F`h㖋mpM6\.f/ђE8 :|12ؑ92^ ԍ5k F?pA Иwd< w=6J@l^}SCGmr f%[ϧgi\ [x,ރ u *Ժ0: |WlrJi6}w ,i2ִi& ׈y|[I0C^ymr򑯎i&"Hm$ۖOvyxt)^F( buroQ i7c#RsMav))fDjL(sb&[sdTb1s_7牀:U_UX /ϭXqX@ Й[FAQJq#?)ߺ|V}+-H6aGtSxYq~ㅰVjhW#r#1!w48Q{n/i=( U-zFnU5˖gRqw`c4gej+6C9 ein33Ѭ1[wc⭽ҿˏ^.L\xK1ms\rGU5^4Z!Oѷzh3Φwyeƹ;R=}&z(6It} |ZieݲNˇdKۊ8'slj 9I!R jp%p%HZ޶(hʎҾ~ߗX;;<<4kA`6KTV2^4"?K/AnyܵE!JbG*/JZX?3ҹO;OCBp`D8or[Lf5~V;>QqJD>C\K7]A-aoy@] " ;vsHH'&!zXX5gԞNpCMN14^4xF~Fe21)^p?#fJZRԙ1]顕j3R%i5!̐?B{WJ-sva{> Zi9O?W'+ӼQ J0]zLBVQ= > J}FS*)ƉFZ5˨Vj p4]!n sDs43Q:pӞ# 'N%;g_= .2I_Y-,VH>{LBg6ep;kJW"u.#| ]H(PڰFtoQ,VXSTfAápuN\[;olBMEhZة>g 6 %ؑY$h0ggyX$^TDVÅ b$RrIh;,J>`i9 P*NJ}׌.GBei:㳙CB01Z[-OL|9uG̘1G\~;]kLCSYbz ɪ:QRnNH_X>҇BB),l}U1ƙ[ jV]Ҥ]/?ϝ8i ~%I7モl4Ub5˨5Q7Sߣ;{ȅ0N|v4-]$eq2\Ni%bd.3]@8m@n|7\9+إ29e9?G-n@@RHTlI[RV w=bCA9MVꐗ#bPƝ &bf.A@c5Iؚ =>,/eM|ဌb7dI~ЌӦ^@5p|n`LZAŦ*C}d.y<5PU=kR,5D«2 +g/ G32 S}r .qnƬ(^*pٍ9=\<,Q?"|p)+Fkrxo>.|4߅Ad )S:ƦI|*Έ qGs6;^O~+r.uD 뻐%WCAQTیuրW3egչ+HD))0:&p L Nt~NmyFyOs[ `\ky;h_e0@.ӿx9? f`/Z^}WBHRo7z`@Q4ΆбLwl_7^=t=SUZ7HGqgEGJ}9RcjB=)Ĝl #=v~xqvwoDk(k. @@ºk!}!HZ;wg_8}Vܯpt>׵>x4G;r>p<8"d4\:~FB/PGbfUޓJi8ۆݹuM5|35.axnoX0f1K4?szRG|{GgjCB*:m6H}Wu{ˁ6֒B-yC=Jۼ;&[8ի4|rq^9pH/U`mP<=cxOAX^kC]MIh'P?LqAC`S6ħR_h fA tL2jXBZ`͘piDlJALxfˮѺԘUА1 3CO9Ka|{۾Tz%E"˫T*7Cxvi2Vd9'a=zˣVIxF:x- i !p;m/Yp|x(~B%W~FA)1S~?E4=KR0j*^FR0*9GHg PR ArX㲁xk ҽ쯎[q-E%C!P L4"zڲ\̛_L#e"քDWTSҁP)ǥ `Uo~گ9,O`g ^O&WK50<0Ħ]oGp + *HEL b5pdL_RӥJ`wDcCl  n%-u'w8_iJqXl0kD>%K>gg^Қ(a 󬬔H΂l#*~)e,3L],.p`v:W62|]ţ^J+qXrJŰ/ab `ݰZ|tyֵB׭Tupm_%mzcNE(OD}˹ 8%ٛ /VaMr8NJ ,3R,w_V^Xk a'VZ,CL{TpU"2vh{^scS*1b#OQCmxf.{@(*Fz孷A6/Vfp'wG`)gI %[ ?hN}Do.ۇ̡cܴm}J'cy *2u=/6uX8hk lleTŏP7h:xXhxQƯKh :a׈~RF% 6.x0Fsu.VltOa.`Epv:VvqdE&;HpYs`Pk3$7LXʎ&x9ݾJR35\zMphg>0[Ġ[JNMyFYԏO fNȼ믨Zwb!;;kԜ9_]Բ?RpD,V]Zn 6yA;SkWi` @]!teKm&N̈ tpT ڄ?D!~mR+u& Z9"O "FBM&A J&PDzP_N"ce`:PK'  `. c YDDg:1JjrQU yH"6_zH7c aO2is+szDm^uK~ I\J lذSG8ӧQW}{Jޠ9Q-ry!pF}FKA P}%#2mW2cMK~??X͈gf63F{/CxU~hx_D0 D/(g[~=jGօFtZ.;NX8)˞93DkkpHα6A #}w{{Nޚ@gDvYv,[a%ģ5 ;nPs;sZ(xpѐ+ uG4߇s>=%s8Vo~Q:Ot?5'f=tgt%_4-9 \GpOϒE7s0HuLcW@BT]nyKfm-1V|u+fÏ'76g#wv7 /F)ˇ/Nw'gH\Ǩ^_9]>3OPh4\JnxIA4]:2p97i4TzYSFMa,qXKAJ9%+dDFرDBFt(LF_2du"ၝE9*D\5A5ЌoaZwmۛF^wLꛆScX6K+5gffgUߛvKsn1Qδƚ*L'S]+ ~)WOK%W '-3 YP- VhU<įV-"aO_*}3nȽ]\g=tr ?|[s*Z9 7ݶwͥp|xbhd}-P*vsӋ+I4dʢ|ciS;<|ʊ}帤F9}4d^v dy֨A2 -d8ߒS80DeDo[Ā=9io4gpìi5߾L^d)LX&s7tsX5KIՃ<7seajEo9'F^1# L9>kGYܝf^LMR_gSduvmySgOOgr[SFL8JFQx u6ʆez>z7Ʊ1ɰ]5CքяҡLؤMf)7&\ Cʓ'kyD=X!.MXuutpsر^oS*qT8l{%zT TOmػj:D.[>*VRnBU~Q{ڞy&W(Z ɮvk: (R,P( 5\T:%E5 k2U::fgR޳!Гd8m/St=Z `I;BVUafte 0)/p!cUJƧ7ŀ=d!]3iu+*4ƀ3s$\(Rg EmpX7yLCZQgin^Rvzi{U{|*͖::+wiEHaWq9UuOQQ=>mLi\@WicUu`̶V^eL?UITch|58rTVRmSTQ+Ř~cՎ%p"覫!VS`D/\d߄[ Vy!UEd…[[Fص¨ACV<4m,i)C;wf\Nr+K\ ֊lmN}W͠޸0Ӯra#2uSǼT!z؊?n+ks~WV_Ww>ҁɅRSI?;|Tɢqj5"#k U++A14rFty+INy0MYcXpdW>q++Zbmbilˊ]m`A Z^Lޒ|Xb"ku~pt8Bfx>[&cf0{ ]3 ̟y~&H3P|m][`7TGYrfn,kfx/oK_ *{t@2#g=/{Lg5S?(lK?òc!_03 γ%  ɰRO׎- Sm r;< ɪ)1Xɫl ̊%"a  ΘG՞v'bXZȝ܉l fm"&}GPX9{ΰ&ߐRasfW1^|q4t؍Dӻ'w'wTREdji}GU7c..}!.zsEmj1ݐ=0Z,SqK+J,q&ʹV )A{07Ы.B,=1ydq޼΅mIƣ*? 2|*0VB'G!$hBVa{(HeRzq#.Ob{o2E+RGqaaalZRJ-[~[ٗV-Tl"C",zw0gѬJƩ7+fg<Džo*pRGoҟ&%c^~[$[⑩.wػ<Gwąu  aDZ.n&EuFC~L_3ϐv5䙾/\! ̫zBkhy8! GJR^ό*_4>Sk6 A \6nLz#UCر-Wwa HII? 2Pj&%v sh1[M ћr%݈$wHd~A7ś? WaºG~*|M^nYRo^zzj=#[ۀC^WbHRo0 sdy46~ZC7{Ɨsݳǟn 8d]IU֝{6NJgnys]7,m9F7 |s湟3i/峹7fe 6ʏz&1>+aK;i c*kپm۞Ρѕs0HzBτ =gWVOR>#9~Vs#y nIUMR<}H$ո6K.^P}M̓XO__ ,!0rI]^H@Ld\LӤ)5mbIV-ZP+B35p%oNਟqoD 6q+uVhYᔅёBVӊ*b Kh.8̲6_^ddyԠԘ]B"ђ),i37ܿM:_i~X@,-Ѭ,}pa<2 8<|{ޝʰ~Ő;,j^-@d.=4cj u V%]8})Ϸ$'*K X1l8HH̛J41E!gy,U=U=M5账zGV!=G?l^3B_nevMIYdkۖg5:ñlfpl\C l;>mJ_$\?7wj=zŊq }Lx {oFQ.j.ZM]ImnvQ{eW`el|cΑJJbLsIR0)- ;UM*C*.T]< z]ʗu@VޗSޕ53J'Grd ),ꁪaWwiְ] "Fs-aאbJ:Dr1I'.J ]-[|:j6"yFvju/cYx|P/Aޡ\(.]VH!O6qrqGvX?$K q3̘&丣߹|d:dnI&.BZzb@ &[1㹞~_OG>բh^Q|w4]`]w`増s^toǿLψu)VBlNux$V 6}yqc<$^GVM)$Ue_y[ń$`xK)J_Sn@6zD霘1-=F]` P{7>0!Mzm)?7?yi XyUUêVl9U5Qy,4(/5\}?o&,{w)3]:~@}.m@k&^I'%ŏqi%O(5LA١zjq ~q U@JX g[_REJrbrֿ|v e4LECލf ?_^r9-R7~'rfna@S4S`@4z9 Me`(x$ [vrQ p AW_v.L1@!Cd/;)̡X?x{;T?Vvavՠ8mrqFߦt>_A?P5(~N{'\:o_\zʬc<% }[J5<< _yR6$kj~FLtɦqNDrÄ{ x!E:0r D8ҡhWaY[pq.pQrFv: :&!=QΊPXǠ&e":آ}0hԺA oU{6:+D޷32-my,ͿH[>`PPtQZ8f :gA QV*)Bȃ&1^o)* kVy,Z/XV˸EJ?mN+gjGlч| }kC_s&`4l-B!W;ZmH5ƿ+qJ(l9@ gQY9O2]:jXڠUPRbTyq[T|,1%g2WZBbhuaI,{bA1٪DP놜z|$X>tBwʞNjaNn6~, KڠuXh}y=HЂh$ATgwLa엪͏1axr Jt<&5Q)`6/4M%gooj, Z cMZpLh֩gGdWa75Ł"֨VFm :jYhڴi6͛q4eMݰn1Bt\T1Ux;$1HkhbĄЏH 1S[.s Kګd:IJ, ~~=8pӬٻddx &%b(Ns ZFsE=Xx-9FTx ʡ6usJnԬ xO*(^Ffа4JH۷}wI@-mR硢',(1&^D +1/J_i^F"5P0c#ۜzw/]=s@+ܳ<4-#Hw4fEEixk!+T- m5_Vq&[A)fӆ5,(>,_mW` Ђv9t͛ Eos84*O{lӧo LjF/x^ý^&SP8>A&::ف V7C3!D6d!X|y:E_%7gk]&TmcVO#P_3k*"_/o>| 1r'X>ҧ/%Hyӳ>Zj4һT@hnu/~LyCaaU4Wi@~dyGZqi$ݥ9pC@&sr<>K1ѿK;JD,~t&@84 -9Z.n}:Εz#dh! ǥkO[:!]Y) tdOrrvP2+2*TEڄUjPBwKΘ =|Ǥ<3n魠*ڿfMhsX>WgON'$u7tAұAqh͌̇D0'*&40< BXFFV}oq|߻Gg^äkשGNrJws`ϏUL:J^ ck@ }ߓM$?t^"YSN[yļ+]p}LFY>HCAqpyM?x MzA >Dm7r)y蒾V͍l1ύ"wm_\s ɬ?=OMfR5UC ԫ{GeHa[y =sD RUW%Rd1'=uR(/_ 9ַܺI "%;0ݎb+MG`p\ {?sX΁RKV7M3y> sh)wdc yt\̌m7x5~ngl4mp‰Ѩ!k ԣIdBG4CBs5COYbjo۰8=vMa./lnMqfJ,ias2`0:{Y),fs~vAt T12?+E1VhcO=B@U Xy$c9h hׂU ׇL_CAkHq> yJ--?I'<TJ#2v$d1h0 Y!}=nbJ0dN݊Tl_9V9Jkm{\n.ӡ>AB0fsfX |,c:k;u>CvFގsZLWT xc`d```a<=|EdՓg_(ETu=O'{?Law]+tw^nD.}kzՇ 쯍U}ɩo9:΋;FШO;XSB[xe#2UoاC??✼ 9Xz{w> O3E*De[=픖wE:seI5oÞR݇G=SBPs|W+Ⱥ }[0l]1V~ٴFoMr;'O^gLyhol7/ӌrq3}=vCCHF=ǡv @ilr.r4CүVldV¬L[eN0WԿoϓiosWwz:zQYY3RyK >?+#B|Jzj6]@UD-Pv>n໌u;WOMeFYг\l@*!u?'m '18 >wCÚ\fMc}~5lmo,.}Yr[Kf\yBGyoC[ |EE@ \}d<z/ |x{TgN.iBdb!3iMe$׹4M='4ri!e}Nҿ1H6dHAT8T* HGJ%K^ 2 RYHYRyr*УBTq"(*ѯTDSTuT-Iz jpE/N:R]ɕW gKnl7wSGG{oxDJ=é =Ż7,5w0@N386C&9^5;J-H~i >j^+zOPu//wR+=q v@GSLLgr _:KຈLzK[w˘Yu:sGXK˟Qt8;*3 s3=6(T~G77L4YCٜ9񜋮z]%q  ϖ1TeWe}(=drwsoWse \迎$H} nEc2pϘoKS }woZ{/o?9w*z % އaa/G|wywᘋɀu}є<m󐼇O~p)>kyg{ü,Ǜuβ(MxjAƿݤMk`RADݴ7?MhbW6;I&avk_@+@Uo'cBMH7g<dE ,p?-QvZ^SJr /gp}oyw/xGY:wLƜle>[.1[.bq- uyזK輵mwfyx~bbЇ1BL IvQ K^Ik&LŽD0fb`0(JfRMdDI/DK1Z`*tMƬ d.do<UڨUڴMr;gzpXmk'F}FUF]=j;௲Ki"bD.xB$dy&_jQ>º\ՒO-9"ZmWj\DI滎SidIΩ+Щ})dG»2']ZJZrl$;2VznM"L4R+_ ek=~^^8D9yWy1E& ϋx}WtȲuUb'X̔ؖ,O`ݶ5- 0̏1}̰Ls~N$ݾ}oW))L?nJ].ucԭRn4d 90 X ư l l [ְ `{v`gv`w`o1P `8`8VL ¡pGp p'p pgp Pzj4Fj-hClX ]p}p5C!D0· B.KR .+J kZF n[V n;N {^AxGQx 'Ix gYxEx ^WUx3 o;.x7 !0 $| > "_/W5:| ߂ow=>~?O39~ _o~?Ÿ+ ¿/0bp XaQ\qčpc7psĭpk߄v=;N3n;{^7c XAMN~?Ax0p qgP< #H< cX<D<):xgxX:6 [ڸ`袇kCpqq-x^x^Wx^x^7xތxގwxލxޏ>>O>>/f| ߆ow;]n|߇Ca| ?ŏI~? E|_ƯWku~w{}?ƟOgso ?/W?_JQ2i TaQZFihcڄ6hsڂhkچDv=@;N3Bn;A{^7CST!LM~?@At0BhifP:#H:cX:D:NST:N3L:Φs\ydQ$E-jSlZM]rG}rɣ5S@!E4G@Χ B.KR.+JkZFn[Vn;N{^AzGQz'IzgYzEz^WcAv#(ot?StZ~Ayb: nN/vj DUϝS۫|\QHn vr3ot<ϦjCҾk5| lIuw9ba G10竖N^O踍nXouܾ sTSM!ˮnSV\ShKѳn~mX=[ڡ؍bZGNXv3Y_sT+N _L:>WGAhӲo{ NwG[VCɩrs#_e=oNgy5YVS&ufLD T^n5iY|^~Hˡgs;'MI#I3>+7A:p}=[|y-N*y.orJqQYX;(Ck8>koqDWpd5E=qunk 6t$z"cÎ|١(S cJ)0.Geɔq:-# $ Y=f f-YVtyXKhQ]ԗH e_`~(5TAFֱQijhr&|`DC {nA9YH61G&Ύm/% iźAJcO wtCŗ^l4b&ψ8WV/g|%%Y]%Ԯ{M>ɏ63Y 8Tcx7V.M\7r8G 6CpWlЋcS\Ha /r6z#^`ޑ5,Q!^ߴ]&h#*ZL>K,GҧK\w>5]-2䖠qRs#?Xb9Vq-ˎJK! <= "4sύ=qWv/TKkXedI$9GM7\@&SJ5H⁚+C%)RVU)&E}Uc|8L h,]M hR@dVui(KQIf)EU )4>&<и+RRb\kӵJ+ $J+ $0, ʂ( gu!в1tmZ&akEX+V4tV !6dZC@ 2dȐ0a zhL@fϻ?PUTTPUT*4US^nHKhĄ EE|Q_TEE|QĤ &!L bnb܊BLa)$EYU)&)K2!0XKb C,a IIHJ3bC` 1!f0 3bC` _FYeA!0ʂ" DzC7DzC7DzC7*0!!!!!!! LA)S,z.sK"!UAT!"!"!"!"!"!"!"!"1)DC"JU۴41kƙ")қ:& ]2XbB 3Kooooooooof)Uzu]uYzRWzB׃VzJӺlROi);y4ҼSwJNi);y4ҼSWҴּӚwZNki;y5ּӚwZNkiͫckIҌѼ3WGؒ;yg4Ѽ3wFhY;yg5ռwVΊS&5&դtVj assets/lib/font-awesome/fonts/fontawesome-webfont.ttf000064400000503254147400353540017077 0ustar00 PFFTMkGGDEFp OS/22z@X`cmap : gasphglyfMLhead-6hhea $hmtxEy loca\ maxp,8 name㗋ghpostkuːxY_< 3232  '@i33spyrs@  pU]yn2@ zZ@55 zZZ@,_@s@ @(@@@- MM- MM@@@ -`b $ 648""""""@ D@ ,,@  m)@@   ' D9>dY* '    T     @ f %RE    $!k(D'  % %  0%/&p@0 !"""`>N^n~.>N^n~>N^n~ !"""`!@P`p 0@P`p!@P`p\XSB1ݬ        ,,,,,,,,,,,,,tLT$l x T ( dl,4dpH$d,t( !"0# $,$&D'()T**,,-.@./`/00123d4445 556 6\67H78 8`89L9:h:;<>?h?@H@A0ABXBCdCDLDEFG0GHIJ8KLMdN,NNOP`PQ4QR RlS,ST`U0WXZ[@[\<\]^(^_`pb,bddePefg`giLijDk klm@n,oLpqrsxttuD{`||}}~Hl@lH T H`@$\XDTXDP,8d\Hx tXpdxt@ Œ\ ļŸƔ0dʨˀ͔xϰЌ,ш҈ ӌ8,՜`lHش`Tڸ۔@lބ߬lp 4X$l( ` d      ,,8(Xx|T@| !"x##l$$'h(*L,T.L1t1230345t6T7$8 9H::;<<?X@ABCDEHFHGpHHIxJ JKLMN@P@QRSDT ULV`VWXX4XZZ[d[\|]^`aHabcXdetfhghi\jxnp@svwxyz{h|}}\lt4t88LT|| 4xLX(  @lt$xLL HĠT(  ʈˠϔldPՄxpڬTT ވL <H$l4 Pl ,xp,xt d 44,hP 4   4<,,408$8T |!h"$L%0&H'()*0*+,.$.012@234t5$69 ::; ;<(<=4?@ACDFH`HILLLLLLLLLLLLLLLLp7!!!@pp p]!2#!"&463!&54>3!2+@&&&&@+$(($F#+&4&&4&x+#+".4>32".4>32467632DhgZghDDhg-iWDhgZghDDhg-iW&@ (8 2N++NdN+';2N++NdN+'3 8!  #"'#"$&6$ rL46$܏ooo|W%r4L&V|oooܳ%=M%+".'&%&'3!26<.#!";2>767>7#!"&5463!2 %3@m00m@3%    @ :"7..7":6]^B@B^^BB^ $΄+0110+$ (   t1%%1+`B^^B@B^^"'.54632>324 #LoP$$Po>Z$_dC+I@$$@I+"#"'%#"&547&547%62V??V8<8y   b% I))9I  + % %#"'%#"&547&547%62q2ZZ2IzyV)??V8<8)>~>[   2 b% I))9I %#!"&54>3 72 &6 }XX}.GuLlLuG.>mmUmEEm> /?O_o54&+";2654&+";2654&+";264&#!"3!2654&+";2654&+";264&#!"3!2654&+";2654&+";2654&+";267#!"&5463!2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&^BB^^B@B^@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&B^^B@B^^/?#!"&5463!2#!"&5463!2#!"&5463!2#!"&5463!2L44LL44LL44LL44LL44LL44LL44LL44L4LL44LL4LL44LL4LL44LL4LL44LL /?O_o#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(8 (88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88/?O_#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88(@(88((88((88(@(88(@(88((88(@(88((8 (88((88(88((88(88((88(88((88(88((88(88((88y"/&4?62 62,PP&PP,jPn#$"' "/&47 &4?62 62 PP&P&&P&P&P&&P&P#+D++"&=#"&=46;546;232  #"'#"$&6$   @    @  rK56$܏ooo|W@    @   rjK&V|oooܳ0#!"&=463!2  #"'#"$&6$   @ rK56$܏ooo|W@  @ rjK&V|oooܳ)5 $&54762>54&'.7>"&5462zz+i *bkQнQkb* j*LhLLhLzzBm +*i JyhQQhyJ i*+ mJ4LL44LL/?O%+"&=46;2%+"&546;2%+"&546;2+"&546;2+"&546;2`r@@r@@n4&"2#"/+"&/&'#"'&'&547>7&/.=46?67&'&547>3267676;27632Ԗ #H  ,/ 1)  ~'H  (C  ,/ 1)  $H ԖԖm 6%2X  % l2 k r6 [21 ..9Q $ k2 k w3 [20/;Cg+"&546;2+"&546;2+"&546;2!3!2>!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@@`0 o`^BB^`5FN(@(NF5 @@@L%%Ju  @LSyuS@%44%f5#!!!"&5465 7#"' '&/&6762546;2&&??>  LL >  X   &&&AJ A J Wh##!"&5463!2!&'&!"&5!(8((88((`x c`(8`((88(@(8(D 9 8( ,#!"&=46;46;2.  6 $$ @(r^aa@@`(_^aa2NC5.+";26#!26'.#!"3!"547>3!";26/.#!2W  .@   @.$S   S$@   9I   I6>  >%=$4&"2$4&"2#!"&5463!2?!2"'&763!463!2!2&4&&4&&4&&48(@(88(ч::(8@6@*&&*4&&4&&4&&4& (88(@(8888)@)'&&@$0"'&76;46;232  >& $$ `  (r^aa` @`2(^aa$0++"&5#"&54762  >& $$ ^ ?  @(r^aa` ? (^aa #!.'!!!%#!"&547>3!2<<<_@`&& 5@5 @  &&>=(""='#"'&5476.  6 $$   ! (r^aaJ %%(_^aa3#!"'&?&#"3267672#"$&6$3276&@*hQQhwI mʬzzk)'@&('QнQh_   z8zoe$G!"$'"&5463!23267676;2#!"&4?&#"+"&=!2762@hk4&&&GaF * &@&ɆF * Ak4&nf&&&4BHrd@&&4rd  Moe&/?O_o+"&=46;25+"&=46;25+"&=46;2#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!26#!"&5463!2 @  @  @  @  @  @  @    @    @    @   ^B@B^^BB^`@  @ @  @ @  @ @  @ @  @ @  @ 3@  MB^^B@B^^!54&"#!"&546;54 32@Ԗ@8(@(88( p (8jj(88(@(88@7+"&5&5462#".#"#"&5476763232>32@@ @ @KjKך=}\I&:k~&26]S &H&  &H5KKut,4, & x:;*4*&K#+"&546;227654$ >3546;2+"&="&/&546$ <X@@Gv"DװD"vG@@X<4L41!Sk @ G< _bb_ 4.54632&4&&M4&UF &""""& F&M&&M&%/B/%G-Ik"'!"&5463!62#"&54>4.54632#"&54767>4&'&'&54632#"&547>7676'&'.'&54632&4&&M4&UF &""""& FU &'8JSSJ8'&  &'.${{$.'& &M&&M&%/B/%7;&'66'&;4[&$ [2[ $&[  #/37#5#5!#5!!!!!!!#5!#5!5##!35!!! #'+/37;?3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3???? ^>>~??????~??~??^??^^? ^??4&"2#"'.5463!2KjKKjv%'45%5&5L45&% jKKjK@5%%%%54L5&6'k54&"2#"'.5463!2#"&'654'.#32KjKKjv%'45%5&5L45&%%'4$.%%5&55&% jKKjK@5%%%%54L5&6'45%%%54'&55&6' yTdt#!"&'&74676&7>7>76&7>7>76&7>7>76&7>7>63!2#!"3!2676'3!26?6&#!"3!26?6&#!"g(sAeM ,*$/ !'& JP$G] x6,& `   h `   "9Hv@WkNC<.  &k& ( "$p" . #u&#  %!' pJvwEF#  @   @  2#"' #"'.546763!''!0#GG$/!''! 8""8  X! 8" "8  <)!!#"&=!4&"27+#!"&=#"&546;463!232(8&4&&4 8(@(8 qO@8((`(@Oq8(&4&&4&@` (88( Oq (8(`(q!)2"&42#!"&546;7>3!2  Ijjjj3e55e3gr`Ijjjj1GG1rP2327&7>7;"&#"4?2>54.'%3"&#"#ժ!9&WB03& K5!)V?@L' >R>e;&L::%P>vO 'h N_":- &+# : ' +a%3 4'.#"32>54.#"7>7><5'./6$3232#"&#"+JBx)EB_I:I*CRzb3:dtB2P$ $5.3bZF|\8!-T>5Fu\,,jn OrB,7676'5.'732>7"#"&#&#"OA zj=N!}:0e%  y + tD3~U#B4 # g  '2 %/!: T bRU,7}%2"/&6;#"&?62+326323!2>?23&'.'.#"&"$#"#&=>764=464.'&#"&'!~:~!PP!~:~!P6 ,,$$% *'  c2N  ($"LA23Yl !x!*%%%% pP,T NE Q7^oH!+( 3  *Ueeu  wga32632$?23&'.5&'&#"&"5$#"#&=>7>4&54&54>.'&#"&'2#".465!#".'&47>32!4&4>Q6 ,,Faw!*' =~Pl*  ($"LA23Yl  )!* <7@@7<  <7@@7<  pP,T MF Q747ƢHoH!+( 3  tJHQ6  wh',686,'$##$',686,'$##$/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?O_o%+"&=46;2+"&=46;2+"&=46;2#!"&=463!2+"&=46;2#!"&=463!2#!"&=463!2#!"&=463!2        @     @   @   @   s  s    s    s  s  /?O#"'&47632#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2     @     @   @  @          s  s  s  /?O#"&54632 #!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2`      @     @   @  @     @   s  s  s  #"'#!"&5463!2632' mw@www '*wwww."&462!5 !"3!2654&#!"&5463!2pppp@  @ ^BB^^B@B^ppp@@  @    @B^^BB^^k%!7'34#"3276' !7632k[[v  6`%`$65&%[[k `5%&&'4&"2"&'&54 Ԗ!?H?!,,ԖԖmF!&&!Fm,%" $$ ^aa`@^aa-4'.'&"26% 547>7>2"KjKXQqYn 243nYqQ$!+!77!+!$5KK,ԑ ]""]ً 9>H7'3&7#!"&5463!2'&#!"3!26=4?6 !762xtt`  ^Qwww@?6 1B^^B@B^ @(` `\\\P`tt8`  ^Ͼww@w 1^BB^^B~ @` \ \P+Z#!"&5463!12+"3!26=47676#"'&=# #"'.54>;547632www M8 pB^^B@B^ 'sw- 9*##;Noj' #ww@w "^BB^^B  *  "g`81T`PSA:'*4/D#!"&5463!2#"'&#!"3!26=4?632"'&4?62 62www@?6 1 B^^B@B^ @ BRnBBn^ww@w 1 ^BB^^B @ BnnBC"&=!32"'&46;!"'&4762!#"&4762+!54624&&4&&44&&4&&44&&44&&4&&44&&6'&'+"&546;267: &&&& s @  Z&&&&Z +6'&''&'+"&546;267667: : &&&&  s @  :  Z&&&&Z  : z6'&''&47667S: : s @  : 4 : | &546h!!0a   $#!"&5463!2#!"&5463!2&&&&&&&&@&&&&&&&&#!"&5463!2&&&&@&&&&&54646&5- : s  :  :4:  +&5464646;2+"&5&5-  &&&& : s  :  : &&&& :  &54646;2+"&5- &&&& s  : &&&&  62#!"&!"&5463!24 @ &&&&-:&&&& "'&476244444Zf "/&47 &4?62S44444#/54&#!4&+"!"3!;265!26 $$ &&&&&&&&@^aa@&&&&&&&&+^aa54&#!"3!26 $$ &&&&@^aa@&&&&+^aa+74/7654/&#"'&#"32?32?6 $$ }ZZZZ^aaZZZZ^aa#4/&"'&"327> $$ [4h4[j^aa"ZiZJ^aa:F%54&+";264.#"32767632;265467>$ $$ oW  5!"40K(0?i+! ":^aaXRd D4!&.uC$=1/J=^aa.:%54&+4&#!";#"3!2654&+";26 $$ ```^aa^aa/_#"&=46;.'+"&=32+546;2>++"&=.'#"&=46;>7546;232m&&m l&&l m&&m l&&ls&%&&%&&%&&%&&&l m&&m l&&l m&&m ,&%&&%&&%&&%&#/;"/"/&4?'&4?627626.  6 $$ I     ͒(r^aaɒ    (_^aa , "'&4?6262.  6 $$ Z4f44fz(r^aaZ&4ff4(_^aa "4'32>&#" $&6$  WoɒV󇥔 zzz8YW˼[?zz:zz@5K #!#"'&547632!2A4@%&&K%54'u%%&54&K&&4A5K$l$L%%%54'&&J&j&K5K #"/&47!"&=463!&4?632%u'43'K&&%@4AA4&&K&45&%@6%u%%K&j&%K55K&$l$K&&u#5K@!#"'+"&5"/&547632K%K&56$K55K$l$K&&#76%%53'K&&%@4AA4&&K&45&%%u'5K"#"'&54?63246;2632K%u'45%u&&J'45%&L44L&%54'K%5%t%%$65&K%%4LL4@&%%K',"&5#"#"'.'547!34624&bqb>#  5&44& 6Uue7D#  "dž&/#!"&546262"/"/&47'&463!2 &@&&4L  r&4  r L&& 4&&&L rI@& r  L4&& s/"/"/&47'&463!2#!"&546262&4  r L&& &@&&4L  r@@& r  L4&& 4&&&L r##!+"&5!"&=463!46;2!28(`8((8`(88(8((8(8 (8`(88(8((8(88(`8#!"&=463!28(@(88((8 (88((88z5'%+"&5&/&67-.?>46;2%6.@g.L44L.g@. .@g. L44L .g@.g.n.4LL43.n.gg.n.34LL4͙.n.g -  $54&+";264'&+";26/a^    ^aa fm  @ J%55!;263'&#"$4&#"32+#!"&5#"&5463!"&46327632#!2$$8~+(888(+}(`8((8`]]k==k]]8,8e8P88P8`(88(@MMN4&#"327>76$32#"'.#"#"&'.54>54&'&54>7>7>32&z&^&./+>+)>J> Wm7' '"''? &4&c&^|h_bml/J@L@#* #M6:D 35sҟw$ '% ' \t3#!"&=463!2'.54>54''  @ 1O``O1CZZ71O``O1BZZ7@  @ N]SHH[3`)TtbN]SHH[3^)Tt!1&' 547 $4&#"2654632 '&476 ==嘅}(zVl''ٌ@uhyyhu9(}VzD##D# =CU%7.5474&#"2654632%#"'&547.'&476!27632#76$7&'7+NWb=嘧}(zVj\i1  z,X Y[6 $!%'FuJiys?_9ɍ?kyhun(}Vz YF  KA؉La  02-F"@Qsp@_!3%54&+";264'&+";26#!"&'&7>2    #%;"";%#`,@L 5 `   `  L`4LH` `   a 5 L@ #37;?Os!!!!%!!!!%!!!!!!!!%!!4&+";26!!%!!!!74&+";26%#!"&546;546;2!546;232 `@ `@ @@ @ @  @  @  @  @ L44LL4^B@B^^B@B^4L  @@@@    @@   @@    M4LL44L`B^^B``B^^B`L7q.+"&=46;2#"&=".'673!54632#"&=!"+"&=46;2>767>3!546327>7&54>$32dFK1A  0) L.٫C58.H(Ye#3C $=463!22>=463!2#!"&5463!2#!"&5463!2H&&/7#"&463!2!2LhLLhLhLLh! &&&&& &4hLLhLLhLLhL%z< 0&4&& )17&4& &&#!"&5463!2!2\@\\@\\@\\\\ W*#!"&547>3!2!"4&5463!2!2W+B"5P+B@"5^=\@\ \H#t3G#3G:_Ht\\ @+32"'&46;#"&4762&&4&&44&&44&&4@"&=!"'&4762!54624&&44&&44&&4&& !!!3!!0@67&#".'&'#"'#"'32>54'6#!"&5463!28ADAE=\W{O[/5dI kDtpČe1?*w@www (M& B{Wta28r=Ku?RZ^GwT -@www$2+37#546375&#"#3!"&5463ww/Dz?swww@wS88 ww#'.>4&#"26546326"&462!5!&  !5!!=!!%#!"&5463!2B^8(Ԗ>@|K55KK55K^B(8ԖԖ€>v5KK55KKHG4&"&#"2654'32#".'#"'#"&54$327.54632@pp)*Pppp)*Pb '"+`N*(a;2̓c`." b PTY9ppP*)pppP*)b ".`(*Nͣ2ͣ`+"' b MRZB4&"24&"264&"26#"/+"&/&'#"'&547>7&/.=46?67&'&547>3267676;27632#"&'"'#"'&547&'&=4767&547>32626?2#"&'"'#"'&547&'&=4767&547>32626?2ԖLhLKjKLhLKjK "8w s%(  ")v  >  "8x s"+  ")v  <  3zLLz3 3>8L3)x3 3zLLz3 3>8L3)x3 ԖԖ4LL45KK54LL45KK #)0C wZ l/ Y N,& #)0C vZl. Y L0"qG^^Gqq$ ]G)FqqG^^Gqq$ ]G)Fq%O#"'#"&'&4>7>7.546$ '&'&'# '32$7>54'VZ|$2 $ |E~E<| $ 2$|ZV:(t}X(  &%(Hw쉉xH(%& (XZT\MKG<m$4&"24&#!4654&#+32;254'>4'654&'>7+"&'&#!"&5463!6767>763232&4&&4N2`@`%)7&,$)' %/0Ӄy#5 +1 &<$]`{t5KK5$e:1&+'3TF0h4&&4&3M:;b^v+D2 5#$IIJ 2E=\$YJ!$MCeM-+(K55KK5y*%Au]c>q4&"24&'>54'654&'654&+"+322654&5!267+#"'.'&'&'!"&5463!27>;2&4&&4+ 5#bW0/% ')$,&7)%`@``2Nh0##T3'"( 0;e$5KK5 tip<& 1&4&&4&#\=E2&%IURI$#5 2D+v^b;:M2gc]vDEA%!bSV2MK55K(,,MeCM$!I@#"&547&547%6@?V8 b% I)94.""'." 67"'.54632>32+C`\hxeH>Hexh\`C+ED4 #LoP$$Po>Q|I.3MCCM3.I|Q/Z$_dC+I@$$@I+ (@%#!"&5463!2#!"3!:"&5!"&5463!462 ww@  B^^B  4&@&&&4 `  ww   ^B@B^ 24& && &%573#7.";2634&#"35#347>32#!"&5463!2FtIG9;HIxI<,tԩw@wwwz4DD43EEueB&#1s@www .4&"26#!+"'!"&5463"&463!2#2&S3 Ll&c4LL44LL4c@& &{LhLLhL'?#!"&5463!2#!"3!26546;2"/"/&47'&463!2www@B^^B@B^@&4t  r &&`ww@w@^BB^^B@R&t r  4&&@"&5!"&5463!462 #!"&54&>3!2654&#!*.54&>3!24&@&&&4 sw  @B^^B  @w4& && &3@w   ^BB^    I&5!%5!>732#!"&=4632654&'&'.=463!5463!2!2JJSq*5&=CKuuKC=&5*q͍S8( ^B@B^ (8`N`Ѣ΀GtO6)"M36J[E@@E[J63M")6OtG(8`B^^B`8 ',26'&'&76'6'&6&'&6'&4#"7&64 654'.'&'.63226767.547&7662>76#!"&5463!2  /[  . =XĚ4,+"  * +, 1JH'5G:: #L5+@=&#w@wwwP.1GE,ԧ4 4+ ; /5cFO:>JJ>:O9W5$@(b 4 @www'?$4&"2$4&"2#!"&5463!3!267!2#!#!"&5!"'&762&4&&4&&4&&48(@(88(c==c(8*&&*6&4&&4&&4&&4& (88(@(88HH88`(@&&('@1c4&'.54654'&#"#"&#"32632327>7#"&#"#"&54654&54>76763232632   N<;+gC8A`1a99gw|98aIe$IVNz<:LQJ  ,-[% 061I()W,$-7,oIX()oζA;=N0 eTZ  (O#".'&'&'&'.54767>3232>32 e^\4?P bMO0# 382W# & 9C9 Lĉ" 82<*9FF(W283 #0OMb P?4\^e FF9*<28 "L 9C9 & #!"3!2654&#!"&5463!2`B^^B@B^^ީwww@w^BB^^B@B^ww@w#!72#"' #"'.546763YY !''!0#GG$/!''!&UUjZ 8""8  X! 8" "8 GW4.'.#"#".'.'.54>54.'.#"32676#!"&5463!2 1.- +$)  c8 )1)  05.D <90)$9w@wwwW  )1) 7c  )$+ -.1 9$)0< D.59@www,T1# '327.'327.=.547&54632676TC_LҬ#+i!+*pDNBN,y[`m`%i]hbEm}a u&,SXK &$f9s? _#"!#!#!54632V<%'ЭHH (ںT\dksz &54654'>54'6'&&"."&'./"?'&546'&6'&6'&6'&6'&74"727&6/a49[aA)O%-j'&]]5r-%O)@a[9' 0BA; + >HCU  #  $  2  AC: oM=a-6OUwW[q ( - q[WwUP6$C +) (  8&/ &eMa  & $      %+"&54&"32#!"&5463!54 &@&Ԗ`(88(@(88(r&&jj8((88(@(8#'+2#!"&5463"!54&#265!375!35!B^^BB^^B   `^B@B^^BB^  ` !="&462+"&'&'.=476;+"&'&$'.=476; pppp$!$qr % }#ߺppp!E$ rqܢ# % ֻ!)?"&462"&4624&#!"3!26!.#!"#!"&547>3!2/B//B//B//B @   2^B@B^\77\aB//B//B//B/@    ~B^^B@2^5BB52.42##%&'.67#"&=463! 25KK5L4_u:B&1/&.- zB^^B4LvyKjK4L[!^k'!A3;):2*547&5462;U gIv0ZZ0L4@Ԗ@4L2RX='8P8'=XR U;Ig0,3lb??bl34LjjL4*\(88(\}I/#"/'&/'&?'&'&?'&76?'&7676767676` (5 )0 ) *) 0) 5(  (5 )0 )))) 0) 5( *) 0) 5(  )5 )0 )**) 0) 5)  )5 )0 )*5h$4&"24&#!4>54&#"+323254'>4'654&'!267+#"'&#!"&5463!2>767>32!2&4&&4N2$YGB (HGEG HQ#5K4Li!<;5KK5 A# ("/?&}vh4&&4&3M95S+C=,@QQ9@@IJ 2E=L5i>9eME;K55K J7R>@#zD<5=q%3#".'&'&'&'.#"!"3!32>$4&"2#!"#"&?&547&'#"&5463!&546323!2` #A<(H(GY$2NL4K5#aWTƾh&4&&4K5;=!ihv}&?/"( #A  5K2*! Q@.'!&=C+S59M34L=E2 JI UR@@&4&&4&5K;ELf9>igR7J K5h4&"24#"."&#"4&#"".#"!54>7#!"&54.'&'.5463246326326&4&&4IJ 2E=L43M95S+C=,@QQ9@@E;K55K J7R>@#zD9eMZ4&&4&<#5K4LN2$YGB (HGEG HV;5KK5 A# ("/?&}vhi!<4<p4.=!32>332653272673264&"2/#"'#"&5#"&54>767>5463!2@@2*! Q@.'!&=C+S59M34L.9E2 JI UR&4&&4&Lf6Aig6Jy#@>R7J K55K;E@TƾH #A<(H(GY$2NL4K#5#a=4&&4&D=ihv}&?/"( #A  5KK5;+54&#!764/&"2?64/!26 $$ & [6[[j6[&^aa@&4[[6[[6&+^aa+4/&"!"3!277$ $$ [6[ &&[6j[ ^aae6[j[6&&4[j[^aa+4''&"2?;2652?$ $$ [6[[6&&4[^aaf6j[[6[ &&[^aa+4/&"4&+"'&"2? $$ [6&&4[j[6[j^aad6[&& [6[[j^aa   $2>767676&67>?&'4&'.'.'."#&6'&6&'3.'.&'&'&&'&6'&>567>#7>7636''&'&&'.'"6&'6'..'/"&'&76.'7>767&.'"76.7"7"#76'&'.'2#22676767765'4.6326&'.'&'"'>7>&&'.54>'>7>67&'&#674&7767>&/45'.67>76'27".#6'>776'>7647>?6#76'6&'676'&67.'&'6.'.#&'.&6'&.5/a^D&"      4   $!   #          .0"Y +  !       $     "  +       Α      ^aa                        P   ' -( # * $  "  !     * !   (         $      2 ~/$4&"2 #"/&547#"32>32&4&&4V%54'j&&'/덹:,{ &4&&4&V%%l$65&b'Cr! " k[G +;%!5!!5!!5!#!"&5463!2#!"&5463!2#!"&5463!2&&&&&&&&&&&&@&&&&&&&&&&&&{#"'&5&763!2{' **)*)'/!5!#!"&5!3!26=#!5!463!5463!2!2^B@B^&@&`^B`8(@(8`B^ B^^B&&B^(88(^G 76#!"'&? #!"&5476 #"'&5463!2 '&763!2#"'c)'&@**@&('c (&*cc*&' *@&('c'(&*cc*&('c'(&@*19AS[#"&532327#!"&54>322>32"&462 &6 +&'654'32>32"&462QgRp|Kx;CByy 6Fe= BPPB =eF6 ԖV>!pRgQBC;xK|Ԗ{QNa*+%xx5eud_C(+5++5+(C_due2ԖԖ>NQ{u%+*jԖԖp!Ci4/&#"#".'32?64/&#"327.546326#"/&547'#"/&4?632632(* 8( !)(A(')* 8( !USxySSXXVzxTTUSxySSXXVzxT@(  (8 *(('( (8 SSUSx{VXXTTSSUSx{VXXT#!"5467&5432632t,Ԟ;F`j)6,>jK?s !%#!"&7#"&463!2+!'5#8EjjE8@&&&&@XYY&4&&4&qDS%q%N\jx2"&4#"'#"'&7>76326?'&'#"'.'&676326326&'&#"32>'&#"3254?''74&&4&l NnbSVZ bRSD zz DSRb)+USbn \.2Q\dJ'.2Q\dJ.Q2.'Jd\Q2.'Jd`!O` ` &4&&4r$#@B10M5TNT{L5T II T5L;l'OT4M01B@#$*3;$*3;;3*$;3*$: $/ @@Qq`@"%3<2#!"&5!"&5467>3!263! !!#!!46!#!(88(@(8(8(`((8D<++<8(`(8(`8(@(88( 8((`(8((<`(8(``(8||?%#"'&54632#"'&#"32654'&#"#"'&54632|udqܟs] = OfjL?R@T?"& > f?rRX=Edudsq = _MjiL?T@R?E& f > =XRr?b!1E)!34&'.##!"&5#3463!24&+";26#!"&5463!2 08((88(@(8  8((88((`(1  `(88((88(@  `(88(@(8(`#!"&5463!2w@www`@www/%#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&&&&&@'7G$"&462"&462#!"&=463!2"&462#!"&=463!2#!"&=463!2ppppppp @   ppp @    @   Рpppppp  ppp    <L\l|#"'732654'>75"##5!!&54>54&#"'>3235#!"&=463!2!5346=#'73#!"&=463!2#!"&=463!2}mQjB919+i1$AjM_3</BB/.#U_:IdDRE @  k*Gj @   @   TP\BX-@8 C)5Xs J@$3T4+,:;39SG2S.7<  vcc)) %Ll}    5e2#!"&=463%&'&5476!2/&'&#"!#"/&'&=4'&?5732767654'&@02uBo  T25XzrDCBBEh:%)0%HPIP{rQ9f#-+>;I@KM-/Q"@@@#-bZ $&P{<8[;:XICC>.'5oe80#.0(  l0&%,"J&9%$<=DTIcs&/6323276727#"327676767654./&'&'737#"'&'&'&54'&54&#!"3!260% <4"VRt8<@< -#=XYhW8+0$"+dTLx-'I&JKkmuw<=V@!X@ v '|N;!/!$8:IObV;C#V  &   ( mL.A:9 !./KLwPM$@@ /?O_o%54&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!26#!"&5463!2@@@@@@@@@^BB^^B@B^NB^^B@B^^#+3 '$"/&4762%/?/?/?/?%k*66bbbb|<<<bbbbbbbb%k66Ƒbbb<<<<^bbbbbb@M$4&"2!#"4&"2&#"&5!"&5#".54634&>?>;5463!2LhLLh LhLLhL! 'ԖԖ@' !&  ?&&LhLLhL hLLhL jjjj &@6/" &&J#"'676732>54.#"7>76'&54632#"&7>54&#"&54$ ok; -j=yhwi[+PM 3ѩk=J%62>VcaaQ^ ]G"'9r~:`}Ch 0=Z٤W=#uY2BrUI1^Fk[|aL2#!67673254.#"67676'&54632#"&7>54&#"#"&5463ww+U ,iXբW<"uW1AqSH1bdww'74'!3#"&46327&#"326%35#5##33#!"&5463!20U6cc\=hlࠥYmmnnnnw@wwww&46#Ȏ;edwnnnnn@www ]#/#"$&6$3 &#"32>7!5!%##5#5353Еttu{zz{SZC` cot*tq||.EXN#?? ,<!5##673#$".4>2"&5!#2!46#!"&5463!2rM* *M~~M**M~~M*jjj&&&&`P%挐|NN||NN|*jjjj@&&&&@ "'&463!2@4@&Z4@4&@ #!"&4762&&4Z4&&4@@ "'&4762&4@4&@&4&@ "&5462@@4&&44@&&@ 3!!%!!26#!"&5463!2`m` ^BB^^B@B^  `@B^^BB^^@ "'&463!2#!"&4762@4@&&&&44@4&Z4&&4@ "'&463!2@4@&4@4&@ #!"&4762&&4Z4&&4@:#!"&5;2>76%6+".'&$'.5463!2^B@B^,9j9Gv33vG9H9+bI\ A+=66=+A [">nSMA_:B^^B1&c*/11/*{'VO3@/$$/@*?Nh^l+!+"&5462!4&#"!/!#>32]_gTRdgdQV?U I*Gg?!2IbbIJaaiwE3300 084#"$'&6?6332>4.#"#!"&54766$32z䜬m IwhQQhbF*@&('kz   _hQнQGB'(&*eoz(q!#"'&547"'#"'&54>7632&4762.547>32#".'632%k'45%&+~(  (h  &  \(  (  &  ~+54'k%5%l%%l$65+~  &  (  (\  &  h(  (~+%'!)19K4&"24&"26.676&$4&"24&"24&"2#!"'&46$ KjKKj KjKKje2.e<^P,bKjKKjKjKKj KjKKj##LlLKjKKjK jKKjK~-M7>7&54$ LhяW.{+9E=cQdFK1A  0) pJ2`[Q?l&٫C58.H(Y':d 6?32$64&$ #"'#"&'&4>7>7.546'&'&'# '32$7>54'Yj`a#",5NK ~EVZ|$2 $ |: $ 2$|ZV:(t}hfR88T h̲X(  &%(Hw(%& (XZT\MKG{x|!#"'.7#"'&7>3!2%632u  j H{(e 9 1bU#!"&546;5!32#!"&546;5!32#!"&546;5463!5#"&5463!2+!2328((88(``(88((88(``(88((88(`L4`(88(@(88(`4L`(8 (88(@(88((88(@(88((88(@(84L8(@(88((8L48OY"&546226562#"'.#"#"'.'."#"'.'.#"#"&5476$32&"5462И&4&NdN!>! 1X:Dx+  +ww+  +xD:X1 -U !*,*&4&hh&&2NN2D &  ..J< $$ 767#"&'"&547&547&547.'&54>2l4  2cKEooED ) ) Dg-;</- ?.P^P.? -/<;-gYY  .2 L4H|O--O|HeO , , Oeq1Ls26%%4.2,44,2.4%%62sL1qcqAAq4#!#"'&547632!2#"&=!"&=463!54632  @  `     ` ?`   @  @  !    54&+4&+"#"276#!"5467&5432632   `  _ v,Ԝ;G_j)``    _ ԟ7 ,>jL>54'&";;265326#!"5467&5432632    v,Ԝ;G_j) `   `7 ,>jL>X`$"&462#!"&54>72654&'547 7"2654'54622654'54&'46.' &6 &4&&4&yy %:hD:FppG9Fj 8P8 LhL 8P8 E; Dh:% >4&&4&}yyD~s[4Dd=PppP=d>hh>@jY*(88(*Y4LL4Y*(88(*YDw" A4*[s~>M4&"27 $=.54632>32#"' 65#"&4632632 65.5462&4&&4G9& <#5KK5!!5KK5#< &ܤ9Gpp&4&&4&@>buោؐ&$KjKnjjKjK$&jjb>Ppp %!5!#"&5463!!35463!2+32@\\8(@(8\@@\\@\(88(\@ 34#"&54"3#!"&5!"&5>547&5462;U gI@L4@Ԗ@4L2RX='8P8'=XR U;Ig04LjjL4*\(88(\@"4&+32!#!"&+#!"&5463!2pP@@Pjj@@\@\&0pj \\&-B+"&5.5462265462265462+"&5#"&5463!2G9L44L9G&4&&4&&4&&4&&4&L44L &=d4LL4 d=&&`&&&&`&&&&4LL4  &#3CS#!"&5463!2!&'&!"&5!463!2#!"&52#!"&=4632#!"&=463(8((88((`x c`(8@@@`((88(@(8(D 9 8(`@@@@@/?O_o-=%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!!5463!2#!"&5463!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ &&&&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @   `&&&& /?O_o%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!#!"&=!!5463!24&+"#54&+";26=3;26%#!"&5463!463!2!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ 8(@(8 @  @  @  @  @ &&&@8((8@&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @  (88(  @  ``   `` -&&& (88(&@<c$4&"2!#4&"254&+54&+"#";;26=326+"&5!"&5#"&46346?>;463!2KjKKjKjKKj&ԖԖ&&@&&KjKKjK jKKjK .&jjjj&4&@@&&#'1?I54&+54&+"#";;26=326!5!#"&5463!!35463!2+32 \\8(@(8\ \\@\(88(\: #32+53##'53535'575#5#5733#5;2+3@E&&`@@` `@@`&&E%@`@ @ @      @ 0 @!3!57#"&5'7!7!K5@   @5K@@@ #3%4&+"!4&+";265!;26#!"&5463!2&&&&&&&&w@www&&@&&&&@&&@www#354&#!4&+"!"3!;265!26#!"&5463!2&&&&&@&&@&w@www@&@&&&&&&@&:@www-M3)$"'&4762 "'&4762 s 2  .   2 w 2  .   2 w 2    2  ww  2    2  ww M3)"/&47 &4?62"/&47 &4?62S .  2 w 2   .  2 w 2  M . 2    2 .  . 2    2 .M3S)$"' "/&4762"' "/&47623 2  ww  2    2  ww  2    2 w 2   .v 2 w 2   .M3s)"'&4?62 62"'&4?62 623 .  . 2    2 .  . 2    2 .   2 w 2v .   2 w 2-Ms3 "'&4762s w 2  .   2 ww  2    2 MS3"/&47 &4?62S .  2 w 2  M . 2    2 .M 3S"' "/&47623 2  ww  2   m 2 w 2   .M-3s"'&4?62 623 .  . 2    2- .   2 w 2/4&#!"3!26#!#!"&54>5!"&5463!2  @ ^B && B^^B@B^ @  MB^%Q= &&& $$ (r^aa(^aa!C#!"&54>;2+";2#!"&54>;2+";2pPPpQh@&&@j8(PppPPpQh@&&@j8(Pp@PppPhQ&&j (8pPPppPhQ&&j (8p!C+"&=46;26=4&+"&5463!2+"&=46;26=4&+"&5463!2Qh@&&@j8(PppPPpQh@&&@j8(PppPPp@hQ&&j (8pPPppP@hQ&&j (8pPPpp@@ #+3;G$#"&5462"&462"&462#"&462"&462"&462"&462#"&54632K54LKj=KjKKjKjKKjL45KKjK<^^^KjKKjppp\]]\jKL45KjKKjKujKKjK4LKjKK^^^jKKjKpppr]]\  $$ ^aaQ^aa,#"&5465654.+"'&47623   #>bqb&44&ɢ5"  #D7euU6 &4&m 1X".4>2".4>24&#""'&#";2>#".'&547&5472632>3=T==T==T==T=v)GG+v@bRRb@=&\Nj!>3lkik3hPTDDTPTDDTPTDDTPTDD|x xXK--K|Mp<# )>dA{RXtfOT# RNftWQ,%4&#!"&=4&#!"3!26#!"&5463!2!28(@(88((88((8\@\\@\\(88(@(88(@(88@\\\\ u'E4#!"3!2676%!54&#!"&=4&#!">#!"&5463!2!2325([5@(\&8((88((8,9.+C\\@\ \6Z]#+#,k(88(@(88(;5E>:5E\\\ \1. $4@"&'&676267>"&462"&462.  > $$ n%%/02 KjKKjKKjKKjKfff^aayy/PccP/jKKjKKjKKjKffff@^aa$4@&'."'.7>2"&462"&462.  > $$ n20/%7KjKKjKKjKKjKfff^aa3/PccP/y jKKjKKjKKjKffff@^aa +7#!"&463!2"&462"&462.  > $$ &&&&KjKKjKKjKKjKfff^aa4&&4&jKKjKKjKKjKffff@^aa#+3C54&+54&+"#";;26=3264&"24&"2$#"'##"3!2@@KjKKjKKjKKjKܒ,gjKKjKKjKKjKXԀ,, #/;GS_kw+"=4;27+"=4;2'+"=4;2#!"=43!2%+"=4;2'+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;54;2!#!"&5463!2`````````````````````p`K55KK55Kp`````````````````````````5KK55KK@*V#"'.#"63232+"&5.5462#"/.#"#"'&547>32327676R?d^7ac77,9xm#@#KjK# ڗXF@Fp:f_ #WIpp&3z h[ 17q%q#::#5KKu't#!X: %#+=&>7p @ *2Fr56565'5&'. #"32325#"'+"&5.5462#"/.#"#"'&547>32327676@ͳ8 2.,#,fk*1x-!#@#KjK# ڗXF@Fp:f_ #WIpp&3z e`vo8t-  :5 [*#::#5KKu't#!X: %#+=&>7p  3$ "/&47 &4?62#!"&=463!2I.  2 w 2   -@). 2    2 . -@@-S$9%"'&4762  /.7> "/&47 &4?62i2  .   2 w E > u > .  2 w 2   2    2  ww !   h. 2    2 . ;#"'&476#"'&7'.'#"'&476' )'s "+5+@ա' )'F*4*Er4M:}}8 GO *4*~ (-/' #"'%#"&7&67%632B;>< V??V --C4 <B=cB5 !% %!b 7I))9I7 #"'.5!".67632y( #  ##@,( )8! !++"&=!"&5#"&=46;546;2!76232-SSS  SS``  K$4&"24&"24&"27"&5467.546267>5.5462 8P88P88P88P8P88P4,CS,4pp4,,4pp4,6d7AL*',4ppP88P8P88P8HP88P8`4Y&+(>EY4PppP4Y4Y4PppP4Y%*54&#"#"/.7!2<'G,')7N;2]=A+#H  0PRH6^;<T%-S#:/*@Z}   >h.%#!"&=46;#"&=463!232#!"&=463!2&&&@@&&&@&&&&&&&&&&&&f&&&&b#!"&=463!2#!"&'&63!2&&&&''%@% &&&&&&&&k%J%#/&'#!53#5!36?!#!'&54>54&#"'6763235 Ź}4NZN4;)3.i%Sin1KXL7觧*  #& *@jC?.>!&1' \%Awc8^;:+54&#"'6763235 Ź}4NZN4;)3.i%PlnEcdJ觧*  #& *-@jC?.>!&1' \%AwcBiC:D'P%! #!"&'&6763!2P &:&? &:&?5"K,)""K,)h#".#""#"&54>54&#"#"'./"'"5327654.54632326732>32YO)I-D%n  "h.=T#)#lQTv%.%P_ % %_P%.%vUPl#)#T=@/#,-91P+R[Ql#)#|'' 59%D-I)OY[R+P19-,##,-91P+R[YO)I-D%95%_P%.%v'3!2#!"&463!5&=462 =462 &546 &&&&&4&r&4&@&4&&4&G݀&&&&f s CK&=462 #"'32=462!2#!"&463!5&'"/&4762%4632e*&4&i76`al&4&&&&&}n  R   R zfOego&&5`3&&&4&&4& D R   R zv"!676"'.5463!2@@w^Cct~5  5~tcC&&@?JV|RIIR|V&&#G!!%4&+";26%4&+";26%#!"&546;546;2!546;232@@@@L44LL4^B@B^^B@B^4L  N4LL44L`B^^B``B^^B`LL4&"2%#"'%.5!#!"&54675#"#"'.7>7&5462!467%632&4&&4  @ o&&}c ;pG=(  8Ai8^^.   &4&&4&` ` fs&& jo/;J!# 2 KAE*,B^^B! ` $ -4&"2#"/&7#"/&767%676$!28P88PQr @ U @ {`PTP88P8P`  @U @rQ!6'&+!!!!2Ѥ 8̙e;<*@8 !GGGQII %764' 64/&"2 $$ f3f4:4^aaf4334f:4:^aa %64'&" 2 $$ :4f3f4F^aa4f44f^aa 764'&"27 2 $$ f:4:f4334^aaf4:4f3^aa %64/&" &"2 $$ -f44f4^aa4f3f4:w^aa@7!!/#35%!'!%j/d jg2|855dc b @! !%!!7!FG)DH:&H dS)U4&"2#"/ $'#"'&5463!2#"&=46;5.546232+>7'&763!2&4&&4f ]wq4qw] `dC&&:FԖF:&&Cd`4&&4& ]] `d[}&&"uFjjFu"&&y}[d#2#!"&546;4 +"&54&" (88(@(88( r&@&Ԗ8((88(@(8@&&jj'3"&462&    .  > $$ Ԗ>aX,fff^aaԖԖa>TX,,~ffff@^aa/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88((88((88((88((88/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88(88((88(88((885E$4&"2%&'&;26%&.$'&;276#!"&5463!2KjKKj   f  \ w@wwwjKKjK"G   ܚ  f   @www   $64'&327/a^ ! ^aaJ@%% 65/ 64'&"2 "/64&"'&476227<ij6j6u%k%~8p8}%%%k%}8p8~%<@% %% !232"'&76;!"/&76  ($>( J &% $%64/&"'&"2#!"&5463!2ff4-4ff4fw@wwwf4f-f4@www/#5#5'&76 764/&"%#!"&5463!248` # \P\w@www4`8  #@  `\P\`@www)4&#!"273276#!"&5463!2& *f4 'w@www`&')4f*@www%5 64'&"3276'7>332#!"&5463!2`'(wƒa8! ,j.( &w@www`4`*'?_`ze<  bw4/*@www-.  6 $$  (r^aaO(_^aa -"'&763!24&#!"3!26#!"&5463!2yB(( @   w@www]#@##   @ @www -#!"'&7624&#!"3!26#!"&5463!2y((@B@u @   w@www###@  @ @www -'&54764&#!"3!26#!"&5463!2@@####@w@wwwB((@@www`%#"'#"&=46;&7#"&=46;632/.#"!2#!!2#!32>?6#  !"'?_  BCbCaf\ + ~2   }0$  q 90r p r%D p u?#!"&=46;#"&=46;54632'.#"!2#!!546;2D a__ g *`-Uh1    ߫}   $^L  4b+"&=.'&?676032654.'.5467546;2'.#"ǟ B{PDg q%%Q{%P46'-N/B).ĝ 9kC< Q 7>W*_x*%K./58`7E%_ ,-3  cVO2")#,)9;J) "!* #VD,'#/&>AX>++"''&=46;267!"&=463!&+"&=463!2+32Ԫ$   pU9ӑ @/*f o  VRfq f=SE!#"&5!"&=463!5!"&=46;&76;2>76;232#!!2#![       % )   "  Jg Uh BW&WX hU g 84&#!!2#!!2#!+"&=#"&=46;5#"&=46;463!2j@jo g|@~vv u n#467!!3'##467!++"'#+"&'#"&=46;'#"&=46;&76;2!6;2!6;232+32QKt# #FNQo!"դѧ !mY Zga~bm] [o"U+, @h h@@X hh @83H\#5"'#"&+73273&#&+5275363534."#22>4.#2>ut 3NtRP*Ho2 Lo@!R(Ozh=,GID2F 8PuE>.'%&TeQ,jm{+>R{?jJrL6V @`7>wmR1q uWei/rr :Vr" $7V4&#"326#"'&76;46;232!5346=#'73#"'&'73267##"&54632BX;4>ID2F +>R{8PuE>.'%&TeQ,jm{?jJrL6 @`rr :Vr3>wmR1q uWei@ \%4&#"326#!"&5463!2+".'&'.5467>767>7>7632!2&%%&&&& &7.' :@$LBWM{#&$h1D!  .I/! Nr&&%%&&&&V?, L=8=9%pEL+%%r@W!<%*',<2(<&L,"r@ \#"&546324&#!"3!26%#!#"'.'.'&'.'.546767>;&%%&&&& &i7qN !/I.  !D1h$&#{MWBL$@: '.&&%%&&&&=XNr%(M&<(2<,'*%<!W@r%%+LEp%9=8=L  +=\d%54#"327354"%###5#5#"'&53327#"'#3632#"'&=4762#3274645"=424'.'&!  7>76#'#3%54'&#"32763##"'&5#327#!"&5463!2BBPJNC'%! B? )#!CC $)  54f"@@ B+,A  A+&+A  ZK35N # J!1331CCC $)w@www2"33FYF~(-%"o4*)$(* (&;;&&9LA3  8334S,;;,WT+<<+T;(\g7x:&&::&&<r%-@www  +=[c}#"'632#542%35!33!3##"'&5#327%54'&#"5#353276%5##"=354'&#"32767654"2 '.'&547>76 3#&'&'3#"'&=47632%#5#"'&53327''RZZ:kid YYY .06 62+YY-06 R[!.'CD''EH$VVX::Y X;:Y fyd/%jG&DC&&CD&O[52. [$C-D..D^^* ly1%=^I86i077S 3 $EWgO%33%OO%35 EEFWt;PP;pt;PP;pqJgTFQ%33&PP%33%R 7>%3!+}{'+"&72'&76;2+"'66;2U &  ( P *'eJ."-dZ-n -'74'&+";27&+";276'56#!"&5463!2~} 7e  ۩w@www"  $Q #'!# @www I-22#!&$/.'.'.'=&7>?>369II ! ' $ !01$$%A' $ ! g  \7@)(7Y   \7@)(7Y @ '5557 ,VWQV.RW=?l%l`~0  !#!#%777 5! R!!XCCfff݀# `,{{{`Og4&"2 &6 $"&462$"&62>7>7>&46.'.'. '.'&7>76 Ԗ HR6L66LGHyU2L  L2UyHHyU2L  L2UyHn X6X  XX ԖԖH6L66L6 L2UyHHyU2L  L2UyHHyU2L n6X  XX  2#!"&54634&"2$4&"2ww@ww||||||w@www||||||| !3 37! $$ n6^55^h ^aaM1^aaP *Cg'.676.7>.'$7>&'.'&'? 7%&'.'.'>767$/u5'&$I7ob?K\[zH,1+.@\7':Yi4&67&'&676'.'>7646&' '7>6'&'&7>7#!"&5463!2PR$++'TJXj7-FC',,&C ."!$28 h /" +p^&+3$ i0(w@www+.i6=Bn \C1XR:#"'jj 8Q.cAj57!? "0D$4" P[ & 2@wwwD"%.5#5>7>;!!76PYhpN!HrD0M C0N#>8\xx: W]oW-X45/%'#.5!5!#"37>#!"&5463!2p>,;$4 5eD+WcEw@wwwK()F ,VhV^9tjA0/@www@#"'&76;46;23   &  ++"&5#"&7632  ^  c  & @#!'&5476!2 &  ^  b '&=!"&=463!546  &    q&8#"'&#"#"5476323276326767q'T1[VA=QQ3qqHih"-bfGw^44O#A?66%CKJA}} !"䒐""A$@C3^q|z=KK?6 lk)  %!%!VVuuu^-m5w}n~7M[264&"264&"2"&546+"&=##"&5'#"&5!467'&766276#"&54632    *<;V<<O@-K<&4'>&4.'.'.'.'.'&6&'.'.6767645.'#.'6&'&7676"&'&627>76'&7>'&'&'&'&766'.7>7676>76&6763>6&'&232.'.6'4."7674.'&#>7626'.'&#"'.'.'&676.67>7>5'&7>.'&'&'&7>7>767&'&67636'.'&67>7>.'.67 \  U7  J#!W! '  " ';%  k )"    '   /7*   I ,6 *&"!   O6* O $.( *.'  .x,  $CN      * 6   7%&&_f& ",VL,G$3@@$+ "  V5 3"  ""#dA++ y0D- %&n 4P'A5j$9E#"c7Y 6" & 8Z(;=I50 ' !!e  R   "+0n?t(-z.'< >R$A"24B@( ~ 9B9, *$        < > ?0D9f?Ae  .(;1.D 4H&.Ct iY% *  7      J  <    W 0%$  ""I! *  D  ,4A'4J" .0f6D4pZ{+*D_wqi;W1G("% %T7F}AG!1#%  JG 3  '.2>Vb%&#'32&'!>?>'&' &>"6&#">&'>26 $$ *b6~#= XP2{&%gx| .W)oOLOsEzG< CK}E $MFD<5+ z^aa$MWM 1>]|YY^D եA<KmE6<" @9I5*^aa>^4./.543232654.#"#".#"32>#"'#"$&547&54632632':XM1h*+D($,/9p`DoC&JV;267676&#!"&=463!267 #!"'&5463!26%8#! &&Z"M>2! ^I 7LRx_@>MN""`=&&*%I},  L7_jj9/%4&#!"3!264&#!"3!26#!"&5463!2  &&&&&&&&19#"'#++"&5#"&5475##"&54763!2"&4628(3- &B..B& -3(8IggI`(8+Ue&.BB.&+8(kk`%-"&5#"&5#"&5#"&5463!2"&4628P8@B\B@B\B@8P8pPPp@`(88(`p.BB.0.BB.(88(Pppͺ!%>&'&#"'.$ $$ ^/(V=$<;$=V).X^aaJ`"(("`J^aa,I4."2>%'%"/'&5%&'&?'&767%476762%6[՛[[՛o ܴ   $ $ " $ $  ՛[[՛[[5` ^ ^ 2` `2 ^ ^ ` 1%#"$54732$%#"$&546$76327668ʴhf킐&^zs,!V[vn) 6<ׂf{z}))Ns3(@ +4&#!"3!2#!"&5463!2#!"&5463!2@&&&f&&&&@&&&&4&&4&@&&&&&&&& `BH+"/##"./#"'.?&5#"&46;'&462!76232!46 `&C6@Bb03eI;:&&&4L4&F Z4&w4) '' 5r&4&&4&&4}G#&/.#./.'&4?63%27>'./&'&7676>767>?>%6})(."2*&@P9A #sGq] #lh<* 46+(  < 5R5"*>%"/ +[>hy  K !/Ui%6&'&676&'&6'.7>%.$76$% $.5476$6?62'.76&&'&676%.76&'..676#"NDQt -okQ//jo_  %&JՂYJA-.-- 9\DtT+X?*<UW3' 26$>>W0 {"F!"E    ^f`$"_]\<`F`FDh>CwlsJ@ ;=?s  :i_^{8+?` ) O`s2RDE58/Kr #"'>7&4$&5mī"#̵$5$"^^W=acE*czk./"&4636$7.'>67.'>65.67>&/>z X^hc^O<q+f$H^XbVS!rȇr?5GD_RV@-FbV=3! G84&3Im<$/6X_D'=NUTL;2KPwtPt=  &ռ ,J~S/#NL,8JsF);??1zIEJpqDIPZXSF6\?5:NR=;.&1 +!"&=!!%!5463!2sQ9Qs***sQNQsBUw wUBFHCCTww%1#"&=!"&=463!54632.  6 $$     ` ?(r^aa    (_^aa%1#!#"'&47632!2.  6 $$   @  ` (r^aa  ?  @  (_^aa/#"'&476324&#!"3!26#!"&5463!2&@& @   w@www& @B@ &  @ @www"&462  >& $$ Ԗ*(r^aaԖԖ (^aa]6#"$54732>%#"'!"&'&7>32'!!!2f:лѪz~u: ((%`V6B^hD%i(]̳ޛ *>6߅r#! 3?^BEa߀#9#36'&632#"'&'&63232#!"&5463!2 Q,&U #+' ;il4L 92<D`w@www`9ܩ6ɽ ]`C477&@wwwD+"&5#"'&=4?5#"'&=4?546;2%6%66546;2  wwwwcB G]B Gty]ty #3C#!+"&5!"&=463!46;2!24&#!"3!26#!"&5463!2@`@`^BB^^B@B^www@w@`@`2@B^^BB^^ww@w'/?P+5#"&547.467&546;532!764'!"+32#323!&ln@ :MM: @nY*Yz--zY*55QDDU9pY-`]]`.X /2I$ t@@/!!/@@3,$,3$p$00&*0&& !P@RV2#"&/#"&/#"&546?#"&546?'&54632%'&54632763276%>S]8T;/M77T7%>ww@ww!"5bBBb// * 8(@(87)(8=%/' #?w@www#~$EE y &L(88e):8(%O r    O?GQaq47&67>&&'&67>&"$32#"#"'654  $&6 $6&$ CoL.*K  Px.* iSƓ i 7J ?~pi{_Я;lLUZ=刈刈_t'<Z :!   @! j`Q7  $ky, Rfk*4LlL=Z=刈&$&546$7%7&'5>]5%w&P?zrSF!| &0 ##!"&5#5!3!3!3!32!546;2!5463) );));;))&&&@@&&&  6 $&727"'%+"'&7&54767%&4762֬>4P t+8?::  ::A W` `EvEEvE<."e$IE&O &EI&{h.`m"&#"&'327>73271[ >+)@ (]:2,C?*%Zx/658:@#N C= E(oE=W'c:#!#"$&6$3 &#"32>7! ڝyy,{ۀہW^F!LC=y:yw߂0H\R%"N^ '&76232762$"&5462"&46274&"&'264&#"'&&#"32$54'>$ $&6$ G>>0yx14J55J5J44J5Fd$?4J55%6E#42F%$fLlLq>>11J44%&4Z%44J54R1F$Z-%45J521Z%F1#:ʎ 9LlL#Qa"'&7622762%"&5462"&546274&#"&'73264&#"'&&#"32654'>#!"&5463!2 55 **.>.-@-R.>.-@-<+*q6- -- 0OpoOxzRrqP6z~{{Prr^aa]054&"#"&5!2654632!#"&57265&'&#".'&'#"&5467%&4>7>3263232654.547'654'63277.'.*#">7?67>?>32#"'7'>3'>3235?KcgA+![,7*  2(-#=  /~[(D?G  |,)"# +)O8,+'6 y{=@0mI#938OAE` -  )y_/FwaH8j7=7?%a % %!?)L J 9=5]~pj  %(1$",I  $@((  +!.S -L__$'-9L 5V+ 6 T+6.8- $ 0 + t |S 16]&#"'&#"67>76'&'&#"67>32764.#"#.32>67>7 $&54>7>7>7rJ@ "kb2)W+ ,5/1   #   Z -!$IOXp7sLCF9vz NAG#/ 5|Հ';RKR/J#=$,9,+$UCS7'2"1  ! / ,   /--ST(::(ep4AM@=I>".)xΤlsY|qK@ %(YQ&N EHv~<Zx'#"&5467&6?2?'&"/.7.546326#"&'&/7264/7'764&"'?>>32.AUpIUxYE.A %%%h% %hJ%D,FZxULs TgxUJrVD %hJ%@/LefL.C %Jh%CV sNUxϠ@.FZyUHpVA %h&%% %Ji%CWpIUybJ/Uy^G,D %Jh%@U sMt UC %hJ%C-KfyEX[_gj&/&'.''67>7>7&'&'&'>76763>7>#&'&'767672'%'7'+"&'&546323267>7%#"'4'6767672,32,+DCCQLDf' % :/d B 4@ }  &!0$?Jfdf-.=6(:!TO? !IG_U% . k*.=; 5gN_X "  ##  292Q41   *6nA;| BS N.  %1$ 6 $nk^ '7GWgw2+"&5463#!"&5463!254&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26#"&=! B^^BB^^B:FjB^8((`( `(8^BB^^B@B^"vEj^B(8(`(8(/?O_o/?2#!"&5463;26=4&+";26=4&+";26=4&+";26=4&+"54&+";2654&+";2654&+";2654&+";2654&+";2654&#!"3!2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`' "&5#"&5&4762!762$"&462B\B@B\BOpP.BB..BB.8$PO広3CQ#".54>32#".546322#"&#"#"54>%".54>32%2#"&54> &X=L|<&X=M{2r_-$$-_rUU%&&5%ő'- "'.546762@FF$@B@$.&,&.]]|q#<<#(BB B%'-%'-'%'-"'%&'"'%.5467%467%62@ll@ll,@GG&!@@@@@@!&+#+#6#+$*`:p:px p=`$>>$&@&@ @&p@ &.A!!"!&2673!"5432!%!254#!5!2654#!%!2#!8Zp?vdΊens6(N[RWu?rt1SrF|iZ@7މoy2IMC~[R yK{T:%,AGK2#!"&5463!!2654'654.#532#532"&5!654&#"327#2#>!!ww@ww~uk'JTMwa| DH> I1q Fj?w@wwwsq*4p9O*¸Z^qh LE "(nz8B M'?"&4624&#"'.'324&#"3267##"&/632632.ʏhhMALR vGhг~~K „yO^   ʏʏВ*LM@!שwwȍde)qrOPqȦs:03=7'.?67'67%'>&%'7%7./6D\$>  "N,?a0#O 1G9'/P(1#00  ($=!F "9|]"RE<6 'o9%8J$\ :\HiTe<?}V#oj? d,6%N#" HlSVY]C =@C4&"2!.#!"4&"2+"&=!"&=#"&546;>3!232^^^Y ^^^`pppp`]ibbi]~^^^e^^^PppPPppP]^^]3;EM2+"&=!"&=#"&546;>;5463!232264&"!.#!"264&" ]`pppp`]ibbi^^^dY !^^^]@PppP@@PppP@]^^] ^^^e^^^ 3$#!#!"&5467!"&47#"&47#"&4762++&2 $$ 2&&&4&&Z4&&##&&4&4&44&m4&m+DP4'&#"32763232674'&!"32763 3264'&$#"32763232> $$ g* o`#ə0#z#l(~̠) -g+^aaF s" +g (* 3#!| #/IK/%*%D= )[^aa !!!'!!77!,/,-a/G t%/;<HTbcq%7.#"32%74'&"32765"/7627#"5'7432#"/7632#"5'7432#"&5'74632 #"/6327#"/6327#"/46329"&/462"&/>21"&/567632#!.547632632  *     X    ^  `    ^  b  c   fu U`59u  4J   l~ ~ F 2    m | O,           ru| u  " )9 $7 $&= $7 $&= $7 $&=  $&=46w`ww`ww`wb`VTEvEEvETVTEvEEvET*VTEvEEvET*EvEEvEEvEEv#^ct#!"&5463!2!&'&!"&5!632#"&'#"/&'&7>766767.76;267674767&5&5&'67.'&'&#3274(8((88((`x c`(8!3;:A0?ݫY   ^U 47D$    74U3I  |L38wtL0`((88(@(8(D 9 8(Q1&(!;  (g- Up~R2(/{E(Xz*Z%(i6CmVo8 #T#!"&5463!2!&'&!"&5!3367653335!3#4.5.'##'&'35(8((88((`x c`(8iFFZcrcZ`((88(@(8(D 9 8(kk" kkJ  ! k#S#!"&5463!2!&'&!"&5!%!5#7>;#!5#35!3#&'&/35!3(8((88((`x c`(8-Kg kL#DCJg  jLD`((88(@(8(D 9 8(jj jjkk kk#8C#!"&5463!2!&'&!"&5!%!5#5327>54&'&#!3#32(8((88((`x c`(8 G]L*COJ?0R\wx48>`((88(@(8(D 9 8(jjRQxk !RY#*2#!"&5463!2!&'&!"&5!!57"&462(8((88((`x c`(8Pppp`((88(@(8(D 9 8(ppp  #*7JR5#5#5#5##!"&5463!2!&'&!"&5##5!"&54765332264&"<(8((88((`x c`(8kޑcO"jKKjK`((88(@(8(D 9 8(SmmS?M&4&&4#9L^#!"&5463!2!&'&!"&5!#"/#"&=46;76276'.'2764'.(8((88((`x c`(8 6ddWW6&44`((88(@(8(D 9 8(. G5{{5]]$5995#3C#!"&5463!2!&'&!"&5!2#!"&5463#"'5632(8((88((`x c`(84LL44LL4l  `((88(@(8(D 9 8(L44LL44L  Z #7K[#!"&5463!2!&'&!"&5!>&'&7!/.?'&6?6.7>'(8((88((`x c`(8` 3  3  3  3 v  ?  `((88(@(8(D 9 8( & & - & &  ?   '6#'. '!67&54632".'654&#"32eaAɢ/PRAids`WXyzOvд:C;A:25@Ң>-05rn`H( ' gQWZc[ -%7' %'-'% %"'&54762[3[MN 3",""3,3"ong$߆]gn$+) ")")" x#W#"&#!+.5467&546326$32327.'#"&5463232654&#"632#".#"oGn\ u_MK'̨|g? CM7MM5,QAAIQqAy{b]BL4PJ9+OABIRo?z.z n6'+s:zcIAC65D*DRRD*wyal@B39E*DRRD*'/7  $&6$ 6277&47' 7'"' 6& 6'lLRRZB|RR>dZZLlLZRR«Z&>«|R ! $&54$7 >54'5PffP牉@s-ff`-c6721>?>././76&/7>?>?>./&31#"$&(@8!IH2hM>'  )-* h'N'!'Og,R"/!YQG54'63&547#5#"=3235#47##6323#324&"26%#!"&5463!2F]kbf$JMM$&N92Z2&`9UW=N9:PO;:dhe\=R +)&')-S99kJ<)UmQ/-Ya^"![Y'(<`X;_L6#)|tWW:;X  #'#3#!"&5463!2) p*xeשw@www0,\8@www9I#"'#"&'&>767&5462#"'.7>32>4."&'&54>32JrO<3>5-&FD(=Gq@C$39aLL²L4 &) @]v q#CO!~󿵂72765'./"#"&'&5 }1R<2" 7MW'$  ;IS7@5sQ@@)R#DvTA ; 0x I)!:> +)C 6.> !-I[4&#"324&#"3264&#"324&#"326&#"#".'7$4$32'#"$&6$32D2)+BB+)3(--(31)+BB+)4'--'4'#!0>R HMŰ9ou7ǖD䣣 R23('3_,--,R23('3_,--,NJ ?uWm%#"'%#"'.5 %&'&7632! ; `u%"(!]#c)(  #"'%#"'.5%&'&76 !  (%##fP_"(!)'+ʼn4I#"$'&6?6332>4.#"#!"&54766$32#!"&=46;46;2z䜬m IwhQQhbF*@&('k@z   _hQнQGB'(&*eozΘ@@`  >. $$ ffff^aafff^aa>"&#"#"&54>7654'&#!"#"&#"#"&54>765'46.'."&54632326323!27654'.5463232632,-,,",:! %]& %@2(/.+*)6! <.$..**"+8#  #Q3,,++#-:#"$$ /:yuxv)%$ /?CG%!5%2#!"&5463!5#5!52#!"&54632#!"&5463#5!5`&&&& &&&&&&&&@&&&&&&&&&&&&%2 &547%#"&632%&546 #"'6\~~\h ~\h\ V V VV%5$4&#"'64'73264&"&#"3272#!"&5463!2}XT==TX}}~>SX}}XS>~}w@www~:xx:~}}Xx9}}9xX}@www/>LXds.327>76 $&6$32762#"/&4762"/&47626+"&46;2'"&=462#"'&4?62E0l,  *"T.D@Yooo@5D [  Z  Z  [ ``[ Z  2 ,l0 (T" .D5@oooY@D, Z  [  [  Z ``EZ  [ 5%!  $&66='&'%77'727'%amlLmf?55>fFtuutFLlLHYC L||L Y˄(E''E*( /?IYiy%+"&=46;2+"&=46;2+"&=46;2+"&=46;2%"&=!#+"&=46;2+"&=46;2+"&=46;2+"&=46;2!54!54>$ +"&=46;2#!"&=@&&@3P > P3&&rrr&&rrr he 4LKM:%%:MKL4WT&&%/9##!"&563!!#!"&5"&5!2!5463!2!5463!2&&&&&&  &&&i@&&@&7'#5&?6262%%o;j|/&jJ%p&j;&i&p/|jţ%Jk%o%  :g"&5462#"&546324&#!"263662>7'&75.''&'&&'&6463!276i~ZYYZ~@OS;+[G[3YUD#o?D&G3I=JyTkBuhNV!WOhuAiSy*'^CC^'*SwwSTvvTSwwSTvvWID\_"[ gq# /3qFr2/ $rg%4 HffHJ4d#!#7!!7!#5!VFNrmNNN N!Y+?Ne%&'&'&7>727>'#&'&'&>2'&'&676'&76$7&'&767>76 '6# <;11x# *# G,T93%/#0vNZ;:8)M:( &C.J}2 %0  ^*  JF &7'X"2LDM" +6 M2+'BQfXV#+] #' L/(eB9  #,8!!!5!!5!5!5!5#26%!!26#!"&5!5&4& &pPPp@@&&@!&@PppP@*  9Q$"&54627"."#"&547>2"'.#"#"&5476$ "'&$ #"&5476$ (}R}hLK NN Ud: xx 8    ,, |2222 MXXM ic,>>,   ̺  '/7?KSck{4&"2$4&"24&"24&"24&"24&"24&"24&"24&"264&"24&#!"3!264&"2#!"&5463!2KjKKjKjKKjKjKKjKKjKKjKjKKjKjKKjKKjKKjKjKKjKLhLLhLKjKKj&&&&KjKKjL44LL44L5jKKjKKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjK4LL44LLjKKjK&&&&jKKjK4LL44LL 'E!#"+"&7>76;7676767>'#'"#!"&7>3!2W",&7' #$ &gpf5 O.PqZZdS -V"0kqzTxD!!8p8%'i_F?;kR(` !&)' (2!&6367! &63!2! `B 1LO(+#=)heCQg#s`f4#6q'X|0 -g >IY#6?>7&#!%'.'33#&#"#"/3674'.54636%#"3733#!"&5463!24  : @7vH%hEP{0&<'VFJo1,1.F6A#L44LL44L"% 7x'6 O\JYFw~v^fH$ ! "xdjD"!6`J4LL44LL +3@GXcgqz -<JX{&#"327&76'32>54.#"35#3;5#'#3537+5;3'23764/"+353$4632#"$2#462#"6462""'"&5&5474761256321##%354&'"&#"5#35432354323=#&#"32?4/&54327&#"#"'326'#"=35#5##3327"327'#"'354&3"5#354327&327''"&46327&#"3=#&#"32?"5#354327&3=#&"32?"#3274?67654'&'4/"&#!"&5463!2_gQQh^_~\[[\]_^hQQge<F$$$ !!&&/ !/  !! 00/e&'!"e$   '!!''   8''NgL44LL44LUQghQUk=("  ! =))=2( '! 'L#(>( & DC(>(zL#DzG)<)4LL44LL  BWbjq}+532%+5324&+32763#4&'.546327&#"#"'3265#"&546325&#"32 !264&"2%#'#735#535#535#3'654&+353#!"&5463!29$<=$@?SdO__J-<AA@)7")9,<$.%0*,G3@%)1??.+&((JgfJ*A!&jjjGZYGиwsswPiL>8aA !M77MM77M3! 4erJ]&3YM(, ,%7(#)  ,(@=)M%A20C&Mee(X0&ĖjjjV 8Z8J9N/4$ 8NN88NN  #&:O[ $?b3'7'#3#%54+32%4+324+323'%#5#'#'##337"&##'!!732%#3#3##!"&53733537!572!56373353#'#'#"5#&#!'#'#463!2#"5#"5!&+&+'!!7353273532!2732%#54&+#32#46.+#2#3#3##+53254&".546;#"67+53254&.546;#"#'#'##"54;"&;7335wY-AJF=c(TS)!*RQ+*RQ+Y,B^9^Ft`njUM ') ~PSPRm٘M77Mo7q @)U 8"E(1++NM77Mx378D62W74;9<-A"EA0:A F@1:ؗBf~~""12"4(w$#11#@}}!%+%5(v$:O\zK?* $\amcrVlOO176Nn23266&+"&#"3267;24&+"'&+";27%4&+";2?>23266&+"&#"3267;254+";27#76;2#!"&5463!23%#2%%,,  _3$$2%%M>AL Vb5)LDHeE:< EM j,K'-R M ~M>AR  Vb5)LEHeE:< E J ABI*'! ($rL44LL44Lv%1 %3!x*k $2 %3!;5h n a !(lI;F   rp p8;5h t a !(lI;F ` #k 4LL44LL  2HW[lt#"'5632#6324&'.54327&#"#"&'32767#533275#"=5&#"'#36323#4'&#"'#7532764&"24'&#"327'#"'&'36#!"&5463!2=!9n23BD$ &:BCRM.0AC'0RH`Q03'`.>,&I / * / 8/n-(G@5$ S3=,.B..B02^`o?7je;9G+L44LL44LyE%# Vb;A !p &'F:Aq)%)#orgT$ v2 8)2z948/{ 8AB..B/q?@r<7(g/4LL44LL ?#!"&'24#"&54"&/&6?&5>547&54626=L4@ԕ;U g3 T 2RX='8P8|5 4Ljj U;Ig@   `  "*\(88(]k  &N4#"&54"3 .#"#!"&'7!&7&/&6?&5>547&54626;U gIm*]Z0L4@ԕ=o=CT T 2RX='8P8|5  U;IgXu?bl3@4Ljja`   `  "*\(88(]k/7[%4&+";26%4&+";26%4&+";26!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@0 o`^BB^`5FN(@(NF5@@@u  @LSyuS@%44%,<H#"5432+"=4&#"326=46;2  >. $$ ~Isy9"SgR8vHD w ffff^aam2N+ )H-mF+10*F +fff^aab4&#"32>"#"'&'#"&54632?>;23>5!"3276#"$&6$3 k^?zb=ka`U4J{K_/4^W&  vx :XB0܂ff ) fzzXlz=lapzob35!2BX G@8  ' '=vN$\ff  1 SZz8zX#("/+'547'&4?6276 'D^h  i%5@%[i  h]@]h  i%@5%[i  h^@@)2#"&5476#".5327>OFi-ay~\~;'S{s:D8>)AJfh]F?X{[TC6LlG]v2'"%B];$-o%!2>7>3232>7>322>7>32".'.#"#"&'.#"#"&'.#"#546;!!!!!32#"&54>52#"&54>52#"&54>52-P&+#($P.-P$'#+&PZP&+#"+&P-($P-.P$(#+$P.-P$'#+&P-.P$+#pP@@PpH85K"&ZH85K"&ZH85K"&Z@Pp@@@pMSK5, :&LMSK5, :&LMSK5, :& !!3 ! @@@  #"$$3!!2"jaѻxlalxaaj!!3/"/'62'&63!2'y  `I  yMy `I y'W`#".'.#"32767!"&54>3232654.'&546#&'5&#" 4$%Eӕ;iNL291 ;XxR`f՝Q8TWiWgW:;*:`Qs&?RWXJ8 oNU0 J1F@#) [%6_POQiX(o`_?5"$iʗ\&>bds6aP*< -;iFn* -c1BWg4'.'4.54632#7&'.#"#"'.#"32767'#"&54632326#!"&5463!2#$( 1$6]' !E3P|ad(2S;aF9'EOSej]m] <*rYshpt.#)$78L*khw@wwwB % $/$G6 sP`X):F/fwH1pdlqnmPHuikw_:[9D'@www34."2>$4.#!!2>#!".>3!2QнQQнQQh~wwhfffнQQнQQнQZZQffff#>3!2#!".2>4."fffнQQнQQffffQнQQн ,\!"&?&#"326'3&'!&#"#"'  5467'+#"327#"&463!!'#"&463!2632(#AHs9q ci<= #]$ KjKKjKKjKKjH#j#H&&&KjKKjKg V i jKKjKKjKKjK ..n(([5KK55KK5[poNv<+#"'#"&546;&546$32322$B$22$$*$22$Xڭӯ$22$tX'hs2$ϧkc$22$1c$2F33F3VVT2#$2ԱVT2#$2g#2UU݃ 2$#2UU1݃2 ,u54#"67.632&#"32654'.#"32764.'&$#"7232&'##"&54732654&#"467&5463254632>32#"'&ru&9%" *#͟ O%GR=O&^opC8pP*bY _#$N Pb@6)?+0L15 "4$.Es  5IQ"!@ h "Y7e|J>ziPeneHbIlF>^]@n*9 6[_3#"&54632#.#"32%3#"&54632#.#"326%4&'.'&! ! 7>7>! =39? 6'_ >29? 5'17m-VU--,bW.뮠@Fyu0HC$뮠@Fyu0HC$L= ?? <=! A <`;+"&54&#!+"&5463!2#!"&546;2!26546;2pЇ0pp@Ipp>Sc+"&=46;254&+"&+";2=46;2;2=46;2;2%54&#!";2=;26#!"&5463!2A5DD5A7^6a7MB55B7?5B~```0`rr5A44A5v5AA5f*A``0` !!!! #!"&5463!2ړ7H7jv@vvv':@vvvMUahmrx#"'!"'!#"&547.547.54674&547&54632!62!632!#!627'!%!"67'#77!63!!7357/7'%# %'3/&=&' 5#?&547 6!p4q"""6" 'h*[ |*,@?wAUMpV@˝)Ϳw7({*U%K6=0(M "! O dX$k !! ! b [TDOi @6bxBAݽ5  ɝ:J +3,p x1Fi (R 463!#!"&5%'4&#!"3`а@..@A-XfB$.BB..C} )&54$32&'%&&'67"w`Rd]G{o]>p6sc(@wgmJPAjyYWa͊AZq{HZ:<dv\gx>2ATKn+;"'&#"&#"+6!263 2&#"&#">3267&#">326e~└Ȁ|隚Ν|ū|iyZʬ7Ӕްr|uѥx9[[9jj9ANN+,#ll"BS32fk[/?\%4&+";26%4&+";26%4&+";26%4&+";26%#!"&5467&546326$32]]eeeeee$~i qfN-*#Sjt2"'qCB8!'> !%)-159=AEIMQUY]agkosw{! %! 5!#5#5#5#5#57777????#5!#5!#5!#5!#5!#5!#5!#5#537#5!#5!#5!#5!#5!#55#535353535353%"&546326#"'#32>54.&54>3237.#"Q%%%%%%%%%?iiihOiixiiyiixiiArssrrssr%sssrrssNs%%%%%%%%%%'32#".543232654&#"#"&54654&#"#"&547>326ڞUzrhgrxSПdU 7#"&463!2!2&&4&&&&4&KjKKjKjKKj &&&%&& &&4&&&&4&&&5jKKjKKjKKjK%z 0&4&&3D7&4& %&'S4&"4&"'&"27"&462"&462!2#!"&54>7#"&463!2!2&4&4&4&4KjKKjKjKKj &&&%&& &&4&%&&ے&4"jKKjKKjKKjK%z 0&4&&3D7&4& %& & !'! !%!!!!%"'.763!2o]FooZY@:@!!gf//I62'"/"/"/"/"/"/"/7762762762762762762%"/77627&6?35!5!!3762762'"/"/"/"/"/"/%5#5!4ZSS6SS4SS4SS4SS4SS4SS4ZSS4SS4SS4SS4SS4SS4S-4ZSS4S@4SS4ZSS6SS4SS4SS4SS4SS4S@ZSSSSSSSSSSSSSSZSSSSSSSSSSSSSyZRRR@%:= :+: =RRZSSSSSSSSSSSSSCv!/&'&#""'&#" 32>;232>7>76#!"&54>7'3&547&547>763226323@``` VFaaFV      $. .$     yy .Q5ZE$ ,l*%>>%*>*98(QO!L\p'.'&67'#!##"327&+"&46;2!3'#"&7>;276;2+6267!"'&7&#"(6&#"#"' Dg OOG`n%ELL{@&&Nc,sU&&!Fre&&ss#/,<= #]gL oGkP'r-n&4&2-ir&&?o  4 _5OW! .54>762>7.'.7>+#!"&5#"&5463!2"&462{{BtxG,:`9(0bԿb0(9`:,GxtB&@&&@&K55K`?e==e?1O6# ,  #$  , #6OO&&&&5KK?!"'&'!2673267!'. ."!&54632>321 4q#F""8'go#- #,"tYg>oP$$Po> Zep#)R0+I@$$@I++332++"&=#"&=46;.7>76$  @ ᅪ*r@@r'/2+"&5".4>32!"&=463  &@~[՛[[u˜~gr&`u՛[[՛[~~@r=E32++"&=#"&=46;5&547&'&6;22676;2  >``@``ٱ?E,,=?rH@``@GݧH`jjrBJ463!2+"&=32++"&=#"&=46;5.7676%#"&5   &@~``@``  vXr&@``@+BF`rks463!2+"&=32++"&=#"&=46;5&547'/.?'+"&5463!2+7>6 %#"&5   &@~``@``~4e  0  io@& jV  0  Z9r&@``@Gɞ5o , sp &@k^ , c8~~`r8>KR_32++"&=!+"&=#"&=46;.767666'27&547&#"&'2#" @@ 'Ϋ'sggsww@sgg@@-ssʃl99OOr99FP^l463!2+"&=$'.7>76%#"&=463!2+"&=%#"&54'>%&547.#"254&' &@L?CuГP vY &@;"ޥ5݇ޥ5`&_ڿgwBF@&J_ s&&?%x%xJP\h463!2+"&='32++"&=#"&=46;5.7676632%#"&56'327&7&#"2#" &@L? ߺu``@``} ຒɞueeu9uee&_"|N@``@""|a~lo99r9@9;C2+"&5"/".4>327'&4?627!"&=463  &@Ռ .  N~[՛[[u˜N .  gr&`֌  . Ou՛[[՛[~N  . @r9A'.'&675#"&=46;5"/&4?62"/32+  '֪ \  . 4 .  \r|ݧ憛@\ .    . \@r~9A"/&4?!+"&=##"$7>763546;2!'&4?62  m  - @ݧ憛@& -  @rm4 -  ٮ*   - r+"&5&54>2  @[՛[rdGu՛[[r  ".4>2r[՛[[՛r5՛[[՛[[$2#!37#546375&#"#3!"&5463#22#y/Dz?s!#22#2##2S88 2#V#2L4>32#"&''&5467&5463232>54&#"#"'.Kg&RvgD $ *2% +Z hP=DXZ@7^?1 ۰3O+lh4`M@8'+c+RI2 \ZAhSQ>B>?S2Vhui/,R0+ ZRkmz+>Q2#"'.'&756763232322>4."7 #"'&546n/9bLHG2E"D8_ pdddxO"2xxê_lx2X  !+'5>-pkW[C I I@50Oddd˥Mhfxx^ә #'+/7!5!!5!4&"2!5!4&"24&"2!!! 8P88P 8P88P88P88PP88P8 P88P88P88P8 +N &6 !2#!+"&5!"&=463!46;23!#!"&54>32267632#"_>@`     `  L4Dgy 6Fe=OOU4L>   ` `  4L2y5eud_C(====`L43V &6 #"/#"/&54?'&54?6327632#!"&54>32 7632_>     %%Sy 6Fe=J%>     %65%Sy5eud_C(zz.!6%$!2!!!46;24&"2!54&#!"&&&@ԖV@&&@&&ԖԖ@&3!!! !5!'!53!! #7IeeI7CzCl@@@#2#!"&?.54$3264&"!@մppp((ppp#+/2#!"&?.54$3264&"!264&"!@մ^^^@^^^@((^^^^^^v(#"'%.54632 "'% 632U/@k0G,zD# [k# /tg F Gz  #'#3!) p*xe0,\8T #/DM%2<GQ^lw &'&676676&'&7654&'&&546763"#"'3264&7.>&'%'.767&7667&766747665"'.'&767>3>7&'&'47.'.7676767&76767.'$73>?>67673>#6766666&'&6767.'"'276&67&54&&671&'6757>7&"2654&57>&>&'5#%67>76$7&74>=.''&'&'#'#''&'&'&'65.'&6767.'#%&''&'#2%676765&'&'&7&5&'6.7>&5R4&5S9 W"-J0(/r V"-J0(.)#"6&4pOPppc|o}vQ[60XQW1V  # 5X N"& . ) D>q J:102(z/=f*4!> S5b!%  (!$p8~5..:5I  ~T 4~9p# ! ) & ?()5F 1   d%{v*: @e s|D1d {:*dAA|oYk'&<tuut&v HCXXTR;w 71™ Z*&' 1  9? . $Gv 5k65P.$.`aasa``Z9k'9؋ӗa-*Gl|Me_]`F& OܽsDD!/+``aa``a154&'"&#!!26#!"&5463!2    iLCly5)*Hcelzzlec0hb,,beIVB9@RB9J_L44LL44L44%2"4:I;p!q4bb3p (P`t`P(6EC.7BI64LL44LL  .>$4&'6#".54$ 4.#!"3!2>#!"&5463!2Zjbjj[wٝ]>oӰٯ*-oXL44LL44L')꽽)J)]wL`ֺ۪e4LL44LL;4&#!"3!26#!"&5463!2#54&#!";#"&5463!2  @ ^BB^^B@B^  B^^B@B^`@  MB^^B@B^^>  ^B@B^^5=Um ! !!2#!"&=463!.'!"&=463!>2!2#264&"".54>762".54>762?(``(?b|b?B//B/]]FrdhLhdrF]]FrdhLhdrF@@@(?@@ ?(@9GG9@/B//BaItB!!BtI Ѷ!!ь ItB!!BtI Ѷ!!ь-M32#!"&=46;7&#"&=463!2#>5!!4.'.46ՠ`@`ՠ`MsFFsMMsFFsMojjo@@jj@@<!(!!(!-3?32#!"&=46;7&#"&=463!2+!!64.'#ՠ`@`ՠ`  DqLLqDojjo@@jj@@B>=C-3;32#!"&=46;7&#"&=463!2+!!6.'#ՠ`@`ՠ`UVU96gg6ojjo@@jj@@β**ɍ-G32#!"&=46;7&#"&=463!2#>5!!&'.46ՠ`@`ՠ`MsFFsMkkojjo@@jj@@<!(!33!(!9I2#!"&=4637>7.'!2#!"&=463@b":1P4Y,++,Y4P1:"":1P4Y,++,Y4P1:"b@@@7hVX@K-AA-K@XVh77hVX@K-AA-K@XVh7Aj"#54&#"'54&#"3!26=476=4&#"#54&'&#"#54&'&'2632632#!"&5&=4632>3265K @0.B @0.B#6'&& l @0.B 2' .B A2TA9B;h" d mpPTlLc _4.HK5]0CB.S0CB./#'?&&)$$)0CB. }(AB.z3M2"61d39L/PpuT(Ifc_E`1X"#4&"'&#"3!267654&"#4&"#4&26326#!"&'&5463246326\B B\B&@5K&@"6LB\B B\B sciL}QP%&#"!"3!754?27%>54&#!26=31?>Ijjq,J[j.-tjlV\$B.R1?@B.+?2`$v5K-%5KK5.olRIS+6K5̈$B\B 94E.&ʀ15uE& ԖPjjdXUGJ7!.B P2.B %2@ 7K5(B@KjKj?+fU E,5K~!1.>F.F,Q5*H$b2#!"&=%!"&=463!7!"&'&=4634'&#!">3!!"3!32#!"3!23!26=n$32>32>32#"#.#"#.#"3!27654&#"547654&#"#654&Mye t|]WSSgSY\x{ 70"1i92DU1&=  =&0@c >&/Btd4!*"8K4+"@H@/'= t?_K93-] UlgQQgsW ]#+ i>p&30&VZ&0B/ %3B. "to ){+C4I (  /D0&p0D3[_cg"'&#"3!2676=4&"#54&#"#54&#"#4&'2632632632#!"&'&5463246#!#!#5K)B4J&@#\8P8 @0.B J65K J6k cJ/4qG^\hB2.1!~K5y?^\Vljt-.j[J,qjjI7$?1R.B+.B$`2?gvEo.5KK5%-K6+SIR[&.E49 B\B$5KG#!+"&5!"&=463!2+"&' +"' +"'&5>;2>76;2Y    M .x - N     u  , u ?  LW   #  *:J4'&+326+"'#+"&5463!2  $6& $&6$ UbUI-uu,uuڎLlLAX!Jmf\$ 6uuu,KLlL-[k{276/&'&#"&5463276?6'.#"!276/&'&#"&5463276?6'.#"  $6&  $&6]h - %Lb`J%E 5 ,5R- h - %Lb`J%E 5 ,5R-'uu,uulL/hR    dMLc  NhR   dMLc  N1uuu,LlL@  ' 7 '7 ``H ``H !``H ```H` '%  7' 7'7 ' $&6$ X`(W:,:X`(WLLlLX`(W:BX`(XLlL $ %/9ES[#"&54632$"&4624&"26$4&#"2%#"&462$#"&4632#"32&! 24>  !#"&'.'#"$547.'!6$327&'77'&77N77N'qqqqqPOrqEsttsst}||}uԙ[WQ~,> nP/R U P酛n >,m'77'&77N77N6^Orqqqqqqt棣棣(~|| on[usј^~33pc8{y%cq33dqpf L 54 "2654"'&'"/&477&'.67>326?>< x ,  (-'sI  VCV  Hr'-(  $0@!BHp9[%&!@0$u  ]\\]-$)!IHV D V HI!)$-#36>N"&462."&/.2?2?64/67>&  #!"&5463!2]]]3 $; &|v;$ (CS31 =rM= 4TC(G zw@www]]]($-;,540= sL =45,; @www(2#"$&546327654&#" &#"AZ\@/#%E1/##.1E$![A懇@@\!#21E!6!E13"|! gL&5&'.#4&5!67&'&'5676&'6452>3.'5A5RV[t,G'Q4}-&r! G;>!g12sV&2:#;d=*'5E2/..FD֕71$1>2F!&12,@K r#"&5462>%.#"'&#"#"'>54#".'7654&&5473254&/>7326/632327?&$  $6 $&6$ !&"2&^ u_x^h ;J݃HJǭ qE Dm! M G?̯' %o8 9U(F(ߎLlL&!&!SEm|[n{[<ɪ "p C Di% (K HCέ  pC B m8 @Kނ  HF(LlL "*6%&6$ 7&$5%%6'$2"&4}x3nQH:dΏX e8z' li=! 7So?vM '&7>>7'7>''>76.'6'El:Fg r *t6K3U Z83P)3^I%=9 )<}Jk+C-Wd &U-TE+]Qr-< Q#0 C+M8 3':$ _Q =+If5[ˮ&&SGZoMkܬc#7&#"327#"'&$&546$;#"'654'632ե›fKYYKf¥yͩ䆎L1hvvƚwwkn]*]nlxDLw~?T8bb9SA}+5?F!3267!#"'#"4767%!2$324&#"6327.'!.#"۔c28Ψ-\?@hU0KeFjTlyE3aVsz.b؏W80]TSts<hO_u7bBtSbF/o|V]SHކJ34&#!"3!26#!!2#!"&=463!5!"&5463!2  @ ^B `` B^^B@B^   @ @B^@@^BB^^>3!"&546)2+6'.'.67>76%&F8$.39_0DD40DD0+*M7{L *="# U<-M93#D@U8vk_Y [hD00DD00Dce-JF1 BDN&)@ /1 dy%F#"'&'&'&'&763276?6#"/#"/&54?'&763276"&'&'&5#&763567632#"'&7632654'&#"32>54'&#"'.5463!2#!3>7632#"'&'&#"'&767632yqoq>* 432fba  $B? >B BB AA.-QPPR+ 42 %<ciђ:6& hHGhkG@n`IȌ5 !m(|.mzyPQ-.  je  q>@@?ppgVZE|fb6887a %RB? =B ABBAJvniQP\\PRh!cDS`gΒ 23geFGPHXcCI_ƍ5" n*T.\PQip [*81 / 9@:>t%6#".'.>%6%&7>'.#*.'&676./&'.54>754'&#"%4>327676= >vwd" l "3 /!,+ j2.|%& (N &wh>8X}xc2"W<4<,Z~fdaA`FBIT;hmA<7QC1>[u])  u1V(k1S) - 0 B2* %M ;W(0S[T]I) A 5%R7&&T,Xq&&1X,LΒw%%;#!"&5463!546;2!2!+"&52#!"/&4?63!5! (&&@&&(&&@&&( (  &&@&&@&&&&  #''%#"'&54676%6%% hh @` !   !    #52#"&5476!2#"&5476!2#"'&546        @  @  @    84&"2$4&"2$4&"2#"'&'&7>7.54$ KjKKjKjKKjKjKKjdne4" %!KjKKjKKjKKjKKjKKjK.٫8  !%00C'Z'.W"&462"&462"&462 6?32$6&#"'#"&'5&6&>7>7&54>$ KjKKjKjKKjKjKKjhяW.{+9E=cQdFK1A  0) LlLjKKjKKjKKjKKjKKjKpJ2`[Q?l&٫C58.H(Yee    Y'w(O'R@$#"&#"'>7676327676#" b,XHUmM.U_t,7A3ge z9@xSaQBLb( VU  !!!==w)AU!!77'7'#'#274.#"#32!5'.>537#"76=4>5'.465! KkkK _5 5 #BH1`L I& v6S F!Sr99rS!`` /7K%s}H XV P V  e  Vd/9Q[ $547.546326%>>32"&5%632264&#"64'&""&'&"2>&2654&#";2 P 3>tSU<)tqH+>XX|Wh,:UStW|XX>=X*  ))  +^X^|WX=>X:_.2//a:Ru?  Q%-W|XW>J( =u>XX|WX`  *((*  +2 2X>=XW|E03>$32!>7 '&'&7!6./EUnohiI\0<{ >ORDƚ~˕VƻoR C37J6I`Tb<^M~M8O  5!#!"&!5!!52!5463 ^B@B^`B^^B `B^^"^BB^0;%'#".54>327&$#"32$ !"$&6$3 ##320JUnLnʡ~~&q@tKL}'` - -oxnǑUyl}~~FڎLlLt`(88(   7!' !\W\ d;tZ`_O; }54+";2%54+";2!4&"!4;234;2354;2354>3&546263232632#"&#"26354;2354;2354;2````pp```  !,! -&M<FI(2 ```@PppPpppppp# #   ppppp j#"'&=!;5463!2#!"&=#".'.#!#"&463232>7>;>32#"&'#"!546 %. `@` :,.',-XjjXh-,'.,: kb>PppP>bk .%Z & :k%$> $``6&L')59I"TlԖlT"I95)'L&69GppG9$ >$%k: !+32&#!332 $&6$ ~O88OLlL>pN  iLlL '':Ma4&'#"'.7654.#""'&#"3!267#!"&54676$32#"'.76'&>$#"'.7654'&676mD5)  z{6lP,@KijjOoɎȕ>>[ta) GG 4?a) ll >;_-/ 9GH{zyN@,KԕoN繁y! ?hh>$ D" >â? $ n"&5462'#".54>22654.'&'.54>32#"#*.5./"~~s!m{b6# -SjR,l'(s-6^]Itg))[zxȁZ&+6,4$.X%%Dc* &D~WL}]I0"  YYZvJ@N*CVTR3/A3$#/;'"/fR-,&2-" 7Zr^Na94Rji3.I+ &6W6>N%&60;96@7F6I3+4&#!"3!26%4&#!"3!26 $$ ^aa`@@^aa '7  $ >. %"&546;2#!"&546;2#/a^(^aa(N@@4&#!"3!26 $$ @@^aa`@^aa '  $ >. 7"&5463!2#/a^(n@^aa(N@ %=%#!"'&7!>3!26=!26=!2%"&54&""&546 ##]VTV$KjKKjK$&4&Ԗ&4&>9G!5KK55KK5!&&jj&&#/;Im2+#!"&'#"&463>'.3%4&"26%4&"26%6.326#>;463!232#.+#!"&5#"5KK5sH..Hs5KK5e# )4# %&4&&4&&4&&4&` #4) #%~]eZ&&Ze] E-&&-EKjKj.<<.KjK)#)`"@&&`&&&&`&&)#`)"dXo&&oXG,8&&8!O##!!2#!+"'&7#+"'&7!"'&?63!!"'&?63!6;236;2!2@@8@7 8Q NQ N 8G@ 8GQ NQ N7   8 8  H H  k%  ".>2I20]@]@oo@@oo㔕a22]]p^|11|99|11|(%7'7' ' 7T dltl)qnluul)1$4&"24&"2 &6 +"&5476;2 &6 LhLLhLLhLLhL>  &   &`>hLLhLLhLLhL>&&>G  .7)1!62 1!62he220e22> v +4 [d+ d 135#5&'72!5!#"&'"'#"$547&54$ Eh`X(cYz:L:zYc\$_K`Pa}fiXXiޝfa  (+.>#5#5!5!5!54&+'#"3!267!7!#!"&5463!2U``'    jjV>(>VV>>Vq  ( ^(>VV>>VV=&'&'&'&76'&'&.' #.h8"$Y ''>eX5, ,PtsK25MRLqS;:.K'5R ChhRt(+e^TTu B"$:2~<2HpwTT V/7GWg. %&32?673327>/.'676$4&"2 $&6$   $6& $&6$ d -- m  ,6*6,  mKjKKjoooKzz8zzȎLlLU4>>4-. YG0 )xx) 0GYޞ .jKKjKqoooolzzz80LlLD/7H#"'.7'654&#"'67'.6?>%"&46227#".547|D,=),9#7[͑fx!X: D$ +s)hhijZt<F/*8C,q؜e\r,WBX/C2hhh=tXm>NZ+"&=46;2+"&=4>7>54&#"#"/.7632  >. $$ p=+& 35,W48'3  l zffff^aaP2P: D#;$# $*;? R Cfff^aa'Y >O`"&5462&'.'.76.5632.'#&'.'&6?65\\[( | r [A@[[@A#2#  7* <Y$  +}"(  q87] F  _1 )    #1Ke34&+326+"&=!#!"&763!2#!"&5463!2#>?4.'3#>?4.'3#>?4.'3Xe`64[l7  , L; =+3&98&+)>>+3&98&+)>=+3&88&+)> Wj|r >Q$~d $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgYJ\m4.'.'&#"#"'.'&47>7632327>7>54&'&#"327>"&47654'&462"'&476'&462"'&47>&'&462i$ $^"  %%  "^$ $W "@9O?1&&18?t@" W&%%&4KK6pp&46ZaaZ&4mttm ^x -  - x^ = /U7C kkz'[$ =&5%54'4&KK4r7>54 "&54>2"&462%"&54&#""&546 %#"&'&'.7>#"'&'.7>&4&&4&4&&4SZ&4&&44$#&&&j3$"('$&4&[՛[&4&&4F&4&]\&4&$  !D4%  ,\44&&4&4&&4&-Z4&&4&;cX/)#&>B)&4&j9aU0'.4a7&&u՛[[4&&4&@&&]]&&Ώ0 u40 )4#g&'.#"32676%4/&#"326'&#"2632#2+&'%#"'&6?676676632%#"'&6767#"&'&6767#"'.7>327"#"&'&6763"'.7>;7632;>%5K$ "0%>s$ "0%>;;>%5KVL#>H30 \($$(\( єyO2F/{(?0(TK.5sg$ єy#-F/{$70(TK.5sg$L#>H30 \($$(\#(@5"'K58!'"58!'"55"'K#dS$K K$Sdx#@1 w d>N;ET0((? - 2K|1 wd#N;ET0$(? - 2K$#dS$K K$SdxDN\2654& 265462"2654 #"32654>7>54."/&47&'?62 &4&&4&h՛[&4&r$'("$3j&&&#$4[ " @ GB[ "&&Β&&][u&&7a4.'0Ua9j&4&)B>&#)/Xc;u՛ "  " Gi[ Xh#"&54676324&'&#"'>54#"32#"54>54'.#"32>7>767632326#!"&5463!2b )   :4FDN  [1,^JK-*E#9gWRY vm0O w@wwwC22 c@X&!9{MA_"S4b// DR"XljPY < @www%e4.#"32>7676#'.#"#"&54>3232>754&*#"&54>763 >32 ''il$E/  @P@ ^`'W6&!.. ! -P5+ E{n46vLeVz:,SN/ M5M[  ]$[^5iC'2H&!(?]v`* l b$9> =R2 #"&5467%!"&7>3-.7>;%.7>322326/.76/.'&6766/&/&#"&676 &676&6766/&672? =1( H/ '96&@)9<')29% &06##$ J 0 7j)5@"*3%"!M %#K"%Ne 8)'8_(9./=*%8!Q #P"\Q#N&a)<9bR]mp%"'.'&54>76%&54763263 #"/7#"'#"&/%$%322654&#"%'OV9  nt  |\d ϓ[nt  |@D:) ;98'+| j," 41CH^nVz(~R 9\'  r  @L@  @w46HI(+C ,55, f[op@\j;(zV~i/5O#"'&54>32&#" 654'67'"'>54''&'"'6767&546767>7蒓`V BMR B9)̟!SH-77IXmSMH*k#".o;^J qןד>@YM $bKd ү[E";Kx%^6;%T,U:im=Mk).DT4'"&5463267&#" 6;64'.'4'>732676%#!"&5463!2),蛜s5-54&#"#"'654'.#"#"&#"3263232>3232>76 $$ Cf'/'% ( $UL ( #'/'@ 3#@,G)+H+@#3 ^aaX@ _O#NW#O_ .* ##(^aaq[632632#"&#"#".'&#"#".'&54767>7654.54632327&547>P9 B6?K? %O4T% >6>Z64Y=6>%S4N$ ?L?4B @{:y/$ ,'R! F! 8% #)(()#%: !F Q'+%0z:zO_4'.'&54>54&#"#"'654'.#"#"&#"3263232>3232>76#!"&5463!2Cf'.'% ( $VM  ) #'.'@ 3 #A,G)+H+A# 4 w@wwwXA  ?4N$NW&M&L  /* ## + @www O$>?>762'&#"./454327327>7> EpB5 3FAP/h\/NGSL  RP* m95F84f&3Ga4B|wB.\FI*/.?&,5~K % & Y."7n< "-I.M`{ARwJ!FX^dj''''"'7&'7&'7&'7&547'67'67'67'63277774$#"32$   *'ֱ,?g=OO&L&NJBg;1''ֱ.=gCIM $'&&NJBg=.%w؝\\w Ioo<<-NIDg=/%(ײ+AhEHO*"#*OICh=/'(ֲ/=h>ON.]xwڝ]7e[@)6!!"3#"&546%3567654'3!67!4&'7Sgny]K-#75LSl>9V%cPe}&Hn_HȌ=UoLQ1!45647UC" !-9[nx"&46254&"326754&"326754&"26754&"26#".547632632626326'4#"#"54732764&"264.#"327632>#"'"'#"'#"&5#"'67&'327&'&54>3267>7>7>32632632T"8""8)<())(<))))<))<))<))<) Tد{ՐRhx=8 78 n 81 pH_6Soc F@b@?d?uKbM70[f5Y$35KUC<:[;+8 n 87 8/8Zlv]64qE 'YK0-AlB; W#;WS9 &(#-7Z://:/Tr++r,,r++r,,r++r,,r++r,,ʠgxXVעe9222222^KVvF02OO23OO`lF;mhj84DroB@r+@222222C0DP`.r8h9~T4.&o@9 1P%14'!3#"&46327&#"326%35#5##33 $$  }Pcc]321IUΠ?LL?cc4MX &04;0XpD[[DpD,)&&Q 9V\26&".'&'&6?.#"#26327677>'32>&3#'&+"?626&"#!'.'!"&5463!>;26;2!2P P  92#.}SP9::%L \B )spN/9oJ5  !+D`]BgY9+,9% Pk 4P P &NnF!_7*}B<{o0&&B;*<@$ucRRc#@16#37c&@@@ J"@*4^`ED B o/8927 *@OLC!T!323X$BJ@@@&AS 0C 59" 'D/&&D4 88 $5A&%O#!"&547>7>2$7>/.".'&'&2>^B@B^ >FFzn_0P:P2\nzFF> R & p^1P:P1^ & R P2NMJMQ0Rr.B^^B 7:5]yPH!%%"FPy]5:7 = 4 QH!%%!Ht 4 =<"-/ ?1Pp+".'.'.?>;2>7$76&'&%.+"3!26#!"&54767>;2' +~'*OJ%%JN,&x' % ^M,EE,M7 ZE[P*FF*P:5  ^B@B^){$.MK%%KM.$+X)o3 "a 22!] 4  I>"">,&S8JB##B12 ` `B^^B8&ra#11#$R&  "&.2v%/%''%/%7%7'%7'/#&5'&&?&'&?&'&7%27674?6J" 0<=_gNU?DfuYGb7=^H^` =v~yT3GDPO 4Fѭqi_w\ހ!1uS%V_-d 1=U{J8n~r'U4.#".'"3!264&"26+#!"&5463!232+32+32 0P373/./373P0 T=@=T֙֙|`^B@B^^BB^`````*9deG-! !-Ged9IaallkOB^^BB^^B +Yi"&54622#!"&54>;2>+32+32+#!"&5463!2324&#!"3!26֙֙0.I/ OBBO -Q52-)&)-2 ``  ``  `^B@B^^BB^`  @   |kkl"=IYL)CggC0[jM4      B^^BB^^B @  @ !1AQu4.#".'"3!24&"254&#!"3!2654&#!"3!2654&#!"3!26#!54&+"!54&+"!"&5463!2)P90,***,09P)J66S"@8@^B@@B^^BB^Ukc9 9ckU?@@88 @@N@B^````^BB^^!1AQu#!"&4>32>72"&462#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!546;2!546;2!26#!"&5463!2J66J)P90,***,09P)"@8@ @  `@@` ^B@B^^BB^ՀUUkc9 9c`@@88@@2  @ ````@B^^BB^^(%.'"&' $&  #"$&6$ wCιCwjJ~J>LlLśJSSJ͛>6LlL$,  $&6654&$ 3 72&&  lLmzzBl>KlLGzzG>'7#!"&54>7&54>2  62654' '3/U]B,ȍ,B]U/OQнQ>+X}}X0bӃۚӅb0}hQQh>ff#=#!"&4>3272"&462!3!26#!"&5463!;26=!2J66J)Q8PP8Q)  ^B@B^^B``B^VVVld9KK9d` @B^^BB^``^+;K[eu4.#"'"3!264&"254&#!"3!2654&#!"3!26%54&+";2654&#!"3!26!54&#!"!#!"&5463!2"D/@@/D"?,,?pppp@@@@^B@B^^BB^D6]W2@@2W]67MMppp@@@@@@@@n`@B^^BB^^+;K[eu#!"&54>3272"&462#!"&=463!2%#!"&=463!2+"&=46;25#!"&=463!2!3!26#!"&5463!2?,V,?"D/@@/D"pppp@@@  ^B@B^^BB^D7MM76]W2@@2W]֠ppp@@@@@@@@` @B^^BB^^A#"327.#"'63263#".'#"$&546$32326J9"65I).!1iCCu +I\Gw\B!al݇yǙV/]:=B>9+32%#!"&5463!2#"&54>54'&#"#"54654'.#"#"'.54>54'&'&543232654&432#"&54>764&'&'.54632  ?c'p& ?b1w{2V ?#&#9&CY' &.&#+B : &65&*2w1GF1)2<)<'  ( BH=ӊ:NT :O )4:i   F~b` e!}U3i?fRUX|'&'&Ic&Q  *2U.L6* / L:90%>..>%b>+ +z7ymlw45)0 33J@0!! TFL P]=GS -kwm  !*(%6&692? $&6$  '   al@lLlL,& EC h$LlL /37;%"&546734&'4&" 67 54746 #5#5#5ppF::FDFNV^fnv~"/&4?.7&#"!4>3267622"&4"&46262"&42"&4462"$2"&42"&4"&46262"&4"&46262"&42"&4$2"&42"&42"&4  R ,H8JfjQhjG^R,  !4&&4&Z4&&4&4&&4&4&&4&&4&&44&&4&4&&4&Z4&&4&4&&4&4&&4&4&&4&4&&4&&4&&4&Z4&&4&Z4&&4&  R  ,[cGjhQRJ'A, &4&&4Z&4&&4Z&4&&4Z&4&&444&&4&&4&&4Z&4&&4Z&4&&4Z&4&&4&4&&4Z&4&&4Z&4&&4&&4&&4Z&4&&4Z&4&&4%-5=EM}+"&=#!"'+"&=&="&4626"&462&"&462"&462&"&462&"&462#!"&=46;4632676/&?.7&#"!2"&462&"&462&"&462"&462&"&462&"&462"&462&"&462"&462@?AA? @ @R...R@`jlL.h) * * $ %35K.....uvnu....@@jN  * * .t2#K5..R..R. @Hq '&'&54 &7676767654$'.766$76"&462&'&'&7>54.'.7>76ȵ|_ğyv/ۃ⃺k] :Buq CA _kނXVobZZbnW|V 0  Q2- l}O  / :1z q%zG 4( 6Roa ą\< )4 J}%!!#!"&5463!2^B@B^^BB^`@B^^BB^^%#!"&=463!2^B@B^^BB^B^^BB^^ &))!32#!#!"&5463!463!2`B^^B^B@B^^B`^BB^^B@B^B^^BB^`B^^#3%764/764/&"'&"2?2#!"&5463!2    s^B@B^^BB^ג     @B^^BB^^#'7"/"/&4?'&4?62762!!%#!"&5463!2     ^B@B^^BB^    `@B^^BB^^ ! $&6$ .2r`LlLf4LlL#.C&>"'&4762"/&4?62'"'&4762%'.>6.'.>6'>/>76&'&.'&7&'">?4'.677>7.>37654'&'67>776 $&6$  ( 4Z# # & # # & y"6&.JM@& "(XE* $+8 jT?3#'.'&!3!2>?3.'#!57>7'./5!27#'.#!"g%%D-!gg<6WWZe#1=/2*]Y3-,C1 /Dx] VFIq-HD2NK '>*%R= f 07=. f D]\|yu,0>Seu#2#"'&5<>323#3#&'#334'."#"+236'&54.#"5#37326#!"&5463!2 <  zzj k-L+ )[$8=".un/2 ^B@B^^BB^5cy    (ݔI(8?C (3> #"($=@B^^BB^^0K S&'.'&'./674&$#">&>?>'76'# "&#./.'7676767>76$w .~kuBR] T%z+",|ޟj<)(!( ~ˣzF8"{%%#5)}''xJF0"H[$%EJ#% .Gk29(B13"?@ S)5" #9dmW";L65RA0@T.$}i`:f3A%% BM<$q:)BD aa%`]A &c| Ms!  Z 2}i[ F&** < ʣsc"J<&NsF% 0@Wm6&'.6$.7>7 $76".4>2., &>6'"'&7>=GV:e #:$?+% q4g &3hT`ZtQмQQмpAP1LK!:< }҈`dlb,9'  %%($! a3)W)x  оQQоQQcQǡ-җe)Us2XD\ϼYd /?O_o#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543%#!"&5463!2++532325++532325++532325++532325++53232p00pp00pp00pp00pp008((88(@(80pp00pp00pp00pp00pp0     @(88((88     /Q/&'%&/"&=.6?&?&'&6?'.>-#".6?'.>'&6'.>54627>%>76#"'% %6 27 2G f!)p&4&p)!f G2 72  *6 " 47 2G f!)p&4&p)!f G2 72 " 6* !k 3 j&3 %,*&&ր*9% 3&j 3 k!./!>>$,*!k 3.j&3 %Ԝ9*&&ր*ǜ,% 3&j 3 k!*,$>>!/.&6.'&$ &76$76$PutۥiPuGxy Զ[xy -_v١eNuv١e =uʦ[t78X &6# #'7-'%'&$  $6 $&6$ 31NE0gR=|||">"LlL^v!1f2iЂwgfZQQ^>"||||wLlL &ZXblw.'&>'&'&".'.'&&'&'&7>767>67>7626&'&>&'&>'.7>.676'&'&'&'.67.>7>6&'&676&'&676.676&'&>&'&676'.>6/4-LJg-   $  6)j2%+QF)b3FSP 21DK2AW ") ")$? ? 8A& AE5lZm= gG2Sw*&>$5jD GHyX/4F r 1  1""!l=6> 6 ,5./'e    .*|Ed! u & &%& &5d ))66 @ C& 8B @qL?P^7 G-hI[q:"T6 ,6 &/`  L wQ'   A ^   "  $& _  y  * <Copyright Dave Gandy 2016. All rights reserved.Copyright Dave Gandy 2016. All rights reserved.FontAwesomeFontAwesomeRegularRegularFONTLAB:OTFEXPORTFONTLAB:OTFEXPORTFontAwesomeFontAwesomeVersion 4.7.0 2016Version 4.7.0 2016FontAwesomeFontAwesomePlease refer to the Copyright section for the font trademark attribution notices.Please refer to the Copyright section for the font trademark attribution notices.Fort AwesomeFort AwesomeDave GandyDave Gandyhttp://fontawesome.iohttp://fontawesome.iohttp://fontawesome.io/license/http://fontawesome.io/license/      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab cdefghijklmnopqrstuvwxyz{|}~"      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~glassmusicsearchenvelopeheartstar star_emptyuserfilmth_largethth_listokremovezoom_inzoom_outoffsignalcogtrashhomefile_alttimeroad download_altdownloaduploadinbox play_circlerepeatrefreshlist_altlockflag headphones volume_off volume_down volume_upqrcodebarcodetagtagsbookbookmarkprintcamerafontbolditalic text_height text_width align_left align_center align_right align_justifylist indent_left indent_rightfacetime_videopicturepencil map_markeradjusttinteditsharecheckmove step_backward fast_backwardbackwardplaypausestopforward fast_forward step_forwardeject chevron_left chevron_right plus_sign minus_sign remove_signok_sign question_sign info_sign screenshot remove_circle ok_circle ban_circle arrow_left arrow_rightarrow_up arrow_down share_alt resize_full resize_smallexclamation_signgiftleaffireeye_open eye_close warning_signplanecalendarrandomcommentmagnet chevron_up chevron_downretweet shopping_cart folder_close folder_openresize_verticalresize_horizontal bar_chart twitter_sign facebook_sign camera_retrokeycogscomments thumbs_up_altthumbs_down_alt star_half heart_emptysignout linkedin_signpushpin external_linksignintrophy github_sign upload_altlemonphone check_emptybookmark_empty phone_signtwitterfacebookgithubunlock credit_cardrsshddbullhornbell certificate hand_right hand_lefthand_up hand_downcircle_arrow_leftcircle_arrow_rightcircle_arrow_upcircle_arrow_downglobewrenchtasksfilter briefcase fullscreengrouplinkcloudbeakercutcopy paper_clipsave sign_blankreorderulol strikethrough underlinetablemagictruck pinterestpinterest_signgoogle_plus_sign google_plusmoney caret_downcaret_up caret_left caret_rightcolumnssort sort_downsort_up envelope_altlinkedinundolegal dashboard comment_alt comments_altboltsitemapumbrellapaste light_bulbexchangecloud_download cloud_uploaduser_md stethoscopesuitcasebell_altcoffeefood file_text_altbuildinghospital ambulancemedkit fighter_jetbeerh_signf0fedouble_angle_leftdouble_angle_rightdouble_angle_updouble_angle_down angle_left angle_rightangle_up angle_downdesktoplaptoptablet mobile_phone circle_blank quote_left quote_rightspinnercirclereply github_altfolder_close_altfolder_open_alt expand_alt collapse_altsmilefrownmehgamepadkeyboardflag_altflag_checkeredterminalcode reply_allstar_half_emptylocation_arrowcrop code_forkunlink_279 exclamation superscript subscript_283 puzzle_piece microphonemicrophone_offshieldcalendar_emptyfire_extinguisherrocketmaxcdnchevron_sign_leftchevron_sign_rightchevron_sign_upchevron_sign_downhtml5css3anchor unlock_altbullseyeellipsis_horizontalellipsis_vertical_303 play_signticketminus_sign_alt check_minuslevel_up level_down check_sign edit_sign_312 share_signcompasscollapse collapse_top_317eurgbpusdinrjpyrubkrwbtcfile file_textsort_by_alphabet_329sort_by_attributessort_by_attributes_alt sort_by_ordersort_by_order_alt_334_335 youtube_signyoutubexing xing_sign youtube_playdropbox stackexchange instagramflickradnf171bitbucket_signtumblr tumblr_signlong_arrow_down long_arrow_uplong_arrow_leftlong_arrow_rightwindowsandroidlinuxdribbleskype foursquaretrellofemalemalegittipsun_366archivebugvkweiborenren_372stack_exchange_374arrow_circle_alt_left_376dot_circle_alt_378 vimeo_square_380 plus_square_o_382_383_384_385_386_387_388_389uniF1A0f1a1_392_393f1a4_395_396_397_398_399_400f1ab_402_403_404uniF1B1_406_407_408_409_410_411_412_413_414_415_416_417_418_419uniF1C0uniF1C1_422_423_424_425_426_427_428_429_430_431_432_433_434uniF1D0uniF1D1uniF1D2_438_439uniF1D5uniF1D6uniF1D7_443_444_445_446_447_448_449uniF1E0_451_452_453_454_455_456_457_458_459_460_461_462_463_464uniF1F0_466_467f1f3_469_470_471_472_473_474_475_476f1fc_478_479_480_481_482_483_484_485_486_487_488_489_490_491_492_493_494f210_496f212_498_499_500_501_502_503_504_505_506_507_508_509venus_511_512_513_514_515_516_517_518_519_520_521_522_523_524_525_526_527_528_529_530_531_532_533_534_535_536_537_538_539_540_541_542_543_544_545_546_547_548_549_550_551_552_553_554_555_556_557_558_559_560_561_562_563_564_565_566_567_568_569f260f261_572f263_574_575_576_577_578_579_580_581_582_583_584_585_586_587_588_589_590_591_592_593_594_595_596_597_598f27euniF280uniF281_602_603_604uniF285uniF286_607_608_609_610_611_612_613_614_615_616_617_618_619_620_621_622_623_624_625_626_627_628_629uniF2A0uniF2A1uniF2A2uniF2A3uniF2A4uniF2A5uniF2A6uniF2A7uniF2A8uniF2A9uniF2AAuniF2ABuniF2ACuniF2ADuniF2AEuniF2B0uniF2B1uniF2B2uniF2B3uniF2B4uniF2B5uniF2B6uniF2B7uniF2B8uniF2B9uniF2BAuniF2BBuniF2BCuniF2BDuniF2BEuniF2C0uniF2C1uniF2C2uniF2C3uniF2C4uniF2C5uniF2C6uniF2C7uniF2C8uniF2C9uniF2CAuniF2CBuniF2CCuniF2CDuniF2CEuniF2D0uniF2D1uniF2D2uniF2D3uniF2D4uniF2D5uniF2D6uniF2D7uniF2D8uniF2D9uniF2DAuniF2DBuniF2DCuniF2DDuniF2DEuniF2E0uniF2E1uniF2E2uniF2E3uniF2E4uniF2E5uniF2E6uniF2E7_698uniF2E9uniF2EAuniF2EBuniF2ECuniF2EDuniF2EE=O<01hassets/lib/font-awesome/fonts/fontawesome-webfont.eot000064400000503556147400353540017076 0ustar00nLPYxϐFontAwesomeRegular$Version 4.7.0 2016FontAwesome PFFTMkGGDEFp OS/22z@X`cmap : gasphglyfMLhead-6hhea $hmtxEy loca\ maxp,8 name㗋ghpostkuːxY_< 3232  '@i33spyrs@  pU]yn2@ zZ@55 zZZ@,_@s@ @(@@@- MM- MM@@@ -`b $ 648""""""@ D@ ,,@  m)@@   ' D9>dY* '    T     @ f %RE    $!k(D'  % %  0%/&p@0 !"""`>N^n~.>N^n~>N^n~ !"""`!@P`p 0@P`p!@P`p\XSB1ݬ        ,,,,,,,,,,,,,tLT$l x T ( dl,4dpH$d,t( !"0# $,$&D'()T**,,-.@./`/00123d4445 556 6\67H78 8`89L9:h:;<>?h?@H@A0ABXBCdCDLDEFG0GHIJ8KLMdN,NNOP`PQ4QR RlS,ST`U0WXZ[@[\<\]^(^_`pb,bddePefg`giLijDk klm@n,oLpqrsxttuD{`||}}~Hl@lH T H`@$\XDTXDP,8d\Hx tXpdxt@ Œ\ ļŸƔ0dʨˀ͔xϰЌ,ш҈ ӌ8,՜`lHش`Tڸ۔@lބ߬lp 4X$l( ` d      ,,8(Xx|T@| !"x##l$$'h(*L,T.L1t1230345t6T7$8 9H::;<<?X@ABCDEHFHGpHHIxJ JKLMN@P@QRSDT ULV`VWXX4XZZ[d[\|]^`aHabcXdetfhghi\jxnp@svwxyz{h|}}\lt4t88LT|| 4xLX(  @lt$xLL HĠT(  ʈˠϔldPՄxpڬTT ވL <H$l4 Pl ,xp,xt d 44,hP 4   4<,,408$8T |!h"$L%0&H'()*0*+,.$.012@234t5$69 ::; ;<(<=4?@ACDFH`HILLLLLLLLLLLLLLLLp7!!!@pp p]!2#!"&463!&54>3!2+@&&&&@+$(($F#+&4&&4&x+#+".4>32".4>32467632DhgZghDDhg-iWDhgZghDDhg-iW&@ (8 2N++NdN+';2N++NdN+'3 8!  #"'#"$&6$ rL46$܏ooo|W%r4L&V|oooܳ%=M%+".'&%&'3!26<.#!";2>767>7#!"&5463!2 %3@m00m@3%    @ :"7..7":6]^B@B^^BB^ $΄+0110+$ (   t1%%1+`B^^B@B^^"'.54632>324 #LoP$$Po>Z$_dC+I@$$@I+"#"'%#"&547&547%62V??V8<8y   b% I))9I  + % %#"'%#"&547&547%62q2ZZ2IzyV)??V8<8)>~>[   2 b% I))9I %#!"&54>3 72 &6 }XX}.GuLlLuG.>mmUmEEm> /?O_o54&+";2654&+";2654&+";264&#!"3!2654&+";2654&+";264&#!"3!2654&+";2654&+";2654&+";267#!"&5463!2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&^BB^^B@B^@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&B^^B@B^^/?#!"&5463!2#!"&5463!2#!"&5463!2#!"&5463!2L44LL44LL44LL44LL44LL44LL44LL44L4LL44LL4LL44LL4LL44LL4LL44LL /?O_o#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(8 (88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88/?O_#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88(@(88((88((88(@(88(@(88((88(@(88((8 (88((88(88((88(88((88(88((88(88((88(88((88y"/&4?62 62,PP&PP,jPn#$"' "/&47 &4?62 62 PP&P&&P&P&P&&P&P#+D++"&=#"&=46;546;232  #"'#"$&6$   @    @  rK56$܏ooo|W@    @   rjK&V|oooܳ0#!"&=463!2  #"'#"$&6$   @ rK56$܏ooo|W@  @ rjK&V|oooܳ)5 $&54762>54&'.7>"&5462zz+i *bkQнQkb* j*LhLLhLzzBm +*i JyhQQhyJ i*+ mJ4LL44LL/?O%+"&=46;2%+"&546;2%+"&546;2+"&546;2+"&546;2`r@@r@@n4&"2#"/+"&/&'#"'&'&547>7&/.=46?67&'&547>3267676;27632Ԗ #H  ,/ 1)  ~'H  (C  ,/ 1)  $H ԖԖm 6%2X  % l2 k r6 [21 ..9Q $ k2 k w3 [20/;Cg+"&546;2+"&546;2+"&546;2!3!2>!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@@`0 o`^BB^`5FN(@(NF5 @@@L%%Ju  @LSyuS@%44%f5#!!!"&5465 7#"' '&/&6762546;2&&??>  LL >  X   &&&AJ A J Wh##!"&5463!2!&'&!"&5!(8((88((`x c`(8`((88(@(8(D 9 8( ,#!"&=46;46;2.  6 $$ @(r^aa@@`(_^aa2NC5.+";26#!26'.#!"3!"547>3!";26/.#!2W  .@   @.$S   S$@   9I   I6>  >%=$4&"2$4&"2#!"&5463!2?!2"'&763!463!2!2&4&&4&&4&&48(@(88(ч::(8@6@*&&*4&&4&&4&&4& (88(@(8888)@)'&&@$0"'&76;46;232  >& $$ `  (r^aa` @`2(^aa$0++"&5#"&54762  >& $$ ^ ?  @(r^aa` ? (^aa #!.'!!!%#!"&547>3!2<<<_@`&& 5@5 @  &&>=(""='#"'&5476.  6 $$   ! (r^aaJ %%(_^aa3#!"'&?&#"3267672#"$&6$3276&@*hQQhwI mʬzzk)'@&('QнQh_   z8zoe$G!"$'"&5463!23267676;2#!"&4?&#"+"&=!2762@hk4&&&GaF * &@&ɆF * Ak4&nf&&&4BHrd@&&4rd  Moe&/?O_o+"&=46;25+"&=46;25+"&=46;2#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!26#!"&5463!2 @  @  @  @  @  @  @    @    @    @   ^B@B^^BB^`@  @ @  @ @  @ @  @ @  @ @  @ 3@  MB^^B@B^^!54&"#!"&546;54 32@Ԗ@8(@(88( p (8jj(88(@(88@7+"&5&5462#".#"#"&5476763232>32@@ @ @KjKך=}\I&:k~&26]S &H&  &H5KKut,4, & x:;*4*&K#+"&546;227654$ >3546;2+"&="&/&546$ <X@@Gv"DװD"vG@@X<4L41!Sk @ G< _bb_ 4.54632&4&&M4&UF &""""& F&M&&M&%/B/%G-Ik"'!"&5463!62#"&54>4.54632#"&54767>4&'&'&54632#"&547>7676'&'.'&54632&4&&M4&UF &""""& FU &'8JSSJ8'&  &'.${{$.'& &M&&M&%/B/%7;&'66'&;4[&$ [2[ $&[  #/37#5#5!#5!!!!!!!#5!#5!5##!35!!! #'+/37;?3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3???? ^>>~??????~??~??^??^^? ^??4&"2#"'.5463!2KjKKjv%'45%5&5L45&% jKKjK@5%%%%54L5&6'k54&"2#"'.5463!2#"&'654'.#32KjKKjv%'45%5&5L45&%%'4$.%%5&55&% jKKjK@5%%%%54L5&6'45%%%54'&55&6' yTdt#!"&'&74676&7>7>76&7>7>76&7>7>76&7>7>63!2#!"3!2676'3!26?6&#!"3!26?6&#!"g(sAeM ,*$/ !'& JP$G] x6,& `   h `   "9Hv@WkNC<.  &k& ( "$p" . #u&#  %!' pJvwEF#  @   @  2#"' #"'.546763!''!0#GG$/!''! 8""8  X! 8" "8  <)!!#"&=!4&"27+#!"&=#"&546;463!232(8&4&&4 8(@(8 qO@8((`(@Oq8(&4&&4&@` (88( Oq (8(`(q!)2"&42#!"&546;7>3!2  Ijjjj3e55e3gr`Ijjjj1GG1rP2327&7>7;"&#"4?2>54.'%3"&#"#ժ!9&WB03& K5!)V?@L' >R>e;&L::%P>vO 'h N_":- &+# : ' +a%3 4'.#"32>54.#"7>7><5'./6$3232#"&#"+JBx)EB_I:I*CRzb3:dtB2P$ $5.3bZF|\8!-T>5Fu\,,jn OrB,7676'5.'732>7"#"&#&#"OA zj=N!}:0e%  y + tD3~U#B4 # g  '2 %/!: T bRU,7}%2"/&6;#"&?62+326323!2>?23&'.'.#"&"$#"#&=>764=464.'&#"&'!~:~!PP!~:~!P6 ,,$$% *'  c2N  ($"LA23Yl !x!*%%%% pP,T NE Q7^oH!+( 3  *Ueeu  wga32632$?23&'.5&'&#"&"5$#"#&=>7>4&54&54>.'&#"&'2#".465!#".'&47>32!4&4>Q6 ,,Faw!*' =~Pl*  ($"LA23Yl  )!* <7@@7<  <7@@7<  pP,T MF Q747ƢHoH!+( 3  tJHQ6  wh',686,'$##$',686,'$##$/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?O_o%+"&=46;2+"&=46;2+"&=46;2#!"&=463!2+"&=46;2#!"&=463!2#!"&=463!2#!"&=463!2        @     @   @   @   s  s    s    s  s  /?O#"'&47632#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2     @     @   @  @          s  s  s  /?O#"&54632 #!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2`      @     @   @  @     @   s  s  s  #"'#!"&5463!2632' mw@www '*wwww."&462!5 !"3!2654&#!"&5463!2pppp@  @ ^BB^^B@B^ppp@@  @    @B^^BB^^k%!7'34#"3276' !7632k[[v  6`%`$65&%[[k `5%&&'4&"2"&'&54 Ԗ!?H?!,,ԖԖmF!&&!Fm,%" $$ ^aa`@^aa-4'.'&"26% 547>7>2"KjKXQqYn 243nYqQ$!+!77!+!$5KK,ԑ ]""]ً 9>H7'3&7#!"&5463!2'&#!"3!26=4?6 !762xtt`  ^Qwww@?6 1B^^B@B^ @(` `\\\P`tt8`  ^Ͼww@w 1^BB^^B~ @` \ \P+Z#!"&5463!12+"3!26=47676#"'&=# #"'.54>;547632www M8 pB^^B@B^ 'sw- 9*##;Noj' #ww@w "^BB^^B  *  "g`81T`PSA:'*4/D#!"&5463!2#"'&#!"3!26=4?632"'&4?62 62www@?6 1 B^^B@B^ @ BRnBBn^ww@w 1 ^BB^^B @ BnnBC"&=!32"'&46;!"'&4762!#"&4762+!54624&&4&&44&&4&&44&&44&&4&&44&&6'&'+"&546;267: &&&& s @  Z&&&&Z +6'&''&'+"&546;267667: : &&&&  s @  :  Z&&&&Z  : z6'&''&47667S: : s @  : 4 : | &546h!!0a   $#!"&5463!2#!"&5463!2&&&&&&&&@&&&&&&&&#!"&5463!2&&&&@&&&&&54646&5- : s  :  :4:  +&5464646;2+"&5&5-  &&&& : s  :  : &&&& :  &54646;2+"&5- &&&& s  : &&&&  62#!"&!"&5463!24 @ &&&&-:&&&& "'&476244444Zf "/&47 &4?62S44444#/54&#!4&+"!"3!;265!26 $$ &&&&&&&&@^aa@&&&&&&&&+^aa54&#!"3!26 $$ &&&&@^aa@&&&&+^aa+74/7654/&#"'&#"32?32?6 $$ }ZZZZ^aaZZZZ^aa#4/&"'&"327> $$ [4h4[j^aa"ZiZJ^aa:F%54&+";264.#"32767632;265467>$ $$ oW  5!"40K(0?i+! ":^aaXRd D4!&.uC$=1/J=^aa.:%54&+4&#!";#"3!2654&+";26 $$ ```^aa^aa/_#"&=46;.'+"&=32+546;2>++"&=.'#"&=46;>7546;232m&&m l&&l m&&m l&&ls&%&&%&&%&&%&&&l m&&m l&&l m&&m ,&%&&%&&%&&%&#/;"/"/&4?'&4?627626.  6 $$ I     ͒(r^aaɒ    (_^aa , "'&4?6262.  6 $$ Z4f44fz(r^aaZ&4ff4(_^aa "4'32>&#" $&6$  WoɒV󇥔 zzz8YW˼[?zz:zz@5K #!#"'&547632!2A4@%&&K%54'u%%&54&K&&4A5K$l$L%%%54'&&J&j&K5K #"/&47!"&=463!&4?632%u'43'K&&%@4AA4&&K&45&%@6%u%%K&j&%K55K&$l$K&&u#5K@!#"'+"&5"/&547632K%K&56$K55K$l$K&&#76%%53'K&&%@4AA4&&K&45&%%u'5K"#"'&54?63246;2632K%u'45%u&&J'45%&L44L&%54'K%5%t%%$65&K%%4LL4@&%%K',"&5#"#"'.'547!34624&bqb>#  5&44& 6Uue7D#  "dž&/#!"&546262"/"/&47'&463!2 &@&&4L  r&4  r L&& 4&&&L rI@& r  L4&& s/"/"/&47'&463!2#!"&546262&4  r L&& &@&&4L  r@@& r  L4&& 4&&&L r##!+"&5!"&=463!46;2!28(`8((8`(88(8((8(8 (8`(88(8((8(88(`8#!"&=463!28(@(88((8 (88((88z5'%+"&5&/&67-.?>46;2%6.@g.L44L.g@. .@g. L44L .g@.g.n.4LL43.n.gg.n.34LL4͙.n.g -  $54&+";264'&+";26/a^    ^aa fm  @ J%55!;263'&#"$4&#"32+#!"&5#"&5463!"&46327632#!2$$8~+(888(+}(`8((8`]]k==k]]8,8e8P88P8`(88(@MMN4&#"327>76$32#"'.#"#"&'.54>54&'&54>7>7>32&z&^&./+>+)>J> Wm7' '"''? &4&c&^|h_bml/J@L@#* #M6:D 35sҟw$ '% ' \t3#!"&=463!2'.54>54''  @ 1O``O1CZZ71O``O1BZZ7@  @ N]SHH[3`)TtbN]SHH[3^)Tt!1&' 547 $4&#"2654632 '&476 ==嘅}(zVl''ٌ@uhyyhu9(}VzD##D# =CU%7.5474&#"2654632%#"'&547.'&476!27632#76$7&'7+NWb=嘧}(zVj\i1  z,X Y[6 $!%'FuJiys?_9ɍ?kyhun(}Vz YF  KA؉La  02-F"@Qsp@_!3%54&+";264'&+";26#!"&'&7>2    #%;"";%#`,@L 5 `   `  L`4LH` `   a 5 L@ #37;?Os!!!!%!!!!%!!!!!!!!%!!4&+";26!!%!!!!74&+";26%#!"&546;546;2!546;232 `@ `@ @@ @ @  @  @  @  @ L44LL4^B@B^^B@B^4L  @@@@    @@   @@    M4LL44L`B^^B``B^^B`L7q.+"&=46;2#"&=".'673!54632#"&=!"+"&=46;2>767>3!546327>7&54>$32dFK1A  0) L.٫C58.H(Ye#3C $=463!22>=463!2#!"&5463!2#!"&5463!2H&&/7#"&463!2!2LhLLhLhLLh! &&&&& &4hLLhLLhLLhL%z< 0&4&& )17&4& &&#!"&5463!2!2\@\\@\\@\\\\ W*#!"&547>3!2!"4&5463!2!2W+B"5P+B@"5^=\@\ \H#t3G#3G:_Ht\\ @+32"'&46;#"&4762&&4&&44&&44&&4@"&=!"'&4762!54624&&44&&44&&4&& !!!3!!0@67&#".'&'#"'#"'32>54'6#!"&5463!28ADAE=\W{O[/5dI kDtpČe1?*w@www (M& B{Wta28r=Ku?RZ^GwT -@www$2+37#546375&#"#3!"&5463ww/Dz?swww@wS88 ww#'.>4&#"26546326"&462!5!&  !5!!=!!%#!"&5463!2B^8(Ԗ>@|K55KK55K^B(8ԖԖ€>v5KK55KKHG4&"&#"2654'32#".'#"'#"&54$327.54632@pp)*Pppp)*Pb '"+`N*(a;2̓c`." b PTY9ppP*)pppP*)b ".`(*Nͣ2ͣ`+"' b MRZB4&"24&"264&"26#"/+"&/&'#"'&547>7&/.=46?67&'&547>3267676;27632#"&'"'#"'&547&'&=4767&547>32626?2#"&'"'#"'&547&'&=4767&547>32626?2ԖLhLKjKLhLKjK "8w s%(  ")v  >  "8x s"+  ")v  <  3zLLz3 3>8L3)x3 3zLLz3 3>8L3)x3 ԖԖ4LL45KK54LL45KK #)0C wZ l/ Y N,& #)0C vZl. Y L0"qG^^Gqq$ ]G)FqqG^^Gqq$ ]G)Fq%O#"'#"&'&4>7>7.546$ '&'&'# '32$7>54'VZ|$2 $ |E~E<| $ 2$|ZV:(t}X(  &%(Hw쉉xH(%& (XZT\MKG<m$4&"24&#!4654&#+32;254'>4'654&'>7+"&'&#!"&5463!6767>763232&4&&4N2`@`%)7&,$)' %/0Ӄy#5 +1 &<$]`{t5KK5$e:1&+'3TF0h4&&4&3M:;b^v+D2 5#$IIJ 2E=\$YJ!$MCeM-+(K55KK5y*%Au]c>q4&"24&'>54'654&'654&+"+322654&5!267+#"'.'&'&'!"&5463!27>;2&4&&4+ 5#bW0/% ')$,&7)%`@``2Nh0##T3'"( 0;e$5KK5 tip<& 1&4&&4&#\=E2&%IURI$#5 2D+v^b;:M2gc]vDEA%!bSV2MK55K(,,MeCM$!I@#"&547&547%6@?V8 b% I)94.""'." 67"'.54632>32+C`\hxeH>Hexh\`C+ED4 #LoP$$Po>Q|I.3MCCM3.I|Q/Z$_dC+I@$$@I+ (@%#!"&5463!2#!"3!:"&5!"&5463!462 ww@  B^^B  4&@&&&4 `  ww   ^B@B^ 24& && &%573#7.";2634&#"35#347>32#!"&5463!2FtIG9;HIxI<,tԩw@wwwz4DD43EEueB&#1s@www .4&"26#!+"'!"&5463"&463!2#2&S3 Ll&c4LL44LL4c@& &{LhLLhL'?#!"&5463!2#!"3!26546;2"/"/&47'&463!2www@B^^B@B^@&4t  r &&`ww@w@^BB^^B@R&t r  4&&@"&5!"&5463!462 #!"&54&>3!2654&#!*.54&>3!24&@&&&4 sw  @B^^B  @w4& && &3@w   ^BB^    I&5!%5!>732#!"&=4632654&'&'.=463!5463!2!2JJSq*5&=CKuuKC=&5*q͍S8( ^B@B^ (8`N`Ѣ΀GtO6)"M36J[E@@E[J63M")6OtG(8`B^^B`8 ',26'&'&76'6'&6&'&6'&4#"7&64 654'.'&'.63226767.547&7662>76#!"&5463!2  /[  . =XĚ4,+"  * +, 1JH'5G:: #L5+@=&#w@wwwP.1GE,ԧ4 4+ ; /5cFO:>JJ>:O9W5$@(b 4 @www'?$4&"2$4&"2#!"&5463!3!267!2#!#!"&5!"'&762&4&&4&&4&&48(@(88(c==c(8*&&*6&4&&4&&4&&4& (88(@(88HH88`(@&&('@1c4&'.54654'&#"#"&#"32632327>7#"&#"#"&54654&54>76763232632   N<;+gC8A`1a99gw|98aIe$IVNz<:LQJ  ,-[% 061I()W,$-7,oIX()oζA;=N0 eTZ  (O#".'&'&'&'.54767>3232>32 e^\4?P bMO0# 382W# & 9C9 Lĉ" 82<*9FF(W283 #0OMb P?4\^e FF9*<28 "L 9C9 & #!"3!2654&#!"&5463!2`B^^B@B^^ީwww@w^BB^^B@B^ww@w#!72#"' #"'.546763YY !''!0#GG$/!''!&UUjZ 8""8  X! 8" "8 GW4.'.#"#".'.'.54>54.'.#"32676#!"&5463!2 1.- +$)  c8 )1)  05.D <90)$9w@wwwW  )1) 7c  )$+ -.1 9$)0< D.59@www,T1# '327.'327.=.547&54632676TC_LҬ#+i!+*pDNBN,y[`m`%i]hbEm}a u&,SXK &$f9s? _#"!#!#!54632V<%'ЭHH (ںT\dksz &54654'>54'6'&&"."&'./"?'&546'&6'&6'&6'&6'&74"727&6/a49[aA)O%-j'&]]5r-%O)@a[9' 0BA; + >HCU  #  $  2  AC: oM=a-6OUwW[q ( - q[WwUP6$C +) (  8&/ &eMa  & $      %+"&54&"32#!"&5463!54 &@&Ԗ`(88(@(88(r&&jj8((88(@(8#'+2#!"&5463"!54&#265!375!35!B^^BB^^B   `^B@B^^BB^  ` !="&462+"&'&'.=476;+"&'&$'.=476; pppp$!$qr % }#ߺppp!E$ rqܢ# % ֻ!)?"&462"&4624&#!"3!26!.#!"#!"&547>3!2/B//B//B//B @   2^B@B^\77\aB//B//B//B/@    ~B^^B@2^5BB52.42##%&'.67#"&=463! 25KK5L4_u:B&1/&.- zB^^B4LvyKjK4L[!^k'!A3;):2*547&5462;U gIv0ZZ0L4@Ԗ@4L2RX='8P8'=XR U;Ig0,3lb??bl34LjjL4*\(88(\}I/#"/'&/'&?'&'&?'&76?'&7676767676` (5 )0 ) *) 0) 5(  (5 )0 )))) 0) 5( *) 0) 5(  )5 )0 )**) 0) 5)  )5 )0 )*5h$4&"24&#!4>54&#"+323254'>4'654&'!267+#"'&#!"&5463!2>767>32!2&4&&4N2$YGB (HGEG HQ#5K4Li!<;5KK5 A# ("/?&}vh4&&4&3M95S+C=,@QQ9@@IJ 2E=L5i>9eME;K55K J7R>@#zD<5=q%3#".'&'&'&'.#"!"3!32>$4&"2#!"#"&?&547&'#"&5463!&546323!2` #A<(H(GY$2NL4K5#aWTƾh&4&&4K5;=!ihv}&?/"( #A  5K2*! Q@.'!&=C+S59M34L=E2 JI UR@@&4&&4&5K;ELf9>igR7J K5h4&"24#"."&#"4&#"".#"!54>7#!"&54.'&'.5463246326326&4&&4IJ 2E=L43M95S+C=,@QQ9@@E;K55K J7R>@#zD9eMZ4&&4&<#5K4LN2$YGB (HGEG HV;5KK5 A# ("/?&}vhi!<4<p4.=!32>332653272673264&"2/#"'#"&5#"&54>767>5463!2@@2*! Q@.'!&=C+S59M34L.9E2 JI UR&4&&4&Lf6Aig6Jy#@>R7J K55K;E@TƾH #A<(H(GY$2NL4K#5#a=4&&4&D=ihv}&?/"( #A  5KK5;+54&#!764/&"2?64/!26 $$ & [6[[j6[&^aa@&4[[6[[6&+^aa+4/&"!"3!277$ $$ [6[ &&[6j[ ^aae6[j[6&&4[j[^aa+4''&"2?;2652?$ $$ [6[[6&&4[^aaf6j[[6[ &&[^aa+4/&"4&+"'&"2? $$ [6&&4[j[6[j^aad6[&& [6[[j^aa   $2>767676&67>?&'4&'.'.'."#&6'&6&'3.'.&'&'&&'&6'&>567>#7>7636''&'&&'.'"6&'6'..'/"&'&76.'7>767&.'"76.7"7"#76'&'.'2#22676767765'4.6326&'.'&'"'>7>&&'.54>'>7>67&'&#674&7767>&/45'.67>76'27".#6'>776'>7647>?6#76'6&'676'&67.'&'6.'.#&'.&6'&.5/a^D&"      4   $!   #          .0"Y +  !       $     "  +       Α      ^aa                        P   ' -( # * $  "  !     * !   (         $      2 ~/$4&"2 #"/&547#"32>32&4&&4V%54'j&&'/덹:,{ &4&&4&V%%l$65&b'Cr! " k[G +;%!5!!5!!5!#!"&5463!2#!"&5463!2#!"&5463!2&&&&&&&&&&&&@&&&&&&&&&&&&{#"'&5&763!2{' **)*)'/!5!#!"&5!3!26=#!5!463!5463!2!2^B@B^&@&`^B`8(@(8`B^ B^^B&&B^(88(^G 76#!"'&? #!"&5476 #"'&5463!2 '&763!2#"'c)'&@**@&('c (&*cc*&' *@&('c'(&*cc*&('c'(&@*19AS[#"&532327#!"&54>322>32"&462 &6 +&'654'32>32"&462QgRp|Kx;CByy 6Fe= BPPB =eF6 ԖV>!pRgQBC;xK|Ԗ{QNa*+%xx5eud_C(+5++5+(C_due2ԖԖ>NQ{u%+*jԖԖp!Ci4/&#"#".'32?64/&#"327.546326#"/&547'#"/&4?632632(* 8( !)(A(')* 8( !USxySSXXVzxTTUSxySSXXVzxT@(  (8 *(('( (8 SSUSx{VXXTTSSUSx{VXXT#!"5467&5432632t,Ԟ;F`j)6,>jK?s !%#!"&7#"&463!2+!'5#8EjjE8@&&&&@XYY&4&&4&qDS%q%N\jx2"&4#"'#"'&7>76326?'&'#"'.'&676326326&'&#"32>'&#"3254?''74&&4&l NnbSVZ bRSD zz DSRb)+USbn \.2Q\dJ'.2Q\dJ.Q2.'Jd\Q2.'Jd`!O` ` &4&&4r$#@B10M5TNT{L5T II T5L;l'OT4M01B@#$*3;$*3;;3*$;3*$: $/ @@Qq`@"%3<2#!"&5!"&5467>3!263! !!#!!46!#!(88(@(8(8(`((8D<++<8(`(8(`8(@(88( 8((`(8((<`(8(``(8||?%#"'&54632#"'&#"32654'&#"#"'&54632|udqܟs] = OfjL?R@T?"& > f?rRX=Edudsq = _MjiL?T@R?E& f > =XRr?b!1E)!34&'.##!"&5#3463!24&+";26#!"&5463!2 08((88(@(8  8((88((`(1  `(88((88(@  `(88(@(8(`#!"&5463!2w@www`@www/%#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&&&&&@'7G$"&462"&462#!"&=463!2"&462#!"&=463!2#!"&=463!2ppppppp @   ppp @    @   Рpppppp  ppp    <L\l|#"'732654'>75"##5!!&54>54&#"'>3235#!"&=463!2!5346=#'73#!"&=463!2#!"&=463!2}mQjB919+i1$AjM_3</BB/.#U_:IdDRE @  k*Gj @   @   TP\BX-@8 C)5Xs J@$3T4+,:;39SG2S.7<  vcc)) %Ll}    5e2#!"&=463%&'&5476!2/&'&#"!#"/&'&=4'&?5732767654'&@02uBo  T25XzrDCBBEh:%)0%HPIP{rQ9f#-+>;I@KM-/Q"@@@#-bZ $&P{<8[;:XICC>.'5oe80#.0(  l0&%,"J&9%$<=DTIcs&/6323276727#"327676767654./&'&'737#"'&'&'&54'&54&#!"3!260% <4"VRt8<@< -#=XYhW8+0$"+dTLx-'I&JKkmuw<=V@!X@ v '|N;!/!$8:IObV;C#V  &   ( mL.A:9 !./KLwPM$@@ /?O_o%54&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!26#!"&5463!2@@@@@@@@@^BB^^B@B^NB^^B@B^^#+3 '$"/&4762%/?/?/?/?%k*66bbbb|<<<bbbbbbbb%k66Ƒbbb<<<<^bbbbbb@M$4&"2!#"4&"2&#"&5!"&5#".54634&>?>;5463!2LhLLh LhLLhL! 'ԖԖ@' !&  ?&&LhLLhL hLLhL jjjj &@6/" &&J#"'676732>54.#"7>76'&54632#"&7>54&#"&54$ ok; -j=yhwi[+PM 3ѩk=J%62>VcaaQ^ ]G"'9r~:`}Ch 0=Z٤W=#uY2BrUI1^Fk[|aL2#!67673254.#"67676'&54632#"&7>54&#"#"&5463ww+U ,iXբW<"uW1AqSH1bdww'74'!3#"&46327&#"326%35#5##33#!"&5463!20U6cc\=hlࠥYmmnnnnw@wwww&46#Ȏ;edwnnnnn@www ]#/#"$&6$3 &#"32>7!5!%##5#5353Еttu{zz{SZC` cot*tq||.EXN#?? ,<!5##673#$".4>2"&5!#2!46#!"&5463!2rM* *M~~M**M~~M*jjj&&&&`P%挐|NN||NN|*jjjj@&&&&@ "'&463!2@4@&Z4@4&@ #!"&4762&&4Z4&&4@@ "'&4762&4@4&@&4&@ "&5462@@4&&44@&&@ 3!!%!!26#!"&5463!2`m` ^BB^^B@B^  `@B^^BB^^@ "'&463!2#!"&4762@4@&&&&44@4&Z4&&4@ "'&463!2@4@&4@4&@ #!"&4762&&4Z4&&4@:#!"&5;2>76%6+".'&$'.5463!2^B@B^,9j9Gv33vG9H9+bI\ A+=66=+A [">nSMA_:B^^B1&c*/11/*{'VO3@/$$/@*?Nh^l+!+"&5462!4&#"!/!#>32]_gTRdgdQV?U I*Gg?!2IbbIJaaiwE3300 084#"$'&6?6332>4.#"#!"&54766$32z䜬m IwhQQhbF*@&('kz   _hQнQGB'(&*eoz(q!#"'&547"'#"'&54>7632&4762.547>32#".'632%k'45%&+~(  (h  &  \(  (  &  ~+54'k%5%l%%l$65+~  &  (  (\  &  h(  (~+%'!)19K4&"24&"26.676&$4&"24&"24&"2#!"'&46$ KjKKj KjKKje2.e<^P,bKjKKjKjKKj KjKKj##LlLKjKKjK jKKjK~-M7>7&54$ LhяW.{+9E=cQdFK1A  0) pJ2`[Q?l&٫C58.H(Y':d 6?32$64&$ #"'#"&'&4>7>7.546'&'&'# '32$7>54'Yj`a#",5NK ~EVZ|$2 $ |: $ 2$|ZV:(t}hfR88T h̲X(  &%(Hw(%& (XZT\MKG{x|!#"'.7#"'&7>3!2%632u  j H{(e 9 1bU#!"&546;5!32#!"&546;5!32#!"&546;5463!5#"&5463!2+!2328((88(``(88((88(``(88((88(`L4`(88(@(88(`4L`(8 (88(@(88((88(@(88((88(@(84L8(@(88((8L48OY"&546226562#"'.#"#"'.'."#"'.'.#"#"&5476$32&"5462И&4&NdN!>! 1X:Dx+  +ww+  +xD:X1 -U !*,*&4&hh&&2NN2D &  ..J< $$ 767#"&'"&547&547&547.'&54>2l4  2cKEooED ) ) Dg-;</- ?.P^P.? -/<;-gYY  .2 L4H|O--O|HeO , , Oeq1Ls26%%4.2,44,2.4%%62sL1qcqAAq4#!#"'&547632!2#"&=!"&=463!54632  @  `     ` ?`   @  @  !    54&+4&+"#"276#!"5467&5432632   `  _ v,Ԝ;G_j)``    _ ԟ7 ,>jL>54'&";;265326#!"5467&5432632    v,Ԝ;G_j) `   `7 ,>jL>X`$"&462#!"&54>72654&'547 7"2654'54622654'54&'46.' &6 &4&&4&yy %:hD:FppG9Fj 8P8 LhL 8P8 E; Dh:% >4&&4&}yyD~s[4Dd=PppP=d>hh>@jY*(88(*Y4LL4Y*(88(*YDw" A4*[s~>M4&"27 $=.54632>32#"' 65#"&4632632 65.5462&4&&4G9& <#5KK5!!5KK5#< &ܤ9Gpp&4&&4&@>buោؐ&$KjKnjjKjK$&jjb>Ppp %!5!#"&5463!!35463!2+32@\\8(@(8\@@\\@\(88(\@ 34#"&54"3#!"&5!"&5>547&5462;U gI@L4@Ԗ@4L2RX='8P8'=XR U;Ig04LjjL4*\(88(\@"4&+32!#!"&+#!"&5463!2pP@@Pjj@@\@\&0pj \\&-B+"&5.5462265462265462+"&5#"&5463!2G9L44L9G&4&&4&&4&&4&&4&L44L &=d4LL4 d=&&`&&&&`&&&&4LL4  &#3CS#!"&5463!2!&'&!"&5!463!2#!"&52#!"&=4632#!"&=463(8((88((`x c`(8@@@`((88(@(8(D 9 8(`@@@@@/?O_o-=%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!!5463!2#!"&5463!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ &&&&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @   `&&&& /?O_o%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!#!"&=!!5463!24&+"#54&+";26=3;26%#!"&5463!463!2!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ 8(@(8 @  @  @  @  @ &&&@8((8@&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @  (88(  @  ``   `` -&&& (88(&@<c$4&"2!#4&"254&+54&+"#";;26=326+"&5!"&5#"&46346?>;463!2KjKKjKjKKj&ԖԖ&&@&&KjKKjK jKKjK .&jjjj&4&@@&&#'1?I54&+54&+"#";;26=326!5!#"&5463!!35463!2+32 \\8(@(8\ \\@\(88(\: #32+53##'53535'575#5#5733#5;2+3@E&&`@@` `@@`&&E%@`@ @ @      @ 0 @!3!57#"&5'7!7!K5@   @5K@@@ #3%4&+"!4&+";265!;26#!"&5463!2&&&&&&&&w@www&&@&&&&@&&@www#354&#!4&+"!"3!;265!26#!"&5463!2&&&&&@&&@&w@www@&@&&&&&&@&:@www-M3)$"'&4762 "'&4762 s 2  .   2 w 2  .   2 w 2    2  ww  2    2  ww M3)"/&47 &4?62"/&47 &4?62S .  2 w 2   .  2 w 2  M . 2    2 .  . 2    2 .M3S)$"' "/&4762"' "/&47623 2  ww  2    2  ww  2    2 w 2   .v 2 w 2   .M3s)"'&4?62 62"'&4?62 623 .  . 2    2 .  . 2    2 .   2 w 2v .   2 w 2-Ms3 "'&4762s w 2  .   2 ww  2    2 MS3"/&47 &4?62S .  2 w 2  M . 2    2 .M 3S"' "/&47623 2  ww  2   m 2 w 2   .M-3s"'&4?62 623 .  . 2    2- .   2 w 2/4&#!"3!26#!#!"&54>5!"&5463!2  @ ^B && B^^B@B^ @  MB^%Q= &&& $$ (r^aa(^aa!C#!"&54>;2+";2#!"&54>;2+";2pPPpQh@&&@j8(PppPPpQh@&&@j8(Pp@PppPhQ&&j (8pPPppPhQ&&j (8p!C+"&=46;26=4&+"&5463!2+"&=46;26=4&+"&5463!2Qh@&&@j8(PppPPpQh@&&@j8(PppPPp@hQ&&j (8pPPppP@hQ&&j (8pPPpp@@ #+3;G$#"&5462"&462"&462#"&462"&462"&462"&462#"&54632K54LKj=KjKKjKjKKjL45KKjK<^^^KjKKjppp\]]\jKL45KjKKjKujKKjK4LKjKK^^^jKKjKpppr]]\  $$ ^aaQ^aa,#"&5465654.+"'&47623   #>bqb&44&ɢ5"  #D7euU6 &4&m 1X".4>2".4>24&#""'&#";2>#".'&547&5472632>3=T==T==T==T=v)GG+v@bRRb@=&\Nj!>3lkik3hPTDDTPTDDTPTDDTPTDD|x xXK--K|Mp<# )>dA{RXtfOT# RNftWQ,%4&#!"&=4&#!"3!26#!"&5463!2!28(@(88((88((8\@\\@\\(88(@(88(@(88@\\\\ u'E4#!"3!2676%!54&#!"&=4&#!">#!"&5463!2!2325([5@(\&8((88((8,9.+C\\@\ \6Z]#+#,k(88(@(88(;5E>:5E\\\ \1. $4@"&'&676267>"&462"&462.  > $$ n%%/02 KjKKjKKjKKjKfff^aayy/PccP/jKKjKKjKKjKffff@^aa$4@&'."'.7>2"&462"&462.  > $$ n20/%7KjKKjKKjKKjKfff^aa3/PccP/y jKKjKKjKKjKffff@^aa +7#!"&463!2"&462"&462.  > $$ &&&&KjKKjKKjKKjKfff^aa4&&4&jKKjKKjKKjKffff@^aa#+3C54&+54&+"#";;26=3264&"24&"2$#"'##"3!2@@KjKKjKKjKKjKܒ,gjKKjKKjKKjKXԀ,, #/;GS_kw+"=4;27+"=4;2'+"=4;2#!"=43!2%+"=4;2'+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;54;2!#!"&5463!2`````````````````````p`K55KK55Kp`````````````````````````5KK55KK@*V#"'.#"63232+"&5.5462#"/.#"#"'&547>32327676R?d^7ac77,9xm#@#KjK# ڗXF@Fp:f_ #WIpp&3z h[ 17q%q#::#5KKu't#!X: %#+=&>7p @ *2Fr56565'5&'. #"32325#"'+"&5.5462#"/.#"#"'&547>32327676@ͳ8 2.,#,fk*1x-!#@#KjK# ڗXF@Fp:f_ #WIpp&3z e`vo8t-  :5 [*#::#5KKu't#!X: %#+=&>7p  3$ "/&47 &4?62#!"&=463!2I.  2 w 2   -@). 2    2 . -@@-S$9%"'&4762  /.7> "/&47 &4?62i2  .   2 w E > u > .  2 w 2   2    2  ww !   h. 2    2 . ;#"'&476#"'&7'.'#"'&476' )'s "+5+@ա' )'F*4*Er4M:}}8 GO *4*~ (-/' #"'%#"&7&67%632B;>< V??V --C4 <B=cB5 !% %!b 7I))9I7 #"'.5!".67632y( #  ##@,( )8! !++"&=!"&5#"&=46;546;2!76232-SSS  SS``  K$4&"24&"24&"27"&5467.546267>5.5462 8P88P88P88P8P88P4,CS,4pp4,,4pp4,6d7AL*',4ppP88P8P88P8HP88P8`4Y&+(>EY4PppP4Y4Y4PppP4Y%*54&#"#"/.7!2<'G,')7N;2]=A+#H  0PRH6^;<T%-S#:/*@Z}   >h.%#!"&=46;#"&=463!232#!"&=463!2&&&@@&&&@&&&&&&&&&&&&f&&&&b#!"&=463!2#!"&'&63!2&&&&''%@% &&&&&&&&k%J%#/&'#!53#5!36?!#!'&54>54&#"'6763235 Ź}4NZN4;)3.i%Sin1KXL7觧*  #& *@jC?.>!&1' \%Awc8^;:+54&#"'6763235 Ź}4NZN4;)3.i%PlnEcdJ觧*  #& *-@jC?.>!&1' \%AwcBiC:D'P%! #!"&'&6763!2P &:&? &:&?5"K,)""K,)h#".#""#"&54>54&#"#"'./"'"5327654.54632326732>32YO)I-D%n  "h.=T#)#lQTv%.%P_ % %_P%.%vUPl#)#T=@/#,-91P+R[Ql#)#|'' 59%D-I)OY[R+P19-,##,-91P+R[YO)I-D%95%_P%.%v'3!2#!"&463!5&=462 =462 &546 &&&&&4&r&4&@&4&&4&G݀&&&&f s CK&=462 #"'32=462!2#!"&463!5&'"/&4762%4632e*&4&i76`al&4&&&&&}n  R   R zfOego&&5`3&&&4&&4& D R   R zv"!676"'.5463!2@@w^Cct~5  5~tcC&&@?JV|RIIR|V&&#G!!%4&+";26%4&+";26%#!"&546;546;2!546;232@@@@L44LL4^B@B^^B@B^4L  N4LL44L`B^^B``B^^B`LL4&"2%#"'%.5!#!"&54675#"#"'.7>7&5462!467%632&4&&4  @ o&&}c ;pG=(  8Ai8^^.   &4&&4&` ` fs&& jo/;J!# 2 KAE*,B^^B! ` $ -4&"2#"/&7#"/&767%676$!28P88PQr @ U @ {`PTP88P8P`  @U @rQ!6'&+!!!!2Ѥ 8̙e;<*@8 !GGGQII %764' 64/&"2 $$ f3f4:4^aaf4334f:4:^aa %64'&" 2 $$ :4f3f4F^aa4f44f^aa 764'&"27 2 $$ f:4:f4334^aaf4:4f3^aa %64/&" &"2 $$ -f44f4^aa4f3f4:w^aa@7!!/#35%!'!%j/d jg2|855dc b @! !%!!7!FG)DH:&H dS)U4&"2#"/ $'#"'&5463!2#"&=46;5.546232+>7'&763!2&4&&4f ]wq4qw] `dC&&:FԖF:&&Cd`4&&4& ]] `d[}&&"uFjjFu"&&y}[d#2#!"&546;4 +"&54&" (88(@(88( r&@&Ԗ8((88(@(8@&&jj'3"&462&    .  > $$ Ԗ>aX,fff^aaԖԖa>TX,,~ffff@^aa/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88((88((88((88((88/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88(88((88(88((885E$4&"2%&'&;26%&.$'&;276#!"&5463!2KjKKj   f  \ w@wwwjKKjK"G   ܚ  f   @www   $64'&327/a^ ! ^aaJ@%% 65/ 64'&"2 "/64&"'&476227<ij6j6u%k%~8p8}%%%k%}8p8~%<@% %% !232"'&76;!"/&76  ($>( J &% $%64/&"'&"2#!"&5463!2ff4-4ff4fw@wwwf4f-f4@www/#5#5'&76 764/&"%#!"&5463!248` # \P\w@www4`8  #@  `\P\`@www)4&#!"273276#!"&5463!2& *f4 'w@www`&')4f*@www%5 64'&"3276'7>332#!"&5463!2`'(wƒa8! ,j.( &w@www`4`*'?_`ze<  bw4/*@www-.  6 $$  (r^aaO(_^aa -"'&763!24&#!"3!26#!"&5463!2yB(( @   w@www]#@##   @ @www -#!"'&7624&#!"3!26#!"&5463!2y((@B@u @   w@www###@  @ @www -'&54764&#!"3!26#!"&5463!2@@####@w@wwwB((@@www`%#"'#"&=46;&7#"&=46;632/.#"!2#!!2#!32>?6#  !"'?_  BCbCaf\ + ~2   }0$  q 90r p r%D p u?#!"&=46;#"&=46;54632'.#"!2#!!546;2D a__ g *`-Uh1    ߫}   $^L  4b+"&=.'&?676032654.'.5467546;2'.#"ǟ B{PDg q%%Q{%P46'-N/B).ĝ 9kC< Q 7>W*_x*%K./58`7E%_ ,-3  cVO2")#,)9;J) "!* #VD,'#/&>AX>++"''&=46;267!"&=463!&+"&=463!2+32Ԫ$   pU9ӑ @/*f o  VRfq f=SE!#"&5!"&=463!5!"&=46;&76;2>76;232#!!2#![       % )   "  Jg Uh BW&WX hU g 84&#!!2#!!2#!+"&=#"&=46;5#"&=46;463!2j@jo g|@~vv u n#467!!3'##467!++"'#+"&'#"&=46;'#"&=46;&76;2!6;2!6;232+32QKt# #FNQo!"դѧ !mY Zga~bm] [o"U+, @h h@@X hh @83H\#5"'#"&+73273&#&+5275363534."#22>4.#2>ut 3NtRP*Ho2 Lo@!R(Ozh=,GID2F 8PuE>.'%&TeQ,jm{+>R{?jJrL6V @`7>wmR1q uWei/rr :Vr" $7V4&#"326#"'&76;46;232!5346=#'73#"'&'73267##"&54632BX;4>ID2F +>R{8PuE>.'%&TeQ,jm{?jJrL6 @`rr :Vr3>wmR1q uWei@ \%4&#"326#!"&5463!2+".'&'.5467>767>7>7632!2&%%&&&& &7.' :@$LBWM{#&$h1D!  .I/! Nr&&%%&&&&V?, L=8=9%pEL+%%r@W!<%*',<2(<&L,"r@ \#"&546324&#!"3!26%#!#"'.'.'&'.'.546767>;&%%&&&& &i7qN !/I.  !D1h$&#{MWBL$@: '.&&%%&&&&=XNr%(M&<(2<,'*%<!W@r%%+LEp%9=8=L  +=\d%54#"327354"%###5#5#"'&53327#"'#3632#"'&=4762#3274645"=424'.'&!  7>76#'#3%54'&#"32763##"'&5#327#!"&5463!2BBPJNC'%! B? )#!CC $)  54f"@@ B+,A  A+&+A  ZK35N # J!1331CCC $)w@www2"33FYF~(-%"o4*)$(* (&;;&&9LA3  8334S,;;,WT+<<+T;(\g7x:&&::&&<r%-@www  +=[c}#"'632#542%35!33!3##"'&5#327%54'&#"5#353276%5##"=354'&#"32767654"2 '.'&547>76 3#&'&'3#"'&=47632%#5#"'&53327''RZZ:kid YYY .06 62+YY-06 R[!.'CD''EH$VVX::Y X;:Y fyd/%jG&DC&&CD&O[52. [$C-D..D^^* ly1%=^I86i077S 3 $EWgO%33%OO%35 EEFWt;PP;pt;PP;pqJgTFQ%33&PP%33%R 7>%3!+}{'+"&72'&76;2+"'66;2U &  ( P *'eJ."-dZ-n -'74'&+";27&+";276'56#!"&5463!2~} 7e  ۩w@www"  $Q #'!# @www I-22#!&$/.'.'.'=&7>?>369II ! ' $ !01$$%A' $ ! g  \7@)(7Y   \7@)(7Y @ '5557 ,VWQV.RW=?l%l`~0  !#!#%777 5! R!!XCCfff݀# `,{{{`Og4&"2 &6 $"&462$"&62>7>7>&46.'.'. '.'&7>76 Ԗ HR6L66LGHyU2L  L2UyHHyU2L  L2UyHn X6X  XX ԖԖH6L66L6 L2UyHHyU2L  L2UyHHyU2L n6X  XX  2#!"&54634&"2$4&"2ww@ww||||||w@www||||||| !3 37! $$ n6^55^h ^aaM1^aaP *Cg'.676.7>.'$7>&'.'&'? 7%&'.'.'>767$/u5'&$I7ob?K\[zH,1+.@\7':Yi4&67&'&676'.'>7646&' '7>6'&'&7>7#!"&5463!2PR$++'TJXj7-FC',,&C ."!$28 h /" +p^&+3$ i0(w@www+.i6=Bn \C1XR:#"'jj 8Q.cAj57!? "0D$4" P[ & 2@wwwD"%.5#5>7>;!!76PYhpN!HrD0M C0N#>8\xx: W]oW-X45/%'#.5!5!#"37>#!"&5463!2p>,;$4 5eD+WcEw@wwwK()F ,VhV^9tjA0/@www@#"'&76;46;23   &  ++"&5#"&7632  ^  c  & @#!'&5476!2 &  ^  b '&=!"&=463!546  &    q&8#"'&#"#"5476323276326767q'T1[VA=QQ3qqHih"-bfGw^44O#A?66%CKJA}} !"䒐""A$@C3^q|z=KK?6 lk)  %!%!VVuuu^-m5w}n~7M[264&"264&"2"&546+"&=##"&5'#"&5!467'&766276#"&54632    *<;V<<O@-K<&4'>&4.'.'.'.'.'&6&'.'.6767645.'#.'6&'&7676"&'&627>76'&7>'&'&'&'&766'.7>7676>76&6763>6&'&232.'.6'4."7674.'&#>7626'.'&#"'.'.'&676.67>7>5'&7>.'&'&'&7>7>767&'&67636'.'&67>7>.'.67 \  U7  J#!W! '  " ';%  k )"    '   /7*   I ,6 *&"!   O6* O $.( *.'  .x,  $CN      * 6   7%&&_f& ",VL,G$3@@$+ "  V5 3"  ""#dA++ y0D- %&n 4P'A5j$9E#"c7Y 6" & 8Z(;=I50 ' !!e  R   "+0n?t(-z.'< >R$A"24B@( ~ 9B9, *$        < > ?0D9f?Ae  .(;1.D 4H&.Ct iY% *  7      J  <    W 0%$  ""I! *  D  ,4A'4J" .0f6D4pZ{+*D_wqi;W1G("% %T7F}AG!1#%  JG 3  '.2>Vb%&#'32&'!>?>'&' &>"6&#">&'>26 $$ *b6~#= XP2{&%gx| .W)oOLOsEzG< CK}E $MFD<5+ z^aa$MWM 1>]|YY^D եA<KmE6<" @9I5*^aa>^4./.543232654.#"#".#"32>#"'#"$&547&54632632':XM1h*+D($,/9p`DoC&JV;267676&#!"&=463!267 #!"'&5463!26%8#! &&Z"M>2! ^I 7LRx_@>MN""`=&&*%I},  L7_jj9/%4&#!"3!264&#!"3!26#!"&5463!2  &&&&&&&&19#"'#++"&5#"&5475##"&54763!2"&4628(3- &B..B& -3(8IggI`(8+Ue&.BB.&+8(kk`%-"&5#"&5#"&5#"&5463!2"&4628P8@B\B@B\B@8P8pPPp@`(88(`p.BB.0.BB.(88(Pppͺ!%>&'&#"'.$ $$ ^/(V=$<;$=V).X^aaJ`"(("`J^aa,I4."2>%'%"/'&5%&'&?'&767%476762%6[՛[[՛o ܴ   $ $ " $ $  ՛[[՛[[5` ^ ^ 2` `2 ^ ^ ` 1%#"$54732$%#"$&546$76327668ʴhf킐&^zs,!V[vn) 6<ׂf{z}))Ns3(@ +4&#!"3!2#!"&5463!2#!"&5463!2@&&&f&&&&@&&&&4&&4&@&&&&&&&& `BH+"/##"./#"'.?&5#"&46;'&462!76232!46 `&C6@Bb03eI;:&&&4L4&F Z4&w4) '' 5r&4&&4&&4}G#&/.#./.'&4?63%27>'./&'&7676>767>?>%6})(."2*&@P9A #sGq] #lh<* 46+(  < 5R5"*>%"/ +[>hy  K !/Ui%6&'&676&'&6'.7>%.$76$% $.5476$6?62'.76&&'&676%.76&'..676#"NDQt -okQ//jo_  %&JՂYJA-.-- 9\DtT+X?*<UW3' 26$>>W0 {"F!"E    ^f`$"_]\<`F`FDh>CwlsJ@ ;=?s  :i_^{8+?` ) O`s2RDE58/Kr #"'>7&4$&5mī"#̵$5$"^^W=acE*czk./"&4636$7.'>67.'>65.67>&/>z X^hc^O<q+f$H^XbVS!rȇr?5GD_RV@-FbV=3! G84&3Im<$/6X_D'=NUTL;2KPwtPt=  &ռ ,J~S/#NL,8JsF);??1zIEJpqDIPZXSF6\?5:NR=;.&1 +!"&=!!%!5463!2sQ9Qs***sQNQsBUw wUBFHCCTww%1#"&=!"&=463!54632.  6 $$     ` ?(r^aa    (_^aa%1#!#"'&47632!2.  6 $$   @  ` (r^aa  ?  @  (_^aa/#"'&476324&#!"3!26#!"&5463!2&@& @   w@www& @B@ &  @ @www"&462  >& $$ Ԗ*(r^aaԖԖ (^aa]6#"$54732>%#"'!"&'&7>32'!!!2f:лѪz~u: ((%`V6B^hD%i(]̳ޛ *>6߅r#! 3?^BEa߀#9#36'&632#"'&'&63232#!"&5463!2 Q,&U #+' ;il4L 92<D`w@www`9ܩ6ɽ ]`C477&@wwwD+"&5#"'&=4?5#"'&=4?546;2%6%66546;2  wwwwcB G]B Gty]ty #3C#!+"&5!"&=463!46;2!24&#!"3!26#!"&5463!2@`@`^BB^^B@B^www@w@`@`2@B^^BB^^ww@w'/?P+5#"&547.467&546;532!764'!"+32#323!&ln@ :MM: @nY*Yz--zY*55QDDU9pY-`]]`.X /2I$ t@@/!!/@@3,$,3$p$00&*0&& !P@RV2#"&/#"&/#"&546?#"&546?'&54632%'&54632763276%>S]8T;/M77T7%>ww@ww!"5bBBb// * 8(@(87)(8=%/' #?w@www#~$EE y &L(88e):8(%O r    O?GQaq47&67>&&'&67>&"$32#"#"'654  $&6 $6&$ CoL.*K  Px.* iSƓ i 7J ?~pi{_Я;lLUZ=刈刈_t'<Z :!   @! j`Q7  $ky, Rfk*4LlL=Z=刈&$&546$7%7&'5>]5%w&P?zrSF!| &0 ##!"&5#5!3!3!3!32!546;2!5463) );));;))&&&@@&&&  6 $&727"'%+"'&7&54767%&4762֬>4P t+8?::  ::A W` `EvEEvE<."e$IE&O &EI&{h.`m"&#"&'327>73271[ >+)@ (]:2,C?*%Zx/658:@#N C= E(oE=W'c:#!#"$&6$3 &#"32>7! ڝyy,{ۀہW^F!LC=y:yw߂0H\R%"N^ '&76232762$"&5462"&46274&"&'264&#"'&&#"32$54'>$ $&6$ G>>0yx14J55J5J44J5Fd$?4J55%6E#42F%$fLlLq>>11J44%&4Z%44J54R1F$Z-%45J521Z%F1#:ʎ 9LlL#Qa"'&7622762%"&5462"&546274&#"&'73264&#"'&&#"32654'>#!"&5463!2 55 **.>.-@-R.>.-@-<+*q6- -- 0OpoOxzRrqP6z~{{Prr^aa]054&"#"&5!2654632!#"&57265&'&#".'&'#"&5467%&4>7>3263232654.547'654'63277.'.*#">7?67>?>32#"'7'>3'>3235?KcgA+![,7*  2(-#=  /~[(D?G  |,)"# +)O8,+'6 y{=@0mI#938OAE` -  )y_/FwaH8j7=7?%a % %!?)L J 9=5]~pj  %(1$",I  $@((  +!.S -L__$'-9L 5V+ 6 T+6.8- $ 0 + t |S 16]&#"'&#"67>76'&'&#"67>32764.#"#.32>67>7 $&54>7>7>7rJ@ "kb2)W+ ,5/1   #   Z -!$IOXp7sLCF9vz NAG#/ 5|Հ';RKR/J#=$,9,+$UCS7'2"1  ! / ,   /--ST(::(ep4AM@=I>".)xΤlsY|qK@ %(YQ&N EHv~<Zx'#"&5467&6?2?'&"/.7.546326#"&'&/7264/7'764&"'?>>32.AUpIUxYE.A %%%h% %hJ%D,FZxULs TgxUJrVD %hJ%@/LefL.C %Jh%CV sNUxϠ@.FZyUHpVA %h&%% %Ji%CWpIUybJ/Uy^G,D %Jh%@U sMt UC %hJ%C-KfyEX[_gj&/&'.''67>7>7&'&'&'>76763>7>#&'&'767672'%'7'+"&'&546323267>7%#"'4'6767672,32,+DCCQLDf' % :/d B 4@ }  &!0$?Jfdf-.=6(:!TO? !IG_U% . k*.=; 5gN_X "  ##  292Q41   *6nA;| BS N.  %1$ 6 $nk^ '7GWgw2+"&5463#!"&5463!254&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26#"&=! B^^BB^^B:FjB^8((`( `(8^BB^^B@B^"vEj^B(8(`(8(/?O_o/?2#!"&5463;26=4&+";26=4&+";26=4&+";26=4&+"54&+";2654&+";2654&+";2654&+";2654&+";2654&#!"3!2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`' "&5#"&5&4762!762$"&462B\B@B\BOpP.BB..BB.8$PO広3CQ#".54>32#".546322#"&#"#"54>%".54>32%2#"&54> &X=L|<&X=M{2r_-$$-_rUU%&&5%ő'- "'.546762@FF$@B@$.&,&.]]|q#<<#(BB B%'-%'-'%'-"'%&'"'%.5467%467%62@ll@ll,@GG&!@@@@@@!&+#+#6#+$*`:p:px p=`$>>$&@&@ @&p@ &.A!!"!&2673!"5432!%!254#!5!2654#!%!2#!8Zp?vdΊens6(N[RWu?rt1SrF|iZ@7މoy2IMC~[R yK{T:%,AGK2#!"&5463!!2654'654.#532#532"&5!654&#"327#2#>!!ww@ww~uk'JTMwa| DH> I1q Fj?w@wwwsq*4p9O*¸Z^qh LE "(nz8B M'?"&4624&#"'.'324&#"3267##"&/632632.ʏhhMALR vGhг~~K „yO^   ʏʏВ*LM@!שwwȍde)qrOPqȦs:03=7'.?67'67%'>&%'7%7./6D\$>  "N,?a0#O 1G9'/P(1#00  ($=!F "9|]"RE<6 'o9%8J$\ :\HiTe<?}V#oj? d,6%N#" HlSVY]C =@C4&"2!.#!"4&"2+"&=!"&=#"&546;>3!232^^^Y ^^^`pppp`]ibbi]~^^^e^^^PppPPppP]^^]3;EM2+"&=!"&=#"&546;>;5463!232264&"!.#!"264&" ]`pppp`]ibbi^^^dY !^^^]@PppP@@PppP@]^^] ^^^e^^^ 3$#!#!"&5467!"&47#"&47#"&4762++&2 $$ 2&&&4&&Z4&&##&&4&4&44&m4&m+DP4'&#"32763232674'&!"32763 3264'&$#"32763232> $$ g* o`#ə0#z#l(~̠) -g+^aaF s" +g (* 3#!| #/IK/%*%D= )[^aa !!!'!!77!,/,-a/G t%/;<HTbcq%7.#"32%74'&"32765"/7627#"5'7432#"/7632#"5'7432#"&5'74632 #"/6327#"/6327#"/46329"&/462"&/>21"&/567632#!.547632632  *     X    ^  `    ^  b  c   fu U`59u  4J   l~ ~ F 2    m | O,           ru| u  " )9 $7 $&= $7 $&= $7 $&=  $&=46w`ww`ww`wb`VTEvEEvETVTEvEEvET*VTEvEEvET*EvEEvEEvEEv#^ct#!"&5463!2!&'&!"&5!632#"&'#"/&'&7>766767.76;267674767&5&5&'67.'&'&#3274(8((88((`x c`(8!3;:A0?ݫY   ^U 47D$    74U3I  |L38wtL0`((88(@(8(D 9 8(Q1&(!;  (g- Up~R2(/{E(Xz*Z%(i6CmVo8 #T#!"&5463!2!&'&!"&5!3367653335!3#4.5.'##'&'35(8((88((`x c`(8iFFZcrcZ`((88(@(8(D 9 8(kk" kkJ  ! k#S#!"&5463!2!&'&!"&5!%!5#7>;#!5#35!3#&'&/35!3(8((88((`x c`(8-Kg kL#DCJg  jLD`((88(@(8(D 9 8(jj jjkk kk#8C#!"&5463!2!&'&!"&5!%!5#5327>54&'&#!3#32(8((88((`x c`(8 G]L*COJ?0R\wx48>`((88(@(8(D 9 8(jjRQxk !RY#*2#!"&5463!2!&'&!"&5!!57"&462(8((88((`x c`(8Pppp`((88(@(8(D 9 8(ppp  #*7JR5#5#5#5##!"&5463!2!&'&!"&5##5!"&54765332264&"<(8((88((`x c`(8kޑcO"jKKjK`((88(@(8(D 9 8(SmmS?M&4&&4#9L^#!"&5463!2!&'&!"&5!#"/#"&=46;76276'.'2764'.(8((88((`x c`(8 6ddWW6&44`((88(@(8(D 9 8(. G5{{5]]$5995#3C#!"&5463!2!&'&!"&5!2#!"&5463#"'5632(8((88((`x c`(84LL44LL4l  `((88(@(8(D 9 8(L44LL44L  Z #7K[#!"&5463!2!&'&!"&5!>&'&7!/.?'&6?6.7>'(8((88((`x c`(8` 3  3  3  3 v  ?  `((88(@(8(D 9 8( & & - & &  ?   '6#'. '!67&54632".'654&#"32eaAɢ/PRAids`WXyzOvд:C;A:25@Ң>-05rn`H( ' gQWZc[ -%7' %'-'% %"'&54762[3[MN 3",""3,3"ong$߆]gn$+) ")")" x#W#"&#!+.5467&546326$32327.'#"&5463232654&#"632#".#"oGn\ u_MK'̨|g? CM7MM5,QAAIQqAy{b]BL4PJ9+OABIRo?z.z n6'+s:zcIAC65D*DRRD*wyal@B39E*DRRD*'/7  $&6$ 6277&47' 7'"' 6& 6'lLRRZB|RR>dZZLlLZRR«Z&>«|R ! $&54$7 >54'5PffP牉@s-ff`-c6721>?>././76&/7>?>?>./&31#"$&(@8!IH2hM>'  )-* h'N'!'Og,R"/!YQG54'63&547#5#"=3235#47##6323#324&"26%#!"&5463!2F]kbf$JMM$&N92Z2&`9UW=N9:PO;:dhe\=R +)&')-S99kJ<)UmQ/-Ya^"![Y'(<`X;_L6#)|tWW:;X  #'#3#!"&5463!2) p*xeשw@www0,\8@www9I#"'#"&'&>767&5462#"'.7>32>4."&'&54>32JrO<3>5-&FD(=Gq@C$39aLL²L4 &) @]v q#CO!~󿵂72765'./"#"&'&5 }1R<2" 7MW'$  ;IS7@5sQ@@)R#DvTA ; 0x I)!:> +)C 6.> !-I[4&#"324&#"3264&#"324&#"326&#"#".'7$4$32'#"$&6$32D2)+BB+)3(--(31)+BB+)4'--'4'#!0>R HMŰ9ou7ǖD䣣 R23('3_,--,R23('3_,--,NJ ?uWm%#"'%#"'.5 %&'&7632! ; `u%"(!]#c)(  #"'%#"'.5%&'&76 !  (%##fP_"(!)'+ʼn4I#"$'&6?6332>4.#"#!"&54766$32#!"&=46;46;2z䜬m IwhQQhbF*@&('k@z   _hQнQGB'(&*eozΘ@@`  >. $$ ffff^aafff^aa>"&#"#"&54>7654'&#!"#"&#"#"&54>765'46.'."&54632326323!27654'.5463232632,-,,",:! %]& %@2(/.+*)6! <.$..**"+8#  #Q3,,++#-:#"$$ /:yuxv)%$ /?CG%!5%2#!"&5463!5#5!52#!"&54632#!"&5463#5!5`&&&& &&&&&&&&@&&&&&&&&&&&&%2 &547%#"&632%&546 #"'6\~~\h ~\h\ V V VV%5$4&#"'64'73264&"&#"3272#!"&5463!2}XT==TX}}~>SX}}XS>~}w@www~:xx:~}}Xx9}}9xX}@www/>LXds.327>76 $&6$32762#"/&4762"/&47626+"&46;2'"&=462#"'&4?62E0l,  *"T.D@Yooo@5D [  Z  Z  [ ``[ Z  2 ,l0 (T" .D5@oooY@D, Z  [  [  Z ``EZ  [ 5%!  $&66='&'%77'727'%amlLmf?55>fFtuutFLlLHYC L||L Y˄(E''E*( /?IYiy%+"&=46;2+"&=46;2+"&=46;2+"&=46;2%"&=!#+"&=46;2+"&=46;2+"&=46;2+"&=46;2!54!54>$ +"&=46;2#!"&=@&&@3P > P3&&rrr&&rrr he 4LKM:%%:MKL4WT&&%/9##!"&563!!#!"&5"&5!2!5463!2!5463!2&&&&&&  &&&i@&&@&7'#5&?6262%%o;j|/&jJ%p&j;&i&p/|jţ%Jk%o%  :g"&5462#"&546324&#!"263662>7'&75.''&'&&'&6463!276i~ZYYZ~@OS;+[G[3YUD#o?D&G3I=JyTkBuhNV!WOhuAiSy*'^CC^'*SwwSTvvTSwwSTvvWID\_"[ gq# /3qFr2/ $rg%4 HffHJ4d#!#7!!7!#5!VFNrmNNN N!Y+?Ne%&'&'&7>727>'#&'&'&>2'&'&676'&76$7&'&767>76 '6# <;11x# *# G,T93%/#0vNZ;:8)M:( &C.J}2 %0  ^*  JF &7'X"2LDM" +6 M2+'BQfXV#+] #' L/(eB9  #,8!!!5!!5!5!5!5#26%!!26#!"&5!5&4& &pPPp@@&&@!&@PppP@*  9Q$"&54627"."#"&547>2"'.#"#"&5476$ "'&$ #"&5476$ (}R}hLK NN Ud: xx 8    ,, |2222 MXXM ic,>>,   ̺  '/7?KSck{4&"2$4&"24&"24&"24&"24&"24&"24&"24&"264&"24&#!"3!264&"2#!"&5463!2KjKKjKjKKjKjKKjKKjKKjKjKKjKjKKjKKjKKjKjKKjKLhLLhLKjKKj&&&&KjKKjL44LL44L5jKKjKKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjK4LL44LLjKKjK&&&&jKKjK4LL44LL 'E!#"+"&7>76;7676767>'#'"#!"&7>3!2W",&7' #$ &gpf5 O.PqZZdS -V"0kqzTxD!!8p8%'i_F?;kR(` !&)' (2!&6367! &63!2! `B 1LO(+#=)heCQg#s`f4#6q'X|0 -g >IY#6?>7&#!%'.'33#&#"#"/3674'.54636%#"3733#!"&5463!24  : @7vH%hEP{0&<'VFJo1,1.F6A#L44LL44L"% 7x'6 O\JYFw~v^fH$ ! "xdjD"!6`J4LL44LL +3@GXcgqz -<JX{&#"327&76'32>54.#"35#3;5#'#3537+5;3'23764/"+353$4632#"$2#462#"6462""'"&5&5474761256321##%354&'"&#"5#35432354323=#&#"32?4/&54327&#"#"'326'#"=35#5##3327"327'#"'354&3"5#354327&327''"&46327&#"3=#&#"32?"5#354327&3=#&"32?"#3274?67654'&'4/"&#!"&5463!2_gQQh^_~\[[\]_^hQQge<F$$$ !!&&/ !/  !! 00/e&'!"e$   '!!''   8''NgL44LL44LUQghQUk=("  ! =))=2( '! 'L#(>( & DC(>(zL#DzG)<)4LL44LL  BWbjq}+532%+5324&+32763#4&'.546327&#"#"'3265#"&546325&#"32 !264&"2%#'#735#535#535#3'654&+353#!"&5463!29$<=$@?SdO__J-<AA@)7")9,<$.%0*,G3@%)1??.+&((JgfJ*A!&jjjGZYGиwsswPiL>8aA !M77MM77M3! 4erJ]&3YM(, ,%7(#)  ,(@=)M%A20C&Mee(X0&ĖjjjV 8Z8J9N/4$ 8NN88NN  #&:O[ $?b3'7'#3#%54+32%4+324+323'%#5#'#'##337"&##'!!732%#3#3##!"&53733537!572!56373353#'#'#"5#&#!'#'#463!2#"5#"5!&+&+'!!7353273532!2732%#54&+#32#46.+#2#3#3##+53254&".546;#"67+53254&.546;#"#'#'##"54;"&;7335wY-AJF=c(TS)!*RQ+*RQ+Y,B^9^Ft`njUM ') ~PSPRm٘M77Mo7q @)U 8"E(1++NM77Mx378D62W74;9<-A"EA0:A F@1:ؗBf~~""12"4(w$#11#@}}!%+%5(v$:O\zK?* $\amcrVlOO176Nn23266&+"&#"3267;24&+"'&+";27%4&+";2?>23266&+"&#"3267;254+";27#76;2#!"&5463!23%#2%%,,  _3$$2%%M>AL Vb5)LDHeE:< EM j,K'-R M ~M>AR  Vb5)LEHeE:< E J ABI*'! ($rL44LL44Lv%1 %3!x*k $2 %3!;5h n a !(lI;F   rp p8;5h t a !(lI;F ` #k 4LL44LL  2HW[lt#"'5632#6324&'.54327&#"#"&'32767#533275#"=5&#"'#36323#4'&#"'#7532764&"24'&#"327'#"'&'36#!"&5463!2=!9n23BD$ &:BCRM.0AC'0RH`Q03'`.>,&I / * / 8/n-(G@5$ S3=,.B..B02^`o?7je;9G+L44LL44LyE%# Vb;A !p &'F:Aq)%)#orgT$ v2 8)2z948/{ 8AB..B/q?@r<7(g/4LL44LL ?#!"&'24#"&54"&/&6?&5>547&54626=L4@ԕ;U g3 T 2RX='8P8|5 4Ljj U;Ig@   `  "*\(88(]k  &N4#"&54"3 .#"#!"&'7!&7&/&6?&5>547&54626;U gIm*]Z0L4@ԕ=o=CT T 2RX='8P8|5  U;IgXu?bl3@4Ljja`   `  "*\(88(]k/7[%4&+";26%4&+";26%4&+";26!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@0 o`^BB^`5FN(@(NF5@@@u  @LSyuS@%44%,<H#"5432+"=4&#"326=46;2  >. $$ ~Isy9"SgR8vHD w ffff^aam2N+ )H-mF+10*F +fff^aab4&#"32>"#"'&'#"&54632?>;23>5!"3276#"$&6$3 k^?zb=ka`U4J{K_/4^W&  vx :XB0܂ff ) fzzXlz=lapzob35!2BX G@8  ' '=vN$\ff  1 SZz8zX#("/+'547'&4?6276 'D^h  i%5@%[i  h]@]h  i%@5%[i  h^@@)2#"&5476#".5327>OFi-ay~\~;'S{s:D8>)AJfh]F?X{[TC6LlG]v2'"%B];$-o%!2>7>3232>7>322>7>32".'.#"#"&'.#"#"&'.#"#546;!!!!!32#"&54>52#"&54>52#"&54>52-P&+#($P.-P$'#+&PZP&+#"+&P-($P-.P$(#+$P.-P$'#+&P-.P$+#pP@@PpH85K"&ZH85K"&ZH85K"&Z@Pp@@@pMSK5, :&LMSK5, :&LMSK5, :& !!3 ! @@@  #"$$3!!2"jaѻxlalxaaj!!3/"/'62'&63!2'y  `I  yMy `I y'W`#".'.#"32767!"&54>3232654.'&546#&'5&#" 4$%Eӕ;iNL291 ;XxR`f՝Q8TWiWgW:;*:`Qs&?RWXJ8 oNU0 J1F@#) [%6_POQiX(o`_?5"$iʗ\&>bds6aP*< -;iFn* -c1BWg4'.'4.54632#7&'.#"#"'.#"32767'#"&54632326#!"&5463!2#$( 1$6]' !E3P|ad(2S;aF9'EOSej]m] <*rYshpt.#)$78L*khw@wwwB % $/$G6 sP`X):F/fwH1pdlqnmPHuikw_:[9D'@www34."2>$4.#!!2>#!".>3!2QнQQнQQh~wwhfffнQQнQQнQZZQffff#>3!2#!".2>4."fffнQQнQQffffQнQQн ,\!"&?&#"326'3&'!&#"#"'  5467'+#"327#"&463!!'#"&463!2632(#AHs9q ci<= #]$ KjKKjKKjKKjH#j#H&&&KjKKjKg V i jKKjKKjKKjK ..n(([5KK55KK5[poNv<+#"'#"&546;&546$32322$B$22$$*$22$Xڭӯ$22$tX'hs2$ϧkc$22$1c$2F33F3VVT2#$2ԱVT2#$2g#2UU݃ 2$#2UU1݃2 ,u54#"67.632&#"32654'.#"32764.'&$#"7232&'##"&54732654&#"467&5463254632>32#"'&ru&9%" *#͟ O%GR=O&^opC8pP*bY _#$N Pb@6)?+0L15 "4$.Es  5IQ"!@ h "Y7e|J>ziPeneHbIlF>^]@n*9 6[_3#"&54632#.#"32%3#"&54632#.#"326%4&'.'&! ! 7>7>! =39? 6'_ >29? 5'17m-VU--,bW.뮠@Fyu0HC$뮠@Fyu0HC$L= ?? <=! A <`;+"&54&#!+"&5463!2#!"&546;2!26546;2pЇ0pp@Ipp>Sc+"&=46;254&+"&+";2=46;2;2=46;2;2%54&#!";2=;26#!"&5463!2A5DD5A7^6a7MB55B7?5B~```0`rr5A44A5v5AA5f*A``0` !!!! #!"&5463!2ړ7H7jv@vvv':@vvvMUahmrx#"'!"'!#"&547.547.54674&547&54632!62!632!#!627'!%!"67'#77!63!!7357/7'%# %'3/&=&' 5#?&547 6!p4q"""6" 'h*[ |*,@?wAUMpV@˝)Ϳw7({*U%K6=0(M "! O dX$k !! ! b [TDOi @6bxBAݽ5  ɝ:J +3,p x1Fi (R 463!#!"&5%'4&#!"3`а@..@A-XfB$.BB..C} )&54$32&'%&&'67"w`Rd]G{o]>p6sc(@wgmJPAjyYWa͊AZq{HZ:<dv\gx>2ATKn+;"'&#"&#"+6!263 2&#"&#">3267&#">326e~└Ȁ|隚Ν|ū|iyZʬ7Ӕްr|uѥx9[[9jj9ANN+,#ll"BS32fk[/?\%4&+";26%4&+";26%4&+";26%4&+";26%#!"&5467&546326$32]]eeeeee$~i qfN-*#Sjt2"'qCB8!'> !%)-159=AEIMQUY]agkosw{! %! 5!#5#5#5#5#57777????#5!#5!#5!#5!#5!#5!#5!#5#537#5!#5!#5!#5!#5!#55#535353535353%"&546326#"'#32>54.&54>3237.#"Q%%%%%%%%%?iiihOiixiiyiixiiArssrrssr%sssrrssNs%%%%%%%%%%'32#".543232654&#"#"&54654&#"#"&547>326ڞUzrhgrxSПdU 7#"&463!2!2&&4&&&&4&KjKKjKjKKj &&&%&& &&4&&&&4&&&5jKKjKKjKKjK%z 0&4&&3D7&4& %&'S4&"4&"'&"27"&462"&462!2#!"&54>7#"&463!2!2&4&4&4&4KjKKjKjKKj &&&%&& &&4&%&&ے&4"jKKjKKjKKjK%z 0&4&&3D7&4& %& & !'! !%!!!!%"'.763!2o]FooZY@:@!!gf//I62'"/"/"/"/"/"/"/7762762762762762762%"/77627&6?35!5!!3762762'"/"/"/"/"/"/%5#5!4ZSS6SS4SS4SS4SS4SS4SS4ZSS4SS4SS4SS4SS4SS4S-4ZSS4S@4SS4ZSS6SS4SS4SS4SS4SS4S@ZSSSSSSSSSSSSSSZSSSSSSSSSSSSSyZRRR@%:= :+: =RRZSSSSSSSSSSSSSCv!/&'&#""'&#" 32>;232>7>76#!"&54>7'3&547&547>763226323@``` VFaaFV      $. .$     yy .Q5ZE$ ,l*%>>%*>*98(QO!L\p'.'&67'#!##"327&+"&46;2!3'#"&7>;276;2+6267!"'&7&#"(6&#"#"' Dg OOG`n%ELL{@&&Nc,sU&&!Fre&&ss#/,<= #]gL oGkP'r-n&4&2-ir&&?o  4 _5OW! .54>762>7.'.7>+#!"&5#"&5463!2"&462{{BtxG,:`9(0bԿb0(9`:,GxtB&@&&@&K55K`?e==e?1O6# ,  #$  , #6OO&&&&5KK?!"'&'!2673267!'. ."!&54632>321 4q#F""8'go#- #,"tYg>oP$$Po> Zep#)R0+I@$$@I++332++"&=#"&=46;.7>76$  @ ᅪ*r@@r'/2+"&5".4>32!"&=463  &@~[՛[[u˜~gr&`u՛[[՛[~~@r=E32++"&=#"&=46;5&547&'&6;22676;2  >``@``ٱ?E,,=?rH@``@GݧH`jjrBJ463!2+"&=32++"&=#"&=46;5.7676%#"&5   &@~``@``  vXr&@``@+BF`rks463!2+"&=32++"&=#"&=46;5&547'/.?'+"&5463!2+7>6 %#"&5   &@~``@``~4e  0  io@& jV  0  Z9r&@``@Gɞ5o , sp &@k^ , c8~~`r8>KR_32++"&=!+"&=#"&=46;.767666'27&547&#"&'2#" @@ 'Ϋ'sggsww@sgg@@-ssʃl99OOr99FP^l463!2+"&=$'.7>76%#"&=463!2+"&=%#"&54'>%&547.#"254&' &@L?CuГP vY &@;"ޥ5݇ޥ5`&_ڿgwBF@&J_ s&&?%x%xJP\h463!2+"&='32++"&=#"&=46;5.7676632%#"&56'327&7&#"2#" &@L? ߺu``@``} ຒɞueeu9uee&_"|N@``@""|a~lo99r9@9;C2+"&5"/".4>327'&4?627!"&=463  &@Ռ .  N~[՛[[u˜N .  gr&`֌  . Ou՛[[՛[~N  . @r9A'.'&675#"&=46;5"/&4?62"/32+  '֪ \  . 4 .  \r|ݧ憛@\ .    . \@r~9A"/&4?!+"&=##"$7>763546;2!'&4?62  m  - @ݧ憛@& -  @rm4 -  ٮ*   - r+"&5&54>2  @[՛[rdGu՛[[r  ".4>2r[՛[[՛r5՛[[՛[[$2#!37#546375&#"#3!"&5463#22#y/Dz?s!#22#2##2S88 2#V#2L4>32#"&''&5467&5463232>54&#"#"'.Kg&RvgD $ *2% +Z hP=DXZ@7^?1 ۰3O+lh4`M@8'+c+RI2 \ZAhSQ>B>?S2Vhui/,R0+ ZRkmz+>Q2#"'.'&756763232322>4."7 #"'&546n/9bLHG2E"D8_ pdddxO"2xxê_lx2X  !+'5>-pkW[C I I@50Oddd˥Mhfxx^ә #'+/7!5!!5!4&"2!5!4&"24&"2!!! 8P88P 8P88P88P88PP88P8 P88P88P88P8 +N &6 !2#!+"&5!"&=463!46;23!#!"&54>32267632#"_>@`     `  L4Dgy 6Fe=OOU4L>   ` `  4L2y5eud_C(====`L43V &6 #"/#"/&54?'&54?6327632#!"&54>32 7632_>     %%Sy 6Fe=J%>     %65%Sy5eud_C(zz.!6%$!2!!!46;24&"2!54&#!"&&&@ԖV@&&@&&ԖԖ@&3!!! !5!'!53!! #7IeeI7CzCl@@@#2#!"&?.54$3264&"!@մppp((ppp#+/2#!"&?.54$3264&"!264&"!@մ^^^@^^^@((^^^^^^v(#"'%.54632 "'% 632U/@k0G,zD# [k# /tg F Gz  #'#3!) p*xe0,\8T #/DM%2<GQ^lw &'&676676&'&7654&'&&546763"#"'3264&7.>&'%'.767&7667&766747665"'.'&767>3>7&'&'47.'.7676767&76767.'$73>?>67673>#6766666&'&6767.'"'276&67&54&&671&'6757>7&"2654&57>&>&'5#%67>76$7&74>=.''&'&'#'#''&'&'&'65.'&6767.'#%&''&'#2%676765&'&'&7&5&'6.7>&5R4&5S9 W"-J0(/r V"-J0(.)#"6&4pOPppc|o}vQ[60XQW1V  # 5X N"& . ) D>q J:102(z/=f*4!> S5b!%  (!$p8~5..:5I  ~T 4~9p# ! ) & ?()5F 1   d%{v*: @e s|D1d {:*dAA|oYk'&<tuut&v HCXXTR;w 71™ Z*&' 1  9? . $Gv 5k65P.$.`aasa``Z9k'9؋ӗa-*Gl|Me_]`F& OܽsDD!/+``aa``a154&'"&#!!26#!"&5463!2    iLCly5)*Hcelzzlec0hb,,beIVB9@RB9J_L44LL44L44%2"4:I;p!q4bb3p (P`t`P(6EC.7BI64LL44LL  .>$4&'6#".54$ 4.#!"3!2>#!"&5463!2Zjbjj[wٝ]>oӰٯ*-oXL44LL44L')꽽)J)]wL`ֺ۪e4LL44LL;4&#!"3!26#!"&5463!2#54&#!";#"&5463!2  @ ^BB^^B@B^  B^^B@B^`@  MB^^B@B^^>  ^B@B^^5=Um ! !!2#!"&=463!.'!"&=463!>2!2#264&"".54>762".54>762?(``(?b|b?B//B/]]FrdhLhdrF]]FrdhLhdrF@@@(?@@ ?(@9GG9@/B//BaItB!!BtI Ѷ!!ь ItB!!BtI Ѷ!!ь-M32#!"&=46;7&#"&=463!2#>5!!4.'.46ՠ`@`ՠ`MsFFsMMsFFsMojjo@@jj@@<!(!!(!-3?32#!"&=46;7&#"&=463!2+!!64.'#ՠ`@`ՠ`  DqLLqDojjo@@jj@@B>=C-3;32#!"&=46;7&#"&=463!2+!!6.'#ՠ`@`ՠ`UVU96gg6ojjo@@jj@@β**ɍ-G32#!"&=46;7&#"&=463!2#>5!!&'.46ՠ`@`ՠ`MsFFsMkkojjo@@jj@@<!(!33!(!9I2#!"&=4637>7.'!2#!"&=463@b":1P4Y,++,Y4P1:"":1P4Y,++,Y4P1:"b@@@7hVX@K-AA-K@XVh77hVX@K-AA-K@XVh7Aj"#54&#"'54&#"3!26=476=4&#"#54&'&#"#54&'&'2632632#!"&5&=4632>3265K @0.B @0.B#6'&& l @0.B 2' .B A2TA9B;h" d mpPTlLc _4.HK5]0CB.S0CB./#'?&&)$$)0CB. }(AB.z3M2"61d39L/PpuT(Ifc_E`1X"#4&"'&#"3!267654&"#4&"#4&26326#!"&'&5463246326\B B\B&@5K&@"6LB\B B\B sciL}QP%&#"!"3!754?27%>54&#!26=31?>Ijjq,J[j.-tjlV\$B.R1?@B.+?2`$v5K-%5KK5.olRIS+6K5̈$B\B 94E.&ʀ15uE& ԖPjjdXUGJ7!.B P2.B %2@ 7K5(B@KjKj?+fU E,5K~!1.>F.F,Q5*H$b2#!"&=%!"&=463!7!"&'&=4634'&#!">3!!"3!32#!"3!23!26=n$32>32>32#"#.#"#.#"3!27654&#"547654&#"#654&Mye t|]WSSgSY\x{ 70"1i92DU1&=  =&0@c >&/Btd4!*"8K4+"@H@/'= t?_K93-] UlgQQgsW ]#+ i>p&30&VZ&0B/ %3B. "to ){+C4I (  /D0&p0D3[_cg"'&#"3!2676=4&"#54&#"#54&#"#4&'2632632632#!"&'&5463246#!#!#5K)B4J&@#\8P8 @0.B J65K J6k cJ/4qG^\hB2.1!~K5y?^\Vljt-.j[J,qjjI7$?1R.B+.B$`2?gvEo.5KK5%-K6+SIR[&.E49 B\B$5KG#!+"&5!"&=463!2+"&' +"' +"'&5>;2>76;2Y    M .x - N     u  , u ?  LW   #  *:J4'&+326+"'#+"&5463!2  $6& $&6$ UbUI-uu,uuڎLlLAX!Jmf\$ 6uuu,KLlL-[k{276/&'&#"&5463276?6'.#"!276/&'&#"&5463276?6'.#"  $6&  $&6]h - %Lb`J%E 5 ,5R- h - %Lb`J%E 5 ,5R-'uu,uulL/hR    dMLc  NhR   dMLc  N1uuu,LlL@  ' 7 '7 ``H ``H !``H ```H` '%  7' 7'7 ' $&6$ X`(W:,:X`(WLLlLX`(W:BX`(XLlL $ %/9ES[#"&54632$"&4624&"26$4&#"2%#"&462$#"&4632#"32&! 24>  !#"&'.'#"$547.'!6$327&'77'&77N77N'qqqqqPOrqEsttsst}||}uԙ[WQ~,> nP/R U P酛n >,m'77'&77N77N6^Orqqqqqqt棣棣(~|| on[usј^~33pc8{y%cq33dqpf L 54 "2654"'&'"/&477&'.67>326?>< x ,  (-'sI  VCV  Hr'-(  $0@!BHp9[%&!@0$u  ]\\]-$)!IHV D V HI!)$-#36>N"&462."&/.2?2?64/67>&  #!"&5463!2]]]3 $; &|v;$ (CS31 =rM= 4TC(G zw@www]]]($-;,540= sL =45,; @www(2#"$&546327654&#" &#"AZ\@/#%E1/##.1E$![A懇@@\!#21E!6!E13"|! gL&5&'.#4&5!67&'&'5676&'6452>3.'5A5RV[t,G'Q4}-&r! G;>!g12sV&2:#;d=*'5E2/..FD֕71$1>2F!&12,@K r#"&5462>%.#"'&#"#"'>54#".'7654&&5473254&/>7326/632327?&$  $6 $&6$ !&"2&^ u_x^h ;J݃HJǭ qE Dm! M G?̯' %o8 9U(F(ߎLlL&!&!SEm|[n{[<ɪ "p C Di% (K HCέ  pC B m8 @Kނ  HF(LlL "*6%&6$ 7&$5%%6'$2"&4}x3nQH:dΏX e8z' li=! 7So?vM '&7>>7'7>''>76.'6'El:Fg r *t6K3U Z83P)3^I%=9 )<}Jk+C-Wd &U-TE+]Qr-< Q#0 C+M8 3':$ _Q =+If5[ˮ&&SGZoMkܬc#7&#"327#"'&$&546$;#"'654'632ե›fKYYKf¥yͩ䆎L1hvvƚwwkn]*]nlxDLw~?T8bb9SA}+5?F!3267!#"'#"4767%!2$324&#"6327.'!.#"۔c28Ψ-\?@hU0KeFjTlyE3aVsz.b؏W80]TSts<hO_u7bBtSbF/o|V]SHކJ34&#!"3!26#!!2#!"&=463!5!"&5463!2  @ ^B `` B^^B@B^   @ @B^@@^BB^^>3!"&546)2+6'.'.67>76%&F8$.39_0DD40DD0+*M7{L *="# U<-M93#D@U8vk_Y [hD00DD00Dce-JF1 BDN&)@ /1 dy%F#"'&'&'&'&763276?6#"/#"/&54?'&763276"&'&'&5#&763567632#"'&7632654'&#"32>54'&#"'.5463!2#!3>7632#"'&'&#"'&767632yqoq>* 432fba  $B? >B BB AA.-QPPR+ 42 %<ciђ:6& hHGhkG@n`IȌ5 !m(|.mzyPQ-.  je  q>@@?ppgVZE|fb6887a %RB? =B ABBAJvniQP\\PRh!cDS`gΒ 23geFGPHXcCI_ƍ5" n*T.\PQip [*81 / 9@:>t%6#".'.>%6%&7>'.#*.'&676./&'.54>754'&#"%4>327676= >vwd" l "3 /!,+ j2.|%& (N &wh>8X}xc2"W<4<,Z~fdaA`FBIT;hmA<7QC1>[u])  u1V(k1S) - 0 B2* %M ;W(0S[T]I) A 5%R7&&T,Xq&&1X,LΒw%%;#!"&5463!546;2!2!+"&52#!"/&4?63!5! (&&@&&(&&@&&( (  &&@&&@&&&&  #''%#"'&54676%6%% hh @` !   !    #52#"&5476!2#"&5476!2#"'&546        @  @  @    84&"2$4&"2$4&"2#"'&'&7>7.54$ KjKKjKjKKjKjKKjdne4" %!KjKKjKKjKKjKKjKKjK.٫8  !%00C'Z'.W"&462"&462"&462 6?32$6&#"'#"&'5&6&>7>7&54>$ KjKKjKjKKjKjKKjhяW.{+9E=cQdFK1A  0) LlLjKKjKKjKKjKKjKKjKpJ2`[Q?l&٫C58.H(Yee    Y'w(O'R@$#"&#"'>7676327676#" b,XHUmM.U_t,7A3ge z9@xSaQBLb( VU  !!!==w)AU!!77'7'#'#274.#"#32!5'.>537#"76=4>5'.465! KkkK _5 5 #BH1`L I& v6S F!Sr99rS!`` /7K%s}H XV P V  e  Vd/9Q[ $547.546326%>>32"&5%632264&#"64'&""&'&"2>&2654&#";2 P 3>tSU<)tqH+>XX|Wh,:UStW|XX>=X*  ))  +^X^|WX=>X:_.2//a:Ru?  Q%-W|XW>J( =u>XX|WX`  *((*  +2 2X>=XW|E03>$32!>7 '&'&7!6./EUnohiI\0<{ >ORDƚ~˕VƻoR C37J6I`Tb<^M~M8O  5!#!"&!5!!52!5463 ^B@B^`B^^B `B^^"^BB^0;%'#".54>327&$#"32$ !"$&6$3 ##320JUnLnʡ~~&q@tKL}'` - -oxnǑUyl}~~FڎLlLt`(88(   7!' !\W\ d;tZ`_O; }54+";2%54+";2!4&"!4;234;2354;2354>3&546263232632#"&#"26354;2354;2354;2````pp```  !,! -&M<FI(2 ```@PppPpppppp# #   ppppp j#"'&=!;5463!2#!"&=#".'.#!#"&463232>7>;>32#"&'#"!546 %. `@` :,.',-XjjXh-,'.,: kb>PppP>bk .%Z & :k%$> $``6&L')59I"TlԖlT"I95)'L&69GppG9$ >$%k: !+32&#!332 $&6$ ~O88OLlL>pN  iLlL '':Ma4&'#"'.7654.#""'&#"3!267#!"&54676$32#"'.76'&>$#"'.7654'&676mD5)  z{6lP,@KijjOoɎȕ>>[ta) GG 4?a) ll >;_-/ 9GH{zyN@,KԕoN繁y! ?hh>$ D" >â? $ n"&5462'#".54>22654.'&'.54>32#"#*.5./"~~s!m{b6# -SjR,l'(s-6^]Itg))[zxȁZ&+6,4$.X%%Dc* &D~WL}]I0"  YYZvJ@N*CVTR3/A3$#/;'"/fR-,&2-" 7Zr^Na94Rji3.I+ &6W6>N%&60;96@7F6I3+4&#!"3!26%4&#!"3!26 $$ ^aa`@@^aa '7  $ >. %"&546;2#!"&546;2#/a^(^aa(N@@4&#!"3!26 $$ @@^aa`@^aa '  $ >. 7"&5463!2#/a^(n@^aa(N@ %=%#!"'&7!>3!26=!26=!2%"&54&""&546 ##]VTV$KjKKjK$&4&Ԗ&4&>9G!5KK55KK5!&&jj&&#/;Im2+#!"&'#"&463>'.3%4&"26%4&"26%6.326#>;463!232#.+#!"&5#"5KK5sH..Hs5KK5e# )4# %&4&&4&&4&&4&` #4) #%~]eZ&&Ze] E-&&-EKjKj.<<.KjK)#)`"@&&`&&&&`&&)#`)"dXo&&oXG,8&&8!O##!!2#!+"'&7#+"'&7!"'&?63!!"'&?63!6;236;2!2@@8@7 8Q NQ N 8G@ 8GQ NQ N7   8 8  H H  k%  ".>2I20]@]@oo@@oo㔕a22]]p^|11|99|11|(%7'7' ' 7T dltl)qnluul)1$4&"24&"2 &6 +"&5476;2 &6 LhLLhLLhLLhL>  &   &`>hLLhLLhLLhL>&&>G  .7)1!62 1!62he220e22> v +4 [d+ d 135#5&'72!5!#"&'"'#"$547&54$ Eh`X(cYz:L:zYc\$_K`Pa}fiXXiޝfa  (+.>#5#5!5!5!54&+'#"3!267!7!#!"&5463!2U``'    jjV>(>VV>>Vq  ( ^(>VV>>VV=&'&'&'&76'&'&.' #.h8"$Y ''>eX5, ,PtsK25MRLqS;:.K'5R ChhRt(+e^TTu B"$:2~<2HpwTT V/7GWg. %&32?673327>/.'676$4&"2 $&6$   $6& $&6$ d -- m  ,6*6,  mKjKKjoooKzz8zzȎLlLU4>>4-. YG0 )xx) 0GYޞ .jKKjKqoooolzzz80LlLD/7H#"'.7'654&#"'67'.6?>%"&46227#".547|D,=),9#7[͑fx!X: D$ +s)hhijZt<F/*8C,q؜e\r,WBX/C2hhh=tXm>NZ+"&=46;2+"&=4>7>54&#"#"/.7632  >. $$ p=+& 35,W48'3  l zffff^aaP2P: D#;$# $*;? R Cfff^aa'Y >O`"&5462&'.'.76.5632.'#&'.'&6?65\\[( | r [A@[[@A#2#  7* <Y$  +}"(  q87] F  _1 )    #1Ke34&+326+"&=!#!"&763!2#!"&5463!2#>?4.'3#>?4.'3#>?4.'3Xe`64[l7  , L; =+3&98&+)>>+3&98&+)>=+3&88&+)> Wj|r >Q$~d $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgYJ\m4.'.'&#"#"'.'&47>7632327>7>54&'&#"327>"&47654'&462"'&476'&462"'&47>&'&462i$ $^"  %%  "^$ $W "@9O?1&&18?t@" W&%%&4KK6pp&46ZaaZ&4mttm ^x -  - x^ = /U7C kkz'[$ =&5%54'4&KK4r7>54 "&54>2"&462%"&54&#""&546 %#"&'&'.7>#"'&'.7>&4&&4&4&&4SZ&4&&44$#&&&j3$"('$&4&[՛[&4&&4F&4&]\&4&$  !D4%  ,\44&&4&4&&4&-Z4&&4&;cX/)#&>B)&4&j9aU0'.4a7&&u՛[[4&&4&@&&]]&&Ώ0 u40 )4#g&'.#"32676%4/&#"326'&#"2632#2+&'%#"'&6?676676632%#"'&6767#"&'&6767#"'.7>327"#"&'&6763"'.7>;7632;>%5K$ "0%>s$ "0%>;;>%5KVL#>H30 \($$(\( єyO2F/{(?0(TK.5sg$ єy#-F/{$70(TK.5sg$L#>H30 \($$(\#(@5"'K58!'"58!'"55"'K#dS$K K$Sdx#@1 w d>N;ET0((? - 2K|1 wd#N;ET0$(? - 2K$#dS$K K$SdxDN\2654& 265462"2654 #"32654>7>54."/&47&'?62 &4&&4&h՛[&4&r$'("$3j&&&#$4[ " @ GB[ "&&Β&&][u&&7a4.'0Ua9j&4&)B>&#)/Xc;u՛ "  " Gi[ Xh#"&54676324&'&#"'>54#"32#"54>54'.#"32>7>767632326#!"&5463!2b )   :4FDN  [1,^JK-*E#9gWRY vm0O w@wwwC22 c@X&!9{MA_"S4b// DR"XljPY < @www%e4.#"32>7676#'.#"#"&54>3232>754&*#"&54>763 >32 ''il$E/  @P@ ^`'W6&!.. ! -P5+ E{n46vLeVz:,SN/ M5M[  ]$[^5iC'2H&!(?]v`* l b$9> =R2 #"&5467%!"&7>3-.7>;%.7>322326/.76/.'&6766/&/&#"&676 &676&6766/&672? =1( H/ '96&@)9<')29% &06##$ J 0 7j)5@"*3%"!M %#K"%Ne 8)'8_(9./=*%8!Q #P"\Q#N&a)<9bR]mp%"'.'&54>76%&54763263 #"/7#"'#"&/%$%322654&#"%'OV9  nt  |\d ϓ[nt  |@D:) ;98'+| j," 41CH^nVz(~R 9\'  r  @L@  @w46HI(+C ,55, f[op@\j;(zV~i/5O#"'&54>32&#" 654'67'"'>54''&'"'6767&546767>7蒓`V BMR B9)̟!SH-77IXmSMH*k#".o;^J qןד>@YM $bKd ү[E";Kx%^6;%T,U:im=Mk).DT4'"&5463267&#" 6;64'.'4'>732676%#!"&5463!2),蛜s5-54&#"#"'654'.#"#"&#"3263232>3232>76 $$ Cf'/'% ( $UL ( #'/'@ 3#@,G)+H+@#3 ^aaX@ _O#NW#O_ .* ##(^aaq[632632#"&#"#".'&#"#".'&54767>7654.54632327&547>P9 B6?K? %O4T% >6>Z64Y=6>%S4N$ ?L?4B @{:y/$ ,'R! F! 8% #)(()#%: !F Q'+%0z:zO_4'.'&54>54&#"#"'654'.#"#"&#"3263232>3232>76#!"&5463!2Cf'.'% ( $VM  ) #'.'@ 3 #A,G)+H+A# 4 w@wwwXA  ?4N$NW&M&L  /* ## + @www O$>?>762'&#"./454327327>7> EpB5 3FAP/h\/NGSL  RP* m95F84f&3Ga4B|wB.\FI*/.?&,5~K % & Y."7n< "-I.M`{ARwJ!FX^dj''''"'7&'7&'7&'7&547'67'67'67'63277774$#"32$   *'ֱ,?g=OO&L&NJBg;1''ֱ.=gCIM $'&&NJBg=.%w؝\\w Ioo<<-NIDg=/%(ײ+AhEHO*"#*OICh=/'(ֲ/=h>ON.]xwڝ]7e[@)6!!"3#"&546%3567654'3!67!4&'7Sgny]K-#75LSl>9V%cPe}&Hn_HȌ=UoLQ1!45647UC" !-9[nx"&46254&"326754&"326754&"26754&"26#".547632632626326'4#"#"54732764&"264.#"327632>#"'"'#"'#"&5#"'67&'327&'&54>3267>7>7>32632632T"8""8)<())(<))))<))<))<))<) Tد{ՐRhx=8 78 n 81 pH_6Soc F@b@?d?uKbM70[f5Y$35KUC<:[;+8 n 87 8/8Zlv]64qE 'YK0-AlB; W#;WS9 &(#-7Z://:/Tr++r,,r++r,,r++r,,r++r,,ʠgxXVעe9222222^KVvF02OO23OO`lF;mhj84DroB@r+@222222C0DP`.r8h9~T4.&o@9 1P%14'!3#"&46327&#"326%35#5##33 $$  }Pcc]321IUΠ?LL?cc4MX &04;0XpD[[DpD,)&&Q 9V\26&".'&'&6?.#"#26327677>'32>&3#'&+"?626&"#!'.'!"&5463!>;26;2!2P P  92#.}SP9::%L \B )spN/9oJ5  !+D`]BgY9+,9% Pk 4P P &NnF!_7*}B<{o0&&B;*<@$ucRRc#@16#37c&@@@ J"@*4^`ED B o/8927 *@OLC!T!323X$BJ@@@&AS 0C 59" 'D/&&D4 88 $5A&%O#!"&547>7>2$7>/.".'&'&2>^B@B^ >FFzn_0P:P2\nzFF> R & p^1P:P1^ & R P2NMJMQ0Rr.B^^B 7:5]yPH!%%"FPy]5:7 = 4 QH!%%!Ht 4 =<"-/ ?1Pp+".'.'.?>;2>7$76&'&%.+"3!26#!"&54767>;2' +~'*OJ%%JN,&x' % ^M,EE,M7 ZE[P*FF*P:5  ^B@B^){$.MK%%KM.$+X)o3 "a 22!] 4  I>"">,&S8JB##B12 ` `B^^B8&ra#11#$R&  "&.2v%/%''%/%7%7'%7'/#&5'&&?&'&?&'&7%27674?6J" 0<=_gNU?DfuYGb7=^H^` =v~yT3GDPO 4Fѭqi_w\ހ!1uS%V_-d 1=U{J8n~r'U4.#".'"3!264&"26+#!"&5463!232+32+32 0P373/./373P0 T=@=T֙֙|`^B@B^^BB^`````*9deG-! !-Ged9IaallkOB^^BB^^B +Yi"&54622#!"&54>;2>+32+32+#!"&5463!2324&#!"3!26֙֙0.I/ OBBO -Q52-)&)-2 ``  ``  `^B@B^^BB^`  @   |kkl"=IYL)CggC0[jM4      B^^BB^^B @  @ !1AQu4.#".'"3!24&"254&#!"3!2654&#!"3!2654&#!"3!26#!54&+"!54&+"!"&5463!2)P90,***,09P)J66S"@8@^B@@B^^BB^Ukc9 9ckU?@@88 @@N@B^````^BB^^!1AQu#!"&4>32>72"&462#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!546;2!546;2!26#!"&5463!2J66J)P90,***,09P)"@8@ @  `@@` ^B@B^^BB^ՀUUkc9 9c`@@88@@2  @ ````@B^^BB^^(%.'"&' $&  #"$&6$ wCιCwjJ~J>LlLśJSSJ͛>6LlL$,  $&6654&$ 3 72&&  lLmzzBl>KlLGzzG>'7#!"&54>7&54>2  62654' '3/U]B,ȍ,B]U/OQнQ>+X}}X0bӃۚӅb0}hQQh>ff#=#!"&4>3272"&462!3!26#!"&5463!;26=!2J66J)Q8PP8Q)  ^B@B^^B``B^VVVld9KK9d` @B^^BB^``^+;K[eu4.#"'"3!264&"254&#!"3!2654&#!"3!26%54&+";2654&#!"3!26!54&#!"!#!"&5463!2"D/@@/D"?,,?pppp@@@@^B@B^^BB^D6]W2@@2W]67MMppp@@@@@@@@n`@B^^BB^^+;K[eu#!"&54>3272"&462#!"&=463!2%#!"&=463!2+"&=46;25#!"&=463!2!3!26#!"&5463!2?,V,?"D/@@/D"pppp@@@  ^B@B^^BB^D7MM76]W2@@2W]֠ppp@@@@@@@@` @B^^BB^^A#"327.#"'63263#".'#"$&546$32326J9"65I).!1iCCu +I\Gw\B!al݇yǙV/]:=B>9+32%#!"&5463!2#"&54>54'&#"#"54654'.#"#"'.54>54'&'&543232654&432#"&54>764&'&'.54632  ?c'p& ?b1w{2V ?#&#9&CY' &.&#+B : &65&*2w1GF1)2<)<'  ( BH=ӊ:NT :O )4:i   F~b` e!}U3i?fRUX|'&'&Ic&Q  *2U.L6* / L:90%>..>%b>+ +z7ymlw45)0 33J@0!! TFL P]=GS -kwm  !*(%6&692? $&6$  '   al@lLlL,& EC h$LlL /37;%"&546734&'4&" 67 54746 #5#5#5ppF::FDFNV^fnv~"/&4?.7&#"!4>3267622"&4"&46262"&42"&4462"$2"&42"&4"&46262"&4"&46262"&42"&4$2"&42"&42"&4  R ,H8JfjQhjG^R,  !4&&4&Z4&&4&4&&4&4&&4&&4&&44&&4&4&&4&Z4&&4&4&&4&4&&4&4&&4&4&&4&&4&&4&Z4&&4&Z4&&4&  R  ,[cGjhQRJ'A, &4&&4Z&4&&4Z&4&&4Z&4&&444&&4&&4&&4Z&4&&4Z&4&&4Z&4&&4&4&&4Z&4&&4Z&4&&4&&4&&4Z&4&&4Z&4&&4%-5=EM}+"&=#!"'+"&=&="&4626"&462&"&462"&462&"&462&"&462#!"&=46;4632676/&?.7&#"!2"&462&"&462&"&462"&462&"&462&"&462"&462&"&462"&462@?AA? @ @R...R@`jlL.h) * * $ %35K.....uvnu....@@jN  * * .t2#K5..R..R. @Hq '&'&54 &7676767654$'.766$76"&462&'&'&7>54.'.7>76ȵ|_ğyv/ۃ⃺k] :Buq CA _kނXVobZZbnW|V 0  Q2- l}O  / :1z q%zG 4( 6Roa ą\< )4 J}%!!#!"&5463!2^B@B^^BB^`@B^^BB^^%#!"&=463!2^B@B^^BB^B^^BB^^ &))!32#!#!"&5463!463!2`B^^B^B@B^^B`^BB^^B@B^B^^BB^`B^^#3%764/764/&"'&"2?2#!"&5463!2    s^B@B^^BB^ג     @B^^BB^^#'7"/"/&4?'&4?62762!!%#!"&5463!2     ^B@B^^BB^    `@B^^BB^^ ! $&6$ .2r`LlLf4LlL#.C&>"'&4762"/&4?62'"'&4762%'.>6.'.>6'>/>76&'&.'&7&'">?4'.677>7.>37654'&'67>776 $&6$  ( 4Z# # & # # & y"6&.JM@& "(XE* $+8 jT?3#'.'&!3!2>?3.'#!57>7'./5!27#'.#!"g%%D-!gg<6WWZe#1=/2*]Y3-,C1 /Dx] VFIq-HD2NK '>*%R= f 07=. f D]\|yu,0>Seu#2#"'&5<>323#3#&'#334'."#"+236'&54.#"5#37326#!"&5463!2 <  zzj k-L+ )[$8=".un/2 ^B@B^^BB^5cy    (ݔI(8?C (3> #"($=@B^^BB^^0K S&'.'&'./674&$#">&>?>'76'# "&#./.'7676767>76$w .~kuBR] T%z+",|ޟj<)(!( ~ˣzF8"{%%#5)}''xJF0"H[$%EJ#% .Gk29(B13"?@ S)5" #9dmW";L65RA0@T.$}i`:f3A%% BM<$q:)BD aa%`]A &c| Ms!  Z 2}i[ F&** < ʣsc"J<&NsF% 0@Wm6&'.6$.7>7 $76".4>2., &>6'"'&7>=GV:e #:$?+% q4g &3hT`ZtQмQQмpAP1LK!:< }҈`dlb,9'  %%($! a3)W)x  оQQоQQcQǡ-җe)Us2XD\ϼYd /?O_o#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543%#!"&5463!2++532325++532325++532325++532325++53232p00pp00pp00pp00pp008((88(@(80pp00pp00pp00pp00pp0     @(88((88     /Q/&'%&/"&=.6?&?&'&6?'.>-#".6?'.>'&6'.>54627>%>76#"'% %6 27 2G f!)p&4&p)!f G2 72  *6 " 47 2G f!)p&4&p)!f G2 72 " 6* !k 3 j&3 %,*&&ր*9% 3&j 3 k!./!>>$,*!k 3.j&3 %Ԝ9*&&ր*ǜ,% 3&j 3 k!*,$>>!/.&6.'&$ &76$76$PutۥiPuGxy Զ[xy -_v١eNuv١e =uʦ[t78X &6# #'7-'%'&$  $6 $&6$ 31NE0gR=|||">"LlL^v!1f2iЂwgfZQQ^>"||||wLlL &ZXblw.'&>'&'&".'.'&&'&'&7>767>67>7626&'&>&'&>'.7>.676'&'&'&'.67.>7>6&'&676&'&676.676&'&>&'&676'.>6/4-LJg-   $  6)j2%+QF)b3FSP 21DK2AW ") ")$? ? 8A& AE5lZm= gG2Sw*&>$5jD GHyX/4F r 1  1""!l=6> 6 ,5./'e    .*|Ed! u & &%& &5d ))66 @ C& 8B @qL?P^7 G-hI[q:"T6 ,6 &/`  L wQ'   A ^   "  $& _  y  * <Copyright Dave Gandy 2016. All rights reserved.Copyright Dave Gandy 2016. All rights reserved.FontAwesomeFontAwesomeRegularRegularFONTLAB:OTFEXPORTFONTLAB:OTFEXPORTFontAwesomeFontAwesomeVersion 4.7.0 2016Version 4.7.0 2016FontAwesomeFontAwesomePlease refer to the Copyright section for the font trademark attribution notices.Please refer to the Copyright section for the font trademark attribution notices.Fort AwesomeFort AwesomeDave GandyDave Gandyhttp://fontawesome.iohttp://fontawesome.iohttp://fontawesome.io/license/http://fontawesome.io/license/      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab cdefghijklmnopqrstuvwxyz{|}~"      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~glassmusicsearchenvelopeheartstar star_emptyuserfilmth_largethth_listokremovezoom_inzoom_outoffsignalcogtrashhomefile_alttimeroad download_altdownloaduploadinbox play_circlerepeatrefreshlist_altlockflag headphones volume_off volume_down volume_upqrcodebarcodetagtagsbookbookmarkprintcamerafontbolditalic text_height text_width align_left align_center align_right align_justifylist indent_left indent_rightfacetime_videopicturepencil map_markeradjusttinteditsharecheckmove step_backward fast_backwardbackwardplaypausestopforward fast_forward step_forwardeject chevron_left chevron_right plus_sign minus_sign remove_signok_sign question_sign info_sign screenshot remove_circle ok_circle ban_circle arrow_left arrow_rightarrow_up arrow_down share_alt resize_full resize_smallexclamation_signgiftleaffireeye_open eye_close warning_signplanecalendarrandomcommentmagnet chevron_up chevron_downretweet shopping_cart folder_close folder_openresize_verticalresize_horizontal bar_chart twitter_sign facebook_sign camera_retrokeycogscomments thumbs_up_altthumbs_down_alt star_half heart_emptysignout linkedin_signpushpin external_linksignintrophy github_sign upload_altlemonphone check_emptybookmark_empty phone_signtwitterfacebookgithubunlock credit_cardrsshddbullhornbell certificate hand_right hand_lefthand_up hand_downcircle_arrow_leftcircle_arrow_rightcircle_arrow_upcircle_arrow_downglobewrenchtasksfilter briefcase fullscreengrouplinkcloudbeakercutcopy paper_clipsave sign_blankreorderulol strikethrough underlinetablemagictruck pinterestpinterest_signgoogle_plus_sign google_plusmoney caret_downcaret_up caret_left caret_rightcolumnssort sort_downsort_up envelope_altlinkedinundolegal dashboard comment_alt comments_altboltsitemapumbrellapaste light_bulbexchangecloud_download cloud_uploaduser_md stethoscopesuitcasebell_altcoffeefood file_text_altbuildinghospital ambulancemedkit fighter_jetbeerh_signf0fedouble_angle_leftdouble_angle_rightdouble_angle_updouble_angle_down angle_left angle_rightangle_up angle_downdesktoplaptoptablet mobile_phone circle_blank quote_left quote_rightspinnercirclereply github_altfolder_close_altfolder_open_alt expand_alt collapse_altsmilefrownmehgamepadkeyboardflag_altflag_checkeredterminalcode reply_allstar_half_emptylocation_arrowcrop code_forkunlink_279 exclamation superscript subscript_283 puzzle_piece microphonemicrophone_offshieldcalendar_emptyfire_extinguisherrocketmaxcdnchevron_sign_leftchevron_sign_rightchevron_sign_upchevron_sign_downhtml5css3anchor unlock_altbullseyeellipsis_horizontalellipsis_vertical_303 play_signticketminus_sign_alt check_minuslevel_up level_down check_sign edit_sign_312 share_signcompasscollapse collapse_top_317eurgbpusdinrjpyrubkrwbtcfile file_textsort_by_alphabet_329sort_by_attributessort_by_attributes_alt sort_by_ordersort_by_order_alt_334_335 youtube_signyoutubexing xing_sign youtube_playdropbox stackexchange instagramflickradnf171bitbucket_signtumblr tumblr_signlong_arrow_down long_arrow_uplong_arrow_leftlong_arrow_rightwindowsandroidlinuxdribbleskype foursquaretrellofemalemalegittipsun_366archivebugvkweiborenren_372stack_exchange_374arrow_circle_alt_left_376dot_circle_alt_378 vimeo_square_380 plus_square_o_382_383_384_385_386_387_388_389uniF1A0f1a1_392_393f1a4_395_396_397_398_399_400f1ab_402_403_404uniF1B1_406_407_408_409_410_411_412_413_414_415_416_417_418_419uniF1C0uniF1C1_422_423_424_425_426_427_428_429_430_431_432_433_434uniF1D0uniF1D1uniF1D2_438_439uniF1D5uniF1D6uniF1D7_443_444_445_446_447_448_449uniF1E0_451_452_453_454_455_456_457_458_459_460_461_462_463_464uniF1F0_466_467f1f3_469_470_471_472_473_474_475_476f1fc_478_479_480_481_482_483_484_485_486_487_488_489_490_491_492_493_494f210_496f212_498_499_500_501_502_503_504_505_506_507_508_509venus_511_512_513_514_515_516_517_518_519_520_521_522_523_524_525_526_527_528_529_530_531_532_533_534_535_536_537_538_539_540_541_542_543_544_545_546_547_548_549_550_551_552_553_554_555_556_557_558_559_560_561_562_563_564_565_566_567_568_569f260f261_572f263_574_575_576_577_578_579_580_581_582_583_584_585_586_587_588_589_590_591_592_593_594_595_596_597_598f27euniF280uniF281_602_603_604uniF285uniF286_607_608_609_610_611_612_613_614_615_616_617_618_619_620_621_622_623_624_625_626_627_628_629uniF2A0uniF2A1uniF2A2uniF2A3uniF2A4uniF2A5uniF2A6uniF2A7uniF2A8uniF2A9uniF2AAuniF2ABuniF2ACuniF2ADuniF2AEuniF2B0uniF2B1uniF2B2uniF2B3uniF2B4uniF2B5uniF2B6uniF2B7uniF2B8uniF2B9uniF2BAuniF2BBuniF2BCuniF2BDuniF2BEuniF2C0uniF2C1uniF2C2uniF2C3uniF2C4uniF2C5uniF2C6uniF2C7uniF2C8uniF2C9uniF2CAuniF2CBuniF2CCuniF2CDuniF2CEuniF2D0uniF2D1uniF2D2uniF2D3uniF2D4uniF2D5uniF2D6uniF2D7uniF2D8uniF2D9uniF2DAuniF2DBuniF2DCuniF2DDuniF2DEuniF2E0uniF2E1uniF2E2uniF2E3uniF2E4uniF2E5uniF2E6uniF2E7_698uniF2E9uniF2EAuniF2EBuniF2ECuniF2EDuniF2EE=O<01hassets/lib/font-awesome/fonts/fontawesome-webfont.svg000064400001543733147400353540017110 0ustar00 Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 By ,,, Copyright Dave Gandy 2016. All rights reserved. assets/lib/font-awesome/fonts/fontawesome-webfont.woff2000064400000226550147400353540017326 0ustar00wOF2-h -?FFTM `r (X6$p  u[R rGa* '=:&=r* ]tEn1F@|fm`$ؑ@d[BQ$([U<+(@P5`>P;(1lhԨ)YyJi|%ہ^G3nڕ ͐Dp\Yr LPt)6R^"S L~YRCXR 4Fy\[7n|s໌qM%K.ۺ, Lt'M,c+bׇOs^$z.mŠ h&gbv'6:smb1بm0"ǂ*Vc$,0ATPT1< ;`'H?sΩ:NDI$T[b4,μ」bl6 ILi}ی&4m,'#ץRwbu,K vm_-\HHH?m 9P)9J$ƽ8~;rn=$Nddn!';8'N!-Jʶ.X= ,"`: {K!'-FH #$~Z_N5VU8Fȯ%Pݫ Cp$Qrʽkk3ٷ:R%2{ީh%)8 ILK6v#,;Ц6N2hv OOt#xTBfq^#?{5bI%-WZbA ^1n5צNQY'S!t" `b3%35fv;lά9:jgf?grpx | $ eZ($w(ZrSv+ZqMݙm?&s[tSSj9?| >G,bDշ^^:l3NA`5 26LpS Aߧ/U ֘'9\Նt!l PMR9n `(@ Hy)MdM 5ԤH'ґmSuo9 1 tØuc@]KRbNv("y뽻{ cscz&p5,jn kN!.n^Uu@|?v>rUaHR ՑI DˋQ~p ܍;;nL$t : hFCYTOFNN~}1"`a(?H \u0LԵ'͔PbnmOJl?s0,8xBBF_RiZ~e#jwhOc*&F6 Yq{}?>u.4h%g`& )R5H}ˤkܩ'JOI_qOb'HǟBYEM6v5NJ ONF Nx(1:\߫Ckcb8Q d[L(el+2u-a֘d5;N$"HSFo2i"\h7IfN8qx#v 6um `NM-J\FrDZ0#'ꥈnGjLچXʌAgYs*Y^ٵ;"$hb=ϛ0vH-.D܎Yd +^{Cm,@N<.VMS+\D+R|6 'q\T9DX<$p"酦$ҷ ,psTbNkI_` FWV%w~DԐ*xiy[rZ[S%Gs`F<ㅣ V+!+؍9ykfb82s}l;[)e$Tk)v9{uut޳@E>|C<\4%Rv @׺C8\~)#k|.ao00Gq0%hp L"+>% ^MˊNsq=䦆K4r-*%h#%;pP馔hC= &)baKL@t!~2S]rYlZ63ўJoOV;h&gO5RT/}{AZ&St ͯPC0D,pbpзz) ]I>Q\Bl"^3R>r*C>xPUz}Y=̕}ж 6-`/"H o&DI0E2Xa-{5< ,}``6jiim'w5RF,ч%SYWh6L_i샣=i13YI7NCpIĔ(r0{jrKТo)l3naT1\IE(m߃Dle$ÅwXU(@Ma"n,*vG̨x>G Sg̉"Qvb0*zPEyɉ?7$ %GpdY&f!a6|);u7#34mJij oOpȁv8jx(K/ZdxŃm7V_\fL7 pXzH7-,(1KHbe,r-pL3=T2t2ټXk:Z5spSsT:.]D"@-Ȇ!A2ɶ-F}˒2BǃQ)tç|#4|\㨀`fc,#g1:-ty ]2Z~.)nj%RK(y`8C֍zK-N `^+n3ϴT3tQأ4<>:J0È%ݑZab`vͬaT/ZaޝГIi W1_>)H"p |7mF^Z~f0J^I3V!{<+OeB#BcjL\-Zh[I<qv~k]GTD?S/-%ݒ7 wi|CIqwcWx /7xHO/o]G]y߃#7b$tR$ ]a7FѮ,n!rI|28x6gSh R^^D.xMMS?漞'G#~+v4d!FyT9-fVa7hB4,2Ɖ&vTHMqp4?R\Xa<4@MiHD_ EgRyMlTؠJݮ yc"HJ, 6u/ڴyVnJn۟H\PRBd|4_$k.w™IpS$|}j9m|1ߘn9395qS|xW9BVZ!mK/Ln;iu$*t3Ͷ@}B{Yԑz2Ju@a\MR7odze7/$4]^2kh$=%1IB؃ H|N.[M\ Lb1Mg:NV._0,+,ht7l8s~IV^ N˼Mؑjك- oܮůQo[mj=rm>~z4$M}z sh""u7V{RûݦO-D9V٥gIʎKLg۶BTP'K̦ qW֒3ep&ےLhpNaS w &;e(,-7vx-w$WnXUt8Y?KMctY؃p*Շ-БfL|[nL }4{5頠3᧌ n$$,+DNԄ-HV>HOs\-;W6NM8Fi;7k26%֒a],:!ʲڽE,{U nawNg.I9r:jFbKΨf)*cG5-kb6UЩpZMO`$WDyA߻[4aJ?fD?=d(KD䴱:D/[#$A #KH.:x?%Vr@[B$}coS6`LPfM&ɔA<:vÚ Q~Pw[+`+j V+R*ul!|+'KY66_ud}_[yuۘjo$Y=yjRi)bԋLaD(XUwIڻZ$7ڻ9&4Z'DF[N]~dD?VQWͲ}vS>Nm+SqHaU!ΒWb_+UO]^l59 @1'A^mo:9ףs-N:tD-zkSja4rczFۻ ޿xv7[äC8#7p5+ ~*bJJYzֳw+-p/LL[cgnlcaPHF$}9`\ 83Ym1b>~ƽJ؂ϏyBs="f(zKM"H`wcEd:b86(9<clݘ/kg G^ESE)5G_^k߇ v̚}T3;6 WvTCP_k._eєNJL{T!6j>h0 #[㗚Kz,!32:6d>himE\=H Z+{6@Wʯ&lC',rX !8(\̭2-P8h@C4 <~Z7j%) eeFpZ'15 ^6B3nco#~²qR@!ա z^Ks]T@TNT ,S*@7CīɅLiQN, #:RѪj91-YPN¿\&yL8ӹ&0cvƉ\JA;Q;]IM8 sMf?԰Irr!K9я8p}Q콍g-*sm~XP0dM^?DdIm8eCN}cà٭$s7ۼ#յR{b4vMql)vOճjְr1f4cs_%v%lKZNi+V3'~NMG@HBb+vVFq@ݱuKZhp@E0uaSXdUK}ԯ8GXKiI% uR)EI-ږ8|1GΞf6Ȁ=!KF6Qf[X~_j\^͋^k`DsG]~㤛yo};+i%N}Q0ԥUu)M[Z`"7 ?/[C{l)$Mr|^ a:"֊a l>hya{2>CPL j?ntg]S{UӇ('b'fg0ӃLPAMtd)2úY!v&`o2P[ aޔ5 S|#+7J #ȸ_dU6#VDB"K|)otkl,lU)ݹe5OyUAt2_ n53e*1v(K_HvVʉ3},ACUƍ؂Cuti-]`7]R !zsNt&̉̄k)SL̹y7$ϥDJNd"9 31 IZ(^( lw6 /@YB^}OT~9cc]{)}D8${yc,ʤ{tAW3zHImD4ܤUT3dID) I۬.d~[ -K^2Zc 8u,Y^\_ԁ_+cJ$\2:ZW bBw=[1'NYVz4;(fzNUf(p֙!x#L=#ŋThnba˳",T\o!@@sN%| tXj j Qo5oeF)o 9˷:h*'cJ孏[{ȄNfnz]8F/|1v g@J:YնNu:dhHo tM`R̍Ri:|N_P"B@ m`a:M  c2Ũ<ؓUOS\%a\Ap ꄯe\A.̰{wǿ~6 ;s2ŋ`W`TyPgee0 00}/ǔ;h[tGD5^E#hȍ:f? u3z0ڎ$T^TAhz x I{5'rK zo l֢,b89-:G|W)bA5G<*ٕ:ğ!]gj~O&UN뢹8 g ]-WW(WNI3Ngr3|m m'=[n힬M,?$HDD-O?5uX]˓37>*wg?*!JyT@ UgzI_7&\tH.YZ(4Y'd T Fs-qya7 [67K&J/$c/x[ᶏ;Īz1Fv]G'ڏQBSOІ$y(TS-;hűzT%Dts"=gwUuD?b$Zr9G<&Ña^2_Be;b~փ)Ό2j r8]'7 bChTd )+ mD).51-|Yy*oڤL 4A她= T@|X$in.KI|R@P@P*ak@ ۟=I =l[ג"hX0QҜf˒펖c<#9`|cO}$o>eX<`,o_K3 p{YAn[9M T(!"?Z]iEm Ğ>'{Gt *~y`'A?٘#)o($ȉەLvYO1o_& .mv!*)$zmrt(:GGbeVwi$CO1 cZZ0G 7z@Jy~p)g,gYL.$, -<k{yc*02/q1gKM&R<7xCy[Mʛ #ͺDya3\wfwrFĸM] \NsWݍd<ӡW064tȴvȻ0>ԯ ; )f#* 2<h ~'Bw mH/wqMog C)̵67#BS>_-[L|RRlQ}\TH) 9Fa"^bA:ݳQ4' =sO '@.Y&8z ,i73y;U}p/I  xVxilFZfhXc.b B*|&|ge/kuv\_Hb dpG/A}㬬'xȜՋ;E !Wj{ZI$z{Op;x=׺q{5l23O =@jj# GYTn>&ެ#CBϩzLuylSaa0LTv3,2 sdTrU}El1z`Xa*h{qiuU\"Lд@TXRUFg]sE5V0X/ukzB'كJx Iz7YΕ1tyΚ_}|xm[xJ}zlDVrcsdsqv[&`oUl?<jC! OeqB=J\`Lr孈d1MhowѹKiģd*;^ҋ$xHUU`]GkCꆂOQSCwo g~yG8P{{H.$6!}d4,q>`llUMBRPe2A1RHqlBQ$W%bhBÚV@(?FAQ}dl+bNIMdT"+ƌo0`89\|5 ޣئ(y jqm(<\G 2dTP0$n@ Ē!X 㺕Nkճxikiݝͨћ"0?^2XF,{sr_e@Vyg N_iwq;XED\b1G(RsT<\ډQ2tT ; `[,AkKbDl#b8,]i\|kCxLq~r Ά>|žBab?aag30( j"FA*{ߣd]ř+XHzs ZSLu:˅)ҲnJEBnS>Ħ mh,RT~}9, /.H~!`ExOۖ mwIl꧴ёUzzk**|m* .?~ chp?eY]*H|̛1e?V; ا 2PQVlW6m5O3'^x,ҹa)TeUs10ft9T{!L@OLtǽ!^L!ti ^:CR K ?2TYx۩Fq#0 <hѭ)kesaTl x9d%+b8XZ ;gv8 n7ϻa&^ob{w OO7jϯزΞ,~WYػqÎzVoλg'5("ե AӃ[:P|Ӓ+>#2?$MndueSJ%e؞~Uq ޳҈zRnп,7˱>` /uFgOg)PJ\)Xk VF"\tr#wE]s:Y#n8 Lm"6D VġH`Q ௢үQkG ]<2N?U &|a_G܏}di!:`Ⱦ[\,Y]JϹߐì~OA%> ]2Pl5pOѐ[ʀ4O@¡,Ҭ-,4X7-#?3{M·C18aY)M"ka_=4JqM?nh6kɜP  2;3 g4ՍZЦөGZk(m pv riZF}i:/czPuVQ9E&'/ v<2ۊYQ)j.HN11sʗ؋{ '|klT%1ꪋCgQUJ['Uֶ̝ؔ{81 rnҹ} :,й6X7fe' NM2p|4p6Vn듁p&S=[- ߞ~NjIY/c`YAq6-Y30#V~hsEPT;ub6WD#N1o>)ΘCx4$/jl1 y./,Rr[YE*GЕKm/|7 SISƗqF㍹6:cVs @w+k1caíw0 :Y5Q" +g"%*2t`Gݴ f:hN33^~yө)o)l*H-;+|+[-ZGXf~Meb75[ Ho}pi8;`$7~Yw4RypJs}!*Yf~W]TKV0Fyl$"\AE?W ,[b0q.|xZ/ˁ]P*4$*(R7L&`goTܑ.$V̇hULHnei_"o߁e*mbD2u{ݹш ߶\ؿZDܚ vz1UlRl-wk2VxՑ;؀400=ԑx~޽ګ o2RmԔ=_rZ&ן/߸([C{%b[f.\l$}VچU*B3lRPf d'GLc[dN %C9X5h _ cҠW?+`ރχ#CBW'B~cb 5~}`AE((r{2me5 t>`vd, p*=ϕƼ' o$ݥ;f`̢tɟJ$HZKԊk+LmR21,qF p̹-J%b=gV^y~׼0~-Pת{ƛB2XZ?oG!xn.}%}Oo _?bJNv$bl;z`&Kx^]"d+g eI2 B#(ijNN>SwF W |b WoW^\q?1>BL/=iR,cykWZ)BUkjy4XK, 3 F9pKuշ q@OAvyG4.,m#D"^ѣ8lQZ1C\4oJܨ힊dD6h[|L]V~.:0z*HX,Ͽ7zUQNe.7$:.0֣Mj9g {2ڬCO墸N٘@.W1Dz[[M%V5r!4&Ur s7%yNJ(?nYm"TCMmr.ݴ{bSNT]*}v`1^HvNoUۆAS6WOىe [(B͝to1bϫZH{~N}Vˋٹo<>#oTFD"%73.(?f]`!1%UqL:蜧ϸ|@8'+VWu۠0 } +T/Qnl~c{pa=V:#vm~1t 0SPH]/jg/!{/c jh[=U@ʍqIg6Mmq%Y8dc`"Xt>"{riPO?0=/9FnV}OY[՜"I {GEz `)ӇrOoKY꺧S4;L'>cN@8 ʋ{삕zb8_xV(X"]ΔěM6w,fgf+͜)TJUt> -]z}o*mGŶ1S<۵&:QzHjljL F,aY"'LˬɴbJp{6իh]m E= ~fFvE`EWinux8!GVY??7K^+[2%_mwsZMZ?vl9fO {,'9/} T}6VzôvU[dT,_uVE+B:xaY.L4rP1"nj[)Xs54 4sS6 {(,kW :Dm3/ T*z'1o'3ow|Ћ=Y< aDm?F_Y3f^Lff'@&M7F0{GTB/fzqc].L.In^Wk(hc!Ȝ|%?%\6Qn*0''Whĩ=ŝLCgR񛙌9V玫؛AӚTQyč&i٣hQJ,#|d驺z|yYH{FI%ORD&k' (kͷ_uXT4JotǠ`X l/-ԩ TBIjԛ/ Jn0,ħXBUHhFe% 6% /:&zLldKT ^Gv͊SA4:DIʯ< !.1?nTzhԓ尵 ZBCnI~+sm8T=f!c(KHSH7!LS.D4$~]ٴaGsiK7"dϸ}|{ܰQ7r-ŷzRaV]v4t2-讨YDیS@%_B(FHke%&5='jF,GoW9;(ڤX3z`fM<~1bR6t0luFIj˯JoIqĴ(cǘU@Ѣ#e&Vy( {̧KuWKeZ ^>(wDI߹}x ƺ5gYG22& sσ!q\ CP%U fbS'HLbi,sF67߼D g̣oGa)jS-&>7yCCΖi]MR A0 KfF=z ggtf7Kx [ L^.[ԭ>Zc736c͗qw*CCV<])E9)ϛ0lSM.$bASHib%zqݓV޷ʀ7+8{ \HAZ#[80* r[-swnxP+HElY./k6wKb?88GI. ur޼l9Eiޜ`"ƃȇ˺&vIբu*J\[^enQ%j ?{nW+1 ZC $3!6/SG @4ΌE!Rd8hg?J~u? ZiD4K{j%)'xMaYvkEt,lc:wXk||2$.Ey=x*-LM_xC{t4.<Pr͙s1/N8uu.ӿS_rj]\av^sQ ZŜ-DuSg6{${r25>, hcbJ֊?${ouo>ͨvCl(N9ߖQ]}3( z^)(Үe}E1\pB(yf̷HY/HI;,q«=d&T<)3SfV1ړ'vhD n$4n'r}b0DxoV UJgIN}4/|ߥ\$My"j}jib!NӽSBvC9wp7}5q2ѪҴUÍ,鼁I};Y͜ȝDJm[Osޥ$FlX~=/_SLJ&^( qwv# ꒎.P:bBfV2qgnٙ l8VӅb0aG-OTlO=AfWO׭OJ{̑Ͳg k:I3*zA$̊kP `nFGx)GRPE%5\}3۵RuuW-2G%voMk xBuFN7ׂkV)12dB!4 . N8O,f2TiV udLzyug’;Ks'^y+7UUOBж+$%O9elե*c@Fc6ggMU_~1fvV5 -V 0 )_D{Գb1#Q|k9=?Pocs$&}BoWT"M =Dy$,IN,چ wIxE6xnCC-,ϕ̲Y :y~ʝ،=Yc,TxeqUk*OTq\E*/ؒ/NSUf:b?īHt$ٶUfudH"$2kQ /WiXNx r6_y{?2ڽC~{u8|܁Sf+{30`wbcCQ+zƪ\T-{]ξ6Ѯc?8Z~|&eD9qW2R,Y+y<`OwAbz6|]:qZOVgM̥ickJ0=,4,am"RC#,c fZ6RcGŢ:)e eIr6.Z;P+O)$\wIV(h`z{%fpxl }onr 7%ӧ{ xm1oВiq JO'V!"=$ ї4KS+&Zۙ'憥Y^e~},x'"so߮d߽}{.kTJY;ffjKVB+jqMWL"e/׶߻YfxwI:kIq.DzdLWim]ɗ] f)B{lֻ`j~ކ;ā;~7-zAX'tbWO.$GS0Ra#QPO|P[ %`C)c"ͽdD1xp_s*5ac]܎*t]8Ju׷uO աH>hLkq7gR2,ʪZ]|$CZm qX LrSKb홞%H/w>G9(|vvNnNvX N Ѐ`p+{(u\ sQp ݨ3q\͟$ﵧ;QSřz[jl 6n 8DT}㔨PE %BWحYw.!/^mdSZ~j=*Qgd⨎0t]q-.PJBp1 ثatl/ypq{~TOH6 uNwY| AVrwDh4Kk+ /@ @OJZB1[?l{JՊq9PvoY6CJ$H`7Ei)*eK؂Y8{V)b pNv/A%;uh(w̃l}*4y|uV:&*P;LQg*}OW;xT!F[ o l*KKUvܼƌ٫NY4$Gd+3$KVZF&FuRj.GNۖ5ƴrevvvȬ2MC[)|eGyb{)ڻ.I{l1CesZthɻRæGp7?(dW^=  &fV͞iϟ\G6$$uP=ou87[%>`<.$MtӗB)GjSQUd`S"3ɽ}MױT th?7]iEHzş|-tdۑ,:Dj7lD6٧-+}ZU4^xOݼfQH U;"I{)1Z.@2󄖩b+qzV s^>V[ŵ-5v]蚮c""f\߬<ۋcy#Qj6dr#ȑJ4lO(yN}$m [-|Ԉ*S\ќ臉@ @ ie'm'q$s'B੻Ad).* _y#z_Ы_{_a_=+䊒ӌϞ'Pܺw GJl.rqZvD(DCG&Cر!=ǣz4v($;{2 @iǘupcE  hh s> L^fڻw TWޟR /_IĦM'B.,P-Hj)%PDp2^^w`K֫KPa>ξ﫥jϨg)KSټdGFYG$X` 7%ҀcKQO"BաB'^.`";GleԒO^l:Q>45e=[7$z iF\*B'ǝA koMFc3|Ӭ%v>!]€'! }:xi/xcR^WICz_`~cVFvf]5OnC?ҷ79']/g}փiUIȃOt̒?k:[>TSiE<7E-N ؐw;mDu[z+9g_PO$UYN[#jI&3\e4n)Rvcx/VC?Kg{GX"b(6 ʛ| RrI&-Nձ*?2BpEYP [.r?gOh/%lROE f N=d&u_qb? X°f:J/ }?(u6P"L~iV-g1YBg  }HK24鵖r)ۡ#|ti@@JR[k xcE^I2߸dVoqPkZa2H/=(c[lW%icXchPq6cM? }iShRm]6;?'B}gMmǞCj,vԱ>G+zYl?Gܦ*{.m7AT^1D";RUr"bhlqw$/gyRmZp%0Bϝ#4b\q0n N]M J},QrQ*ͯA\')yz'KdخDWdi@gzu'1\}^qI<>e^h)Q*lzBl? gGZ0`~9/ie+UrWWs6 g*D}zyn+ህwUӋ։fG%!L[#"h2fmh|Fqb}*H#znV˴]xA 1mk ׂV|=@=OBzPd5Vrl$ZՄ88^Ϗqp(:A6J5PY2 èV'Gpe᝭\hjp1awʓSA$|HE#7ч|p* `D]ZB-\6iWẍGGG׮~YJT7Mq^#0õqb0KVot[ Ֆm^k k-dpݟ^ Jd3ݕFFTϺۗ9o\S8qk"σxL_:PLh0!iˌ{8:zE  Oy/Иl ,)GqQR`\ J>[ip&Հ@ $:Q8Bt:@`{>'aޝu99'LcиđHhd͞YGf/ N=Sf0T;WJ& I 231kÉr`}A̶d@ \q-9(B,vѣALXqH[!f-t|nPΤR^bGOf=+hWD;Kfx1^ U]3@jK8{V. "k5hG¾pC鹒*6iS+пu4495dj+ KkNqBM++?{2MNJVu90$#dV/,) Ak0Ƃ^Fߛn<%Jvq$d @ww?Rs D1F-_E1}zcƝZh[$&DWx&fe% ~) ~XLt˛҅JK//(F[ KY=;ؕb~$Vd]8|bJ):v 3RRQ}˺O kUP}SV xsQro3z2F'֯nN?{"]1B+յ ;* eO]-N~2̜u%l(Zb9Mh]Z3')9#>*%)V`leY.5*D~- d5JZ!QӦ^fP/fj TXX&(f!Ý^g/j< /륃S'J֓5V^ ߟ^m{2; 0i7$&⩵ӵXEOSx5DZيt"hv_CS~A$<@ f\;Sa)6C_Ί g0(4i-k< #5t\CCh> ;!` 3-6htD]SeN }}"#Qn`F:>79$lVe~̈Ja%q~ܣ˴^lC f+/ eBa<' \*FC;|c ڀNf!L2i~<[ p&ѕAknnr틧n&fvnjn-25(!rC~D"`\T'j P`0iO͚Fkrfuəکj\'3!BIElQ?m12pQe>RwتD.ۋ XN#'Njjо4!tK_fR!@棼CJ-jaH* Np@wV[; ➄sqHlڜA?y "j!<U?hk1oa޻e8S1Н䋄!9hI B 9Ko_([f0o! 31C;XIh$ɀ禹@@0Wl ]&)s64wY3c.Mg ^1Oqs#Ms3ZNLMi} 9U~x~{$6FɬQEi2WvYF AVl VDXer(ZeͰ3)\t5\^"rШs wP5f7NK$f^q{"L]z`@DQh6f~hG5uU7G~ .#3P TV!nژPf6Չ>l6 9@Җ5Ϛ62t@7 L2  t'ԯbHԼwWfɊ7=.=bx %d? a 9epHҩ K\ۏ$C%0 ntv:M`᳑Basp& )"-qc @Ibk3ePF8ZmUL((qP05n'CVijɿX?qg^:ӛ[[PV8 6=Iɉ(cG@Lb!ll8߬MvvVbq~/%Ii҂ϡ֣T=!BPS:muvPsϥ;Z|s,G:pHgVuZR>f@e⋮@F<6Ͳ.L /)X 3"LN>^m w'>\C]9b Jn)snt__xEKD B $gYAV>g$%L0L#{&ΝFtd\P=a4 8"<ܝsL^^NEcvH-_>֋;|+c! 8O/.规Jn8&,%st]6( kH6 Fq#(ۉ[y{0(^ ֿbףŬ &fzCqI<Μ$((h\EDCc_x/E.:i^+Ο1צ҂Ji4@`lxNL$搘6T.?4] X1h|}g8<1Ȥ< @K// 5pלotpa jtbE Ey&Ц4`د$L"Jvi ljZ%=')8e`8T*M8.w~\(Htv r"jDoGG ilHe%ia&9dd>-i lMܰTA$VHG| $ :1R s\Z $Pjۇ]ًg8`簆 zߒVXݕxrtX/Ap2^[1~R{뚬ɇ:kCU'5n%'CXP06Gۮl[<NscOFeQ-gi$RNo7Wz _t"?z6y/H}ё{qL$ -a[st nSn2ğ@ѷxHNp2& 3 fx) WP'h7f> s!;p&QcN>OgdHE1u {^گV}2@JHS>!~L^d r5/GyNW-`ɚLJ=(RV2ȏM;:-A0<Ȥ L1L~.ܤkgLinNdu'f]BsLA5ShKvvn-_e9eV"mB:GΫxcZX oyHKgT~cN¸OZK:bA%9C ]oʗw1)(t^?uƦ-A99NلL#A2Yu5/_=fqljއˡ?uArZ]AX _vM1V&P\6X2m7䥱[lҏ'AQ6R S Q}딭SeS\D-wLrTC]ӎorly݂XJ^fo - ˰(X3R>\# 9VP饘QՐۑ,aeX#*gVTnqGL(Z)oMi!#ZH.$ɀW\p*ȶ /.gy 9L2p(#Z-)ijjԭ=0b`n0a]k2I)XE8fnDη%8CS.oěNg'dp-J=aYɹبNkY Ե=fNH^f<(|E(SL\>u4vdN~HN[nDeh/ڈ(21he_ʔQnV=CHEgi~%B15czŕ v >aY%e&c!pIB 8г]~A-l641/[\\Z I T4Waa8'lxRYNej3:-:G6vad$$`M,ܔCz3!q1]Ӌn#xBl]K^t_@YugSk]OƤ&v:NaLewɋ-hY}:xi O x|+^ñCq%]{[[q" x@LupՔj -[=ئ\ ejq[%^W'Hjyc%J8Imx=C/].&w4D,Ƙ3"z`U |M:3Qc!_ǣW(WjqS#f(G4GޗI>nڄE٩^˗nHG[M'C&Ǹ'orUmNݾwJ?6\AbGNzŽ2qXDIa'HVT으Et|G3( oOtrJls<;3)YQ`gw8"o&7>cѭ^@& tT}g$}0hh)GTsy4r o MH; Φw~| !( ad" -sQg#,1M|/uhR-.k$GK,݅1a=aYPA,q%! ONzvN6^>ƬAvJFӽ) /ުl̒B3GM'[,n\\kѣ m1hmo>!jM0C <埵ߎ\`K|_xN`ǀpWJ jHLM<_=CM@Wޅ%ꉷdžf%Mnp Z3@>'Md Y,BTuJ:o>b^չȑދGx_W`H "=ϟz&=@%ӌHqixDHXxjꄯK |@QTP+:uc}ОT B5ڨ81hȩaFuXLc[nNרxtNDX*N8s7|2 R{>}78.GyՂOg#Qq'g fKY`9h2„6$} (T?}A`78LHFRG EFJXw!SKr@EKa2'ʌ%v[؟[7SFjj[5hMt,^i#Coq§ZeteWip_t^*>VlhZQjXB㨪9q7@'[=eH+^їa/G6z<6)yжDHwFv2nF)%d.)ەP6^÷r {hj)ϰy"T㝼jMUd΂Mݱ[Dg4{+ݝ:<9qAw L}A=£6۠evAu+U_Q3f?R\0R R^ ,VwW2`A vG<9 4nX;? ?*uV0{[4"΂,qӼ? p}_gKB_ %_g=Ih|.ݥąV^1䓺0 "{7ms9ꛦBNIpi{ ]J :My%uGVց kkpyjp:G]Z$0 _N+M7Y2l @x6q 459OТ}Trf52k t߲}pU\ursVlתa޲ }Vm~3gm,\7m}-*,EHq$Yx=E_V'CRiND9/ Cbx@8`2I̪,!f݄nE8b+Q2쪘CZ^?GVf砱(BIe+9: A  v4RBH zѳy|x֣W?EtFOܔc=1E$V(T} rY!HhQ!.F/ dիG0;j86t 8y QG/Za3= O_ؤJPגIRsZ=|ڼA##su曻;..tש:KIT'6m7":sbqyL@Z,Y bg,n{O;]ɪ!_"=cӺdij2GBX$|i!*nT%;*^3/cEs4CwLj})<(YpHwW^HL- vpđ@wПp̹UK>1뷀L˾f0pΎ=_! 9q[ƭt-c\ @q]CAJpPao|ylN{F*3FxLTv0ԛV,jHA(\xxtP R^Sh"HJn#_p.$s2iB{TuZK t\LI%* P={b"UQ"VR} >Z ŊNVݮ-Jh σ ^ ;FQ,*+""00):;:VP8*e(7Jl0oHe^Ɗy%`4Y[eX}6KJ˩^#<ɝI_/23-@l4`P=K&=.)՜XvLfo BG]ޮ+؂PyInV`k-~SddcU.gƗ' 1N0P!ίH]Hf[Zx\. +\_4bOv#v!l,x<DxIN-Fe,/\mdPyIrǐ&$GKKև1qzG!A38̍97U;ȴVeg ݌LΐotpR# AD䶅)m"ǛX!-ΜaR_});;6П(o:֔qC^Ǖ۵A=zOb d~hzn/J~ǪŤzS,JJ#2ŭi Z~_{c]obR:v:?e? tZ]ָՠgժMk&zzq%UCW\Yڻes7ivZdTVQC$mČki wƿ#;̋ %yG8@5:yq)|⌬N=Bց^\S8]]?{rW[-+Wq)^2-KK0g4LҼ&OSPdŞ-m>nxQyY崎byCQA)BD`<`7%f"Y>ШG]T}_T,a^&xԠ,v4EpW¶SANⅭgj)&d 5 4($sDBݦxOhXQLw`qnPsTs'@Tz,2J*njވ4_}3יjҫ-%i POF?kjS#G'p1Jmba[2?kKq!@-^Y97*o0iMl=ߺ(7g_ǙWأ.. pk #c]@qos]vKi]C+K6 -/'S{VF#pƦuO&gzutxeL.vsMfџ@/)uA)0!۽)/Y_$mU?S^ GqVċj.vUH0mǕ*3bt3($F#PhzZo\d沠pmL~L jbmmK qsN"Q_Qh9 -㳟CUџO=ކy5 YkN.eui#uڒࠠp *!C_߻3Qpazmg- -k 8Z莧YPdM`TGhѤ]:dVNvcW:w|kҁ.:ӫOڑsw pT %z΁ه*0) A&3PPQ_i.-Z!%Ttf3k״+f6 6mPяH4ׇ2 umMCͥpm*Y˭9_J[.9&,rHi߃8Ʌa[Nnx J#u:nY}lzӮ^Y;zӉ1`7zv/_眓{='T `Jټ]ȇU)K{v[՝y`-0-?^[mSƐ=O#_DqqmR0) ibJ}I克WTm Aj/bYFNGuc\:i%fU,pIp ^yBcx2 Vb6Nd ٍәTlW{tĈT{S/QYK7#pQcGogQG?e<tJ83YިF^:̊|ʚ8`r}QhF4뢺j":k2;k.,&zTIFTy=K;pr$Ѳ8f_TIV[[ź`.N0U8IY D57o- !mv9\/KR!6 b\+'Ie/aFzͷ{P|w4ej-t۠^\SK+'JRSf4Ԗ+e"Ӄj\ʌE.>p!\B}vچN!"fR0rG߻* /J6Mn~}}<olϸpf%n~WXUlA!ˍ!ӫ8iD*z3@EYoJNC8f,R ƏmwE(iwLe7xЬ2Lz B,'\n@Oޤl os4PcXY }tp- yC&z Z`7)T)0jJׯ$7 ۷oUckwY;8>+g6w&$>ނu> VZJg˿=>Oi]@QYOƽ AIN%F(Y99JC4Q@J9u3p=0A1 ,^>(HRBxLԇj-ap37ubNV4|u砋ale zJ@5yCQ@RRqO¼p1Bj*O|O ,0߰ʹн,u Hs5IJR(+FL?Fh#~J1 p)O"-Jq Ƀ7u6(ۄ!P@>Á1 &'s3هX,9Y|sACEvp|̺%37_*xC8 <"'"G!£V볩s&<6D-mttzq5"mJ}_(^m'Vs۴F>}*sVӇ"m9oq{o! <]w@a#aYY}i|#r\I _ߙW+"푎Nܞ0|98ֽ .yfnsˡb~p*5E#s vN9>cQG!Ú8Њy6& -2~Q[aṖо)5_[z_itb(߭O=C/ P4? 9T,1լ9"fP]SԜ(0v4sJsbnQ{} #@ɏU^R+/6' Kh-Fs5XޖXyXQ3 WKb"&â{[mpZֶ/ʲZ[Z-l$NeWHWM_ Vӧxs䀱X )oC&6lktIp].@?wShs-$9nP[pYӲG:Etb&< E_p0JtzX B.R .EĎu-0OSBþm Ǣ]vd`ÝXP[ VC4O0&zu4&Eʙ'tAB%+DˎG~AxCPKZnRgx+i|oʜ8oqJ`G~ ɕo P 8yuq뢵𐠵Ռ=ƶT·n2paA/F[ ]+p^F(?ɬ3ggQ)ĊDLm4G;?81[ѫT> =Q8)ʒ5ck+gdRA|vakBcz[C8^'դOS0* )5r|Ȥ^?z}[SWUT}?LU^}L 6h8 bǎEڰn/MA66Mkr0.'})X "9O ~.7@3_~I*`֣q^ Q(Tߠ1``w2uՓأ0F(zcgsSolP8C4>@e1bς zF]5Qƃ/Y vAfGWJ;=yw@Rq\kK0{2tv0="w 0Nr DnJ`37%/-*R.U+[lQ7H0x/{džq8>6F'0*G\Qa$;hfEBC-`0)y[hʑV H2pCxQP¥9>&zgိ*+kɼ'W_~IPg_CO{b̖aշN ~A'/I팟o" ܬ*0wKOLxi1M*ˀzܗ{ meJ!,O'Z2Nm:ܢ*G`x]sҶ#fD\FIHw]I ?7#ȂU.5w5ɮR?70:3np&9&VupAFsUc;I}!\Uv}bz:9y! Rξ N@)0ߗDd;(AXr[BNa+{?X/Jڽ՜vݶ6lҤgO%P (/V j>MTc74bɤ^~^()yIЄe7a'xU$u8/NΨ'nh贑51;^n48ߖSqF; Jx]]Y MG-WM_ KVgGg>W&i& əۣκ5XnF>gla⧲0x){8}>;|9 i 7?kNW APEjpYrҊJp7~V8o? 3#JF ;Sl6QAiCfT0YwI+~[kB41L[*;/jLAM0X}>.tغutjiZ6)udn? |n4oZ8H/h!}I>d _Y3rDwc6ZKجA;T GXKb4p:I9m{#?{X%CKM;E({vT6 LaY}jOѭTв`u Jۃ2f1D/MR1Cb @#^$yH"c%߀.MtBl7 ^]]]*eg^1: v"t2=M@f]M̟D_w`tјmuJw"BhO;ֽ.w3,eJVKmC2LCyӝOLU{/\"K h bxZLRiO(=|V})׾[[P[n26YK UL}W0$ڃR: O3Ij(ΒRօJ )HInS(gKp 2\oNya軚8'p%KEEgO[:*׸pⳇWFt!Woڧ"˲"CրooBJd;'K͒__hv+ dލ 'VmI.^˅ 8BsfG08ռ*ʮ ꩐Tҕc6s~JimxY~V)Iƛ+hΜ;]EBAАQl"U,C)'fC{KD]p#(^ys==UjonlVeuiJ+$dU#;O ?92 <;q>o Trx& ['-xp0j[;3Iw6N?;K9YR2vrD3' KgՂ?h?r_K& `t͡񟞉y7&.>tu4ߛG :^MpvwڴYz~ڇձM٪!RWd;# ^zʈQ t\Wy\OJ14:5\ SXT ݓgvV9UkX,miM\(n>EI aIi_,( ;.s)=5AI(wXg}4YDp4{jq(Q ̷ZJUZfK*xC~p"2r#$!JzZY.^|h}zXaIEXgt^4R{fLypᚚ1ި|O 25" tUAޗ@uRPNX1ZN/ܨxIQ×_y6EK / cuDo7դ |2VC f+H :`wiy~wkt@4OE],<ͦ?sb1- JAA2-=t칙Cõ̍: Ba;WCEΞr{`&,'t[8qu -(J]4 ʹ5ay hhY.4j&4a q'( 5sXGjWB~cm۶/.6a_A5+=d >Ĺ_.h8tBs0HJll[UH4v. >]( k9. UA:,A-wyʰ҉VjVU ^}|wTHӘ,Aq0;,ZD*#{lH7bRX0CduBѢ5d=V\T=Q37o qA̐AOlܿ!{_uD G_rkߘT^}Wo).8|gWPCeJx6N(~v_;ΞS?W#M˿^SmG θJQ50 i<&+;V=KrU e#,tFjëΓU|N'uLx&) 6wrroG4 LR gnZa#t+2>if!ϥ)Ǿ>0$&qqJY\IS(ˤ7^+'wٚze !e-ݙ{awτ K"Jd Ly"FջPn)ж w-YU6L8"!ѡ|Fj=cȠERz!z|%%N{9c׉S'I#ܳ&QFn๕ !JƄeeo},XM0cs9]e08ux޾B䦂@h~T$% ?-&=EsnϨf'$Є`9wvȒߖ$sNy7zԯ3.ɉA>c,vA?p-?#Gv˧hm,QvG=KԾ nk@p*;rQwZ*ړǤ 3νեwR-`Qz\ӧvch:pZ7ןg~#;xDtO|tҺ}&Y9ƮpbuU[]Tι#UFo~yեj`a~.;&\UBD<j5yуo)],+]*D89żmSTI9⺹"_KKgh&\^a= X(u`mgO,Ӊh}y$ے$ E[b \ڊxl~[l:鈼,g\jgY '&f)GL|ƭ*Qpr~;ZI] !q٘ >0S|_Aeg<28@+5 3gKp:ELBvKj:*&z0V >GXCJIOErWb$W+^jɒϖ6HX#18 ˌ5ԋ`֩wGU,03 ̵1 Q&g;!]vX~0a \MF4C&h VӾӗ|怙w9}9/HY1˚W(u2igo}9~!V7;:H xǗ~㲿vWزj w$kʪe1Z^W$S+ļњ,-3!cmh9% Q*;%_8FV(s߷f8dشgm5@@7V։!)^`#m܊Gk!yu訦(+q:­D݉5/bwb+bᎁ6}HЛm$te1-ě G]iܘ$Q:npysǩBq8Hr-;-cN*rJ]cGYucyUku DQ):4^K<|XEޚ.Hxr亞jΚơ-]eU6xbk_loⰯuvoLzA+$^ҕ\w%>[PG<2FnD!$Sx8;;(~ Wou\Ht*GĞv:[Lr-yGm k-6K=9D>GkaDl9*K2J8OsP"偙bN% pxcN&ay{Mlƪ3#LmN̕&>4wՙި|3}+e}_,,ALu[ϲQJ5'z@NԝZ̉ED@(PVdl\8N&,)I]dNY8+ʞ_wu⥊8#+1d8s6Ǭ}壯 Uyfc+!)Ȧ1[N}3ǮIGu]x~^ʔ4 qd[>,{1#^3ID=q$%ɥ:A*Cg R@ BH@!Tnwl˭a]ɬz5 {z1R&l\WџgEIّt)8RTp*YMڋFfR8VYbJir5Fč N4egH%<ټ njc*v<᧼ /Ujao.lGvAvPؠZj9IdAvƉ< jO3j5KhiMt|en*=-ABQ׍.|"?Ïs\Z%gt2^L#;K0>;!SSI!!H>S|BϵŵQN,$,J,ya>A"TSMK"I쫈+;;Ӽ[5*^1!;m--?wb^eCiO{*NC/.Ms'  f+vS'̘  TkOHLTpRs#2Y@2N6^T)u[>4(n#*w²Jb$ȤFTxM3,"& ܴyWm k!o , ˒e6GG\r]U2%8WH CQo娣)*[zb2nʹ.CL?gl2\#.WY`WG>r8e1jB Uq8`{l_d9)\$n +L[o"N>eYfC-\Qz%seg@% I^؄*ӬD/j1'$YF\(AЃ]xiZk$5U܈?ZN:5ZC'Zܤ}w~HEVN'O:R|J%ءC.^ڎ`g͐(3!a [0ɘ»#c]j)`rsJ!*jcf`o+ ;mxx 2= }JKo a XN-K;xL@@a,u]ϺU,Y;Ia˯%y\ #2"daE޵>P~?nŠv]wZY׬a)33t2T۷MN6=?Cݹސd}1y"9gV˚!Z1qz&Ww-fRC|K>'cwA?`6$,|Ckٝ0->\#˽5KLiTom\[کNJXu}ꕵۡx[@4u g@+"R.AST+8S3r P,qݕV^fbڝ]d|k xtQ ä=:qC/ѾK69@̦8ۃ)6mkϋz{vC Gv̠d lCȇ`hr.SFmإ>2푈n\y 3k43b?sNjT%a)2}7 I }A6m"o'iLII5y?|Ue-Ңhb=Ϫ۱_*'{h3ry":U@>q|J!׎72ZΝ ]p%},r Tāeu1't̖Xm٩X$:Dl>OKX[;4Eh!BAjZ<|:f^Oh5a Ku/bztw~8i$oot^3Q?rLˊfoInHiqUgg)Ӈi-aui4,a{ nY$HkJcJ8@t1Ay8RQ)( qr<'T2QUET ԫ *DWV-J(YWZ~]^oP6{ [=ʤƔڗ>!C/9kyyrL+>;ʒ[/ fn>O< 1#ryw70"aYM0Ib8H^-ri a ޴B7N9!gI 2iOB *{Ȫ!&FsSmt*Vch|ʢ&E=E+BJ&Q"/qd"8Yn$:W|8a% F~\\ =w帙"i4}BW3߬[o4Yf"31Doڔr]CpϼAylk7S Lj @>s%0)uA 9-^{#x/ަL[`0/(?¨Y)؛a wI{ddC1ڐGdj<R0*eYCNsI(~.D*; ڻ{VqS[BOl]yWMRZ$.%qj"̙.9*H*:HfcEpRoQ#"htL\V Of}=Q]LH|_~kϣ񏈔vrți&!*)rIb@쪖%M5Нs!N=3h%`U3yV| pk,6խ]+{EΗ\^yn۔.*QzMOտD'TS\0WU'5:#h΅A%EZʜ5bҜ6M.^qӶX(1]l(4AҢۋVXkv)^ۚn6eQ~q`a4ElZ{!eٹ Rfmwš|Nwda{%Q cygRA9zXBN|5ّO49_w9.fo(D\EPl~PˢA'Ǐm |)]ˍ1<|`){y?J;|Ɠ=J7MMA~weHb^;+4T1纲ѳ'ZNWRfZx R}Eڢu^} =ּ3CAlC\'EΩ).b.-GB؄HA|ZEy˭yH: $'Xv3&yVQJ/I^ '4ZY[}>ēnѭţvTow(kxǂ Կ^gWzۼr1k }Pc.fŝL@^-7pjorͤDⶴ ppKtrU}$gmJtAPv h*ٲ͛-Zv&dHj|4P9?]]zw wLz zЩ!.+',zb8*߮$jΆ,7bCo/]Eh+#PN: q͸E@G4+5|"E@8xy>XqI3%4&Ueѣxޜ+V[ W?$U7H2ܘm &{}3}`RU=}ii*"Q:, !86ܤP'TsrvwMDKOxinM'\W mFfPOV \`%~JJvCm8kv9EgfvG١w20$-\IMD7OۺrU :Qڃ1<; -:z^%qBZKQD{җxoe%*p 7|-t<^xأbT*n }ۙo˞(ﴲ\^(Zn3fZ,2:"n@{8,-^wQRE~ '>@^U>W5 %3#X5"߶縵mw #,,C8閅WO=ĻH7=ζ:+ ᓞ(NQxTa7$m};aÿmk.47Kt݋B{Z=+IwoN.R"kO5haCK0OP$/{qu[_f_".wy$8)"oX;34Z'G&o5gȬ [푂px$~VlYy?A:O0O.?Iv{~ lz]%xդ1G2 ͯ4` 1w^"B~<׎kh:&9Dɗ@ I4|ߖ^y~r׮ۙ|,y-nQߖBN"n%;TsB֭f =3EXX7W s i*(*+"AC.ڥ+:WR^mSQMz+ . sS!F]bZxL}NN $pgvE mA~DPh#.0k㲧on?֭l/Ox$] L`.\(P+:rj{x}cO#V ̥): f(ýQ ǀ*[յ~-`h1):ҙn@-݁'>c(>,U0.Q/sU*kޑR1&&;{=< QdÅR%R F@"zEG1M}<*:Q5 zW ՟DKj~_  [#Z/9XMFۇ{7șک+hsDf!!/y {ܸ=g0<)84TMʦzj^K"$L+܏!^\*d%\%Ns$Z:˼&,t 'U}~# \ɝ/!-mYVB-Ei8ɷ92jW][тQT~79E3SѧB0n+\q\Xh;edIx6> XCVrpNFK|99QPba-~ $GnX?:a.pf. !®Cf߄Z$ ݞ\؉jrvb1F4 %B B k"r,$$\7K5sn_ +v P$ϩ3/x>Jaw/TiXFN)@ԅAK$r>Gnc QR] ]e\C w^ʺ𑞯W6ު}LB|ұ61R pn=  b>@kDRƌB MQnh50qb9j C_~Poaʀ1>bשiv63u_;fj/1'y9D8a n+.Zfq>ZTΟάs6 wV @)w1`h |ZwUia{]"5 X MDXfl|6b3Z=cddž/bWOgL  Á^ ~Їo;Lx0e_Z,Cõݷ%"({>96?C`/}G(? Zi 6m v{L3Z[ax'96!12'pͥ[˔))L@ƙV~+r2ʑkk9Z 0NG25raQJ #+Z,OhO :X=`O0 ߋWݴcZBb4l’ٟsԳܻYj(J՜:qZo%9" ]c,:ZrPA<@p/" g][uoW(AǸ3aIL/)^j_s;_"KY mĄ"oj=1HfΤ;F U\V>{9Yc6J?x̀W0M-7ؙHrV2 I<( 5uywjBtA֏o\e3YL\ʺkl#ss˯Gb/kBZ0rDhDq9WzC8 @C4.7U{_\_}#!|z(12Od@C?x7 N.?yjvGCҌ"ʚYlC`2'%b[iܫ6hLF HO] M"U1P [9X |UB S~z|.4TP{.b9py-~^z \@JX`nbDWpk9_c,:2YaFμҦ׭b1DLcau"ҝTT 7+ovzӀƣ iO~}$f}e]Է99y26WLuS Mvq9t)iG׉06G -0I#u1}ŭ[cz6WŁ!-pi?K8'`PCrrp\B;ki~8߯I{'DʪJ"am@!BS҂ ?{łk}MqWW,/R+OC[Yw3|ck=} Qc;Y4ed6nگlc`,ɩߤ@7iM=Gs4g%rGpHC5p#S/ڝ* ϓ]6}NxErP?SrbO{Qph*LbY Sn /BZ; }m~9a4-h[ ͎ϭJ$1N&|'c䬥/ʺ&᧥,/94 g)^D/P"܈Edӽ &S#pKDD Ț M9B4Ge@f~޻;a~WOk CL T|;v)␳aH z=lyNS^xG0fx!eƸ.9\( (noAiO@ut:)SPU6&*Bvp F~[@]Ja0dTx͊ZС q0.W2v1hd-CZVA@Gñ|g;=E4'K<@|4^q |\V1p%[#S#F#-CI̥+\),Wyy:#sQP^,JzF "穼ƹ0-hq(B?Z{)6{oݔ2WCtˋg5T8,+Oe0HUܺvRrAD 6ř!D)n:nc a=2ݫws9OYV@^XI{+ #bWy+@% 0.{'~{dzr/ێlL*bd_Ecfa"sص- v$95]&,̋PLY$8>=[w<* C~$\YY7W$Y^qF%EAWQ7{EH2C)Cu͔.w9AYȓKcd Ị< wTPNwbԡ"~H66_0wnDKAANe9iFVg?#|ּ^2|Ś{A&X|[QhY^oG|#W*fe`-ޣ\6i˺.tu/^ykA/˙5nnמz]1Z[ϝomV95˅_6 e^^!MMHчVx]m$ՏKJM4F-oQC23q/T])<6.jxo/|CA^[cB2|A {o1K{2A`O F8;' 9ƀ@bR]ʷq,Vo<*l^ܫQcT_5?$U0_9׊ f)Cץ) יP["q,6 #acd$\ـݻgyZgvbԷaz8{ț}BhA{mD.'*KOik;D #/h;@± !+ګ-ckn.v$?:ܗb{azKޣdGkyVֶZͥ:'Zsg.O\/+i.5j>( =>v w=7\4߈y~)qNKss~9< k {doÞ;Z荄AR4vríḾѲʀ&_>p9UF(#eI|K!Вl036nLGe*6Ne /ˌԎŪjj՚we7r|т֔讞 AZSCr ֔BInt~-#ZVvLBr"9ŗ598Vxh_d^:|xmW(~ My+)#%ʂu~ޯщ*KX8[4XL{J.. 5|E^]sҝcC~L@!=Iuzmʐ^IU:d݌a?a2h/iy;nQo (& =X;-?vkC) fm9ҟEf^-MזJ=4o,q˒i^X\lX޳ۓ{-:V{??&*_i]Ţ@T~9{UpMXאjS雩W::@VVپ=-}_ey{Ď^gifhjrԮ 0(w90{T,OT<~ >ϷXVX8^tΪ/y F&$ZLȏ!DHn˃8mL:dJ'!c\?<ƶ}@}݁ "'||2_}W 3:}6)X.邈Iemś[:ޝrmL#hd c^o;6a!mLS >nN-j'9BPB"7%"J<Z) }B [Sgԓd%7 O MmfZdQ?8k 8VjW{z 5zՄff2!]J73Cƅ2P,Mwǹ*)5H% s9ҏtIT H'~icK"~X=~KH^!Oq& "^S9c*l`t122Qd @Z1N[ :H\t܆CeSSR|DXECydhp9@<(+$̙4;.9댋)5des׷z$Uf{<&v$b)K WTR8Yj'?K^GW{o%8dwJgMz 3.7S[^n?ԣlC9XdC?5{/{/{ 2D{D uwo̧ CjcT#Ț y+L@w1c@]?|K 9dXe,r755뼼ِ\\5A 7 [B~bs^wE)`sOrя)eަlCZ@Kgߝz/miM)|DRѿ=/|pzWPC !Uqu.fc^tX\ZZJ9V]бو+|fq,ҏA_/儘(# :ΓkQn~C <ϳMfɥ$<;eڤ1%iEUgq*;R1=XhW`VUr7.Y"qyW(M&qψb)cAnjIW4ytҝ1Q܃j 6W!hd77"N˴:CM\ti1r[?Ѓo{TEzr 6k?ZQ[7/V{.=ծ"+9= KLe,`S w9oW͡ɓl _G׆aR0e_ǁu5X2k>[:kї/7:YÒ+W.1Ade;f4Y.H:^θ`"7%1$E5:DkP2r@5ݕ+Zf}G 7R=4GObT˷ ώ#_w Taҳjt[H -ysGdhAu.Z54N^RӲG2Qё\I>]zP=>';r?8Dx[k5j4ITU W0*hڬFgLRgX,cA!*}% sY|{F+u]$_oIr+sźv8sR?,%_'N,8+ kħFgd/$[5'Zǡ)A{P {2dfܥC(QUg1r\;Hbb τe+lI""Ӝ .?>ikV2Yr.6ы<OF}Klc+$#˧{ɘ 6S9Ґud`*ٕX5=eou7~4-xf&|ۼc;¼,Z_ݥ&k㯩 \&cwFc렮7ؔWK]}QY:H A=r/KuWT7Voi;Ս+ݖO?em+9W*3Mu=-ZR)Qv!EQa(9P+Bv{@E5*q]?vS!W㐸7g!N£IrWOԇdmbWBM!*I>t39 3D˓ʬy*{+ IfD$5w[EGeLeurH1T~ΧtWyw$vsjf2(dFg]kSz!~']:4`lyi1Yʸ7yT)IJu ^ճķ'^DvIwN{+$>| ؿzFda ObDL{̬o<5|ʐ-DIߚkyBoW+o^'^N? =8\|7rp0~Iq X3 Xdyzl0E p)KdBĔ,DK Ξkm?^$ fRd9M"Q%ƨѣfHç]9_RUAq}<=^F-ڋV욽Vq*ĝ/sru!`D[Iw=) EkvkȿgouS,`*糣: g mb|{{qOuyeڬ(+7oʈz0'#2VQǗME} LK4~I:ֲnj5'Je9wse>{hPg,f!k土^Ɔl|wu|Ñ߬DQx3Ckp)eC>Ԟ$2f=:Hh5ڢhFL,@:E~7BV?Q#3QA.јڬxWujTa7`N"*kKbYJD: ,T3sq%̓!Lo oPMZ~8_BUh2|H@mEj]<m wFɇ|![$Q#zT֞N6 讎HNb!b'rV!Rn&>ww)rR`><\|a +Q۹o=b$Jhܒ"A丄uu?\hG!7˽&K>p50E*~#>ĤR>p8%q{}# pqͿfOG[pVarNv @`HrrUHkέ|zg,tQͭNb)Y0G}ws=?1]Ο.:X ӻ$Vލځsw/@@{W,}v✥"ԸzEIIKUŏIeP`fq4ꒀy]%] -"Փ9szRi ٪Ӎ럤1!Sj3 ^-S`Y9%̥ʒ>2.-}pѷ7^-R2U[KV^j]N牅a"}-| k2a^!b)-D*57hoѠJ?\ζn<oQ0^06%g>)fU*7U'M$+6_7 ԤY|jipUzǵA[ .`{ f"[ꨃH170u eeɲHk.a03eTuu+(l:*owQʑGwE8wU՛nK- ͎KMr9]ay+2p+ҹx?_Q{(Ƕ; -!1FR9nf !К?n cD$=Kn,PYgxqͩ'C }G%3CgQӜc$n%lcfUˌN^ޤM-'KVϚ9yezbQȵƏxTRQ5~ ^u9g3f {&#TuH8%2t):N#s??%?05љT*Rg)Sאy"҇SAܻ錪)qRK=WH=.(<>L},7汫ƎP s+fIX\h;sb).VĦ,|pUYY }0ӐTzqMeRp -NS\ .] HdvidK9}dqzK5nX e5bF6ʍmC@;?{R,l=pe(FM-c<: GНn喊&RaRVz*/ҴT#H6v#I(V!QҠG߄+xm2k3zU35հ2o~Gqrv * [ՒC[~:m&$4ijB84|؍pHr+ƺQ)؂I gHSba-ui-l/о0\M}K?FdD{={<ԍ^Ѡ;|x݋ ]94jFaf|l\Q!r53Lc6?aa5cG|-ls^8%6uO9Qǟ nXIx4paܽfζK~?+2yIb);(JΕFH+*1&"ɰɍPa%'of?cOOK 8VzMécg֧6Y_} om+zgT|VQ?'"xR;gO^L8;qaߘlLbL\Ww>k~[gwk:>2}ZB{W ,w&S ka@Ը?6>3n=)?{2H2, )qH` ޕ3jkTĞB?Qm$%)}bUq_cqY -_1Ӂ)j?E=7>-96l. sx"hc[y7?N - TK79|ѰxzjgmhInHog)v~ C;LJqu pmW<˗=l+(lCPm-[IHHK(|LQkgª?CEBx}QN";FNUcE\k5EG н^Jv<+Dk rKCN w¹*{Ϛ>jhÉW~{|kÿ$a=g1izf҆Mm  z`0X*+Gn ?J >[Std>)`zdM+9,Z', į>cu}nmĐN=z8$Rգ3c 1MEKY$ 5 ]Y^=xܠKHUNyxUqYd*ggmnL%r䰼!@Z"["(͘pfk"v$ρ9&LIQV:WIZk7TT!X52QIe(ZP b}LLϰ:.'T/ kS->lT5}Tr#e(SG:'WmP 8oVV7S*6⋫-7kI5P|-wSX-g `(TzI(jaZc^w.8g-fV]hl3.yOu2&8EAD|L|Z3ɡ2]ۑ5KqO[شܵ,Մ>k*jsέ *Ѯ|\A[ T O=5@'z=]Z(CGEfM8GWP+qNEmF068Z:b7-Ь%{Ch1^tm,R\H TZ#x㮽`Y'}?}iou8KP1㥙夆CZ"8@x µ-``Pj}6LlRU\6[ CZN"*Y=3CȾ3ڣx~,ceG ;,5R>Uw6ԼSAR7|aqu^ځ;V`ۼ:{~۔x9:7N+m1f75dGrzZFݬ(:%P 9GaxLIrl2}>Mn?KwE/:T@Y_a^OME^3 O\s _ ^9$-Q5y'msс cvV I߇!?I$7ܡ\ód[#mH܁F&8$*pw,意hiḩt-,6i0I^,`Ś7{~5QR ]5j^FiT\?8E|ӕ_eoH{UĠT&L-3QWnԤuM* ۥD+%j;bͮ' Y> (؟4 w]|/JW#ȤZca7B'8:{} N$8oQ|W mOnL)Q^!WCM8}:Nhۑc&4ٝqo_@xމɐ5 Q+t*\]w C!W^"ywne/R=`*5bJzMwZN h PQ7޴-␜EgC29*XYKUk&D\4]aw-5&_kD@;I1fͫ{C[ŏY}ExdS9ɇ@~$`KPK}=wvZR ?Ph{%Zdϙ'biys-KhOü. [4/%0y]|(珫DBˀ(D뺹"cfw8NgPmzdo *Ģj6hni[}iY LٱEf9eF8dǣOk@p#B\'Mo=) uĐEB>:6Qlo6]Z* ) ˸kֿ /d?6 Q7Dx'ey:KCaM۽T&ufTx_WD){5PJ7A 2wWqo-Cg*te j ^"~4{;fo-W?*wW1{|k.QZ" X-J/~ ۵dp;} WAD|Qķ~XC}6cT;k#7.{7c8T_4X;B*bm#"""*RJ)EDDDD̛?97t3Zkgсhzt&ޯw.YNˋվgH@E!6~brݴz]DDDDDDDfffffffVUUUUUUUi{z6Ndassets/lib/jquery.timepicker/jquery.timepicker.min.js000064400000035701147400353540017073 0ustar00/*! * jquery-timepicker v1.11.5 - A jQuery timepicker plugin inspired by Google Calendar. It supports both mouse and keyboard navigation. * Copyright (c) 2016 Jon Thornton - http://jonthornton.github.com/jquery-timepicker/ * License: MIT */ !function(a){"object"==typeof exports&&exports&&"object"==typeof module&&module&&module.exports===exports?a(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){function b(a){var b=a[0];return b.offsetWidth>0&&b.offsetHeight>0}function c(b){if(b.minTime&&(b.minTime=t(b.minTime)),b.maxTime&&(b.maxTime=t(b.maxTime)),b.durationTime&&"function"!=typeof b.durationTime&&(b.durationTime=t(b.durationTime)),"now"==b.scrollDefault)b.scrollDefault=function(){return b.roundingFunction(t(new Date),b)};else if(b.scrollDefault&&"function"!=typeof b.scrollDefault){var c=b.scrollDefault;b.scrollDefault=function(){return b.roundingFunction(t(c),b)}}else b.minTime&&(b.scrollDefault=function(){return b.roundingFunction(b.minTime,b)});if("string"===a.type(b.timeFormat)&&b.timeFormat.match(/[gh]/)&&(b._twelveHourTime=!0),b.showOnFocus===!1&&-1!=b.showOn.indexOf("focus")&&b.showOn.splice(b.showOn.indexOf("focus"),1),b.disableTimeRanges.length>0){for(var d in b.disableTimeRanges)b.disableTimeRanges[d]=[t(b.disableTimeRanges[d][0]),t(b.disableTimeRanges[d][1])];b.disableTimeRanges=b.disableTimeRanges.sort(function(a,b){return a[0]-b[0]});for(var d=b.disableTimeRanges.length-1;d>0;d--)b.disableTimeRanges[d][0]<=b.disableTimeRanges[d-1][1]&&(b.disableTimeRanges[d-1]=[Math.min(b.disableTimeRanges[d][0],b.disableTimeRanges[d-1][0]),Math.max(b.disableTimeRanges[d][1],b.disableTimeRanges[d-1][1])],b.disableTimeRanges.splice(d,1))}return b}function d(b){var c=b.data("timepicker-settings"),d=b.data("timepicker-list");if(d&&d.length&&(d.remove(),b.data("timepicker-list",!1)),c.useSelect){d=a(") with choiceJS. * * @since 1.9.0 * * @param {Object} $scope Elementor scope object. */ loadChoicesJS( $scope ) { // Loads if function exists. if ( typeof parent.Choices !== 'function' ) { return; } const $elements = $scope.find( '.wpforms-field .choicesjs-select' ); const config = window.wpforms_choicesjs_config || {}; // Initialize ChoicesJS. $elements.each( function( index, el ) { if ( ! ( el instanceof parent.HTMLSelectElement ) ) { return; } const $el = $( el ); if ( $el.data( 'choicesjs' ) ) { return; } const $field = $el.closest( '.wpforms-field' ); config.callbackOnInit = function() { const self = this, $element = $( self.passedElement.element ), $input = $( self.input.element ), sizeClass = $element.data( 'size-class' ); // Add CSS-class for size. if ( sizeClass ) { $( self.containerOuter.element ).addClass( sizeClass ); } /** * If a multiple select has selected choices - hide a placeholder text. * In case if select is empty - we return placeholder text. */ if ( $element.prop( 'multiple' ) ) { // On init event. $input.data( 'placeholder', $input.attr( 'placeholder' ) ); if ( self.getValue( true ).length ) { $input.hide(); } } this.disable(); $field.find( '.is-disabled' ).removeClass( 'is-disabled' ); }; $el.data( 'choicesjs', new parent.Choices( el, config ) ); } ); }, /** * Widget events. * * @since 1.6.2 * * @param {jQuery} $scope The current element wrapped with jQuery. */ widgetPreviewEvents: function( $scope ) { $scope .on( 'click', '.wpforms-btn', app.addFormBtnClick ) .on( 'click', '.wpforms-admin-no-forms-container a', app.clickLinkInPreview ) .on( 'change', '.wpforms-elementor-form-selector select', app.selectFormInPreview ) .on( 'click mousedown focus keydown submit', '.wpforms-container *', app.disableEvents ) .on( 'click', '.wpforms-comprehensive-link', app.openComprehensiveLink ); app.updateSameForms( $scope ); }, /** * Update all the same forms on the preview. * * @since 1.6.3 * * @param {jQuery} $scope The current element wrapped with jQuery. */ updateSameForms: function( $scope ) { var elementId = $scope.data( 'id' ), $formContainer = $scope.find( '.wpforms-container' ), formContainerHtml = $formContainer.html(), formContainerId = $formContainer.attr( 'id' ); $scope .closest( '.elementor-editor-active' ) .find( '.elementor-widget-wpforms:not(.elementor-element-' + elementId + ')' ) .each( function() { var $anotherFormContainer = $( this ).find( '.wpforms-container' ); if ( $anotherFormContainer.attr( 'id' ) === formContainerId ) { $anotherFormContainer.html( formContainerHtml ); } } ); }, /** * Initialize widget controls when widget is activated. * * @since 1.6.2 * * @param {object} panel Panel object. * @param {object} model Model object. */ widgetPanelOpen: function( panel, model ) { vars.widgetId = model.attributes.id; vars.formId = model.attributes.settings.attributes.form_id; app.widgetPanelInit( panel ); app.widgetPanelObserver.init( panel ); }, /** * Initialize widget controls when widget is activated. * * @since 1.6.2 * * @param {object} panel Panel object. */ widgetPanelInit: function( panel ) { var $formSelectControl = panel.$el.find( '.elementor-control.elementor-control-form_id' ), $formSelect = $formSelectControl.find( 'select' ), $addFormNoticeControl = panel.$el.find( '.elementor-control.elementor-control-add_form_notice' ), $testFormNoticeControl = panel.$el.find( '.elementor-control.elementor-control-test_form_notice' ); // Update form select options if it is available after adding the form. if ( vars.formSelectOptions ) { $formSelect.html( vars.formSelectOptions ); } // Update form select value. if ( vars.formId && vars.formId !== '' ) { $formSelect.val( vars.formId ); } // Hide not needed controls. if ( $formSelect.find( 'option' ).length > 0 ) { $addFormNoticeControl.hide(); } else { $formSelectControl.hide(); $testFormNoticeControl.hide(); } // Show needed controls. if ( parseInt( $formSelect.val(), 10 ) > 0 ) { $testFormNoticeControl.show(); } // Select form. panel.$el.find( '.elementor-control.elementor-control-form_id' ).on( 'change', 'select', function() { // Update `vars.formId` to be able to restore selected value after options update. vars.formId = $( this ).val(); } ); // Click on the `Edit the selected form` link. panel.$el.find( '.elementor-control.elementor-control-edit_form' ).on( 'click', 'a', app.editFormLinkClick ); }, /** * The observer needed to re-init controls when the widget panel section and tabs switches. * * @since 1.6.3 * * @member {object} */ widgetPanelObserver: { /** * Initialize observer. * * @since 1.6.3 * * @param {object} panel Panel object. */ init: function( panel ) { // Skip if observer for current widget already initialized. if ( vars.observerWidgetId === vars.widgetId ) { return; } // Disconnect previous widget observer. if ( typeof vars.observer !== 'undefined' && typeof vars.observer.disconnect === 'function' ) { vars.observer.disconnect(); } var obs = { targetNode : panel.$el.find( '#elementor-panel-content-wrapper' )[0], config : { childList: true, subtree: true, attributes: true, }, }; app.widgetPanelObserver.panel = panel; obs.observer = new MutationObserver( app.widgetPanelObserver.callback ); obs.observer.observe( obs.targetNode, obs.config ); vars.observerWidgetId = vars.widgetId; vars.observer = obs.observer; }, /** * Observer callback. * * @since 1.6.3 * * @param {Array} mutationsList Mutation list. */ callback: function( mutationsList ) { var mutation, quit = false; for ( var i in mutationsList ) { mutation = mutationsList[ i ]; if ( mutation.type === 'childList' && mutation.addedNodes.length > 0 ) { quit = app.widgetPanelObserver.callbackMutationChildList( mutation ); } if ( mutation.type === 'attributes' ) { quit = app.widgetPanelObserver.callbackMutationAttributes( mutation ); } if ( quit ) { return; } } }, /** * Process 'childList' mutation. * * @since 1.6.3 * * @param {MutationRecord} mutation Mutation record. * * @returns {boolean} True if detect needed node. */ callbackMutationChildList: function( mutation ) { var addedNodes = mutation.addedNodes || [], node; for ( var n in addedNodes ) { node = addedNodes[ n ]; if ( node && node.classList && node.classList.contains( 'elementor-control-section_form' ) ) { app.widgetPanelInit( app.widgetPanelObserver.panel ); return true; } } return false; }, /** * Process 'attributes' mutation. * * @since 1.6.3 * * @param {MutationRecord} mutation Mutation record. * * @returns {boolean} True if detect needed target. */ callbackMutationAttributes: function( mutation ) { if ( mutation.target && mutation.target.classList && mutation.target.classList.contains( 'elementor-tab-control-content' ) ) { app.widgetPanelInit( app.widgetPanelObserver.panel ); return true; } return false; }, }, /** * Edit selected form button click event handler. * * @since 1.6.2 * * @param {object} event Event object. */ editFormLinkClick: function( event ) { app.findFormSelector( event ); app.openBuilderPopup( vars.$select.val() ); }, /** * Add a new form button click event handler. * * @since 1.6.2 * * @param {object} event Event object. */ addFormBtnClick: function( event ) { app.findFormSelector( event ); app.openBuilderPopup( 0 ); }, /** * Find and store the form selector control wrapped in jQuery object. * * @since 1.6.2 * * @param {object} event Event object. */ findFormSelector: function( event ) { let view = elementor.getPanelView().getCurrentPageView(); // We need to be sure that we are on the widget Content section. if ( view.activeSection && view.activeSection !== 'section_form' ) { $( view.ui.tabs[0] ).trigger( 'click' ); } vars.$select = event && event.$el ? event.$el.closest( '#elementor-controls' ).find( 'select[data-setting="form_id"]' ) : window.parent.jQuery( '#elementor-controls select[data-setting="form_id"]' ); }, /** * Preview: Form selector event handler. * * @since 1.6.2 */ selectFormInPreview: function() { vars.formId = $( this ).val(); app.findFormSelector(); // To be sure, that both form selector selects are in sync. app.refreshFormsList( null, vars.formId ); }, /** * Preview: Click on the link event handler. * * @since 1.6.2 * * @param {object} event Event object. */ clickLinkInPreview: function( event ) { if ( event.target && event.target.href ) { window.open( event.target.href, '_blank', 'noopener,noreferrer' ); } }, /** * Disable events. * * @since 1.6.2 * * @param {object} event Event object. * * @returns {boolean} Always false. */ disableEvents: function( event ) { event.preventDefault(); event.stopImmediatePropagation(); return false; }, /** * Open the compreshenvie guide link, * as elementor disables all links in the preview. * * @since 1.8.3 * * @param {object} event Event object. */ openComprehensiveLink: function( event ) { const url = $( this ).attr( 'href' ); // Open the url in a new tab with JS bc elementor doesn't allow links in the preview. window.open( url, '_blank' ).focus(); }, /** * Open builder popup. * * @since 1.6.2 * * @param {number} formId Form id. 0 for create new form. */ openBuilderPopup: function( formId ) { formId = parseInt( formId || '0', 10 ); if ( ! vars.$popup ) { // We need to add popup markup to the editor top document. var $elementor = window.parent.jQuery( '#elementor-editor-wrapper' ), popupTpl = wp.template( 'wpforms-builder-elementor-popup' ); $elementor.after( popupTpl() ); vars.$popup = $elementor.siblings( '#wpforms-builder-elementor-popup' ); } var url = formId > 0 ? wpformsElementorVars.edit_form_url + formId : wpformsElementorVars.add_form_url, $iframe = vars.$popup.find( 'iframe' ); app.builderCloseButtonEvent(); $iframe.attr( 'src', url ); vars.$popup.fadeIn(); }, /** * Close button (inside the form builder) click event. * * @since 1.6.2 */ builderCloseButtonEvent: function() { vars.$popup .off( 'wpformsBuilderInPopupClose' ) .on( 'wpformsBuilderInPopupClose', function( e, action, formId ) { if ( action !== 'saved' || ! formId ) { return; } app.refreshFormsList( null, formId ); } ); }, /** * Refresh forms list event handler. * * @since 1.6.2 * * @param {object} event Event object. * @param {number} setFormId Set selected form to. */ refreshFormsList: function( event, setFormId ) { if ( event ) { event.preventDefault(); } app.findFormSelector(); var data = { action: 'wpforms_admin_get_form_selector_options', nonce : wpformsElementorVars.nonce, }; vars.$select.prop( 'disabled', true ); $.post( wpformsElementorVars.ajax_url, data ) .done( function( response ) { if ( ! response.success ) { app.debug( response ); return; } vars.formSelectOptions = response.data; vars.$select.html( response.data ); if ( setFormId ) { vars.formId = setFormId; } if ( vars.formId && vars.formId !== '' ) { vars.$select.val( vars.formId ).trigger( 'change' ); } } ) .fail( function( xhr, textStatus ) { app.debug( { xhr: xhr, textStatus: textStatus, } ); } ) .always( function() { if ( ! vars.$select || vars.$select.length < 1 ) { return; } vars.$select.prop( 'disabled', false ); var $formSelectOptions = vars.$select.find( 'option' ), $formSelectControl = vars.$select.closest( '.elementor-control' ); if ( $formSelectOptions.length > 0 ) { $formSelectControl.show(); $formSelectControl.siblings( '.elementor-control-add_form_notice' ).hide(); } if ( parseInt( vars.$select.val(), 10 ) > 0 ) { $formSelectControl.siblings( '.elementor-control-test_form_notice' ).show(); } } ); }, /** * Debug output helper. * * @since 1.6.2 * * @param {mixed} msg Debug message. */ debug: function( msg ) { if ( app.isDebug() ) { console.log( 'WPForms Debug:', msg ); } }, /** * Is debug mode. * * @since 1.6.2 * * @returns {boolean} True if the debug enabled. */ isDebug: function() { return ( ( window.top.location.hash && '#wpformsdebug' === window.top.location.hash ) || wpformsElementorVars.debug ); }, }; return app; }( document, window, jQuery ) ); // Initialize. WPFormsElementor.init(); assets/js/integrations/elementor/frontend.js000064400000004751147400353540015353 0ustar00/* global wpforms, wpformsElementorVars, wpformsModernFileUpload, wpformsRecaptchaLoad, grecaptcha, WPFormsRepeaterField */ 'use strict'; /** * WPForms integration with Elementor on the frontend. * * @since 1.6.2 Moved from `wpforms-elementor.js` */ var WPFormsElementorFrontend = window.WPFormsElementorFrontend || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.6.2 * * @type {object} */ var app = { /** * Flag to force load ChoicesJS. * * @since 1.9.0 * * @type {boolean} */ forceLoadChoices: false, /** * Start the engine. * * @since 1.6.2 */ init: function() { app.events(); }, /** * Register JS events. * * @since 1.6.2 */ events: function() { window.addEventListener( 'elementor/popup/show', function( event ) { let $modal = $( '#elementor-popup-modal-' + event.detail.id ), $form = $modal.find( '.wpforms-form' ); if ( ! $form.length ) { return; } app.initFields( $form ); } ); // Force load ChoicesJS for elementor popup. $( document ).on( 'elementor/popup/show', () => { app.forceLoadChoices = true; wpforms.loadChoicesJS(); } ); $( document ).on( 'wpformsBeforeLoadElementChoices', ( event, el ) => { // Do not initialize on elementor popup. if ( ! $( el ).parents( 'div[data-elementor-type="popup"]' ).length || app.forceLoadChoices ) { return; } event.preventDefault(); } ); }, /** * Init all things for WPForms. * * @since 1.6.2 * * @param {object} $form jQuery selector. */ initFields: function( $form ) { // Init WPForms things. wpforms.ready(); // Init `Modern File Upload` field. if ( 'undefined' !== typeof wpformsModernFileUpload ) { wpformsModernFileUpload.init(); } // Init CAPTCHA. if ( 'undefined' !== typeof wpformsRecaptchaLoad ) { if ( 'recaptcha' === wpformsElementorVars.captcha_provider && 'v3' === wpformsElementorVars.recaptcha_type ) { if ( 'undefined' !== typeof grecaptcha ) { grecaptcha.ready( wpformsRecaptchaLoad ); } } else { wpformsRecaptchaLoad(); } } // Init Repeater fields. if ( 'undefined' !== typeof WPFormsRepeaterField ) { WPFormsRepeaterField.ready(); } // Register a custom event. $( document ).trigger( 'wpforms_elementor_form_fields_initialized', [ $form ] ); }, }; return app; }( document, window, jQuery ) ); // Initialize. WPFormsElementorFrontend.init(); assets/js/integrations/elementor/editor-modern.js000064400000032464147400353540016306 0ustar00/* global elementor, elementorCommon, wpformsElementorVars, elementorFrontend, Choices */ 'use strict'; /** * WPForms integration with Elementor (modern widget). * * @since 1.8.3 */ var WPFormsElementorModern = window.WPFormsElementorModern || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.8.3 * * @type {object} */ var app = { /** * Start the engine. * * @since 1.8.3 */ init: function() { app.events(); }, /** * Register JS events. * * @since 1.8.3 */ events: function() { // Widget events. $( window ) .on( 'elementor/frontend/init', function( event, id, instance ) { elementor.channels.editor.on( 'elementorWPFormsResetStyleSettings', app.confirmResetStyleSettings ); elementor.channels.editor.on( 'section:activated', app.checkForLeadForms ); elementor.hooks.addAction( 'panel/open_editor/widget/wpforms', app.widgetPanelOpen ); elementorFrontend.hooks.addAction( 'frontend/element_ready/wpforms.default', app.widgetReady ); } ); }, /** * On section change event handler. * * @since 1.8.3 * * @param {string} sectionName The current section name. * @param {object} editor Editor instance. * */ checkForLeadForms( sectionName, editor ) { if ( sectionName !== 'field_styles' || editor.model.attributes.widgetType !== 'wpforms' ) { return; } let $panelContent = editor.$childViewContainer[0]; let widgetView = editor.options.editedElementView.$el[0]; let formId = editor.model.attributes.settings.attributes.form_id; let $form = $( widgetView ).find( `#wpforms-${formId}` ); if ( $form.length === 0 ) { return; } if ( $form.hasClass( 'wpforms-lead-forms-container' ) ) { $( $panelContent ).addClass( 'wpforms-elementor-disabled' ); $( $panelContent ).find( '.wpforms-elementor-lead-forms-notice' ).css( 'display', 'block' ); } }, /** * Initialize widget controls when widget is activated. * * @since 1.8.3 * * @param {object} panel Panel object. * @param {object} model Model object. * @param {object} view View object. */ widgetPanelOpen: function( panel, model, view ) { const settingsModel = model.get( 'settings' ); // Apply settings from the textarea. settingsModel.on( 'change:copyPasteJsonValue', ( changedModel ) => { app.pasteSettings( changedModel, view ); } ); // Change style settings. settingsModel.on( 'change', ( changedModel ) => { app.changeStyleSettings( changedModel, view ); if ( ! changedModel.changed.copyPasteJsonValue && ! changedModel.changed.form_id ) { app.updateCopyPasteContent( changedModel ); } } ); }, /** * Widget ready events. * * @since 1.8.3 * * @param {jQuery} $scope The current element wrapped with jQuery. */ widgetReady: function( $scope ) { let formId = $scope.find( '.wpforms-form' ).data( 'formid' ); app.updateAccentColors( $scope, formId ); app.loadChoicesJS( $scope, formId ); app.initRichTextField( formId ); app.initRepeaterField( formId ); }, /** * Show the reset style settings confirm popup. * * @since 1.8.3 * * @param {object} event Event object. */ confirmResetStyleSettings: function( event ) { elementorCommon.dialogsManager.createWidget( 'confirm', { message: wpformsElementorVars.strings.reset_settings_confirm_text, headerMessage: wpformsElementorVars.strings.reset_style_settings, strings: { confirm: wpformsElementorVars.strings.continue, cancel: wpformsElementorVars.strings.cancel, }, defaultOption: 'cancel', onConfirm: function onConfirm() { app.resetStyleSettings( event ); }, } ).show(); }, /** * Reset style settings button handler. * * @since 1.8.3 * * @param {Object} event Event object. */ resetStyleSettings( event ) { const model = event.options.elementSettingsModel; const container = event.options.container; const widgetContainer = container.view.$el[ 0 ]; const defaults = model.defaults; const styleSettings = app.getStyleAttributesKeys(); const defaultValues = {}; const $widgetStyles = $( widgetContainer ).find( '#wpforms-css-vars-root' ).next( 'style' ); // Prepare default style settings values. styleSettings.forEach( function( element ) { defaultValues[ element ] = defaults[element]; } ); // Reset global style settings. app.resetGlobalStyleSettings( model, container ); // Reset widget settings to default. elementorCommon.api.run( 'document/elements/settings', { container, options: { external: true, }, settings: defaultValues, } ); // Reset CSS vars for widget container and form specific { if ( event.key === 'Enter' || event.key === ' ' ) { onPreviewClicked(); } } } >
      ); }; BackgroundPreview.propTypes = { attributes: PropTypes.object.isRequired, onRemoveBackground: PropTypes.func.isRequired, onPreviewClicked: PropTypes.func.isRequired, }; export default BackgroundPreview; assets/js/integrations/gutenberg/modules/container-styles.js000064400000016750147400353540020501 0ustar00/* global wpforms_gutenberg_form_selector */ /* jshint es3: false, esversion: 6 */ /** * @param strings.border_color * @param strings.border_style * @param strings.border_width * @param strings.container_styles * @param strings.shadow_size */ /** * Gutenberg editor block. * * Container styles panel module. * * @since 1.8.8 */ export default ( ( $ ) => { /** * WP core components. * * @since 1.8.8 */ const { PanelColorSettings } = wp.blockEditor || wp.editor; const { SelectControl, PanelBody, Flex, FlexBlock, __experimentalUnitControl } = wp.components; const { useState } = wp.element; /** * Localized data aliases. * * @since 1.8.8 */ const { strings, defaults, isPro, isLicenseActive } = wpforms_gutenberg_form_selector; /** * Public functions and properties. * * @since 1.8.8 * * @type {Object} */ const app = { /** * Start the engine. * * @since 1.8.8 */ init() { $( app.ready ); }, /** * Document ready. * * @since 1.8.8 */ ready() { app.events(); }, /** * Events. * * @since 1.8.8 */ events() { }, /** * Get block attributes. * * @since 1.8.8 * * @return {Object} Block attributes. */ getBlockAttributes() { return { containerPadding: { type: 'string', default: defaults.containerPadding, }, containerBorderStyle: { type: 'string', default: defaults.containerBorderStyle, }, containerBorderWidth: { type: 'string', default: defaults.containerBorderWidth, }, containerBorderColor: { type: 'string', default: defaults.containerBorderColor, }, containerBorderRadius: { type: 'string', default: defaults.containerBorderRadius, }, containerShadowSize: { type: 'string', default: defaults.containerShadowSize, }, }; }, /** * Get Container Styles panel JSX code. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block handlers. * @param {Object} formSelectorCommon Common form selector functions. * * @return {Object} Field styles JSX code. */ getContainerStyles( props, handlers, formSelectorCommon ) { // eslint-disable-line max-lines-per-function, complexity const [ isNotDisabled, _setIsNotDisabled ] = useState( isPro && isLicenseActive ); // eslint-disable-line react-hooks/rules-of-hooks, no-unused-vars const [ isProEnabled, _setIsProEnabled ] = useState( isPro ); // eslint-disable-line react-hooks/rules-of-hooks, no-unused-vars let cssClass = formSelectorCommon.getPanelClass( props ); if ( ! isNotDisabled ) { cssClass += ' wpforms-gutenberg-panel-disabled'; } return (
      { if ( isNotDisabled ) { return; } event.stopPropagation(); if ( ! isProEnabled ) { return formSelectorCommon.education.showProModal( 'container', strings.container_styles ); } formSelectorCommon.education.showLicenseModal( 'container', strings.container_styles, 'container-styles' ); } } onKeyDown={ ( event ) => { if ( isNotDisabled ) { return; } event.stopPropagation(); if ( ! isProEnabled ) { return formSelectorCommon.education.showProModal( 'container', strings.container_styles ); } formSelectorCommon.education.showLicenseModal( 'container', strings.container_styles, 'container-styles' ); } } > <__experimentalUnitControl label={ strings.padding } tabIndex={ isNotDisabled ? 0 : -1 } value={ props.attributes.containerPadding } min={ 0 } isUnitSelectTabbable={ isNotDisabled } onChange={ ( value ) => handlers.styleAttrChange( 'containerPadding', value ) } /> handlers.styleAttrChange( 'containerBorderStyle', value ) } /> <__experimentalUnitControl label={ strings.border_width } tabIndex={ isNotDisabled ? 0 : -1 } value={ props.attributes.containerBorderStyle === 'none' ? '' : props.attributes.containerBorderWidth } min={ 0 } disabled={ props.attributes.containerBorderStyle === 'none' } isUnitSelectTabbable={ isNotDisabled } onChange={ ( value ) => handlers.styleAttrChange( 'containerBorderWidth', value ) } /> <__experimentalUnitControl label={ strings.border_radius } tabIndex={ isNotDisabled ? 0 : -1 } value={ props.attributes.containerBorderRadius } min={ 0 } isUnitSelectTabbable={ isNotDisabled } onChange={ ( value ) => handlers.styleAttrChange( 'containerBorderRadius', value ) } /> handlers.styleAttrChange( 'containerShadowSize', value ) } />
      { strings.colors }
      { if ( ! isNotDisabled ) { return; } handlers.styleAttrChange( 'containerBorderColor', value ); }, label: strings.border_color, }, ] } />
      ); }, }; return app; } )( jQuery ); assets/js/integrations/gutenberg/modules/background-styles.js000064400000047674147400353540020647 0ustar00/* global wpforms_gutenberg_form_selector */ /* jshint es3: false, esversion: 6 */ import BackgroundPreview from './background-preview.js'; /** * @param strings.background_styles * @param strings.bottom_center * @param strings.bottom_left * @param strings.bottom_right * @param strings.center_center * @param strings.center_left * @param strings.center_right * @param strings.choose_image * @param strings.image_url * @param strings.media_library * @param strings.no_repeat * @param strings.repeat_x * @param strings.repeat_y * @param strings.select_background_image * @param strings.select_image * @param strings.stock_photo * @param strings.tile * @param strings.top_center * @param strings.top_left * @param strings.top_right */ /** * Gutenberg editor block. * * Background styles panel module. * * @since 1.8.8 */ export default ( function() { /** * WP core components. * * @since 1.8.8 */ const { PanelColorSettings } = wp.blockEditor || wp.editor; const { SelectControl, PanelBody, Flex, FlexBlock, __experimentalUnitControl, TextControl, Button } = wp.components; const { useState, useEffect } = wp.element; /** * Localized data aliases. * * @since 1.8.8 */ const { strings, defaults, isPro, isLicenseActive } = wpforms_gutenberg_form_selector; /** * Whether the background is selected. * * @since 1.8.8 * * @type {boolean} */ let backgroundSelected = false; /** * Public functions and properties. * * @since 1.8.8 * * @type {Object} */ const app = { /** * Get block attributes. * * @since 1.8.8 * * @return {Object} Block attributes. */ getBlockAttributes() { return { backgroundImage: { type: 'string', default: defaults.backgroundImage, }, backgroundPosition: { type: 'string', default: defaults.backgroundPosition, }, backgroundRepeat: { type: 'string', default: defaults.backgroundRepeat, }, backgroundSizeMode: { type: 'string', default: defaults.backgroundSizeMode, }, backgroundSize: { type: 'string', default: defaults.backgroundSize, }, backgroundWidth: { type: 'string', default: defaults.backgroundWidth, }, backgroundHeight: { type: 'string', default: defaults.backgroundHeight, }, backgroundColor: { type: 'string', default: defaults.backgroundColor, }, backgroundUrl: { type: 'string', default: defaults.backgroundUrl, }, }; }, /** * Get Background Styles panel JSX code. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block handlers. * @param {Object} formSelectorCommon Block properties. * @param {Object} stockPhotos Stock Photos module. * * @return {Object} Field styles JSX code. */ getBackgroundStyles( props, handlers, formSelectorCommon, stockPhotos ) { // eslint-disable-line max-lines-per-function, complexity const [ showBackgroundPreview, setShowBackgroundPreview ] = useState( app._showBackgroundPreview( props ) ); // eslint-disable-line react-hooks/rules-of-hooks const [ lastBgImage, setLastBgImage ] = useState( '' ); // eslint-disable-line react-hooks/rules-of-hooks const [ isNotDisabled, _setIsNotDisabled ] = useState( isPro && isLicenseActive ); // eslint-disable-line react-hooks/rules-of-hooks, no-unused-vars const [ isProEnabled, _setIsProEnabled ] = useState( isPro ); // eslint-disable-line react-hooks/rules-of-hooks, no-unused-vars const tabIndex = isNotDisabled ? 0 : -1; const cssClass = formSelectorCommon.getPanelClass( props ) + ( isNotDisabled ? '' : ' wpforms-gutenberg-panel-disabled' ); useEffect( () => { // eslint-disable-line react-hooks/rules-of-hooks setShowBackgroundPreview( props.attributes.backgroundImage !== 'none' && props.attributes.backgroundUrl && props.attributes.backgroundUrl !== 'url()' ); }, [ backgroundSelected, props.attributes.backgroundImage, props.attributes.backgroundUrl ] ); // eslint-disable-line react-hooks/exhaustive-deps return (
      { if ( isNotDisabled ) { return; } event.stopPropagation(); if ( ! isProEnabled ) { return formSelectorCommon.education.showProModal( 'background', strings.background_styles ); } formSelectorCommon.education.showLicenseModal( 'background', strings.background_styles, 'background-styles' ); } } onKeyDown={ ( event ) => { if ( isNotDisabled ) { return; } event.stopPropagation(); if ( ! isProEnabled ) { return formSelectorCommon.education.showProModal( 'background', strings.background_styles ); } formSelectorCommon.education.showLicenseModal( 'background', strings.background_styles, 'background-styles' ); } } > app.setContainerBackgroundImageWrapper( props, handlers, value, lastBgImage, setLastBgImage ) } /> { ( props.attributes.backgroundImage !== 'none' || ! isNotDisabled ) && ( handlers.styleAttrChange( 'backgroundPosition', value ) } /> ) } { ( props.attributes.backgroundImage !== 'none' || ! isNotDisabled ) && ( handlers.styleAttrChange( 'backgroundRepeat', value ) } /> app.handleSizeFromDimensions( props, handlers, value ) } /> ) } { ( ( props.attributes.backgroundSizeMode === 'dimensions' && props.attributes.backgroundImage !== 'none' ) || ! isNotDisabled ) && ( <__experimentalUnitControl label={ strings.width } tabIndex={ tabIndex } value={ props.attributes.backgroundWidth } isUnitSelectTabbable={ isNotDisabled } onChange={ ( value ) => app.handleSizeFromWidth( props, handlers, value ) } /> <__experimentalUnitControl label={ strings.height } tabIndex={ tabIndex } value={ props.attributes.backgroundHeight } isUnitSelectTabbable={ isNotDisabled } onChange={ ( value ) => app.handleSizeFromHeight( props, handlers, value ) } /> ) } { ( ! showBackgroundPreview || props.attributes.backgroundUrl === 'url()' ) && ( ( props.attributes.backgroundImage === 'library' && ( ) ) || ( props.attributes.backgroundImage === 'stock' && ( ) ) ) } { ( ( showBackgroundPreview && props.attributes.backgroundImage !== 'none' ) || props.attributes.backgroundUrl !== 'url()' ) && (
      { app.onRemoveBackground( setShowBackgroundPreview, handlers, setLastBgImage ); } } onPreviewClicked={ () => { if ( props.attributes.backgroundImage === 'library' ) { return app.openMediaLibrary( props, handlers, setShowBackgroundPreview ); } return stockPhotos?.openModal( props, handlers, 'bg-styles', setShowBackgroundPreview ); } } />
      handlers.styleAttrChange( 'backgroundUrl', value ) } onLoad={ ( value ) => props.attributes.backgroundImage !== 'none' && handlers.styleAttrChange( 'backgroundUrl', value ) } />
      ) }
      { strings.colors }
      { if ( ! isNotDisabled ) { return; } handlers.styleAttrChange( 'backgroundColor', value ); }, label: strings.background, }, ] } />
      ); }, /** * Open media library modal and handle image selection. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block handlers. * @param {Function} setShowBackgroundPreview Set show background preview. */ openMediaLibrary( props, handlers, setShowBackgroundPreview ) { const frame = wp.media( { title: strings.select_background_image, multiple: false, library: { type: 'image', }, button: { text: strings.select_image, }, } ); frame.on( 'select', () => { const attachment = frame.state().get( 'selection' ).first().toJSON(); const setAttr = {}; const attribute = 'backgroundUrl'; if ( attachment.url ) { const value = `url(${ attachment.url })`; setAttr[ attribute ] = value; props.setAttributes( setAttr ); handlers.styleAttrChange( 'backgroundUrl', value ); setShowBackgroundPreview( true ); } } ); frame.open(); }, /** * Set container background image. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setContainerBackgroundImage( container, value ) { if ( value === 'none' ) { container.style.setProperty( `--wpforms-background-url`, 'url()' ); } return true; }, /** * Set container background image. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block event handlers. * @param {string} value Value. * @param {string} lastBgImage Last background image. * @param {Function} setLastBgImage Set last background image. */ setContainerBackgroundImageWrapper( props, handlers, value, lastBgImage, setLastBgImage ) { if ( value === 'none' ) { setLastBgImage( props.attributes.backgroundUrl ); props.attributes.backgroundUrl = 'url()'; handlers.styleAttrChange( 'backgroundUrl', 'url()' ); } else if ( lastBgImage ) { props.attributes.backgroundUrl = lastBgImage; handlers.styleAttrChange( 'backgroundUrl', lastBgImage ); } handlers.styleAttrChange( 'backgroundImage', value ); }, /** * Set container background position. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setContainerBackgroundPosition( container, value ) { container.style.setProperty( `--wpforms-background-position`, value ); return true; }, /** * Set container background repeat. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setContainerBackgroundRepeat( container, value ) { container.style.setProperty( `--wpforms-background-repeat`, value ); return true; }, /** * Handle real size from dimensions. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block handlers. * @param {string} value Value. */ handleSizeFromDimensions( props, handlers, value ) { if ( value === 'cover' ) { props.attributes.backgroundSize = 'cover'; handlers.styleAttrChange( 'backgroundWidth', props.attributes.backgroundWidth ); handlers.styleAttrChange( 'backgroundHeight', props.attributes.backgroundHeight ); handlers.styleAttrChange( 'backgroundSizeMode', 'cover' ); handlers.styleAttrChange( 'backgroundSize', 'cover' ); } else { props.attributes.backgroundSize = 'dimensions'; handlers.styleAttrChange( 'backgroundSizeMode', 'dimensions' ); handlers.styleAttrChange( 'backgroundSize', props.attributes.backgroundWidth + ' ' + props.attributes.backgroundHeight ); } }, /** * Handle real size from width. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block handlers. * @param {string} value Value. */ handleSizeFromWidth( props, handlers, value ) { props.attributes.backgroundSize = value + ' ' + props.attributes.backgroundHeight; props.attributes.backgroundWidth = value; handlers.styleAttrChange( 'backgroundSize', value + ' ' + props.attributes.backgroundHeight ); handlers.styleAttrChange( 'backgroundWidth', value ); }, /** * Handle real size from height. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block handlers. * @param {string} value Value. */ handleSizeFromHeight( props, handlers, value ) { props.attributes.backgroundSize = props.attributes.backgroundWidth + ' ' + value; props.attributes.backgroundHeight = value; handlers.styleAttrChange( 'backgroundSize', props.attributes.backgroundWidth + ' ' + value ); handlers.styleAttrChange( 'backgroundHeight', value ); }, /** * Set container background width. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setContainerBackgroundWidth( container, value ) { container.style.setProperty( `--wpforms-background-width`, value ); return true; }, /** * Set container background height. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setContainerBackgroundHeight( container, value ) { container.style.setProperty( `--wpforms-background-height`, value ); return true; }, /** * Set container background url. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setBackgroundUrl( container, value ) { container.style.setProperty( `--wpforms-background-url`, value ); return true; }, /** * Set container background color. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setBackgroundColor( container, value ) { container.style.setProperty( `--wpforms-background-color`, value ); return true; }, _showBackgroundPreview( props ) { return props.attributes.backgroundImage !== 'none' && props.attributes.backgroundUrl && props.attributes.backgroundUrl !== 'url()'; }, /** * Remove background image. * * @since 1.8.8 * * @param {Function} setShowBackgroundPreview Set show background preview. * @param {Object} handlers Block handlers. * @param {Function} setLastBgImage Set last background image. */ onRemoveBackground( setShowBackgroundPreview, handlers, setLastBgImage ) { setShowBackgroundPreview( false ); handlers.styleAttrChange( 'backgroundUrl', 'url()' ); setLastBgImage( '' ); }, /** * Handle theme change. * * @since 1.8.8 * * @param {Object} props Block properties. */ onSetTheme( props ) { backgroundSelected = props.attributes.backgroundImage !== 'url()'; }, }; return app; }() ); assets/js/integrations/gutenberg/modules/advanced-settings.js000064400000007147147400353540020601 0ustar00/* global wpforms_gutenberg_form_selector */ /* jshint es3: false, esversion: 6 */ /** * @param strings.custom_css * @param strings.custom_css_notice * @param strings.copy_paste_settings * @param strings.copy_paste_notice */ /** * Gutenberg editor block. * * Advanced Settings module. * * @since 1.8.8 */ export default ( function( $ ) { /** * WP core components. * * @since 1.8.8 */ const { addFilter } = wp.hooks; const { createHigherOrderComponent } = wp.compose; const { Fragment } = wp.element; const { InspectorAdvancedControls } = wp.blockEditor || wp.editor; const { TextareaControl } = wp.components; /** * Localized data aliases. * * @since 1.8.8 */ const { strings } = wpforms_gutenberg_form_selector; /** * Public functions and properties. * * @since 1.8.8 * * @type {Object} */ const app = { /** * Initialize module. * * @since 1.8.8 * * @param {Object} commonModule Common module. */ init( commonModule ) { app.common = commonModule; app.hooks(); app.events(); }, /** * Hooks. * * @since 1.8.8 */ hooks() { addFilter( 'editor.BlockEdit', 'editorskit/custom-advanced-control', app.withAdvancedControls ); }, /** * Events. * * @since 1.8.8 */ events() { $( document ) .on( 'focus click', 'textarea', app.copyPasteFocus ); }, /** * Copy / Paste Style Settings textarea focus event. * * @since 1.8.8 */ copyPasteFocus() { const $input = $( this ); if ( $input.siblings( 'label' ).text() === strings.copy_paste_settings ) { // Select all text, so it's easier to copy and paste value. $input.select(); } }, /** * Get fields. * * @since 1.8.8 * * @param {Object} props Block properties. * * @return {Object} Inspector advanced controls JSX code. */ getFields( props ) { // Proceed only for WPForms block. if ( props?.name !== 'wpforms/form-selector' ) { return null; } // Common event handlers. const handlers = app.common.getSettingsFieldsHandlers( props ); return (
      handlers.attrChange( 'customCss', value ) } />
      handlers.pasteSettings( value ) } />
      ); }, /** * Add controls on Advanced Settings Panel. * * @param {Function} BlockEdit Block edit component. * * @return {Function} BlockEdit Modified block edit component. */ withAdvancedControls: createHigherOrderComponent( ( BlockEdit ) => { return ( props ) => { return ( { app.getFields( props ) } ); }; }, 'withAdvancedControls' ), }; // Provide access to public functions/properties. return app; }( jQuery ) ); assets/js/integrations/gutenberg/formselector-legacy.es5.min.js000064400000017671147400353540020754 0ustar00!function o(n,s,l){function a(r,e){if(!s[r]){if(!n[r]){var t="function"==typeof require&&require;if(!e&&t)return t(r,!0);if(c)return c(r,!0);throw new Error("Cannot find module '"+r+"'")}e=s[r]={exports:{}};n[r][0].call(e.exports,function(e){var t=n[r][1][e];return a(t||e)},e,e.exports,o,n,s,l)}return s[r].exports}for(var c="function"==typeof require&&require,e=0;e"number"==typeof n(t).data("formid")).each(l.setupStripeForm)}),n(e).on("wpformsBeforePageChange",l.pageChange)},setupStripeForm:function(){var e=n(this);l.updateFormSubmitHandler(e),e.on("wpformsAjaxSubmitActionRequired",l.handleCardActionCallback),l.updateCardElementStylesModern(e)},setupCardElement:function(r,i){const s=r.find(".wpforms-stripe-credit-card-hidden-input");if(s&&0!==s.length){var t=s.data("stripe-element");if(!t){let e=wpforms_stripe.data.element_style;n.isEmptyObject(e)&&(e=l.getElementStyleDefault(s));var a={classes:wpforms_stripe.data.element_classes,hidePostalCode:!0,style:e};(t=l.stripe.elements().create("card",a)).mount(r.find(".wpforms-field-stripe-credit-card-cardnumber").get(0)),t.on("change",function(t){if(t.error){let e=t.error.message;"incomplete_number"!==t.error.code&&"invalid_number"!==t.error.code||(e=wpforms_settings.val_creditcard),l.displayStripeError(r,e)}else i.hideThese(i.errorsFor(s.get(0)))}),s.data("stripe-element",t)}return t}},getElementStyleDefault:function(t){if(t&&0!==t.length){var r=t.css("color"),i=t.css("font-size"),i={base:{fontSize:i,color:r,"::placeholder":{color:r,fontSize:i}},invalid:{color:r}};let e=t.css("font-family");r=/[“”<>!@$%^&*=~`|{}[\]]/;return!r.test(e)&&-1===e.indexOf("MS Shell Dlg")||(e=n("p").css("font-family")),r.test(e)||(i.base.fontFamily=e,i.base["::placeholder"].fontFamily=e),i}},updateFormSubmitHandler:function(a){let e=a.validate(),n=e.settings.submitHandler,o=l.setupCardElement(a,e),d=a.find(".wpforms-field-stripe-credit-card-cardnumber");e.settings.submitHandler=function(){let e=a.validate().form(),t=d.hasClass(wpforms_stripe.data.element_classes.empty),r=d.data("required"),i=d.closest(".wpforms-field-stripe-credit-card").hasClass("wpforms-conditional-hide"),s=i?!1:r||!t&&!r;if(e&&s)a.find(".wpforms-submit").prop("disabled",!0),l.createPaymentMethod(a,o,r,n);else{if(e)return a.find(".wpforms-submit").prop("disabled",!1),n(a);a.find(".wpforms-submit").prop("disabled",!1),a.validate().cancelSubmit=!0}}},createPaymentMethod:function(t,e,r,i){l.stripe.createPaymentMethod("card",e,{billing_details:{name:t.find(".wpforms-field-stripe-credit-card-cardname").val()}}).then(function(e){e.error&&r?(t.find(".wpforms-submit").prop("disabled",!1),l.displayStripeError(t,e.error.message),t.validate().cancelSubmit=!0):(e.error||(t.find(".wpforms-stripe-payment-method-id").remove(),e.paymentMethod&&t.append('')),i(t))})},handleCardActionCallback:function(e,t){const r=n(this);t.success&&t.data.action_required&&l.stripe.handleCardPayment(t.data.payment_intent_client_secret).then(function(e){l.handleCardPaymentCallback(r,e)})},handleCardPaymentCallback:function(e,t){t.error?(l.formAjaxUnblock(e),e.find(".wpforms-field-stripe-credit-card-cardnumber").addClass(wpforms_stripe.data.element_classes.invalid),l.displayStripeError(e,t.error.message)):t.paymentIntent&&"succeeded"===t.paymentIntent.status?(e.find(".wpforms-stripe-payment-method-id").remove(),e.find(".wpforms-stripe-payment-intent-id").remove(),e.append(''),wpforms.formSubmitAjax(e)):l.formAjaxUnblock(e)},displayStripeError:function(e,t){var r=e.find(".wpforms-stripe-credit-card-hidden-input").attr("name"),i=e.find(".wpforms-field-stripe-credit-card-cardnumber"),s={};s[r]=t,wpforms.displayFormAjaxFieldErrors(e,s),!i.is(":visible")&&0'),e.append(''),wpforms.formSubmitAjax(e)):m.formAjaxUnblock(e))},setupPaymentElement(e){var o=e.data("formid");d.isEmptyObject(m.forms)&&m.initializeFormDefaultObject(o),m.forms[o].paymentElement||(m.forms[o].elements=m.stripe.elements({currency:wpforms.getCurrency().code.toLowerCase(),mode:"payment",amount:7777777,loader:"always",locale:wpforms_stripe.data.element_locale,appearance:m.getElementAppearanceOptions(e)}),m.initializePaymentElement(e),m.linkEmailMappedFieldTriggers(e),wpforms.amountTotalCalc(e),m.updatePaymentElementStylesModern(e),WPFormsUtils.triggerEvent(d(r),"wpformsStripePaymentElementInitialized",[e,m.forms]))},processConditionalsField(e,o,r,t){var n=d("#wpforms-form-"+e),i=n.find(".wpforms-field-stripe-credit-card"),r=r&&"hide"===t||!r&&"hide"!==t;!i.length||i.data("field-id").toString()!==o||m.forms[e].paymentElement||r||m.setupPaymentElement(n)},getElementAppearanceOptions(e){var o,r,t=m.getCustomAppearanceOptions();return d.isEmptyObject(t)?(r=e.find(".wpforms-stripe-credit-card-hidden-input"),o=!(e=e.find(".wpforms-field-stripe-credit-card .wpforms-field-row")).hasClass("wpforms-sublabel-hide"),r={borderColor:m.getCssPropertyValue(r,"--field-border")||m.getCssPropertyValue(r,"border-color"),borderRadius:m.getCssPropertyValue(r,"border-radius"),fontSize:m.getCssPropertyValue(r,"font-size"),colorPrimary:m.getCssPropertyValue(r,"--primary-color")||m.getCssPropertyValue(r,"color"),colorText:m.getCssPropertyValue(r,"--secondary-color")||m.getCssPropertyValue(r,"color"),colorTextPlaceholder:m.getCssPropertyValue(r,"--secondary-color-50")||WPFormsUtils.cssColorsUtils.getColorWithOpacity(m.getCssPropertyValue(r,"color"),"0.5"),colorBackground:m.getCssPropertyValue(r,"--background-color")||m.getCssPropertyValue(r,"background-color"),fontFamily:m.getCssPropertyValue(r,"font-family"),focusColor:m.getCssPropertyValue(r,"--accent-color")||m.getCssPropertyValue(r,"color"),errorColor:"#990000"},i.WPForms&&WPForms.FrontendModern&&(r.colorPrimary=WPForms.FrontendModern.getSolidColor(r.colorPrimary)),{theme:"none",labels:e.data("sublabel-position"),sublabelHide:o,variables:{colorPrimary:r.colorPrimary,colorBackground:r.colorBackground,colorText:r.colorText,colorDanger:r.errorColor,fontFamily:r.fontFamily,spacingUnit:"4px",spacingGridRow:"8px",fontSizeSm:"13px",fontWeightNormal:"400",borderRadius:r.borderRadius,colorTextPlaceholder:r.colorTextPlaceholder,colorIcon:r.colorText,focusColor:r.focusColor,borderColorWithOpacity:WPFormsUtils.cssColorsUtils.getColorWithOpacity(r.colorPrimary,"0.1")},rules:{".Input--invalid":{color:r.colorText,borderColor:"#cc0000"},".Input":{border:"none",borderRadius:r.borderRadius,boxShadow:"0 0 0 1px "+r.borderColor,fontSize:r.fontSize,padding:"12px 14px",lineHeight:parseInt(r.fontSize,10)+5+"px",transition:"none",color:r.colorText,backgroundColor:r.colorBackground},".Input:focus, .Input:hover":{border:"none",boxShadow:"0 0 0 2px "+r.focusColor,outline:"none"},".Label":{fontFamily:r.fontFamily,lineHeight:o?"1.3":"0",opacity:Number(o),color:r.colorPrimary},".CheckboxInput, .CodeInput, .PickerItem":{border:"1px solid "+r.borderColor},".Tab, .Block":{border:"1px solid "+r.borderColor,borderRadius:r.borderRadius,color:r.colorText},".TabLabel, .TabIcon":{color:r.colorText},".Tab--selected":{borderColor:"#999999",color:r.colorText},".Action":{marginLeft:"6px"},".Action, .MenuAction":{border:"none",backgroundColor:"transparent"},".Action:hover, .MenuAction:hover":{border:"none",backgroundColor:"transparent"},".Error, .RedirectText":{color:r.errorColor},".TabIcon--selected":{fill:r.colorText}}}):t},getCustomAppearanceOptions(){return"object"==typeof i.wpformsStripePaymentElementAppearance?i.wpformsStripePaymentElementAppearance:d.isEmptyObject(wpforms_stripe.data.element_appearance)?{}:wpforms_stripe.data.element_appearance},getCssPropertyValue(e,o){try{return e.css(o)}catch(e){return""}},initializePaymentElement(o,e=""){const r=o.find(".wpforms-field-stripe-credit-card .wpforms-field-row"),t=o.data("formid");m.forms[t].paymentElement&&m.forms[t].paymentElement.destroy(),m.forms[t].paymentElement=m.forms[t].elements.create("payment",{defaultValues:{billingDetails:{email:e}}}),m.mountPaymentElement(o),m.forms[t].paymentElement.on("change",function(e){m.forms[t].paymentType=e.value.type,r.data("link-email")||("google_pay"===e.value.type||"apple_pay"===e.value.type?(m.forms[t].linkElement.destroy(),m.forms[t].linkDestroyed=!0):m.forms[t].linkDestroyed&&(m.initializeLinkAuthenticationElement(o),m.forms[t].linkDestroyed=!1)),r.data("type",e.value.type),e.empty?(r.data("completed",!1),r.find("label.wpforms-error").toggle("card"===e.value.type)):(m.forms[t].elementsModified=!0,e.complete?(r.data("completed",!0),m.hideStripeFieldError(o)):r.data("completed",!1))}),m.forms[t].paymentElement.on("loaderror",function(e){m.displayStripeLoadError(o,e.error.message)})},mountPaymentElement(e){var e=e.data("formid"),o="#wpforms-field-stripe-payment-element-"+e;m.forms[e].paymentElement.mount(o)},linkEmailMappedFieldTriggers(e){const o=e.find(".wpforms-field-stripe-credit-card .wpforms-field-row");var r=m.getMappedLinkEmailField(e);if(r){const t=e.data("formid");r.on("change",function(){m.forms[t].linkEmail=d(this).val(),o.data("completed")||m.initializePaymentElement(e,d(this).val())})}else o.data("linkCompleted",!1),m.initializeLinkAuthenticationElement(e)},getMappedLinkEmailField(e){var o=e.find(".wpforms-field-stripe-credit-card .wpforms-field-row").data("link-email");return o?(e=e.data("formid"),d(`#wpforms-${e}-field_`+o)):null},initializeLinkAuthenticationElement(o){const r=o.find(".wpforms-field-stripe-credit-card .wpforms-field-row"),t=o.data("formid");m.forms[t].linkElement=m.forms[t].elements.create("linkAuthentication"),m.mountLinkElement(o),m.forms[t].linkElement.on("change",function(e){e.empty||(m.forms[t].elementsModified=!0,e.complete?(void 0!==e.value.email&&(m.forms[t].linkEmail=e.value.email),r.data("linkCompleted",!0),m.hideStripeFieldError(o)):r.data("linkCompleted",!1))}),m.forms[t].linkElement.on("loaderror",function(e){m.displayStripeLoadError(o,e.error.message)})},mountLinkElement(e){var e=e.data("formid"),o="#wpforms-field-stripe-link-element-"+e;m.forms[e].linkElement.mount(o)},submitHandler(e){var e=d(e),o=e.find(".wpforms-field-stripe-credit-card"),r=o.find(".wpforms-field-row"),t=e.validate().form(),n=e.data("formid"),i=r.data("required"),a=-1!==["google_pay","apple_pay"].indexOf(m.forms[n].paymentType),n=!r.data("link-email")&&m.forms[n].elementsModified||r.data("completed")||a;let l=!1;o.hasClass("wpforms-conditional-hide")||(l=i||n&&!i),t&&l?(e.find(".wpforms-submit").prop("disabled",!0),e.find(".wpforms-submit-spinner").show(),m.createPaymentMethod(e)):t?s(e):(e.find(".wpforms-submit").prop("disabled",!1),e.validate().cancelSubmit=!0)},updateElementsTotalAmount(e,o,r){var t;r&&(o=o.data("formid"),m.forms[o])&&m.forms[o].elements&&(t=wpforms.getCurrency(),m.forms[o].total=r,m.forms[o].elements.update({amount:parseInt(wpforms.numberFormat(r,t.decimals,"",""),10)}))},async createPaymentMethod(r){const t=r.data("formid");m.forms[t].total?await m.stripe.createPaymentMethod({elements:m.forms[t].elements}).then(function(e){var o;e.error?(o=["incomplete_email","email_invalid","incomplete_number","invalid_number","incomplete_expiry","invalid_expiry_year_past","invalid_expiry_year","incomplete_cvc","incomplete_name","incomplete_phone_number","empty_phone_number","invalid_postal_code"].includes(e.error.code)?"":e.error.message,m.displayStripeFieldError(r,o)):(m.forms[t].paymentMethodId=e.paymentMethod.id,r.append(''),s(r))}):s(r)},formAjaxUnblock(e){var o=e.find(".wpforms-submit"),r=o.data("submit-text");r&&o.text(r),o.prop("disabled",!1),o.removeClass("wpforms-disabled"),e.closest(".wpforms-container").css("opacity",""),e.find(".wpforms-submit-spinner").hide()},displayStripeError(e,o){wpforms.clearFormAjaxGeneralErrors(e),wpforms.displayFormAjaxErrors(e,o),m.formAjaxUnblock(e)},displayStripeFieldError(e,o){var r=e.find(".wpforms-stripe-credit-card-hidden-input").attr("name"),t=e.find(".wpforms-field-stripe-credit-card"),n={};o&&(n[r]=o),wpforms.displayFormAjaxFieldErrors(e,n),!t.is(":visible")&&0 "+o,m.displayStripeError(e,o)},pageChange(e,o,r,t){var n=r.find(".wpforms-field-stripe-credit-card .wpforms-field-row"),i=r.data("formid");n.length&&-1!==["card","link"].indexOf(m.forms[i].paymentType)&&(m.forms[i].elementsModified||"card"!==m.forms[i].paymentType||(m.forms[i].paymentElement.unmount(),m.mountPaymentElement(r),n.data("link-email"))||(m.forms[i].linkElement.unmount(),m.mountLinkElement(r)),!n.is(":visible")||!n.data("required")&&!m.forms[i].elementsModified||m.forms[i].lockedPageToSwitch&&m.forms[i].lockedPageToSwitch!==o||"prev"===t||(t=void 0===n.data("linkCompleted")||n.data("linkCompleted"),n.data("completed")&&t?m.hideStripeFieldError(r):(m.forms[i].lockedPageToSwitch=o,m.displayStripeFieldError(r,wpforms_stripe.i18n.empty_details),e.preventDefault())))},convFormsFieldActivationAfter(e,o){m.setupPaymentElement(o.$el.closest("form"))},getCssVar(e,o){return console.warn('WARNING! Function "WPFormsStripePaymentElement.getCssVar()" has been deprecated, please use the "WPForms.FrontendModern.getCssVar()" function instead!'),WPForms?.FrontendModern?.getCssVar()},updatePaymentElementStylesModern(e){var o;d.isEmptyObject(m.getCustomAppearanceOptions())&&i.WPForms&&WPForms.FrontendModern&&e&&0!==e.length&&!e.closest(".wpforms-container").hasClass("wpforms-lead-forms-container")&&(o=e.data("formid"),m.forms[o])&&(o=m.forms[o].elements,e=WPForms.FrontendModern.getCssVars(e),m.updateFormElementsAppearance(o,e))},updateFormElementsAppearance(e,o){var r,t;e&&e._commonOptions&&(r=e._commonOptions.appearance,o["field-size-padding-v"]=(parseInt(o["field-size-input-height"],10)-parseInt(o["field-size-font-size"],10)-6)/2+"px",r.variables.spacingGridRow=o["field-size-input-spacing"],r.variables.spacingGridColumn="20px",r.variables.spacingTab="10px",r.variables.colorText=WPForms.FrontendModern.getSolidColor(o["field-text-color"]),t=WPFormsUtils.cssColorsUtils.isTransparentColor(o["field-background-color"])?o["field-menu-color"]:o["field-background-color"],t=WPForms.FrontendModern.getSolidColor(t),r.rules={".Input":{border:o["field-border-size"]+" "+o["field-border-style"]+" "+o["field-border-color"],borderRadius:o["field-border-radius"],padding:o["field-size-padding-v"]+" "+o["field-size-padding-h"],fontSize:o["field-size-font-size"],lineHeight:o["field-size-font-size"],backgroundColor:o["field-background-color"],boxShadow:"none",outline:"none"},".Input:focus":{backgroundColor:t,borderColor:o["button-background-color"],borderStyle:"solid",boxShadow:"0 0 0 1px "+o["button-background-color"],outline:"none"},".Input--invalid":{borderColor:o["label-error-color"],boxShadow:"none",color:r.variables.colorText,outline:"none"},".Input--invalid:focus":{borderColor:o["label-error-color"],boxShadow:"0 0 0 1px "+o["label-error-color"],outline:"none"},".Input::placeholder":{color:WPForms.FrontendModern.getColorWithOpacity(o["field-text-color"],"0.5"),fontSize:o["field-size-font-size"]},".CheckboxInput":{border:"1px solid "+o["field-border-color"],backgroundColor:o["field-background-color"]},".CheckboxInput--checked":{borderColor:o["button-background-color"],backgroundColor:o["button-background-color"]},".CodeInput":{border:"1px solid "+o["field-text-color"],backgroundColor:t},".CodeInput:focus":{borderWidth:"2px",boxShadow:"0 0 0 1px "+o["button-background-color"],outline:"none"},".CodeInput:disabled":{borderColor:WPForms.FrontendModern.getColorWithOpacity(o["field-border-color"],"0.5"),color:WPForms.FrontendModern.getColorWithOpacity(o["field-text-color"],"0.5")},".Label":{fontSize:o["label-size-sublabel-font-size"],margin:`0 0 ${o["field-size-sublabel-spacing"]} 0`,color:o["label-sublabel-color"],opacity:Number(Boolean(r?.sublabelHide)),lineHeight:r?.sublabelHide?"inherit":"0"},".Error":{fontSize:o["label-size-sublabel-font-size"],margin:o["field-size-sublabel-spacing"]+" 0 0 0",color:o["label-error-color"]},".Tab":{border:"1px solid "+WPForms.FrontendModern.getColorWithOpacity(o["field-border-color"],"0.5"),borderRadius:o["field-border-radius"],backgroundColor:"transparent",boxShadow:"none",marginTop:"0"},".Tab:focus":{border:"1px solid "+WPForms.FrontendModern.getColorWithOpacity(o["button-background-color"],"0.5"),boxShadow:"0 0 0 3px "+WPForms.FrontendModern.getColorWithOpacity(o["button-background-color"],"0.25"),outline:"none"},".Tab:hover":{border:"1px solid "+o["field-border-color"]},".Tab--selected":{borderColor:o["button-background-color"],boxShadow:"0 0 0 1px "+o["button-background-color"],backgroundColor:o["field-background-color"]},".Tab--selected:hover":{borderColor:o["button-background-color"]},".Tab--selected:focus":{borderColor:o["button-background-color"],boxShadow:"0 0 0 1px "+o["button-background-color"]},".TabLabel":{color:o["field-text-color"]},".TabIcon":{fill:WPForms.FrontendModern.getColorWithOpacity(o["field-text-color"],"0.75")},".TabIcon--selected":{fill:o["field-text-color"]},".TabIcon:hover":{color:o["field-text-color"],fill:o["field-text-color"]},".TabLabel--selected":{color:o["button-background-color"]},".Block":{border:"1px solid "+WPForms.FrontendModern.getColorWithOpacity(o["field-border-color"],"0.5"),backgroundColor:t,borderRadius:o["field-border-radius"],boxShadow:"none"},".AccordionItem":{backgroundColor:t,paddingLeft:0,paddingRight:0,color:o["field-text-color"]},".PickerItem,":{backgroundColor:t}},e.update({appearance:r}))}};return m}(document,window,jQuery);WPFormsStripePaymentElement.init();assets/js/integrations/stripe/wpforms-stripe-elements.js000064400000030155147400353540017660 0ustar00/* global Stripe, wpforms, wpforms_settings, wpforms_stripe, WPForms */ 'use strict'; /** * WPForms Stripe Elements function. * * @since 1.8.2 */ var WPFormsStripeElements = window.WPFormsStripeElements || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.8.2 * * @type {object} */ const app = { stripe: null, /** * Number of page locked to switch. * * @since 1.8.2 * * @type {int} */ lockedPageToSwitch: 0, /** * Start the engine. * * @since 1.8.2 */ init: function() { app.stripe = Stripe( // eslint-disable-line new-cap wpforms_stripe.publishable_key, { 'locale': wpforms_stripe.data.element_locale } ); $( document ).on( 'wpformsReady', function() { $( '.wpforms-stripe form' ) .filter( ( _, form ) => typeof $( form ).data( 'formid' ) === 'number' ) // filter out forms which are locked (formid changed to 'locked-...'). .each( app.setupStripeForm ); } ); $( document ).on( 'wpformsBeforePageChange', app.pageChange ); }, /** * Setup and configure a Stripe form. * * @since 1.8.2 */ setupStripeForm: function() { let $form = $( this ); app.updateFormSubmitHandler( $form ); $form.on( 'wpformsAjaxSubmitActionRequired', app.handleCardActionCallback ); app.updateCardElementStylesModern( $form ); }, /** * Setup, mount and configure Stripe Card Element. * * @since 1.8.2 * * @param {jQuery} $form Form element. * @param {object} formValidator jQuery Validator object. * * @returns {card|void} Stripe Card element. */ setupCardElement: function( $form, formValidator ) { const $hiddenInput = $form.find( '.wpforms-stripe-credit-card-hidden-input' ); if ( ! $hiddenInput || $hiddenInput.length === 0 ) { return; } let cardElement = $hiddenInput.data( 'stripe-element' ); if ( cardElement ) { return cardElement; } let style = wpforms_stripe.data.element_style; if ( $.isEmptyObject( style ) ) { style = app.getElementStyleDefault( $hiddenInput ); } let cardSettings = { classes : wpforms_stripe.data.element_classes, hidePostalCode: true, style : style, }; cardElement = app.stripe.elements().create( 'card', cardSettings ); cardElement.mount( $form.find( '.wpforms-field-stripe-credit-card-cardnumber' ).get( 0 ) ); cardElement.on( 'change', function( e ) { if ( ! e.error ) { formValidator.hideThese( formValidator.errorsFor( $hiddenInput.get( 0 ) ) ); return; } let message = e.error.message; if ( 'incomplete_number' === e.error.code || 'invalid_number' === e.error.code ) { message = wpforms_settings.val_creditcard; } app.displayStripeError( $form, message ); } ); $hiddenInput.data( 'stripe-element', cardElement ); return cardElement; }, /** * Get default styles for card settings. * * @since 1.8.2 * * @param {jQuery} $hiddenInput Input element. * * @returns {object|void} Base styles. */ getElementStyleDefault: function( $hiddenInput ) { if ( ! $hiddenInput || $hiddenInput.length === 0 ) { return; } const textColor = $hiddenInput.css( 'color' ); const fontSize = $hiddenInput.css( 'font-size' ); const style = { base: { fontSize, color: textColor, '::placeholder': { color: textColor, fontSize, }, }, invalid: { color: textColor, }, }; let fontFamily = $hiddenInput.css( 'font-family' ); const regExp = /[“”<>!@$%^&*=~`|{}[\]]/; if ( regExp.test( fontFamily ) || fontFamily.indexOf( 'MS Shell Dlg' ) !== -1 ) { fontFamily = $( 'p' ).css( 'font-family' ); } if ( ! regExp.test( fontFamily ) ) { style.base.fontFamily = fontFamily; style.base[ '::placeholder' ].fontFamily = fontFamily; } return style; }, /** * Update submitHandler for the forms containing Stripe. * * @since 1.8.2 * * @param {jQuery} $form Form element. */ updateFormSubmitHandler: function( $form ) { let formValidator = $form.validate(), formSubmitHandler = formValidator.settings.submitHandler, cardElement = app.setupCardElement( $form, formValidator ), $stripeDiv = $form.find( '.wpforms-field-stripe-credit-card-cardnumber' ); // Replace the default submit handler. formValidator.settings.submitHandler = function() { let valid = $form.validate().form(), ccEmpty = $stripeDiv.hasClass( wpforms_stripe.data.element_classes.empty ), ccRequired = $stripeDiv.data( 'required' ), condHidden = $stripeDiv.closest( '.wpforms-field-stripe-credit-card' ).hasClass( 'wpforms-conditional-hide' ), processCard = false; if ( ! condHidden ) { processCard = ccRequired || ( ! ccEmpty && ! ccRequired ); } if ( valid && processCard ) { $form.find( '.wpforms-submit' ).prop( 'disabled', true ); app.createPaymentMethod( $form, cardElement, ccRequired, formSubmitHandler ); } else if ( valid ) { // Form is valid, however no credit card to process. $form.find( '.wpforms-submit' ).prop( 'disabled', false ); return formSubmitHandler( $form ); } else { $form.find( '.wpforms-submit' ).prop( 'disabled', false ); $form.validate().cancelSubmit = true; } }; }, /** * Create a PaymentMethod out of card details provided. * * @since 1.8.2 * * @param {jQuery} $form Form element. * @param {card} cardElement Stripe Card element. * @param {boolean} ccRequired Card field is required. * @param {Function} formSubmitHandler jQuery Validation SubmitHandler function. */ createPaymentMethod: function( $form, cardElement, ccRequired, formSubmitHandler ) { app.stripe.createPaymentMethod( 'card', cardElement, { billing_details: { name: $form.find( '.wpforms-field-stripe-credit-card-cardname' ).val(), }, } ).then( function( result ) { if ( result.error && ccRequired ) { $form.find( '.wpforms-submit' ).prop( 'disabled', false ); app.displayStripeError( $form, result.error.message ); $form.validate().cancelSubmit = true; return; } if ( ! result.error ) { $form.find( '.wpforms-stripe-payment-method-id' ).remove(); if ( result.paymentMethod ) { $form.append( '' ); } } formSubmitHandler( $form ); } ); }, /** * Handle 'action_required' server response. * * @param {object} e Event object. * @param {object} json Data returned form a server. * * @since 1.8.2 */ handleCardActionCallback: function( e, json ) { const $form = $( this ); if ( json.success && json.data.action_required ) { app.stripe.handleCardPayment( json.data.payment_intent_client_secret ).then( function( result ) { app.handleCardPaymentCallback( $form, result ); } ); } }, /** * Callback for Stripe 'handleCardPayment' method. * * @param {jQuery} $form Form element. * @param {object} result Data returned by 'handleCardPayment'. * * @since 1.8.2 */ handleCardPaymentCallback: function( $form, result ) { if ( result.error ) { app.formAjaxUnblock( $form ); $form.find( '.wpforms-field-stripe-credit-card-cardnumber' ).addClass( wpforms_stripe.data.element_classes.invalid ); app.displayStripeError( $form, result.error.message ); } else if ( result.paymentIntent && 'succeeded' === result.paymentIntent.status ) { $form.find( '.wpforms-stripe-payment-method-id' ).remove(); $form.find( '.wpforms-stripe-payment-intent-id' ).remove(); $form.append( '' ); wpforms.formSubmitAjax( $form ); } else { app.formAjaxUnblock( $form ); } }, /** * Display a field error using jQuery Validate library. * * @param {jQuery} $form Form element. * @param {object} message Error message. * * @since 1.8.2 */ displayStripeError: function( $form, message ) { const fieldName = $form.find( '.wpforms-stripe-credit-card-hidden-input' ).attr( 'name' ), $stripeDiv = $form.find( '.wpforms-field-stripe-credit-card-cardnumber' ); let errors = {}; errors[fieldName] = message; wpforms.displayFormAjaxFieldErrors( $form, errors ); // Switch page for the multipage form. if ( ! $stripeDiv.is( ':visible' ) && $form.find( '.wpforms-page-indicator-steps' ).length > 0 ) { // Empty $json object needed to change the page to the first one. wpforms.setCurrentPage( $form, {} ); } wpforms.scrollToError( $stripeDiv ); }, /** * Unblock the AJAX form. * * @since 1.8.2 * * @param {jQuery} $form Form element. */ formAjaxUnblock: function( $form ) { let $container = $form.closest( '.wpforms-container' ), $spinner = $form.find( '.wpforms-submit-spinner' ), $submit = $form.find( '.wpforms-submit' ), submitText = $submit.data( 'submit-text' ); if ( submitText ) { $submit.text( submitText ); } $submit.prop( 'disabled', false ); $container.css( 'opacity', '' ); $spinner.hide(); }, /** * Callback for a page changing. * * @since 1.8.2 * * @param {Event} event Event. * @param {int} currentPage Current page. * @param {jQuery} $form Current form. * @param {string} action The navigation action. */ pageChange: function( event, currentPage, $form, action ) { const $stripeDiv = $form.find( '.wpforms-field-stripe-credit-card-cardnumber' ), ccComplete = $stripeDiv.hasClass( wpforms_stripe.data.element_classes.complete ), ccEmpty = $stripeDiv.hasClass( wpforms_stripe.data.element_classes.empty ), ccInvalid = $stripeDiv.hasClass( wpforms_stripe.data.element_classes.invalid ); // Stop navigation through page break pages. if ( ! $stripeDiv.is( ':visible' ) || ( ! $stripeDiv.data( 'required' ) && ccEmpty ) || ( app.lockedPageToSwitch && app.lockedPageToSwitch !== currentPage ) || action === 'prev' ) { return; } if ( ccComplete ) { $stripeDiv.find( '.wpforms-error' ).remove(); return; } app.lockedPageToSwitch = currentPage; event.preventDefault(); if ( ccInvalid ) { return; } app.displayStripeError( $form, wpforms_stripe.i18n.empty_details ); }, /** * Get CSS property value. * In case of exception return empty string. * * @since 1.8.6 * * @param {jQuery} $element Element. * @param {string} property Property. * * @return {string} Property value. */ getCssPropertyValue( $element, property ) { try { return $element.css( property ); } catch ( e ) { return ''; } }, /** * Update Card Element styles in Modern Markup mode. * * @since 1.8.2 * * @param {jQuery} $form Form object. */ updateCardElementStylesModern( $form ) { // Should work only in Modern Markup mode. if ( ! window.WPForms || ! WPForms.FrontendModern || ! $.isEmptyObject( wpforms_stripe.data.element_style ) ) { return; } if ( ! $form || $form.length === 0 ) { return; } $form.find( '.wpforms-stripe-credit-card-hidden-input' ).each( function() { const $hiddenInput = $( this ); const cardElement = $hiddenInput.data( 'stripe-element' ); const inputStyle = { fontSize: app.getCssPropertyValue( $hiddenInput, 'font-size' ), colorText: app.getCssPropertyValue( $hiddenInput, 'color' ), }; if ( ! cardElement ) { return; } const styles = { base: { color: inputStyle.colorText, fontSize: inputStyle.fontSize, '::placeholder': { color: WPForms.FrontendModern.getColorWithOpacity( inputStyle.colorText, '0.5' ), fontSize: inputStyle.fontSize, }, }, invalid: { color: inputStyle.colorText, }, }; cardElement.update( { style: styles } ); } ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsStripeElements.init(); assets/js/integrations/stripe/admin-builder-modern-stripe.min.js000064400000010560147400353540021127 0ustar00const WPFormsStripeModernBuilder=window.WPFormsStripeModernBuilder||function(l){let o={};const i={init(){l(i.ready)},ready(){var e,n;i.isLegacySettings()||(o={$alert:l("#wpforms-stripe-credit-card-alert"),$panelContent:l("#wpforms-panel-content-section-payment-stripe"),$feeNotice:l(".wpforms-stripe-notice-info")},i.bindUIActions(),wpforms_builder_stripe.is_pro)||(n=".wpforms-panel-content-section-payment-plan-name input",l(e=".wpforms-panel-content-section-payment-toggle input").each(i.toggleContent),l(n).each(i.checkPlanName),l("#wpforms-panel-payments").on("click",e,i.toggleContent).on("click",".wpforms-panel-content-section-payment-plan-head-buttons-toggle",i.togglePlan).on("click",".wpforms-panel-content-section-stripe .wpforms-panel-content-section-payment-plan-head-buttons-delete",i.deletePlan).on("input",n,i.renamePlan).on("focusout",n,i.checkPlanName))},bindUIActions(){l("#wpforms-builder").on("wpformsFieldDelete",i.disableNotifications).on("wpformsSaved",i.requiredFieldsCheck).on("wpformsFieldAdd",i.fieldAdded).on("wpformsFieldDelete",i.fieldDeleted).on("wpformsPaymentsPlanCreated",i.toggleMultiplePlansWarning).on("wpformsPaymentsPlanDeleted",i.toggleMultiplePlansWarning)},requiredFieldsCheck(){l("#wpforms-panel-field-stripe-enable_recurring").is(":checked")&&!o.$panelContent.hasClass("wpforms-hidden")&&o.$panelContent.find(".wpforms-panel-content-section-payment-plan").each(function(){var e=l(this),n=e.data("plan-id");if(!e.find(`#wpforms-panel-field-stripe-recurring-${n}-email`).val())return i.recurringEmailAlert(),!1})},recurringEmailAlert(){l.alert({title:wpforms_builder.heads_up,content:wpforms_builder.stripe_recurring_email,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})},disableNotifications(e,n,t){i.isStripeField(t)&&((t=l('.wpforms-panel-content-section-notifications [id*="-stripe-wrap"]')).find('input[id*="-stripe"]').prop("checked",!1),t.addClass("wpforms-hidden"))},isLegacySettings(){return l("#wpforms-panel-field-stripe-enable").length},fieldAdded(e,n,t){i.isStripeField(t)&&(i.settingsToggle(!0),o.$feeNotice.toggleClass("wpforms-hidden"))},fieldDeleted(e,n,t){i.isStripeField(t)&&(i.settingsToggle(!1),o.$feeNotice.toggleClass("wpforms-hidden"))},isStripeField(e){return wpforms_builder_stripe.field_slugs.includes(e)},toggleMultiplePlansWarning(){o.$panelContent.find(".wpforms-stripe-multiple-plans-warning").toggleClass("wpforms-hidden",1===o.$panelContent.find(".wpforms-panel-content-section-payment-plan").length)},settingsToggle(e){(o.$alert.length||o.$panelContent.length)&&(o.$alert.toggleClass("wpforms-hidden",e),o.$panelContent.toggleClass("wpforms-hidden",!e))},toggleContent(){var e=l(this),n=(l("#wpforms-panel-field-stripe-enable_recurring").is(":checked")&&l("#wpforms-panel-field-stripe-enable_one_time").is(":checked")&&(e.prop("checked",!1),l.alert({title:wpforms_builder.heads_up,content:"wpforms-panel-field-stripe-enable_recurring"===e.attr("id")?wpforms_builder_stripe.disabled_recurring:wpforms_builder_stripe.disabled_one_time,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}}),e.prop("checked",!1)),e.closest(".wpforms-panel-content-section-payment")),e=e.prop("checked")&&!l("#wpforms-panel-field-settings-disable_entries").prop("checked");n.find(".wpforms-panel-content-section-payment-toggled-body").toggle(e),n.toggleClass("wpforms-panel-content-section-payment-open",e)},togglePlan(){var e=l(this).closest(".wpforms-panel-content-section-payment-plan"),n=e.find(".wpforms-panel-content-section-payment-plan-head-buttons-toggle");n.toggleClass("fa-chevron-circle-up fa-chevron-circle-down"),e.find(".wpforms-panel-content-section-payment-plan-body").toggle(n.hasClass("fa-chevron-circle-down"))},deletePlan(){l(".wpforms-panel-content-section-stripe .wpforms-panel-content-section-payment-button-add-plan").click()},checkPlanName(){var e,n=l(this),t=n.closest(".wpforms-panel-content-section-payment-plan").find(".wpforms-panel-content-section-payment-plan-head-title");n.val()?t.html(n.val()):(e=wpforms_builder_stripe.plan_placeholder,t.html(e),n.val(e))},renamePlan(){var e=l(this),n=e.closest(".wpforms-panel-content-section-payment-plan").find(".wpforms-panel-content-section-payment-plan-head-title");e.val()?n.html(e.val()):n.html("")}};return i}((document,window,jQuery));WPFormsStripeModernBuilder.init();assets/js/integrations/stripe/admin-builder-modern-stripe.js000064400000020751147400353540020350 0ustar00/* global wpforms_builder, wpforms_builder_stripe */ /** * Stripe builder function. * * @since 1.8.4 */ const WPFormsStripeModernBuilder = window.WPFormsStripeModernBuilder || ( function( document, window, $ ) { /** * Elements holder. * * @since 1.8.4 * * @type {Object} */ let el = {}; /** * Public functions and properties. * * @since 1.8.4 * * @type {Object} */ const app = { /** * Start the engine. * * @since 1.8.4 */ init() { $( app.ready ); }, /** * Initialized once the DOM is fully loaded. * * @since 1.8.4 */ ready() { if ( app.isLegacySettings() ) { return; } // Cache DOM elements. el = { $alert: $( '#wpforms-stripe-credit-card-alert' ), $panelContent: $( '#wpforms-panel-content-section-payment-stripe' ), $feeNotice: $( '.wpforms-stripe-notice-info' ), }; app.bindUIActions(); if ( ! wpforms_builder_stripe.is_pro ) { const toggleInput = '.wpforms-panel-content-section-payment-toggle input', planNameInput = '.wpforms-panel-content-section-payment-plan-name input'; $( toggleInput ).each( app.toggleContent ); $( planNameInput ).each( app.checkPlanName ); $( '#wpforms-panel-payments' ) .on( 'click', toggleInput, app.toggleContent ) .on( 'click', '.wpforms-panel-content-section-payment-plan-head-buttons-toggle', app.togglePlan ) .on( 'click', '.wpforms-panel-content-section-stripe .wpforms-panel-content-section-payment-plan-head-buttons-delete', app.deletePlan ) .on( 'input', planNameInput, app.renamePlan ) .on( 'focusout', planNameInput, app.checkPlanName ); } }, /** * Process various events as a response to UI interactions. * * @since 1.8.4 */ bindUIActions() { const $builder = $( '#wpforms-builder' ); $builder.on( 'wpformsFieldDelete', app.disableNotifications ) .on( 'wpformsSaved', app.requiredFieldsCheck ) .on( 'wpformsFieldAdd', app.fieldAdded ) .on( 'wpformsFieldDelete', app.fieldDeleted ) .on( 'wpformsPaymentsPlanCreated', app.toggleMultiplePlansWarning ) .on( 'wpformsPaymentsPlanDeleted', app.toggleMultiplePlansWarning ); }, /** * On form save notify users about required fields. * * @since 1.8.4 */ requiredFieldsCheck() { if ( ! $( '#wpforms-panel-field-stripe-enable_recurring' ).is( ':checked' ) || el.$panelContent.hasClass( 'wpforms-hidden' ) ) { return; } el.$panelContent.find( '.wpforms-panel-content-section-payment-plan' ).each( function() { const $plan = $( this ), planId = $plan.data( 'plan-id' ); if ( ! $plan.find( `#wpforms-panel-field-stripe-recurring-${ planId }-email` ).val() ) { app.recurringEmailAlert(); return false; } } ); }, /** * Show alert for required recurring email field. * * @since 1.8.4 */ recurringEmailAlert() { $.alert( { title: wpforms_builder.heads_up, content: wpforms_builder.stripe_recurring_email, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, /** * Disable notifications. * * @since 1.8.4 * * @param {Object} e Event object. * @param {number} id Field ID. * @param {string} type Field type. */ disableNotifications( e, id, type ) { if ( ! app.isStripeField( type ) ) { return; } const $notificationWrap = $( '.wpforms-panel-content-section-notifications [id*="-stripe-wrap"]' ); $notificationWrap.find( 'input[id*="-stripe"]' ).prop( 'checked', false ); $notificationWrap.addClass( 'wpforms-hidden' ); }, /** * Determine is legacy settings is loaded. * * @since 1.8.4 * * @return {boolean} True is legacy settings loaded. */ isLegacySettings() { return $( '#wpforms-panel-field-stripe-enable' ).length; }, /** * We have to do several actions when the "Stripe" field is added. * * @since 1.8.4 * * @param {Object} e Event object. * @param {number} id Field ID. * @param {string} type Field type. */ fieldAdded( e, id, type ) { if ( ! app.isStripeField( type ) ) { return; } app.settingsToggle( true ); el.$feeNotice.toggleClass( 'wpforms-hidden' ); }, /** * We have to do several actions when the "Stripe" field is deleted. * * @since 1.8.4 * * @param {Object} e Event object. * @param {number} id Field ID. * @param {string} type Field type. */ fieldDeleted( e, id, type ) { if ( ! app.isStripeField( type ) ) { return; } app.settingsToggle( false ); el.$feeNotice.toggleClass( 'wpforms-hidden' ); }, /** * Determine if field type is Stripe credit card. * * @since 1.8.4 * * @param {string} type Field type. * * @return {boolean} True if Stripe field. */ isStripeField( type ) { return wpforms_builder_stripe.field_slugs.includes( type ); }, /** * Toggles visibility of multiple plans warning. * * @since 1.8.4 */ toggleMultiplePlansWarning() { el.$panelContent.find( '.wpforms-stripe-multiple-plans-warning' ).toggleClass( 'wpforms-hidden', el.$panelContent.find( '.wpforms-panel-content-section-payment-plan' ).length === 1 ); }, /** * Toggles visibility of the Stripe addon settings. * * @since 1.8.4 * * @param {boolean} display Show or hide settings. */ settingsToggle( display ) { if ( ! el.$alert.length && ! el.$panelContent.length ) { return; } el.$alert.toggleClass( 'wpforms-hidden', display ); el.$panelContent.toggleClass( 'wpforms-hidden', ! display ); }, /** * Toggle payments content. * * @since 1.8.4 */ toggleContent() { const $input = $( this ); if ( $( '#wpforms-panel-field-stripe-enable_recurring' ).is( ':checked' ) && $( '#wpforms-panel-field-stripe-enable_one_time' ).is( ':checked' ) ) { $input.prop( 'checked', false ); $.alert( { title: wpforms_builder.heads_up, content: $input.attr( 'id' ) === 'wpforms-panel-field-stripe-enable_recurring' ? wpforms_builder_stripe.disabled_recurring : wpforms_builder_stripe.disabled_one_time, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); $input.prop( 'checked', false ); } const $wrapper = $input.closest( '.wpforms-panel-content-section-payment' ), isChecked = $input.prop( 'checked' ) && ! $( '#wpforms-panel-field-settings-disable_entries' ).prop( 'checked' ); $wrapper.find( '.wpforms-panel-content-section-payment-toggled-body' ).toggle( isChecked ); $wrapper.toggleClass( 'wpforms-panel-content-section-payment-open', isChecked ); }, /** * Toggle a plan content. * * @since 1.8.4 */ togglePlan() { const $plan = $( this ).closest( '.wpforms-panel-content-section-payment-plan' ), $icon = $plan.find( '.wpforms-panel-content-section-payment-plan-head-buttons-toggle' ); $icon.toggleClass( 'fa-chevron-circle-up fa-chevron-circle-down' ); $plan.find( '.wpforms-panel-content-section-payment-plan-body' ).toggle( $icon.hasClass( 'fa-chevron-circle-down' ) ); }, /** * Delete a plan. * * @since 1.8.4 */ deletePlan() { // Trigger a warning modal when trying to delete single plan without pro addon. $( '.wpforms-panel-content-section-stripe .wpforms-panel-content-section-payment-button-add-plan' ).click(); }, /** * Check a plan name on empty value. * * @since 1.8.4 */ checkPlanName() { const $input = $( this ), $plan = $input.closest( '.wpforms-panel-content-section-payment-plan' ), $planName = $plan.find( '.wpforms-panel-content-section-payment-plan-head-title' ); if ( $input.val() ) { $planName.html( $input.val() ); return; } const defaultValue = wpforms_builder_stripe.plan_placeholder; $planName.html( defaultValue ); $input.val( defaultValue ); }, /** * Rename a plan. * * @since 1.8.4 */ renamePlan() { const $input = $( this ), $plan = $input.closest( '.wpforms-panel-content-section-payment-plan' ), $planName = $plan.find( '.wpforms-panel-content-section-payment-plan-head-title' ); if ( ! $input.val() ) { $planName.html( '' ); return; } $planName.html( $input.val() ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsStripeModernBuilder.init(); assets/js/integrations/stripe/admin-builder-stripe-card-field.min.js000064400000005670147400353540021643 0ustar00"use strict";var WPFormsStripeCardField=window.WPFormsStripeCardField||function(e,s){const i={init:function(){i.bindUIActions()},bindUIActions:function(){s(e).on("wpformsSaved",i.ajaxRequiredCheck),s(e).on("wpformsSaved",i.paymentsEnabledCheck),s(e).on("click","#wpforms-add-fields-"+wpforms_builder_stripe_card_field.field_slug,i.stripeKeysCheck),s(e).on("change",".wpforms-field-option-stripe-credit-card .wpforms-field-option-row-sublabel_position select",i.sublabelPositionChange),s(e).on("change",".wpforms-field-option-stripe-credit-card .wpforms-field-option-row-link_email select",i.linkEmailChange),s(e).on("wpformsFieldAdd",i.disableAddCardButton),s(e).on("wpformsFieldDelete",i.enableAddCardButton),s(e).on("wpformsFieldDelete",i.maybeResetLinkEmailField)},ajaxRequiredCheck:function(){s(".wpforms-field.wpforms-field-"+wpforms_builder_stripe_card_field.field_slug).length&&!s("#wpforms-panel-field-settings-ajax_submit").is(":checked")&&s.alert({title:wpforms_builder.heads_up,content:wpforms_builder.stripe_ajax_required,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})},paymentsEnabledCheck:function(){!s(`.wpforms-field.wpforms-field-${wpforms_builder_stripe_card_field.field_slug}:visible`).length||s("#wpforms-panel-field-stripe-enable").is(":checked")||s("#wpforms-panel-field-stripe-enable_one_time").is(":checked")||s("#wpforms-panel-field-stripe-enable_recurring").is(":checked")||s.alert({title:wpforms_builder.heads_up,content:wpforms_builder.payments_enabled_required,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})},stripeKeysCheck:function(){s(this).hasClass("stripe-keys-required")&&s.alert({title:wpforms_builder.heads_up,content:wpforms_builder.stripe_keys_required,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})},disableAddCardButton:function(e,i,r){wpforms_builder_stripe_card_field.field_slug===r&&s("#wpforms-add-fields-"+wpforms_builder_stripe_card_field.field_slug).prop("disabled",!0)},enableAddCardButton:function(e,i,r){wpforms_builder_stripe_card_field.field_slug===r&&s("#wpforms-add-fields-"+wpforms_builder_stripe_card_field.field_slug).prop("disabled",!1)},sublabelPositionChange:function(){var e=s(this).parent().data("field-id"),e=s("#wpforms-field-"+e).find(".wpforms-stripe-payment-element");e.toggleClass("above"),e.toggleClass("floating"),e.find("select").val(e.hasClass("above")?"empty":"country")},linkEmailChange:function(){var e=s(this).parent().data("field-id");s("#wpforms-field-"+e).find(".wpforms-stripe-link-email").toggleClass("wpforms-hidden",""!==s(this).val())},maybeResetLinkEmailField:function(e,i,r){"email"===r&&s(".wpforms-field-option-stripe-credit-card .wpforms-field-option-row-link_email select").trigger("change")}};return i}(document,(window,jQuery));WPFormsStripeCardField.init();assets/js/integrations/stripe/wpforms-stripe-payment-element.js000064400000102563147400353540021153 0ustar00/* global Stripe, wpforms, wpforms_stripe, WPForms, WPFormsUtils */ /** * @param window.wpformsStripePaymentElementAppearance * @param wpforms_stripe.data.element_appearance * @param wpforms_stripe.data.element_locale * @param wpforms_stripe.i18n.element_load_error * @param wpforms_stripe.i18n.empty_details * @param wpforms_stripe.publishable_key */ // noinspection ES6ConvertVarToLetConst /** * WPForms Stripe Payment Element function. * * @since 1.8.2 */ // eslint-disable-next-line no-var var WPFormsStripePaymentElement = window.WPFormsStripePaymentElement || ( function( document, window, $ ) { /** * Original Submit Handler. * * @since 1.8.2 * * @type {Function} */ let originalSubmitHandler; // noinspection JSUnusedLocalSymbols /** * Public functions and properties. * * @since 1.8.2 * * @type {Object} */ const app = { /** * Stripe object. * * @since 1.8.2 * * @type {Object} * @property {Function} confirmPayment Payment confirmation. */ stripe: null, /** * Object to store form data. * * @since 1.8.2 * * @type {Object} */ forms: {}, /** * Start the engine. * * @since 1.8.2 */ init() { app.stripe = Stripe( // eslint-disable-line new-cap wpforms_stripe.publishable_key, { locale: wpforms_stripe.data.element_locale, betas: [ 'elements_enable_deferred_intent_beta_1' ], } ); $( document ).on( 'wpformsReady', function() { $( '.wpforms-stripe form' ) .each( app.setupStripeForm ) .on( 'wpformsConvFormsFieldActivationAfter', app.convFormsFieldActivationAfter ); // Initialize in Conversational Form on field activation. } ); $( document ) .on( 'wpformsBeforePageChange', app.pageChange ) .on( 'wpformsAmountTotalCalculated', app.updateElementsTotalAmount ) .on( 'wpformsProcessConditionalsField', function( e, formID, fieldID, pass, action ) { app.processConditionalsField( formID, fieldID, pass, action ); } ); }, /** * Initialize forms default object. * * @since 1.8.2 * @deprecated 1.8.9 */ initializeFormsDefaultObject() { // eslint-disable-next-line no-console console.warn( 'WARNING! Function "WPFormsStripePaymentElement.initializeFormsDefaultObject()" has been deprecated, please use the "WPFormsStripePaymentElement.initializeFormDefaultObject( formId )" function instead!' ); $( '.wpforms-stripe form' ).each( function() { app.initializeFormDefaultObject( $( this ).data( 'formid' ) ); } ); }, /** * Initialize form default object. * * @since 1.8.9 * * @param {string} formId Form ID. */ initializeFormDefaultObject( formId ) { app.forms[ formId ] = { elements: null, paymentElement: null, elementsModified: false, linkElement: null, linkEmail: '', linkDestroyed: false, paymentType: '', lockedPageToSwitch: 0, paymentMethodId: '', total: '', }; }, /** * Setup and configure a Stripe form. * * @since 1.8.2 */ setupStripeForm() { const $form = $( this ), formId = $form.data( 'formid' ); // Bail early if form was already setup. if ( typeof app.forms[ formId ] !== 'undefined' ) { return; } app.initializeFormDefaultObject( formId ); const $stripeDiv = $form.find( '.wpforms-field-stripe-credit-card' ); if ( ! $stripeDiv.find( '.wpforms-field-row' ).length ) { return; } const validator = $form.data( 'validator' ); if ( ! validator ) { return; } // Store the original submitHandler. originalSubmitHandler = validator.settings.submitHandler; // Replace the default submit handler. validator.settings.submitHandler = app.submitHandler; $form.on( 'wpformsAjaxSubmitActionRequired', app.confirmPaymentActionCallback ); if ( $stripeDiv.hasClass( 'wpforms-conditional-field' ) ) { return; } app.setupPaymentElement( $form ); }, /** * Handle confirm payment server response. * * @param {Object} e Event object. * @param {Object} json Json returned from a server. * @param {boolean} json.data.action_required Whether action is required. * @param {string} json.data.payment_intent_client_secret Payment intent client secret. * @param {boolean} json.success Success. * * @since 1.8.2 */ async confirmPaymentActionCallback( e, json ) { if ( ! json.success || ! json.data.action_required ) { return; } const $form = $( this ); const redirectUrl = new URL( window.location.href ), formId = $form.data( 'formid' ); await app.stripe.confirmPayment( { clientSecret: json.data.payment_intent_client_secret, // eslint-disable-line camelcase confirmParams: { return_url: redirectUrl.toString(), // eslint-disable-line camelcase payment_method: app.forms[ formId ].paymentMethodId, // eslint-disable-line camelcase }, redirect: 'if_required', } ).then( function( result ) { app.handleConfirmPayment( $form, result ); } ); }, /** * Callback for Stripe 'confirmPayment' method. * * @param {jQuery} $form Form element. * @param {Object} result Data returned by 'handleCardPayment'. * @param {Object} result.error Error. * @param {Object} result.paymentIntent Payment intent. * * @since 1.8.2 */ handleConfirmPayment( $form, result ) { if ( result.error ) { app.displayStripeError( $form, result.error.message ); return; } const formId = $form.data( 'formid' ); if ( result.paymentIntent && result.paymentIntent.status === 'succeeded' ) { $form.find( '.wpforms-stripe-payment-method-id' ).remove(); $form.find( '.wpforms-stripe-payment-intent-id' ).remove(); $form.append( '' ); $form.append( '' ); wpforms.formSubmitAjax( $form ); return; } app.formAjaxUnblock( $form ); }, /** * Setup, mount and configure Stripe Payment Element. * * @since 1.8.2 * * @param {jQuery} $form Form element. */ setupPaymentElement( $form ) { const formId = $form.data( 'formid' ); if ( $.isEmptyObject( app.forms ) ) { app.initializeFormDefaultObject( formId ); } if ( app.forms[ formId ].paymentElement ) { return; } app.forms[ formId ].elements = app.stripe.elements( { currency: wpforms.getCurrency().code.toLowerCase(), mode: 'payment', // eslint-disable-next-line // See min amount for different currencies https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts. amount: 7777777, loader: 'always', locale: wpforms_stripe.data.element_locale, appearance: app.getElementAppearanceOptions( $form ), } ); app.initializePaymentElement( $form ); app.linkEmailMappedFieldTriggers( $form ); // Update the total amount in case of fixed price. wpforms.amountTotalCalc( $form ); // Update styles in Modern Markup mode. app.updatePaymentElementStylesModern( $form ); WPFormsUtils.triggerEvent( $( document ), 'wpformsStripePaymentElementInitialized', [ $form, app.forms ] ); }, /** * Handle Process Conditionals for Stripe field. * * @since 1.8.2 * * @param {string} formID Form ID. * @param {string} fieldID Field ID. * @param {boolean} pass Pass logic. * @param {string} action Action to execute. */ processConditionalsField( formID, fieldID, pass, action ) { // eslint-disable-line complexity const $form = $( '#wpforms-form-' + formID ), $stripeDiv = $form.find( '.wpforms-field-stripe-credit-card' ), isHidden = ( pass && action === 'hide' ) || ( ! pass && action !== 'hide' ); if ( ! $stripeDiv.length || $stripeDiv.data( 'field-id' ).toString() !== fieldID || app.forms[ formID ].paymentElement || isHidden ) { return; } app.setupPaymentElement( $form ); }, /** * Get Element appearance options. * * @since 1.8.2 * * @param {jQuery} $form Form element. * * @return {Object} Appearance options. */ getElementAppearanceOptions( $form ) { // eslint-disable-line complexity, max-lines-per-function const customAppearanceOptions = app.getCustomAppearanceOptions(); if ( ! $.isEmptyObject( customAppearanceOptions ) ) { return customAppearanceOptions; } const $hiddenInput = $form.find( '.wpforms-stripe-credit-card-hidden-input' ), $fieldRow = $form.find( '.wpforms-field-stripe-credit-card .wpforms-field-row' ); const labelHide = ! $fieldRow.hasClass( 'wpforms-sublabel-hide' ); const inputStyle = { borderColor: app.getCssPropertyValue( $hiddenInput, '--field-border' ) || app.getCssPropertyValue( $hiddenInput, 'border-color' ), borderRadius: app.getCssPropertyValue( $hiddenInput, 'border-radius' ), fontSize: app.getCssPropertyValue( $hiddenInput, 'font-size' ), colorPrimary: app.getCssPropertyValue( $hiddenInput, '--primary-color' ) || app.getCssPropertyValue( $hiddenInput, 'color' ), colorText: app.getCssPropertyValue( $hiddenInput, '--secondary-color' ) || app.getCssPropertyValue( $hiddenInput, 'color' ), colorTextPlaceholder: app.getCssPropertyValue( $hiddenInput, '--secondary-color-50' ) || WPFormsUtils.cssColorsUtils.getColorWithOpacity( app.getCssPropertyValue( $hiddenInput, 'color' ), '0.5' ), colorBackground: app.getCssPropertyValue( $hiddenInput, '--background-color' ) || app.getCssPropertyValue( $hiddenInput, 'background-color' ), fontFamily: app.getCssPropertyValue( $hiddenInput, 'font-family' ), focusColor: app.getCssPropertyValue( $hiddenInput, '--accent-color' ) || app.getCssPropertyValue( $hiddenInput, 'color' ), errorColor: '#990000', }; if ( window.WPForms && WPForms.FrontendModern ) { inputStyle.colorPrimary = WPForms.FrontendModern.getSolidColor( inputStyle.colorPrimary ); } return { theme: 'none', labels: $fieldRow.data( 'sublabel-position' ), sublabelHide: labelHide, variables: { colorPrimary: inputStyle.colorPrimary, colorBackground: inputStyle.colorBackground, colorText: inputStyle.colorText, colorDanger: inputStyle.errorColor, fontFamily: inputStyle.fontFamily, spacingUnit: '4px', spacingGridRow: '8px', fontSizeSm: '13px', fontWeightNormal: '400', borderRadius: inputStyle.borderRadius, colorTextPlaceholder: inputStyle.colorTextPlaceholder, colorIcon: inputStyle.colorText, focusColor: inputStyle.focusColor, borderColorWithOpacity: WPFormsUtils.cssColorsUtils.getColorWithOpacity( inputStyle.colorPrimary, '0.1' ), }, rules: { '.Input--invalid': { color: inputStyle.colorText, borderColor: '#cc0000', }, '.Input': { border: 'none', borderRadius: inputStyle.borderRadius, boxShadow: '0 0 0 1px ' + inputStyle.borderColor, fontSize: inputStyle.fontSize, padding: '12px 14px', lineHeight: parseInt( inputStyle.fontSize, 10 ) + 5 + 'px', // match the font and line height to prevent overflow transition: 'none', color: inputStyle.colorText, backgroundColor: inputStyle.colorBackground, }, '.Input:focus, .Input:hover': { border: 'none', boxShadow: '0 0 0 2px ' + inputStyle.focusColor, outline: 'none', }, '.Label': { fontFamily: inputStyle.fontFamily, lineHeight: labelHide ? '1.3' : '0', opacity: Number( labelHide ), color: inputStyle.colorPrimary, }, '.CheckboxInput, .CodeInput, .PickerItem': { border: '1px solid ' + inputStyle.borderColor, }, '.Tab, .Block': { border: '1px solid ' + inputStyle.borderColor, borderRadius: inputStyle.borderRadius, color: inputStyle.colorText, }, '.TabLabel, .TabIcon': { color: inputStyle.colorText, }, '.Tab--selected': { borderColor: '#999999', color: inputStyle.colorText, }, '.Action': { marginLeft: '6px', }, '.Action, .MenuAction': { border: 'none', backgroundColor: 'transparent', }, '.Action:hover, .MenuAction:hover': { border: 'none', backgroundColor: 'transparent', }, '.Error, .RedirectText': { color: inputStyle.errorColor, }, '.TabIcon--selected': { fill: inputStyle.colorText, }, }, }; }, /** * Get custom appearance options. * * @since 1.8.5 * * @return {Object} Element appearance options. */ getCustomAppearanceOptions() { if ( typeof window.wpformsStripePaymentElementAppearance === 'object' ) { return window.wpformsStripePaymentElementAppearance; } if ( ! $.isEmptyObject( wpforms_stripe.data.element_appearance ) ) { return wpforms_stripe.data.element_appearance; } return {}; }, /** * Get CSS property value. * In case of exception, return empty string. * * @since 1.8.4 * * @param {jQuery} $element Element. * @param {string} property Property. * * @return {string} Property value. */ getCssPropertyValue( $element, property ) { try { return $element.css( property ); } catch ( e ) { return ''; } }, /** * Initialize Payment Element. * * @since 1.8.2 * * @param {jQuery} $form Form element. * @param {string} email Email address. */ initializePaymentElement( $form, email = '' ) { const $fieldRow = $form.find( '.wpforms-field-stripe-credit-card .wpforms-field-row' ); const formId = $form.data( 'formid' ); if ( app.forms[ formId ].paymentElement ) { app.forms[ formId ].paymentElement.destroy(); } app.forms[ formId ].paymentElement = app.forms[ formId ].elements.create( 'payment', { defaultValues : { billingDetails: { email } } } ); app.mountPaymentElement( $form ); // eslint-disable-next-line complexity app.forms[ formId ].paymentElement.on( 'change', function( event ) { app.forms[ formId ].paymentType = event.value.type; // Destroy a link element as it's not required for Google and Apple Pay. if ( ! $fieldRow.data( 'link-email' ) ) { if ( event.value.type === 'google_pay' || event.value.type === 'apple_pay' ) { app.forms[ formId ].linkElement.destroy(); app.forms[ formId ].linkDestroyed = true; } else if ( app.forms[ formId ].linkDestroyed ) { app.initializeLinkAuthenticationElement( $form ); app.forms[ formId ].linkDestroyed = false; } } $fieldRow.data( 'type', event.value.type ); if ( event.empty ) { $fieldRow.data( 'completed', false ); $fieldRow.find( 'label.wpforms-error' ).toggle( event.value.type === 'card' ); return; } app.forms[ formId ].elementsModified = true; if ( event.complete ) { $fieldRow.data( 'completed', true ); app.hideStripeFieldError( $form ); return; } $fieldRow.data( 'completed', false ); } ); app.forms[ formId ].paymentElement.on( 'loaderror', function( event ) { app.displayStripeLoadError( $form, event.error.message ); } ); }, /** * Mount Payment Element. * * @since 1.8.2 * * @param {jQuery} $form Form element. */ mountPaymentElement( $form ) { const formId = $form.data( 'formid' ), paymentRowId = `#wpforms-field-stripe-payment-element-${ formId }`; app.forms[ formId ].paymentElement.mount( paymentRowId ); }, /** * Link Email mapped field triggers. * * @since 1.8.2 * * @param {jQuery} $form Form element. */ linkEmailMappedFieldTriggers( $form ) { const $fieldRow = $form.find( '.wpforms-field-stripe-credit-card .wpforms-field-row' ); const linkEmailMappedField = app.getMappedLinkEmailField( $form ); if ( ! linkEmailMappedField ) { $fieldRow.data( 'linkCompleted', false ); app.initializeLinkAuthenticationElement( $form ); return; } const formId = $form.data( 'formid' ); linkEmailMappedField.on( 'change', function() { app.forms[ formId ].linkEmail = $( this ).val(); if ( $fieldRow.data( 'completed' ) ) { return; } // Reinitialize payment element if card data not completed yet. app.initializePaymentElement( $form, $( this ).val() ); } ); }, /** * Get Link Email mapped field. * * @since 1.8.2 * * @param {jQuery} $form Form element. * * @return {jQuery} Linked email field. */ getMappedLinkEmailField( $form ) { const linkEmailMappedFieldId = $form.find( '.wpforms-field-stripe-credit-card .wpforms-field-row' ).data( 'link-email' ); if ( ! linkEmailMappedFieldId ) { return null; } const formId = $form.data( 'formid' ); return $( `#wpforms-${ formId }-field_${ linkEmailMappedFieldId }` ); }, /** * Initialize Link Authentication Element. * * @since 1.8.2 * * @param {jQuery} $form Form element. */ initializeLinkAuthenticationElement( $form ) { const $fieldRow = $form.find( '.wpforms-field-stripe-credit-card .wpforms-field-row' ); const formId = $form.data( 'formid' ); app.forms[ formId ].linkElement = app.forms[ formId ].elements.create( 'linkAuthentication' ); app.mountLinkElement( $form ); app.forms[ formId ].linkElement.on( 'change', function( event ) { if ( event.empty ) { return; } app.forms[ formId ].elementsModified = true; if ( ! event.complete ) { $fieldRow.data( 'linkCompleted', false ); return; } if ( typeof event.value.email !== 'undefined' ) { app.forms[ formId ].linkEmail = event.value.email; } $fieldRow.data( 'linkCompleted', true ); app.hideStripeFieldError( $form ); } ); app.forms[ formId ].linkElement.on( 'loaderror', function( event ) { app.displayStripeLoadError( $form, event.error.message ); } ); }, /** * Mount Payment Element. * * @since 1.8.2 * * @param {jQuery} $form Form element. */ mountLinkElement( $form ) { const formId = $form.data( 'formid' ), linkRowId = `#wpforms-field-stripe-link-element-${ formId }`; app.forms[ formId ].linkElement.mount( linkRowId ); }, /** * Update submitHandler for the forms containing Stripe. * * @since 1.8.2 * * @param {Object} form JS form element. */ // eslint-disable-next-line complexity submitHandler( form ) { const $form = $( form ), $stripeDiv = $form.find( '.wpforms-field-stripe-credit-card' ), $stripeRow = $stripeDiv.find( '.wpforms-field-row' ); const valid = $form.validate().form(), formId = $form.data( 'formid' ), ccRequired = $stripeRow.data( 'required' ), mobilePayment = [ 'google_pay', 'apple_pay' ].indexOf( app.forms[ formId ].paymentType ) !== -1, cardFilled = ( ! $stripeRow.data( 'link-email' ) && app.forms[ formId ].elementsModified ) || $stripeRow.data( 'completed' ) || mobilePayment; let processCard = false; if ( ! $stripeDiv.hasClass( 'wpforms-conditional-hide' ) ) { processCard = ccRequired || ( cardFilled && ! ccRequired ); } if ( valid && processCard ) { $form.find( '.wpforms-submit' ).prop( 'disabled', true ); $form.find( '.wpforms-submit-spinner' ).show(); app.createPaymentMethod( $form ); return; } if ( valid ) { originalSubmitHandler( $form ); return; } $form.find( '.wpforms-submit' ).prop( 'disabled', false ); $form.validate().cancelSubmit = true; }, /** * Update Elements total amount. * * @since 1.8.2 * * @param {Object} e Event object. * @param {jQuery} $form Form element. * @param {string} total Form total amount. */ updateElementsTotalAmount( e, $form, total ) { if ( ! total ) { return; } const formId = $form.data( 'formid' ); // Check if Stripe Elements exist on the form. // Can be in a multiple-step form or when the field is hidden by conditional logic. if ( ! app.forms[ formId ] || ! app.forms[ formId ].elements ) { return; } const currency = wpforms.getCurrency(); // Save total to variable to avoid calling `amountTotalCalc` again in SubmitHandler. app.forms[ formId ].total = total; app.forms[ formId ].elements.update( { amount: parseInt( wpforms.numberFormat( total, currency.decimals, '', '' ), 10 ) } ); }, /** * Confirm a setup payment. * * @param {jQuery} $form Form element. */ async createPaymentMethod( $form ) { const formId = $form.data( 'formid' ); if ( ! app.forms[ formId ].total ) { originalSubmitHandler( $form ); return; } await app.stripe.createPaymentMethod( { elements: app.forms[ formId ].elements, } ).then( function( result ) { if ( result.error ) { // eslint-disable-next-line prefer-const const basicErrors = [ 'incomplete_email', 'email_invalid', 'incomplete_number', 'invalid_number', 'incomplete_expiry', 'invalid_expiry_year_past', 'invalid_expiry_year', 'incomplete_cvc', 'incomplete_name', 'incomplete_phone_number', 'empty_phone_number', 'invalid_postal_code', ], message = basicErrors.includes( result.error.code ) ? '' : result.error.message; app.displayStripeFieldError( $form, message ); return; } app.forms[ formId ].paymentMethodId = result.paymentMethod.id; $form.append( '' ); originalSubmitHandler( $form ); } ); }, /** * Unblock the AJAX form. * * @since 1.8.2 * * @param {jQuery} $form Form element. */ formAjaxUnblock( $form ) { const $submit = $form.find( '.wpforms-submit' ); const submitText = $submit.data( 'submit-text' ); if ( submitText ) { $submit.text( submitText ); } $submit.prop( 'disabled', false ); $submit.removeClass( 'wpforms-disabled' ); $form.closest( '.wpforms-container' ).css( 'opacity', '' ); $form.find( '.wpforms-submit-spinner' ).hide(); }, /** * Display a generic Stripe Errors. * * @param {jQuery} $form Form element. * @param {string} message Error message. * * @since 1.8.2 */ displayStripeError( $form, message ) { wpforms.clearFormAjaxGeneralErrors( $form ); wpforms.displayFormAjaxErrors( $form, message ); app.formAjaxUnblock( $form ); }, /** * Display a field error using jQuery Validate library. * * @param {jQuery} $form Form element. * @param {string} message Error message. * * @since 1.8.2 */ displayStripeFieldError( $form, message ) { const fieldName = $form.find( '.wpforms-stripe-credit-card-hidden-input' ).attr( 'name' ), $stripeDiv = $form.find( '.wpforms-field-stripe-credit-card' ), errors = {}; if ( message ) { errors[ fieldName ] = message; } wpforms.displayFormAjaxFieldErrors( $form, errors ); // Switch page for the multipage form. if ( ! $stripeDiv.is( ':visible' ) && $form.find( '.wpforms-page-indicator-steps' ).length > 0 ) { // Empty $json object needed to change the page to the first one. wpforms.setCurrentPage( $form, {} ); } wpforms.scrollToError( $stripeDiv ); app.formAjaxUnblock( $form ); }, /** * Hide a field error. * * @param {jQuery} $form Form element. * * @since 1.8.2.3 */ hideStripeFieldError( $form ) { $form.find( '.wpforms-field-stripe-credit-card .wpforms-error' ).hide(); }, /** * Display a Stripe Elements load error. * * @since 1.8.2 * * @param {jQuery} $form Form element. * @param {string} message Error message. */ displayStripeLoadError( $form, message ) { message = wpforms_stripe.i18n.element_load_error + '
      ' + message; app.displayStripeError( $form, message ); }, /** * Callback for `wpformsBeforePageChange`. * * @since 1.8.2 * * @param {Event} event Event. * @param {number} currentPage Current page. * @param {jQuery} $form Current form. * @param {string} action The navigation action. */ pageChange( event, currentPage, $form, action ) { // eslint-disable-line complexity const $stripeDiv = $form.find( '.wpforms-field-stripe-credit-card .wpforms-field-row' ); const formId = $form.data( 'formid' ); if ( ! $stripeDiv.length || [ 'card', 'link' ].indexOf( app.forms[ formId ].paymentType ) === -1 ) { return; } if ( ! app.forms[ formId ].elementsModified && app.forms[ formId ].paymentType === 'card' ) { app.forms[ formId ].paymentElement.unmount(); app.mountPaymentElement( $form ); if ( ! $stripeDiv.data( 'link-email' ) ) { app.forms[ formId ].linkElement.unmount(); app.mountLinkElement( $form ); } } // Stop navigation through page break pages. if ( ! $stripeDiv.is( ':visible' ) || ( ! $stripeDiv.data( 'required' ) && ! app.forms[ formId ].elementsModified ) || ( app.forms[ formId ].lockedPageToSwitch && app.forms[ formId ].lockedPageToSwitch !== currentPage ) || action === 'prev' ) { return; } const linkCompleted = typeof $stripeDiv.data( 'linkCompleted' ) !== 'undefined' ? $stripeDiv.data( 'linkCompleted' ) : true; if ( $stripeDiv.data( 'completed' ) && linkCompleted ) { app.hideStripeFieldError( $form ); return; } app.forms[ formId ].lockedPageToSwitch = currentPage; app.displayStripeFieldError( $form, wpforms_stripe.i18n.empty_details ); event.preventDefault(); }, /** * Callback for `wpformsConvFormsFieldActivationAfter`. * * @since 1.8.2 * * @param {Event} event Event. * @param {Object} field CF field object. */ convFormsFieldActivationAfter( event, field ) { app.setupPaymentElement( field.$el.closest( 'form' ) ); }, /** * Get CSS variable value. * * @since 1.8.2 * @deprecated 1.8.8 * * @param {Object} style Computed style object. * @param {string} varName Style custom property name. * * @return {string} CSS variable value; */ // eslint-disable-next-line no-unused-vars getCssVar( style, varName ) { // eslint-disable-next-line no-console console.warn( 'WARNING! Function "WPFormsStripePaymentElement.getCssVar()" has been deprecated, please use the "WPForms.FrontendModern.getCssVar()" function instead!' ); return WPForms?.FrontendModern?.getCssVar(); }, /** * Update Payment Element styles in Modern Markup mode. * * @since 1.8.2 * * @param {jQuery} $form Form object. */ // eslint-disable-next-line complexity updatePaymentElementStylesModern( $form ) { // Should work only in Modern Markup mode. if ( ! $.isEmptyObject( app.getCustomAppearanceOptions() ) || ! window.WPForms || ! WPForms.FrontendModern ) { return; } if ( ! $form || $form.length === 0 ) { return; } // Skip Lead Form. if ( $form.closest( '.wpforms-container' ).hasClass( 'wpforms-lead-forms-container' ) ) { return; } const formId = $form.data( 'formid' ); if ( ! app.forms[ formId ] ) { return; } const formElements = app.forms[ formId ].elements; const cssVars = WPForms.FrontendModern.getCssVars( $form ); app.updateFormElementsAppearance( formElements, cssVars ); }, /** * Update Payment Elements appearance with given CSS variables data. * * @since 1.8.2 * * @param {Object} formElements Form payment elements. * @param {Object} formElements._commonOptions Form payment elements common options. * @param {Function} formElements.update Form payment elements common options. * @param {Object} cssVars CSS variables data. */ updateFormElementsAppearance( formElements, cssVars ) { // eslint-disable-line max-lines-per-function if ( ! formElements || ! formElements._commonOptions ) { return; } // Get existing appearance options. const appearance = formElements._commonOptions.appearance; // Need to perform vertical padding calculation. cssVars[ 'field-size-padding-v' ] = ( ( parseInt( cssVars[ 'field-size-input-height' ], 10 ) - parseInt( cssVars[ 'field-size-font-size' ], 10 ) - 6 ) / 2 ) + 'px'; // Update variables. appearance.variables.spacingGridRow = cssVars[ 'field-size-input-spacing' ]; appearance.variables.spacingGridColumn = '20px'; appearance.variables.spacingTab = '10px'; appearance.variables.colorText = WPForms.FrontendModern.getSolidColor( cssVars[ 'field-text-color' ] ); let maybeMenuBgColor = ! WPFormsUtils.cssColorsUtils.isTransparentColor( cssVars[ 'field-background-color' ] ) ? cssVars[ 'field-background-color' ] : cssVars[ 'field-menu-color' ]; maybeMenuBgColor = WPForms.FrontendModern.getSolidColor( maybeMenuBgColor ); // Update rules. appearance.rules = { '.Input': { border: cssVars[ 'field-border-size' ] + ' ' + cssVars[ 'field-border-style' ] + ' ' + cssVars[ 'field-border-color' ], borderRadius: cssVars[ 'field-border-radius' ], padding: `${ cssVars[ 'field-size-padding-v' ] } ${ cssVars[ 'field-size-padding-h' ] }`, fontSize: cssVars[ 'field-size-font-size' ], lineHeight: cssVars[ 'field-size-font-size' ], backgroundColor: cssVars[ 'field-background-color' ], boxShadow: 'none', outline: 'none', }, '.Input:focus': { backgroundColor: maybeMenuBgColor, borderColor: cssVars[ 'button-background-color' ], borderStyle: 'solid', boxShadow: '0 0 0 1px ' + cssVars[ 'button-background-color' ], outline: 'none', }, '.Input--invalid': { borderColor: cssVars[ 'label-error-color' ], boxShadow: 'none', color: appearance.variables.colorText, outline: 'none', }, '.Input--invalid:focus': { borderColor: cssVars[ 'label-error-color' ], boxShadow: '0 0 0 1px ' + cssVars[ 'label-error-color' ], outline: 'none', }, '.Input::placeholder': { color: WPForms.FrontendModern.getColorWithOpacity( cssVars[ 'field-text-color' ], '0.5' ), fontSize: cssVars[ 'field-size-font-size' ], }, '.CheckboxInput': { border: '1px solid ' + cssVars[ 'field-border-color' ], backgroundColor: cssVars[ 'field-background-color' ], }, '.CheckboxInput--checked': { borderColor: cssVars[ 'button-background-color' ], backgroundColor: cssVars[ 'button-background-color' ], }, '.CodeInput': { border: '1px solid ' + cssVars[ 'field-text-color' ], backgroundColor: maybeMenuBgColor, }, '.CodeInput:focus': { borderWidth: '2px', boxShadow: '0 0 0 1px ' + cssVars[ 'button-background-color' ], outline: 'none', }, '.CodeInput:disabled': { borderColor: WPForms.FrontendModern.getColorWithOpacity( cssVars[ 'field-border-color' ], '0.5' ), color: WPForms.FrontendModern.getColorWithOpacity( cssVars[ 'field-text-color' ], '0.5' ), }, '.Label': { fontSize: cssVars[ 'label-size-sublabel-font-size' ], margin: `0 0 ${ cssVars[ 'field-size-sublabel-spacing' ] } 0`, color: cssVars[ 'label-sublabel-color' ], opacity: Number( Boolean( appearance?.sublabelHide ) ), lineHeight: appearance?.sublabelHide ? 'inherit' : '0', }, '.Error': { fontSize: cssVars[ 'label-size-sublabel-font-size' ], margin: `${ cssVars[ 'field-size-sublabel-spacing' ] } 0 0 0`, color: cssVars[ 'label-error-color' ], }, '.Tab': { border: '1px solid ' + WPForms.FrontendModern.getColorWithOpacity( cssVars[ 'field-border-color' ], '0.5' ), borderRadius: cssVars[ 'field-border-radius' ], backgroundColor: 'transparent', boxShadow: 'none', marginTop: '0', }, '.Tab:focus': { border: '1px solid ' + WPForms.FrontendModern.getColorWithOpacity( cssVars[ 'button-background-color' ], '0.5' ), boxShadow: `0 0 0 3px ${ WPForms.FrontendModern.getColorWithOpacity( cssVars[ 'button-background-color' ], '0.25' ) }`, outline: 'none', }, '.Tab:hover': { border: `1px solid ${ cssVars[ 'field-border-color' ] }`, }, '.Tab--selected': { borderColor: cssVars[ 'button-background-color' ], boxShadow: `0 0 0 1px ${ cssVars[ 'button-background-color' ] }`, backgroundColor: cssVars[ 'field-background-color' ], }, '.Tab--selected:hover': { borderColor: cssVars[ 'button-background-color' ], }, '.Tab--selected:focus': { borderColor: cssVars[ 'button-background-color' ], boxShadow: `0 0 0 1px ${ cssVars[ 'button-background-color' ] }`, }, '.TabLabel': { color: cssVars[ 'field-text-color' ], }, '.TabIcon': { fill: WPForms.FrontendModern.getColorWithOpacity( cssVars[ 'field-text-color' ], '0.75' ), }, '.TabIcon--selected': { fill: cssVars[ 'field-text-color' ], }, '.TabIcon:hover': { color: cssVars[ 'field-text-color' ], fill: cssVars[ 'field-text-color' ], }, '.TabLabel--selected': { color: cssVars[ 'button-background-color' ], }, '.Block': { border: '1px solid ' + WPForms.FrontendModern.getColorWithOpacity( cssVars[ 'field-border-color' ], '0.5' ), backgroundColor: maybeMenuBgColor, borderRadius: cssVars[ 'field-border-radius' ], boxShadow: 'none', }, '.AccordionItem': { backgroundColor: maybeMenuBgColor, paddingLeft: 0, paddingRight: 0, color: cssVars[ 'field-text-color' ], }, '.PickerItem,': { backgroundColor: maybeMenuBgColor, }, }; formElements.update( { appearance } ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsStripePaymentElement.init(); assets/js/integrations/stripe/admin-builder-stripe-card-field.js000064400000012664147400353540021062 0ustar00/* global wpforms_builder, wpforms_builder_stripe_card_field */ /** * WPForms Stripe Card Field function. * * @since 1.8.2 */ 'use strict'; var WPFormsStripeCardField = window.WPFormsStripeCardField || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.8.2 * * @type {object} */ const app = { /** * Start the engine. * * @since 1.8.2 */ init: function() { app.bindUIActions(); }, /** * Process various events as a response to UI interactions. * * @since 1.8.2 */ bindUIActions: function() { $( document ).on( 'wpformsSaved', app.ajaxRequiredCheck ); $( document ).on( 'wpformsSaved', app.paymentsEnabledCheck ); $( document ).on( 'click', '#wpforms-add-fields-' + wpforms_builder_stripe_card_field.field_slug, app.stripeKeysCheck ); $( document ).on( 'change', '.wpforms-field-option-stripe-credit-card .wpforms-field-option-row-sublabel_position select', app.sublabelPositionChange ); $( document ).on( 'change', '.wpforms-field-option-stripe-credit-card .wpforms-field-option-row-link_email select', app.linkEmailChange ); $( document ).on( 'wpformsFieldAdd', app.disableAddCardButton ); $( document ).on( 'wpformsFieldDelete', app.enableAddCardButton ); $( document ).on( 'wpformsFieldDelete', app.maybeResetLinkEmailField ); }, /** * On form save notify users if AJAX submission is required. * * @since 1.8.2 */ ajaxRequiredCheck: function() { if ( ! $( '.wpforms-field.wpforms-field-' + wpforms_builder_stripe_card_field.field_slug ).length || $( '#wpforms-panel-field-settings-ajax_submit' ).is( ':checked' ) ) { return; } $.alert( { title: wpforms_builder.heads_up, content: wpforms_builder.stripe_ajax_required, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, /** * On form save notify users if Stripe payments are not enabled. * * @since 1.8.2 */ paymentsEnabledCheck: function() { if ( ! $( `.wpforms-field.wpforms-field-${ wpforms_builder_stripe_card_field.field_slug }:visible` ).length || $( '#wpforms-panel-field-stripe-enable' ).is( ':checked' ) || $( '#wpforms-panel-field-stripe-enable_one_time' ).is( ':checked' ) || $( '#wpforms-panel-field-stripe-enable_recurring' ).is( ':checked' ) ) { return; } $.alert( { title: wpforms_builder.heads_up, content: wpforms_builder.payments_enabled_required, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, /** * On adding Stripe Credit Card field notify users if Stripe keys are missing. * * @since 1.8.2 */ stripeKeysCheck: function() { if ( ! $( this ).hasClass( 'stripe-keys-required' ) ) { return; } $.alert( { title: wpforms_builder.heads_up, content: wpforms_builder.stripe_keys_required, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, /** * Disable "Add Card" button in the fields list. * * @since 1.8.2 * * @param {object} e Event object. * @param {number} id Field ID. * @param {string} type Field type. */ disableAddCardButton: function( e, id, type ) { if ( wpforms_builder_stripe_card_field.field_slug === type ) { $( '#wpforms-add-fields-' + wpforms_builder_stripe_card_field.field_slug ) .prop( 'disabled', true ); } }, /** * Enable "Add Card" button in the fields list. * * @since 1.8.2 * * @param {object} e Event object. * @param {number} id Field ID. * @param {string} type Field type. */ enableAddCardButton: function( e, id, type ) { if ( wpforms_builder_stripe_card_field.field_slug === type ) { $( '#wpforms-add-fields-' + wpforms_builder_stripe_card_field.field_slug ) .prop( 'disabled', false ); } }, /** * Switch sublabels preview mode. * * @since 1.8.2 */ sublabelPositionChange: function() { const fieldId = $( this ).parent().data( 'field-id' ), $fieldPreview = $( `#wpforms-field-${fieldId}` ).find( '.wpforms-stripe-payment-element' ); $fieldPreview.toggleClass( 'above' ); $fieldPreview.toggleClass( 'floating' ); $fieldPreview.find( 'select' ).val( $fieldPreview.hasClass( 'above' ) ? 'empty' : 'country' ); }, /** * Switch Link Email Field mapping. * * @since 1.8.2 */ linkEmailChange: function() { const fieldId = $( this ).parent().data( 'field-id' ); $( `#wpforms-field-${fieldId}` ).find( '.wpforms-stripe-link-email' ).toggleClass( 'wpforms-hidden', $( this ).val() !== '' ); }, /** * Maybe reset link email field if mapped email was removed. * * @since 1.8.2 * * @param {object} e Event object. * @param {number} id Field ID. * @param {string} type Field type. */ maybeResetLinkEmailField: function( e, id, type ) { if ( type !== 'email' ) { return; } $( '.wpforms-field-option-stripe-credit-card .wpforms-field-option-row-link_email select' ).trigger( 'change' ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsStripeCardField.init(); assets/js/integrations/stripe/admin-settings-stripe.js000064400000007420147400353540017276 0ustar00/* global wpforms_admin_settings_stripe, wpforms_admin */ /** * Stripe integration settings script. * * @since 1.8.2 */ const WPFormsSettingsStripe = window.WPFormsSettingsStripe || ( function( document, window, $ ) { /** * Elements holder. * * @since 1.8.2 * * @type {Object} */ const el = {}; /** * Runtime variables. * * @since 1.8.2 * * @type {Object} */ const vars = { alertTitle: wpforms_admin.heads_up, alertContent: wpforms_admin_settings_stripe.mode_update, ok: wpforms_admin.ok, hideClassName: 'wpforms-hide', }; /** * Public functions and properties. * * @since 1.8.2 */ const app = { /** * Start the engine. * * @since 1.8.2 */ init() { $( app.ready ); }, /** * Document ready. * * @since 1.8.2 */ ready() { app.setup(); app.bindEvents(); }, /** * Setup. Prepare some variables. * * @since 1.8.2 */ setup() { // Cache DOM elements. el.$wrapper = $( '.wpforms-admin-content-payments' ); el.$liveConnectionBlock = $( '.wpforms-stripe-connection-status-live' ); el.$testConnectionBlock = $( '.wpforms-stripe-connection-status-test' ); el.$testModeCheckbox = $( '#wpforms-setting-stripe-test-mode' ); el.copyButton = $( '#wpforms-setting-row-stripe-webhooks-endpoint-set .wpforms-copy-to-clipboard' ); el.webhookEndpointUrl = $( 'input#wpforms-stripe-webhook-endpoint-url' ); el.webhookMethod = $( 'input[name="stripe-webhooks-communication"]' ); }, /** * Bind events. * * @since 1.8.2 */ bindEvents() { el.$wrapper .on( 'change', '#wpforms-setting-stripe-test-mode', app.triggerModeSwitchAlert ); el.copyButton .on( 'click', app.copyWebhooksEndpoint ); el.webhookMethod .on( 'change', app.onMethodChange ); }, /** * Conditionally show Stripe mode switch warning. * * @since 1.8.2 */ triggerModeSwitchAlert() { if ( el.$testModeCheckbox.is( ':checked' ) ) { el.$liveConnectionBlock.addClass( vars.hideClassName ); el.$testConnectionBlock.removeClass( vars.hideClassName ); } else { el.$testConnectionBlock.addClass( vars.hideClassName ); el.$liveConnectionBlock.removeClass( vars.hideClassName ); } if ( $( '#wpforms-setting-row-stripe-connection-status .wpforms-connected' ).is( ':visible' ) ) { return; } $.alert( { title: vars.alertTitle, content: vars.alertContent, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: vars.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, /** * Copy webhooks endpoint URL to clipboard. * * @since 1.8.4 * * @param {Object} event Event object. */ copyWebhooksEndpoint( event ) { event.preventDefault(); // Use Clipboard API for modern browsers and HTTPS connections, in other cases use old-fashioned way. if ( navigator.clipboard ) { navigator.clipboard.writeText( el.webhookEndpointUrl.val() ).then( function() { el.copyButton.find( 'span' ).removeClass( 'dashicons-admin-page' ).addClass( 'dashicons-yes-alt' ); } ); return; } el.webhookEndpointUrl.attr( 'disabled', false ).focus().select(); document.execCommand( 'copy' ); el.copyButton.find( 'span' ).removeClass( 'dashicons-admin-page' ).addClass( 'dashicons-yes-alt' ); el.webhookEndpointUrl.attr( 'disabled', true ); }, /** * Update the endpoint URL. * * @since 1.8.4 */ onMethodChange() { const checked = el.webhookMethod.filter( ':checked' ).val(), newUrl = wpforms_admin_settings_stripe.webhook_urls[ checked ]; el.webhookEndpointUrl.val( newUrl ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsSettingsStripe.init(); assets/js/integrations/stripe/admin-builder-stripe.js000064400000011756147400353540017073 0ustar00/* global wpforms_builder, wpforms_builder_stripe */ /** * Stripe builder function. * * @since 1.8.2 */ const WPFormsStripe = window.WPFormsStripe || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.8.2 * * @type {Object} */ const app = { /** * Start the engine. * * @since 1.8.2 */ init() { $( app.ready ); }, /** * Initialized once the DOM is fully loaded. * * @since 1.8.2 */ ready() { if ( ! app.isLegacySettings() ) { return; } app.settingsDisplay(); app.settingsConditions(); app.bindUIActions(); }, /** * Process various events as a response to UI interactions. * * @since 1.8.2 */ bindUIActions() { $( document ) .on( 'wpformsFieldDelete', app.disableNotifications ) .on( 'wpformsSaved', app.requiredFieldsCheck ) .on( 'wpformsFieldUpdate', app.settingsDisplay ) .on( 'wpformsFieldUpdate', app.settingsConditions ); }, /** * Toggles visibility of the Stripe settings. * * If a credit card field has been added then reveal the settings, * otherwise hide them. * * @since 1.8.2 */ settingsDisplay() { const $alert = $( '#wpforms-stripe-credit-card-alert' ); const $content = $( '#stripe-provider' ); // Check if any Credit Card fields were added to the form. const ccFieldsAdded = wpforms_builder_stripe.field_slugs.filter( function( fieldSlug ) { const $el = $( '.wpforms-field-option-' + fieldSlug ); return $el.length ? $el : null; } ); if ( ccFieldsAdded.length ) { $alert.hide(); $content.find( '#wpforms-stripe-new-interface-alert, .wpforms-stripe-notice-info, .wpforms-panel-field, .wpforms-conditional-block-panel, h2' ).show(); } else { $alert.show(); $content.find( '#wpforms-stripe-new-interface-alert, .wpforms-stripe-notice-info, .wpforms-panel-field, .wpforms-conditional-block-panel, h2' ).hide(); $content.find( '#wpforms-panel-field-stripe-enable' ).prop( 'checked', false ); } }, /** * Toggles the visibility of the related settings. * * @since 1.8.2 */ settingsConditions() { $( '#wpforms-panel-field-stripe-enable' ).conditions( { conditions: { element: '#wpforms-panel-field-stripe-enable', type: 'checked', operator: 'is', }, actions: { if: { element: '.wpforms-panel-content-section-stripe-body', action: 'show', }, else: { element: '.wpforms-panel-content-section-stripe-body', action: 'hide', }, }, effect: 'appear', } ); $( '#wpforms-panel-field-stripe-recurring-enable' ).conditions( { conditions: { element: '#wpforms-panel-field-stripe-recurring-enable', type: 'checked', operator: 'is', }, actions: { if: { element: '#wpforms-panel-field-stripe-recurring-period-wrap,#wpforms-panel-field-stripe-recurring-conditional_logic-wrap,#wpforms-conditional-groups-payments-stripe-recurring,#wpforms-panel-field-stripe-recurring-email-wrap,#wpforms-panel-field-stripe-recurring-name-wrap', action: 'show', }, else: { element: '#wpforms-panel-field-stripe-recurring-period-wrap,#wpforms-panel-field-stripe-recurring-conditional_logic-wrap,#wpforms-conditional-groups-payments-stripe-recurring,#wpforms-panel-field-stripe-recurring-email-wrap,#wpforms-panel-field-stripe-recurring-name-wrap', action: 'hide', }, }, effect: 'appear', } ); }, /** * On form save notify users about required fields. * * @since 1.8.2 */ requiredFieldsCheck() { if ( ! $( '#wpforms-panel-field-stripe-enable' ).is( ':checked' ) || ! $( '#wpforms-panel-field-stripe-recurring-enable' ).is( ':checked' ) ) { return; } if ( $( '#wpforms-panel-field-stripe-recurring-email' ).val() ) { return; } $.alert( { title: wpforms_builder.heads_up, content: wpforms_builder.stripe_recurring_email, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, /** * Disable notifications. * * @since 1.8.2 * * @param {Object} e Event object. * @param {number} id Field ID. * @param {string} type Field type. */ disableNotifications( e, id, type ) { if ( ! wpforms_builder_stripe.field_slugs.includes( type ) ) { return; } const $notificationWrap = $( '.wpforms-panel-content-section-notifications [id*="-stripe-wrap"]' ); $notificationWrap.find( 'input[id*="-stripe"]' ).prop( 'checked', false ); $notificationWrap.addClass( 'wpforms-hidden' ); }, /** * Determine is legacy settings is loaded. * * @since 1.8.4 * * @return {boolean} True is legacy settings loaded. */ isLegacySettings() { return $( '#wpforms-panel-field-stripe-enable' ).length; }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsStripe.init(); assets/js/integrations/divi/formselector.js000064400000010534147400353540015175 0ustar00/* global wpforms_divi_builder, WPFormsRepeaterField, ETBuilderBackendDynamic */ import React, { Component } from 'react'; import PropTypes from 'prop-types'; /** * WPFormsSelector component. * * @since 1.6.3 */ class WPFormsSelector extends Component { /** * Module slug. * * @since 1.6.3 * * @type {string} */ static slug = 'wpforms_selector'; /** * Constructor. * * @since 1.6.3 * * @param {string} props List of properties. */ constructor( props ) { super( props ); this.state = { error: null, isLoading: true, form: null, }; } /** * Set types for properties. * * @since 1.6.3 * * @returns {object} Properties type. */ static get propTypes() { return { form_id: PropTypes.number, // eslint-disable-line camelcase show_title: PropTypes.string, // eslint-disable-line camelcase show_desc: PropTypes.string, // eslint-disable-line camelcase }; } /** * Check if form settings was updated. * * @since 1.6.3 * * @param {object} prevProps List of previous properties. */ componentDidUpdate( prevProps ) { if ( prevProps.form_id !== this.props.form_id || prevProps.show_title !== this.props.show_title || prevProps.show_desc !== this.props.show_desc ) { this.componentDidMount(); } } /** * Ajax request for form HTML. * * @since 1.6.3 */ componentDidMount() { const formData = new FormData(); formData.append( 'nonce', wpforms_divi_builder.nonce ); formData.append( 'action', 'wpforms_divi_preview' ); formData.append( 'form_id', this.props.form_id ); formData.append( 'show_title', this.props.show_title ); formData.append( 'show_desc', this.props.show_desc ); formData.append( 'divi_post_id', ETBuilderBackendDynamic?.postId ?? 0 ); fetch( wpforms_divi_builder.ajax_url, { method: 'POST', cache: 'no-cache', credentials: 'same-origin', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Cache-Control': 'no-cache', }, body: new URLSearchParams( formData ), }, ) .then( ( res ) => res.json() ) .then( ( result ) => { this.setState( { isLoading: false, form: result.data, } ); }, ( error ) => { this.setState( { isLoading: false, error, } ); }, ); } /** * Render module view. * * @since 1.6.3 * * @returns {JSX.Element} View for module. */ render() { const { error, isLoaded, form } = this.state, wrapperClasses = isLoaded ? 'wpforms-divi-form-preview loading' : 'wpforms-divi-form-preview'; if ( typeof this.props.form_id === 'undefined' || this.props.form_id === '' ) { return (
      ); } if ( error || ! form ) { return (
      ); } return (
      {
      }
      ); } } jQuery( window ) // Register custom modules. .on( 'et_builder_api_ready', ( event, API ) => { API.registerModules( [ WPFormsSelector ] ); } ) // Re-initialize WPForms frontend. .on( 'wpformsDiviModuleDisplay', () => { window.wpforms.init(); } ); jQuery( document ) .on( 'wpformsReady', function() { const $ = jQuery; // Make all the modern dropdowns disabled. $( '.choicesjs-select' ).each( function() { const $instance = $( this ).data( 'choicesjs' ); if ( $instance && typeof $instance.disable === 'function' ) { $instance.disable(); } } ); // Init Repeater fields. if ( 'undefined' !== typeof WPFormsRepeaterField ) { WPFormsRepeaterField.ready(); } } ); assets/js/integrations/divi/formselector.es5.min.js000064400000151050147400353540016451 0ustar00!function n(o,a,i){function u(r,e){if(!a[r]){if(!o[r]){var t="function"==typeof require&&require;if(!e&&t)return t(r,!0);if(c)return c(r,!0);throw new Error("Cannot find module '"+r+"'")}e=a[r]={exports:{}};o[r][0].call(e.exports,function(e){var t=o[r][1][e];return u(t||e)},e,e.exports,n,o,a,i)}return a[r].exports}for(var c="function"==typeof require&&require,e=0;e import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?",t),"default"in t||w("lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))",t),t.default;throw r._result}function Ee(e){return"string"==typeof e||"function"==typeof e||!!(e===f||e===L||K||e===o||e===i||e===F||J||e===V||Y||H||G)||"object"==typeof e&&null!==e&&(e.$$typeof===u||e.$$typeof===y||e.$$typeof===A||e.$$typeof===a||e.$$typeof===d||e.$$typeof===Ie||void 0!==e.getModuleId)}function R(){var e=z.current;return null===e&&w("Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem."),e}var ke,Re,Ce,Pe,xe,Te,$e,Ie=Symbol.for("react.module.reference"),C=0;function Ne(){}var De,Me=l.ReactCurrentDispatcher;function P(e){if(void 0===De)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);De=t&&t[1]||""}return"\n"+De+e}var Le=!(Ne.__reactDisabledLog=!0),Ae=new("function"==typeof WeakMap?WeakMap:Map);function Fe(t,e){if(!t||Le)return"";var r,n=Ae.get(t);if(void 0!==n)return n;Le=!0;var o,a,n=Error.prepareStackTrace;Error.prepareStackTrace=void 0,o=Me.current,Me.current=null,0===C&&(ke=console.log,Re=console.info,Ce=console.warn,Pe=console.error,xe=console.group,Te=console.groupCollapsed,$e=console.groupEnd,a={configurable:!0,enumerable:!0,value:Ne,writable:!0},Object.defineProperties(console,{info:a,log:a,warn:a,error:a,group:a,groupCollapsed:a,groupEnd:a})),C++;try{if(e){var i=function(){throw Error()};if(Object.defineProperty(i.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(i,[])}catch(e){r=e}Reflect.construct(t,[],i)}else{try{i.call()}catch(e){r=e}t.call(i.prototype)}}else{try{throw Error()}catch(e){r=e}t()}}catch(e){if(e&&r&&"string"==typeof e.stack){for(var u,c=e.stack.split("\n"),s=r.stack.split("\n"),l=c.length-1,f=s.length-1;1<=l&&0<=f&&c[l]!==s[f];)f--;for(;1<=l&&0<=f;l--,f--)if(c[l]!==s[f]){if(1!==l||1!==f)do{if(l--,--f<0||c[l]!==s[f])return u="\n"+c[l].replace(" at new "," at "),t.displayName&&u.includes("")&&(u=u.replace("",t.displayName)),"function"==typeof t&&Ae.set(t,u),u}while(1<=l&&0<=f);break}}}finally{Le=!1,Me.current=o,0===--C&&(a={configurable:!0,enumerable:!0,writable:!0},Object.defineProperties(console,{log:m({},a,{value:ke}),info:m({},a,{value:Re}),warn:m({},a,{value:Ce}),error:m({},a,{value:Pe}),group:m({},a,{value:xe}),groupCollapsed:m({},a,{value:Te}),groupEnd:m({},a,{value:$e})})),C<0&&w("disabledDepth fell below zero. This is a bug in React. Please file an issue."),Error.prepareStackTrace=n}e=t?t.displayName||t.name:"",i=e?P(e):"";return"function"==typeof t&&Ae.set(t,i),i}function x(e,t,r){if(null!=e){if("function"==typeof e)return Fe(e,!(!(n=(n=e).prototype)||!n.isReactComponent));var n;if("string"==typeof e)return P(e);switch(e){case i:return P("Suspense");case F:return P("SuspenseList")}if("object"==typeof e)switch(e.$$typeof){case d:return Fe(e.render,!1);case y:return x(e.type,t,r);case u:var o=e._payload,a=e._init;try{return x(a(o),t,r)}catch(e){}}}return""}var Ve={},Ue=l.ReactDebugCurrentFrame;function T(e){var t;e?(t=e._owner,e=x(e.type,e._source,t?t.type:null),Ue.setExtraStackFrame(e)):Ue.setExtraStackFrame(null)}function $(e){var t;e?(t=e._owner,B(x(e.type,e._source,t?t.type:null))):B(null)}function We(){if(g.current){var e=O(g.current.type);if(e)return"\n\nCheck the render method of `"+e+"`."}return""}var qe=!1,ze={};function Be(e,t){var r;!e._store||e._store.validated||null!=e.key||(e._store.validated=!0,t=t,(r=We())||(t="string"==typeof t?t:t.displayName||t.name)&&(r="\n\nCheck the top-level render call using <"+t+">."),ze[t=r])||(ze[t]=!0,r="",e&&e._owner&&e._owner!==g.current&&(r=" It was passed a child from "+O(e._owner.type)+"."),$(e),w('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',t,r),$(null))}function Ye(e,t){if("object"==typeof e)if(S(e))for(var r=0;r",n=" Did you accidentally export a JSX literal instead of a component?"):o=typeof e,w("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",o,n)),ye.apply(this,arguments));if(null!=t){if(a)for(var i=2;i ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.");var t=new MessageChannel;t.port1.onmessage=e,t.port2.postMessage(void 0)}}I(o)}catch(e){r(e)}else t(e)}var Ze=!1;function et(t){if(!Ze){Ze=!0;var r=0;try{for(;r is not supported and will be removed in a future major release. Did you mean to render instead?")),t.Provider},set:function(e){t.Provider=e}},_currentValue:{get:function(){return t._currentValue},set:function(e){t._currentValue=e}},_currentValue2:{get:function(){return t._currentValue2},set:function(e){t._currentValue2=e}},_threadCount:{get:function(){return t._threadCount},set:function(e){t._threadCount=e}},Consumer:{get:function(){return r||(r=!0,w("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),t.Consumer}},displayName:{get:function(){return t.displayName},set:function(e){o||(_("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.",e),o=!0)}}}),t.Consumer=e,t._currentRenderer=null,t._currentRenderer2=null,t},ot.createElement=e,ot.createFactory=rt,ot.createRef=function(){var e={current:null};return Object.seal(e),e},ot.forwardRef=function(t){null!=t&&t.$$typeof===y?w("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):"function"!=typeof t?w("forwardRef requires a render function but was given %s.",null===t?"null":typeof t):0!==t.length&&2!==t.length&&w("forwardRef render functions accept exactly two parameters: props and ref. %s",1===t.length?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),null==t||null==t.defaultProps&&null==t.propTypes||w("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?");var r,e={$$typeof:d,render:t};return Object.defineProperty(e,"displayName",{enumerable:!1,configurable:!0,get:function(){return r},set:function(e){r=e,t.name||t.displayName||(t.displayName=e)}}),e},ot.isValidElement=E,ot.lazy=function(e){var t,r,n={$$typeof:u,_payload:{_status:b,_result:e},_init:je};return Object.defineProperties(n,{defaultProps:{configurable:!0,get:function(){return t},set:function(e){w("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),t=e,Object.defineProperty(n,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return r},set:function(e){w("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),r=e,Object.defineProperty(n,"propTypes",{enumerable:!0})}}}),n},ot.memo=function(t,e){Ee(t)||w("memo: The first argument must be a component. Instead received: %s",null===t?"null":typeof t);var r,e={$$typeof:y,type:t,compare:void 0===e?null:e};return Object.defineProperty(e,"displayName",{enumerable:!1,configurable:!0,get:function(){return r},set:function(e){r=e,t.name||t.displayName||(t.displayName=e)}}),e},ot.startTransition=function(e,t){var r=c.transition,n=(c.transition={},c.transition);c.transition._updatedFibers=new Set;try{e()}finally{null===(c.transition=r)&&n._updatedFibers&&(10 ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),e):(r=t,D(i),0===N?(null!==(a=s.current)&&(et(a),s.current=null),{then:function(e,t){null===s.current?(s.current=[],Xe(r,e,t)):e(r)}}):{then:function(e,t){e(r)}})},ot.useCallback=function(e,t){return R().useCallback(e,t)},ot.useContext=function(e){var t,r=R();return void 0!==e._context&&((t=e._context).Consumer===e?w("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):t.Provider===e&&w("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")),r.useContext(e)},ot.useDebugValue=function(e,t){return R().useDebugValue(e,t)},ot.useDeferredValue=function(e){return R().useDeferredValue(e)},ot.useEffect=function(e,t){return R().useEffect(e,t)},ot.useId=function(){return R().useId()},ot.useImperativeHandle=function(e,t,r){return R().useImperativeHandle(e,t,r)},ot.useInsertionEffect=function(e,t){return R().useInsertionEffect(e,t)},ot.useLayoutEffect=function(e,t){return R().useLayoutEffect(e,t)},ot.useMemo=function(e,t){return R().useMemo(e,t)},ot.useReducer=function(e,t,r){return R().useReducer(e,t,r)},ot.useRef=function(e){return R().useRef(e)},ot.useState=function(e){return R().useState(e)},ot.useSyncExternalStore=function(e,t,r){return R().useSyncExternalStore(e,t,r)},ot.useTransition=function(){return R().useTransition()},ot.version="18.2.0","undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)}}.call(this,e("hmr7eR"))},{hmr7eR:1}],13:[function(e,t,r){"use strict";var f=Symbol.for("react.element"),p=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),u=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),s=Symbol.for("react.suspense"),l=Symbol.for("react.memo"),d=Symbol.for("react.lazy"),y=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,b={};function v(e,t,r){this.props=e,this.context=t,this.refs=b,this.updater=r||m}function g(){}function _(e,t,r){this.props=e,this.context=t,this.refs=b,this.updater=r||m}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},g.prototype=v.prototype;var w=_.prototype=new g,S=(w.constructor=_,h(w,v.prototype),w.isPureReactComponent=!0,Array.isArray),O=Object.prototype.hasOwnProperty,j={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,r){var n,o={},a=null,i=null;if(null!=t)for(n in void 0!==t.ref&&(i=t.ref),void 0!==t.key&&(a=""+t.key),t)O.call(t,n)&&!E.hasOwnProperty(n)&&(o[n]=t[n]);var u=arguments.length-2;if(1===u)o.children=r;else if(1 0) { var fn = queue.shift(); fn(); } } }, true); return function nextTick(fn) { queue.push(fn); window.postMessage('process-tick', '*'); }; } return function nextTick(fn) { setTimeout(fn, 0); }; })(); process.title = 'browser'; process.browser = true; process.env = {}; process.argv = []; function noop() {} process.on = noop; process.addListener = noop; process.once = noop; process.off = noop; process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; process.binding = function (name) { throw new Error('process.binding is not supported'); } // TODO(shtylman) process.cwd = function () { return '/' }; process.chdir = function (dir) { throw new Error('process.chdir is not supported'); }; },{}],2:[function(require,module,exports){ /* object-assign (c) Sindre Sorhus @license MIT */ 'use strict'; /* eslint-disable no-unused-vars */ var getOwnPropertySymbols = Object.getOwnPropertySymbols; var hasOwnProperty = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { if (val === null || val === undefined) { throw new TypeError('Object.assign cannot be called with null or undefined'); } return Object(val); } function shouldUseNative() { try { if (!Object.assign) { return false; } // Detect buggy property enumeration order in older V8 versions. // https://bugs.chromium.org/p/v8/issues/detail?id=4118 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers test1[5] = 'de'; if (Object.getOwnPropertyNames(test1)[0] === '5') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test2 = {}; for (var i = 0; i < 10; i++) { test2['_' + String.fromCharCode(i)] = i; } var order2 = Object.getOwnPropertyNames(test2).map(function (n) { return test2[n]; }); if (order2.join('') !== '0123456789') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test3 = {}; 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { test3[letter] = letter; }); if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { return false; } return true; } catch (err) { // We don't expect any of the above to throw, but better to be safe. return false; } } module.exports = shouldUseNative() ? Object.assign : function (target, source) { var from; var to = toObject(target); var symbols; for (var s = 1; s < arguments.length; s++) { from = Object(arguments[s]); for (var key in from) { if (hasOwnProperty.call(from, key)) { to[key] = from[key]; } } if (getOwnPropertySymbols) { symbols = getOwnPropertySymbols(from); for (var i = 0; i < symbols.length; i++) { if (propIsEnumerable.call(from, symbols[i])) { to[symbols[i]] = from[symbols[i]]; } } } } return to; }; },{}],3:[function(require,module,exports){ (function (process){ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var printWarning = function() {}; if (process.env.NODE_ENV !== 'production') { var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret'); var loggedTypeFailures = {}; var has = require('./lib/has'); printWarning = function(text) { var message = 'Warning: ' + text; if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) { /**/ } }; } /** * Assert that the values match with the type specs. * Error messages are memorized and will only be shown once. * * @param {object} typeSpecs Map of name to a ReactPropType * @param {object} values Runtime values that need to be type-checked * @param {string} location e.g. "prop", "context", "child context" * @param {string} componentName Name of the component for error messages. * @param {?Function} getStack Returns the component stack. * @private */ function checkPropTypes(typeSpecs, values, location, componentName, getStack) { if (process.env.NODE_ENV !== 'production') { for (var typeSpecName in typeSpecs) { if (has(typeSpecs, typeSpecName)) { var error; // Prop type validation may throw. In case they do, we don't want to // fail the render phase where it didn't fail before. So we log it. // After these have been cleaned up, we'll let them throw. try { // This is intentionally an invariant that gets caught. It's the same // behavior as without this statement except with a better message. if (typeof typeSpecs[typeSpecName] !== 'function') { var err = Error( (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.' ); err.name = 'Invariant Violation'; throw err; } error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret); } catch (ex) { error = ex; } if (error && !(error instanceof Error)) { printWarning( (componentName || 'React class') + ': type specification of ' + location + ' `' + typeSpecName + '` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).' ); } if (error instanceof Error && !(error.message in loggedTypeFailures)) { // Only monitor this failure once because there tends to be a lot of the // same error. loggedTypeFailures[error.message] = true; var stack = getStack ? getStack() : ''; printWarning( 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '') ); } } } } } /** * Resets warning cache when testing. * * @private */ checkPropTypes.resetWarningCache = function() { if (process.env.NODE_ENV !== 'production') { loggedTypeFailures = {}; } } module.exports = checkPropTypes; }).call(this,require("hmr7eR")) },{"./lib/ReactPropTypesSecret":7,"./lib/has":8,"hmr7eR":1}],4:[function(require,module,exports){ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret'); function emptyFunction() {} function emptyFunctionWithReset() {} emptyFunctionWithReset.resetWarningCache = emptyFunction; module.exports = function() { function shim(props, propName, componentName, location, propFullName, secret) { if (secret === ReactPropTypesSecret) { // It is still safe when called from React. return; } var err = new Error( 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types' ); err.name = 'Invariant Violation'; throw err; }; shim.isRequired = shim; function getShim() { return shim; }; // Important! // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`. var ReactPropTypes = { array: shim, bigint: shim, bool: shim, func: shim, number: shim, object: shim, string: shim, symbol: shim, any: shim, arrayOf: getShim, element: shim, elementType: shim, instanceOf: getShim, node: shim, objectOf: getShim, oneOf: getShim, oneOfType: getShim, shape: getShim, exact: getShim, checkPropTypes: emptyFunctionWithReset, resetWarningCache: emptyFunction }; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; },{"./lib/ReactPropTypesSecret":7}],5:[function(require,module,exports){ (function (process){ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var ReactIs = require('react-is'); var assign = require('object-assign'); var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret'); var has = require('./lib/has'); var checkPropTypes = require('./checkPropTypes'); var printWarning = function() {}; if (process.env.NODE_ENV !== 'production') { printWarning = function(text) { var message = 'Warning: ' + text; if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) {} }; } function emptyFunctionThatReturnsNull() { return null; } module.exports = function(isValidElement, throwOnDirectAccess) { /* global Symbol */ var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. /** * Returns the iterator method function contained on the iterable object. * * Be sure to invoke the function with the iterable as context: * * var iteratorFn = getIteratorFn(myIterable); * if (iteratorFn) { * var iterator = iteratorFn.call(myIterable); * ... * } * * @param {?object} maybeIterable * @return {?function} */ function getIteratorFn(maybeIterable) { var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); if (typeof iteratorFn === 'function') { return iteratorFn; } } /** * Collection of methods that allow declaration and validation of props that are * supplied to React components. Example usage: * * var Props = require('ReactPropTypes'); * var MyArticle = React.createClass({ * propTypes: { * // An optional string prop named "description". * description: Props.string, * * // A required enum prop named "category". * category: Props.oneOf(['News','Photos']).isRequired, * * // A prop named "dialog" that requires an instance of Dialog. * dialog: Props.instanceOf(Dialog).isRequired * }, * render: function() { ... } * }); * * A more formal specification of how these methods are used: * * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) * decl := ReactPropTypes.{type}(.isRequired)? * * Each and every declaration produces a function with the same signature. This * allows the creation of custom validation functions. For example: * * var MyLink = React.createClass({ * propTypes: { * // An optional string or URI prop named "href". * href: function(props, propName, componentName) { * var propValue = props[propName]; * if (propValue != null && typeof propValue !== 'string' && * !(propValue instanceof URI)) { * return new Error( * 'Expected a string or an URI for ' + propName + ' in ' + * componentName * ); * } * } * }, * render: function() {...} * }); * * @internal */ var ANONYMOUS = '<>'; // Important! // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. var ReactPropTypes = { array: createPrimitiveTypeChecker('array'), bigint: createPrimitiveTypeChecker('bigint'), bool: createPrimitiveTypeChecker('boolean'), func: createPrimitiveTypeChecker('function'), number: createPrimitiveTypeChecker('number'), object: createPrimitiveTypeChecker('object'), string: createPrimitiveTypeChecker('string'), symbol: createPrimitiveTypeChecker('symbol'), any: createAnyTypeChecker(), arrayOf: createArrayOfTypeChecker, element: createElementTypeChecker(), elementType: createElementTypeTypeChecker(), instanceOf: createInstanceTypeChecker, node: createNodeChecker(), objectOf: createObjectOfTypeChecker, oneOf: createEnumTypeChecker, oneOfType: createUnionTypeChecker, shape: createShapeTypeChecker, exact: createStrictShapeTypeChecker, }; /** * inlined Object.is polyfill to avoid requiring consumers ship their own * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ /*eslint-disable no-self-compare*/ function is(x, y) { // SameValue algorithm if (x === y) { // Steps 1-5, 7-10 // Steps 6.b-6.e: +0 != -0 return x !== 0 || 1 / x === 1 / y; } else { // Step 6.a: NaN == NaN return x !== x && y !== y; } } /*eslint-enable no-self-compare*/ /** * We use an Error-like object for backward compatibility as people may call * PropTypes directly and inspect their output. However, we don't use real * Errors anymore. We don't inspect their stack anyway, and creating them * is prohibitively expensive if they are created too often, such as what * happens in oneOfType() for any type before the one that matched. */ function PropTypeError(message, data) { this.message = message; this.data = data && typeof data === 'object' ? data: {}; this.stack = ''; } // Make `instanceof Error` still work for returned errors. PropTypeError.prototype = Error.prototype; function createChainableTypeChecker(validate) { if (process.env.NODE_ENV !== 'production') { var manualPropTypeCallCache = {}; var manualPropTypeWarningCount = 0; } function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { componentName = componentName || ANONYMOUS; propFullName = propFullName || propName; if (secret !== ReactPropTypesSecret) { if (throwOnDirectAccess) { // New behavior only for users of `prop-types` package var err = new Error( 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types' ); err.name = 'Invariant Violation'; throw err; } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') { // Old behavior for people using React.PropTypes var cacheKey = componentName + ':' + propName; if ( !manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors manualPropTypeWarningCount < 3 ) { printWarning( 'You are manually calling a React.PropTypes validation ' + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.' ); manualPropTypeCallCache[cacheKey] = true; manualPropTypeWarningCount++; } } } if (props[propName] == null) { if (isRequired) { if (props[propName] === null) { return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); } return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); } return null; } else { return validate(props, propName, componentName, location, propFullName); } } var chainedCheckType = checkType.bind(null, false); chainedCheckType.isRequired = checkType.bind(null, true); return chainedCheckType; } function createPrimitiveTypeChecker(expectedType) { function validate(props, propName, componentName, location, propFullName, secret) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== expectedType) { // `propValue` being instance of, say, date/regexp, pass the 'object' // check, but we can offer a more precise error message here rather than // 'of type `object`'. var preciseType = getPreciseType(propValue); return new PropTypeError( 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'), {expectedType: expectedType} ); } return null; } return createChainableTypeChecker(validate); } function createAnyTypeChecker() { return createChainableTypeChecker(emptyFunctionThatReturnsNull); } function createArrayOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); } var propValue = props[propName]; if (!Array.isArray(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); } for (var i = 0; i < propValue.length; i++) { var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); if (error instanceof Error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createElementTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!isValidElement(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); } return null; } return createChainableTypeChecker(validate); } function createElementTypeTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!ReactIs.isValidElementType(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); } return null; } return createChainableTypeChecker(validate); } function createInstanceTypeChecker(expectedClass) { function validate(props, propName, componentName, location, propFullName) { if (!(props[propName] instanceof expectedClass)) { var expectedClassName = expectedClass.name || ANONYMOUS; var actualClassName = getClassName(props[propName]); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); } return null; } return createChainableTypeChecker(validate); } function createEnumTypeChecker(expectedValues) { if (!Array.isArray(expectedValues)) { if (process.env.NODE_ENV !== 'production') { if (arguments.length > 1) { printWarning( 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).' ); } else { printWarning('Invalid argument supplied to oneOf, expected an array.'); } } return emptyFunctionThatReturnsNull; } function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; for (var i = 0; i < expectedValues.length; i++) { if (is(propValue, expectedValues[i])) { return null; } } var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { var type = getPreciseType(value); if (type === 'symbol') { return String(value); } return value; }); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); } return createChainableTypeChecker(validate); } function createObjectOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); } var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); } for (var key in propValue) { if (has(propValue, key)) { var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error instanceof Error) { return error; } } } return null; } return createChainableTypeChecker(validate); } function createUnionTypeChecker(arrayOfTypeCheckers) { if (!Array.isArray(arrayOfTypeCheckers)) { process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0; return emptyFunctionThatReturnsNull; } for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; if (typeof checker !== 'function') { printWarning( 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.' ); return emptyFunctionThatReturnsNull; } } function validate(props, propName, componentName, location, propFullName) { var expectedTypes = []; for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret); if (checkerResult == null) { return null; } if (checkerResult.data && has(checkerResult.data, 'expectedType')) { expectedTypes.push(checkerResult.data.expectedType); } } var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': ''; return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.')); } return createChainableTypeChecker(validate); } function createNodeChecker() { function validate(props, propName, componentName, location, propFullName) { if (!isNode(props[propName])) { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); } return null; } return createChainableTypeChecker(validate); } function invalidValidatorError(componentName, location, propFullName, key, type) { return new PropTypeError( (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.' ); } function createShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } for (var key in shapeTypes) { var checker = shapeTypes[key]; if (typeof checker !== 'function') { return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createStrictShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } // We need to check all keys in case some are required but missing from props. var allKeys = assign({}, props[propName], shapeTypes); for (var key in allKeys) { var checker = shapeTypes[key]; if (has(shapeTypes, key) && typeof checker !== 'function') { return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); } if (!checker) { return new PropTypeError( 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') ); } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function isNode(propValue) { switch (typeof propValue) { case 'number': case 'string': case 'undefined': return true; case 'boolean': return !propValue; case 'object': if (Array.isArray(propValue)) { return propValue.every(isNode); } if (propValue === null || isValidElement(propValue)) { return true; } var iteratorFn = getIteratorFn(propValue); if (iteratorFn) { var iterator = iteratorFn.call(propValue); var step; if (iteratorFn !== propValue.entries) { while (!(step = iterator.next()).done) { if (!isNode(step.value)) { return false; } } } else { // Iterator will provide entry [k,v] tuples rather than values. while (!(step = iterator.next()).done) { var entry = step.value; if (entry) { if (!isNode(entry[1])) { return false; } } } } } else { return false; } return true; default: return false; } } function isSymbol(propType, propValue) { // Native Symbol. if (propType === 'symbol') { return true; } // falsy value can't be a Symbol if (!propValue) { return false; } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' if (propValue['@@toStringTag'] === 'Symbol') { return true; } // Fallback for non-spec compliant Symbols which are polyfilled. if (typeof Symbol === 'function' && propValue instanceof Symbol) { return true; } return false; } // Equivalent of `typeof` but with special handling for array and regexp. function getPropType(propValue) { var propType = typeof propValue; if (Array.isArray(propValue)) { return 'array'; } if (propValue instanceof RegExp) { // Old webkits (at least until Android 4.0) return 'function' rather than // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ // passes PropTypes.object. return 'object'; } if (isSymbol(propType, propValue)) { return 'symbol'; } return propType; } // This handles more types than `getPropType`. Only used for error messages. // See `createPrimitiveTypeChecker`. function getPreciseType(propValue) { if (typeof propValue === 'undefined' || propValue === null) { return '' + propValue; } var propType = getPropType(propValue); if (propType === 'object') { if (propValue instanceof Date) { return 'date'; } else if (propValue instanceof RegExp) { return 'regexp'; } } return propType; } // Returns a string that is postfixed to a warning about an invalid type. // For example, "undefined" or "of type array" function getPostfixForTypeWarning(value) { var type = getPreciseType(value); switch (type) { case 'array': case 'object': return 'an ' + type; case 'boolean': case 'date': case 'regexp': return 'a ' + type; default: return type; } } // Returns class name of the object, if any. function getClassName(propValue) { if (!propValue.constructor || !propValue.constructor.name) { return ANONYMOUS; } return propValue.constructor.name; } ReactPropTypes.checkPropTypes = checkPropTypes; ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; }).call(this,require("hmr7eR")) },{"./checkPropTypes":3,"./lib/ReactPropTypesSecret":7,"./lib/has":8,"hmr7eR":1,"object-assign":2,"react-is":11}],6:[function(require,module,exports){ (function (process){ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ if (process.env.NODE_ENV !== 'production') { var ReactIs = require('react-is'); // By explicitly using `prop-types` you are opting into new development behavior. // http://fb.me/prop-types-in-prod var throwOnDirectAccess = true; module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess); } else { // By explicitly using `prop-types` you are opting into new production behavior. // http://fb.me/prop-types-in-prod module.exports = require('./factoryWithThrowingShims')(); } }).call(this,require("hmr7eR")) },{"./factoryWithThrowingShims":4,"./factoryWithTypeCheckers":5,"hmr7eR":1,"react-is":11}],7:[function(require,module,exports){ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; module.exports = ReactPropTypesSecret; },{}],8:[function(require,module,exports){ module.exports = Function.call.bind(Object.prototype.hasOwnProperty); },{}],9:[function(require,module,exports){ (function (process){ /** @license React v16.13.1 * react-is.development.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; if (process.env.NODE_ENV !== "production") { (function() { 'use strict'; // The Symbol used to tag the ReactElement-like types. If there is no native Symbol // nor polyfill, then a plain number is used for performance. var hasSymbol = typeof Symbol === 'function' && Symbol.for; var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary // (unstable) APIs that have been removed. Can we remove the symbols? var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9; var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7; function isValidElementType(type) { return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); } function typeOf(object) { if (typeof object === 'object' && object !== null) { var $$typeof = object.$$typeof; switch ($$typeof) { case REACT_ELEMENT_TYPE: var type = object.type; switch (type) { case REACT_ASYNC_MODE_TYPE: case REACT_CONCURRENT_MODE_TYPE: case REACT_FRAGMENT_TYPE: case REACT_PROFILER_TYPE: case REACT_STRICT_MODE_TYPE: case REACT_SUSPENSE_TYPE: return type; default: var $$typeofType = type && type.$$typeof; switch ($$typeofType) { case REACT_CONTEXT_TYPE: case REACT_FORWARD_REF_TYPE: case REACT_LAZY_TYPE: case REACT_MEMO_TYPE: case REACT_PROVIDER_TYPE: return $$typeofType; default: return $$typeof; } } case REACT_PORTAL_TYPE: return $$typeof; } } return undefined; } // AsyncMode is deprecated along with isAsyncMode var AsyncMode = REACT_ASYNC_MODE_TYPE; var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; var ContextConsumer = REACT_CONTEXT_TYPE; var ContextProvider = REACT_PROVIDER_TYPE; var Element = REACT_ELEMENT_TYPE; var ForwardRef = REACT_FORWARD_REF_TYPE; var Fragment = REACT_FRAGMENT_TYPE; var Lazy = REACT_LAZY_TYPE; var Memo = REACT_MEMO_TYPE; var Portal = REACT_PORTAL_TYPE; var Profiler = REACT_PROFILER_TYPE; var StrictMode = REACT_STRICT_MODE_TYPE; var Suspense = REACT_SUSPENSE_TYPE; var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated function isAsyncMode(object) { { if (!hasWarnedAboutDeprecatedIsAsyncMode) { hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); } } return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; } function isConcurrentMode(object) { return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; } function isContextConsumer(object) { return typeOf(object) === REACT_CONTEXT_TYPE; } function isContextProvider(object) { return typeOf(object) === REACT_PROVIDER_TYPE; } function isElement(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; } function isForwardRef(object) { return typeOf(object) === REACT_FORWARD_REF_TYPE; } function isFragment(object) { return typeOf(object) === REACT_FRAGMENT_TYPE; } function isLazy(object) { return typeOf(object) === REACT_LAZY_TYPE; } function isMemo(object) { return typeOf(object) === REACT_MEMO_TYPE; } function isPortal(object) { return typeOf(object) === REACT_PORTAL_TYPE; } function isProfiler(object) { return typeOf(object) === REACT_PROFILER_TYPE; } function isStrictMode(object) { return typeOf(object) === REACT_STRICT_MODE_TYPE; } function isSuspense(object) { return typeOf(object) === REACT_SUSPENSE_TYPE; } exports.AsyncMode = AsyncMode; exports.ConcurrentMode = ConcurrentMode; exports.ContextConsumer = ContextConsumer; exports.ContextProvider = ContextProvider; exports.Element = Element; exports.ForwardRef = ForwardRef; exports.Fragment = Fragment; exports.Lazy = Lazy; exports.Memo = Memo; exports.Portal = Portal; exports.Profiler = Profiler; exports.StrictMode = StrictMode; exports.Suspense = Suspense; exports.isAsyncMode = isAsyncMode; exports.isConcurrentMode = isConcurrentMode; exports.isContextConsumer = isContextConsumer; exports.isContextProvider = isContextProvider; exports.isElement = isElement; exports.isForwardRef = isForwardRef; exports.isFragment = isFragment; exports.isLazy = isLazy; exports.isMemo = isMemo; exports.isPortal = isPortal; exports.isProfiler = isProfiler; exports.isStrictMode = isStrictMode; exports.isSuspense = isSuspense; exports.isValidElementType = isValidElementType; exports.typeOf = typeOf; })(); } }).call(this,require("hmr7eR")) },{"hmr7eR":1}],10:[function(require,module,exports){ /** @license React v16.13.1 * react-is.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict';var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b? Symbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119; function z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d; exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t}; exports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p}; exports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z; },{}],11:[function(require,module,exports){ (function (process){ 'use strict'; if (process.env.NODE_ENV === 'production') { module.exports = require('./cjs/react-is.production.min.js'); } else { module.exports = require('./cjs/react-is.development.js'); } }).call(this,require("hmr7eR")) },{"./cjs/react-is.development.js":9,"./cjs/react-is.production.min.js":10,"hmr7eR":1}],12:[function(require,module,exports){ (function (process){ /** * @license React * react.development.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; if (process.env.NODE_ENV !== "production") { (function() { 'use strict'; /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ if ( typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart === 'function' ) { __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error()); } var ReactVersion = '18.2.0'; // ATTENTION // When adding new symbols to this file, // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' // The Symbol used to tag the ReactElement-like types. var REACT_ELEMENT_TYPE = Symbol.for('react.element'); var REACT_PORTAL_TYPE = Symbol.for('react.portal'); var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode'); var REACT_PROFILER_TYPE = Symbol.for('react.profiler'); var REACT_PROVIDER_TYPE = Symbol.for('react.provider'); var REACT_CONTEXT_TYPE = Symbol.for('react.context'); var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref'); var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense'); var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list'); var REACT_MEMO_TYPE = Symbol.for('react.memo'); var REACT_LAZY_TYPE = Symbol.for('react.lazy'); var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen'); var MAYBE_ITERATOR_SYMBOL = Symbol.iterator; var FAUX_ITERATOR_SYMBOL = '@@iterator'; function getIteratorFn(maybeIterable) { if (maybeIterable === null || typeof maybeIterable !== 'object') { return null; } var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; if (typeof maybeIterator === 'function') { return maybeIterator; } return null; } /** * Keeps track of the current dispatcher. */ var ReactCurrentDispatcher = { /** * @internal * @type {ReactComponent} */ current: null }; /** * Keeps track of the current batch's configuration such as how long an update * should suspend for if it needs to. */ var ReactCurrentBatchConfig = { transition: null }; var ReactCurrentActQueue = { current: null, // Used to reproduce behavior of `batchedUpdates` in legacy mode. isBatchingLegacy: false, didScheduleLegacyUpdate: false }; /** * Keeps track of the current owner. * * The current owner is the component who should own any components that are * currently being constructed. */ var ReactCurrentOwner = { /** * @internal * @type {ReactComponent} */ current: null }; var ReactDebugCurrentFrame = {}; var currentExtraStackFrame = null; function setExtraStackFrame(stack) { { currentExtraStackFrame = stack; } } { ReactDebugCurrentFrame.setExtraStackFrame = function (stack) { { currentExtraStackFrame = stack; } }; // Stack implementation injected by the current renderer. ReactDebugCurrentFrame.getCurrentStack = null; ReactDebugCurrentFrame.getStackAddendum = function () { var stack = ''; // Add an extra top frame while an element is being validated if (currentExtraStackFrame) { stack += currentExtraStackFrame; } // Delegate to the injected renderer-specific implementation var impl = ReactDebugCurrentFrame.getCurrentStack; if (impl) { stack += impl() || ''; } return stack; }; } // ----------------------------------------------------------------------------- var enableScopeAPI = false; // Experimental Create Event Handle API. var enableCacheElement = false; var enableTransitionTracing = false; // No known bugs, but needs performance testing var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber // stuff. Intended to enable React core members to more easily debug scheduling // issues in DEV builds. var enableDebugTracing = false; // Track which Fiber(s) schedule render work. var ReactSharedInternals = { ReactCurrentDispatcher: ReactCurrentDispatcher, ReactCurrentBatchConfig: ReactCurrentBatchConfig, ReactCurrentOwner: ReactCurrentOwner }; { ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame; ReactSharedInternals.ReactCurrentActQueue = ReactCurrentActQueue; } // by calls to these methods by a Babel plugin. // // In PROD (or in packages without access to React internals), // they are left as they are instead. function warn(format) { { { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } printWarning('warn', format, args); } } } function error(format) { { { for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } printWarning('error', format, args); } } } function printWarning(level, format, args) { // When changing this logic, you might want to also // update consoleWithStackDev.www.js as well. { var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; var stack = ReactDebugCurrentFrame.getStackAddendum(); if (stack !== '') { format += '%s'; args = args.concat([stack]); } // eslint-disable-next-line react-internal/safe-string-coercion var argsWithFormat = args.map(function (item) { return String(item); }); // Careful: RN currently depends on this prefix argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it // breaks IE9: https://github.com/facebook/react/issues/13610 // eslint-disable-next-line react-internal/no-production-logging Function.prototype.apply.call(console[level], console, argsWithFormat); } } var didWarnStateUpdateForUnmountedComponent = {}; function warnNoop(publicInstance, callerName) { { var _constructor = publicInstance.constructor; var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass'; var warningKey = componentName + "." + callerName; if (didWarnStateUpdateForUnmountedComponent[warningKey]) { return; } error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName); didWarnStateUpdateForUnmountedComponent[warningKey] = true; } } /** * This is the abstract API for an update queue. */ var ReactNoopUpdateQueue = { /** * Checks whether or not this composite component is mounted. * @param {ReactClass} publicInstance The instance we want to test. * @return {boolean} True if mounted, false otherwise. * @protected * @final */ isMounted: function (publicInstance) { return false; }, /** * Forces an update. This should only be invoked when it is known with * certainty that we are **not** in a DOM transaction. * * You may want to call this when you know that some deeper aspect of the * component's state has changed but `setState` was not called. * * This will not invoke `shouldComponentUpdate`, but it will invoke * `componentWillUpdate` and `componentDidUpdate`. * * @param {ReactClass} publicInstance The instance that should rerender. * @param {?function} callback Called after component is updated. * @param {?string} callerName name of the calling function in the public API. * @internal */ enqueueForceUpdate: function (publicInstance, callback, callerName) { warnNoop(publicInstance, 'forceUpdate'); }, /** * Replaces all of the state. Always use this or `setState` to mutate state. * You should treat `this.state` as immutable. * * There is no guarantee that `this.state` will be immediately updated, so * accessing `this.state` after calling this method may return the old value. * * @param {ReactClass} publicInstance The instance that should rerender. * @param {object} completeState Next state. * @param {?function} callback Called after component is updated. * @param {?string} callerName name of the calling function in the public API. * @internal */ enqueueReplaceState: function (publicInstance, completeState, callback, callerName) { warnNoop(publicInstance, 'replaceState'); }, /** * Sets a subset of the state. This only exists because _pendingState is * internal. This provides a merging strategy that is not available to deep * properties which is confusing. TODO: Expose pendingState or don't use it * during the merge. * * @param {ReactClass} publicInstance The instance that should rerender. * @param {object} partialState Next partial state to be merged with state. * @param {?function} callback Called after component is updated. * @param {?string} Name of the calling function in the public API. * @internal */ enqueueSetState: function (publicInstance, partialState, callback, callerName) { warnNoop(publicInstance, 'setState'); } }; var assign = Object.assign; var emptyObject = {}; { Object.freeze(emptyObject); } /** * Base class helpers for the updating state of a component. */ function Component(props, context, updater) { this.props = props; this.context = context; // If a component has string refs, we will assign a different object later. this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the // renderer. this.updater = updater || ReactNoopUpdateQueue; } Component.prototype.isReactComponent = {}; /** * Sets a subset of the state. Always use this to mutate * state. You should treat `this.state` as immutable. * * There is no guarantee that `this.state` will be immediately updated, so * accessing `this.state` after calling this method may return the old value. * * There is no guarantee that calls to `setState` will run synchronously, * as they may eventually be batched together. You can provide an optional * callback that will be executed when the call to setState is actually * completed. * * When a function is provided to setState, it will be called at some point in * the future (not synchronously). It will be called with the up to date * component arguments (state, props, context). These values can be different * from this.* because your function may be called after receiveProps but before * shouldComponentUpdate, and this new state, props, and context will not yet be * assigned to this. * * @param {object|function} partialState Next partial state or function to * produce next partial state to be merged with current state. * @param {?function} callback Called after state is updated. * @final * @protected */ Component.prototype.setState = function (partialState, callback) { if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) { throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.'); } this.updater.enqueueSetState(this, partialState, callback, 'setState'); }; /** * Forces an update. This should only be invoked when it is known with * certainty that we are **not** in a DOM transaction. * * You may want to call this when you know that some deeper aspect of the * component's state has changed but `setState` was not called. * * This will not invoke `shouldComponentUpdate`, but it will invoke * `componentWillUpdate` and `componentDidUpdate`. * * @param {?function} callback Called after update is complete. * @final * @protected */ Component.prototype.forceUpdate = function (callback) { this.updater.enqueueForceUpdate(this, callback, 'forceUpdate'); }; /** * Deprecated APIs. These APIs used to exist on classic React classes but since * we would like to deprecate them, we're not going to move them over to this * modern base class. Instead, we define a getter that warns if it's accessed. */ { var deprecatedAPIs = { isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'], replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'] }; var defineDeprecationWarning = function (methodName, info) { Object.defineProperty(Component.prototype, methodName, { get: function () { warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]); return undefined; } }); }; for (var fnName in deprecatedAPIs) { if (deprecatedAPIs.hasOwnProperty(fnName)) { defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); } } } function ComponentDummy() {} ComponentDummy.prototype = Component.prototype; /** * Convenience component with default shallow equality check for sCU. */ function PureComponent(props, context, updater) { this.props = props; this.context = context; // If a component has string refs, we will assign a different object later. this.refs = emptyObject; this.updater = updater || ReactNoopUpdateQueue; } var pureComponentPrototype = PureComponent.prototype = new ComponentDummy(); pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods. assign(pureComponentPrototype, Component.prototype); pureComponentPrototype.isPureReactComponent = true; // an immutable object with a single mutable value function createRef() { var refObject = { current: null }; { Object.seal(refObject); } return refObject; } var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare function isArray(a) { return isArrayImpl(a); } /* * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol * and Temporal.* types. See https://github.com/facebook/react/pull/22064. * * The functions in this module will throw an easier-to-understand, * easier-to-debug exception with a clear errors message message explaining the * problem. (Instead of a confusing exception thrown inside the implementation * of the `value` object). */ // $FlowFixMe only called in DEV, so void return is not possible. function typeName(value) { { // toStringTag is needed for namespaced types like Temporal.Instant var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag; var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; return type; } } // $FlowFixMe only called in DEV, so void return is not possible. function willCoercionThrow(value) { { try { testStringCoercion(value); return false; } catch (e) { return true; } } } function testStringCoercion(value) { // If you ended up here by following an exception call stack, here's what's // happened: you supplied an object or symbol value to React (as a prop, key, // DOM attribute, CSS property, string ref, etc.) and when React tried to // coerce it to a string using `'' + value`, an exception was thrown. // // The most common types that will cause this exception are `Symbol` instances // and Temporal objects like `Temporal.Instant`. But any object that has a // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this // exception. (Library authors do this to prevent users from using built-in // numeric operators like `+` or comparison operators like `>=` because custom // methods are needed to perform accurate arithmetic or comparison.) // // To fix the problem, coerce this object or symbol value to a string before // passing it to React. The most reliable way is usually `String(value)`. // // To find which value is throwing, check the browser or debugger console. // Before this exception was thrown, there should be `console.error` output // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the // problem and how that type was used: key, atrribute, input value prop, etc. // In most cases, this console output also shows the component and its // ancestor components where the exception happened. // // eslint-disable-next-line react-internal/safe-string-coercion return '' + value; } function checkKeyStringCoercion(value) { { if (willCoercionThrow(value)) { error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value)); return testStringCoercion(value); // throw (to help callers find troubleshooting comments) } } } function getWrappedName(outerType, innerType, wrapperName) { var displayName = outerType.displayName; if (displayName) { return displayName; } var functionName = innerType.displayName || innerType.name || ''; return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName; } // Keep in sync with react-reconciler/getComponentNameFromFiber function getContextName(type) { return type.displayName || 'Context'; } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead. function getComponentNameFromType(type) { if (type == null) { // Host root, text node or just invalid type. return null; } { if (typeof type.tag === 'number') { error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.'); } } if (typeof type === 'function') { return type.displayName || type.name || null; } if (typeof type === 'string') { return type; } switch (type) { case REACT_FRAGMENT_TYPE: return 'Fragment'; case REACT_PORTAL_TYPE: return 'Portal'; case REACT_PROFILER_TYPE: return 'Profiler'; case REACT_STRICT_MODE_TYPE: return 'StrictMode'; case REACT_SUSPENSE_TYPE: return 'Suspense'; case REACT_SUSPENSE_LIST_TYPE: return 'SuspenseList'; } if (typeof type === 'object') { switch (type.$$typeof) { case REACT_CONTEXT_TYPE: var context = type; return getContextName(context) + '.Consumer'; case REACT_PROVIDER_TYPE: var provider = type; return getContextName(provider._context) + '.Provider'; case REACT_FORWARD_REF_TYPE: return getWrappedName(type, type.render, 'ForwardRef'); case REACT_MEMO_TYPE: var outerName = type.displayName || null; if (outerName !== null) { return outerName; } return getComponentNameFromType(type.type) || 'Memo'; case REACT_LAZY_TYPE: { var lazyComponent = type; var payload = lazyComponent._payload; var init = lazyComponent._init; try { return getComponentNameFromType(init(payload)); } catch (x) { return null; } } // eslint-disable-next-line no-fallthrough } } return null; } var hasOwnProperty = Object.prototype.hasOwnProperty; var RESERVED_PROPS = { key: true, ref: true, __self: true, __source: true }; var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs; { didWarnAboutStringRefs = {}; } function hasValidRef(config) { { if (hasOwnProperty.call(config, 'ref')) { var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; if (getter && getter.isReactWarning) { return false; } } } return config.ref !== undefined; } function hasValidKey(config) { { if (hasOwnProperty.call(config, 'key')) { var getter = Object.getOwnPropertyDescriptor(config, 'key').get; if (getter && getter.isReactWarning) { return false; } } } return config.key !== undefined; } function defineKeyPropWarningGetter(props, displayName) { var warnAboutAccessingKey = function () { { if (!specialPropKeyWarningShown) { specialPropKeyWarningShown = true; error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); } } }; warnAboutAccessingKey.isReactWarning = true; Object.defineProperty(props, 'key', { get: warnAboutAccessingKey, configurable: true }); } function defineRefPropWarningGetter(props, displayName) { var warnAboutAccessingRef = function () { { if (!specialPropRefWarningShown) { specialPropRefWarningShown = true; error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); } } }; warnAboutAccessingRef.isReactWarning = true; Object.defineProperty(props, 'ref', { get: warnAboutAccessingRef, configurable: true }); } function warnIfStringRefCannotBeAutoConverted(config) { { if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) { var componentName = getComponentNameFromType(ReactCurrentOwner.current.type); if (!didWarnAboutStringRefs[componentName]) { error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref); didWarnAboutStringRefs[componentName] = true; } } } } /** * Factory method to create a new React element. This no longer adheres to * the class pattern, so do not use new to call it. Also, instanceof check * will not work. Instead test $$typeof field against Symbol.for('react.element') to check * if something is a React Element. * * @param {*} type * @param {*} props * @param {*} key * @param {string|object} ref * @param {*} owner * @param {*} self A *temporary* helper to detect places where `this` is * different from the `owner` when React.createElement is called, so that we * can warn. We want to get rid of owner and replace string `ref`s with arrow * functions, and as long as `this` and owner are the same, there will be no * change in behavior. * @param {*} source An annotation object (added by a transpiler or otherwise) * indicating filename, line number, and/or other information. * @internal */ var ReactElement = function (type, key, ref, self, source, owner, props) { var element = { // This tag allows us to uniquely identify this as a React Element $$typeof: REACT_ELEMENT_TYPE, // Built-in properties that belong on the element type: type, key: key, ref: ref, props: props, // Record the component responsible for creating this element. _owner: owner }; { // The validation flag is currently mutative. We put it on // an external backing store so that we can freeze the whole object. // This can be replaced with a WeakMap once they are implemented in // commonly used development environments. element._store = {}; // To make comparing ReactElements easier for testing purposes, we make // the validation flag non-enumerable (where possible, which should // include every environment we run tests in), so the test framework // ignores it. Object.defineProperty(element._store, 'validated', { configurable: false, enumerable: false, writable: true, value: false }); // self and source are DEV only properties. Object.defineProperty(element, '_self', { configurable: false, enumerable: false, writable: false, value: self }); // Two elements created in two different places should be considered // equal for testing purposes and therefore we hide it from enumeration. Object.defineProperty(element, '_source', { configurable: false, enumerable: false, writable: false, value: source }); if (Object.freeze) { Object.freeze(element.props); Object.freeze(element); } } return element; }; /** * Create and return a new ReactElement of the given type. * See https://reactjs.org/docs/react-api.html#createelement */ function createElement(type, config, children) { var propName; // Reserved names are extracted var props = {}; var key = null; var ref = null; var self = null; var source = null; if (config != null) { if (hasValidRef(config)) { ref = config.ref; { warnIfStringRefCannotBeAutoConverted(config); } } if (hasValidKey(config)) { { checkKeyStringCoercion(config.key); } key = '' + config.key; } self = config.__self === undefined ? null : config.__self; source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object for (propName in config) { if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { props[propName] = config[propName]; } } } // Children can be more than one argument, and those are transferred onto // the newly allocated props object. var childrenLength = arguments.length - 2; if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 2]; } { if (Object.freeze) { Object.freeze(childArray); } } props.children = childArray; } // Resolve default props if (type && type.defaultProps) { var defaultProps = type.defaultProps; for (propName in defaultProps) { if (props[propName] === undefined) { props[propName] = defaultProps[propName]; } } } { if (key || ref) { var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; if (key) { defineKeyPropWarningGetter(props, displayName); } if (ref) { defineRefPropWarningGetter(props, displayName); } } } return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); } function cloneAndReplaceKey(oldElement, newKey) { var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props); return newElement; } /** * Clone and return a new ReactElement using element as the starting point. * See https://reactjs.org/docs/react-api.html#cloneelement */ function cloneElement(element, config, children) { if (element === null || element === undefined) { throw new Error("React.cloneElement(...): The argument must be a React element, but you passed " + element + "."); } var propName; // Original props are copied var props = assign({}, element.props); // Reserved names are extracted var key = element.key; var ref = element.ref; // Self is preserved since the owner is preserved. var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a // transpiler, and the original source is probably a better indicator of the // true owner. var source = element._source; // Owner will be preserved, unless ref is overridden var owner = element._owner; if (config != null) { if (hasValidRef(config)) { // Silently steal the ref from the parent. ref = config.ref; owner = ReactCurrentOwner.current; } if (hasValidKey(config)) { { checkKeyStringCoercion(config.key); } key = '' + config.key; } // Remaining properties override existing props var defaultProps; if (element.type && element.type.defaultProps) { defaultProps = element.type.defaultProps; } for (propName in config) { if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { if (config[propName] === undefined && defaultProps !== undefined) { // Resolve default props props[propName] = defaultProps[propName]; } else { props[propName] = config[propName]; } } } } // Children can be more than one argument, and those are transferred onto // the newly allocated props object. var childrenLength = arguments.length - 2; if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 2]; } props.children = childArray; } return ReactElement(element.type, key, ref, self, source, owner, props); } /** * Verifies the object is a ReactElement. * See https://reactjs.org/docs/react-api.html#isvalidelement * @param {?object} object * @return {boolean} True if `object` is a ReactElement. * @final */ function isValidElement(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; } var SEPARATOR = '.'; var SUBSEPARATOR = ':'; /** * Escape and wrap key so it is safe to use as a reactid * * @param {string} key to be escaped. * @return {string} the escaped key. */ function escape(key) { var escapeRegex = /[=:]/g; var escaperLookup = { '=': '=0', ':': '=2' }; var escapedString = key.replace(escapeRegex, function (match) { return escaperLookup[match]; }); return '$' + escapedString; } /** * TODO: Test that a single child and an array with one item have the same key * pattern. */ var didWarnAboutMaps = false; var userProvidedKeyEscapeRegex = /\/+/g; function escapeUserProvidedKey(text) { return text.replace(userProvidedKeyEscapeRegex, '$&/'); } /** * Generate a key string that identifies a element within a set. * * @param {*} element A element that could contain a manual key. * @param {number} index Index that is used if a manual key is not provided. * @return {string} */ function getElementKey(element, index) { // Do some typechecking here since we call this blindly. We want to ensure // that we don't block potential future ES APIs. if (typeof element === 'object' && element !== null && element.key != null) { // Explicit key { checkKeyStringCoercion(element.key); } return escape('' + element.key); } // Implicit key determined by the index in the set return index.toString(36); } function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { var type = typeof children; if (type === 'undefined' || type === 'boolean') { // All of the above are perceived as null. children = null; } var invokeCallback = false; if (children === null) { invokeCallback = true; } else { switch (type) { case 'string': case 'number': invokeCallback = true; break; case 'object': switch (children.$$typeof) { case REACT_ELEMENT_TYPE: case REACT_PORTAL_TYPE: invokeCallback = true; } } } if (invokeCallback) { var _child = children; var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array // so that it's consistent if the number of children grows: var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar; if (isArray(mappedChild)) { var escapedChildKey = ''; if (childKey != null) { escapedChildKey = escapeUserProvidedKey(childKey) + '/'; } mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) { return c; }); } else if (mappedChild != null) { if (isValidElement(mappedChild)) { { // The `if` statement here prevents auto-disabling of the safe // coercion ESLint rule, so we must manually disable it below. // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) { checkKeyStringCoercion(mappedChild.key); } } mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as // traverseAllChildren used to do for objects as children escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number // eslint-disable-next-line react-internal/safe-string-coercion escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey); } array.push(mappedChild); } return 1; } var child; var nextName; var subtreeCount = 0; // Count of children found in the current subtree. var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; if (isArray(children)) { for (var i = 0; i < children.length; i++) { child = children[i]; nextName = nextNamePrefix + getElementKey(child, i); subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); } } else { var iteratorFn = getIteratorFn(children); if (typeof iteratorFn === 'function') { var iterableChildren = children; { // Warn about using Maps as children if (iteratorFn === iterableChildren.entries) { if (!didWarnAboutMaps) { warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.'); } didWarnAboutMaps = true; } } var iterator = iteratorFn.call(iterableChildren); var step; var ii = 0; while (!(step = iterator.next()).done) { child = step.value; nextName = nextNamePrefix + getElementKey(child, ii++); subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); } } else if (type === 'object') { // eslint-disable-next-line react-internal/safe-string-coercion var childrenString = String(children); throw new Error("Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). " + 'If you meant to render a collection of children, use an array ' + 'instead.'); } } return subtreeCount; } /** * Maps children that are typically specified as `props.children`. * * See https://reactjs.org/docs/react-api.html#reactchildrenmap * * The provided mapFunction(child, index) will be called for each * leaf child. * * @param {?*} children Children tree container. * @param {function(*, int)} func The map function. * @param {*} context Context for mapFunction. * @return {object} Object containing the ordered map of results. */ function mapChildren(children, func, context) { if (children == null) { return children; } var result = []; var count = 0; mapIntoArray(children, result, '', '', function (child) { return func.call(context, child, count++); }); return result; } /** * Count the number of children that are typically specified as * `props.children`. * * See https://reactjs.org/docs/react-api.html#reactchildrencount * * @param {?*} children Children tree container. * @return {number} The number of children. */ function countChildren(children) { var n = 0; mapChildren(children, function () { n++; // Don't return anything }); return n; } /** * Iterates through children that are typically specified as `props.children`. * * See https://reactjs.org/docs/react-api.html#reactchildrenforeach * * The provided forEachFunc(child, index) will be called for each * leaf child. * * @param {?*} children Children tree container. * @param {function(*, int)} forEachFunc * @param {*} forEachContext Context for forEachContext. */ function forEachChildren(children, forEachFunc, forEachContext) { mapChildren(children, function () { forEachFunc.apply(this, arguments); // Don't return anything. }, forEachContext); } /** * Flatten a children object (typically specified as `props.children`) and * return an array with appropriately re-keyed children. * * See https://reactjs.org/docs/react-api.html#reactchildrentoarray */ function toArray(children) { return mapChildren(children, function (child) { return child; }) || []; } /** * Returns the first child in a collection of children and verifies that there * is only one child in the collection. * * See https://reactjs.org/docs/react-api.html#reactchildrenonly * * The current implementation of this function assumes that a single child gets * passed without a wrapper, but the purpose of this helper function is to * abstract away the particular structure of children. * * @param {?object} children Child collection structure. * @return {ReactElement} The first and only `ReactElement` contained in the * structure. */ function onlyChild(children) { if (!isValidElement(children)) { throw new Error('React.Children.only expected to receive a single React element child.'); } return children; } function createContext(defaultValue) { // TODO: Second argument used to be an optional `calculateChangedBits` // function. Warn to reserve for future use? var context = { $$typeof: REACT_CONTEXT_TYPE, // As a workaround to support multiple concurrent renderers, we categorize // some renderers as primary and others as secondary. We only expect // there to be two concurrent renderers at most: React Native (primary) and // Fabric (secondary); React DOM (primary) and React ART (secondary). // Secondary renderers store their context values on separate fields. _currentValue: defaultValue, _currentValue2: defaultValue, // Used to track how many concurrent renderers this context currently // supports within in a single renderer. Such as parallel server rendering. _threadCount: 0, // These are circular Provider: null, Consumer: null, // Add these to use same hidden class in VM as ServerContext _defaultValue: null, _globalName: null }; context.Provider = { $$typeof: REACT_PROVIDER_TYPE, _context: context }; var hasWarnedAboutUsingNestedContextConsumers = false; var hasWarnedAboutUsingConsumerProvider = false; var hasWarnedAboutDisplayNameOnConsumer = false; { // A separate object, but proxies back to the original context object for // backwards compatibility. It has a different $$typeof, so we can properly // warn for the incorrect usage of Context as a Consumer. var Consumer = { $$typeof: REACT_CONTEXT_TYPE, _context: context }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here Object.defineProperties(Consumer, { Provider: { get: function () { if (!hasWarnedAboutUsingConsumerProvider) { hasWarnedAboutUsingConsumerProvider = true; error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); } return context.Provider; }, set: function (_Provider) { context.Provider = _Provider; } }, _currentValue: { get: function () { return context._currentValue; }, set: function (_currentValue) { context._currentValue = _currentValue; } }, _currentValue2: { get: function () { return context._currentValue2; }, set: function (_currentValue2) { context._currentValue2 = _currentValue2; } }, _threadCount: { get: function () { return context._threadCount; }, set: function (_threadCount) { context._threadCount = _threadCount; } }, Consumer: { get: function () { if (!hasWarnedAboutUsingNestedContextConsumers) { hasWarnedAboutUsingNestedContextConsumers = true; error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); } return context.Consumer; } }, displayName: { get: function () { return context.displayName; }, set: function (displayName) { if (!hasWarnedAboutDisplayNameOnConsumer) { warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName); hasWarnedAboutDisplayNameOnConsumer = true; } } } }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty context.Consumer = Consumer; } { context._currentRenderer = null; context._currentRenderer2 = null; } return context; } var Uninitialized = -1; var Pending = 0; var Resolved = 1; var Rejected = 2; function lazyInitializer(payload) { if (payload._status === Uninitialized) { var ctor = payload._result; var thenable = ctor(); // Transition to the next state. // This might throw either because it's missing or throws. If so, we treat it // as still uninitialized and try again next time. Which is the same as what // happens if the ctor or any wrappers processing the ctor throws. This might // end up fixing it if the resolution was a concurrency bug. thenable.then(function (moduleObject) { if (payload._status === Pending || payload._status === Uninitialized) { // Transition to the next state. var resolved = payload; resolved._status = Resolved; resolved._result = moduleObject; } }, function (error) { if (payload._status === Pending || payload._status === Uninitialized) { // Transition to the next state. var rejected = payload; rejected._status = Rejected; rejected._result = error; } }); if (payload._status === Uninitialized) { // In case, we're still uninitialized, then we're waiting for the thenable // to resolve. Set it as pending in the meantime. var pending = payload; pending._status = Pending; pending._result = thenable; } } if (payload._status === Resolved) { var moduleObject = payload._result; { if (moduleObject === undefined) { error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))\n\n" + 'Did you accidentally put curly braces around the import?', moduleObject); } } { if (!('default' in moduleObject)) { error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject); } } return moduleObject.default; } else { throw payload._result; } } function lazy(ctor) { var payload = { // We use these fields to store the result. _status: Uninitialized, _result: ctor }; var lazyType = { $$typeof: REACT_LAZY_TYPE, _payload: payload, _init: lazyInitializer }; { // In production, this would just set it on the object. var defaultProps; var propTypes; // $FlowFixMe Object.defineProperties(lazyType, { defaultProps: { configurable: true, get: function () { return defaultProps; }, set: function (newDefaultProps) { error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); defaultProps = newDefaultProps; // Match production behavior more closely: // $FlowFixMe Object.defineProperty(lazyType, 'defaultProps', { enumerable: true }); } }, propTypes: { configurable: true, get: function () { return propTypes; }, set: function (newPropTypes) { error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); propTypes = newPropTypes; // Match production behavior more closely: // $FlowFixMe Object.defineProperty(lazyType, 'propTypes', { enumerable: true }); } } }); } return lazyType; } function forwardRef(render) { { if (render != null && render.$$typeof === REACT_MEMO_TYPE) { error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).'); } else if (typeof render !== 'function') { error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render); } else { if (render.length !== 0 && render.length !== 2) { error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.'); } } if (render != null) { if (render.defaultProps != null || render.propTypes != null) { error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?'); } } } var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render }; { var ownName; Object.defineProperty(elementType, 'displayName', { enumerable: false, configurable: true, get: function () { return ownName; }, set: function (name) { ownName = name; // The inner component shouldn't inherit this display name in most cases, // because the component may be used elsewhere. // But it's nice for anonymous functions to inherit the name, // so that our component-stack generation logic will display their frames. // An anonymous function generally suggests a pattern like: // React.forwardRef((props, ref) => {...}); // This kind of inner function is not used elsewhere so the side effect is okay. if (!render.name && !render.displayName) { render.displayName = name; } } }); } return elementType; } var REACT_MODULE_REFERENCE; { REACT_MODULE_REFERENCE = Symbol.for('react.module.reference'); } function isValidElementType(type) { if (typeof type === 'string' || typeof type === 'function') { return true; } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) { return true; } if (typeof type === 'object' && type !== null) { if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object // types supported by any Flight configuration anywhere since // we don't know which Flight build this will end up being used // with. type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) { return true; } } return false; } function memo(type, compare) { { if (!isValidElementType(type)) { error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type); } } var elementType = { $$typeof: REACT_MEMO_TYPE, type: type, compare: compare === undefined ? null : compare }; { var ownName; Object.defineProperty(elementType, 'displayName', { enumerable: false, configurable: true, get: function () { return ownName; }, set: function (name) { ownName = name; // The inner component shouldn't inherit this display name in most cases, // because the component may be used elsewhere. // But it's nice for anonymous functions to inherit the name, // so that our component-stack generation logic will display their frames. // An anonymous function generally suggests a pattern like: // React.memo((props) => {...}); // This kind of inner function is not used elsewhere so the side effect is okay. if (!type.name && !type.displayName) { type.displayName = name; } } }); } return elementType; } function resolveDispatcher() { var dispatcher = ReactCurrentDispatcher.current; { if (dispatcher === null) { error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\n' + '2. You might be breaking the Rules of Hooks\n' + '3. You might have more than one copy of React in the same app\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.'); } } // Will result in a null access error if accessed outside render phase. We // intentionally don't throw our own error because this is in a hot path. // Also helps ensure this is inlined. return dispatcher; } function useContext(Context) { var dispatcher = resolveDispatcher(); { // TODO: add a more generic warning for invalid values. if (Context._context !== undefined) { var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs // and nobody should be using this in existing code. if (realContext.Consumer === Context) { error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?'); } else if (realContext.Provider === Context) { error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?'); } } } return dispatcher.useContext(Context); } function useState(initialState) { var dispatcher = resolveDispatcher(); return dispatcher.useState(initialState); } function useReducer(reducer, initialArg, init) { var dispatcher = resolveDispatcher(); return dispatcher.useReducer(reducer, initialArg, init); } function useRef(initialValue) { var dispatcher = resolveDispatcher(); return dispatcher.useRef(initialValue); } function useEffect(create, deps) { var dispatcher = resolveDispatcher(); return dispatcher.useEffect(create, deps); } function useInsertionEffect(create, deps) { var dispatcher = resolveDispatcher(); return dispatcher.useInsertionEffect(create, deps); } function useLayoutEffect(create, deps) { var dispatcher = resolveDispatcher(); return dispatcher.useLayoutEffect(create, deps); } function useCallback(callback, deps) { var dispatcher = resolveDispatcher(); return dispatcher.useCallback(callback, deps); } function useMemo(create, deps) { var dispatcher = resolveDispatcher(); return dispatcher.useMemo(create, deps); } function useImperativeHandle(ref, create, deps) { var dispatcher = resolveDispatcher(); return dispatcher.useImperativeHandle(ref, create, deps); } function useDebugValue(value, formatterFn) { { var dispatcher = resolveDispatcher(); return dispatcher.useDebugValue(value, formatterFn); } } function useTransition() { var dispatcher = resolveDispatcher(); return dispatcher.useTransition(); } function useDeferredValue(value) { var dispatcher = resolveDispatcher(); return dispatcher.useDeferredValue(value); } function useId() { var dispatcher = resolveDispatcher(); return dispatcher.useId(); } function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) { var dispatcher = resolveDispatcher(); return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot); } // Helpers to patch console.logs to avoid logging during side-effect free // replaying on render function. This currently only patches the object // lazily which won't cover if the log function was extracted eagerly. // We could also eagerly patch the method. var disabledDepth = 0; var prevLog; var prevInfo; var prevWarn; var prevError; var prevGroup; var prevGroupCollapsed; var prevGroupEnd; function disabledLog() {} disabledLog.__reactDisabledLog = true; function disableLogs() { { if (disabledDepth === 0) { /* eslint-disable react-internal/no-production-logging */ prevLog = console.log; prevInfo = console.info; prevWarn = console.warn; prevError = console.error; prevGroup = console.group; prevGroupCollapsed = console.groupCollapsed; prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 var props = { configurable: true, enumerable: true, value: disabledLog, writable: true }; // $FlowFixMe Flow thinks console is immutable. Object.defineProperties(console, { info: props, log: props, warn: props, error: props, group: props, groupCollapsed: props, groupEnd: props }); /* eslint-enable react-internal/no-production-logging */ } disabledDepth++; } } function reenableLogs() { { disabledDepth--; if (disabledDepth === 0) { /* eslint-disable react-internal/no-production-logging */ var props = { configurable: true, enumerable: true, writable: true }; // $FlowFixMe Flow thinks console is immutable. Object.defineProperties(console, { log: assign({}, props, { value: prevLog }), info: assign({}, props, { value: prevInfo }), warn: assign({}, props, { value: prevWarn }), error: assign({}, props, { value: prevError }), group: assign({}, props, { value: prevGroup }), groupCollapsed: assign({}, props, { value: prevGroupCollapsed }), groupEnd: assign({}, props, { value: prevGroupEnd }) }); /* eslint-enable react-internal/no-production-logging */ } if (disabledDepth < 0) { error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); } } } var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher; var prefix; function describeBuiltInComponentFrame(name, source, ownerFn) { { if (prefix === undefined) { // Extract the VM specific prefix used by each line. try { throw Error(); } catch (x) { var match = x.stack.trim().match(/\n( *(at )?)/); prefix = match && match[1] || ''; } } // We use the prefix to ensure our stacks line up with native stack frames. return '\n' + prefix + name; } } var reentry = false; var componentFrameCache; { var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; componentFrameCache = new PossiblyWeakMap(); } function describeNativeComponentFrame(fn, construct) { // If something asked for a stack inside a fake render, it should get ignored. if ( !fn || reentry) { return ''; } { var frame = componentFrameCache.get(fn); if (frame !== undefined) { return frame; } } var control; reentry = true; var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. Error.prepareStackTrace = undefined; var previousDispatcher; { previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function // for warnings. ReactCurrentDispatcher$1.current = null; disableLogs(); } try { // This should throw. if (construct) { // Something should be setting the props in the constructor. var Fake = function () { throw Error(); }; // $FlowFixMe Object.defineProperty(Fake.prototype, 'props', { set: function () { // We use a throwing setter instead of frozen or non-writable props // because that won't throw in a non-strict mode function. throw Error(); } }); if (typeof Reflect === 'object' && Reflect.construct) { // We construct a different control for this case to include any extra // frames added by the construct call. try { Reflect.construct(Fake, []); } catch (x) { control = x; } Reflect.construct(fn, [], Fake); } else { try { Fake.call(); } catch (x) { control = x; } fn.call(Fake.prototype); } } else { try { throw Error(); } catch (x) { control = x; } fn(); } } catch (sample) { // This is inlined manually because closure doesn't do it for us. if (sample && control && typeof sample.stack === 'string') { // This extracts the first frame from the sample that isn't also in the control. // Skipping one frame that we assume is the frame that calls the two. var sampleLines = sample.stack.split('\n'); var controlLines = control.stack.split('\n'); var s = sampleLines.length - 1; var c = controlLines.length - 1; while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { // We expect at least one stack frame to be shared. // Typically this will be the root most one. However, stack frames may be // cut off due to maximum stack limits. In this case, one maybe cut off // earlier than the other. We assume that the sample is longer or the same // and there for cut off earlier. So we should find the root most frame in // the sample somewhere in the control. c--; } for (; s >= 1 && c >= 0; s--, c--) { // Next we find the first one that isn't the same which should be the // frame that called our sample function and the control. if (sampleLines[s] !== controlLines[c]) { // In V8, the first line is describing the message but other VMs don't. // If we're about to return the first line, and the control is also on the same // line, that's a pretty good indicator that our sample threw at same line as // the control. I.e. before we entered the sample frame. So we ignore this result. // This can happen if you passed a class to function component, or non-function. if (s !== 1 || c !== 1) { do { s--; c--; // We may still have similar intermediate frames from the construct call. // The next one that isn't the same should be our match though. if (c < 0 || sampleLines[s] !== controlLines[c]) { // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "" // but we have a user-provided "displayName" // splice it in to make the stack more readable. if (fn.displayName && _frame.includes('')) { _frame = _frame.replace('', fn.displayName); } { if (typeof fn === 'function') { componentFrameCache.set(fn, _frame); } } // Return the line we found. return _frame; } } while (s >= 1 && c >= 0); } break; } } } } finally { reentry = false; { ReactCurrentDispatcher$1.current = previousDispatcher; reenableLogs(); } Error.prepareStackTrace = previousPrepareStackTrace; } // Fallback to just using the name if we couldn't make it throw. var name = fn ? fn.displayName || fn.name : ''; var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; { if (typeof fn === 'function') { componentFrameCache.set(fn, syntheticFrame); } } return syntheticFrame; } function describeFunctionComponentFrame(fn, source, ownerFn) { { return describeNativeComponentFrame(fn, false); } } function shouldConstruct(Component) { var prototype = Component.prototype; return !!(prototype && prototype.isReactComponent); } function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { if (type == null) { return ''; } if (typeof type === 'function') { { return describeNativeComponentFrame(type, shouldConstruct(type)); } } if (typeof type === 'string') { return describeBuiltInComponentFrame(type); } switch (type) { case REACT_SUSPENSE_TYPE: return describeBuiltInComponentFrame('Suspense'); case REACT_SUSPENSE_LIST_TYPE: return describeBuiltInComponentFrame('SuspenseList'); } if (typeof type === 'object') { switch (type.$$typeof) { case REACT_FORWARD_REF_TYPE: return describeFunctionComponentFrame(type.render); case REACT_MEMO_TYPE: // Memo may contain any component type so we recursively resolve it. return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); case REACT_LAZY_TYPE: { var lazyComponent = type; var payload = lazyComponent._payload; var init = lazyComponent._init; try { // Lazy may contain any component type so we recursively resolve it. return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); } catch (x) {} } } } return ''; } var loggedTypeFailures = {}; var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; function setCurrentlyValidatingElement(element) { { if (element) { var owner = element._owner; var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); ReactDebugCurrentFrame$1.setExtraStackFrame(stack); } else { ReactDebugCurrentFrame$1.setExtraStackFrame(null); } } } function checkPropTypes(typeSpecs, values, location, componentName, element) { { // $FlowFixMe This is okay but Flow doesn't know it. var has = Function.call.bind(hasOwnProperty); for (var typeSpecName in typeSpecs) { if (has(typeSpecs, typeSpecName)) { var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to // fail the render phase where it didn't fail before. So we log it. // After these have been cleaned up, we'll let them throw. try { // This is intentionally an invariant that gets caught. It's the same // behavior as without this statement except with a better message. if (typeof typeSpecs[typeSpecName] !== 'function') { // eslint-disable-next-line react-internal/prod-error-codes var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); err.name = 'Invariant Violation'; throw err; } error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); } catch (ex) { error$1 = ex; } if (error$1 && !(error$1 instanceof Error)) { setCurrentlyValidatingElement(element); error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); setCurrentlyValidatingElement(null); } if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { // Only monitor this failure once because there tends to be a lot of the // same error. loggedTypeFailures[error$1.message] = true; setCurrentlyValidatingElement(element); error('Failed %s type: %s', location, error$1.message); setCurrentlyValidatingElement(null); } } } } } function setCurrentlyValidatingElement$1(element) { { if (element) { var owner = element._owner; var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); setExtraStackFrame(stack); } else { setExtraStackFrame(null); } } } var propTypesMisspellWarningShown; { propTypesMisspellWarningShown = false; } function getDeclarationErrorAddendum() { if (ReactCurrentOwner.current) { var name = getComponentNameFromType(ReactCurrentOwner.current.type); if (name) { return '\n\nCheck the render method of `' + name + '`.'; } } return ''; } function getSourceInfoErrorAddendum(source) { if (source !== undefined) { var fileName = source.fileName.replace(/^.*[\\\/]/, ''); var lineNumber = source.lineNumber; return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; } return ''; } function getSourceInfoErrorAddendumForProps(elementProps) { if (elementProps !== null && elementProps !== undefined) { return getSourceInfoErrorAddendum(elementProps.__source); } return ''; } /** * Warn if there's no key explicitly set on dynamic arrays of children or * object keys are not valid. This allows us to keep track of children between * updates. */ var ownerHasKeyUseWarning = {}; function getCurrentComponentErrorInfo(parentType) { var info = getDeclarationErrorAddendum(); if (!info) { var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; if (parentName) { info = "\n\nCheck the top-level render call using <" + parentName + ">."; } } return info; } /** * Warn if the element doesn't have an explicit key assigned to it. * This element is in an array. The array could grow and shrink or be * reordered. All children that haven't already been validated are required to * have a "key" property assigned to it. Error statuses are cached so a warning * will only be shown once. * * @internal * @param {ReactElement} element Element that requires a key. * @param {*} parentType element's parent's type. */ function validateExplicitKey(element, parentType) { if (!element._store || element._store.validated || element.key != null) { return; } element._store.validated = true; var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { return; } ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a // property, it may be the creator of the child that's responsible for // assigning it a key. var childOwner = ''; if (element && element._owner && element._owner !== ReactCurrentOwner.current) { // Give the component that originally created this child. childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + "."; } { setCurrentlyValidatingElement$1(element); error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); setCurrentlyValidatingElement$1(null); } } /** * Ensure that every element either is passed in a static location, in an * array with an explicit keys property defined, or in an object literal * with valid key property. * * @internal * @param {ReactNode} node Statically passed child of any type. * @param {*} parentType node's parent's type. */ function validateChildKeys(node, parentType) { if (typeof node !== 'object') { return; } if (isArray(node)) { for (var i = 0; i < node.length; i++) { var child = node[i]; if (isValidElement(child)) { validateExplicitKey(child, parentType); } } } else if (isValidElement(node)) { // This element was passed in a valid location. if (node._store) { node._store.validated = true; } } else if (node) { var iteratorFn = getIteratorFn(node); if (typeof iteratorFn === 'function') { // Entry iterators used to provide implicit keys, // but now we print a separate warning for them later. if (iteratorFn !== node.entries) { var iterator = iteratorFn.call(node); var step; while (!(step = iterator.next()).done) { if (isValidElement(step.value)) { validateExplicitKey(step.value, parentType); } } } } } } /** * Given an element, validate that its props follow the propTypes definition, * provided by the type. * * @param {ReactElement} element */ function validatePropTypes(element) { { var type = element.type; if (type === null || type === undefined || typeof type === 'string') { return; } var propTypes; if (typeof type === 'function') { propTypes = type.propTypes; } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. // Inner props are checked in the reconciler. type.$$typeof === REACT_MEMO_TYPE)) { propTypes = type.propTypes; } else { return; } if (propTypes) { // Intentionally inside to avoid triggering lazy initializers: var name = getComponentNameFromType(type); checkPropTypes(propTypes, element.props, 'prop', name, element); } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: var _name = getComponentNameFromType(type); error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); } if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); } } } /** * Given a fragment, validate that it can only be provided with fragment props * @param {ReactElement} fragment */ function validateFragmentProps(fragment) { { var keys = Object.keys(fragment.props); for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (key !== 'children' && key !== 'key') { setCurrentlyValidatingElement$1(fragment); error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); setCurrentlyValidatingElement$1(null); break; } } if (fragment.ref !== null) { setCurrentlyValidatingElement$1(fragment); error('Invalid attribute `ref` supplied to `React.Fragment`.'); setCurrentlyValidatingElement$1(null); } } } function createElementWithValidation(type, props, children) { var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to // succeed and there will likely be errors in render. if (!validType) { var info = ''; if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; } var sourceInfo = getSourceInfoErrorAddendumForProps(props); if (sourceInfo) { info += sourceInfo; } else { info += getDeclarationErrorAddendum(); } var typeString; if (type === null) { typeString = 'null'; } else if (isArray(type)) { typeString = 'array'; } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />"; info = ' Did you accidentally export a JSX literal instead of a component?'; } else { typeString = typeof type; } { error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); } } var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used. // TODO: Drop this when these are no longer allowed as the type argument. if (element == null) { return element; } // Skip key warning if the type isn't valid since our key validation logic // doesn't expect a non-string/function type and can throw confusing errors. // We don't want exception behavior to differ between dev and prod. // (Rendering will throw with a helpful message and as soon as the type is // fixed, the key warnings will appear.) if (validType) { for (var i = 2; i < arguments.length; i++) { validateChildKeys(arguments[i], type); } } if (type === REACT_FRAGMENT_TYPE) { validateFragmentProps(element); } else { validatePropTypes(element); } return element; } var didWarnAboutDeprecatedCreateFactory = false; function createFactoryWithValidation(type) { var validatedFactory = createElementWithValidation.bind(null, type); validatedFactory.type = type; { if (!didWarnAboutDeprecatedCreateFactory) { didWarnAboutDeprecatedCreateFactory = true; warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.'); } // Legacy hook: remove it Object.defineProperty(validatedFactory, 'type', { enumerable: false, get: function () { warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.'); Object.defineProperty(this, 'type', { value: type }); return type; } }); } return validatedFactory; } function cloneElementWithValidation(element, props, children) { var newElement = cloneElement.apply(this, arguments); for (var i = 2; i < arguments.length; i++) { validateChildKeys(arguments[i], newElement.type); } validatePropTypes(newElement); return newElement; } function startTransition(scope, options) { var prevTransition = ReactCurrentBatchConfig.transition; ReactCurrentBatchConfig.transition = {}; var currentTransition = ReactCurrentBatchConfig.transition; { ReactCurrentBatchConfig.transition._updatedFibers = new Set(); } try { scope(); } finally { ReactCurrentBatchConfig.transition = prevTransition; { if (prevTransition === null && currentTransition._updatedFibers) { var updatedFibersCount = currentTransition._updatedFibers.size; if (updatedFibersCount > 10) { warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.'); } currentTransition._updatedFibers.clear(); } } } } var didWarnAboutMessageChannel = false; var enqueueTaskImpl = null; function enqueueTask(task) { if (enqueueTaskImpl === null) { try { // read require off the module object to get around the bundlers. // we don't want them to detect a require and bundle a Node polyfill. var requireString = ('require' + Math.random()).slice(0, 7); var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's // version of setImmediate, bypassing fake timers if any. enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate; } catch (_err) { // we're in a browser // we can't use regular timers because they may still be faked // so we try MessageChannel+postMessage instead enqueueTaskImpl = function (callback) { { if (didWarnAboutMessageChannel === false) { didWarnAboutMessageChannel = true; if (typeof MessageChannel === 'undefined') { error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.'); } } } var channel = new MessageChannel(); channel.port1.onmessage = callback; channel.port2.postMessage(undefined); }; } } return enqueueTaskImpl(task); } var actScopeDepth = 0; var didWarnNoAwaitAct = false; function act(callback) { { // `act` calls can be nested, so we track the depth. This represents the // number of `act` scopes on the stack. var prevActScopeDepth = actScopeDepth; actScopeDepth++; if (ReactCurrentActQueue.current === null) { // This is the outermost `act` scope. Initialize the queue. The reconciler // will detect the queue and use it instead of Scheduler. ReactCurrentActQueue.current = []; } var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy; var result; try { // Used to reproduce behavior of `batchedUpdates` in legacy mode. Only // set to `true` while the given callback is executed, not for updates // triggered during an async event, because this is how the legacy // implementation of `act` behaved. ReactCurrentActQueue.isBatchingLegacy = true; result = callback(); // Replicate behavior of original `act` implementation in legacy mode, // which flushed updates immediately after the scope function exits, even // if it's an async function. if (!prevIsBatchingLegacy && ReactCurrentActQueue.didScheduleLegacyUpdate) { var queue = ReactCurrentActQueue.current; if (queue !== null) { ReactCurrentActQueue.didScheduleLegacyUpdate = false; flushActQueue(queue); } } } catch (error) { popActScope(prevActScopeDepth); throw error; } finally { ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy; } if (result !== null && typeof result === 'object' && typeof result.then === 'function') { var thenableResult = result; // The callback is an async function (i.e. returned a promise). Wait // for it to resolve before exiting the current scope. var wasAwaited = false; var thenable = { then: function (resolve, reject) { wasAwaited = true; thenableResult.then(function (returnValue) { popActScope(prevActScopeDepth); if (actScopeDepth === 0) { // We've exited the outermost act scope. Recursively flush the // queue until there's no remaining work. recursivelyFlushAsyncActWork(returnValue, resolve, reject); } else { resolve(returnValue); } }, function (error) { // The callback threw an error. popActScope(prevActScopeDepth); reject(error); }); } }; { if (!didWarnNoAwaitAct && typeof Promise !== 'undefined') { // eslint-disable-next-line no-undef Promise.resolve().then(function () {}).then(function () { if (!wasAwaited) { didWarnNoAwaitAct = true; error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);'); } }); } } return thenable; } else { var returnValue = result; // The callback is not an async function. Exit the current scope // immediately, without awaiting. popActScope(prevActScopeDepth); if (actScopeDepth === 0) { // Exiting the outermost act scope. Flush the queue. var _queue = ReactCurrentActQueue.current; if (_queue !== null) { flushActQueue(_queue); ReactCurrentActQueue.current = null; } // Return a thenable. If the user awaits it, we'll flush again in // case additional work was scheduled by a microtask. var _thenable = { then: function (resolve, reject) { // Confirm we haven't re-entered another `act` scope, in case // the user does something weird like await the thenable // multiple times. if (ReactCurrentActQueue.current === null) { // Recursively flush the queue until there's no remaining work. ReactCurrentActQueue.current = []; recursivelyFlushAsyncActWork(returnValue, resolve, reject); } else { resolve(returnValue); } } }; return _thenable; } else { // Since we're inside a nested `act` scope, the returned thenable // immediately resolves. The outer scope will flush the queue. var _thenable2 = { then: function (resolve, reject) { resolve(returnValue); } }; return _thenable2; } } } } function popActScope(prevActScopeDepth) { { if (prevActScopeDepth !== actScopeDepth - 1) { error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. '); } actScopeDepth = prevActScopeDepth; } } function recursivelyFlushAsyncActWork(returnValue, resolve, reject) { { var queue = ReactCurrentActQueue.current; if (queue !== null) { try { flushActQueue(queue); enqueueTask(function () { if (queue.length === 0) { // No additional work was scheduled. Finish. ReactCurrentActQueue.current = null; resolve(returnValue); } else { // Keep flushing work until there's none left. recursivelyFlushAsyncActWork(returnValue, resolve, reject); } }); } catch (error) { reject(error); } } else { resolve(returnValue); } } } var isFlushing = false; function flushActQueue(queue) { { if (!isFlushing) { // Prevent re-entrance. isFlushing = true; var i = 0; try { for (; i < queue.length; i++) { var callback = queue[i]; do { callback = callback(true); } while (callback !== null); } queue.length = 0; } catch (error) { // If something throws, leave the remaining callbacks on the queue. queue = queue.slice(i + 1); throw error; } finally { isFlushing = false; } } } } var createElement$1 = createElementWithValidation ; var cloneElement$1 = cloneElementWithValidation ; var createFactory = createFactoryWithValidation ; var Children = { map: mapChildren, forEach: forEachChildren, count: countChildren, toArray: toArray, only: onlyChild }; exports.Children = Children; exports.Component = Component; exports.Fragment = REACT_FRAGMENT_TYPE; exports.Profiler = REACT_PROFILER_TYPE; exports.PureComponent = PureComponent; exports.StrictMode = REACT_STRICT_MODE_TYPE; exports.Suspense = REACT_SUSPENSE_TYPE; exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals; exports.cloneElement = cloneElement$1; exports.createContext = createContext; exports.createElement = createElement$1; exports.createFactory = createFactory; exports.createRef = createRef; exports.forwardRef = forwardRef; exports.isValidElement = isValidElement; exports.lazy = lazy; exports.memo = memo; exports.startTransition = startTransition; exports.unstable_act = act; exports.useCallback = useCallback; exports.useContext = useContext; exports.useDebugValue = useDebugValue; exports.useDeferredValue = useDeferredValue; exports.useEffect = useEffect; exports.useId = useId; exports.useImperativeHandle = useImperativeHandle; exports.useInsertionEffect = useInsertionEffect; exports.useLayoutEffect = useLayoutEffect; exports.useMemo = useMemo; exports.useReducer = useReducer; exports.useRef = useRef; exports.useState = useState; exports.useSyncExternalStore = useSyncExternalStore; exports.useTransition = useTransition; exports.version = ReactVersion; /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ if ( typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop === 'function' ) { __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error()); } })(); } }).call(this,require("hmr7eR")) },{"hmr7eR":1}],13:[function(require,module,exports){ /** * @license React * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict';var l=Symbol.for("react.element"),n=Symbol.for("react.portal"),p=Symbol.for("react.fragment"),q=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),t=Symbol.for("react.provider"),u=Symbol.for("react.context"),v=Symbol.for("react.forward_ref"),w=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),z=Symbol.iterator;function A(a){if(null===a||"object"!==typeof a)return null;a=z&&a[z]||a["@@iterator"];return"function"===typeof a?a:null} var B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={}; E.prototype.setState=function(a,b){if("object"!==typeof a&&"function"!==typeof a&&null!=a)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,a,b,"setState")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,"forceUpdate")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F; H.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0}; function M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=""+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1{window.WPFormsAi={api:e.default(),helpers:{text:t.default,choices:s.default}},customElements.define("wpforms-ai-chat",WPFormsAIChatHTMLElement)});class WPFormsAIChatHTMLElement extends HTMLElement{constructor(){super()}connectedCallback(){this.chatMode=this.getAttribute("mode")??"text",this.fieldId=this.getAttribute("field-id")??"",this.modeStrings=wpforms_ai_chat_element[this.chatMode]??{},this.loadingState=!1,this.modeHelpers=this.getHelpers(this),this.modeHelpers?(this.innerHTML=this.getInnerHTML(),this.wrapper=this.querySelector(".wpforms-ai-chat"),this.input=this.querySelector(".wpforms-ai-chat-message-input input"),this.welcomeScreenSamplePrompts=this.querySelector(".wpforms-ai-chat-welcome-screen-sample-prompts"),this.sendButton=this.querySelector(".wpforms-ai-chat-send"),this.stopButton=this.querySelector(".wpforms-ai-chat-stop"),this.messageList=this.querySelector(".wpforms-ai-chat-message-list"),navigator.userAgent.includes("Macintosh")||this.messageList.classList.add("wpforms-scrollbar-compact"),this.events()):console.error(`WPFormsAI error: chat mode "${this.chatMode}" helpers not found`)}getInnerHTML(){return`
      ${this.getWelcomeScreen()}
      `}getWelcomeScreen(){var e=this.modeStrings.samplePrompts,t=[];let s="";if(this.modeHelpers.isWelcomeScreen()){for(const i in e)t.push(`
    • ${e[i].title}
    • `);s=`
        ${t.join("")}
      `}else this.messagePreAdded=!0,s=this.modeHelpers.getWarningMessage();return`

      ${this.modeStrings.title}

      ${this.modeStrings.description} ${this.modeStrings.learnMore}.
      ${s}
      `}getSpinnerSvg(){return''}events(){this.sendButton.addEventListener("click",this.sendMessage.bind(this)),this.stopButton.addEventListener("click",this.stopLoading.bind(this)),this.input.addEventListener("keyup",this.keyUp.bind(this)),this.bindWelcomeScreenEvents()}bindWelcomeScreenEvents(){null!==this.welcomeScreenSamplePrompts&&this.welcomeScreenSamplePrompts.querySelectorAll("li").forEach(e=>{e.addEventListener("click",this.clickDefaultItem.bind(this)),e.addEventListener("keydown",e=>{"Enter"===e.code&&(e.preventDefault(),this.clickDefaultItem(e))})})}keyUp(e){switch(e.code){case"Enter":e.preventDefault(),this.sendMessage();break;case"ArrowUp":this.arrowUp();break;case"ArrowDown":this.arrowDown();break;default:this.history.update({question:this.input.value})}}sendMessage(){var e=this.input.value;e&&(this.triggerEvent("wpformsAIChatBeforeSendMessage",{fieldId:this.fieldId}),this.addFirstMessagePre(),this.welcomeScreenSamplePrompts?.remove(),this.input.value="",this.addMessage(e,!0),this.startLoading(),""===e.trim()?this.addEmptyResultsError():this.getAiApi().prompt(e,this.sessionId).then(e=>{this.addAnswer(e)}).catch(e=>{429===e.cause?this.addError(this.modeStrings.errors.rate_limit||wpforms_ai_chat_element.errors.rate_limit,this.modeStrings.reasons.rate_limit||wpforms_ai_chat_element.reasons.rate_limit):500===e.cause?this.addEmptyResultsError():(this.addError(e||this.modeStrings.errors.default||wpforms_ai_chat_element.errors.default,this.modeStrings.reasons.default||wpforms_ai_chat_element.reasons.default),console.log("WPFormsAI error: "+e))}))}addFirstMessagePre(){var e;this.sessionId||this.messagePreAdded||(this.messagePreAdded=!0,(e=document.createElement("div")).classList.add("wpforms-ai-chat-divider"),this.messageList.appendChild(e))}clickDefaultItem(e){e=("LI"===e.target.nodeName?e.target:e.target.closest("li")).querySelector("a")?.textContent;e&&(this.input.value=e,this.sendMessage())}clickDislikeButton(e){var e=e.target,t=e?.closest(".wpforms-chat-item-answer");t&&(e.classList.add("clicked"),e.setAttribute("disabled",!0),e=t.getAttribute("data-response-id"),this.wpformsAiApi.rate(!1,e))}async clickRefreshButton(){this.triggerEvent("wpformsAIChatBeforeRefreshConfirm",{fieldId:this.fieldId}),WPFormsAIModal.confirmModal({title:wpforms_ai_chat_element.confirm.refreshTitle,content:wpforms_ai_chat_element.confirm.refreshMessage,onConfirm:()=>{this.messageList.innerHTML=this.getWelcomeScreen(),this.welcomeScreenSamplePrompts=this.querySelector(".wpforms-ai-chat-welcome-screen-sample-prompts"),this.bindWelcomeScreenEvents(),this.scrollMessagesTo("top"),this.wpformsAiApi=null,this.sessionId=null,this.messagePreAdded=null,this.wrapper.removeAttribute("data-session-id"),this.history.clear(),this.triggerEvent("wpformsAIChatAfterRefresh",{fieldId:this.fieldId})},onCancel:()=>{this.triggerEvent("wpformsAIChatCancelRefresh",{fieldId:this.fieldId})}})}startLoading(){this.loadingState=!0,this.sendButton.classList.add("wpforms-hidden"),this.stopButton.classList.remove("wpforms-hidden"),this.input.setAttribute("disabled",!0),this.input.setAttribute("placeholder",this.modeStrings.waiting)}stopLoading(){this.loadingState=!1,this.messageList.querySelector(".wpforms-chat-item-answer-waiting")?.remove(),this.sendButton.classList.remove("wpforms-hidden"),this.stopButton.classList.add("wpforms-hidden"),this.input.removeAttribute("disabled"),this.input.setAttribute("placeholder",this.modeStrings.placeholder),this.input.focus()}arrowUp(){var e=this.history.prev()?.question;void 0!==e&&(this.input.value=e)}arrowDown(){var e=this.history.next()?.question;void 0!==e&&(this.input.value=e)}getAiApi(){return this.wpformsAiApi||(this.sessionId=this.wrapper.getAttribute("data-session-id")||null,this.wpformsAiApi=window.WPFormsAi.api(this.chatMode,this.sessionId)),this.wpformsAiApi}scrollMessagesTo(e="bottom"){"top"===e?this.messageList.scrollTop=0:this.messageList.scrollHeight-this.messageList.scrollTop<22||(this.messageList.scrollTop=this.messageList.scrollHeight)}addMessage(e,t,s=null){var i,r=this["messageList"],a=document.createElement("div");return a.classList.add("wpforms-chat-item"),r.appendChild(a),t?(a.innerText=e,a.classList.add("wpforms-chat-item-question"),t=document.createElement("div"),i=document.createElement("div"),t.classList.add("wpforms-chat-item-answer-waiting"),i.classList.add("wpforms-chat-item-spinner"),i.innerHTML=this.getSpinnerSvg(),t.appendChild(i),r.appendChild(t),this.history.push({})):((i=document.createElement("div")).classList.add("wpforms-chat-item-content"),a.appendChild(i),r.querySelector(".wpforms-chat-item-answer-waiting")?.remove(),a.classList.add("wpforms-chat-item-answer"),a.classList.add("wpforms-chat-item-typing"),a.classList.add("wpforms-chat-item-"+this.chatMode),a.setAttribute("data-response-id",s?.responseId??""),this.history.update({answer:e}),this.typeText(i,e,this.addedAnswer.bind(this))),this.scrollMessagesTo("bottom"),a}addError(e,t){let s="";this.loadingState&&(e&&(s+=`

      ${e}

      `),t&&(s+=`${t}`),e=document.createElement("div"),t=document.createElement("div"),e.classList.add("wpforms-chat-item"),e.classList.add("wpforms-chat-item-error"),t.classList.add("wpforms-chat-item-content"),e.appendChild(t),this.messageList.querySelector(".wpforms-chat-item-answer-waiting")?.remove(),this.messageList.appendChild(e),this.typeText(t,s,()=>{this.stopLoading()}))}addEmptyResultsError(){this.addError(this.modeStrings.errors.empty||wpforms_ai_chat_element.errors.empty,this.modeStrings.reasons.empty||wpforms_ai_chat_element.reasons.empty)}addAnswer(e){var t;this.loadingState&&e&&((t=this.modeHelpers.getAnswer(e))?(this.sessionId=e.sessionId,this.wrapper.setAttribute("data-session-id",this.sessionId),this.addMessage(t,!1,e)):this.addEmptyResultsError())}addedAnswer(e){e.innerHTML+=this.getAnswerButtons(),e.parentElement.classList.remove("wpforms-chat-item-typing"),wpf.initTooltips(),this.stopLoading(),e.querySelector(".wpforms-ai-chat-answer-button.dislike")?.addEventListener("click",this.clickDislikeButton.bind(this)),e.querySelector(".wpforms-ai-chat-answer-button.refresh")?.addEventListener("click",this.clickRefreshButton.bind(this)),this.modeHelpers.addedAnswer(e)}getAnswerButtons(){return`
      ${this.modeHelpers.getAnswerButtonsPre()}
      `}typeText(s,i,r){const a=this;let n=0,o="";!function e(){var t=i.substring(n,n+5);o+=t,s.innerHTML=o.replace(/<[^>]*$/g,""),(n+=5)]/g,e=>"�"+e.charCodeAt(0)+";")}triggerEvent(e,t={}){e=new CustomEvent(e,{detail:t});return document.dispatchEvent(e),e}history={data:[],pointer:0,defaultItem:{question:"",answer:null},get(e=null){return e&&(this.pointer=e),this.pointer<1?this.pointer=0:this.pointer>=this.data.length&&(this.pointer=this.data.length-1),this.data[this.pointer]??{}},prev(){return--this.pointer,this.get()},next(){return this.pointer+=1,this.get()},push(e){e.answer?this.data[this.data.length-1].answer=e.answer:(this.data.push({...this.defaultItem,...e}),this.pointer=this.data.length-1)},update(e){var t=0`; args.theme = `wpforms-ai-modal, wpforms-ai-purple, wpforms-ai-modal-choices-${ fieldId }`; args.backgroundDismiss = hideChoices; args.backgroundDismissAnimation = ''; args.contentMaxHeight = Math.min( app.defaultOptions.contentMaxHeight, app.getMaxModalHeight() ); args.onOpen = function() { // Unbind the click event from the close icon and use our own instead. this.$closeIcon.off( 'click' ); this.$closeIcon.on( 'click', hideChoices ); }; app.initModal( args ); }, /** * Hide the choices modal window. * * @since 1.9.1 * * @param {string} fieldId Choice field ID. */ hideChoicesModal( fieldId ) { $( `.jconfirm-wpforms-ai-modal-choices-${ fieldId }` ).addClass( 'wpforms-hidden' ).fadeOut(); }, /** * Show the choices modal window. * * @since 1.9.1 * * @param {string} fieldId Choice field ID. */ showChoicesModal( fieldId ) { $( `.jconfirm-wpforms-ai-modal-choices-${ fieldId }` ).removeClass( 'wpforms-hidden' ).fadeIn(); }, /** * Resize choices modal window height. * * @since 1.9.1 * * @param {string} fieldId Choice field ID. */ resizeChoicesModalHeight( fieldId ) { const modalHeight = app.getMaxModalHeight(); $( `.jconfirm-wpforms-ai-modal-choices-${ fieldId } .jconfirm-content-pane` ) .css( { height: modalHeight, 'max-height': modalHeight, } ); }, /** * Before choices refresh confirm is displayed. * * @since 1.9.1 * * @param {Event} e Event object. */ beforeChoicesRefreshConfirm( e ) { const fieldId = e.detail?.fieldId || 0; app.hideChoicesModal( fieldId ); }, /** * Cancel choices refresh. * * @since 1.9.1 * * @param {Event} e Event object. */ cancelChoicesRefresh( e ) { const fieldId = e.detail?.fieldId || 0; app.showChoicesModal( fieldId ); }, /** * Refresh main modal window height. * * @since 1.9.1 * * @param {Event} e Event object. */ refreshModalHeight( e ) { const fieldId = e.detail?.fieldId || 0; const maxHeight = Math.min( app.getMaxModalHeight(), app.defaultOptions.contentMaxHeight ); app.showChoicesModal( fieldId ); // Reset choices modal window height. $( `.jconfirm-wpforms-ai-modal-choices-${ fieldId } .jconfirm-content-pane` ) .css( { height: maxHeight, 'max-height': maxHeight, } ); }, /** * Get the max modal height. * * @since 1.9.1 * * @return {number} The max modal height. */ getMaxModalHeight() { // 80% of the window height, but not more than 800px. return Math.min( $( window ).height() * 0.8, 800 ); }, /** * Extend jquery-confirm plugin with support of max-height for the content area. * * @since 1.9.1 */ extendJqueryConfirm() { // Extend a method of global instance. window.Jconfirm.prototype._updateContentMaxHeight = function() { this.$contentPane.css( { 'max-height': this.contentMaxHeight + 'px', } ); }; }, /** * Confirm modal window. * * This is a wrapper for the jquery.confirm plugin. * * @since 1.9.1 * * @param {Object} args Modal window arguments. */ confirmModal( args ) { const options = { title: false, content: '', icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_ai_chat_element.btnYes, btnClass: 'btn-confirm', keys: [ 'enter' ], action() { if ( typeof args.onConfirm === 'function' ) { args.onConfirm(); } }, }, cancel: { text: wpforms_ai_chat_element.btnCancel, action() { if ( typeof args.onCancel === 'function' ) { args.onCancel(); } }, }, }, }; $.confirm( { ...options, ...args } ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsAIModal.init(); assets/js/integrations/ai/modules/helpers-text.js000064400000002015147400353540016216 0ustar00/* global WPFormsAIChatHTMLElement */ /** * The WPForms AI chat element. * * Choices helpers module. * * @since 1.9.1 * * @param {WPFormsAIChatHTMLElement} chat The chat element. * * @return {Function} The app cloning function. */ export default function( chat ) { // eslint-disable-line no-unused-vars /** * The default `text` mode helpers object. * * @since 1.9.1 */ return { /** * Get the `text` answer based on AI response data. * * @since 1.9.1 * * @param {Object} response The AI response data. * * @return {string} HTML markup. */ getAnswer( response ) { return `

      ${ response?.heading ?? '' }

      ${ response?.text ?? '' }

      ${ response?.footer ?? '' } `; }, /** * Get the answer pre-buttons HTML markup. * * @since 1.9.1 * * @return {string} The answer pre-buttons HTML markup. */ getAnswerButtonsPre() { return ''; }, /** * Added answer callback. * * @since 1.9.1 */ addedAnswer() {}, }; } assets/js/integrations/ai/modules/helpers-choices.js000064400000016267147400353540016665 0ustar00/* global WPFormsAIChatHTMLElement, WPFormsBuilder */ /** * The WPForms AI chat element. * * Choices helpers module. * * @since 1.9.1 * * @param {WPFormsAIChatHTMLElement} chat The chat element. * * @return {Function} The app cloning function. */ export default function( chat ) { // eslint-disable-line max-lines-per-function /** * The `choices` mode helpers object. * * @since 1.9.1 */ return { /** * Get the `choices` answer based on AI response data. * * @since 1.9.1 * * @param {Object} response The response data. * * @return {string} Answer HTML markup. */ getAnswer( response ) { if ( response.choices?.length < 1 ) { return ''; } const li = []; for ( const i in response.choices ) { li.push( `
    • ${ chat.htmlSpecialChars( response.choices[ i ] ) }
    • ` ); } let answerHtml = `

      ${ chat.htmlSpecialChars( response.heading ?? '' ) }

        ${ li.join( '' ) }
      `; // Add footer to the first answer only. if ( ! chat.sessionId ) { answerHtml += `${ chat.modeStrings.footer }`; } return answerHtml; }, /** * Get the answer pre-buttons HTML markup. * * @since 1.9.1 * * @return {string} The answer pre-buttons HTML markup. */ getAnswerButtonsPre() { return ` `; }, /** * Get the warning message HTML markup. * * @since 1.9.1 * * @return {string} The warning message HTML markup. */ getWarningMessage() { // Trigger event before warning message insert. chat.triggerEvent( 'wpformsAIModalBeforeWarningMessageInsert', { fieldId: chat.fieldId } ); return `
      ${ chat.modeStrings.warning }
      `; }, /** * If the field has default choices, the welcome screen is active. * * @since 1.9.1 * * @return {boolean} True if the field has default choices, false otherwise. */ isWelcomeScreen() { const items = document.getElementById( `wpforms-field-option-row-${ chat.fieldId }-choices` ) .querySelectorAll( 'li input.label' ); if ( items.length === 1 && ! items[ 0 ].value.trim() ) { return true; } if ( items.length > 3 ) { return false; } const defaults = Object.values( chat.modeStrings.defaults ); for ( let i = 0; i < items.length; i++ ) { if ( ! defaults.includes( items[ i ].value ) ) { return false; } } return true; }, /** * Add the `choices` answer. * * @since 1.9.1 * * @param {HTMLElement} element The answer element. */ addedAnswer( element ) { const button = element.querySelector( '.wpforms-ai-chat-choices-insert' ); // Listen to the button click event. button?.addEventListener( 'click', this.insertButtonClick.bind( this ) ); }, /** * Click on the Use Choices button. * * @since 1.9.1 * * @param {Event} e The event object. */ insertButtonClick( e ) { const button = e.target; const answer = button.closest( '.wpforms-chat-item.wpforms-chat-item-choices' ); const responseId = answer?.getAttribute( 'data-response-id' ); const choicesList = answer?.querySelector( 'ol' ); const items = choicesList.querySelectorAll( '.wpforms-ai-chat-choices-item' ); const choiceItems = []; // Get choices data. for ( const i in items ) { if ( ! items.hasOwnProperty( i ) || ! items[ i ].textContent ) { continue; } choiceItems.push( items[ i ].textContent.trim() ); } // Rate the response. chat.wpformsAiApi.rate( true, responseId ); // Replace field choices. this.replaceChoices( choiceItems ); }, /** * Replace field choices. * * @since 1.9.1 * * @param {Array} choices Choices array. */ replaceChoices( choices ) { const choicesOptionRow = document.getElementById( `wpforms-field-option-row-${ chat.fieldId }-choices` ); const choicesList = choicesOptionRow.querySelector( 'ul.choices-list' ); const choiceRow = choicesList.querySelector( 'li:first-child' ).cloneNode( true ); choiceRow.innerHTML = choiceRow.innerHTML.replace( /\[choices\]\[\d+\]/g, `[choices][{{key}}]` ); // Clear existing choices. choicesList.innerHTML = ''; // Add new choices. for ( const i in choices ) { const key = ( Number( i ) + 1 ).toString(); const choice = choices[ i ]; // Clone choice item element. let li = choiceRow.cloneNode( true ); // Get updated single choice item. li = this.getUpdatedSingleChoiceItem( li, key, choice ); // Add new choice item. choicesList.appendChild( li ); } // Update data-next-id attribute for choices list. choicesList.setAttribute( 'data-next-id', choices.length + 1 ); // Update field preview. const fieldOptions = document.getElementById( `wpforms-field-option-${ chat.fieldId }` ); const fieldType = fieldOptions.querySelector( 'input.wpforms-field-option-hidden-type' )?.value; WPFormsBuilder.fieldChoiceUpdate( fieldType, chat.fieldId, choices.length ); WPFormsBuilder.triggerBuilderEvent( 'wpformsFieldChoiceAdd' ); // Trigger event after choices insert. chat.triggerEvent( 'wpformsAIModalAfterChoicesInsert', { fieldId: chat.fieldId } ); }, /** * Get updated single choice item. * * @since 1.9.1 * * @param {HTMLElement} li Choice item element. * @param {string} key Choice key. * @param {string} choice Choice value. * * @return {HTMLElement} The updated choice item. */ getUpdatedSingleChoiceItem( li, key, choice ) { li.setAttribute( 'data-key', key.toString() ); // Update choice item inputs name attributes. li.innerHTML = li.innerHTML.replaceAll( '{{key}}', key ); // Escape HTML special characters. choice = chat.htmlSpecialChars( choice ); const inputDefault = li.querySelector( 'input.default' ); inputDefault.removeAttribute( 'checked' ); // Set label const inputLabel = li.querySelector( 'input.label' ); inputLabel.value = choice; inputLabel.setAttribute( 'value', choice ); // Set value. const inputValue = li.querySelector( 'input.value' ); inputValue.value = choice; inputValue.setAttribute( 'value', choice ); // Reset image upload. const imageUpload = li.querySelector( '.wpforms-image-upload' ); const inputImage = imageUpload.querySelector( 'input.source' ); inputImage.value = ''; inputImage.setAttribute( 'value', '' ); imageUpload.querySelector( '.preview' ).innerHTML = ''; imageUpload.querySelector( '.wpforms-image-upload-add' ).style.display = 'block'; // Reset icon choice. const iconSelect = li.querySelector( '.wpforms-icon-select' ); iconSelect.querySelector( '.ic-fa-preview' ).setAttribute( 'class', 'ic-fa-preview ic-fa-regular ic-fa-face-smile' ); iconSelect.querySelector( 'input.source-icon' ).value = 'face-smile'; iconSelect.querySelector( 'input.source-icon-style' ).value = 'regular'; return li; }, }; } assets/js/integrations/ai/modules/api.min.js000064400000001707147400353540015134 0ustar00export default function(){const t={mode:"",actions:{rate:"wpforms_rate_ai_response",choices:"wpforms_get_ai_choices"},async ajax(e){e.nonce||(e.nonce=wpforms_ai_chat_element.nonce);e={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e).toString()},e=await fetch(wpforms_ai_chat_element.ajaxurl,e).catch(e=>{throw"Failed to fetch"===e.message?new Error(wpforms_ai_chat_element.errors.network):new Error(e.message)});if(!e.ok)throw new Error(wpforms_ai_chat_element.errors.network);e=await e.json();if(!e.success||e.data.error)throw new Error(e.data.error??wpforms_ai_chat_element.errors.default,{cause:e.data.code??400});return e.data},async prompt(e,r){e={action:t.actions[this.mode]??t.actions.choices,prompt:e};return r&&(e.session_id=r),t.ajax(e)},async rate(e,r){e={action:t.actions.rate,helpful:e,response_id:r};return t.ajax(e)},setMode(e){return this.mode=e,this}};return function(e){return{...t}.setMode(e)}}assets/js/integrations/ai/modules/helpers-text.min.js000064400000000311147400353540016775 0ustar00export default function(e){return{getAnswer(e){return`

      ${e?.heading??""}

      ${e?.text??""}

      ${e?.footer??""} `},getAnswerButtonsPre(){return""},addedAnswer(){}}}assets/js/integrations/ai/modules/helpers-choices.min.js000064400000006340147400353540017436 0ustar00export default function(c){return{getAnswer(e){if(e.choices?.length<1)return"";var t=[];for(const i in e.choices)t.push(`
    • ${c.htmlSpecialChars(e.choices[i])}
    • `);let r=`

      ${c.htmlSpecialChars(e.heading??"")}

        ${t.join("")}
      `;return c.sessionId||(r+=`${c.modeStrings.footer}`),r},getAnswerButtonsPre(){return` `},getWarningMessage(){return c.triggerEvent("wpformsAIModalBeforeWarningMessageInsert",{fieldId:c.fieldId}),`
      ${c.modeStrings.warning}
      `},isWelcomeScreen(){var t=document.getElementById(`wpforms-field-option-row-${c.fieldId}-choices`).querySelectorAll("li input.label");if(1!==t.length||t[0].value.trim()){if(3 { if ( error.message === 'Failed to fetch' ) { throw new Error( wpforms_ai_chat_element.errors.network ); } else { throw new Error( error.message ); } } ); if ( ! response.ok ) { throw new Error( wpforms_ai_chat_element.errors.network ); } const result = await response.json(); if ( ! result.success || result.data.error ) { throw new Error( result.data.error ?? wpforms_ai_chat_element.errors.default, { cause: result.data.code ?? 400, } ); } return result.data; }, /** * Prompt. * * @param {string} prompt The question to ask. * @param {string} sessionId Session ID. * * @return {Promise} The response data in promise. */ async prompt( prompt, sessionId ) { const data = { action: app.actions[ this.mode ] ?? app.actions.choices, prompt, }; if ( sessionId ) { data.session_id = sessionId; // eslint-disable-line camelcase } return app.ajax( data ); }, /** * Rate. * * @param {boolean} helpful Whether the response was helpful or not. * @param {string} responseId Response ID. * * @return {Promise} The response data in promise. */ async rate( helpful, responseId ) { const data = { action: app.actions.rate, helpful, response_id: responseId, // eslint-disable-line camelcase }; return app.ajax( data ); }, /** * Set the AI chat mode. * * @since 1.9.1 * * @param {string} mode The mode to set. * * @return {Object} The app object. */ setMode( mode ) { this.mode = mode; return this; }, }; /** * Return a clone of an app object. * * @since 1.9.1 * * @param {string} mode The AI prompt mode. * * @return {Object} Cloned app object. */ return function( mode ) { const obj = { ...app }; return obj.setMode( mode ); }; } assets/js/integrations/ai/wpforms-ai-chat-element.js000064400000053250147400353540016561 0ustar00/* global wpforms_ai_chat_element, WPFormsAIModal, wpf */ // Dynamic modules import. Promise.all( [ import( `./modules/api${ wpforms_ai_chat_element.min }.js` ), import( `./modules/helpers-text${ wpforms_ai_chat_element.min }.js` ), import( `./modules/helpers-choices${ wpforms_ai_chat_element.min }.js` ), ] ) .then( ( [ apiModule, helpersText, helpersChoices ] ) => { window.WPFormsAi = { api: apiModule.default(), helpers: { text: helpersText.default, choices: helpersChoices.default, }, }; // Register the custom HTML element. customElements.define( 'wpforms-ai-chat', WPFormsAIChatHTMLElement ); // eslint-disable-line no-use-before-define } ); /** * @param this.modeStrings.learnMore * @param wpforms_ai_chat_element.dislike * @param wpforms_ai_chat_element.refresh * @param wpforms_ai_chat_element.confirm.refreshTitle * @param wpforms_ai_chat_element.confirm.refreshMessage */ /** * The WPForms AI chat. * * Custom HTML element class. * * @since 1.9.1 */ class WPFormsAIChatHTMLElement extends HTMLElement { /** * Element constructor. * * @since 1.9.1 */ constructor() { // eslint-disable-line no-useless-constructor // Always call super first in constructor. super(); } /** * Element connected to the DOM. * * @since 1.9.1 */ connectedCallback() { // Init chat properties. this.chatMode = this.getAttribute( 'mode' ) ?? 'text'; this.fieldId = this.getAttribute( 'field-id' ) ?? ''; this.modeStrings = wpforms_ai_chat_element[ this.chatMode ] ?? {}; this.loadingState = false; // Init chat helpers according to the chat mode. this.modeHelpers = this.getHelpers( this ); // Bail if chat mode helpers not found. if ( ! this.modeHelpers ) { console.error( `WPFormsAI error: chat mode "${ this.chatMode }" helpers not found` ); // eslint-disable-line no-console return; } // Render chat HTML. this.innerHTML = this.getInnerHTML(); // Get chat elements. this.wrapper = this.querySelector( '.wpforms-ai-chat' ); this.input = this.querySelector( '.wpforms-ai-chat-message-input input' ); this.welcomeScreenSamplePrompts = this.querySelector( '.wpforms-ai-chat-welcome-screen-sample-prompts' ); this.sendButton = this.querySelector( '.wpforms-ai-chat-send' ); this.stopButton = this.querySelector( '.wpforms-ai-chat-stop' ); this.messageList = this.querySelector( '.wpforms-ai-chat-message-list' ); // Compact scrollbar for non-Mac devices. if ( ! navigator.userAgent.includes( 'Macintosh' ) ) { this.messageList.classList.add( 'wpforms-scrollbar-compact' ); } this.events(); } /** * Get initial innerHTML markup. * * @since 1.9.1 * * @return {string} The inner HTML markup. */ getInnerHTML() { return `
      ${ this.getWelcomeScreen() }
      `; } /** * Get the Welcome screen HTML markup. * * @since 1.9.1 * * @return {string} The spinner SVG markup. */ getWelcomeScreen() { const samplePrompts = this.modeStrings.samplePrompts; const li = []; let content = ''; if ( this.modeHelpers.isWelcomeScreen() ) { // Render sample prompts. for ( const i in samplePrompts ) { li.push( `
    • ${ samplePrompts[ i ].title }
    • ` ); } content = `
        ${ li.join( '' ) }
      `; } else { this.messagePreAdded = true; content = this.modeHelpers.getWarningMessage(); } return `

      ${ this.modeStrings.title }

      ${ this.modeStrings.description } ${ this.modeStrings.learnMore }.
      ${ content }
      `; } /** * Get the spinner SVG image. * * @since 1.9.1 * * @return {string} The spinner SVG markup. */ getSpinnerSvg() { return ``; } /** * Add event listeners. * * @since 1.9.1 */ events() { this.sendButton.addEventListener( 'click', this.sendMessage.bind( this ) ); this.stopButton.addEventListener( 'click', this.stopLoading.bind( this ) ); this.input.addEventListener( 'keyup', this.keyUp.bind( this ) ); this.bindWelcomeScreenEvents(); } /** * Bind welcome screen events. * * @since 1.9.1 */ bindWelcomeScreenEvents() { if ( this.welcomeScreenSamplePrompts === null ) { return; } // Click on the default item in the welcome screen. this.welcomeScreenSamplePrompts.querySelectorAll( 'li' ).forEach( ( li ) => { li.addEventListener( 'click', this.clickDefaultItem.bind( this ) ); li.addEventListener( 'keydown', ( e ) => { if ( e.code === 'Enter' ) { e.preventDefault(); this.clickDefaultItem( e ); } } ); } ); } /** * Keyboard `keyUp` event handler. * * @since 1.9.1 * * @param {KeyboardEvent} e The keyboard event. */ keyUp( e ) { switch ( e.code ) { case 'Enter': e.preventDefault(); this.sendMessage(); break; case 'ArrowUp': this.arrowUp(); break; case 'ArrowDown': this.arrowDown(); break; default: // Update the chat history. this.history.update( { question: this.input.value } ); } } /** * Send a question message to the chat. * * @since 1.9.1 */ sendMessage() { const message = this.input.value; if ( ! message ) { return; } // Fire event before sending the message. this.triggerEvent( 'wpformsAIChatBeforeSendMessage', { fieldId: this.fieldId } ); this.addFirstMessagePre(); this.welcomeScreenSamplePrompts?.remove(); this.input.value = ''; this.addMessage( message, true ); this.startLoading(); if ( message.trim() === '' ) { this.addEmptyResultsError(); return; } this .getAiApi() .prompt( message, this.sessionId ) .then( ( response ) => { this.addAnswer( response ); } ) // eslint-disable-next-line complexity .catch( ( error ) => { // Handle the rate limit error. if ( error.cause === 429 ) { this.addError( this.modeStrings.errors.rate_limit || wpforms_ai_chat_element.errors.rate_limit, this.modeStrings.reasons.rate_limit || wpforms_ai_chat_element.reasons.rate_limit ); return; } // Handle the Internal Server Error. if ( error.cause === 500 ) { this.addEmptyResultsError(); return; } this.addError( error || this.modeStrings.errors.default || wpforms_ai_chat_element.errors.default, this.modeStrings.reasons.default || wpforms_ai_chat_element.reasons.default ); console.log( 'WPFormsAI error: ' + error ); // eslint-disable-line no-console } ); } /** * Before the first message. * * @since 1.9.1 */ addFirstMessagePre() { if ( this.sessionId || this.messagePreAdded ) { return; } this.messagePreAdded = true; const divider = document.createElement( 'div' ); divider.classList.add( 'wpforms-ai-chat-divider' ); this.messageList.appendChild( divider ); } /** * Click on the default item in the welcome screen. * * @since 1.9.1 * * @param {Event} e The event object. */ clickDefaultItem( e ) { const li = e.target.nodeName === 'LI' ? e.target : e.target.closest( 'li' ); const message = li.querySelector( 'a' )?.textContent; if ( ! message ) { return; } this.input.value = message; this.sendMessage(); } /** * Click on the dislike button. * * @since 1.9.1 * * @param {Event} e The event object. */ clickDislikeButton( e ) { const button = e.target; const answer = button?.closest( '.wpforms-chat-item-answer' ); if ( ! answer ) { return; } button.classList.add( 'clicked' ); button.setAttribute( 'disabled', true ); const responseId = answer.getAttribute( 'data-response-id' ); this.wpformsAiApi.rate( false, responseId ); } /** * Click on the refresh button. * * @since 1.9.1 */ async clickRefreshButton() { const refreshConfirm = () => { // Restore the welcome screen. this.messageList.innerHTML = this.getWelcomeScreen(); this.welcomeScreenSamplePrompts = this.querySelector( '.wpforms-ai-chat-welcome-screen-sample-prompts' ); this.bindWelcomeScreenEvents(); this.scrollMessagesTo( 'top' ); // Clear the session ID. this.wpformsAiApi = null; this.sessionId = null; this.messagePreAdded = null; this.wrapper.removeAttribute( 'data-session-id' ); // Clear the chat history. this.history.clear(); // Fire the event after refreshing the chat. this.triggerEvent( 'wpformsAIChatAfterRefresh', { fieldId: this.fieldId } ); }; const refreshCancel = () => { // Fire the event when refresh is canceled. this.triggerEvent( 'wpformsAIChatCancelRefresh', { fieldId: this.fieldId } ); }; // Fire the event before refresh confirmation is opened. this.triggerEvent( 'wpformsAIChatBeforeRefreshConfirm', { fieldId: this.fieldId } ); // Open a confirmation modal. WPFormsAIModal.confirmModal( { title: wpforms_ai_chat_element.confirm.refreshTitle, content: wpforms_ai_chat_element.confirm.refreshMessage, onConfirm: refreshConfirm, onCancel: refreshCancel, } ); } /** * Start loading. * * @since 1.9.1 */ startLoading() { this.loadingState = true; this.sendButton.classList.add( 'wpforms-hidden' ); this.stopButton.classList.remove( 'wpforms-hidden' ); this.input.setAttribute( 'disabled', true ); this.input.setAttribute( 'placeholder', this.modeStrings.waiting ); } /** * Stop loading. * * @since 1.9.1 */ stopLoading() { this.loadingState = false; this.messageList.querySelector( '.wpforms-chat-item-answer-waiting' )?.remove(); this.sendButton.classList.remove( 'wpforms-hidden' ); this.stopButton.classList.add( 'wpforms-hidden' ); this.input.removeAttribute( 'disabled' ); this.input.setAttribute( 'placeholder', this.modeStrings.placeholder ); this.input.focus(); } /** * Keyboard `ArrowUp` key event handler. * * @since 1.9.1 */ arrowUp() { const prev = this.history.prev()?.question; if ( typeof prev !== 'undefined' ) { this.input.value = prev; } } /** * Keyboard `ArrowDown` key event handler. * * @since 1.9.1 */ arrowDown() { const next = this.history.next()?.question; if ( typeof next !== 'undefined' ) { this.input.value = next; } } /** * Get AI API object instance. * * @since 1.9.1 * * @return {Object} The AI API object. */ getAiApi() { if ( this.wpformsAiApi ) { return this.wpformsAiApi; } // Attempt to get the session ID from the element attribute OR the data attribute. // It is needed to restore the session ID after restoring the chat element. this.sessionId = this.wrapper.getAttribute( 'data-session-id' ) || null; // Create a new AI API object instance. this.wpformsAiApi = window.WPFormsAi.api( this.chatMode, this.sessionId ); return this.wpformsAiApi; } /** * Scroll message list to given edge. * * @since 1.9.1 * * @param {string} edge The edge to scroll to; `top` or `bottom`. */ scrollMessagesTo( edge = 'bottom' ) { if ( edge === 'top' ) { this.messageList.scrollTop = 0; return; } if ( this.messageList.scrollHeight - this.messageList.scrollTop < 22 ) { return; } this.messageList.scrollTop = this.messageList.scrollHeight; } /** * Add a message to the chat. * * @since 1.9.1 * * @param {string} message The message to add. * @param {boolean} isQuestion Whether it is a question. * @param {Object} response The response data, optional. * * @return {HTMLElement} The message element. */ addMessage( message, isQuestion, response = null ) { const { messageList } = this; const element = document.createElement( 'div' ); element.classList.add( 'wpforms-chat-item' ); messageList.appendChild( element ); if ( isQuestion ) { // Add a question. element.innerText = message; element.classList.add( 'wpforms-chat-item-question' ); // Add a waiting spinner. const spinnerWrapper = document.createElement( 'div' ), spinner = document.createElement( 'div' ); spinnerWrapper.classList.add( 'wpforms-chat-item-answer-waiting' ); spinner.classList.add( 'wpforms-chat-item-spinner' ); spinner.innerHTML = this.getSpinnerSvg(); spinnerWrapper.appendChild( spinner ); messageList.appendChild( spinnerWrapper ); // Add an empty chat history item. this.history.push( {} ); } else { // Add an answer. const itemContent = document.createElement( 'div' ); itemContent.classList.add( 'wpforms-chat-item-content' ); element.appendChild( itemContent ); // Remove the waiting spinner. messageList.querySelector( '.wpforms-chat-item-answer-waiting' )?.remove(); // Update element classes and attributes. element.classList.add( 'wpforms-chat-item-answer' ); element.classList.add( 'wpforms-chat-item-typing' ); element.classList.add( 'wpforms-chat-item-' + this.chatMode ); element.setAttribute( 'data-response-id', response?.responseId ?? '' ); // Update the answer in the chat history. this.history.update( { answer: message } ); // Type the message with the typewriter effect. this.typeText( itemContent, message, this.addedAnswer.bind( this ) ); } this.scrollMessagesTo( 'bottom' ); return element; } /** * Add an error to the chat. * * @since 1.9.1 * * @param {string} errorTitle The error title. * @param {string} errorReason The error title. */ addError( errorTitle, errorReason ) { let content = ``; // Bail if loading was stopped. if ( ! this.loadingState ) { return; } if ( errorTitle ) { content += `

      ${ errorTitle }

      `; } if ( errorReason ) { content += `${ errorReason }`; } const chatItem = document.createElement( 'div' ); const itemContent = document.createElement( 'div' ); chatItem.classList.add( 'wpforms-chat-item' ); chatItem.classList.add( 'wpforms-chat-item-error' ); itemContent.classList.add( 'wpforms-chat-item-content' ); chatItem.appendChild( itemContent ); this.messageList.querySelector( '.wpforms-chat-item-answer-waiting' )?.remove(); this.messageList.appendChild( chatItem ); // Add the error to the chat. // Type the message with the typewriter effect. this.typeText( itemContent, content, () => { this.stopLoading(); } ); } /** * Add an empty results error to the chat. */ addEmptyResultsError() { this.addError( this.modeStrings.errors.empty || wpforms_ai_chat_element.errors.empty, this.modeStrings.reasons.empty || wpforms_ai_chat_element.reasons.empty ); } /** * Add an answer to the chat. * * @since 1.9.1 * * @param {Object} response The response data to add. */ addAnswer( response ) { // Bail if loading was stopped. if ( ! this.loadingState || ! response ) { return; } const answerHTML = this.modeHelpers.getAnswer( response ); if ( ! answerHTML ) { this.addEmptyResultsError(); return; } // Store the session ID from response. this.sessionId = response.sessionId; // Set the session ID to the chat wrapper data attribute. this.wrapper.setAttribute( 'data-session-id', this.sessionId ); // Add the answer to the chat. this.addMessage( answerHTML, false, response ); } /** * The added answer callback. * * @since 1.9.1 * * @param {HTMLElement} element The answer element. */ addedAnswer( element ) { // Add answer buttons when typing is finished. element.innerHTML += this.getAnswerButtons(); element.parentElement.classList.remove( 'wpforms-chat-item-typing' ); wpf.initTooltips(); this.stopLoading(); // Add event listeners to the answer buttons. element.querySelector( '.wpforms-ai-chat-answer-button.dislike' ) ?.addEventListener( 'click', this.clickDislikeButton.bind( this ) ); element.querySelector( '.wpforms-ai-chat-answer-button.refresh' ) ?.addEventListener( 'click', this.clickRefreshButton.bind( this ) ); // Added answer callback. this.modeHelpers.addedAnswer( element ); } /** * Get the answer buttons HTML markup. * * @since 1.9.1 * * @return {string} The answer buttons HTML markup. */ getAnswerButtons() { return `
      ${ this.modeHelpers.getAnswerButtonsPre() }
      `; } /** * Type text into an element with the typewriter effect. * * @since 1.9.1 * * @param {HTMLElement} element The element to type into. * @param {string} text The text to type. * @param {Function} finishedCallback The callback function to call when typing is finished. */ typeText( element, text, finishedCallback ) { const chunkSize = 5; const chat = this; let index = 0; let content = ''; /** * Type single character. * * @since 1.9.1 */ function type() { const chunk = text.substring( index, index + chunkSize ); content += chunk; // Remove broken HTML tag from the end of the string. element.innerHTML = content.replace( /<[^>]*$/g, '' ); index += chunkSize; if ( index < text.length && chat.loadingState ) { // Recursive call to output the next chunk. setTimeout( type, 20 ); } else if ( typeof finishedCallback === 'function' ) { // Call the callback function when typing is finished. finishedCallback( element ); } chat.scrollMessagesTo( 'bottom' ); } type(); } /** * Get the `helpers` object according to the chat mode. * * @since 1.9.1 * * @param {WPFormsAIChatHTMLElement} chat Chat element. * * @return {Object} Choices helpers object. */ getHelpers( chat ) { const helpers = window.WPFormsAi.helpers; return helpers[ chat.chatMode ]( chat ) ?? null; } /** * Escape HTML special characters. * * @since 1.9.1 * * @param {string} html HTML string. * * @return {string} Escaped HTML string. */ htmlSpecialChars( html ) { return html.replace( /[<>]/g, ( x ) => '�' + x.charCodeAt( 0 ) + ';' ); } /** * Wrapper to trigger a custom event and return the event object. * * @since 1.9.1 * * @param {string} eventName Event name to trigger (custom or native). * @param {Object} args Trigger arguments. * * @return {Event} Event object. */ triggerEvent( eventName, args = {} ) { const event = new CustomEvent( eventName, { detail: args } ); document.dispatchEvent( event ); return event; } /** * Chat history object. * * @since 1.9.1 */ history = { /** * Chat history data. * * @since 1.9.1 * * @type {Array} */ data: [], /** * Chat history pointer. * * @since 1.9.1 * * @type {number} */ pointer: 0, /** * Default item. * * @since 1.9.1 * * @type {Object} */ defaultItem: { question: '', answer: null, }, /** * Get history data by pointer. * * @since 1.9.1 * * @param {number|null} pointer The history pointer. * * @return {Object} The history item. */ get( pointer = null ) { if ( pointer ) { this.pointer = pointer; } if ( this.pointer < 1 ) { this.pointer = 0; } else if ( this.pointer >= this.data.length ) { this.pointer = this.data.length - 1; } return this.data[ this.pointer ] ?? {}; }, /** * Get history data by pointer. * * @since 1.9.1 * * @return {Object} The history item. */ prev() { this.pointer -= 1; return this.get(); }, /** * Get history data by pointer. * * @since 1.9.1 * * @return {Object} The history item. */ next() { this.pointer += 1; return this.get(); }, /** * Push an item to the chat history. * * @since 1.9.1 * * @param {Object} item The item to push. * * @return {void} */ push( item ) { if ( item.answer ) { this.data[ this.data.length - 1 ].answer = item.answer; return; } this.data.push( { ...this.defaultItem, ...item } ); this.pointer = this.data.length - 1; }, /** * Update the last history item. * * @since 1.9.1 * * @param {Object} item The updated history item. * * @return {void} */ update( item ) { const lastKey = this.data.length > 0 ? this.data.length - 1 : 0; const lastItem = this.data[ lastKey ] ?? this.defaultItem; this.pointer = lastKey; this.data[ lastKey ] = { ...lastItem, ...item }; }, /** * Clear the chat history. * * @since 1.9.1 */ clear() { this.data = []; this.pointer = 0; }, }; } assets/js/integrations/ai/wpforms-ai-modal.min.js000064400000005727147400353540016077 0ustar00const WPFormsAIModal=window.WPFormsAIModal||function(e,o,a){const s={defaultOptions:{title:!1,content:"",type:"ai",smoothContent:!0,bgOpacity:1,boxWidth:650,contentMaxHeight:600,closeIcon:!0,buttons:!1},init(){a(s.ready)},ready(){s.extendJqueryConfirm(),s.bindChoicesActions()},bindChoicesActions(){a(e).on("click",".wpforms-ai-choices-button",s.initChoicesModal).on("wpformsAIChatBeforeRefreshConfirm",s.beforeChoicesRefreshConfirm).on("wpformsAIModalBeforeWarningMessageInsert",s.refreshModalHeight).on("wpformsAIChatAfterRefresh",s.refreshModalHeight).on("wpformsAIChatCancelRefresh",s.cancelChoicesRefresh).on("wpformsAIChatBeforeSendMessage",function(e){s.resizeChoicesModalHeight(e.detail.fieldId)}).on("wpformsAIModalAfterChoicesInsert",function(e){s.hideChoicesModal(e.detail.fieldId)}),a(o).on("resize",function(){a(".jconfirm-wpforms-ai-modal wpforms-ai-chat").each(function(){s.resizeChoicesModalHeight(a(this).attr("field-id"))})})},initModal(e){a.confirm({...s.defaultOptions,...e})},initChoicesModal(){var e=a(this);if(e.hasClass("wpforms-ai-modal-disabled"))e.trigger("blur");else{const o=e.data("field-id"),i=a(".jconfirm-wpforms-ai-modal-choices-"+o);if(i.length)i.removeClass("wpforms-hidden").fadeIn();else{const t={},n=function(){return s.hideChoicesModal(o),!1};t.content=``,t.theme="wpforms-ai-modal, wpforms-ai-purple, wpforms-ai-modal-choices-"+o,t.backgroundDismiss=n,t.backgroundDismissAnimation="",t.contentMaxHeight=Math.min(s.defaultOptions.contentMaxHeight,s.getMaxModalHeight()),t.onOpen=function(){this.$closeIcon.off("click"),this.$closeIcon.on("click",n)},s.initModal(t)}}},hideChoicesModal(e){a(".jconfirm-wpforms-ai-modal-choices-"+e).addClass("wpforms-hidden").fadeOut()},showChoicesModal(e){a(".jconfirm-wpforms-ai-modal-choices-"+e).removeClass("wpforms-hidden").fadeIn()},resizeChoicesModalHeight(e){var o=s.getMaxModalHeight();a(`.jconfirm-wpforms-ai-modal-choices-${e} .jconfirm-content-pane`).css({height:o,"max-height":o})},beforeChoicesRefreshConfirm(e){e=e.detail?.fieldId||0;s.hideChoicesModal(e)},cancelChoicesRefresh(e){e=e.detail?.fieldId||0;s.showChoicesModal(e)},refreshModalHeight(e){var e=e.detail?.fieldId||0,o=Math.min(s.getMaxModalHeight(),s.defaultOptions.contentMaxHeight);s.showChoicesModal(e),a(`.jconfirm-wpforms-ai-modal-choices-${e} .jconfirm-content-pane`).css({height:o,"max-height":o})},getMaxModalHeight(){return Math.min(.8*a(o).height(),800)},extendJqueryConfirm(){o.Jconfirm.prototype._updateContentMaxHeight=function(){this.$contentPane.css({"max-height":this.contentMaxHeight+"px"})}},confirmModal(e){var o={title:!1,content:"",icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_ai_chat_element.btnYes,btnClass:"btn-confirm",keys:["enter"],action(){"function"==typeof e.onConfirm&&e.onConfirm()}},cancel:{text:wpforms_ai_chat_element.btnCancel,action(){"function"==typeof e.onCancel&&e.onCancel()}}}};a.confirm({...o,...e})}};return s}(document,window,jQuery);WPFormsAIModal.init();assets/js/share/utils.min.js000064400000002337147400353540012056 0ustar00"use strict";const WPFormsUtils=window.WPFormsUtils||function(e){const s={triggerEvent:function(r,t,o=[]){t=new e.Event(t);return r.trigger(t,o),t},debounce:function(e,s,l){var n;return function(){var r=this,t=arguments,o=l&&!n;clearTimeout(n),n=setTimeout(function(){n=null,l||e.apply(r,t)},s),o&&e.apply(r,t)}},cssColorsUtils:{isTransparentColor(r,t=.33){r=s.cssColorsUtils.getColorAsRGBArray(r);return Number(r?.[3])<=t},getColorAsRGBArray(r){if(!s.cssColorsUtils.isValidColor(r))return!1;r="transparent"===(r=r.replace(/^#/,"").replaceAll(" ",""))?"rgba(0,0,0,0)":r;let t;return r.match(/[0-9a-f]{6,8}$/gi)?(t=r.match(/\w\w/g).map(r=>parseInt(r,16)))[3]=t[3]||0===t[3]?(t[3]/255).toFixed(2):1:t=r.split("(")[1].split(")")[0].split(","),t},isValidColor(r){var t=(new Option).style;return t.color=r,""!==t.color},getContrastColor(r){var r=s.cssColorsUtils.getColorAsRGBArray(r),t=r.reduce((r,t)=>r+t,0);return Math.round(t/3*(r[3]??1))<128?"#ffffff":"#000000"},getColorWithOpacity(r,t){r=r.trim();var o=s.cssColorsUtils.getColorAsRGBArray(r);if(!o)return r;t=t&&0!==t.length?t.toString():"1";r=4===o.length?parseFloat(o[3]):1,t=parseFloat(t)*r;return`rgba(${o[0]},${o[1]},${o[2]},${t})`.replace(/\s+/g,"")}}};return s}((document,window,jQuery));assets/js/share/utils.js000064400000013640147400353540011273 0ustar00'use strict'; // eslint-disable-next-line no-unused-vars const WPFormsUtils = window.WPFormsUtils || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.7.6 * * @type {object} */ const app = { /** * Wrapper to trigger a native or custom event and return the event object. * * @since 1.7.6 * * @param {jQuery} $element Element to trigger event on. * @param {string} eventName Event name to trigger (custom or native). * @param {Array} args Trigger arguments. * * @returns {Event} Event object. */ triggerEvent: function( $element, eventName, args = [] ) { let eventObject = new $.Event( eventName ); $element.trigger( eventObject, args ); return eventObject; }, /** * Debounce. * * This function comes directly from underscore.js: * * Returns a function, that, as long as it continues to be invoked, will not * be triggered. The function will be called after it stops being called for * N milliseconds. If `immediate` is passed, trigger the function on the * leading edge, instead of the trailing. * * Debouncing is removing unwanted input noise from buttons, switches or other user input. * Debouncing prevents extra activations or slow functions from triggering too often. * * @param {Function} func The function to be debounced. * @param {int} wait The amount of time to delay calling func. * @param {bool} immediate Whether or not to trigger the function on the leading edge. * * @returns {Function} Returns a function that, as long as it continues to be invoked, will not be triggered. */ debounce: function( func, wait, immediate ) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if ( ! immediate ) { func.apply( context, args ); } }; var callNow = immediate && ! timeout; clearTimeout( timeout ); timeout = setTimeout( later, wait ); if ( callNow ) { func.apply( context, args ); } }; }, /** * CSS color operations. * * @since 1.8.8 * * @type {Object} */ cssColorsUtils: { /** * Checks if the provided color has transparency. * * @since 1.8.8 * * @param {string} color The color to check. * @param {number} opacityThreshold The max opacity value of the color that is considered as transparent. * * @return {boolean} Returns true if the color is transparent. */ isTransparentColor( color, opacityThreshold = 0.33 ) { const rgba = app.cssColorsUtils.getColorAsRGBArray( color ); const opacity = Number( rgba?.[ 3 ] ); // Compare the opacity value with the threshold. return opacity <= opacityThreshold; }, /** * Get color as an array of RGB(A) values. * * @since 1.8.8 * * @param {string} color Color. * * @return {Array|boolean} Color as an array of RGBA values. False on error. */ getColorAsRGBArray( color ) { // Check if the given color is a valid CSS color. if ( ! app.cssColorsUtils.isValidColor( color ) ) { return false; } // Remove # from the beginning of the string and remove whitespaces. color = color.replace( /^#/, '' ).replaceAll( ' ', '' ); color = color === 'transparent' ? 'rgba(0,0,0,0)' : color; const rgba = color; let rgbArray; // Check if color is in HEX(A) format. const isHex = rgba.match( /[0-9a-f]{6,8}$/ig ); if ( isHex ) { // Search and split HEX(A) color into an array of couples of chars. rgbArray = rgba.match( /\w\w/g ).map( ( x ) => parseInt( x, 16 ) ); rgbArray[ 3 ] = rgbArray[ 3 ] || rgbArray[ 3 ] === 0 ? ( rgbArray[ 3 ] / 255 ).toFixed( 2 ) : 1; } else { rgbArray = rgba.split( '(' )[ 1 ].split( ')' )[ 0 ].split( ',' ); } return rgbArray; }, /** * Check if the given color is a valid CSS color. * * @since 1.8.8 * * @param {string} color Color. * * @return {boolean} True if the given color is a valid CSS color. */ isValidColor( color ) { // Create a temporary DOM element and use `style` property. const s = new Option().style; s.color = color; // Invalid color leads to the empty color property of DOM element style. return s.color !== ''; }, /** * Get contrast color relative to given color. * * @since 1.8.8 * * @param {string} color Color. * * @return {string} True if the given color is a valid CSS color. */ getContrastColor( color ) { const rgba = app.cssColorsUtils.getColorAsRGBArray( color ); const sum = rgba.reduce( ( a, b ) => a + b, 0 ); const avg = Math.round( ( sum / 3 ) * ( rgba[ 3 ] ?? 1 ) ); return avg < 128 ? '#ffffff' : '#000000'; }, /** * Add opacity to color string. * Supports formats: RGB, RGBA, HEX, HEXA. * * If the given color has an alpha channel, the new alpha channel will be calculated according to the given opacity. * * @since 1.8.9 * * @param {string} color Color. * @param {string} opacity Opacity. * * @return {string} Color in RGBA format with an added alpha channel according to given opacity. */ getColorWithOpacity( color, opacity ) { color = color.trim(); const rgbArray = app.cssColorsUtils.getColorAsRGBArray( color ); if ( ! rgbArray ) { return color; } // Default opacity is 1. opacity = ! opacity || opacity.length === 0 ? '1' : opacity.toString(); const alpha = rgbArray.length === 4 ? parseFloat( rgbArray[ 3 ] ) : 1; // Calculate new alpha value. const newAlpha = parseFloat( opacity ) * alpha; // Combine and return the RGBA color. return `rgba(${ rgbArray[ 0 ] },${ rgbArray[ 1 ] },${ rgbArray[ 2 ] },${ newAlpha })`.replace( /\s+/g, '' ); }, }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); assets/js/admin/forms/overview.min.js000064400000034612147400353540013701 0ustar00"use strict";var WPFormsForms=window.WPFormsForms||{};WPFormsForms.Overview=WPFormsForms.Overview||function(e,o,l){var s={},r={},m={init:function(){l(m.ready)},ready(){m.initElements(),m.initTableColumns(),m.initTagsFilter(),m.adjustBulkEditTagsForm(),m.initEditTagsBulkActionItem(),m.events()},initElements(){s.$overview=l("#wpforms-overview"),s.$tagsFilterSelect=l(".wpforms-tags-filter select"),s.$tagsFilterButton=l(".wpforms-tags-filter button"),s.$listTableRows=l("#wpforms-overview #the-list"),s.$bulkEditTagsRows=l(".wpforms-bulk-edit-tags"),s.$bulkEditTagsForms=l(".wpforms-bulk-edit-tags .wpforms-edit-forms select"),s.$bulkEditTagsTags=l(".wpforms-bulk-edit-tags .wpforms-edit-tags select"),s.$bulkEditTagsMessage=l(".wpforms-bulk-edit-tags .wpforms-message")},initTableColumns(){var e=s.$overview.find(".wp-list-table");e.find(".column-primary").removeClass("column-primary"),e.find(".column-name").addClass("column-primary")},events:function(){s.$overview.on("click",".wp-list-table .delete a, .wp-list-table .duplicate a",m.confirmSingleAction).on("click",".button.delete-all",m.confirmSingleAction).on("click",".bulkactions #doaction",m.confirmBulkAction).on("click","#wpforms-reset-filter .reset",m.resetSearch).on("click",".wp-list-table .wpforms-locations-count, .wp-list-table .row-actions .locations, .wp-list-table .wpforms-locations-close",m.formsLocator).on("click","#the-list .wpforms-column-tags-edit",m.editTagsClick).on("click","#the-list .wpforms-column-tags-edit-cancel",m.cancelEditTagsClick).on("click","#the-list .wpforms-column-tags-edit-save",m.saveEditTagsClick).on("click","#the-list .wpforms-bulk-edit-tags-cancel",m.cancelBulkEditTagsClick).on("click","#the-list .wpforms-bulk-edit-tags-save",m.saveBulkEditTagsClick).on("click",".wpforms-tags-filter .button",m.tagsFilterClick).on("click",".wpforms-manage-tags",m.manageTagsClick).on("keydown",".wpforms-column-tags-form input, .wpforms-bulk-edit-tags input",m.addCustomItemInput).on("removeItem",".choices select",m.editTagsRemoveItem),s.$bulkEditTagsForms.on("removeItem",m.bulkEditTagsFormRemoveItem),l("#adv-settings").on("change","input.hide-column-tog",m.adjustBulkEditTagsForm).on("change","#tags-hide",m.toggleTagsColumn),l(o).on("resize",_.debounce(m.adjustBulkEditTagsForm,200)),l(e).on("change",".wpforms-manage-tags-items input",m.manageTagsItemChange)},confirmSingleAction:function(e){e.preventDefault();var t,e=l(this),s=e.attr("href"),a=e.hasClass("delete-all")?wpforms_admin.form_delete_all_confirm:"",o=e.data("type")??"";""===a&&(t="template"===o?wpforms_admin.template_duplicate_confirm:wpforms_admin.form_duplicate_confirm,o="template"===o?wpforms_admin.template_delete_confirm:wpforms_admin.form_delete_confirm,a=e.parent().hasClass("delete")?o:t),m.confirmModal(a,{url:s})},confirmBulkAction:function(e){var t=l(this).closest("form"),s=t.find("#bulk-action-selector-top").val();"edit_tags"===s?(e.preventDefault(),m.openBulkEditTags()):"delete"===s&&(e.preventDefault(),m.confirmModal(wpforms_admin.form_delete_n_confirm,{bulk:!0,form:t}))},confirmModal:function(e,t){l.confirm({title:wpforms_admin.heads_up,content:e,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){t.url?o.location=t.url:t.bulk&&t.form.trigger("submit")}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})},alertModal:function(e,t){var s=wpforms_admin_forms_overview.strings.error;l.confirm({title:t.title||wpforms_admin.oops||!1,content:e?s+"
      "+e:s,icon:"fa fa-exclamation-circle",type:t.type||"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})},resetSearch:function(e){l("#wpforms-overview-search-term").val(""),l(this).closest("form").trigger("submit")},formsLocator:function(e){let t=l("#wpforms-overview-table .wpforms-locations-pane");e.preventDefault();var s,e=l(e.target.closest("tr")),a=t.prev().prev(),o=a.find(".row-actions");return 0 ${wpforms_forms_locator.paneTitle} ${a} `,t=l('').html(s),e.after(t),e.after(l('')),o.addClass("visible")),!1},editTagsClick:function(e){var t=l(this).closest("td"),s=t.closest("tbody"),a=t.find(".wpforms-column-tags-links"),o=t.find(".wpforms-column-tags-form"),i=o.find("select");e.preventDefault(),i.length||(t.append(wpforms_admin_forms_overview.edit_tags_form),i=(o=t.find(".wpforms-column-tags-form")).find("select")),s.find(".wpforms-column-tags-links.wpforms-hidden").removeClass("wpforms-hidden"),s.find(".wpforms-column-tags-form:not(.wpforms-hidden)").addClass("wpforms-hidden"),a.addClass("wpforms-hidden"),o.removeClass("wpforms-hidden"),r.currentEditTagsChoicesObj=m.initChoicesJS(i),r.currentEditTagsValueBackup=r.currentEditTagsChoicesObj.getValue(!0)},cancelEditTagsClick:function(e){var t=l(this).closest("td"),s=t.find(".wpforms-column-tags-links"),t=t.find(".wpforms-column-tags-form");r.currentEditTagsChoicesObj.removeActiveItems().setChoiceByValue(r.currentEditTagsValueBackup),s.removeClass("wpforms-hidden"),t.addClass("wpforms-hidden")},getTagsValue:function(e){if(!e||"function"!=typeof e.getValue)return[];for(var t=e.getValue(),s=[],a=0;a
      '),wpf.initMultipleSelectWithSearch(this),wpf.showMoreButtonForChoices(this.containerOuter.element)},s=(t="active"===e.data("choice")?e.data("choicesjs"):new Choices(e[0],t)).getValue(!0),t.clearStore().setChoices(wpforms_admin_forms_overview.all_tags_choices,"value","label",!0).setChoiceByValue(s),e.data("choicesjs",t),t)},initEditTagsBulkActionItem:function(){wpforms_admin_forms_overview.strings.is_tags_column_hidden&&l('.bulkactions option[value="edit_tags"]').addClass("wpforms-hidden")},initTagsFilter:function(){s.$tagsFilterSelect.each(function(){m.initChoicesJS(l(this))})},tagsFilterClick:function(e){var t=l(this).closest(".wpforms-tags-filter").find("select").data("choicesjs"),s=new URL(wpforms_admin_forms_overview.strings.base_url),a=t.getValue(!0),t=wpforms_admin_forms_overview.all_tags_choices.filter(function(e){return-1 `);return t+=`
      ${s.join("")}
      `},getManageTagsConfirmSettings:function(){return 0!==wpforms_admin_forms_overview.all_tags_choices.length&&{text:wpforms_admin_forms_overview.strings.manage_tags_save,btnClass:"btn-confirm",keys:["enter"],action:function(){var e=[];l(".wpforms-manage-tags-items input:checked").each(function(){e.push(l(this).val())}),l.post(wpforms_admin.ajax_url,{action:"wpforms_admin_forms_overview_delete_tags",nonce:wpforms_admin_forms_overview.strings.nonce,tags:e}).done(function(e){e.success&&e.data?m.manageTagsResultModal(e.data.deleted):m.alertModal(e.data||"",{})}).fail(function(e,t,s){m.alertModal(s,{})})}}},manageTagsItemChange:function(){var e=l(".wpforms-manage-tags-items input:checked").length,t=l(this).closest(".jconfirm-box").find(".btn-confirm"),s=l(".wpforms-manage-tags-notice"),a=1${e}

      ${wpforms_admin_forms_overview.strings.manage_tags_result_text}

      `,icon:"fa fa-exclamation-circle",type:"green",buttons:{confirm:{text:wpforms_admin_forms_overview.strings.manage_tags_btn_refresh,btnClass:"btn-confirm",keys:["enter"],action:function(){o.location.href=wpforms_admin_forms_overview.strings.base_url}}}})},openBulkEditTags:function(){var i=[],n=[],r=[];s.$listTableRows.find("input:checked").each(function(e){var t=l(this),s=t.closest("tr"),a=s.find(".column-name > a:first-child"),s=s.find(".wpforms-column-tags-links"),o=s.data("tags").toString()||"";1===s.data("is-editable")&&(i.push({value:t.val(),label:_.escape(a.text())}),n.push(t.val()),o=o.length?o.split(","):[],r=_.union(r,o))}),0!==i.length&&(s.$bulkEditTagsRows.removeClass("wpforms-hidden"),m.initChoicesJS(s.$bulkEditTagsForms).clearStore().setChoices(i,"value","label",!0).setChoiceByValue(n),m.initChoicesJS(s.$bulkEditTagsTags).removeActiveItems().setChoiceByValue(r),m.updateBulkEditTagsFormMessage(n))},updateBulkEditTagsFormMessage:function(e){var t=wpforms_admin_forms_overview.strings.bulk_edit_n_forms;1===e.length&&(t=wpforms_admin_forms_overview.strings.bulk_edit_one_form),s.$bulkEditTagsMessage.html(t.replace("%d",e.length))},bulkEditTagsFormRemoveItem:function(e){e=l(e.target).data("choicesjs").getValue(!0);0===e.length&&m.cancelBulkEditTagsClick(),m.updateBulkEditTagsFormMessage(e)},editTagsRemoveItem:function(t){var e,s,a;0<=_.map(wpforms_admin_forms_overview.all_tags_choices,"value").indexOf(t.detail.value)||(s=(e=l(t.target).data("choicesjs")).getValue(!0),a=_.filter(e._currentState.choices,function(e){return e.value!==t.detail.value}),e.clearStore().setChoices(a,"value","label",!0).setChoiceByValue(s))},adjustBulkEditTagsForm(){var e=l(".wp-list-table"),t=e.find("thead .manage-column").not(".hidden");l(".wpforms-bulk-edit-tags td").attr("colspan",t.length);t=(t=e.find(".column-name").outerWidth())<300?300:t,t=`calc( 100% - ${e.outerWidth()-t-e.find(".check-column").outerWidth()-10}px )`;s.$bulkEditTagsForms.closest(".wpforms-edit-forms").css("width",t)},toggleTagsColumn:function(){l('.wpforms-tags-filter, .wpforms-manage-tags, .bulkactions option[value="edit_tags"]').toggleClass("wpforms-hidden",!l(this).is(":checked")||0===wpforms_admin_forms_overview.all_tags_choices.length)},cancelBulkEditTagsClick:function(){s.$bulkEditTagsRows.addClass("wpforms-hidden")},saveBulkEditTagsClick:function(e){var t=l(this).find(".wpforms-loading-spinner"),i={forms:s.$bulkEditTagsForms.data("choicesjs").getValue(!0),tags:m.getTagsValue(s.$bulkEditTagsTags.data("choicesjs"))};t.removeClass("wpforms-hidden"),m.saveTagsAjax(i,function(o){l("#the-list .tags.column-tags").each(function(){var e=l(this),t=e.find(".wpforms-column-tags-links"),s=t.data("form-id")+"",e=e.find(".wpforms-column-tags-form select"),a=e.data("choicesjs");i.forms.indexOf(s)<0||(t.data("tags",o.data.tags_ids),t.find(".wpforms-column-tags-links-list").html(o.data.tags_links),e.html(o.data.tags_options),a&&a.clearStore().setChoices(wpforms_admin_forms_overview.all_tags_choices,"value","label",!0).setChoiceByValue(o.data.tags_ids.split(",")))})},function(){t.addClass("wpforms-hidden"),s.$bulkEditTagsRows.addClass("wpforms-hidden")})},addCustomItemInput:function(e){var t,s;["Enter",","].indexOf(e.key)<0||(e.preventDefault(),e.stopPropagation(),(t=l(this).closest(".choices").find("select").data("choicesjs"))&&0!==e.target.value.length&&(e=_.escape(e.target.value).trim(),s=_.map(t.getValue(),"label").map(function(e){return e.toLowerCase().trim()}),""===e||0<=s.indexOf(e.toLowerCase())?t.clearInput():m.addCustomItemInputTag(t,e)))},addCustomItemInputTag:function(e,t){var s=_.find(wpforms_admin_forms_overview.all_tags_choices,{label:t});s&&s.value?e.setChoiceByValue(s.value):e.setChoices([{value:t,label:t,selected:!0}],"value","label",!1),e.clearInput()}};return m}(document,window,jQuery),WPFormsForms.Overview.init();assets/js/admin/forms/overview.js000064400000070353147400353540013121 0ustar00/* global wpforms_admin, wpforms_forms_locator, wpforms_admin_forms_overview, Choices, wpf */ /** * WPForms Forms Overview. * * @since 1.7.3 */ 'use strict'; var WPFormsForms = window.WPFormsForms || {}; WPFormsForms.Overview = WPFormsForms.Overview || ( function( document, window, $ ) { /** * Elements. * * @since 1.7.5 * * @type {object} */ var el = {}; /** * Runtime variables. * * @since 1.7.5 * * @type {object} */ var vars = {}; /** * Public functions and properties. * * @since 1.7.3 * * @type {object} */ var app = { /** * Start the engine. * * @since 1.7.3 */ init: function() { $( app.ready ); }, /** * Document ready. * * @since 1.7.3 */ ready() { app.initElements(); app.initTableColumns(); app.initTagsFilter(); app.adjustBulkEditTagsForm(); app.initEditTagsBulkActionItem(); app.events(); }, /** * Init elements. * * @since 1.7.5 */ initElements() { el.$overview = $( '#wpforms-overview' ); el.$tagsFilterSelect = $( '.wpforms-tags-filter select' ); el.$tagsFilterButton = $( '.wpforms-tags-filter button' ); el.$listTableRows = $( '#wpforms-overview #the-list' ); el.$bulkEditTagsRows = $( '.wpforms-bulk-edit-tags' ); el.$bulkEditTagsForms = $( '.wpforms-bulk-edit-tags .wpforms-edit-forms select' ); el.$bulkEditTagsTags = $( '.wpforms-bulk-edit-tags .wpforms-edit-tags select' ); el.$bulkEditTagsMessage = $( '.wpforms-bulk-edit-tags .wpforms-message' ); }, /** * Init table columns. * * @since 1.8.6 */ initTableColumns() { const $table = el.$overview.find( '.wp-list-table' ); // Set the Name column as primary. $table.find( '.column-primary' ).removeClass( 'column-primary' ); $table.find( '.column-name' ).addClass( 'column-primary' ); }, /** * Register JS events. * * @since 1.7.3 */ events: function() { el.$overview .on( 'click', '.wp-list-table .delete a, .wp-list-table .duplicate a', app.confirmSingleAction ) .on( 'click', '.button.delete-all', app.confirmSingleAction ) .on( 'click', '.bulkactions #doaction', app.confirmBulkAction ) .on( 'click', '#wpforms-reset-filter .reset', app.resetSearch ) .on( 'click', '.wp-list-table .wpforms-locations-count, .wp-list-table .row-actions .locations, .wp-list-table .wpforms-locations-close', app.formsLocator ) .on( 'click', '#the-list .wpforms-column-tags-edit', app.editTagsClick ) .on( 'click', '#the-list .wpforms-column-tags-edit-cancel', app.cancelEditTagsClick ) .on( 'click', '#the-list .wpforms-column-tags-edit-save', app.saveEditTagsClick ) .on( 'click', '#the-list .wpforms-bulk-edit-tags-cancel', app.cancelBulkEditTagsClick ) .on( 'click', '#the-list .wpforms-bulk-edit-tags-save', app.saveBulkEditTagsClick ) .on( 'click', '.wpforms-tags-filter .button', app.tagsFilterClick ) .on( 'click', '.wpforms-manage-tags', app.manageTagsClick ) .on( 'keydown', '.wpforms-column-tags-form input, .wpforms-bulk-edit-tags input', app.addCustomItemInput ) .on( 'removeItem', '.choices select', app.editTagsRemoveItem ); el.$bulkEditTagsForms .on( 'removeItem', app.bulkEditTagsFormRemoveItem ); $( '#adv-settings' ) .on( 'change', 'input.hide-column-tog', app.adjustBulkEditTagsForm ) .on( 'change', '#tags-hide', app.toggleTagsColumn ); $( window ) .on( 'resize', _.debounce( app.adjustBulkEditTagsForm, 200 ) ); $( document ) .on( 'change', '.wpforms-manage-tags-items input', app.manageTagsItemChange ); }, /** * Confirm forms deletion and duplications. * * @since 1.7.3 * * @param {object} event Event object. */ confirmSingleAction: function( event ) { event.preventDefault(); var $link = $( this ), url = $link.attr( 'href' ), msg = $link.hasClass( 'delete-all' ) ? wpforms_admin.form_delete_all_confirm : '', type = $link.data( 'type' ) ?? ''; if ( msg === '' ) { const duplicateMsg = type === 'template' ? wpforms_admin.template_duplicate_confirm : wpforms_admin.form_duplicate_confirm; const deleteMsg = type === 'template' ? wpforms_admin.template_delete_confirm : wpforms_admin.form_delete_confirm; msg = $link.parent().hasClass( 'delete' ) ? deleteMsg : duplicateMsg; } app.confirmModal( msg, { url } ); }, /** * Confirm forms bulk deletion. * * @since 1.7.3 * * @param {object} event Event object. */ confirmBulkAction: function( event ) { var $button = $( this ), $form = $button.closest( 'form' ), action = $form.find( '#bulk-action-selector-top' ).val(); if ( action === 'edit_tags' ) { event.preventDefault(); app.openBulkEditTags(); return; } if ( action !== 'delete' ) { return; } event.preventDefault(); app.confirmModal( wpforms_admin.form_delete_n_confirm, { 'bulk': true, 'form': $form } ); }, /** * Open confirmation modal. * * @since 1.7.3 * * @param {string} msg Confirmation modal content. * @param {object} args Additional arguments. */ confirmModal: function( msg, args ) { $.confirm( { title: wpforms_admin.heads_up, content: msg, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { if ( args.url ) { window.location = args.url; return; } if ( args.bulk ) { args.form.trigger( 'submit' ); } }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, } ); }, /** * Open alert modal. * * @since 1.7.5 * * @param {string} msg Alert modal content. * @param {object} args Additional arguments. */ alertModal: function( msg, args ) { var error = wpforms_admin_forms_overview.strings.error; $.confirm( { title: args.title || wpforms_admin.oops || false, content: msg ? error + '
      ' + msg : error, icon: 'fa fa-exclamation-circle', type: args.type || 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, /** * Reset search form. * * @since 1.7.3 * * @param {object} event Event object. */ resetSearch: function( event ) { // Reset search term. $( '#wpforms-overview-search-term' ).val( '' ); // Submit the form. $( this ).closest( 'form' ).trigger( 'submit' ); }, /** * Show form locations. Take them from Locations column and show in the pane under the form row. * * @since 1.7.4 * * @param {object} event Event object. * * @returns {false} Event processing status. */ formsLocator: function( event ) { let $pane = $( '#wpforms-overview-table .wpforms-locations-pane' ); event.preventDefault(); const $currentRow = $( event.target.closest( 'tr' ) ), $paneRow = $pane.prev().prev(), $rowActions = $paneRow.find( '.row-actions' ); if ( $pane.length > 0 ) { $pane.prev().remove(); $pane.remove(); $rowActions.removeClass( 'visible' ); if ( $paneRow.is( $currentRow ) ) { return false; } } const $locationsList = $currentRow.find( '.locations-list' ); if ( $locationsList.length === 0 ) { return false; } const tdNum = $currentRow.find( 'td:not(.hidden)' ).length; const locationsHtml = $locationsList.html(); const html = ` ${wpforms_forms_locator.paneTitle} ${locationsHtml} `; $pane = $( '' ).html( html ); $currentRow.after( $pane ); $currentRow.after( $( '' ) ); $rowActions.addClass( 'visible' ); return false; }, /** * Click on the Edit link in the "Tags" column. * * @since 1.7.5 * * @param {object} event Event object. */ editTagsClick: function( event ) { var $link = $( this ), $td = $link.closest( 'td' ), $tbody = $td.closest( 'tbody' ), $columnLinks = $td.find( '.wpforms-column-tags-links' ), $columnForm = $td.find( '.wpforms-column-tags-form' ), $select = $columnForm.find( 'select' ); event.preventDefault(); if ( ! $select.length ) { $td.append( wpforms_admin_forms_overview.edit_tags_form ); $columnForm = $td.find( '.wpforms-column-tags-form' ); $select = $columnForm.find( 'select' ); } // Hide opened tags edit form. $tbody.find( '.wpforms-column-tags-links.wpforms-hidden' ).removeClass( 'wpforms-hidden' ); $tbody.find( '.wpforms-column-tags-form:not(.wpforms-hidden)' ).addClass( 'wpforms-hidden' ); // Show tags edit form instead of tags links. $columnLinks.addClass( 'wpforms-hidden' ); $columnForm.removeClass( 'wpforms-hidden' ); // Store current opened Choice.js object and its value. vars.currentEditTagsChoicesObj = app.initChoicesJS( $select ); vars.currentEditTagsValueBackup = vars.currentEditTagsChoicesObj.getValue( true ); }, /** * Click on the Cancel button (icon) in Edit Tags form in the "Tags" column. * * @since 1.7.5 * * @param {object} event Event object. */ cancelEditTagsClick: function( event ) { var $btn = $( this ), $td = $btn.closest( 'td' ), $columnLinks = $td.find( '.wpforms-column-tags-links' ), $columnForm = $td.find( '.wpforms-column-tags-form' ); // Restore saved value from the backup. vars.currentEditTagsChoicesObj .removeActiveItems() .setChoiceByValue( vars.currentEditTagsValueBackup ); $columnLinks.removeClass( 'wpforms-hidden' ); $columnForm.addClass( 'wpforms-hidden' ); }, /** * Get Tags value. * * @since 1.7.5 * * @param {object} choicesObj Choices.js instance. * * @returns {Array} Tags value data. */ getTagsValue: function( choicesObj ) { if ( ! choicesObj || typeof choicesObj.getValue !== 'function' ) { return []; } var tagsValue = choicesObj.getValue(), tags = []; for ( var i = 0; i < tagsValue.length; i++ ) { tags.push( { value: tagsValue[ i ].value, label: tagsValue[ i ].label, } ); } return tags; }, /** * Click on the Save button (icon) in Edit Tags form in the "Tags" column. * * @since 1.7.5 * * @param {object} event Event object. */ saveEditTagsClick: function( event ) { var $btn = $( this ), $td = $btn.closest( 'td' ), $columnLinks = $td.find( '.wpforms-column-tags-links' ), $columnForm = $td.find( '.wpforms-column-tags-form' ), $spinner = $btn.siblings( '.wpforms-spinner' ), $select = $columnForm.find( 'select' ), choicesObj = $select.data( 'choicesjs' ); // Show spinner. $btn.addClass( 'wpforms-hidden' ); $spinner.removeClass( 'wpforms-hidden' ); app.saveTagsAjax( { forms: [ $columnLinks.data( 'form-id' ) ], tags: app.getTagsValue( vars.currentEditTagsChoicesObj ), }, function( res ) { // Update tags links in the column. $columnLinks.find( '.wpforms-column-tags-links-list' ).html( res.data.tags_links ); // Update tags ids. $columnLinks.data( 'tags', res.data.tags_ids ); if ( choicesObj ) { choicesObj .clearStore() .setChoices( wpforms_admin_forms_overview.all_tags_choices, 'value', 'label', true ) .setChoiceByValue( res.data.tags_ids.split( ',' ) ); } }, function() { // Hide spinner. $btn.removeClass( 'wpforms-hidden' ); $spinner.addClass( 'wpforms-hidden' ); // Hide form, show tags links. $columnLinks.removeClass( 'wpforms-hidden' ); $columnForm.addClass( 'wpforms-hidden' ); } ); }, /** * Save tags AJAX call routine. * * @since 1.7.5 * * @param {object} data Post data. * @param {Function} done Callback on success. * @param {Function} always Always callback. */ saveTagsAjax: function( data, done, always ) { $.post( wpforms_admin.ajax_url, $.extend( { action: 'wpforms_admin_forms_overview_save_tags', nonce: wpforms_admin_forms_overview.strings.nonce, }, data ) ).done( function( res ) { if ( ! res.success || ! res.data ) { app.alertModal( res.data || '', {} ); return; } app.updateAllTagsChoices( res.data.all_tags_choices ); if ( typeof done === 'function' ) { done( res ); } } ).fail( function( jqXHR, textStatus, errorThrown ) { app.alertModal( errorThrown, {} ); } ).always( function() { if ( typeof always === 'function' ) { always(); } } ); }, /** * Update all tags choices storage. * * @since 1.7.5 * * @param {Array} allTagsChoices New all tags choices. */ updateAllTagsChoices: function( allTagsChoices ) { if ( ! allTagsChoices ) { return; } wpforms_admin_forms_overview.all_tags_choices = allTagsChoices; // Update Tags Filter items. el.$tagsFilterSelect.each( function() { app.initChoicesJS( $( this ) ); } ); // Show Tags Filter and Manage Tags button if at least one tag exists. if ( wpforms_admin_forms_overview.all_tags_choices.length > 0 ) { $( '.wpforms-tags-filter, .wpforms-manage-tags' ).removeClass( 'wpforms-hidden' ); } }, /** * Init Choices.js on the given select input element. * * @since 1.7.5 * * @param {jQuery} $select Select input. * * @returns {Choices} Choices.js instance. */ initChoicesJS: function( $select ) { // Skip in certain cases. if ( ! wpforms_admin_forms_overview.choicesjs_config || ! $select.length || typeof window.Choices !== 'function' ) { return false; } var choicesObj, config = wpforms_admin_forms_overview.choicesjs_config; if ( ! $select.data( 'tags-filter' ) ) { config.noResultsText = wpforms_admin_forms_overview.strings.add_new_tag; } // Add arrow placeholder. // It is needed to catch the arrow click event in the specific case // when Tags Filter has many selected tags which overflow the Choices.js control. config.callbackOnInit = function() { $select.closest( '.choices__inner' ).append( '
      ' ); wpf.initMultipleSelectWithSearch( this ); wpf.showMoreButtonForChoices( this.containerOuter.element ); }; // Init or get Choices.js object instance. if ( $select.data( 'choice' ) === 'active' ) { choicesObj = $select.data( 'choicesjs' ); } else { choicesObj = new Choices( $select[0], config ); } // Backup current value. var currentValue = choicesObj.getValue( true ); // Update all tags choices. We need to do it evey time, since tags could be added dynamically. choicesObj .clearStore() .setChoices( wpforms_admin_forms_overview.all_tags_choices, 'value', 'label', true ) .setChoiceByValue( currentValue ); $select.data( 'choicesjs', choicesObj ); return choicesObj; }, /** * Init Edit Tags Bulk Action item. * * @since 1.7.5 */ initEditTagsBulkActionItem: function() { if ( wpforms_admin_forms_overview.strings.is_tags_column_hidden ) { $( '.bulkactions option[value="edit_tags"]' ).addClass( 'wpforms-hidden' ); } }, /** * Init tags filter. * * @since 1.7.5 */ initTagsFilter: function() { el.$tagsFilterSelect.each( function() { app.initChoicesJS( $( this ) ); } ); }, /** * Click the tags "Filter" button. * * @since 1.7.5 * * @param {object} event Event object. */ tagsFilterClick: function( event ) { var $button = $( this ), $select = $button.closest( '.wpforms-tags-filter' ).find( 'select' ), choicesObj = $select.data( 'choicesjs' ), url = new URL( wpforms_admin_forms_overview.strings.base_url ), tagsIds = choicesObj.getValue( true ), tags = wpforms_admin_forms_overview.all_tags_choices.filter( function( choice ) { return tagsIds.indexOf( choice.value ) > -1; } ); if ( tags.length ) { url.searchParams.append( 'tags', _.map( tags, 'slug' ).join( ',' ) ); } window.location.href = url.href; }, /** * Click the "Manage Tags" button. * * @since 1.7.5 * * @param {object} event Event object. */ manageTagsClick: function( event ) { var options = { title: wpforms_admin_forms_overview.strings.manage_tags_title, content: app.getManageTagsContent(), icon: 'fa fa-tags', type: 'blue', boxWidth: '550px', buttons: { cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, onOpenBefore: function() { this.$$confirm && this.$$confirm.prop( 'disabled', true ); $( 'body' ).addClass( 'wpforms-manage-tags-modal' ); }, onDestroy: function() { $( 'body' ).removeClass( 'wpforms-manage-tags-modal' ); }, }; var confirm = app.getManageTagsConfirmSettings(); if ( confirm ) { options.buttons = { confirm: confirm, cancel: options.buttons.cancel, }; } $.confirm( options ); }, /** * Get Manage Tags modal content. * * @since 1.7.5 * * @returns {string} Content of the modal. */ getManageTagsContent: function() { var allTags = wpforms_admin_forms_overview.all_tags_choices; if ( allTags.length === 0 ) { return wpforms_admin_forms_overview.strings.manage_tags_no_tags; } var content = wpforms_admin_forms_overview.strings.manage_tags_desc, tags = []; for ( var i = 0; i < allTags.length; i++ ) { tags.push( ` ` ); } content += `
      ${ tags.join( '' ) }
      `; return content; }, /** * Get Manage Tags modal confirm button settings. * * @since 1.7.5 * * @returns {object} Confirm button settings. */ getManageTagsConfirmSettings: function() { if ( wpforms_admin_forms_overview.all_tags_choices.length === 0 ) { return false; } return { text: wpforms_admin_forms_overview.strings.manage_tags_save, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { var checkedTags = []; $( '.wpforms-manage-tags-items input:checked' ).each( function() { checkedTags.push( $( this ).val() ); } ); $.post( wpforms_admin.ajax_url, { action: 'wpforms_admin_forms_overview_delete_tags', nonce: wpforms_admin_forms_overview.strings.nonce, tags: checkedTags, } ).done( function( res ) { if ( ! res.success || ! res.data ) { app.alertModal( res.data || '', {} ); return; } app.manageTagsResultModal( res.data.deleted ); } ).fail( function( jqXHR, textStatus, errorThrown ) { app.alertModal( errorThrown, {} ); } ); }, }; }, /** * Change the Tag item hidden checkbox in the Manage Tags modal. * * @since 1.7.5 */ manageTagsItemChange: function() { var checkedCount = $( '.wpforms-manage-tags-items input:checked' ).length, $saveButton = $( this ).closest( '.jconfirm-box' ).find( '.btn-confirm' ), $notice = $( '.wpforms-manage-tags-notice' ), noticeHtml = checkedCount > 1 ? wpforms_admin_forms_overview.strings.manage_tags_n_tags.replace( '%d', checkedCount ) : wpforms_admin_forms_overview.strings.manage_tags_one_tag; $saveButton.prop( 'disabled', checkedCount === 0 ); $notice .html( noticeHtml ) .toggleClass( 'wpforms-hidden', checkedCount === 0 ); }, /** * Open modal when the tags were deleted. * * @since 1.7.5 * * @param {int} deletedCount Deleted tags count. */ manageTagsResultModal: function( deletedCount ) { var deleted = deletedCount === 1 ? wpforms_admin_forms_overview.strings.manage_tags_one_deleted : wpforms_admin_forms_overview.strings.manage_tags_n_deleted.replace( '%d', deletedCount ); $.confirm( { title: wpforms_admin_forms_overview.strings.manage_tags_result_title, content: `

      ${ deleted }

      ${ wpforms_admin_forms_overview.strings.manage_tags_result_text }

      `, icon: 'fa fa-exclamation-circle', type: 'green', buttons: { confirm: { text: wpforms_admin_forms_overview.strings.manage_tags_btn_refresh, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { window.location.href = wpforms_admin_forms_overview.strings.base_url; }, }, }, } ); }, /** * Bulk edit tags action. * * @since 1.7.5 */ openBulkEditTags: function() { var forms = [], formsValue = [], tagsValue = []; // Iterate checked forms. el.$listTableRows.find( 'input:checked' ).each( function( i ) { var $input = $( this ), $tr = $input.closest( 'tr' ), $name = $tr.find( '.column-name > a:first-child' ), $tags = $tr.find( '.wpforms-column-tags-links' ), formTags = $tags.data( 'tags' ).toString() || ''; if ( $tags.data( 'is-editable' ) !== 1 ) { return; } forms.push( { value: $input.val(), label: _.escape( $name.text() ), } ); formsValue.push( $input.val() ); formTags = formTags.length ? formTags.split( ',' ) : []; tagsValue = _.union( tagsValue, formTags ); } ); if ( forms.length === 0 ) { return; } el.$bulkEditTagsRows.removeClass( 'wpforms-hidden' ); // Init Choices.js instance for forms. app.initChoicesJS( el.$bulkEditTagsForms ) .clearStore() .setChoices( forms, 'value', 'label', true ) .setChoiceByValue( formsValue ); // Init Choices.js instance for tags. app.initChoicesJS( el.$bulkEditTagsTags ) .removeActiveItems() .setChoiceByValue( tagsValue ); // Update message. app.updateBulkEditTagsFormMessage( formsValue ); }, /** * Update the message below the Bulk Edit Tags form. * * @since 1.7.5 * * @param {Array} formsValue Forms value. */ updateBulkEditTagsFormMessage: function( formsValue ) { var msg = wpforms_admin_forms_overview.strings.bulk_edit_n_forms; if ( formsValue.length === 1 ) { msg = wpforms_admin_forms_overview.strings.bulk_edit_one_form; } el.$bulkEditTagsMessage.html( msg.replace( '%d', formsValue.length ) ); }, /** * Remove form from the Bulk Edit Tags form. * * @since 1.7.5 * * @param {object} event Event object. */ bulkEditTagsFormRemoveItem: function( event ) { var formsValue = $( event.target ).data( 'choicesjs' ).getValue( true ); if ( formsValue.length === 0 ) { app.cancelBulkEditTagsClick(); } app.updateBulkEditTagsFormMessage( formsValue ); }, /** * Remove tag from Tags editor event handler. * * @since 1.7.5 * * @param {object} event Event object. */ editTagsRemoveItem: function( event ) { var allValues = _.map( wpforms_admin_forms_overview.all_tags_choices, 'value' ); if ( allValues.indexOf( event.detail.value ) >= 0 ) { return; } // We should remove new tag from the list of choices. var choicesObj = $( event.target ).data( 'choicesjs' ), currentValue = choicesObj.getValue( true ), choices = _.filter( choicesObj._currentState.choices, function( item ) { return item.value !== event.detail.value; } ); choicesObj .clearStore() .setChoices( choices, 'value', 'label', true ) .setChoiceByValue( currentValue ); }, /** * Calculate and set the bulk edit tags form attributes and styles. * * @since 1.7.5 */ adjustBulkEditTagsForm() { const $table = $( '.wp-list-table' ), $columns = $table.find( 'thead .manage-column' ).not( '.hidden' ), $formCells = $( '.wpforms-bulk-edit-tags td' ); // Update colspan attributes. $formCells.attr( 'colspan', $columns.length ); let nameWidth = $table.find( '.column-name' ).outerWidth(); nameWidth = nameWidth < 300 ? 300 : nameWidth; const cellsWidth = $table.outerWidth() - nameWidth - $table.find( '.check-column' ).outerWidth() - 10; const formsInputWidth = `calc( 100% - ${ cellsWidth }px )`; // Update width property of the forms input element. el.$bulkEditTagsForms.closest( '.wpforms-edit-forms' ).css( 'width', formsInputWidth ); }, /** * Click toggle Tags column checkbox event handler. * * @since 1.7.5 */ toggleTagsColumn: function() { $( '.wpforms-tags-filter, .wpforms-manage-tags, .bulkactions option[value="edit_tags"]' ) .toggleClass( 'wpforms-hidden', ! $( this ).is( ':checked' ) || wpforms_admin_forms_overview.all_tags_choices.length === 0 ); }, /** * Click on the Cancel button in the Bulk Edit Tags form. * * @since 1.7.5 */ cancelBulkEditTagsClick: function() { el.$bulkEditTagsRows.addClass( 'wpforms-hidden' ); }, /** * Click on the Save button in the Bulk Edit Tags form. * * @since 1.7.5 * * @param {object} event Event object. */ saveBulkEditTagsClick: function( event ) { var $btn = $( this ), $spinner = $btn.find( '.wpforms-loading-spinner' ), data = { forms: el.$bulkEditTagsForms.data( 'choicesjs' ).getValue( true ), tags: app.getTagsValue( el.$bulkEditTagsTags.data( 'choicesjs' ) ), }; // Show spinner. $spinner.removeClass( 'wpforms-hidden' ); app.saveTagsAjax( data, function( res ) { $( '#the-list .tags.column-tags' ).each( function() { var $td = $( this ), $columnLinks = $td.find( '.wpforms-column-tags-links' ), formID = $columnLinks.data( 'form-id' ) + '', $select = $td.find( '.wpforms-column-tags-form select' ), choicesObj = $select.data( 'choicesjs' ); if ( data.forms.indexOf( formID ) < 0 ) { return; } // Update tags ids. $columnLinks.data( 'tags', res.data.tags_ids ); // Update tags links in the column. $columnLinks.find( '.wpforms-column-tags-links-list' ).html( res.data.tags_links ); // Update tags options in still not converted selects. $select.html( res.data.tags_options ); if ( choicesObj ) { choicesObj .clearStore() .setChoices( wpforms_admin_forms_overview.all_tags_choices, 'value', 'label', true ) .setChoiceByValue( res.data.tags_ids.split( ',' ) ); } } ); }, function() { // Hide spinner. $spinner.addClass( 'wpforms-hidden' ); // Hide the form. el.$bulkEditTagsRows.addClass( 'wpforms-hidden' ); } ); }, /** * Add custom item to Tags dropdown on input. * * @since 1.7.5 * * @param {object} event Event object. */ addCustomItemInput: function( event ) { if ( [ 'Enter', ',' ].indexOf( event.key ) < 0 ) { return; } event.preventDefault(); event.stopPropagation(); var $select = $( this ).closest( '.choices' ).find( 'select' ), choicesObj = $select.data( 'choicesjs' ); if ( ! choicesObj || event.target.value.length === 0 ) { return; } var tagLabel = _.escape( event.target.value ).trim(), labels = _.map( choicesObj.getValue(), 'label' ).map( function( label ) { return label.toLowerCase().trim(); } ); if ( tagLabel === '' || labels.indexOf( tagLabel.toLowerCase() ) >= 0 ) { choicesObj.clearInput(); return; } app.addCustomItemInputTag( choicesObj, tagLabel ); }, /** * Add custom item to Tags dropdown on input (second part). * * @since 1.7.5 * * @param {object} choicesObj Choices.js instance. * @param {object} tagLabel Event object. */ addCustomItemInputTag: function( choicesObj, tagLabel ) { var tag = _.find( wpforms_admin_forms_overview.all_tags_choices, { label: tagLabel } ); if ( tag && tag.value ) { choicesObj.setChoiceByValue( tag.value ); } else { choicesObj.setChoices( [ { value: tagLabel, label: tagLabel, selected: true, }, ], 'value', 'label', false ); } choicesObj.clearInput(); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); WPFormsForms.Overview.init(); assets/js/admin/form-embed-wizard.js000064400000033706147400353540013441 0ustar00/* global wpforms_admin_form_embed_wizard, WPFormsBuilder, ajaxurl, WPFormsChallenge, wpforms_builder, WPForms */ /** * Form Embed Wizard function. * * @since 1.6.2 */ 'use strict'; var WPFormsFormEmbedWizard = window.WPFormsFormEmbedWizard || ( function( document, window, $ ) { /** * Elements. * * @since 1.6.2 * * @type {object} */ var el = {}; /** * Runtime variables. * * @since 1.6.2 * @since 1.7.9 Added `lastEmbedSearchPageTerm` property. * * @type {object} */ var vars = { formId: 0, isBuilder: false, isChallengeActive: false, lastEmbedSearchPageTerm: '', }; /** * Public functions and properties. * * @since 1.6.2 * * @type {object} */ var app = { /** * Start the engine. * * @since 1.6.2 */ init: function() { $( app.ready ); $( window ).on( 'load', function() { // in case of jQuery 3.+ we need to wait for an `ready` event first. if ( typeof $.ready.then === 'function' ) { $.ready.then( app.load ); } else { app.load(); } } ); }, /** * Document ready. * * @since 1.6.2 */ ready: function() { app.initVars(); app.events(); }, /** * Window load. * * @since 1.6.2 * @since 1.7.9 Initialize 'Select Pages' ChoicesJS. */ load: function() { // Initialize tooltip in page editor. if ( wpforms_admin_form_embed_wizard.is_edit_page === '1' && ! vars.isChallengeActive ) { app.initTooltip(); } // Initialize wizard state in the form builder only. if ( vars.isBuilder ) { app.initialStateToggle(); } app.initSelectPagesChoicesJS(); $( document ).on( 'wpformsWizardPopupClose', app.enableLetsGoButton ); }, /** * Init variables. * * @since 1.6.2 */ initVars: function() { // Caching some DOM elements for further use. el = { $wizardContainer: $( '#wpforms-admin-form-embed-wizard-container' ), $wizard: $( '#wpforms-admin-form-embed-wizard' ), $contentInitial: $( '#wpforms-admin-form-embed-wizard-content-initial' ), $contentSelectPage: $( '#wpforms-admin-form-embed-wizard-content-select-page' ), $contentCreatePage: $( '#wpforms-admin-form-embed-wizard-content-create-page' ), $sectionBtns: $( '#wpforms-admin-form-embed-wizard-section-btns' ), $sectionGo: $( '#wpforms-admin-form-embed-wizard-section-go' ), $newPageTitle: $( '#wpforms-admin-form-embed-wizard-new-page-title' ), $selectPage: $( '#wpforms-setting-form-embed-wizard-choicesjs-select-pages' ), $videoTutorial: $( '#wpforms-admin-form-embed-wizard-tutorial' ), $sectionToggles: $( '#wpforms-admin-form-embed-wizard-section-toggles' ), $sectionGoBack: $( '#wpforms-admin-form-embed-wizard-section-goback' ), $shortcode: $( '#wpforms-admin-form-embed-wizard-shortcode-wrap' ), $shortcodeInput: $( '#wpforms-admin-form-embed-wizard-shortcode' ), $shortcodeCopy: $( '#wpforms-admin-form-embed-wizard-shortcode-copy' ), }; el.$selectPageContainer = el.$selectPage.parents( 'span.choicesjs-select-wrap' ); // Detect the form builder screen and store the flag. vars.isBuilder = typeof WPFormsBuilder !== 'undefined'; // Detect the Challenge and store the flag. vars.isChallengeActive = typeof WPFormsChallenge !== 'undefined'; // Are the pages exists? vars.pagesExists = el.$wizard.data( 'pages-exists' ) === 1; }, /** * Init ChoicesJS for "Select Pages" field in embed. * * @since 1.7.9 */ initSelectPagesChoicesJS: function() { if ( el.$selectPage.length <= 0 ) { return; } const useAjax = el.$selectPage.data( 'use_ajax' ) === 1; WPForms.Admin.Builder.WPFormsChoicesJS.setup( el.$selectPage[0], {}, { action: 'wpforms_admin_form_embed_wizard_search_pages_choicesjs', nonce: useAjax ? wpforms_admin_form_embed_wizard.nonce : null, } ); }, /** * Register JS events. * * @since 1.6.2 */ events: function() { // Skip wizard events in the page editor. if ( ! el.$wizard.length ) { return; } el.$wizard .on( 'click', 'button', app.popupButtonsClick ) .on( 'click', '.tutorial-toggle', app.tutorialToggle ) .on( 'click', '.shortcode-toggle', app.shortcodeToggle ) .on( 'click', '.initialstate-toggle', app.initialStateToggle ) .on( 'click', '.wpforms-admin-popup-close', app.closePopup ) .on( 'click', '#wpforms-admin-form-embed-wizard-shortcode-copy', app.copyShortcodeToClipboard ) .on( 'keyup', '#wpforms-admin-form-embed-wizard-new-page-title', app.enableLetsGoButton ); }, /** * Popup buttons events handler. * * @since 1.6.2 * * @param {object} e Event object. */ popupButtonsClick: function( e ) { var $btn = $( e.target ); if ( ! $btn.length ) { return; } var $div = $btn.closest( 'div' ), action = $btn.data( 'action' ) || ''; el.$contentInitial.hide(); switch ( action ) { // Select existing page. case 'select-page': el.$newPageTitle.hide(); el.$contentSelectPage.show(); break; // Create a new page. case 'create-page': el.$selectPageContainer.hide(); el.$contentCreatePage.show(); break; // Let's Go! case 'go': if ( el.$selectPageContainer.is( ':visible' ) && el.$selectPage.val() === '' ) { return; } $btn.prop( 'disabled', true ); app.saveFormAndRedirect(); return; } $div.hide(); $div.next().fadeIn(); el.$sectionToggles.hide(); el.$sectionGoBack.fadeIn(); // Set focus to the field that is currently displayed. $.each( [ el.$selectPage, el.$newPageTitle ], function() { if ( this.is( ':visible' ) ) { this.trigger( 'focus' ); } } ); app.tutorialControl( 'Stop' ); }, /** * Toggle video tutorial inside popup. * * @since 1.6.2 * * @param {object} e Event object. */ tutorialToggle: function( e ) { e.preventDefault(); el.$shortcode.hide(); el.$videoTutorial.toggle(); if ( el.$videoTutorial.attr( 'src' ) === 'about:blank' ) { el.$videoTutorial.attr( 'src', wpforms_admin_form_embed_wizard.video_url ); } if ( el.$videoTutorial[0].src.indexOf( '&autoplay=1' ) < 0 ) { app.tutorialControl( 'Play' ); } else { app.tutorialControl( 'Stop' ); } }, /** * Toggle video tutorial inside popup. * * @since 1.6.2.3 * * @param {string} action One of 'Play' or 'Stop'. */ tutorialControl: function( action ) { var iframe = el.$videoTutorial[0]; if ( typeof iframe === 'undefined' ) { return; } if ( action !== 'Stop' ) { iframe.src += iframe.src.indexOf( '&autoplay=1' ) < 0 ? '&autoplay=1' : ''; } else { iframe.src = iframe.src.replace( '&autoplay=1', '' ); } }, /** * Toggle shortcode input field. * * @since 1.6.2.3 * * @param {object} e Event object. */ shortcodeToggle: function( e ) { e.preventDefault(); el.$videoTutorial.hide(); app.tutorialControl( 'Stop' ); el.$shortcodeInput.val( '[wpforms id="' + vars.formId + '" title="false"]' ); el.$shortcode.toggle(); }, /** * Enable the "Let's Go!" button. * * @since 1.8.2.3 */ enableLetsGoButton: function() { const $btn = el.$sectionGo.find( 'button' ); $btn.prop( 'disabled', false ); }, /** * Copies the shortcode embed code to the clipboard. * * @since 1.6.4 */ copyShortcodeToClipboard: function() { // Remove disabled attribute, select the text, and re-add disabled attribute. el.$shortcodeInput .prop( 'disabled', false ) .select() .prop( 'disabled', true ); // Copy it. document.execCommand( 'copy' ); var $icon = el.$shortcodeCopy.find( 'i' ); // Add visual feedback to copy command. $icon.removeClass( 'fa-files-o' ).addClass( 'fa-check' ); // Reset visual confirmation back to default state after 2.5 sec. window.setTimeout( function() { $icon.removeClass( 'fa-check' ).addClass( 'fa-files-o' ); }, 2500 ); }, /** * Toggle initial state. * * @since 1.6.2.3 * * @param {object} e Event object. */ initialStateToggle: function( e ) { if ( e ) { e.preventDefault(); } if ( vars.pagesExists ) { el.$contentInitial.show(); el.$contentSelectPage.hide(); el.$contentCreatePage.hide(); el.$selectPageContainer.show(); el.$newPageTitle.show(); el.$sectionBtns.show(); el.$sectionGo.hide(); } else { el.$contentInitial.hide(); el.$contentSelectPage.hide(); el.$contentCreatePage.show(); el.$selectPageContainer.hide(); el.$newPageTitle.show(); el.$sectionBtns.hide(); el.$sectionGo.show(); } el.$shortcode.hide(); el.$videoTutorial.hide(); app.tutorialControl( 'Stop' ); el.$sectionToggles.show(); el.$sectionGoBack.hide(); }, /** * Save the form and redirect to form embed page. * * @since 1.6.2 */ saveFormAndRedirect: function() { // Just redirect if no need to save the form. if ( ! vars.isBuilder || WPFormsBuilder.formIsSaved() ) { app.embedPageRedirect(); return; } // Embedding in Challenge should save the form silently. if ( vars.isBuilder && vars.isChallengeActive ) { WPFormsBuilder.formSave().done( app.embedPageRedirect ); return; } $.confirm( { title: false, content: wpforms_builder.exit_confirm, icon: 'fa fa-exclamation-circle', type: 'orange', closeIcon: true, buttons: { confirm: { text: wpforms_builder.save_embed, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { WPFormsBuilder.formSave().done( app.embedPageRedirect ); }, }, cancel: { text: wpforms_builder.embed, action: function() { WPFormsBuilder.setCloseConfirmation( false ); app.embedPageRedirect(); }, }, }, onClose: function() { el.$sectionGo.find( 'button' ).prop( 'disabled', false ); }, } ); }, /** * Prepare data for requesting redirect URL. * * @since 1.6.2 * * @returns {object} AJAX data object. */ embedPageRedirectAjaxData: function() { var data = { action : 'wpforms_admin_form_embed_wizard_embed_page_url', _wpnonce: wpforms_admin_form_embed_wizard.nonce, formId: vars.formId, }; if ( el.$selectPageContainer.is( ':visible' ) ) { data.pageId = el.$selectPage.val(); } if ( el.$newPageTitle.is( ':visible' ) ) { data.pageTitle = el.$newPageTitle.val(); } return data; }, /** * Redirect to form embed page. * * @since 1.6.2 */ embedPageRedirect: function() { var data = app.embedPageRedirectAjaxData(); // Exit if no one page is selected. if ( typeof data.pageId !== 'undefined' && data.pageId === '' ) { return; } $.post( ajaxurl, data, function( response ) { if ( response.success ) { window.location = response.data; } } ); }, /** * Display wizard popup. * * @since 1.6.2 * * @param {numeric} openFormId Form ID to embed. Used only if called outside the form builder. */ openPopup: function( openFormId ) { openFormId = openFormId || 0; vars.formId = vars.isBuilder ? $( '#wpforms-builder-form' ).data( 'id' ) : openFormId; // Regular wizard and wizard in Challenge has differences. el.$wizard.toggleClass( 'wpforms-challenge-popup', vars.isChallengeActive ); el.$wizard.find( '.wpforms-admin-popup-content-regular' ).toggle( ! vars.isChallengeActive ); el.$wizard.find( '.wpforms-admin-popup-content-challenge' ).toggle( vars.isChallengeActive ); // Re-init sections. if ( el.$selectPage.length === 0 ) { el.$sectionBtns.hide(); el.$sectionGo.show(); } else { el.$sectionBtns.show(); el.$sectionGo.hide(); } el.$newPageTitle.show(); el.$selectPageContainer.show(); el.$wizardContainer.fadeIn(); }, /** * Close wizard popup. * * @since 1.6.2 */ closePopup: function() { el.$wizardContainer.fadeOut(); app.initialStateToggle(); $( document ).trigger( 'wpformsWizardPopupClose' ); }, /** * Init embed page tooltip. * * @since 1.6.2 */ initTooltip: function() { if ( typeof $.fn.tooltipster === 'undefined' ) { return; } var $dot = $( ' ' ), isGutenberg = app.isGutenberg(), anchor = isGutenberg ? '.block-editor .edit-post-header' : '#wp-content-editor-tools .wpforms-insert-form-button'; var tooltipsterArgs = { content : $( '#wpforms-admin-form-embed-wizard-tooltip-content' ), trigger : 'custom', interactive : true, animationDuration: 0, delay : 0, theme : [ 'tooltipster-default', 'wpforms-admin-form-embed-wizard' ], side : isGutenberg ? 'bottom' : 'right', distance : 3, functionReady : function( instance, helper ) { instance._$tooltip.on( 'click', 'button', function() { instance.close(); $( '.wpforms-admin-form-embed-wizard-dot' ).remove(); } ); instance.reposition(); }, }; if ( ! isGutenberg ) { $dot.insertAfter( anchor ).tooltipster( tooltipsterArgs ).tooltipster( 'open' ); } // The Gutenberg header can be loaded after the window load event. // We have to wait until the Gutenberg heading is added to the DOM. const closeAnchorListener = wp.data.subscribe( function() { if ( ! $( anchor ).length ) { return; } // Close the listener to avoid an infinite loop. closeAnchorListener(); $dot.insertAfter( anchor ).tooltipster( tooltipsterArgs ).tooltipster( 'open' ); } ); }, /** * Check if we're in Gutenberg editor. * * @since 1.6.2 * * @returns {boolean} Is Gutenberg or not. */ isGutenberg: function() { return typeof wp !== 'undefined' && Object.prototype.hasOwnProperty.call( wp, 'blocks' ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsFormEmbedWizard.init(); assets/js/admin/admin-notifications.min.js000064400000004006147400353540014636 0ustar00"use strict";var WPFormsAdminNotifications=window.WPFormsAdminNotifications||function(t){var i={$notifications:t("#wpforms-notifications"),$nextButton:t("#wpforms-notifications .navigation .next"),$prevButton:t("#wpforms-notifications .navigation .prev"),$adminBarCounter:t("#wp-admin-bar-wpforms-menu .wpforms-menu-notification-counter"),$adminBarMenuItem:t("#wp-admin-bar-wpforms-notifications")},a={init:function(){t(a.ready)},ready:function(){a.updateNavigation(),a.events()},events:function(){i.$notifications.on("click",".dismiss",a.dismiss).on("click",".next",a.navNext).on("click",".prev",a.navPrev)},dismiss:function(e){var n,s;0!==i.$currentMessage.length&&(1<(s=parseInt(i.$adminBarCounter.text(),10))?i.$adminBarCounter.html(--s):(i.$adminBarCounter.remove(),i.$adminBarMenuItem.remove()),s=i.$nextMessage.length<1?i.$prevMessage:i.$nextMessage,n=i.$currentMessage.data("message-id"),0===s.length?i.$notifications.remove():(i.$currentMessage.remove(),s.addClass("current"),a.updateNavigation()),s={action:"wpforms_notification_dismiss",nonce:wpforms_admin.nonce,id:n},t.post(wpforms_admin.ajax_url,s,function(e){e.success||WPFormsAdmin.debug(e)}).fail(function(e,n,s){WPFormsAdmin.debug(e.responseText)}))},navNext:function(e){i.$nextButton.hasClass("disabled")||(i.$currentMessage.removeClass("current"),i.$nextMessage.addClass("current"),a.updateNavigation())},navPrev:function(e){i.$prevButton.hasClass("disabled")||(i.$currentMessage.removeClass("current"),i.$prevMessage.addClass("current"),a.updateNavigation())},updateNavigation:function(){i.$currentMessage=i.$notifications.find(".wpforms-notifications-message.current"),i.$nextMessage=i.$currentMessage.next(".wpforms-notifications-message"),i.$prevMessage=i.$currentMessage.prev(".wpforms-notifications-message"),0===i.$nextMessage.length?i.$nextButton.addClass("disabled"):i.$nextButton.removeClass("disabled"),0===i.$prevMessage.length?i.$prevButton.addClass("disabled"):i.$prevButton.removeClass("disabled")}};return a}((document,window,jQuery));WPFormsAdminNotifications.init();assets/js/admin/admin-editor.min.js000064400000001741147400353540013256 0ustar00!function(c){c(function(){function e(){c("#wpforms-modal-select-form").length&&(c("#wpforms-modal-select-form").get(0).selectedIndex=0,c("#wpforms-modal-checkbox-title, #wpforms-modal-checkbox-description").prop("checked",!1)),c("#wpforms-modal-backdrop, #wpforms-modal-wrap").css("display","none"),c(document.body).removeClass("modal-open")}c(document).on("click",".wpforms-insert-form-button",function(o){o.preventDefault(),c("#wpforms-modal-backdrop, #wpforms-modal-wrap").css("display","block"),c(document.body).addClass("modal-open")}),c(document).on("click","#wpforms-modal-close, #wpforms-modal-cancel a",function(o){o.preventDefault(),e()}),c(document).on("click","#wpforms-modal-submit",function(o){o.preventDefault(),o='[wpforms id="'+c("#wpforms-modal-select-form").val()+'"',c("#wpforms-modal-checkbox-title").is(":checked")&&(o+=' title="true"'),c("#wpforms-modal-checkbox-description").is(":checked")&&(o+=' description="true"'),o+="]",wp.media.editor.insert(o),e()})})}(jQuery);assets/js/admin/form-embed-wizard.min.js000064400000016511147400353540014216 0ustar00"use strict";var WPFormsFormEmbedWizard=window.WPFormsFormEmbedWizard||function(o,t,a){var i={},n={formId:0,isBuilder:!1,isChallengeActive:!1,lastEmbedSearchPageTerm:""},r={init:function(){a(r.ready),a(t).on("load",function(){"function"==typeof a.ready.then?a.ready.then(r.load):r.load()})},ready:function(){r.initVars(),r.events()},load:function(){"1"!==wpforms_admin_form_embed_wizard.is_edit_page||n.isChallengeActive||r.initTooltip(),n.isBuilder&&r.initialStateToggle(),r.initSelectPagesChoicesJS(),a(o).on("wpformsWizardPopupClose",r.enableLetsGoButton)},initVars:function(){(i={$wizardContainer:a("#wpforms-admin-form-embed-wizard-container"),$wizard:a("#wpforms-admin-form-embed-wizard"),$contentInitial:a("#wpforms-admin-form-embed-wizard-content-initial"),$contentSelectPage:a("#wpforms-admin-form-embed-wizard-content-select-page"),$contentCreatePage:a("#wpforms-admin-form-embed-wizard-content-create-page"),$sectionBtns:a("#wpforms-admin-form-embed-wizard-section-btns"),$sectionGo:a("#wpforms-admin-form-embed-wizard-section-go"),$newPageTitle:a("#wpforms-admin-form-embed-wizard-new-page-title"),$selectPage:a("#wpforms-setting-form-embed-wizard-choicesjs-select-pages"),$videoTutorial:a("#wpforms-admin-form-embed-wizard-tutorial"),$sectionToggles:a("#wpforms-admin-form-embed-wizard-section-toggles"),$sectionGoBack:a("#wpforms-admin-form-embed-wizard-section-goback"),$shortcode:a("#wpforms-admin-form-embed-wizard-shortcode-wrap"),$shortcodeInput:a("#wpforms-admin-form-embed-wizard-shortcode"),$shortcodeCopy:a("#wpforms-admin-form-embed-wizard-shortcode-copy")}).$selectPageContainer=i.$selectPage.parents("span.choicesjs-select-wrap"),n.isBuilder="undefined"!=typeof WPFormsBuilder,n.isChallengeActive="undefined"!=typeof WPFormsChallenge,n.pagesExists=1===i.$wizard.data("pages-exists")},initSelectPagesChoicesJS:function(){var e;i.$selectPage.length<=0||(e=1===i.$selectPage.data("use_ajax"),WPForms.Admin.Builder.WPFormsChoicesJS.setup(i.$selectPage[0],{},{action:"wpforms_admin_form_embed_wizard_search_pages_choicesjs",nonce:e?wpforms_admin_form_embed_wizard.nonce:null}))},events:function(){i.$wizard.length&&i.$wizard.on("click","button",r.popupButtonsClick).on("click",".tutorial-toggle",r.tutorialToggle).on("click",".shortcode-toggle",r.shortcodeToggle).on("click",".initialstate-toggle",r.initialStateToggle).on("click",".wpforms-admin-popup-close",r.closePopup).on("click","#wpforms-admin-form-embed-wizard-shortcode-copy",r.copyShortcodeToClipboard).on("keyup","#wpforms-admin-form-embed-wizard-new-page-title",r.enableLetsGoButton)},popupButtonsClick:function(e){var o=a(e.target);if(o.length){var e=o.closest("div"),t=o.data("action")||"";switch(i.$contentInitial.hide(),t){case"select-page":i.$newPageTitle.hide(),i.$contentSelectPage.show();break;case"create-page":i.$selectPageContainer.hide(),i.$contentCreatePage.show();break;case"go":return i.$selectPageContainer.is(":visible")&&""===i.$selectPage.val()?void 0:(o.prop("disabled",!0),void r.saveFormAndRedirect())}e.hide(),e.next().fadeIn(),i.$sectionToggles.hide(),i.$sectionGoBack.fadeIn(),a.each([i.$selectPage,i.$newPageTitle],function(){this.is(":visible")&&this.trigger("focus")}),r.tutorialControl("Stop")}},tutorialToggle:function(e){e.preventDefault(),i.$shortcode.hide(),i.$videoTutorial.toggle(),"about:blank"===i.$videoTutorial.attr("src")&&i.$videoTutorial.attr("src",wpforms_admin_form_embed_wizard.video_url),i.$videoTutorial[0].src.indexOf("&autoplay=1")<0?r.tutorialControl("Play"):r.tutorialControl("Stop")},tutorialControl:function(e){var o=i.$videoTutorial[0];void 0!==o&&("Stop"!==e?o.src+=o.src.indexOf("&autoplay=1")<0?"&autoplay=1":"":o.src=o.src.replace("&autoplay=1",""))},shortcodeToggle:function(e){e.preventDefault(),i.$videoTutorial.hide(),r.tutorialControl("Stop"),i.$shortcodeInput.val('[wpforms id="'+n.formId+'" title="false"]'),i.$shortcode.toggle()},enableLetsGoButton:function(){i.$sectionGo.find("button").prop("disabled",!1)},copyShortcodeToClipboard:function(){i.$shortcodeInput.prop("disabled",!1).select().prop("disabled",!0),o.execCommand("copy");var e=i.$shortcodeCopy.find("i");e.removeClass("fa-files-o").addClass("fa-check"),t.setTimeout(function(){e.removeClass("fa-check").addClass("fa-files-o")},2500)},initialStateToggle:function(e){e&&e.preventDefault(),n.pagesExists?(i.$contentInitial.show(),i.$contentSelectPage.hide(),i.$contentCreatePage.hide(),i.$selectPageContainer.show(),i.$newPageTitle.show(),i.$sectionBtns.show(),i.$sectionGo.hide()):(i.$contentInitial.hide(),i.$contentSelectPage.hide(),i.$contentCreatePage.show(),i.$selectPageContainer.hide(),i.$newPageTitle.show(),i.$sectionBtns.hide(),i.$sectionGo.show()),i.$shortcode.hide(),i.$videoTutorial.hide(),r.tutorialControl("Stop"),i.$sectionToggles.show(),i.$sectionGoBack.hide()},saveFormAndRedirect:function(){!n.isBuilder||WPFormsBuilder.formIsSaved()?r.embedPageRedirect():n.isBuilder&&n.isChallengeActive?WPFormsBuilder.formSave().done(r.embedPageRedirect):a.confirm({title:!1,content:wpforms_builder.exit_confirm,icon:"fa fa-exclamation-circle",type:"orange",closeIcon:!0,buttons:{confirm:{text:wpforms_builder.save_embed,btnClass:"btn-confirm",keys:["enter"],action:function(){WPFormsBuilder.formSave().done(r.embedPageRedirect)}},cancel:{text:wpforms_builder.embed,action:function(){WPFormsBuilder.setCloseConfirmation(!1),r.embedPageRedirect()}}},onClose:function(){i.$sectionGo.find("button").prop("disabled",!1)}})},embedPageRedirectAjaxData:function(){var e={action:"wpforms_admin_form_embed_wizard_embed_page_url",_wpnonce:wpforms_admin_form_embed_wizard.nonce,formId:n.formId};return i.$selectPageContainer.is(":visible")&&(e.pageId=i.$selectPage.val()),i.$newPageTitle.is(":visible")&&(e.pageTitle=i.$newPageTitle.val()),e},embedPageRedirect:function(){var e=r.embedPageRedirectAjaxData();void 0!==e.pageId&&""===e.pageId||a.post(ajaxurl,e,function(e){e.success&&(t.location=e.data)})},openPopup:function(e){e=e||0,n.formId=n.isBuilder?a("#wpforms-builder-form").data("id"):e,i.$wizard.toggleClass("wpforms-challenge-popup",n.isChallengeActive),i.$wizard.find(".wpforms-admin-popup-content-regular").toggle(!n.isChallengeActive),i.$wizard.find(".wpforms-admin-popup-content-challenge").toggle(n.isChallengeActive),0===i.$selectPage.length?(i.$sectionBtns.hide(),i.$sectionGo.show()):(i.$sectionBtns.show(),i.$sectionGo.hide()),i.$newPageTitle.show(),i.$selectPageContainer.show(),i.$wizardContainer.fadeIn()},closePopup:function(){i.$wizardContainer.fadeOut(),r.initialStateToggle(),a(o).trigger("wpformsWizardPopupClose")},initTooltip:function(){if(void 0!==a.fn.tooltipster){var e=a(' '),o=r.isGutenberg(),t=o?".block-editor .edit-post-header":"#wp-content-editor-tools .wpforms-insert-form-button",i={content:a("#wpforms-admin-form-embed-wizard-tooltip-content"),trigger:"custom",interactive:!0,animationDuration:0,delay:0,theme:["tooltipster-default","wpforms-admin-form-embed-wizard"],side:o?"bottom":"right",distance:3,functionReady:function(e,o){e._$tooltip.on("click","button",function(){e.close(),a(".wpforms-admin-form-embed-wizard-dot").remove()}),e.reposition()}};o||e.insertAfter(t).tooltipster(i).tooltipster("open");const n=wp.data.subscribe(function(){a(t).length&&(n(),e.insertAfter(t).tooltipster(i).tooltipster("open"))})}},isGutenberg:function(){return"undefined"!=typeof wp&&Object.prototype.hasOwnProperty.call(wp,"blocks")}};return r}(document,window,jQuery);WPFormsFormEmbedWizard.init();assets/js/admin/logger/logger.min.js000064400000002201147400353540013430 0ustar00const WPFormsLogger=window.WPFormsLogger||function(t,n){const s={init(){n(s.ready)},ready(){s.bindEvents()},bindPopup(){n(".wpforms-list-table--logs .wp-list-table").on("click",".js-single-log-target",function(o){o.preventDefault(),s.showPopup(n(this).attr("data-log-id"))})},bindEvents(){s.bindPopup(),n("#wpforms-setting-logs-enable").change(function(){s.toggleLogs(n(this).is(":checked"))})},toggleLogs(o){n(".wpforms-logs-settings").toggleClass("wpforms-hidden",!o)},showPopup(o){if(o){const e=wp.template("wpforms-log-record");n.dialog({title:!1,boxWidth:Math.min(1200,.8*n(t).width()),content(){const t=this;return n.get(wpforms_admin.ajax_url,{action:"wpforms_get_log_record",nonce:wpforms_admin.nonce,recordId:o}).done(function(o){o.success&&o.data?t.setContent(e(o.data)):(s.error(o.data),t.close())}).fail(function(o,e){s.error(e+" "+o.responseText),t.close()})},animation:"scale",columnClass:"medium",closeIcon:!0,closeAnimation:"scale",backgroundDismiss:!0})}},error(o){wpforms_admin.debug&&(o=_.isEmpty(o)?"":": "+o,console.log("WPForms Debug: Error receiving log record data"+o))}};return s}((document,window),jQuery);WPFormsLogger.init();assets/js/admin/logger/logger.js000064400000004746147400353540012666 0ustar00/* global wpforms_admin */ /** * Logger scripts * * @since 1.6.3 */ const WPFormsLogger = window.WPFormsLogger || ( function( document, window, $ ) { const app = { /** * Start the engine. * * @since 1.6.3 */ init() { $( app.ready ); }, ready() { app.bindEvents(); }, /** * Bind popup to the click on logger link. * * @since 1.6.3 */ bindPopup() { $( '.wpforms-list-table--logs .wp-list-table' ).on( 'click', '.js-single-log-target', function( e ) { e.preventDefault(); app.showPopup( $( this ).attr( 'data-log-id' ) ); } ); }, /** * Bind events. * * @since 1.8.9 */ bindEvents() { app.bindPopup(); $( '#wpforms-setting-logs-enable' ).change( function() { app.toggleLogs( $( this ).is( ':checked' ) ); } ); }, /** * Toggle logs settings and logs list. * * @since 1.8.9 * * @param {boolean} checked Checked state. */ toggleLogs( checked ) { // Toggle hidden class. $( '.wpforms-logs-settings' ).toggleClass( 'wpforms-hidden', ! checked ); }, /** * Show popup. * * @since 1.6.3 * * @param {number} recordId Record Id. */ showPopup( recordId ) { if ( ! recordId ) { return; } const popupTemplate = wp.template( 'wpforms-log-record' ); $.dialog( { title: false, boxWidth: Math.min( 1200, $( window ).width() * 0.8 ), content() { const self = this; return $.get( wpforms_admin.ajax_url, { action: 'wpforms_get_log_record', nonce: wpforms_admin.nonce, recordId, } ).done( function( res ) { if ( ! res.success || ! res.data ) { app.error( res.data ); self.close(); return; } self.setContent( popupTemplate( res.data ) ); } ).fail( function( xhr, textStatus ) { app.error( textStatus + ' ' + xhr.responseText ); self.close(); } ); }, animation: 'scale', columnClass: 'medium', closeIcon: true, closeAnimation: 'scale', backgroundDismiss: true, } ); }, /** * Output error to the console if debug mode is on. * * @since 1.6.4 * * @param {string} msg Error text. */ error( msg ) { if ( ! wpforms_admin.debug ) { return; } msg = _.isEmpty( msg ) ? '' : ': ' + msg; // eslint-disable-next-line no-console console.log( 'WPForms Debug: Error receiving log record data' + msg ); }, }; return app; }( document, window, jQuery ) ); // Initialize. WPFormsLogger.init(); assets/js/admin/notices.js000064400000002644147400353540011567 0ustar00/* global wpforms_admin_notices */ /** * WPForms Dismissible Notices. * * @since 1.6.7.1 */ 'use strict'; var WPFormsAdminNotices = window.WPFormsAdminNotices || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.6.7.1 * * @type {object} */ var app = { /** * Start the engine. * * @since 1.6.7.1 */ init: function() { $( app.ready ); }, /** * Document ready. * * @since 1.6.7.1 */ ready: function() { app.events(); }, /** * Dismissible notices events. * * @since 1.6.7.1 */ events: function() { $( document ).on( 'click', '.wpforms-notice .notice-dismiss, .wpforms-notice .wpforms-notice-dismiss', app.dismissNotice ); }, /** * Dismiss notice event handler. * * @since 1.6.7.1 * * @param {object} e Event object. * */ dismissNotice: function( e ) { const $element = $( e.target ); if ( ! $element.hasClass( 'wpforms-review-out' ) ) { e.preventDefault(); } $element.closest( '.wpforms-notice' ).remove(); $.post( wpforms_admin_notices.ajax_url, { action: 'wpforms_notice_dismiss', nonce: wpforms_admin_notices.nonce, id: ( $element.closest( '.wpforms-notice' ).attr( 'id' ) || '' ).replace( 'wpforms-notice-', '' ), } ); }, }; return app; }( document, window, jQuery ) ); // Initialize. WPFormsAdminNotices.init(); assets/js/admin/admin-notifications.js000064400000007504147400353540014062 0ustar00/* global wpforms_admin, WPFormsAdmin */ /** * WPForms Admin Notifications. * * @since 1.6.0 */ 'use strict'; var WPFormsAdminNotifications = window.WPFormsAdminNotifications || ( function( document, window, $ ) { /** * Elements holder. * * @since 1.6.0 * * @type {object} */ var el = { $notifications: $( '#wpforms-notifications' ), $nextButton: $( '#wpforms-notifications .navigation .next' ), $prevButton: $( '#wpforms-notifications .navigation .prev' ), $adminBarCounter: $( '#wp-admin-bar-wpforms-menu .wpforms-menu-notification-counter' ), $adminBarMenuItem: $( '#wp-admin-bar-wpforms-notifications' ), }; /** * Public functions and properties. * * @since 1.6.0 * * @type {object} */ var app = { /** * Start the engine. * * @since 1.6.0 */ init: function() { $( app.ready ); }, /** * Document ready. * * @since 1.6.0 */ ready: function() { app.updateNavigation(); app.events(); }, /** * Register JS events. * * @since 1.6.0 */ events: function() { el.$notifications .on( 'click', '.dismiss', app.dismiss ) .on( 'click', '.next', app.navNext ) .on( 'click', '.prev', app.navPrev ); }, /** * Click on the Dismiss notification button. * * @since 1.6.0 * * @param {object} event Event object. */ dismiss: function( event ) { if ( el.$currentMessage.length === 0 ) { return; } // Update counter. var count = parseInt( el.$adminBarCounter.text(), 10 ); if ( count > 1 ) { --count; el.$adminBarCounter.html( count ); } else { el.$adminBarCounter.remove(); el.$adminBarMenuItem.remove(); } // Remove notification. var $nextMessage = el.$nextMessage.length < 1 ? el.$prevMessage : el.$nextMessage, messageId = el.$currentMessage.data( 'message-id' ); if ( $nextMessage.length === 0 ) { el.$notifications.remove(); } else { el.$currentMessage.remove(); $nextMessage.addClass( 'current' ); app.updateNavigation(); } // AJAX call - update option. var data = { action: 'wpforms_notification_dismiss', nonce: wpforms_admin.nonce, id: messageId, }; $.post( wpforms_admin.ajax_url, data, function( res ) { if ( ! res.success ) { WPFormsAdmin.debug( res ); } } ).fail( function( xhr, textStatus, e ) { WPFormsAdmin.debug( xhr.responseText ); } ); }, /** * Click on the Next notification button. * * @since 1.6.0 * * @param {object} event Event object. */ navNext: function( event ) { if ( el.$nextButton.hasClass( 'disabled' ) ) { return; } el.$currentMessage.removeClass( 'current' ); el.$nextMessage.addClass( 'current' ); app.updateNavigation(); }, /** * Click on the Previous notification button. * * @since 1.6.0 * * @param {object} event Event object. */ navPrev: function( event ) { if ( el.$prevButton.hasClass( 'disabled' ) ) { return; } el.$currentMessage.removeClass( 'current' ); el.$prevMessage.addClass( 'current' ); app.updateNavigation(); }, /** * Update navigation buttons. * * @since 1.6.0 */ updateNavigation: function() { el.$currentMessage = el.$notifications.find( '.wpforms-notifications-message.current' ); el.$nextMessage = el.$currentMessage.next( '.wpforms-notifications-message' ); el.$prevMessage = el.$currentMessage.prev( '.wpforms-notifications-message' ); if ( el.$nextMessage.length === 0 ) { el.$nextButton.addClass( 'disabled' ); } else { el.$nextButton.removeClass( 'disabled' ); } if ( el.$prevMessage.length === 0 ) { el.$prevButton.addClass( 'disabled' ); } else { el.$prevButton.removeClass( 'disabled' ); } }, }; return app; }( document, window, jQuery ) ); // Initialize. WPFormsAdminNotifications.init(); assets/js/admin/challenge/challenge-builder.js000064400000014604147400353540015412 0ustar00/* global WPForms, WPFormsBuilder, wpforms_challenge_admin, WPFormsFormEmbedWizard */ /** * WPForms Challenge function. * * @since 1.5.0 * @since 1.6.2 Challenge v2 */ 'use strict'; var WPFormsChallenge = window.WPFormsChallenge || {}; WPFormsChallenge.builder = window.WPFormsChallenge.builder || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.5.0 * * @type {object} */ var app = { /** * Start the engine. * * @since 1.5.0 */ init: function() { $( app.ready ); $( window ).on( 'load', function() { // in case of jQuery 3.+ we need to wait for an `ready` event first. if ( typeof $.ready.then === 'function' ) { $.ready.then( app.load ); } else { app.load(); } } ); }, /** * Document ready. * * @since 1.5.0 */ ready: function() { app.setup(); app.events(); }, /** * Window load. * * @since 1.5.0 */ load: function() { if ( [ 'started', 'paused' ].indexOf( wpforms_challenge_admin.option.status ) > -1 ) { WPFormsChallenge.core.updateTooltipUI(); } $( '.wpforms-challenge' ).show(); }, /** * Initial setup. * * @since 1.5.0 */ setup: function() { if ( wpforms_challenge_admin.option.status === 'inited' ) { WPFormsChallenge.core.clearLocalStorage(); app.showWelcomePopup(); } $( '#wpforms-embed' ).addClass( 'wpforms-disabled' ); var tooltipAnchors = [ '#wpforms-setup-name', '.wpforms-setup-title .wpforms-setup-title-after', '#add-fields a i', '#wpforms-builder-settings-notifications-title', ]; $.each( tooltipAnchors, function( i, anchor ) { WPFormsChallenge.core.initTooltips( i + 1, anchor, null ); } ); $( document ).on( 'wpformsWizardPopupClose', app.enableEmbed ); }, /** * Register JS events. * * @since 1.5.0 */ events: function() { // Start the Challenge. $( '#wpforms-challenge-welcome-builder-popup' ).on( 'click', 'button', app.startChallenge ); // Step 1. $( '.wpforms-challenge-step1-done' ).on( 'click', function() { WPFormsChallenge.core.stepCompleted( 1 ); } ); $( '#wpforms-builder' ) // Register select template event when the setup panel is ready. .on( 'wpformsBuilderSetupReady', function() { app.eventSelectTemplate(); } ) // Restore tooltips when switching builder panels/sections. .on( 'wpformsPanelSwitch wpformsPanelSectionSwitch', function() { WPFormsChallenge.core.updateTooltipUI(); } ); // Step 3 - Add fields. $( '.wpforms-challenge-step3-done' ).on( 'click', app.gotoNotificationStep ); // Step 4 - Notifications. $( document ).on( 'click', '.wpforms-challenge-step4-done', app.showEmbedPopup ); // Tooltipster ready. $.tooltipster.on( 'ready', app.tooltipsterReady ); // Move to step 3 if challenge is forced and exisiting form is opened. $( document ).on( 'wpformsBuilderReady', function() { if ( $( '.wpforms-panel-fields-button' ).hasClass( 'active' ) && WPFormsChallenge.core.loadStep() <= 2 ) { WPFormsChallenge.core.stepCompleted( 1 ); WPFormsChallenge.core.stepCompleted( 2 ); } } ); }, /** * Register select template event. * * @since 1.6.8 */ eventSelectTemplate: function() { $( '#wpforms-panel-setup' ) // Step 2 - Select the Form template. .off( 'click', '.wpforms-template-select' ) // Intercept Form Builder's form template selection and apply own logic. .on( 'click', '.wpforms-template-select', function( e ) { app.builderTemplateSelect( this, e ); } ); }, /** * Start the Challenge. * * @since 1.6.2 */ startChallenge: function() { WPFormsChallenge.admin.saveChallengeOption( { status: 'started' } ); WPFormsChallenge.core.initListUI( 'started' ); $( '.wpforms-challenge-popup-container' ).fadeOut( function() { $( '#wpforms-challenge-welcome-builder-popup' ).hide(); } ); WPFormsChallenge.core.timer.run( WPFormsChallenge.core.timer.initialSecondsLeft ); WPFormsChallenge.core.updateTooltipUI(); }, /** * Go to Step. * * @since 1.6.2 * @since 1.7.5 Deprecated. * * @param {number|string} step Last saved step. */ gotoStep: function( step ) { console.warn( 'WARNING! Function "WPFormsChallenge.builder.gotoStep()" has been deprecated.' ); }, /** * Save the second step before a template is selected. * * @since 1.5.0 * * @param {string} el Element selector. * @param {object} e Event. */ builderTemplateSelect: function( el, e ) { WPFormsChallenge.core.resumeChallengeAndExec( e, function() { WPFormsChallenge.core.stepCompleted( 2 ) .done( WPForms.Admin.Builder.Setup.selectTemplate.bind( el, e ) ); } ); }, /** * Tooltipster ready event callback. * * @since 1.6.2 * * @param {object} e Event object. */ tooltipsterReady: function( e ) { var step = $( e.origin ).data( 'wpforms-challenge-step' ); var formId = $( '#wpforms-builder-form' ).data( 'id' ); step = parseInt( step, 10 ) || 0; formId = parseInt( formId, 10 ) || 0; // Save challenge form ID right after it's created. if ( 3 === step && formId > 0 ) { WPFormsChallenge.admin.saveChallengeOption( { form_id: formId } ); // eslint-disable-line camelcase } }, /** * Display 'Welcome to the Form Builder' popup. * * @since 1.6.2 */ showWelcomePopup: function() { $( '#wpforms-challenge-welcome-builder-popup' ).show(); $( '.wpforms-challenge-popup-container' ).fadeIn(); }, /** * Go to Notification step. * * @since 1.7.5 * * @param {object} e Event object. */ gotoNotificationStep: function( e ) { WPFormsChallenge.core.stepCompleted( 3 ).done( function() { WPFormsBuilder.panelSwitch( 'settings' ); WPFormsBuilder.panelSectionSwitch( $( '.wpforms-panel .wpforms-panel-sidebar-section-notifications' ) ); } ); }, /** * Display 'Embed in a Page' popup. * * @since 1.6.2 */ showEmbedPopup: function() { WPFormsChallenge.core.stepCompleted( 4 ).done( WPFormsFormEmbedWizard.openPopup ); }, /** * Enable Embed button when Embed popup is closed. * * @since 1.7.4 */ enableEmbed: function() { $( '#wpforms-embed' ).removeClass( 'wpforms-disabled' ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsChallenge.builder.init(); assets/js/admin/challenge/challenge-core.js000064400000044342147400353540014716 0ustar00/* global wpforms_challenge_admin */ /** * WPForms Challenge function. * * @since 1.5.0 * @since 1.6.2 Challenge v2 */ 'use strict'; var WPFormsChallenge = window.WPFormsChallenge || {}; WPFormsChallenge.core = window.WPFormsChallenge.core || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.5.0 * * @type {object} */ var app = {}; /** * Runtime variables. * * @since 1.6.2 * * @type {object} */ var vars = {}; /** * DOM elements. * * @since 1.6.2 * * @type {object} */ var el = {}; /** * Timer functions and properties. * * @since 1.5.0 * * @type {object} */ var timer = { /** * Number of minutes to complete the challenge. * * @since 1.5.0 * * @type {number} */ initialSecondsLeft: WPFormsChallenge.admin.l10n.minutes_left * 60, /** * Load timer ID. * * @since 1.5.0 * * @returns {string} ID from setInterval(). */ loadId: function() { return localStorage.getItem( 'wpformsChallengeTimerId' ); }, /** * Save timer ID. * * @since 1.5.0 * * @param {number|string} id setInterval() ID to save. */ saveId: function( id ) { localStorage.setItem( 'wpformsChallengeTimerId', id ); }, /** * Run the timer. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. * * @returns {string|void} ID from setInterval(). */ run: function( secondsLeft ) { if ( 5 === app.loadStep() ) { return; } var timerId = setInterval( function() { app.updateTimerUI( secondsLeft ); secondsLeft--; if ( 0 > secondsLeft ) { timer.saveSecondsLeft( 0 ); clearInterval( timerId ); } }, 1000 ); timer.saveId( timerId ); return timerId; }, /** * Pause the timer. * * @since 1.5.0 */ pause: function() { var timerId; var elSeconds; var secondsLeft = timer.getSecondsLeft(); if ( 0 === secondsLeft || 5 === app.loadStep() ) { return; } timerId = timer.loadId(); clearInterval( timerId ); elSeconds = $( '#wpforms-challenge-timer' ).data( 'seconds-left' ); if ( elSeconds ) { timer.saveSecondsLeft( elSeconds ); } }, /** * Resume the timer. * * @since 1.5.0 */ resume: function() { var timerId; var secondsLeft = timer.getSecondsLeft(); if ( 0 === secondsLeft || 5 === app.loadStep() ) { return; } timerId = timer.loadId(); if ( timerId ) { clearInterval( timerId ); } timer.run( secondsLeft ); }, /** * Clear all frontend saved timer data. * * @since 1.5.0 */ clear: function() { localStorage.removeItem( 'wpformsChallengeSecondsLeft' ); localStorage.removeItem( 'wpformsChallengeTimerId' ); localStorage.removeItem( 'wpformsChallengeTimerStatus' ); $( '#wpforms-challenge-timer' ).removeData( 'seconds-left' ); }, /** * Get number of seconds left to complete the Challenge. * * @since 1.5.0 * * @returns {number} Number of seconds left to complete the Challenge. */ getSecondsLeft: function() { var secondsLeft = localStorage.getItem( 'wpformsChallengeSecondsLeft' ); secondsLeft = parseInt( secondsLeft, 10 ) || 0; return secondsLeft; }, /** * Get number of seconds spent completing the Challenge. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. * * @returns {number} Number of seconds spent completing the Challenge. */ getSecondsSpent: function( secondsLeft ) { secondsLeft = secondsLeft || timer.getSecondsLeft(); return timer.initialSecondsLeft - secondsLeft; }, /** * Save number of seconds left to complete the Challenge. * * @since 1.5.0 * * @param {number|string} secondsLeft Number of seconds left to complete the Challenge. */ saveSecondsLeft: function( secondsLeft ) { localStorage.setItem( 'wpformsChallengeSecondsLeft', secondsLeft ); }, /** * Get 'minutes' part of timer display. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. * * @returns {number} 'Minutes' part of timer display. */ getMinutesFormatted: function( secondsLeft ) { secondsLeft = secondsLeft || timer.getSecondsLeft(); return Math.floor( secondsLeft / 60 ); }, /** * Get 'seconds' part of timer display. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. * * @returns {number} 'Seconds' part of timer display. */ getSecondsFormatted: function( secondsLeft ) { secondsLeft = secondsLeft || timer.getSecondsLeft(); return secondsLeft % 60; }, /** * Get formatted timer for display. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. * * @returns {string} Formatted timer for display. */ getFormatted: function( secondsLeft ) { secondsLeft = secondsLeft || timer.getSecondsLeft(); var timerMinutes = timer.getMinutesFormatted( secondsLeft ); var timerSeconds = timer.getSecondsFormatted( secondsLeft ); return timerMinutes + ( 9 < timerSeconds ? ':' : ':0' ) + timerSeconds; }, }; /** * Public functions and properties. */ app = { /** * Public timer functions and properties. * * @since 1.5.0 */ timer: timer, /** * Start the engine. * * @since 1.5.0 */ init: function() { $( app.ready ); $( window ).on( 'load', function() { // in case of jQuery 3.+ we need to wait for an `ready` event first. if ( typeof $.ready.then === 'function' ) { $.ready.then( app.load ); } else { app.load(); } } ); }, /** * Document ready. * * @since 1.5.0 */ ready: function() { app.setup(); app.events(); }, /** * Window load. * * @since 1.5.0 */ load: function() { if ( wpforms_challenge_admin.option.status === 'started' ) { app.timer.run( app.timer.getSecondsLeft() ); } }, /** * Initial setup. * * @since 1.5.0 */ setup: function() { var secondsLeft; var timerId = app.timer.loadId(); if ( timerId ) { clearInterval( timerId ); secondsLeft = app.timer.getSecondsLeft(); } if ( ! timerId || 0 === app.loadStep() || wpforms_challenge_admin.option.status === 'inited' ) { secondsLeft = app.timer.initialSecondsLeft; } app.initElements(); app.refreshStep(); app.initListUI( null, true ); app.updateListUI(); app.updateTimerUI( secondsLeft ); }, /** * Register JS events. * * @since 1.5.0 */ events: function() { $( [ window, document ] ) .on( 'blur', app.pauseChallenge ) .on( 'focus', app.resumeChallenge ) .on( 'click', '.wpforms-challenge-done-btn', app.resumeChallenge ); el.$btnPause.on( 'click', app.pauseChallenge ); el.$btnResume.on( 'click', app.resumeChallenge ); el.$listSteps.on( 'click', '.wpforms-challenge-item-current', app.refreshPage ); }, /** * DOM elements. * * @since 1.6.2 */ initElements: function() { el = { $challenge: $( '.wpforms-challenge' ), $btnPause: $( '.wpforms-challenge-pause' ), $btnResume: $( '.wpforms-challenge-resume' ), $listSteps: $( '.wpforms-challenge-list' ), $listBlock: $( '.wpforms-challenge-list-block' ), $listBtnToggle: $( '.wpforms-challenge-list-block .toggle-list' ), $progressBar: $( '.wpforms-challenge-bar' ), $tooltipBtnDone: function() { return $( '.wpforms-challenge-tooltip .wpforms-challenge-done-btn' ); }, }; }, /** * Get last saved step. * * @since 1.5.0 * * @returns {number} Last saved step. */ loadStep: function() { var step = localStorage.getItem( 'wpformsChallengeStep' ); step = parseInt( step, 10 ) || 0; return step; }, /** * Save Challenge step. * * @param {number|string} step Step to save. * * @returns {object} jqXHR object from saveChallengeOption(). */ saveStep: function( step ) { localStorage.setItem( 'wpformsChallengeStep', step ); return WPFormsChallenge.admin.saveChallengeOption( { step: step } ); }, /** * Update a step with backend data. * * @since 1.5.0 */ refreshStep: function() { var savedStep = el.$challenge.data( 'wpforms-challenge-saved-step' ); savedStep = parseInt( savedStep, 10 ) || 0; // Step saved on a backend has a priority. if ( app.loadStep() !== savedStep ) { app.saveStep( savedStep ); } }, /** * Complete Challenge step. * * @since 1.5.0 * * @param {number|string} step Step to complete. * * @returns {object} jqXHR object from saveStep(). */ stepCompleted: function( step ) { app.updateListUI( step ); app.updateTooltipUI( step ); return app.saveStep( step ); }, /** * Initialize Challenge tooltips. * * @since 1.5.0 * * @param {number|string} step Last saved step. * @param {string} anchor Element selector to bind tooltip to. * @param {object} args Tooltipster arguments. */ initTooltips: function( step, anchor, args ) { if ( typeof $.fn.tooltipster === 'undefined' ) { return; } var $dot = $( ' ' ); var tooltipsterArgs = { content : $( '#tooltip-content' + step ), trigger : null, interactive : true, animationDuration: 0, delay : 0, theme : [ 'tooltipster-default', 'wpforms-challenge-tooltip' ], side : [ 'top' ], distance : 3, functionReady : function( instance, helper ) { $( helper.tooltip ).addClass( 'wpforms-challenge-tooltip-step' + step ); // Custom positioning. if ( step === 4 || step === 3 ) { instance.option( 'side', 'right' ); } else if ( step === 1 ) { instance.option( 'side', 'left' ); } // Reposition is needed to render max-width CSS correctly. instance.reposition(); }, }; if ( typeof args === 'object' && args !== null ) { $.extend( tooltipsterArgs, args ); } $dot.insertAfter( anchor ).tooltipster( tooltipsterArgs ); }, /** * Update tooltips appearance. * * @since 1.5.0 * * @param {number|string} step Last saved step. */ updateTooltipUI: function( step ) { var nextStep; step = step || app.loadStep(); nextStep = step + 1; $( '.wpforms-challenge-dot' ).each( function( i, el ) { var $dot = $( el ), elStep = $dot.data( 'wpforms-challenge-step' ); if ( elStep < nextStep ) { $dot.addClass( 'wpforms-challenge-dot-completed' ); } if ( elStep > nextStep ) { $dot.addClass( 'wpforms-challenge-dot-next' ); } if ( elStep === nextStep ) { $dot.removeClass( 'wpforms-challenge-dot-completed wpforms-challenge-dot-next' ); } // Zero timeout is needed to properly detect $el visibility. setTimeout( function() { if ( $dot.is( ':visible' ) && elStep === nextStep ) { $dot.tooltipster( 'open' ); } else { $dot.tooltipster( 'close' ); } }, 0 ); } ); }, /** * Init ListUI. * * @since 1.6.2 * * @param {number|string} status Challenge status. * @param {boolean} initial Initial run, false by default. */ initListUI: function( status, initial ) { status = status || wpforms_challenge_admin.option.status; if ( [ 'started', 'paused' ].indexOf( status ) > -1 ) { el.$listBlock.find( 'p' ).hide(); el.$listBtnToggle.show(); el.$progressBar.show(); // Transform skip button to cancel button. var $skipBtn = el.$listBlock.find( '.list-block-button.challenge-skip' ); $skipBtn .attr( 'title', $skipBtn.data( 'cancel-title' ) ) .removeClass( 'challenge-skip' ) .addClass( 'challenge-cancel' ); } // Set initial window closed (collapsed) state if window is short or if it is closed manually. if ( initial && ( ( $( window ).height() < 900 && wpforms_challenge_admin.option.window_closed === '' ) || wpforms_challenge_admin.option.window_closed === '1' ) ) { el.$listBlock.find( 'p' ).hide(); el.$listBtnToggle.trigger( 'click' ); } if ( status === 'paused' ) { el.$challenge.addClass( 'paused' ); el.$btnPause.hide(); el.$btnResume.show(); } else { // Zero timeout is needed to avoid firing 'focus' and 'click' events in the same loop. setTimeout( function() { el.$btnPause.show(); }, 0 ); el.$challenge.removeClass( 'paused' ); el.$btnResume.hide(); } }, /** * Update Challenge task list appearance. * * @since 1.5.0 * * @param {number|string} step Last saved step. */ updateListUI: function( step ) { step = step || app.loadStep(); el.$listSteps.find( 'li' ).slice( 0, step ).addClass( 'wpforms-challenge-item-completed' ).removeClass( 'wpforms-challenge-item-current' ); el.$listSteps.find( 'li' ).eq( step ).addClass( 'wpforms-challenge-item-current' ); el.$progressBar.find( 'div' ).css( 'width', ( step * 20 ) + '%' ); }, /** * Update Challenge timer appearance. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. */ updateTimerUI: function( secondsLeft ) { if ( ! secondsLeft || isNaN( secondsLeft ) || '0' === secondsLeft ) { secondsLeft = 0; } app.timer.saveSecondsLeft( secondsLeft ); $( '#wpforms-challenge-timer' ).text( app.timer.getFormatted( secondsLeft ) ).data( 'seconds-left', secondsLeft ); }, /** * Remove Challenge interface. * * @since 1.5.0 */ removeChallengeUI: function() { $( '.wpforms-challenge-dot' ).remove(); el.$challenge.remove(); }, /** * Clear all Challenge frontend saved data. * * @since 1.5.0 */ clearLocalStorage: function() { localStorage.removeItem( 'wpformsChallengeStep' ); app.timer.clear(); }, /** * Pause Challenge. * * @since 1.6.2 * * @param {object} e Event object. */ pauseChallenge: function( e ) { // Skip if out to the iframe. if ( document.activeElement.tagName === 'IFRAME' ) { return; } // Skip if is not started. if ( wpforms_challenge_admin.option.status !== 'started' ) { return; } vars.pauseEvent = e.type; app.pauseResumeChallenge( 'pause' ); }, /** * Resume Challenge. * * @since 1.6.2 * * @param {object} e Event object. * * @returns {Function|void} Return pause challenge function or void. */ resumeChallenge: function( e ) { // Skip if is not paused. if ( wpforms_challenge_admin.option.status !== 'paused' ) { return; } // Resume on 'focus' only if it has been paused on 'blur'. if ( e.type === 'focus' && vars.pauseEvent !== 'blur' ) { delete vars.pauseEvent; return; } vars.resumeEvent = e.type; return app.pauseResumeChallenge( 'resume' ); }, /** * Pause/Resume Challenge. * * @since 1.6.2 * * @param {string} action Action to perform. `pause` or `resume`. * * @returns {Function} Save challenge option. */ pauseResumeChallenge: function( action ) { action = action === 'pause' ? action : 'resume'; app.timer[ action ](); var optionData = { status : action === 'pause' ? 'paused' : 'started', seconds_spent: app.timer.getSecondsSpent(), seconds_left : app.timer.getSecondsLeft(), }; app.initListUI( optionData.status ); return WPFormsChallenge.admin.saveChallengeOption( optionData ); }, /** * Resume Challenge and execute the callback. * * @since 1.7.5 * * @param {object} e Event object. * @param {Function} callback Callback function. */ resumeChallengeAndExec: function( e, callback ) { if ( typeof callback !== 'function' ) { callback = function() {}; } if ( wpforms_challenge_admin.option.status !== 'paused' ) { callback(); return; } var resumeResult = app.resumeChallenge( e ); if ( typeof resumeResult === 'object' && typeof resumeResult.done === 'function' ) { resumeResult.done( callback ); } else { callback(); } }, /** * Refresh Page in order to re-init current step. * * @since 1.6.2 * * @param {object} e Event object. */ refreshPage: function( e ) { window.location.reload( true ); }, /** * Check if we're in Gutenberg editor. * * @since 1.5.0 * * @returns {boolean} Is Gutenberg or not. */ isGutenberg: function() { return typeof wp !== 'undefined' && Object.prototype.hasOwnProperty.call( wp, 'blocks' ); }, /** * Trigger form embed page save potentially reloading it. * * @since 1.5.0 */ triggerPageSave: function() { if ( app.isGutenberg() ) { app.gutenbergPageSave(); } else { $( '#post #publish' ).trigger( 'click' ); } }, /** * Save page for Gutenberg. * * @since 1.5.2 */ gutenbergPageSave: function() { var $gb = $( '.block-editor' ), $updateBtn = $gb.find( '.editor-post-publish-button.editor-post-publish-button__button' ); // Trigger click on the Update button. if ( $updateBtn.length > 0 ) { $updateBtn.trigger( 'click' ); return; } // Use MutationObserver to wait while Gutenberg create/display panel with Publish button. var obs = { targetNode : $gb.find( '.edit-post-layout, .block-editor-editor-skeleton__publish > div' )[0], config : { childList: true, attributes: true, subtree: true, }, }; obs.callback = function( mutationsList, observer ) { var $btn = $gb.find( '.editor-post-publish-button, .editor-post-publish-panel__header-publish-button .editor-post-publish-button__button' ); if ( $btn.length > 0 ) { $btn.trigger( 'click' ); observer.disconnect(); } }; obs.observer = new MutationObserver( obs.callback ); obs.observer.observe( obs.targetNode, obs.config ); // Trigger click on the Publish button that opens the additional publishing panel. $gb.find( '.edit-post-toggle-publish-panel__button, .editor-post-publish-panel__toggle.editor-post-publish-button__button' ) .trigger( 'click' ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); WPFormsChallenge.core.init(); assets/js/admin/challenge/challenge-builder.min.js000064400000006471147400353540016177 0ustar00"use strict";var WPFormsChallenge=window.WPFormsChallenge||{};WPFormsChallenge.builder=window.WPFormsChallenge.builder||function(e,o,n){var t={init:function(){n(t.ready),n(o).on("load",function(){"function"==typeof n.ready.then?n.ready.then(t.load):t.load()})},ready:function(){t.setup(),t.events()},load:function(){-1<["started","paused"].indexOf(wpforms_challenge_admin.option.status)&&WPFormsChallenge.core.updateTooltipUI(),n(".wpforms-challenge").show()},setup:function(){"inited"===wpforms_challenge_admin.option.status&&(WPFormsChallenge.core.clearLocalStorage(),t.showWelcomePopup()),n("#wpforms-embed").addClass("wpforms-disabled");n.each(["#wpforms-setup-name",".wpforms-setup-title .wpforms-setup-title-after","#add-fields a i","#wpforms-builder-settings-notifications-title"],function(e,o){WPFormsChallenge.core.initTooltips(e+1,o,null)}),n(e).on("wpformsWizardPopupClose",t.enableEmbed)},events:function(){n("#wpforms-challenge-welcome-builder-popup").on("click","button",t.startChallenge),n(".wpforms-challenge-step1-done").on("click",function(){WPFormsChallenge.core.stepCompleted(1)}),n("#wpforms-builder").on("wpformsBuilderSetupReady",function(){t.eventSelectTemplate()}).on("wpformsPanelSwitch wpformsPanelSectionSwitch",function(){WPFormsChallenge.core.updateTooltipUI()}),n(".wpforms-challenge-step3-done").on("click",t.gotoNotificationStep),n(e).on("click",".wpforms-challenge-step4-done",t.showEmbedPopup),n.tooltipster.on("ready",t.tooltipsterReady),n(e).on("wpformsBuilderReady",function(){n(".wpforms-panel-fields-button").hasClass("active")&&WPFormsChallenge.core.loadStep()<=2&&(WPFormsChallenge.core.stepCompleted(1),WPFormsChallenge.core.stepCompleted(2))})},eventSelectTemplate:function(){n("#wpforms-panel-setup").off("click",".wpforms-template-select").on("click",".wpforms-template-select",function(e){t.builderTemplateSelect(this,e)})},startChallenge:function(){WPFormsChallenge.admin.saveChallengeOption({status:"started"}),WPFormsChallenge.core.initListUI("started"),n(".wpforms-challenge-popup-container").fadeOut(function(){n("#wpforms-challenge-welcome-builder-popup").hide()}),WPFormsChallenge.core.timer.run(WPFormsChallenge.core.timer.initialSecondsLeft),WPFormsChallenge.core.updateTooltipUI()},gotoStep:function(e){console.warn('WARNING! Function "WPFormsChallenge.builder.gotoStep()" has been deprecated.')},builderTemplateSelect:function(e,o){WPFormsChallenge.core.resumeChallengeAndExec(o,function(){WPFormsChallenge.core.stepCompleted(2).done(WPForms.Admin.Builder.Setup.selectTemplate.bind(e,o))})},tooltipsterReady:function(e){var e=n(e.origin).data("wpforms-challenge-step"),o=n("#wpforms-builder-form").data("id"),e=parseInt(e,10)||0,o=parseInt(o,10)||0;3===e&&0 -1 ) { app.lastStep(); $( '.wpforms-challenge-dot-completed' ).hide(); return; } if ( WPFormsChallenge.core.isGutenberg() ) { WPFormsChallenge.core.initTooltips( 5, '.block-editor .edit-post-header', { side: 'bottom' } ); app.updateTooltipVisibility(); } else { WPFormsChallenge.core.initTooltips( 5, '.wpforms-insert-form-button', { side: 'right' } ); } WPFormsChallenge.core.updateTooltipUI(); }, /** * Initial setup. * * @since 1.5.0 */ setup: function() { if ( 5 === WPFormsChallenge.core.loadStep() ) { $( '.wpforms-challenge' ).addClass( 'wpforms-challenge-completed' ); app.showPopup(); } $( '.wpforms-challenge' ).show(); }, /** * Register JS events. * * @since 1.5.0 */ events: function() { $( '.wpforms-challenge-step5-done' ) .on( 'click', app.lastStep ); $( '.wpforms-challenge-popup-close, .wpforms-challenge-end' ) .on( 'click', app.completeChallenge ); $( '#wpforms-challenge-contact-form .wpforms-challenge-popup-contact-btn' ) .on( 'click', app.submitContactForm ); }, /** * Last step done routine. * * @since 1.6.2 */ lastStep: function() { WPFormsChallenge.core.timer.pause(); WPFormsChallenge.core.stepCompleted( 5 ); $( '.wpforms-challenge' ).addClass( 'wpforms-challenge-completed' ); app.showPopup(); }, /** * Show either 'Congratulations' or 'Contact Us' popup. * * @since 1.5.0 */ showPopup: function() { var secondsLeft = WPFormsChallenge.core.timer.getSecondsLeft(); $( '.wpforms-challenge-popup-container' ).show(); if ( 0 < secondsLeft ) { var secondsSpent = WPFormsChallenge.core.timer.getSecondsSpent( secondsLeft ); $( '#wpforms-challenge-congrats-minutes' ) .text( WPFormsChallenge.core.timer.getMinutesFormatted( secondsSpent ) ); $( '#wpforms-challenge-congrats-seconds' ) .text( WPFormsChallenge.core.timer.getSecondsFormatted( secondsSpent ) ); $( '#wpforms-challenge-congrats-popup' ).show(); } else { $( '#wpforms-challenge-contact-popup' ).show(); } }, /** * Hide the popup. * * @since 1.5.0 */ hidePopup: function() { $( '.wpforms-challenge-popup-container' ).hide(); $( '.wpforms-challenge-popup' ).hide(); }, /** * Complete Challenge. * * @since 1.5.0 */ completeChallenge: function() { var optionData = { status : 'completed', seconds_spent: WPFormsChallenge.core.timer.getSecondsSpent(), seconds_left : WPFormsChallenge.core.timer.getSecondsLeft(), }; app.hidePopup(); WPFormsChallenge.core.removeChallengeUI(); WPFormsChallenge.core.clearLocalStorage(); WPFormsChallenge.admin.saveChallengeOption( optionData ) .done( WPFormsChallenge.core.triggerPageSave ); // Save and reload the page to remove WPForms Challenge JS. }, /** * Submit contact form button click event handler. * * @since 1.5.0 * * @param {object} e Event object. */ submitContactForm: function( e ) { e.preventDefault(); var $btn = $( this ), $form = $btn.closest( '#wpforms-challenge-contact-form' ); /* eslint-disable camelcase */ var data = { action : 'wpforms_challenge_send_contact_form', _wpnonce : WPFormsChallenge.admin.l10n.nonce, contact_data: { message : $form.find( '.wpforms-challenge-contact-message' ).val(), contact_me: $form.find( '.wpforms-challenge-contact-permission' ).prop( 'checked' ), }, }; /* eslint-enable */ $btn.prop( 'disabled', true ); $.post( ajaxurl, data, function( response ) { if ( ! response.success ) { console.error( 'Error sending WPForms Challenge Contact Form.' ); } } ).done( app.completeChallenge ); }, /** * Observe Gutenberg's Fullscreen Mode state to adjust tooltip positioning. * * @since 1.6.2 */ observeFullscreenMode: function() { var $body = $( 'body' ), isFullScreenPrev = $body.hasClass( 'is-fullscreen-mode' ); // MutationObserver configuration and callback. var obs = { targetNode : $body[0], config : { attributes: true, }, }; obs.callback = function( mutationsList, observer ) { var mutation, isFullScreen, $step5 = $( '.wpforms-challenge-tooltip-step5' ), $step5Arrow = $step5.find( '.tooltipster-arrow' ); for ( var i in mutationsList ) { mutation = mutationsList[ i ]; if ( mutation.type !== 'attributes' || mutation.attributeName !== 'class' ) { continue; } isFullScreen = $body.hasClass( 'is-fullscreen-mode' ); if ( isFullScreen === isFullScreenPrev ) { continue; } isFullScreenPrev = isFullScreen; if ( isFullScreen ) { $step5.css( { 'top': '93px', 'left': '0', } ); $step5Arrow.css( 'left', '91px' ); } else { $step5.css( { 'top': '125px', 'left': '66px', } ); $step5Arrow.css( 'left', '130px' ); } } }; obs.observer = new MutationObserver( obs.callback ); obs.observer.observe( obs.targetNode, obs.config ); }, /** * Update tooltip z-index when Gutenberg sidebar is open. * * @since 1.7.4 * * @returns {Function} Default function. */ updateTooltipVisibility: function() { var targetNode = document.querySelector( '.interface-interface-skeleton__body' ); if ( targetNode === null ) { return app.updateTooltipVisibilityDefault(); } var observer = new MutationObserver( function( mutationsList ) { var $step5 = $( '.wpforms-challenge-tooltip-step5' ); for ( var mutation of mutationsList ) { if ( mutation.type === 'childList' ) { $step5.toggleClass( 'wpforms-challenge-tooltip-step5-hide' ); } } } ); observer.observe( targetNode, { attributes: true, childList: true } ); }, /** * Update tooltip visibility for WP 5.6 version. * * @since 1.7.4 */ updateTooltipVisibilityDefault: function() { $( '.editor-inserter__toggle' ).on( 'click', function() { $( '.wpforms-challenge-tooltip-step5' ).toggleClass( 'wpforms-challenge-tooltip-step5-hide' ); } ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsChallenge.embed.init(); assets/js/admin/challenge/challenge-embed.min.js000064400000007523147400353540015624 0ustar00"use strict";var WPFormsChallenge=window.WPFormsChallenge||{};WPFormsChallenge.embed=window.WPFormsChallenge.embed||function(o,e,c){var t={init:function(){c(t.ready),c(e).on("load",function(){"function"==typeof c.ready.then?c.ready.then(t.load):t.load()})},ready:function(){t.setup(),t.events(),t.observeFullscreenMode()},load:function(){-1 '),l={content:s("#tooltip-content"+n),trigger:null,interactive:!0,animationDuration:0,delay:0,theme:["tooltipster-default","wpforms-challenge-tooltip"],side:["top"],distance:3,functionReady:function(e,t){s(t.tooltip).addClass("wpforms-challenge-tooltip-step"+n),4===n||3===n?e.option("side","right"):1===n&&e.option("side","left"),e.reposition()}},"object"==typeof t&&null!==t&&s.extend(l,t),o.insertAfter(e).tooltipster(l))},updateTooltipUI:function(e){var l;e=e||n.loadStep(),l=e+1,s(".wpforms-challenge-dot").each(function(e,t){var n=s(t),o=n.data("wpforms-challenge-step");o div")[0],config:{childList:!0,attributes:!0,subtree:!0},callback:function(e,t){var n=o.find(".editor-post-publish-button, .editor-post-publish-panel__header-publish-button .editor-post-publish-button__button");0'+wpforms_admin.loading),WPFormsFormTemplates.selectTemplateProcess(e.data("template-name-raw"),e.data("template"),e,r.selectTemplateProcessAjax)))},selectBlankTemplate:function(e){e.preventDefault(),r.selectTemplateProcessAjax("Blank Form","blank")},selectTemplateProcessAjax(t,e){var e={title:t,action:"wpforms_new_form",template:e,form_id:0,nonce:wpforms_admin_form_templates.nonce},a=o(".wpforms-setup-templates-categories li.active").data("category"),a=(a&&"all"!==a&&(e.category=a),o(".wpforms-setup-templates-subcategories li.active").data("subcategory"));a&&(e.subcategory=a),o.post(wpforms_admin.ajax_url,e).done(function(e){e.success?s.location.href=e.data.redirect:"invalid_template"===e.data.error_type?r.selectTemplateProcessInvalidTemplateError(e.data.message,t):r.selectTemplateProcessError(e.data.message)}).fail(function(){r.selectTemplateProcessError("")})},selectTemplateProcessInvalidTemplateError(e,t){o.alert({title:wpforms_admin.heads_up,content:e,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.use_default_template,btnClass:"btn-confirm",keys:["enter"],action(){r.selectTemplateProcessAjax(t,"simple-contact-form-template")}},cancel:{text:wpforms_admin.cancel,action(){WPFormsFormTemplates.selectTemplateCancel()}}}})},selectTemplateProcessError(e){o.alert({title:e,content:wpforms_admin.error_select_template,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action(){WPFormsFormTemplates.selectTemplateCancel()}}}})}};return r}((document,window),jQuery);WPFormsAdminFormTemplates.init();assets/js/admin/pages/smtp.min.js000064400000005601147400353540012763 0ustar00"use strict";var WPFormsPagesSMTP=window.WPFormsPagesSMTP||function(l,i){var r={},p={init:function(){i(p.ready)},ready:function(){p.initVars(),p.events()},initVars:function(){r={$stepInstall:i("section.step-install"),$stepInstallNum:i("section.step-install .num img"),$stepSetup:i("section.step-setup"),$stepSetupNum:i("section.step-setup .num img")}},events:function(){r.$stepInstall.on("click","button",p.stepInstallClick),r.$stepSetup.on("click","button",p.gotoURL)},stepInstallClick:function(){const s=i(this);if(!s.hasClass("disabled")){const e=s.attr("data-action");let t="";switch(e){case"activate":t="wpforms_activate_addon",s.text(wpforms_pluginlanding.activating);break;case"install":t="wpforms_install_addon",s.text(wpforms_pluginlanding.installing);break;case"goto-url":return void(l.location.href=s.attr("data-url"));default:return}s.addClass("disabled"),p.showSpinner(r.$stepInstallNum);var n=s.attr("data-plugin"),a=s.attr("data-source"),n={action:t,nonce:wpforms_admin.nonce,plugin:n,type:"plugin",source:a};i.post(wpforms_admin.ajax_url,n).done(function(t){p.stepInstallDone(t,s,e)}).always(function(){p.hideSpinner(r.$stepInstallNum)})}},stepInstallDone:function(t,s,n){var a;("install"===n?t.success&&t.data.is_activated:t.success)?(r.$stepInstallNum.attr("src",r.$stepInstallNum.attr("src").replace("step-1.","step-complete.")),s.addClass("grey").removeClass("button-primary").text(wpforms_pluginlanding.activated),p.stepInstallPluginStatus()):(n=(t="install"===n&&t.success&&!t.data.is_activated||"activate"===n)?wpforms_pluginlanding.manual_activate_url:wpforms_pluginlanding.manual_install_url,a=t?wpforms_pluginlanding.error_could_not_activate:wpforms_pluginlanding.error_could_not_install,t=t?wpforms_pluginlanding.plugins_page:wpforms_pluginlanding.download_now,s.removeClass("grey disabled").text(t).attr("data-action","goto-url").attr("data-url",n),s.after('

      '+a+"

      "))},stepInstallPluginStatus:function(){var t={action:"wpforms_smtp_page_check_plugin_status",nonce:wpforms_admin.nonce};i.post(wpforms_admin.ajax_url,t).done(p.stepInstallPluginStatusDone)},stepInstallPluginStatusDone:function(t){t.success&&(r.$stepSetup.removeClass("grey"),r.$stepSetupBtn=r.$stepSetup.find("button"),r.$stepSetupBtn.removeClass("grey disabled").addClass("button-primary"),0' + msg + '

      ' ); } }, /** * Callback for step 'Install' completion. * * @since 1.5.7 */ stepInstallPluginStatus: function() { var data = { action: 'wpforms_analytics_page_check_plugin_status', nonce : wpforms_admin.nonce, }; $.post( wpforms_admin.ajax_url, data ).done( app.stepInstallPluginStatusDone ); }, /** * Done part of the callback for step 'Install' completion. * * @since 1.5.7 * * @param {object} res Result of $.post() query. */ stepInstallPluginStatusDone: function( res ) { if ( ! res.success ) { return; } el.$stepSetup.removeClass( 'grey' ); el.$stepSetupBtn = el.$stepSetup.find( 'button' ); if ( res.data.setup_status > 0 ) { el.$stepSetupNum.attr( 'src', el.$stepSetupNum.attr( 'src' ).replace( 'step-2.svg', 'step-complete.svg' ) ); el.$stepAddon.removeClass( 'grey' ); el.$stepAddon.find( 'button' ).attr( 'data-url', res.data.step3_button_url ).removeClass( 'grey disabled' ).addClass( 'button-primary' ); if ( res.data.license_level === 'pro' ) { var buttonText = res.data.addon_installed > 0 ? wpforms_pluginlanding.activate_now : wpforms_pluginlanding.install_now; el.$stepAddon.find( 'button' ).text( buttonText ); } } else { el.$stepSetupBtn.removeClass( 'grey disabled' ).addClass( 'button-primary' ); } }, /** * Go to URL by click on the button. * * @since 1.5.7 */ gotoURL: function() { var $btn = $( this ); if ( $btn.hasClass( 'disabled' ) ) { return; } window.location.href = $btn.attr( 'data-url' ); }, /** * Display spinner. * * @since 1.5.7 * * @param {jQuery} $el Section number image jQuery object. */ showSpinner: function( $el ) { $el.siblings( '.loader' ).removeClass( 'hidden' ); }, /** * Hide spinner. * * @since 1.5.7 * * @param {jQuery} $el Section number image jQuery object. */ hideSpinner: function( $el ) { $el.siblings( '.loader' ).addClass( 'hidden' ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsPagesAnalytics.init(); assets/js/admin/pages/mi-analytics.min.js000064400000006110147400353540014366 0ustar00"use strict";var WPFormsPagesAnalytics=window.WPFormsPagesAnalytics||function(e,l){var i={},o={init:function(){l(o.ready)},ready:function(){o.initVars(),o.events()},initVars:function(){i={$stepInstall:l("section.step-install"),$stepInstallNum:l("section.step-install .num img"),$stepSetup:l("section.step-setup"),$stepSetupNum:l("section.step-setup .num img"),$stepAddon:l("section.step-addon"),$stepAddonNum:l("section.step-addon .num img")}},events:function(){i.$stepInstall.on("click","button",o.stepInstallClick),i.$stepSetup.on("click","button",o.gotoURL),i.$stepAddon.on("click","button",o.gotoURL)},stepInstallClick:function(){var n=l(this),s=n.attr("data-action"),t=n.attr("data-plugin"),a="";if(!n.hasClass("disabled")){switch(s){case"activate":a="wpforms_activate_addon",n.text(wpforms_pluginlanding.activating);break;case"install":a="wpforms_install_addon",n.text(wpforms_pluginlanding.installing);break;case"goto-url":return void(e.location.href=n.attr("data-url"));default:return}n.addClass("disabled"),o.showSpinner(i.$stepInstallNum);t={action:a,nonce:wpforms_admin.nonce,plugin:t,type:"plugin"};l.post(wpforms_admin.ajax_url,t).done(function(t){o.stepInstallDone(t,n,s)}).always(function(){o.hideSpinner(i.$stepInstallNum)})}},stepInstallDone:function(t,n,s){var a;("install"===s?t.success&&t.data.is_activated:t.success)?(i.$stepInstallNum.attr("src",i.$stepInstallNum.attr("src").replace("step-1.","step-complete.")),n.addClass("grey").removeClass("button-primary").text(wpforms_pluginlanding.activated),o.stepInstallPluginStatus()):(s=(t="install"===s&&t.success&&!t.data.is_activated||"activate"===s)?wpforms_pluginlanding.mi_manual_activate_url:wpforms_pluginlanding.mi_manual_install_url,a=t?wpforms_pluginlanding.error_could_not_activate:wpforms_pluginlanding.error_could_not_install,t=t?wpforms_pluginlanding.plugins_page:wpforms_pluginlanding.download_now,n.removeClass("grey disabled").text(t).attr("data-action","goto-url").attr("data-url",s),n.after('

      '+a+"

      "))},stepInstallPluginStatus:function(){var t={action:"wpforms_analytics_page_check_plugin_status",nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,t).done(o.stepInstallPluginStatusDone)},stepInstallPluginStatusDone:function(t){t.success&&(i.$stepSetup.removeClass("grey"),i.$stepSetupBtn=i.$stepSetup.find("button"),0' + msg + '

      ' ); }, /** * Callback for step 'Install' completion. * * @since 1.5.7 */ stepInstallPluginStatus: function() { var data = { action: 'wpforms_smtp_page_check_plugin_status', nonce : wpforms_admin.nonce, }; $.post( wpforms_admin.ajax_url, data ) .done( app.stepInstallPluginStatusDone ); }, /** * Done part of the callback for step 'Install' completion. * * @since 1.5.7 * * @param {object} res Result of $.post() query. */ stepInstallPluginStatusDone: function( res ) { if ( ! res.success ) { return; } el.$stepSetup.removeClass( 'grey' ); el.$stepSetupBtn = el.$stepSetup.find( 'button' ); el.$stepSetupBtn.removeClass( 'grey disabled' ).addClass( 'button-primary' ); if ( res.data.setup_status > 0 ) { el.$stepSetupNum.attr( 'src', el.$stepSetupNum.attr( 'src' ).replace( 'step-2.svg', 'step-complete.svg' ) ); el.$stepSetupBtn.attr( 'data-url', wpforms_pluginlanding.smtp_settings_url ).text( wpforms_pluginlanding.smtp_settings ); return; } el.$stepSetupBtn.attr( 'data-url', wpforms_pluginlanding.smtp_wizard_url ).text( wpforms_pluginlanding.smtp_wizard ); }, /** * Go to URL by click on the button. * * @since 1.5.7 */ gotoURL: function() { var $btn = $( this ); if ( $btn.hasClass( 'disabled' ) ) { return; } window.location.href = $btn.attr( 'data-url' ); }, /** * Display spinner. * * @since 1.5.7 * * @param {jQuery} $el Section number image jQuery object. */ showSpinner: function( $el ) { $el.siblings( '.loader' ).removeClass( 'hidden' ); }, /** * Hide spinner. * * @since 1.5.7 * * @param {jQuery} $el Section number image jQuery object. */ hideSpinner: function( $el ) { $el.siblings( '.loader' ).addClass( 'hidden' ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsPagesSMTP.init(); assets/js/admin/pages/form-templates.js000064400000012617147400353540014162 0ustar00/* global wpforms_admin, WPFormsFormTemplates, wpforms_admin_form_templates */ /** * Admin Sub-page Form Templates function. * * @since 1.7.7 */ 'use strict'; var WPFormsAdminFormTemplates = window.WPFormsAdminFormTemplates || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.7.7 * * @type {object} */ let app = { /** * Start the engine. * * @since 1.7.7 */ init: function() { $( app.ready ); }, /** * Document ready. * * @since 1.7.7 */ ready: function() { app.events(); }, /** * Bind events. * * @since 1.7.7 */ events: function() { $( '.wpforms-form-setup-content' ) .on( 'keyup', '#wpforms-setup-template-search', _.debounce( WPFormsFormTemplates.searchTemplate, 200 ) ) .on( 'click', '.wpforms-setup-templates-categories li div', WPFormsFormTemplates.selectCategory ) .on( 'click', '.wpforms-setup-templates-categories li .chevron', WPFormsFormTemplates.toggleSubcategoriesList ) .on( 'click', '.wpforms-setup-templates-subcategories li', WPFormsFormTemplates.selectSubCategory ) .on( 'click', '.wpforms-template-select', app.selectTemplate ) .on( 'click', '.wpforms-trigger-blank', app.selectBlankTemplate ); }, /** * Select template. * * @since 1.7.7 * * @param {Object} event Event object. */ selectTemplate( event ) { event.preventDefault(); const $button = $( this ); const spinner = ''; // Don't do anything for templates that trigger education modal OR addons-modal. if ( $button.hasClass( 'education-modal' ) ) { return; } // User templates are applied differently for new forms. if ( $button.data( 'template' ).match( /wpforms-user-template-(\d+)/ ) && $button.data( 'create-url' ) ) { window.location.href = $button.data( 'create-url' ); return; } $( '.wpforms-form-setup-content' ).find( '.wpforms-template' ).removeClass( 'active' ); $button.closest( '.wpforms-template' ).addClass( 'active' ); // Save original label. $button.data( 'labelOriginal', $button.html() ); // Display loading indicator. $button.html( spinner + wpforms_admin.loading ); WPFormsFormTemplates.selectTemplateProcess( $button.data( 'template-name-raw' ), $button.data( 'template' ), $button, app.selectTemplateProcessAjax ); }, /** * Select Blank template. * * @since 1.7.7 * * @param {object} e Event object. */ selectBlankTemplate: function( e ) { e.preventDefault(); app.selectTemplateProcessAjax( 'Blank Form', 'blank' ); }, /** * Select template. Create or update form AJAX call. * * @since 1.7.7 * * @param {string} formName Name of the form. * @param {string} template Template slug. */ selectTemplateProcessAjax( formName, template ) { const data = { title: formName, action: 'wpforms_new_form', template, // eslint-disable-next-line camelcase form_id: 0, nonce: wpforms_admin_form_templates.nonce, }; const category = $( '.wpforms-setup-templates-categories li.active' ).data( 'category' ); if ( category && category !== 'all' ) { data.category = category; } const subcategory = $( '.wpforms-setup-templates-subcategories li.active' ).data( 'subcategory' ); if ( subcategory ) { data.subcategory = subcategory; } $.post( wpforms_admin.ajax_url, data ) .done( function( res ) { if ( res.success ) { window.location.href = res.data.redirect; return; } if ( res.data.error_type === 'invalid_template' ) { app.selectTemplateProcessInvalidTemplateError( res.data.message, formName ); return; } app.selectTemplateProcessError( res.data.message ); } ) .fail( function() { app.selectTemplateProcessError( '' ); } ); }, /** * Select template AJAX call error modal for invalid template using. * * @since 1.7.7 * * @param {string} errorMessage Error message. * @param {string} formName Name of the form. */ selectTemplateProcessInvalidTemplateError( errorMessage, formName ) { $.alert( { title: wpforms_admin.heads_up, content: errorMessage, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.use_default_template, btnClass: 'btn-confirm', keys: [ 'enter' ], action() { app.selectTemplateProcessAjax( formName, 'simple-contact-form-template' ); }, }, cancel: { text: wpforms_admin.cancel, action() { WPFormsFormTemplates.selectTemplateCancel(); }, }, }, } ); }, /** * Select template AJAX call error modal. * * @since 1.7.7 * @since 1.8.8 Replaced error message with error title. * * @param {string} errorTitle Error title. */ selectTemplateProcessError( errorTitle ) { $.alert( { title: errorTitle, content: wpforms_admin.error_select_template, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action() { WPFormsFormTemplates.selectTemplateCancel(); }, }, }, } ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsAdminFormTemplates.init(); assets/js/admin/share/list-table-ext.js000064400000046052147400353540014064 0ustar00/* global wpforms_admin */ /** * WPForms admin. Extend list tables functionality. * * @param wpforms_admin.column_selector_title * @param wpforms_admin.save_changes * @param wpforms_admin.uh_oh * @param wpforms_admin.unknown_error * @param wpforms_admin.column_selector_no_fields * @param wpforms_admin.column_selector_no_meta * * @since 1.8.6 */ const WPFormsAdminListTableExt = window.WPFormsAdminListTableExt || ( function( document, window, $ ) { /** * Supported pages' CSS selectors. * It is the ids of the `.wpforms-admin-wrap` container, which reflects `page` + `view` URL attributes. * * @since 1.8.6 * * @type {Array} */ const supportedPages = [ '#wpforms-overview', '#wpforms-entries-list', ]; /** * Element selectors shared between functions. * * @since 1.8.6 * * @type {Object} */ const selectors = { cogIcon: '#wpforms-list-table-ext-edit-columns-cog', submitButton: '#wpforms-list-table-ext-edit-columns-select-submit', }; /** * Elements. * * @since 1.8.6 * * @type {Object} */ const el = {}; /** * Public functions and properties. * * @since 1.8.6 * * @type {Object} */ const app = { /** * Start the engine. * * @since 1.8.6 */ init() { app.initElements(); el.$doc.on( 'wpformsReady', app.initMultiSelect ); $( app.ready ); }, /** * Document ready. * * @since 1.8.6 */ ready() { app.prepareTableFootColumns(); app.initTableScrollColumns(); app.initTableSortableColumns(); app.events(); app.windowResize(); }, /** * Events. * * @since 1.8.6 */ events() { el.$doc .on( 'click', selectors.cogIcon, app.onClickCog ) .on( 'wpforms_multiselect_checkbox_list_toggle', app.onMenuToggle ) .on( 'click', selectors.submitButton, app.onSaveChanges ); el.$tableScroll?.on( 'scroll', app.tableScroll ); // noinspection TypeScriptUMDGlobal $( window ).on( 'resize', _.debounce( app.windowResize, 100 ) ); el.$searchInput?.on( 'input', _.debounce( app.maybeShowNoResults, 310 ) ); // On 300 ms the multiselect lib is updating the list of items so we need to wait a bit more. }, /** * Init elements. * * @since 1.8.6 */ initElements() { el.$doc = $( document ); el.$header = $( '#wpforms-header' ); el.$page = $( supportedPages.join( ',' ) ); el.$table = el.$page.find( '.wp-list-table' ); el.$tableContainer = el.$table.parent(); el.$menu = $( '#wpforms-list-table-ext-edit-columns-select-container' ); el.$cog = app.initCogIcon(); el.$wpcontent = $( '#wpcontent' ); // The Forms Overview page has no table container, wrap the table. if ( ! el.$tableContainer.hasClass( 'wpforms-table-container' ) ) { el.$table.wrap( '
      ' ); el.$tableContainer = el.$table.parent(); } // Add specific classes to the page container. el.$page.addClass( 'wpforms-list-table-ext-page' ); }, /** * Prepare table footer columns. Their IDs should match the IDs of the header columns. * * @since 1.8.6 */ prepareTableFootColumns() { el.$table.find( 'thead tr .manage-column' ).each( function() { const columnId = $( this ).attr( 'id' ); el.$table.find( 'tfoot tr .column-' + columnId ).attr( 'id', columnId + '-foot' ); } ); // Disable sorting of the cog column. el.$table.find( '.manage-column.column-cog' ) .addClass( 'wpforms-table-cell-sticky' ); }, /** * Initialize table columns sortable container. * * @since 1.8.6 */ initTableSortableColumns() { // eslint-disable-line max-lines-per-function let $columnCells, columnId; el.$table.find( 'thead tr, tfoot tr' ).each( function() { // eslint-disable-line max-lines-per-function const $sortable = $( this ); $sortable.sortable( { items: '> th:not(:first-child):not(.wpforms-table-cell-sticky)', connectWith: '', delay: 100, opacity: 0.75, cursor: 'move', cancel: '.wpforms-table-column-not-draggable', placeholder: 'wpforms-table-column-drag-placeholder', appendTo: el.$page, zindex: 10000, tolerance: 'intersect', distance: 1, helper( e, origin ) { const $el = $( origin ), $helper = $el.clone(), width = $el.outerWidth(); return $helper.css( 'width', width + 'px' ); }, start( e, ui ) { ui.helper.addClass( 'wpforms-table-column-drag-helper' ); // Add a specific class to the helper container. ui.item.addClass( 'wpforms-table-column-dragged-out' ).css( 'display', '' ); // Disable global scrolling. el.$wpcontent.addClass( 'wpforms-no-scroll' ); columnId = ui.item.attr( 'id' ).replace( '-foot', '' ); }, stop( e, ui ) { // Remove specific classes from the helper. ui.item .removeClass( 'wpforms-table-column-drag-helper' ) .removeClass( 'wpforms-table-column-dragged-out' ); // Remove previously added vertical placeholder class from all columns. el.$table.find( 'thead tr > *, tfoot tr > *' ).removeClass( 'wpforms-table-column-drag-placeholder-prev' ); // Enable global scrolling. el.$wpcontent.removeClass( 'wpforms-no-scroll' ); const prevColumnId = ui.item.prev().attr( 'id' ).replace( '-foot', '' ), $rows = el.$table.find( 'tbody tr:not(.wpforms-hidden)' ), prevSelector = prevColumnId !== 'cb' ? '.column-' + prevColumnId : '.check-column'; // Move column cells. $columnCells = $rows.find( 'td.column-' + columnId ).detach(); for ( let i = 0; i < $columnCells.length; i++ ) { $rows.eq( i ).find( prevSelector ).after( $columnCells.eq( i ) ); } // Move opposite column header. const oppositeColumnsSelector = ui.item.closest( 'thead' ).length > 0 ? 'tfoot' : 'thead', $oppositeColumn = el.$table.find( oppositeColumnsSelector + ' tr .column-' + columnId ).detach(); el.$table.find( oppositeColumnsSelector + ' tr ' + prevSelector ).after( $oppositeColumn ); app.updateMenuColumnsOrder(); }, change( e, ui ) { // Remove previously added vertical placeholder class from all columns. el.$table.find( 'thead tr > *, tfoot tr > *' ).removeClass( 'wpforms-table-column-drag-placeholder-prev' ); // Add the vertical placeholder class to the previous column. ui.placeholder.prev().addClass( 'wpforms-table-column-drag-placeholder-prev' ); }, update() { app.saveColumnsOrder(); }, } ); } ); }, /** * Initialize table scroll sticky columns. * * @since 1.8.6 */ initTableScrollColumns() { // Init table horizontal scrolling only on the Entries page. if ( ! el.$page.is( '#wpforms-entries-list' ) ) { return; } el.$tableScroll = el.$tableContainer; // The Entries page has own table container, add the class. el.$tableScroll.addClass( 'wpforms-table-scroll' ); // Detect the Windows OS platform. el.$tableScroll.toggleClass( 'wpforms-scrollbar', app.isCustomScrollbarNeeded() ); // Add specific class to the sticky columns. el.$table.find( '.check-column, .column-indicators' ) .addClass( 'wpforms-table-cell-sticky' ) .addClass( 'left' ); el.$table.find( '.column-actions' ) .addClass( 'wpforms-table-cell-sticky' ) .addClass( 'right' ); }, /** * Table scroll event. * * @since 1.8.6 */ tableScroll() { if ( ! el.$tableScroll?.length ) { return; } const width = el.$tableScroll.outerWidth(), scrollLeft = Math.abs( el.$tableScroll.get( 0 ).scrollLeft ), scrollWidth = el.$tableScroll.get( 0 ).scrollWidth; // Conditionally Add shadow to the sticky columns. el.$tableScroll .find( '.wpforms-table-cell-sticky.left' ) .toggleClass( 'shadow', scrollLeft > 1 ); // 1px is fix for the RTL mode. el.$tableScroll .find( '.wpforms-table-cell-sticky.right' ) .toggleClass( 'shadow', scrollWidth - width >= scrollLeft ); }, /** * Window resize event. * * @since 1.8.6 */ windowResize() { // Disable dragging on mobiles. el.$table.find( 'thead th, tfoot th' ).toggleClass( 'wpforms-table-column-not-draggable', window.innerWidth <= 782 ); app.closeMenu(); app.windowResizeToggleColumns(); app.tableScroll(); }, /** * Toggle columns visibility for certain window sizes. * * @since 1.8.6 */ windowResizeToggleColumns() { // Proceed only on the Forms Overview page. if ( ! el.$page.is( '#wpforms-overview' ) ) { return; } const $visibleColumns = el.$table.find( 'thead tr th:visible' ); const $columnTags = el.$table.find( '.column-tags' ); // For browser window with the width between 960px and 1280px. if ( window.innerWidth > 960 && window.innerWidth <= 1280 ) { $columnTags.toggleClass( 'wpforms-hidden', $visibleColumns.length > 4 ); } else { $columnTags.removeClass( 'wpforms-hidden' ); } // Synchronize menu items visibility. el.$menu.find( 'label' ).removeClass( 'wpforms-hidden' ); el.$table.find( 'thead tr th:not(:visible)' ).each( function() { const $column = $( this ); el.$menu .find( `input[value="${ $column.attr( 'id' ) }"]` ) .closest( 'label' ) .addClass( 'wpforms-hidden' ); } ); }, /** * Show or hide no results text. * * @since 1.8.6 */ maybeShowNoResults() { [ 'fields', 'meta' ].forEach( ( section ) => { const labels = el.$menu.find( '.wpforms-multiselect-checkbox-optgroup-' + section ) .nextUntil( '.wpforms-multiselect-checkbox-optgroup' ) .filter( 'label' ); const hiddenLabels = labels.filter( function() { return $( this ).is( ':hidden' ); } ); el.$menu.find( '.wpforms-multiselect-checkbox-no-results-' + section ) .toggleClass( 'wpforms-hidden', labels.length !== hiddenLabels.length ); } ); }, /** * Close the columns' selector menu. * * @since 1.8.6 */ closeMenu() { if ( ! el.$cog.hasClass( 'active' ) ) { return; } el.$cog.removeClass( 'active' ); el.$menu.find( '.wpforms-multiselect-checkbox-list' ).removeClass( 'open' ); // Flush the search input. el.$searchInput.val( '' ); el.$searchInput[ 0 ]?.dispatchEvent( new Event( 'input' ) ); }, /** * Get columns order. * * @since 1.8.6 * * @return {Array} Columns order. */ getColumnsOrder() { const $row = el.$table.find( 'thead tr' ); const columns = []; $row.find( 'th' ).each( function() { columns.push( $( this ).attr( 'id' ) ); } ); return columns; }, /** * Get menu columns order. * * @since 1.8.6 * * @return {Array} Columns order. */ getMenuColumnsOrder() { let columnsOrder = app.getColumnsOrder(); const columnsChecked = []; const columns = []; el.$menu.find( `input:checked` ).each( function() { columnsChecked.push( $( this ).val() ); } ); // Convert DOM element IDs to column IDs. columnsOrder = columnsOrder.map( function( column ) { return app.convertColumnId( column ); } ); // Add checked columns in the same order as in the table. for ( let i = 0; i < columnsOrder.length; i++ ) { const column = columnsOrder[ i ]; if ( columnsChecked.includes( column ) ) { columns.push( column ); columnsChecked.splice( columnsChecked.indexOf( column ), 1 ); } } // Add the rest of the checked columns. return columns.concat( columnsChecked ); }, /** * Save columns order. * * @since 1.8.6 */ saveColumnsOrder() { const data = { nonce: wpforms_admin.nonce, action: el.$menu.find( '[name="action"]' ).val(), form_id: el.$menu.find( '[name="form_id"]' ).val(), // eslint-disable-line camelcase columns: app.getColumnsOrder(), }; // AJAX request to save the columns order. $.post( wpforms_admin.ajax_url, data ) .done( function( response ) { if ( ! response.success ) { app.displayErrorModal( response.data || wpforms_admin.unknown_error ); } } ) .fail( function() { app.displayErrorModal( wpforms_admin.server_error ); } ); }, /** * Display modal window with an error message. * * @since 1.8.6 * * @param {string} content Modal content. */ displayErrorModal( content ) { $.alert( { title : wpforms_admin.uh_oh, content, icon : 'fa fa-exclamation-circle', type : 'red', buttons: { cancel: { text : wpforms_admin.close, btnClass: 'btn-confirm', keys : [ 'enter' ], }, }, } ); }, /** * Update menu columns order. * * @since 1.8.6 */ updateMenuColumnsOrder() { // eslint-disable-line complexity let columnsOrder = app.getColumnsOrder(); const $groups = el.$menu.find( '.wpforms-multiselect-checkbox-optgroup' ); const $itemsCont = el.$menu.find( '.wpforms-multiselect-checkbox-items' ); const $items = $itemsCont.find( 'label' ); const itemsByGroup = [ 0 ]; // If there are no groups, add the items to the first group. itemsByGroup[ 0 ] = $items; // If there are groups, split the items by groups. if ( $groups.length ) { $groups.each( function( i ) { itemsByGroup[ i ] = $( this ).nextUntil( '.wpforms-multiselect-checkbox-optgroup' ); } ); } // Convert DOM element IDs to column IDs. columnsOrder = columnsOrder.map( function( column ) { return app.convertColumnId( column ); } ); // Rebuild the menu items order. for ( let g = 0; g < itemsByGroup.length; g++ ) { itemsByGroup[ g ] = itemsByGroup[ g ].filter( function() { return $( this ).find( 'input:checked' ).length > 0; } ); itemsByGroup[ g ].detach(); const $group = $groups.eq( g ); // Add the items in the same order as in the table. // It is necessary to process it in reverse mode to reproduce the columns order. for ( let i = columnsOrder.length - 1; i >= 0; i-- ) { const column = columnsOrder[ i ]; const $item = itemsByGroup[ g ].filter( function() { return $( this ).find( `[value="${ column }"]` ).length > 0; } ); if ( ! $item.length ) { continue; } if ( $group.length ) { $group.after( $item ); } else { $itemsCont.prepend( $item ); } } } }, /** * Convert column Id. * * @since 1.8.6 * * @param {string|number} columnId Column ID. * * @return {string} Converted column ID. */ convertColumnId( columnId ) { let id = columnId.replace( 'wpforms_field_', '' ); id = id.replace( '-foot', '' ); id = id === 'entry_id' ? '-1' : id; id = id === 'notes_count' ? '-2' : id; return id; }, /** * Initialize wpforms-multiselect-js on select elements. * * @since 1.8.6 */ initMultiSelect() { if ( ! el.$cog.length ) { return; } el.$menu.find( '.wpforms-list-table-ext-edit-columns-select' ).each( function() { const isLongList = $( this ).find( 'option' ).length > 10; const isEntriesPage = el.$page.is( '#wpforms-entries-list' ); const showSearch = isEntriesPage && isLongList; const multiSelectColumns = new window.WPFormsMultiSelectCheckbox( this, { showMask: true, showSearch, customOpener: el.$cog.get( 0 ), } ); multiSelectColumns.init(); const $wrapper = $( this ).next( '.wpforms-multiselect-checkbox-wrapper' ); const $list = $wrapper.find( '.wpforms-multiselect-checkbox-list' ); app.appendNoResultsText( $list ); if ( ! showSearch ) { $wrapper.find( '.wpforms-multiselect-checkbox-items' ).addClass( 'wpforms-multiselect-checkbox-items-no-search' ); } $list.append( '' ); app.updateMenuColumnsOrder(); } ); el.$searchInput = $( '#wpforms-list-table-ext-edit-columns-select-container .wpforms-multiselect-checkbox-search' ); el.$menu.removeClass( 'wpforms-hidden' ); }, /** * Append no results text to the multiselect list. * * @since 1.8.6 * * @param {jQuery} $list Multiselect list. */ appendNoResultsText( $list ) { $list.find( '.wpforms-multiselect-checkbox-optgroup' ).each( function( i ) { const appendix = i === 0 ? 'fields' : 'meta'; const noResultsText = i === 0 ? wpforms_admin.column_selector_no_fields : wpforms_admin.column_selector_no_meta; $( this ) .addClass( 'wpforms-multiselect-checkbox-optgroup-' + appendix ) .after( `${ noResultsText }` ); } ); }, /** * Add cog icon to the table header. * * @since 1.8.6 * * @return {jQuery} Cog icon object. */ initCogIcon() { if ( el.$cog ) { return el.$cog; } const $lastColumnHeader = el.$table.find( 'thead th:not(.hidden):last' ); if ( ! $lastColumnHeader.length ) { return $(); } const cogId = selectors.cogIcon.replace( '#', '' ); const $cog = $( `` ); $lastColumnHeader.append( $cog ); return $cog; }, /* * Click on the cog icon. * * @since 1.8.6 * * @param {object} event Event object. */ onClickCog( event ) { event.preventDefault(); }, /* * Save changes. * * @since 1.8.6 * * @param {object} event Event object. */ onSaveChanges( event ) { event.preventDefault(); const data = { nonce: wpforms_admin.nonce, action: el.$menu.find( 'input[name="action"]' ).val(), form_id: el.$menu.find( 'input[name="form_id"]' ).val(), // eslint-disable-line camelcase columns: app.getMenuColumnsOrder(), }; app.closeMenu(); $.post( wpforms_admin.ajax_url, data ) .done( function( response ) { if ( ! response.success ) { app.displayErrorModal( response.data || wpforms_admin.unknown_error ); return; } window.location.reload(); } ) .fail( function() { app.displayErrorModal( wpforms_admin.server_error ); } ); }, /** * Toggle multiselect columns menu. * * @since 1.8.6 * * @param {Object} event Event object. */ onMenuToggle( event ) { $( selectors.cogIcon ).toggleClass( 'active', event.detail.isOpen ); // Hide no results messages. el.$menu.find( '.wpforms-multiselect-checkbox-no-results' ).addClass( 'wpforms-hidden' ); app.positionMultiselectColumnsMenu(); }, /** * Position the multiselect columns menu just under the cog icon. * * @since 1.8.6 */ positionMultiselectColumnsMenu() { if ( ! el.$cog.length ) { return; } el.$menu.css( { top: el.$cog.offset().top - $( '#wpbody-content' ).offset().top + el.$cog.outerHeight() + 6, } ); }, /** * Detect if the custom styled scrollbar is needed. * * @since 1.8.6 * * @return {boolean} True when needed. */ isCustomScrollbarNeeded() { const ua = navigator.userAgent; return ( ua.includes( 'Windows' ) || ua.includes( 'Linux' ) ) && ( ua.includes( 'Chrome' ) || ua.includes( 'Firefox' ) ); }, }; return app; }( document, window, jQuery ) ); // Initialize. WPFormsAdminListTableExt.init(); assets/js/admin/share/xor.js000064400000012102147400353540012023 0ustar00/* global define */ /* eslint-disable */ /** * XOR, or exclusive or, is a logical bitwise operation that stands for "exclusive or." * In the context of binary numbers, XOR compares corresponding bits of two operands and * produces a new result. The XOR operation returns true (or 1) for bits where the operands differ. * * Note: This class is a simple obfuscation technique and should not be used for securing sensitive data. * * Here's the truth table for XOR: * * A | B | A XOR B * ----------------- * 0 | 0 | 0 * 0 | 1 | 1 * 1 | 0 | 1 * 1 | 1 | 0 * * In binary, XOR is often denoted by the symbol ^. * Here's an example of XOR operation on binary numbers: * * 1101 (13 in decimal) * ^ 1010 (10 in decimal) * ------------------------ * 0111 (7 in decimal) * * Example Usage: * * // Instantiate the plugin with a custom encryption key. * const xorInstance = new WPFormsXOR({ * key: 55, // Use any number as the encryption key. * }); * * // Example object to encrypt. * const dataToEncrypt = { * age: 30, * name: 'Sullie', * city: 'Texas', * }; * * // Encrypt the object. * const encryptedValue = xorInstance.encrypt(dataToEncrypt); * console.log('Encrypted:', encryptedValue); * * // Decrypt the string. * const decryptedObject = xorInstance.decrypt(encryptedValue); * console.log('Decrypted:', decryptedObject); */ /* eslint-enable */ ( function( root, factory ) { const pluginName = 'WPFormsXOR'; if ( typeof define === 'function' && define.amd ) { define( [], factory( pluginName ) ); } else if ( typeof exports === 'object' ) { module.exports = factory( pluginName ); } else { root[ pluginName ] = factory( pluginName ); } // eslint-disable-next-line max-lines-per-function }( this, function( pluginName ) { // eslint-disable-next-line strict 'use strict'; /** * Plugin Error Object. * * @since 1.8.6 * * @class PluginError * * @augments Error */ class PluginError extends Error { /** * Constructor. * * @since 1.8.6 * * @param {string} message The error message. */ constructor( message ) { super( message ); this.name = pluginName; } } /** * Plugin Object. * * @since 1.8.6 * * @class Plugin */ class Plugin { // Default settings. static defaults = { // The encryption key is a crucial component in encryption algorithms, // including the XOR encryption used in the provided code. // The key is a value used to control the transformation // of the data during encryption and decryption. key: 42, // You can use any number. }; /** * Constructor. * * @since 1.8.6 * * @param {Object} args The argument object. */ constructor( args ) { // Merge the default settings with the provided settings. this.args = Object.assign( {}, Plugin.defaults, args ); } /** * Encrypt an object using XOR encryption. * * @since 1.8.6 * * @param {Object} obj The object to encrypt. * * @return {string} The encrypted object as a string. */ encrypt( obj ) { // Bail if the input is not an object. if ( typeof obj !== 'object' ) { throw new PluginError( 'Invalid input. Expected an object for encryption.' ); } // Initialize an empty string to store the encrypted result. let result = ''; try { // Convert the object to a JSON string. const jsonString = JSON.stringify( obj ); // Iterate through each character of the JSON string. for ( let i = 0; i < jsonString.length; i++ ) { // XOR each character with the encryption key and append to the result. // eslint-disable-next-line no-bitwise result += String.fromCharCode( jsonString.charCodeAt( i ) ^ this.args.key ); } } catch ( error ) { // Throw a PluginError if there's an issue during JSON stringification. throw new PluginError( 'Error during encryption. Unable to stringify the object.' ); } return result; } /** * Decrypt a string using XOR encryption. * * @since 1.8.6 * * @param {string} encryptedString The encrypted string. * * @return {Object} The decrypted object. */ decrypt( encryptedString = '' ) { // Bail if the input is not a string. if ( typeof encryptedString !== 'string' ) { throw new PluginError( 'Invalid input. Expected a string for decryption.' ); } // Bail if there is no encrypted string. if ( ! encryptedString ) { return {}; // Return an empty object. } let result = ''; try { // Iterate through each character of the encrypted string. for ( let i = 0; i < encryptedString.length; i++ ) { // XOR each character with the decryption key and append to the result. // eslint-disable-next-line no-bitwise result += String.fromCharCode( encryptedString.charCodeAt( i ) ^ this.args.key ); } // Parse the decrypted result as JSON or return an empty object if parsing fails. return JSON.parse( result || '{}' ); } catch ( error ) { // Throw an error if there's an issue during decryption or parsing. throw new PluginError( 'Error during decryption. Unable to parse decrypted data.' ); } } } return Plugin; } ) ); assets/js/admin/share/contrast-checker.js000064400000014471147400353540014465 0ustar00/* global define */ /* eslint-disable */ /** * This file contains a reusable, and dependency-free JavaScript class, * providing a contrast checker. This class allows you to assess the readability * of the given background and text colors against the WCAG 2.0 AA standard. * * Example Usage: * * // Create an instance of the plugin with custom settings. * const contrastChecker = new WPFormsColorContrastChecker({ * textColor: '#de8e8e', // Replace with your actual text color. * bgColor: '#ffffff', // Replace with your actual background color. * message: { * contrastPass: '', * contrastFail: 'Insufficient contrast. Please choose a darker text color or a lighter background color.', * }, * }); * * // Perform the contrast check. * const contrastFailed = contrastChecker.checkContrast(); * * // Display the result or handle the error, if any. * if (contrastFailed) { * console.error(contrastFailed); * } */ /* eslint-enable */ ( function( root, factory ) { const pluginName = 'WPFormsColorContrastChecker'; if ( typeof define === 'function' && define.amd ) { define( [], factory( pluginName ) ); } else if ( typeof exports === 'object' ) { module.exports = factory( pluginName ); } else { root[ pluginName ] = factory( pluginName ); } // eslint-disable-next-line max-lines-per-function }( this, function( pluginName ) { // eslint-disable-next-line strict 'use strict'; /** * Plugin Error Object. * * @since 1.8.6 * * @class PluginError * * @augments Error */ class PluginError extends Error { /** * Constructor. * * @since 1.8.6 * * @param {string} message The error message. */ constructor( message ) { super( message ); this.name = pluginName; } } /** * Log the error message. * This function can be replaced with a custom error logging logic. * * @since 1.8.6 * * @param {string} error The error message. */ function logError( error ) { // Custom error logging logic. // Display the error message in a specific format or send it to a logging service // eslint-disable-next-line no-console console.error( error ); } /** * Plugin Object. * * @since 1.8.6 * * @class Plugin */ class Plugin { // Default settings. static defaults = { textColor: '', bgColor: '', contrastThreshold: 4.5, // W3C recommended minimum contrast ratio for normal text message: { contrastPass: 'The contrast ratio between the text and background color is sufficient.', contrastFail: 'The contrast ratio between the text and background color is insufficient. Please choose a darker text color or a lighter background color.', }, }; /** * Constructor. * * @since 1.8.6 * * @param {Object} args The argument object. */ constructor( args ) { // Merge the default settings with the provided settings. this.args = Object.assign( {}, Plugin.defaults, args ); } /** * Convert hex color code to an RGB array. * * @since 1.8.6 * * @param {string} hexColor The hex color code. * * @return {number[]|null} The RGB array or null if the conversion failed. */ hexToRgb( hexColor ) { const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec( hexColor ); if ( shorthandRegex.test( hexColor ) ) { return result ? [ parseInt( result[ 1 ], 16 ) * 17, parseInt( result[ 2 ], 16 ) * 17, parseInt( result[ 3 ], 16 ) * 17, ] : null; } return result ? [ parseInt( result[ 1 ], 16 ), parseInt( result[ 2 ], 16 ), parseInt( result[ 3 ], 16 ), ] : null; } /** * Calculate relative luminance for a color. * * The calculated relative luminance is a value between 0 and 1, * where 0 represents black and 1 represents white. * * @since 1.8.6 * * @param {string} rgb The RGB color code. * * @return {number} The relative luminance. */ calculateRelativeLuminance( rgb ) { for ( let i = 0; i < rgb.length; i++ ) { rgb[ i ] /= 255; rgb[ i ] = rgb[ i ] <= 0.03928 ? rgb[ i ] / 12.92 : Math.pow( ( rgb[ i ] + 0.055 ) / 1.055, 2.4 ); } // As Stated in WCAG the relative luminance of a color is defined as: // L = 0.2126 * R + 0.7152 * G + 0.0722 * B // where R, G and B are the color values normalized to the range [0, 1]. // @see https://www.w3.org/WAI/GL/wiki/Relative_luminance // eslint-disable-next-line no-mixed-operators return 0.2126 * rgb[ 0 ] + 0.7152 * rgb[ 1 ] + 0.0722 * rgb[ 2 ]; } /** * Get the contrast ratio between two colors. * * @since 1.8.6 * * @return {number|null} The contrast ratio or an error if the calculation failed. */ getContrastRatio() { try { const rgbText = this.hexToRgb( this.args.textColor ); const rgbBg = this.hexToRgb( this.args.bgColor ); // Check for invalid color format if ( ! rgbText || ! rgbBg ) { throw new PluginError( 'Invalid color format. Provide valid hex color codes.' ); } const [ l1, l2 ] = [ this.calculateRelativeLuminance( rgbText ), this.calculateRelativeLuminance( rgbBg ) ]; // The purpose of adding 0.05 to both the maximum and minimum relative luminance // is to ensure that even if one of the luminance values is zero (which would cause division by zero), // the result won't be infinite. This kind of adjustment is common in contrast ratio calculations // to handle extreme cases and avoid mathematical errors. return ( Math.max( l1, l2 ) + 0.05 ) / ( Math.min( l1, l2 ) + 0.05 ); } catch ( error ) { logError( error.message ); return null; } } /** * Check the contrast and provide a warning if it's below the threshold. * * @since 1.8.6 * * @return {string|null} The contrast check result or boolean false if the check failed. */ checkContrast() { try { const contrastRatio = this.getContrastRatio(); // Return early if invalid color format if ( contrastRatio === null ) { throw new PluginError( 'Invalid contrast ratio. Provide valid contrast ratio between two colors.' ); } // Warn if the contrast is below the threshold. if ( contrastRatio < this.args.contrastThreshold ) { return this.args.message.contrastFail; } return this.args.message.contrastPass; } catch ( error ) { logError( error.message ); return null; } } } return Plugin; } ) ); assets/js/admin/share/contrast-checker.min.js000064400000003262147400353540015243 0ustar00!function(t,e){var r="WPFormsColorContrastChecker";"function"==typeof define&&define.amd?define([],e(r)):"object"==typeof exports?module.exports=e(r):t[r]=e(r)}(this,function(e){"use strict";class o extends Error{constructor(t){super(t),this.name=e}}function s(t){console.error(t)}return class r{static defaults={textColor:"",bgColor:"",contrastThreshold:4.5,message:{contrastPass:"The contrast ratio between the text and background color is sufficient.",contrastFail:"The contrast ratio between the text and background color is insufficient. Please choose a darker text color or a lighter background color."}};constructor(t){this.args=Object.assign({},r.defaults,t)}hexToRgb(t){var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return/^#?([a-f\d])([a-f\d])([a-f\d])$/i.test(t)?e?[17*parseInt(e[1],16),17*parseInt(e[2],16),17*parseInt(e[3],16)]:null:e?[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]:null}calculateRelativeLuminance(e){for(let t=0;t 0 && last.length > 0 && first.position().top !== last.position().top ) { jQuery( container ).addClass( 'choices__show-more' ); } }, /** * Initialize event handlers for choices. * * @since 1.9.0 */ initializeChoicesEventHandlers() { // Show more button for choices. jQuery( document ).on( 'addItem removeItem', '.choices:not(.is-disabled)', function() { wpf.showMoreButtonForChoices( this ); } ); // Remove focus from input when dropdown is hidden. jQuery( document ).on( 'hideDropdown', '.choices:not(.is-disabled)', function() { jQuery( this ).find( '.choices__inner input.choices__input' ).trigger( 'blur' ); } ); }, /** * Reinitialize show more choices. * * @since 1.9.0 * * @param {Object} container Container element. */ reInitShowMoreChoices( container ) { setTimeout( () => { container.find( '.choices select' ).each( function() { const $choiceInstance = jQuery( this ).data( 'choicesjs' ); wpf.showMoreButtonForChoices( $choiceInstance.containerOuter.element ); } ); }, 100 ); }, /** * Trigger fired for all field update related actions. * * @since 1.0.1 */ fieldUpdate() { const fields = wpf.getFields(); jQuery( document ).trigger( 'wpformsFieldUpdate', [ fields ] ); wpf.debug( 'fieldUpdate triggered' ); }, /** * Dynamically get the fields from the current form state. * * @since 1.0.1 * @since 1.8.9 Added `allowedFields` parameter. * * @param {Array|boolean|undefined} allowedFields Allowed fields. * @param {boolean|undefined} useCache Use cache. * @param {boolean|undefined} isAllowedRepeaterFields Is repeater fields allowed? * @param {Object|undefined} fieldsToExclude Fields to exclude. * * @return {Object} Fields. */ getFields( allowedFields = undefined, useCache = undefined, isAllowedRepeaterFields = undefined, fieldsToExclude = undefined ) { // eslint-disable-line complexity, max-lines-per-function useCache = useCache || false; let fields; if ( useCache && ! jQuery.isEmptyObject( wpf.cachedFields ) ) { // Use cache if told and cache is primed. fields = jQuery.extend( {}, wpf.cachedFields ); wpf.debug( 'getFields triggered (cached)' ); } else { // Normal processing, get fields from builder and prime cache. const formData = wpf.formObject( '#wpforms-field-options' ); fields = formData.fields; const fieldBlockList = [ 'captcha', 'content', 'divider', 'entry-preview', 'html', 'internal-information', 'pagebreak', 'layout', ]; if ( ! fields ) { return false; } for ( const key in fields ) { if ( ! fields[ key ].type || jQuery.inArray( fields[ key ].type, fieldBlockList ) > -1 ) { delete fields[ key ]; } if ( fields[ key ]?.type === 'repeater' ) { Object.values( fields[ key ][ 'columns-json' ] ?? {} ).forEach( ( column ) => { Object.values( column?.fields ?? [] ).forEach( ( field ) => { if ( ! fields[ field ] ) { return; } fields[ field ].label += ' (' + fields[ key ].label + ')'; fields[ field ].isRepeater = true; } ); } ); delete fields[ key ]; } } // Add additional fields to the fields object. wpf.addAdditionalFields( fields ); // Cache the all the fields now that they have been ordered and initially processed. wpf.cachedFields = jQuery.extend( {}, fields ); wpf.debug( 'getFields triggered' ); } if ( ! isAllowedRepeaterFields ) { for ( const key in fields ) { if ( fields[ key ]?.isRepeater ) { delete fields[ key ]; } } } if ( fieldsToExclude ) { for ( const key in fieldsToExclude ) { delete fields[ key ]; } } // If we should only return specific field types, remove the others. if ( allowedFields && allowedFields.constructor === Array ) { for ( const key in fields ) { if ( jQuery.inArray( fields[ key ].type, allowedFields ) === -1 ) { delete fields[ key ]; } } } if ( Object.keys( fields ).length === 0 ) { return false; } const orderedFields = []; for ( const fieldKey in wpf.orders.fields ) { const fieldId = wpf.orders.fields[ fieldKey ]; if ( ! fields[ fieldId ] ) { continue; } orderedFields.push( fields[ fieldId ] ); } return Object.assign( {}, orderedFields ); }, /** * Add additional fields to the fields object. * * @since 1.8.9 * * @param {Object} fields Fields object. * * @return {Object} Fields object with additional fields. */ addAdditionalFields( fields ) { for ( const key in fields ) { if ( [ 'name', 'date-time' ].includes( fields[ key ]?.type ) ) { // Get the name format and split it into an array. const nameFormat = fields[ key ].format; // Add the name fields to the fields object fields[ key ].additional = nameFormat.split( '-' ); } if ( fields[ key ]?.type === 'address' ) { // Get all keys with "_placeholder" in the name (address1_placeholder, address2_placeholder, etc.) const addressFields = Object.keys( fields[ key ] ).filter( ( fieldKey ) => fieldKey.includes( '_placeholder' ) ); // Remove "_placeholder" from the keys addressFields.forEach( ( fieldKey, index ) => { addressFields[ index ] = fieldKey.replace( '_placeholder', '' ); } ); // Add the address fields to the fields object fields[ key ].additional = addressFields; } } return fields; }, /** * Get a field settings object. * * @since 1.4.5 * * @param {number|string} id Field ID. * * @return {Object} Field settings. */ getField( id ) { const field = wpf.formObject( '#wpforms-field-option-' + id ); if ( ! Object.keys( field ).length ) { return {}; } return field.fields[ Object.keys( field.fields )[ 0 ] ]; }, /** * Toggle the loading state/indicator of a field option. * * @since 1.2.8 * * @param {string|Element} option jQuery object, or DOM element selector. * @param {boolean} unload True if you need to unload spinner, and vice versa. */ fieldOptionLoading( option, unload ) { const $option = jQuery( option ), $label = $option.find( 'label' ), spinner = ''; unload = typeof unload !== 'undefined'; if ( unload ) { $label.find( '.wpforms-loading-spinner' ).remove(); $label.find( '.wpforms-help-tooltip' ).show(); $option.find( 'input,select,textarea' ).prop( 'disabled', false ); } else { $label.append( spinner ); $label.find( '.wpforms-help-tooltip' ).hide(); $option.find( 'input,select,textarea' ).prop( 'disabled', true ); } }, /** * Get form state. * * @since 1.3.8 * * @param {Object} el Element. * * @return {string} Form state. */ getFormState( el ) { // Serialize tested the most performant string we can use for comparisons. return jQuery( el ).serialize(); }, /** * Remove items from an array. * * @since 1.0.1 * * @param {Array} array An array. * @param {any} item Array item. * * @return {number} Count of removed items. */ removeArrayItem( array, item ) { let removeCounter = 0; for ( let index = 0; index < array.length; index++ ) { if ( array[ index ] === item ) { array.splice( index, 1 ); removeCounter++; index--; } } return removeCounter; }, /** * Sanitize string. * * @since 1.0.1 * @deprecated 1.2.8 * * @param {string} str String to sanitize. * * @return {string} String after sanitization. */ sanitizeString( str ) { if ( typeof str === 'string' || str instanceof String ) { return str.trim(); } return str; }, /** * Update query string in URL. * * @since 1.0.0 * @since 1.8.7 Refactored using URL API. * * @param {string} key Query string param. * @param {string|null} value Query string value. * @param {string|null} url URL. If not defined, the current URL will be used. * * @return {string} Updated URL. */ updateQueryString( key, value, url = null ) { if ( ! url ) { url = window.location.href; } const urlObj = new URL( url ); if ( typeof value !== 'undefined' && value !== null ) { // Update value. urlObj.searchParams.set( key, value ); } else { // Remove param from the URL. urlObj.searchParams.delete( key ); } return urlObj.toString(); }, /** * Get query string in a URL. * * @since 1.0.0 * * @param {string} name Query string param. * * @return {string} Query string value. */ getQueryString( name ) { const match = new RegExp( '[?&]' + name + '=([^&]*)' ).exec( window.location.search ); return match && decodeURIComponent( match[ 1 ].replace( /\+/g, ' ' ) ); }, /** * Remove defined query parameter in the current URL. * * @see https://gist.github.com/simonw/9445b8c24ddfcbb856ec#gistcomment-3117674 * * @since 1.5.8 * * @param {string} name The name of the parameter to be removed. */ removeQueryParam( name ) { if ( wpf.getQueryString( name ) ) { const replace = '[\\?&]' + name + '=[^&]+', re = new RegExp( replace ); // eslint-disable-next-line no-unused-expressions history.replaceState && history.replaceState( null, '', location.pathname + location.search.replace( re, '' ).replace( /^&/, '?' ) + location.hash ); } }, /** * Is number? * * @since 1.2.3 * * @param {number|string} n Number to check. * * @return {boolean} Whether this is a number. */ isNumber( n ) { return ! isNaN( parseFloat( n ) ) && isFinite( n ); }, /** * Sanitize amount and convert to standard format for calculations. * * @since 1.2.6 * * @param {string} amount Price amount to sanitize. * * @return {string} Sanitized amount. */ amountSanitize( amount ) { // eslint-disable-line complexity // Convert to string, remove a currency symbol, and allow only numbers, dots, and commas. amount = String( amount ).replace( wpforms_builder.currency_symbol, '' ).replace( /[^0-9.,]/g, '' ); if ( wpforms_builder.currency_decimal === ',' ) { if ( wpforms_builder.currency_thousands === '.' && amount.indexOf( wpforms_builder.currency_thousands ) !== -1 ) { amount = amount.replace( new RegExp( '\\' + wpforms_builder.currency_thousands, 'g' ), '' ); } else if ( wpforms_builder.currency_thousands === '' && amount.indexOf( '.' ) !== -1 ) { amount = amount.replace( /\./g, '' ); } amount = amount.replace( wpforms_builder.currency_decimal, '.' ); } else if ( wpforms_builder.currency_thousands === ',' && ( amount.indexOf( wpforms_builder.currency_thousands ) !== -1 ) ) { amount = amount.replace( new RegExp( '\\' + wpforms_builder.currency_thousands, 'g' ), '' ); } return wpf.numberFormat( amount, wpforms_builder.currency_decimals, '.', '' ); }, /** * Format amount. * * @since 1.2.6 * * @param {string} amount Price amount to format. * * @return {string} Formatted amount. */ amountFormat( amount ) { amount = String( amount ); // Format the amount if ( wpforms_builder.currency_decimal === ',' && ( amount.indexOf( wpforms_builder.currency_decimal ) !== -1 ) ) { const sepFound = amount.indexOf( wpforms_builder.currency_decimal ); amount = amount.substr( 0, sepFound ) + '.' + amount.substr( sepFound + 1, amount.length - 1 ); } // Strip "," from the amount (if set as the thousand separators) if ( wpforms_builder.currency_thousands === ',' && ( amount.indexOf( wpforms_builder.currency_thousands ) !== -1 ) ) { amount = amount.replace( /,/g, '' ); } if ( wpf.empty( amount ) ) { amount = '0'; } return wpf.numberFormat( amount, wpforms_builder.currency_decimals, wpforms_builder.currency_decimal, wpforms_builder.currency_thousands ); }, /** * Format amount with currency symbol. * * @since 1.6.2 * * @param {string} amount Amount to format. * * @return {string} Formatted amount (for instance $ 128.00). */ amountFormatCurrency( amount ) { const sanitized = wpf.amountSanitize( amount ), formatted = wpf.amountFormat( sanitized ); let result; if ( wpforms_builder.currency_symbol_pos === 'right' ) { result = formatted + ' ' + wpforms_builder.currency_symbol; } else { result = wpforms_builder.currency_symbol + formatted; } return result; }, /** * Format number. * * @see http://locutus.io/php/number_format/ * * @since 1.2.6 * * @param {string} number Number to format. * @param {number} decimals How many decimals should be there. * @param {string} decimalSep What is the decimal separator. * @param {string} thousandsSep What is the thousand separator. * * @return {string} Formatted number. */ numberFormat( number, decimals, decimalSep, thousandsSep ) { // eslint-disable-line complexity number = ( number + '' ).replace( /[^0-9+\-Ee.]/g, '' ); const n = ! isFinite( +number ) ? 0 : +number; const precision = ! isFinite( +decimals ) ? 0 : Math.abs( decimals ); const sep = ( typeof thousandsSep === 'undefined' ) ? ',' : thousandsSep; const dec = ( typeof decimalSep === 'undefined' ) ? '.' : decimalSep; let s = ''; const toFixedFix = function( fixedN, fixedPrecision ) { const k = Math.pow( 10, fixedPrecision ); return '' + ( Math.round( fixedN * k ) / k ).toFixed( fixedPrecision ); }; // @todo: for IE parseFloat(0.55).toFixed(0) = 0; s = ( precision ? toFixedFix( n, precision ) : '' + Math.round( n ) ).split( '.' ); if ( s[ 0 ].length > 3 ) { s[ 0 ] = s[ 0 ].replace( /\B(?=(?:\d{3})+(?!\d))/g, sep ); } if ( ( s[ 1 ] || '' ).length < precision ) { s[ 1 ] = s[ 1 ] || ''; s[ 1 ] += new Array( precision - s[ 1 ].length + 1 ).join( '0' ); } return s.join( dec ); }, /** * Empty check similar to PHP. * {@link http://locutus.io/php/empty}. * * @since 1.2.6 * * @param {any} mixedVar A variable to check. * * @return {boolean} True if the variable is empty. */ empty( mixedVar ) { let undef; let key; let i; let len; const emptyValues = [ undef, null, false, 0, '', '0' ]; for ( i = 0, len = emptyValues.length; i < len; i++ ) { if ( mixedVar === emptyValues[ i ] ) { return true; } } if ( typeof mixedVar === 'object' ) { for ( key in mixedVar ) { if ( mixedVar.hasOwnProperty( key ) ) { return false; } } return true; } return false; }, /** * Debug output helper. * * @since 1.3.8 * * @param {string|number|boolean|Array|Object} msg Debug message (any data). */ debug( ...msg ) { if ( ! wpf.isDebug() ) { return; } // eslint-disable-next-line no-console console.log( '%cWPForms Debug: ', 'color: #cd6622;', ...msg ); }, /** * Is debug mode. * * @since 1.3.8 * * @return {boolean} True if debug mode is enabled. */ isDebug() { return ( ( window.location.hash && '#wpformsdebug' === window.location.hash ) || wpforms_builder.debug ); }, /** * Focus the input/textarea and put the caret at the end of the text. * * @since 1.4.1 * * @param {jQuery} el Element. */ focusCaretToEnd( el ) { el.trigger( 'focus' ); const $thisVal = el.val(); el.val( '' ).val( $thisVal ); }, /** * Creates a object from form elements. * * @since 1.4.5 * * @param {jQuery|string} el Element. * * @return {Object} Object. */ formObject( el ) { // eslint-disable-line max-lines-per-function, complexity const form = jQuery( el ), fields = form.find( '[name]' ), json = {}, arrayNames = {}; /* eslint-disable max-depth */ for ( let v = 0; v < fields.length; v++ ) { const field = jQuery( fields[ v ] ), name = field.prop( 'name' ).replace( /\]/gi, '' ).split( '[' ); let value = field.val(), lineConf = {}; if ( ( field.is( ':radio' ) || field.is( ':checkbox' ) ) && ! field.is( ':checked' ) ) { continue; } for ( let i = name.length - 1; i >= 0; i-- ) { let nestName = name[ i ]; if ( typeof nestName === 'undefined' ) { nestName = ''; } if ( nestName.length === 0 ) { lineConf = []; if ( typeof arrayNames[ name[ i - 1 ] ] === 'undefined' ) { arrayNames[ name[ i - 1 ] ] = 0; } else { arrayNames[ name[ i - 1 ] ] += 1; } nestName = arrayNames[ name[ i - 1 ] ]; } if ( i === name.length - 1 ) { if ( value ) { if ( value === 'true' ) { value = true; } else if ( value === 'false' ) { value = false; } else if ( ! isNaN( parseFloat( value ) ) && parseFloat( value ).toString() === value ) { value = parseFloat( value ); } else if ( typeof value === 'string' && ( value.substr( 0, 1 ) === '{' || value.substr( 0, 1 ) === '[' ) ) { try { value = JSON.parse( value ); } catch ( e ) { } } else if ( typeof value === 'object' && value.length && field.is( 'select' ) ) { const newValue = {}; for ( let j = 0; j < value.length; j++ ) { newValue[ 'n' + j ] = value[ j ]; } value = newValue; } } lineConf[ nestName ] = value; } else { const newObj = lineConf; lineConf = {}; lineConf[ nestName ] = newObj; } } jQuery.extend( true, json, lineConf ); } /* eslint-enable max-depth */ return json; }, /** * Initialize WPForms admin area tooltips. * * @since 1.4.8 */ initTooltips() { if ( typeof jQuery.fn.tooltipster === 'undefined' ) { return; } const isRTL = jQuery( 'body' ).hasClass( 'rtl' ); const position = isRTL ? 'left' : 'right'; jQuery( '.wpforms-help-tooltip' ).each( function() { const $this = jQuery( this ); $this.tooltipster( { contentAsHTML: true, position: $this.data( 'tooltip-position' ) || position, maxWidth: 300, multiple: true, interactive: true, debug: false, IEmin: 11, zIndex: 99999999, } ); } ); }, /** * Restore WPForms admin area tooltip's title. * * @since 1.6.5 * * @param {jQuery|undefined} $scope Searching scope. */ restoreTooltips( $scope ) { $scope = typeof $scope !== 'undefined' && $scope && $scope.length > 0 ? $scope.find( '.wpforms-help-tooltip' ) : jQuery( '.wpforms-help-tooltip' ); $scope.each( function() { const $this = jQuery( this ); if ( jQuery.tooltipster.instances( this ).length !== 0 ) { // Restoring title. $this.attr( 'title', $this.tooltipster( 'content' ) ); } } ); }, /** * Validate a URL. * source: `https://github.com/segmentio/is-url/blob/master/index.js` * * @since 1.5.8 * * @param {string} url URL for checking. * * @return {boolean} True if `url` is a valid URL. */ isURL( url ) { // noinspection RegExpUnnecessaryNonCapturingGroup /** * RegExps. * A URL must match #1 and then at least one of #2/#3. * Use two levels of REs to avoid REDOS. */ const protocolAndDomainRE = /^(?:http(?:s?):)?\/\/(\S+)/; /* eslint-disable no-useless-escape */ // noinspection RegExpRedundantEscape const localhostDomainRE = /^localhost[\:?\d]*(?:[^\:?\d]\S*)?$/; // noinspection RegExpRedundantEscape const nonLocalhostDomainRE = /^[^\s\.]+\.\S{2,}$/; /* eslint-enable no-useless-escape */ if ( typeof url !== 'string' ) { return false; } const match = url.match( protocolAndDomainRE ); if ( ! match ) { return false; } const everythingAfterProtocol = match[ 1 ]; if ( ! everythingAfterProtocol ) { return false; } return localhostDomainRE.test( everythingAfterProtocol ) || nonLocalhostDomainRE.test( everythingAfterProtocol ); }, /** * Sanitize HTML. * Uses: `https://github.com/cure53/DOMPurify` * * @since 1.5.9 * @since 1.7.8 Introduced optional allowed parameter. * * @param {string|undefined} string HTML to sanitize. * @param {Array|undefined} allowed Array of allowed HTML tags. * * @return {string} Sanitized HTML. */ sanitizeHTML( string = undefined, allowed = undefined ) { const purify = window.DOMPurify; if ( typeof purify === 'undefined' || typeof string === 'undefined' ) { return string; } if ( typeof string !== 'string' ) { string = string.toString(); } const purifyOptions = { ADD_ATTR: [ 'target' ], }; if ( typeof allowed !== 'undefined' ) { purifyOptions.ALLOWED_TAGS = allowed; } return purify.sanitize( string, purifyOptions ).trim(); }, /** * Encode HTML entities. * Uses: `https://stackoverflow.com/a/18750001/9745718` * * @since 1.6.3 * * @param {string} string HTML to sanitize. * * @return {string} String with encoded HTML entities. */ encodeHTMLEntities( string ) { if ( typeof string !== 'string' ) { string = string.toString(); } return string.replace( /[\u00A0-\u9999<>&]/gim, function( i ) { return '&#' + i.charCodeAt( 0 ) + ';'; } ); }, /** * Decode allowed HTML entities. * * @since 1.9.0 * * @param {string} string String to decode. * * @return {string} String with decoded allowed HTML entities. */ decodeAllowedHTMLEntities( string ) { if ( typeof string !== 'string' ) { string = string.toString(); } /** * Filter: `wpforms.allowedHTMLEntities`. * Allow developers to add or remove allowed HTML entities. * * @since 1.9.0 * * @param {Object} allowedEntities List of allowed HTML entities. */ const allowedEntities = wp.hooks.applyFilters( 'wpforms.allowedHTMLEntities', { '&': '&', ' ': ' ', } ); for ( const entity in allowedEntities ) { string = string.replaceAll( entity, allowedEntities[ entity ] ); } return string; }, /** * Radio Group for Checkboxes. * * @since 1.6.6 */ initRadioGroupForCheckboxes() { const $ = jQuery; $( document ).on( 'change', 'input[type="checkbox"].wpforms-radio-group', function() { const $input = $( this ); if ( ! $input.prop( 'checked' ) ) { return; } const groupName = $input.data( 'radio-group' ), $group = $( '.wpforms-radio-group-' + groupName ), inputId = $input.attr( 'id' ); let $item; $group.each( function() { $item = $( this ); if ( $item.attr( 'id' ) !== inputId ) { $item.prop( 'checked', false ); } } ); } ); }, /** * Pluck a certain field out of each object in a list. * * JS implementation of the `wp_list_pluck()`. * * @since 1.6.8 * * @param {Array} arr Array of objects. * @param {string} column Column. * * @return {Array} Array with extracted column values. */ listPluck( arr, column ) { return arr.map( function( x ) { if ( typeof x !== 'undefined' ) { return x[ column ]; } return x; } ); }, /** * Wrapper to trigger a native or custom event and return the event object. * * @since 1.7.5 * @since 1.7.6 Deprecated. * * @deprecated Use `WPFormsUtils.triggerEvent` instead. * * @param {jQuery} $element Element to trigger event on. * @param {string} eventName Event name to trigger (custom or native). * * @return {Event} Event object. */ triggerEvent( $element, eventName ) { // eslint-disable-next-line no-console console.warn( 'WARNING! Function "wpf.triggerEvent( $element, eventName )" has been deprecated, please use the new "WPFormsUtils.triggerEvent( $element, eventName, args )" function instead!' ); return WPFormsUtils.triggerEvent( $element, eventName ); }, /** * Automatically add paragraphs to the text. * * JS implementation of the `wpautop()`. * * @see https://github.com/andymantell/node-wpautop/blob/master/lib/wpautop.js * * @since 1.7.7 * * @param {string} pee Text to be replaced. * @param {boolean} br Whether remaining \n characters should be replaced with
      . * * @return {string} Text with replaced paragraphs. */ wpautop( pee, br = true ) { // eslint-disable-line max-lines-per-function, complexity const preTags = new Map(); const _autopNewlinePreservationHelper = function( matches ) { return matches[ 0 ].replace( '\n', '' ); }; if ( ( typeof pee ) !== 'string' && ! ( pee instanceof String ) ) { return pee; } if ( pee.trim() === '' ) { return ''; } pee = pee + '\n'; // Just to make things a little easier, pad the end. if ( pee.indexOf( ' -1 ) { const peeParts = pee.split( '' ), lastPee = peeParts.pop(); pee = ''; peeParts.forEach( function( peePart, index ) { const start = peePart.indexOf( ''; preTags[ name ] = peePart.substring( start ) + ''; pee += peePart.substring( 0, start ) + name; } ); pee += lastPee; } pee = pee.replace( /
      \s*
      /, '\n\n' ); // Space things out a little. const allBlocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)'; pee = pee.replace( new RegExp( '(<' + allBlocks + '[^>]*>)', 'gmi' ), '\n$1' ); pee = pee.replace( new RegExp( '()', 'gmi' ), '$1\n\n' ); pee = pee.replace( /\r\n|\r/, '\n' ); // cross-platform newlines. if ( pee.indexOf( '\n' ) === 0 ) { pee = pee.substring( 1 ); } if ( pee.indexOf( ' -1 ) { // no P/BR around option. pee = pee.replace( /(?=(\s*))\2\s*/gmi, '' ); } if ( pee.indexOf( '' ) > -1 ) { // no P/BR around param and embed. pee = pee.replace( /(]*>)\s*/gmi, '$1' ); pee = pee.replace( /(?=(\s*))\2<\/object>/gmi, '' ); pee = pee.replace( /(?=(\s*))\2(<\/?(?:param|embed)[^>]*>)((?=(\s*))\2)/gmi, '$1' ); } /* eslint-disable no-useless-escape */ if ( pee.indexOf( ' -1 || pee.indexOf( ' -1 ) { // no P/BR around source and track. pee = pee.replace( /([<\[](?:audio|video)[^>\]]*[>\]])\s*/gmi, '$1' ); pee = pee.replace( /(?=(\s*))\2([<\[]\/(?:audio|video)[>\]])/gmi, '$1' ); pee = pee.replace( /(?=(\s*))\2(<(?:source|track)[^>]*>)(?=(\s*))\2/gmi, '$1' ); } pee = pee.replace( /\n\n+/gmi, '\n\n' ); // take care of duplicates. // make paragraphs, including one at the end. const pees = pee.split( /\n\s*\n/ ); pee = ''; pees.forEach( function( tinkle ) { pee += '

      ' + tinkle.replace( /^(?:\s+|\s+)$/g, '' ) + '

      \n'; } ); pee = pee.replace( /

      \s*<\/p>/gmi, '' ); // Under certain strange conditions, it could create a P of entire whitespace. pee = pee.replace( /

      ([^<]+)<\/(div|address|form)>/gmi, '

      $1

      ' ); pee = pee.replace( new RegExp( '

      \s*(]*>)\s*

      ', 'gmi' ), '$1', pee ); // don't pee all over a tag. pee = pee.replace( /

      (/gmi, '$1' ); // problem with nested lists. pee = pee.replace( /

      ]*)>/gmi, '

      ' ); pee = pee.replace( /<\/blockquote><\/p>/gmi, '

      ' ); pee = pee.replace( new RegExp( '

      \s*(]*>)', 'gmi' ), '$1' ); pee = pee.replace( new RegExp( '(]*>)\s*

      ', 'gmi' ), '$1' ); if ( br ) { pee = pee.replace( /<(script|style)(?:.|\n)*?<\/\\1>/gmi, _autopNewlinePreservationHelper ); // /s modifier from php PCRE regexp replaced with (?:.|\n). pee = pee.replace( /(
      )?((?=(\s*))\2)\n/gmi, '
      \n' ); // optionally make line breaks. pee = pee.replace( '', '\n' ); } pee = pee.replace( new RegExp( '(]*>)\s*
      ', 'gmi' ), '$1' ); pee = pee.replace( /
      (\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)/gmi, '$1' ); pee = pee.replace( /\n<\/p>$/gmi, '

      ' ); /* eslint-enable */ if ( Object.keys( preTags ).length ) { pee = pee.replace( new RegExp( Object.keys( preTags ).join( '|' ), 'gi' ), function( matched ) { return preTags[ matched ]; } ); } return pee; }, /** * Init Media Library. * * @since 1.8.6 * * @param {Object} args List of arguments. * * @return {wp.media.view.MediaFrame} A media workflow. */ initMediaLibrary( args ) { const mediaFrame = wp.media.frames.wpforms_media_frame = wp.media( { className: 'media-frame wpforms-media-frame', multiple: false, title: args.title, library: { type: args.extensions }, button: { text: args.buttonText, }, } ); mediaFrame.on( 'uploader:ready', function() { const accept = args.extensions.join( ',' ); jQuery( '.wpforms-media-frame .moxie-shim-html5 input[type="file"]' ) .attr( 'accept', accept ); } ).on( 'library:selection:add', function() { const attachment = mediaFrame.state().get( 'selection' ).first().toJSON(); if ( ! args.extensions.includes( attachment.file.type ) ) { // eslint-disable-next-line no-alert alert( args.extensionsError ); mediaFrame.state().get( 'selection' ).reset(); } } ); return mediaFrame; }, /** * Determine whether an element is visible in the viewport. * * @since 1.8.8 * * @param {jQuery} $element DOM element. * * @return {boolean} true if an element is visible in the viewport. */ isInViewport( $element ) { const rect = $element[ 0 ].getBoundingClientRect(); return ( rect.top >= 0 && rect.left >= 0 && rect.bottom <= ( window.innerHeight || document.documentElement.clientHeight ) && rect.right <= ( window.innerWidth || document.documentElement.clientWidth ) ); }, }; wpf.init(); assets/js/admin/share/admin-utils.min.js000064400000033356147400353540014241 0ustar00const wpf={cachedFields:{},savedState:!1,initialSave:!0,orders:{fields:[],choices:{}},init(){wpf.bindUIActions(),wpf.initRadioGroupForCheckboxes(),jQuery(wpf.ready)},ready(){wpf.savedState=wpf.getFormState("#wpforms-builder-form"),wpf.setFieldOrders(),wpf.setChoicesOrders()},bindUIActions(){jQuery(document).on("wpformsFieldAdd",wpf.setFieldOrders),jQuery(document).on("wpformsFieldDelete",wpf.setFieldOrders),jQuery(document).on("wpformsFieldMove",wpf.setFieldOrders),jQuery(document).on("wpformsFieldAdd",wpf.setChoicesOrders),jQuery(document).on("wpformsFieldChoiceAdd",wpf.setChoicesOrders),jQuery(document).on("wpformsFieldChoiceDelete",wpf.setChoicesOrders),jQuery(document).on("wpformsFieldChoiceMove",wpf.setChoicesOrders),jQuery(document).on("wpformsFieldAdd",wpf.fieldUpdate),jQuery(document).on("wpformsFieldDelete",wpf.fieldUpdate),jQuery(document).on("wpformsFieldMove",wpf.fieldUpdate),jQuery(document).on("focusout",".wpforms-field-option-row-label input",wpf.fieldUpdate),jQuery(document).on("wpformsFieldChoiceAdd",wpf.fieldUpdate),jQuery(document).on("wpformsFieldChoiceDelete",wpf.fieldUpdate),jQuery(document).on("wpformsFieldChoiceMove",wpf.fieldUpdate),jQuery(document).on("wpformsFieldDynamicChoiceToggle",wpf.fieldUpdate),jQuery(document).on("focusout",".wpforms-field-option-row-choices input.label",wpf.fieldUpdate)},setFieldOrders(){wpf.orders.fields=[],jQuery(".wpforms-field-option").each(function(){wpf.orders.fields.push(jQuery(this).data("field-id"))})},setChoicesOrders(){wpf.orders.choices={},jQuery(".choices-list").each(function(){const e=jQuery(this).data("field-id");wpf.orders.choices["field_"+e]=[],jQuery(this).find("li").each(function(){wpf.orders.choices["field_"+e].push(jQuery(this).data("key"))})})},getChoicesOrder(e){const r=[];return jQuery("#wpforms-field-option-"+e).find(".choices-list li").each(function(){r.push(jQuery(this).data("key"))}),r},initMultipleSelectWithSearch(e){const r=jQuery(e.passedElement.element),t=jQuery(e.input.element);r.prop("multiple")&&(t.data("placeholder",t.attr("placeholder")),t.data("style",t.attr("style")),e.getValue(!0).length&&t.removeAttr("placeholder"),r.on("change",function(){e.getValue(!0).length?t.removeAttr("placeholder"):t.attr("placeholder",t.data("placeholder")).attr("style",t.data("style"))}))},showMoreButtonForChoices(e){var r,t;"select-one"!==jQuery(e).data("type")&&(r=jQuery(e).find(".choices__list--multiple .choices__item").first(),t=jQuery(e).find(".choices__list--multiple .choices__item").last(),jQuery(e).removeClass("choices__show-more"),0{e.find(".choices select").each(function(){var e=jQuery(this).data("choicesjs");wpf.showMoreButtonForChoices(e.containerOuter.element)})},100)},fieldUpdate(){var e=wpf.getFields();jQuery(document).trigger("wpformsFieldUpdate",[e]),wpf.debug("fieldUpdate triggered")},getFields(e=void 0,r=void 0,t=void 0,i=void 0){let o;if((r=r||!1)&&!jQuery.isEmptyObject(wpf.cachedFields))o=jQuery.extend({},wpf.cachedFields),wpf.debug("getFields triggered (cached)");else{var r=wpf.formObject("#wpforms-field-options"),n=["captcha","content","divider","entry-preview","html","internal-information","pagebreak","layout"];if(!(o=r.fields))return!1;for(const d in o)(!o[d].type||-1{Object.values(e?.fields??[]).forEach(e=>{o[e]&&(o[e].label+=" ("+o[d].label+")",o[e].isRepeater=!0)})}),delete o[d]);wpf.addAdditionalFields(o),wpf.cachedFields=jQuery.extend({},o),wpf.debug("getFields triggered")}if(!t)for(const a in o)o[a]?.isRepeater&&delete o[a];if(i)for(const p in i)delete o[p];if(e&&e.constructor===Array)for(const c in o)-1===jQuery.inArray(o[c].type,e)&&delete o[c];if(0===Object.keys(o).length)return!1;var s=[];for(const u in wpf.orders.fields){var l=wpf.orders.fields[u];o[l]&&s.push(o[l])}return Object.assign({},s)},addAdditionalFields(e){for(const t in e){var r;if(["name","date-time"].includes(e[t]?.type)&&(r=e[t].format,e[t].additional=r.split("-")),"address"===e[t]?.type){const i=Object.keys(e[t]).filter(e=>e.includes("_placeholder"));i.forEach((e,r)=>{i[r]=e.replace("_placeholder","")}),e[t].additional=i}}return e},getField(e){e=wpf.formObject("#wpforms-field-option-"+e);return Object.keys(e).length?e.fields[Object.keys(e.fields)[0]]:{}},fieldOptionLoading(e,r){var e=jQuery(e),t=e.find("label");(r=void 0!==r)?(t.find(".wpforms-loading-spinner").remove(),t.find(".wpforms-help-tooltip").show(),e.find("input,select,textarea").prop("disabled",!1)):(t.append(''),t.find(".wpforms-help-tooltip").hide(),e.find("input,select,textarea").prop("disabled",!0))},getFormState(e){return jQuery(e).serialize()},removeArrayItem(r,t){let i=0;for(let e=0;e&]/gim,function(e){return"&#"+e.charCodeAt(0)+";"})},decodeAllowedHTMLEntities(e){"string"!=typeof e&&(e=e.toString());var r=wp.hooks.applyFilters("wpforms.allowedHTMLEntities",{"&":"&"," ":" "});for(const t in r)e=e.replaceAll(t,r[t]);return e},initRadioGroupForCheckboxes(){const n=jQuery;n(document).on("change",'input[type="checkbox"].wpforms-radio-group',function(){var r=n(this);if(r.prop("checked")){const t=r.data("radio-group"),i=n(".wpforms-radio-group-"+t),o=r.attr("id");let e;i.each(function(){(e=n(this)).attr("id")!==o&&e.prop("checked",!1)})}})},listPluck(e,r){return e.map(function(e){return void 0!==e?e[r]:e})},triggerEvent(e,r){return console.warn('WARNING! Function "wpf.triggerEvent( $element, eventName )" has been deprecated, please use the new "WPFormsUtils.triggerEvent( $element, eventName, args )" function instead!'),WPFormsUtils.triggerEvent(e,r)},wpautop(i,e=!0){const o=new Map;if("string"==typeof i||i instanceof String){if(""===i.trim())return"";-1<(i+="\n").indexOf("")).pop(),i="",r.forEach(function(e,r){var t=e.indexOf("",o[r]=e.substring(t)+"",i+=e.substring(0,t)+r)}),i+=t);var r="(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)",t=(i=(i=-1<(i=-1<(i=-1<(i=0===(i=(i=(i=(i=i.replace(/
      \s*
      /,"\n\n")).replace(new RegExp("(<"+r+"[^>]*>)","gmi"),"\n$1")).replace(new RegExp("()","gmi"),"$1\n\n")).replace(/\r\n|\r/,"\n")).indexOf("\n")?i.substring(1):i).indexOf("\s*/gim,""):i).indexOf("")?(i=(i=i.replace(/(]*>)\s*/gim,"$1")).replace(/(?=(\s*))\2<\/object>/gim,"")).replace(/(?=(\s*))\2(<\/?(?:param|embed)[^>]*>)((?=(\s*))\2)/gim,"$1"):i).indexOf("\]]*[>\]])\s*/gim,"$1")).replace(/(?=(\s*))\2([<\[]\/(?:audio|video)[>\]])/gim,"$1")).replace(/(?=(\s*))\2(<(?:source|track)[^>]*>)(?=(\s*))\2/gim,"$1"):i).replace(/\n\n+/gim,"\n\n")).split(/\n\s*\n/);i="",t.forEach(function(e){i+="

      "+e.replace(/^(?:\s+|\s+)$/g,"")+"

      \n"}),i=(i=(i=(i=(i=(i=(i=(i=i.replace(/

      \s*<\/p>/gim,"")).replace(/

      ([^<]+)<\/(div|address|form)>/gim,"

      $1

      ")).replace(new RegExp("

      s*(]*>)s*

      ","gmi"),"$1",i)).replace(/

      (/gim,"$1")).replace(/

      ]*)>/gim,"

      ")).replace(/<\/blockquote><\/p>/gim,"

      ")).replace(new RegExp("

      s*(]*>)","gmi"),"$1")).replace(new RegExp("(]*>)s*

      ","gmi"),"$1"),i=(i=(i=(i=e?(i=(i=i.replace(/<(script|style)(?:.|\n)*?<\/\\1>/gim,function(e){return e[0].replace("\n","")})).replace(/(
      )?((?=(\s*))\2)\n/gim,"
      \n")).replace("","\n"):i).replace(new RegExp("(]*>)s*
      ","gmi"),"$1")).replace(/
      (\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)/gim,"$1")).replace(/\n<\/p>$/gim,"

      "),Object.keys(o).length&&(i=i.replace(new RegExp(Object.keys(o).join("|"),"gi"),function(e){return o[e]}))}return i},initMediaLibrary(r){const t=wp.media.frames.wpforms_media_frame=wp.media({className:"media-frame wpforms-media-frame",multiple:!1,title:r.title,library:{type:r.extensions},button:{text:r.buttonText}});return t.on("uploader:ready",function(){var e=r.extensions.join(",");jQuery('.wpforms-media-frame .moxie-shim-html5 input[type="file"]').attr("accept",e)}).on("library:selection:add",function(){var e=t.state().get("selection").first().toJSON();r.extensions.includes(e.file.type)||(alert(r.extensionsError),t.state().get("selection").reset())}),t},isInViewport(e){e=e[0].getBoundingClientRect();return 0<=e.top&&0<=e.left&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}};wpf.init();assets/js/admin/share/xor.min.js000064400000001675147400353540012622 0ustar00!function(t,r){var e="WPFormsXOR";"function"==typeof define&&define.amd?define([],r(e)):"object"==typeof exports?module.exports=r(e):t[e]=r(e)}(this,function(r){"use strict";class n extends Error{constructor(t){super(t),this.name=r}}return class e{static defaults={key:42};constructor(t){this.args=Object.assign({},e.defaults,t)}encrypt(t){if("object"!=typeof t)throw new n("Invalid input. Expected an object for encryption.");let r="";try{var e=JSON.stringify(t);for(let t=0;t'),c.$tableContainer=c.$table.parent()),c.$page.addClass("wpforms-list-table-ext-page")},prepareTableFootColumns(){c.$table.find("thead tr .manage-column").each(function(){var e=i(this).attr("id");c.$table.find("tfoot tr .column-"+e).attr("id",e+"-foot")}),c.$table.find(".manage-column.column-cog").addClass("wpforms-table-cell-sticky")},initTableSortableColumns(){let s,a;c.$table.find("thead tr, tfoot tr").each(function(){i(this).sortable({items:"> th:not(:first-child):not(.wpforms-table-cell-sticky)",connectWith:"",delay:100,opacity:.75,cursor:"move",cancel:".wpforms-table-column-not-draggable",placeholder:"wpforms-table-column-drag-placeholder",appendTo:c.$page,zindex:1e4,tolerance:"intersect",distance:1,helper(e,t){var t=i(t),o=t.clone(),t=t.outerWidth();return o.css("width",t+"px")},start(e,t){t.helper.addClass("wpforms-table-column-drag-helper"),t.item.addClass("wpforms-table-column-dragged-out").css("display",""),c.$wpcontent.addClass("wpforms-no-scroll"),a=t.item.attr("id").replace("-foot","")},stop(e,t){t.item.removeClass("wpforms-table-column-drag-helper").removeClass("wpforms-table-column-dragged-out"),c.$table.find("thead tr > *, tfoot tr > *").removeClass("wpforms-table-column-drag-placeholder-prev"),c.$wpcontent.removeClass("wpforms-no-scroll");var o=t.item.prev().attr("id").replace("-foot",""),l=c.$table.find("tbody tr:not(.wpforms-hidden)"),n="cb"!==o?".column-"+o:".check-column";s=l.find("td.column-"+a).detach();for(let e=0;e *, tfoot tr > *").removeClass("wpforms-table-column-drag-placeholder-prev"),t.placeholder.prev().addClass("wpforms-table-column-drag-placeholder-prev")},update(){d.saveColumnsOrder()}})})},initTableScrollColumns(){c.$page.is("#wpforms-entries-list")&&(c.$tableScroll=c.$tableContainer,c.$tableScroll.addClass("wpforms-table-scroll"),c.$tableScroll.toggleClass("wpforms-scrollbar",d.isCustomScrollbarNeeded()),c.$table.find(".check-column, .column-indicators").addClass("wpforms-table-cell-sticky").addClass("left"),c.$table.find(".column-actions").addClass("wpforms-table-cell-sticky").addClass("right"))},tableScroll(){var e,t,o;c.$tableScroll?.length&&(e=c.$tableScroll.outerWidth(),t=Math.abs(c.$tableScroll.get(0).scrollLeft),o=c.$tableScroll.get(0).scrollWidth,c.$tableScroll.find(".wpforms-table-cell-sticky.left").toggleClass("shadow",1{var t=c.$menu.find(".wpforms-multiselect-checkbox-optgroup-"+e).nextUntil(".wpforms-multiselect-checkbox-optgroup").filter("label"),o=t.filter(function(){return i(this).is(":hidden")});c.$menu.find(".wpforms-multiselect-checkbox-no-results-"+e).toggleClass("wpforms-hidden",t.length!==o.length)})},closeMenu(){c.$cog.hasClass("active")&&(c.$cog.removeClass("active"),c.$menu.find(".wpforms-multiselect-checkbox-list").removeClass("open"),c.$searchInput.val(""),c.$searchInput[0]?.dispatchEvent(new Event("input")))},getColumnsOrder(){var e=c.$table.find("thead tr");const t=[];return e.find("th").each(function(){t.push(i(this).attr("id"))}),t},getMenuColumnsOrder(){let t=d.getColumnsOrder();const o=[];var l=[];c.$menu.find("input:checked").each(function(){o.push(i(this).val())}),t=t.map(function(e){return d.convertColumnId(e)});for(let e=0;e'+wpforms_admin.save_changes+""),d.updateMenuColumnsOrder()}),c.$searchInput=i("#wpforms-list-table-ext-edit-columns-select-container .wpforms-multiselect-checkbox-search"),c.$menu.removeClass("wpforms-hidden"))},appendNoResultsText(e){e.find(".wpforms-multiselect-checkbox-optgroup").each(function(e){var t=0===e?"fields":"meta",e=0===e?wpforms_admin.column_selector_no_fields:wpforms_admin.column_selector_no_meta;i(this).addClass("wpforms-multiselect-checkbox-optgroup-"+t).after(`${e}`)})},initCogIcon(){var e,t;return c.$cog||((e=c.$table.find("thead th:not(.hidden):last")).length?(t=o.cogIcon.replace("#",""),t=i(``),e.append(t),t):i())},onClickCog(e){e.preventDefault()},onSaveChanges(e){e.preventDefault();e={nonce:wpforms_admin.nonce,action:c.$menu.find('input[name="action"]').val(),form_id:c.$menu.find('input[name="form_id"]').val(),columns:d.getMenuColumnsOrder()};d.closeMenu(),i.post(wpforms_admin.ajax_url,e).done(function(e){e.success?l.location.reload():d.displayErrorModal(e.data||wpforms_admin.unknown_error)}).fail(function(){d.displayErrorModal(wpforms_admin.server_error)})},onMenuToggle(e){i(o.cogIcon).toggleClass("active",e.detail.isOpen),c.$menu.find(".wpforms-multiselect-checkbox-no-results").addClass("wpforms-hidden"),d.positionMultiselectColumnsMenu()},positionMultiselectColumnsMenu(){c.$cog.length&&c.$menu.css({top:c.$cog.offset().top-i("#wpbody-content").offset().top+c.$cog.outerHeight()+6})},isCustomScrollbarNeeded(){var e=navigator.userAgent;return(e.includes("Windows")||e.includes("Linux"))&&(e.includes("Chrome")||e.includes("Firefox"))}};return d}(document,window,jQuery);WPFormsAdminListTableExt.init();assets/js/admin/admin-editor.js000064400000003040147400353540012466 0ustar00;( function( $ ) { $( function() { // Close modal. var wpformsModalClose = function() { if ( $( '#wpforms-modal-select-form' ).length ) { $( '#wpforms-modal-select-form' ).get( 0 ).selectedIndex = 0; $( '#wpforms-modal-checkbox-title, #wpforms-modal-checkbox-description' ).prop( 'checked', false ); } $( '#wpforms-modal-backdrop, #wpforms-modal-wrap' ).css( 'display', 'none' ); $( document.body ).removeClass( 'modal-open' ); }; // Open modal when media button is clicked. $( document ).on( 'click', '.wpforms-insert-form-button', function( event ) { event.preventDefault(); $( '#wpforms-modal-backdrop, #wpforms-modal-wrap' ).css( 'display', 'block' ); $( document.body ).addClass( 'modal-open' ); } ); // Close modal on close or cancel links. $( document ).on( 'click', '#wpforms-modal-close, #wpforms-modal-cancel a', function( event ) { event.preventDefault(); wpformsModalClose(); } ); // Insert shortcode into TinyMCE. $( document ).on( 'click', '#wpforms-modal-submit', function( event ) { event.preventDefault(); var shortcode; shortcode = '[wpforms id="' + $( '#wpforms-modal-select-form' ).val() + '"'; if ( $( '#wpforms-modal-checkbox-title' ).is( ':checked' ) ) { shortcode = shortcode + ' title="true"'; } if ( $( '#wpforms-modal-checkbox-description' ).is( ':checked' ) ) { shortcode = shortcode + ' description="true"'; } shortcode = shortcode + ']'; wp.media.editor.insert( shortcode ); wpformsModalClose(); } ); } ); }( jQuery ) ); assets/js/admin/admin.js000064400000227720147400353540011217 0ustar00/* global wpforms_admin, jconfirm, wpCookies, Choices, List, wpf */ /** * @param wpforms_admin.recreating * @param wpforms_admin.testing */ ( function( $ ) { 'use strict'; // Global settings access. var s; // Admin object. var WPFormsAdmin = { // Settings. settings: { iconActivate: '', iconDeactivate: '', iconInstall: '', iconSpinner: '', mediaFrame: false, }, /** * Start the engine. * * @since 1.3.9 */ init: function() { // Settings shortcut. s = this.settings; // Document ready. $( WPFormsAdmin.ready ); // Entries Single (Details). WPFormsAdmin.initEntriesSingle(); // Entries List. WPFormsAdmin.initEntriesList(); // Welcome activation. WPFormsAdmin.initWelcome(); // Addons List. $( document ).on( 'wpformsReady', WPFormsAdmin.initAddons ); // Settings. WPFormsAdmin.initSettings(); // Tools. WPFormsAdmin.initTools(); // Upgrades (Tools view). WPFormsAdmin.initUpgrades(); // Tab menu. WPFormsAdmin.initScrollableMenu(); }, /** * Document ready. * * @since 1.3.9 */ ready: function() { // Add `_wp_http_referer` to the data of every AJAX request. $.ajaxSetup( { data: { // eslint-disable-next-line camelcase _wp_http_referer: wpf.updateQueryString( '_wp_http_referer', null ), }, } ); // Scroll to integration. WPFormsAdmin.scrollToIntegration(); // To prevent jumping (since WP core moves the notices with js), // they are hidden initially with CSS, then revealed below with JS, // which runs after they have been moved. $( '.notice' ).show(); // If there are screen options we have to move them. $( '#screen-meta-links, #screen-meta' ).prependTo( '#wpforms-header-temp' ).show(); // Init fancy selects via choices.js. WPFormsAdmin.initChoicesJS(); // Init checkbox multi selects columns. WPFormsAdmin.initCheckboxMultiselectColumns(); // Init color pickers via minicolors.js. $( '.wpforms-color-picker' ).each( function() { const $this = $( this ); $this.minicolors( { defaultValue: $this.data( 'fallback-color' ) || '', } ); } ); // Init fancy File Uploads. $( '.wpforms-file-upload' ).each( function() { var $input = $( this ).find( 'input[type=file]' ), $label = $( this ).find( 'label' ), labelVal = $label.html(); $input.on( 'change', function( event ) { var fileName = ''; if ( this.files && this.files.length > 1 ) { fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length ); } else if ( event.target.value ) { fileName = event.target.value.split( '\\' ).pop(); } if ( fileName ) { $label.find( '.fld' ).html( fileName ); } else { $label.html( labelVal ); } } ); // Firefox bug fix. $input.on( 'focus', function() { $input.addClass( 'has-focus' ); } ).on( 'blur', function() { $input.removeClass( 'has-focus' ); } ); } ); // jquery-confirm defaults. jconfirm.defaults = { closeIcon: false, backgroundDismiss: false, escapeKey: true, animationBounce: 1, useBootstrap: false, theme: 'modern', boxWidth: '400px', animateFromElement: false, content: wpforms_admin.something_went_wrong, }; // Upgrade information modal for upgrade links. $( document ).on( 'click', '.wpforms-upgrade-modal', function() { $.alert( { title: wpforms_admin.thanks_for_interest, content: wpforms_admin.upgrade_modal, icon: 'fa fa-info-circle', type: 'blue', boxWidth: '550px', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); } ); // Lity lightbox. WPFormsAdmin.initLity(); // Flyout Menu. WPFormsAdmin.initFlyoutMenu(); // Action available for each binding. $( document ).trigger( 'wpformsReady' ); // Start listening for screen options changes. $( '#screen-options-wrap .hide-column-tog' ).on( 'change', WPFormsAdmin.handleOnChangeScreenOptions ); }, /** * For styling purposes, we will add a dedicated class name for determining the number of visible columns. * * @since 1.8.3 */ handleOnChangeScreenOptions: function() { const $table = $( '.wpforms-table-list' ); const $columns = $table.find( 'thead .manage-column' ); const $hidden = $columns.filter( '.hidden' ); const hasManyColumns = Boolean( ( $columns.length - $hidden.length ) > 5 ); // This is used to adjust the table layout. // Add a class to the table to indicate the number of columns. $table.toggleClass( 'has-many-columns', hasManyColumns ); $table.toggleClass( 'has-few-columns', ! hasManyColumns ); }, /** * Initialize Choices JS elements. * * @since 1.4.2 */ initChoicesJS: function() { $( '.choicesjs-select' ).each( function() { var $this = $( this ), args = window.wpforms_admin_choicesjs_config ? { ...window.wpforms_admin_choicesjs_config } : {}; if ( $this.attr( 'multiple' ) ) { args.removeItemButton = typeof args.removeItemButton !== 'undefined' ? args.removeItemButton : true; } if ( $this.data( 'sorting' ) === 'off' ) { args.shouldSort = false; } if ( $this.data( 'search' ) ) { args.searchEnabled = true; } if ( $this.data( 'choices-position' ) ) { args.position = $this.data( 'choices-position' ); } // Remove "Press to select" text. args.itemSelectText = ''; // Render HTML in Choices.js. args.allowHTML = true; // Function to run once Choices initialises. // We need to reproduce a behaviour like on public-facing area for "Edit Entry" page. args.callbackOnInit = function() { const self = this; const $element = $( self.passedElement.element ); const sizeClass = $element.data( 'size-class' ); // Add CSS-class for size. if ( sizeClass ) { $( self.containerOuter.element ).addClass( sizeClass ); } wpf.initMultipleSelectWithSearch( this ); wpf.showMoreButtonForChoices( self.containerOuter.element ); }; $this.data( 'choicesjs', new Choices( $this[ 0 ], args ) ); } ); // Add ability to close the drop-down menu. $( document ).on( 'click', '.choices', function( e ) { const $choices = $( this ), choicesObj = $choices.find( 'select' ).data( 'choicesjs' ); if ( choicesObj && $choices.hasClass( 'is-open' ) && ( e.target.classList.contains( 'choices__inner' ) || e.target.classList.contains( 'choices__arrow' ) ) ) { choicesObj.hideDropdown(); } } ); wpf.initializeChoicesEventHandlers(); }, /** * Initialize checkbox multi-select columns. * * @since 1.4.2 */ initCheckboxMultiselectColumns: function() { $( document ).on( 'change', '.checkbox-multiselect-columns input', function() { var $this = $( this ), $parent = $this.parent(), $container = $this.closest( '.checkbox-multiselect-columns' ), label = $parent.text(), itemID = 'check-item-' + $this.val(), $item = $container.find( '#' + itemID ); if ( $this.prop( 'checked' ) ) { $this.parent().addClass( 'checked' ); if ( ! $item.length ) { $container.find( '.second-column ul' ).append( '
    • ' + label + '
    • ' ); } } else { $this.parent().removeClass( 'checked' ); $container.find( '#' + itemID ).remove(); } } ); $( document ).on( 'click', '.checkbox-multiselect-columns .all', function( event ) { event.preventDefault(); $( this ).closest( '.checkbox-multiselect-columns' ).find( 'input[type=checkbox]' ).prop( 'checked', true ).trigger( 'change' ); $( this ).remove(); } ); }, //--------------------------------------------------------------------// // Forms Overview //--------------------------------------------------------------------// /** * Element bindings for Form Overview page. * * @since 1.3.9 * @since 1.7.3 Deprecated. * * @deprecated Use `WPFormsForms.Overview.init()` instead. */ initFormOverview: function() { console.warn( 'WARNING! Function "WPFormsAdmin.initFormOverview()" has been deprecated, please use the new "WPFormsForms.Overview.init()" function instead!' ); window.WPFormsForms.Overview.init(); }, //--------------------------------------------------------------------// // Entry Single (Details) //--------------------------------------------------------------------// /** * Element bindings for Entries List table page. * * @since 1.3.9 */ initEntriesList() { // eslint-disable-line max-lines-per-function // Toggle form selector dropdown. $( document ).on( 'click', '#wpforms-entries-list .form-selector .toggle', function( event ) { event.preventDefault(); $( this ).toggleClass( 'active' ).next( '.form-list' ).toggle(); } ); // Confirm bulk entry deletion. $( document ).on( 'click', '#wpforms-entries-table #doaction', function( event ) { var $btn = $( this ), $form = $btn.closest( 'form' ), $table = $form.find( 'table' ), $action = $form.find( 'select[name=action]' ), $checked = $table.find( 'input[name^=entry_id]:checked' ); if ( ( 'delete' !== $action.val() && 'trash' !== $action.val() ) || ! $checked.length ) { return; } const $content = 'delete' === $action.val() ? wpforms_admin.entry_delete_n_confirm : wpforms_admin.entry_trash_n_confirm; event.preventDefault(); // Trigger alert modal to confirm. $.confirm( { title: wpforms_admin.heads_up, content: $content.replace( '{entry_count}', $checked.length ), icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { $form.trigger( 'submit' ); }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, } ); } ); // Confirm entry deletion. $( document ).on( 'click', '#wpforms-entries-list .wp-list-table .delete', function( event ) { event.preventDefault(); var url = $( this ).attr( 'href' ); // Trigger alert modal to confirm. $.confirm( { title: wpforms_admin.heads_up, content: wpforms_admin.entry_delete_confirm, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { window.location = url; }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, } ); } ); // Confirm entry trash. $( document ).on( 'click', '#wpforms-entries-list .wp-list-table .trash', function( event ) { event.preventDefault(); const url = $( this ).attr( 'href' ); // Trigger alert modal to confirm. $.confirm( { title: wpforms_admin.heads_up, content: wpforms_admin.entry_trash_confirm, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: () => { window.location = url; }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, } ); } ); // Toggle entry stars. $( document ).on( 'click', '#wpforms-entries-list .wp-list-table .indicator-star', function( event ) { event.preventDefault(); const $this = $( this ); const $counter = $( '#wpforms-entries-list .starred-num' ); const $table = $this.parents( 'table' ); let task = ''; let total = Number( $counter.text() ); if ( $this.hasClass( 'star' ) ) { task = 'star'; total++; $this.attr( 'title', wpforms_admin.entry_unstar ); } else { task = 'unstar'; total--; $this.attr( 'title', wpforms_admin.entry_star ); } $this.toggleClass( 'star unstar' ); if ( ! $table.hasClass( 'wpforms-entries-table-spam' ) && ! $table.hasClass( 'wpforms-entries-table-trash' ) ) { $counter.text( total ); } const data = { task : task, action : 'wpforms_entry_list_star', nonce : wpforms_admin.nonce, entryId : $this.data( 'id' ), formId : $this.data( 'form-id' ), }; $.post( wpforms_admin.ajax_url, data ); } ); // Toggle entry read state. $( document ).on( 'click', '#wpforms-entries-list .wp-list-table .indicator-read', function( event ) { event.preventDefault(); const $this = $( this ); const $counter = $( '#wpforms-entries-list .unread-num' ); const $table = $this.parents( 'table' ); let task = ''; let total = Number( $counter.text() ); if ( $this.hasClass( 'read' ) ) { task = 'read'; total--; $this.attr( 'title', wpforms_admin.entry_unread ); } else { task = 'unread'; total++; $this.attr( 'title', wpforms_admin.entry_read ); } $this.toggleClass( 'read unread' ); if ( ! $table.hasClass( 'wpforms-entries-table-spam' ) && ! $table.hasClass( 'wpforms-entries-table-trash' ) ) { $counter.text( total ); } const data = { task : task, action : 'wpforms_entry_list_read', nonce : wpforms_admin.nonce, entryId : $this.data( 'id' ), formId : $this.data( 'form-id' ), }; $.post( wpforms_admin.ajax_url, data ); } ); // Confirm mass entry deletion/trash - this deletes/trashes ALL entries. $( document ).on( 'click', '#wpforms-entries-list .form-details-actions-removeall', function( event ) { event.preventDefault(); const $page = $( this ).data( 'page' ), $noticeData = WPFormsAdmin.getDeleteAllNoticeData( $page ), $url = $( this ).attr( 'href' ), $table = $( '#wpforms-entries-table' ), filteredCount = $table.data( 'filtered-count-trash' ) && $noticeData.action === 'trash' ? parseInt( $table.data( 'filtered-count-trash' ), 10 ) : 0, data = { action: 'wpforms_entry_list_process_' + $noticeData.action + '_all', form_id: $table.find( 'input[name="form_id"]' ).val(), // eslint-disable-line camelcase date: $table.find( 'input[name="date"]' ).val(), page: $page, search: { field: $table.find( 'select[name="search[field]"]' ).val(), comparison: $table.find( 'select[name="search[comparison]"]' ).val(), term: $table.find( 'input[name="search[term]"]' ).val(), }, nonce: wpforms_admin.nonce, url: $url, }; // Trigger alert modal to confirm. $.confirm( { title: wpforms_admin.heads_up, content: filteredCount && $( '#wpforms-reset-filter' ).length ? $noticeData.content.replace( '{entry_count}', filteredCount ) : $noticeData.contentAll, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: () => { $.get( wpforms_admin.ajax_url, data ) .done( function( response ) { if ( response.success ) { window.location = ! _.isEmpty( response.data ) ? response.data : $url; } } ); }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, } ); } ); // Check for new form entries using Heartbeat API. $( document ).on( 'heartbeat-send', function( event, data ) { var $entriesList = $( '#wpforms-entries-list' ); // Works on entry list page only. if ( ! $entriesList.length || $entriesList.find( '.wpforms-dash-widget' ).length ) { return; } var last_entry_id = $entriesList.find( '#wpforms-entries-table' ).data( 'last-entry-id' ); // When entries list is filtered, there is no data param at all. if ( typeof last_entry_id === 'undefined' ) { return; } data.wpforms_new_entries_entry_id = last_entry_id; data.wpforms_new_entries_form_id = $entriesList.find( 'input[name=form_id]' ).val(); } ); // Display entries list notification if Heartbeat API new form entries check is successful. $( document ).on( 'heartbeat-tick', function( event, data ) { var columnCount; var $entriesList = $( '#wpforms-entries-list' ); // Works on entry list page only. if ( ! $entriesList.length ) { return; } if ( ! data.wpforms_new_entries_notification ) { return; } columnCount = $entriesList.find( '.wp-list-table thead tr' ).first().children().length; if ( ! $entriesList.find( '.new-entries-notification' ).length ) { $entriesList.find( '.wp-list-table thead' ) .append( '' ); } var $link = $entriesList.find( '.new-entries-notification a' ); $link .text( data.wpforms_new_entries_notification ) .slideDown( { start: function() { $link.css( 'display', 'block' ); }, always: function() { $link.css( 'display', 'block' ); }, } ); } ); }, /** * Element bindings for Entries Single (Details) page. * * @since 1.3.9 */ initEntriesSingle: function() { // Entry navigation hotkeys. // We only want to listen on the applicable admin page. if ( 'wpforms-entries' === WPFormsAdmin.getQueryString( 'page' ) && 'details' === WPFormsAdmin.getQueryString( 'view' ) ) { WPFormsAdmin.entryHotkeys(); } // Confirm entry deletion. $( document ).on( 'click', '#wpforms-entries-single .wpforms-entry-delete a', function( event ) { event.preventDefault(); const url = $( this ).attr( 'href' ); // Trigger alert modal to confirm. $.confirm( { title: wpforms_admin.heads_up, content: wpforms_admin.entry_delete_confirm, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { window.location = url; }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, } ); } ); // Confirm entry trash. $( document ).on( 'click', '#wpforms-entries-single .trash', function( event ) { event.preventDefault(); const url = $( this ).attr( 'href' ); // Trigger alert modal to confirm. $.confirm( { title: wpforms_admin.heads_up, content: wpforms_admin.entry_trash_confirm, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: () => { window.location = url; }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, } ); } ); // Open Print preview in new window. $( document ).on( 'click', '#wpforms-entries-single .wpforms-entry-print a', function( event ) { event.preventDefault(); window.open( $( this ).attr( 'href' ) ); } ); // Toggle displaying empty fields. $( document ).on( 'click', '#wpforms-entries-single .wpforms-empty-field-toggle', function( event ) { event.preventDefault(); // Handle cookie. if ( wpCookies.get( 'wpforms_entry_hide_empty' ) === 'true' ) { // User was hiding empty fields, so now display them. wpCookies.remove( 'wpforms_entry_hide_empty' ); $( this ).text( wpforms_admin.entry_empty_fields_hide ); } else { // User was seeing empty fields, so now hide them. wpCookies.set( 'wpforms_entry_hide_empty', 'true', 2592000 ); // 1month. $( this ).text( wpforms_admin.entry_empty_fields_show ); } $( '.wpforms-entry-field.empty, .wpforms-edit-entry-field.empty' ).toggle(); } ); // Display notes editor. $( document ).on( 'click', '#wpforms-entries-single .wpforms-entry-notes-new .add', function( event ) { event.preventDefault(); $( this ).hide().next( 'form' ).stop().slideToggle(); } ); // Cancel note. $( document ).on( 'click', '#wpforms-entries-single .wpforms-entry-notes-new .cancel', function( event ) { event.preventDefault(); $( this ).closest( 'form' ).stop().slideToggle(); $( '.wpforms-entry-notes-new .add' ).show(); } ); // Delete note. $( document ).on( 'click', '#wpforms-entries-single .wpforms-entry-notes-byline .note-delete', function( event ) { event.preventDefault(); var url = $( this ).attr( 'href' ); // Trigger alert modal to confirm. $.confirm( { title: wpforms_admin.heads_up, content: wpforms_admin.entry_note_delete_confirm, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { window.location = url; }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, } ); } ); }, //--------------------------------------------------------------------// // Entry List //--------------------------------------------------------------------// /** * Hotkeys for Entries Single (Details) page. * * j triggers previous entry, k triggers next entry. * * @since 1.4.0 */ entryHotkeys: function() { // eslint-disable-next-line complexity $( document ).on( 'keydown', function( event ) { if ( 74 === event.keyCode && ! event.metaKey && ! WPFormsAdmin.isFormTypeNode( event.target.nodeName ) ) { // j key has been pressed outside a form element, go to the previous entry. var prevEntry = $( '#wpforms-admin-single-navigation-prev-link' ).attr( 'href' ); if ( '#' !== prevEntry ) { window.location.href = prevEntry; } } else if ( 75 === event.keyCode && ! event.metaKey && ! WPFormsAdmin.isFormTypeNode( event.target.nodeName ) ) { // k key has been pressed outside a form element, go to the previous entry. var nextEntry = $( '#wpforms-admin-single-navigation-next-link' ).attr( 'href' ); if ( '#' !== nextEntry ) { window.location.href = nextEntry; } } } ); }, //--------------------------------------------------------------------// // Welcome Activation. //--------------------------------------------------------------------// /** * Welcome activation page. * * @since 1.3.9 */ initWelcome: function() { // Open modal and play How To video. $( document ).on( 'click', '#wpforms-welcome .play-video', function( event ) { event.preventDefault(); const video = '
      '; $.dialog( { title: false, content: video, closeIcon: true, boxWidth: '70%', } ); } ); }, //--------------------------------------------------------------------// // Addons List. //--------------------------------------------------------------------// /** * Element bindings for Addons List page. * * @since 1.3.9 */ initAddons: function() { // Only run on the addons page. if ( ! $( '#wpforms-admin-addons' ).length ) { return; } // Addons searching. const $sectionAll = $( '#wpforms-addons-list-section-all' ); const $sectionInstalled = $( '#wpforms-addons-list-section-installed' ); if ( $sectionAll.length || $sectionInstalled.length ) { let addonSearchInstalled; let addonSearchAll; if ( $sectionInstalled.length ) { addonSearchInstalled = new List( 'wpforms-addons-list-section-installed', { valueNames: [ 'addon-link' ], } ); } if ( $sectionAll.length ) { addonSearchAll = new List( 'wpforms-addons-list-section-all', { valueNames: [ 'addon-link' ], } ); } $( '#wpforms-addons-search' ).on( 'keyup search', function() { WPFormsAdmin.updateAddonSearchResult( this, addonSearchAll, addonSearchInstalled ); } ); } // Toggle an addon state. $( document ).on( 'change', '.wpforms-addons-list-item .wpforms-toggle-control input', function( event ) { event.preventDefault(); if ( $( this ).hasClass( 'disabled' ) ) { return false; } WPFormsAdmin.addonToggleNew( $( this ) ); } ); $( document ).on( 'click', '.wpforms-addons-list-item button', function( event ) { event.preventDefault(); if ( $( this ).hasClass( 'disabled' ) ) { return false; } WPFormsAdmin.addonToggleNew( $( this ) ); } ); $( document ).on( 'click', '#wpforms-admin-addons .addon-item button', function( event ) { event.preventDefault(); if ( $( this ).hasClass( 'disabled' ) ) { return false; } WPFormsAdmin.addonToggle( $( this ) ); } ); }, /** * Handle addons search field operations. * * @since 1.7.4 * * @param {Object} searchField The search field html element. * @param {Object} addonSearchAll Addons all list (uses List.js). * @param {Object} addonSearchInstalled Addons installed list (uses List.js). */ updateAddonSearchResult( searchField, addonSearchAll, addonSearchInstalled ) { let searchTerm = $( searchField ).val(); /* * Replace dot and comma with space * it is workaround for a bug in list.js library. * * Note: remove when the issue below is fixed: * @see https://github.com/javve/list.js/issues/699 */ searchTerm = searchTerm.replace( /[.,]/g, ' ' ); const $noResultsMessage = $( '#wpforms-addons-no-results' ); const $sectionAll = $( '#wpforms-addons-list-section-all' ); const $sectionInstalled = $( '#wpforms-addons-list-section-installed' ); const searchResultsAll = addonSearchAll ? addonSearchAll.search( searchTerm ) : []; const searchResultsInstalled = addonSearchInstalled ? addonSearchInstalled.search( searchTerm ) : []; $noResultsMessage.toggle( searchResultsAll.length === 0 && searchResultsInstalled.length === 0 ); $sectionAll.toggle( searchResultsAll.length > 0 ); $sectionInstalled.toggle( searchResultsInstalled.length > 0 ); }, /** * Change plugin/addon state. * * @since 1.6.3 * * @param {string} plugin Plugin slug or URL for download. * @param {string} state State status activate|deactivate|install. * @param {string} pluginType Plugin type addon or plugin. * @param {Function} callback Callback for get result from AJAX. * @param {Function} errorCallback Callback for get error from AJAX. */ setAddonState( plugin, state, pluginType, callback, errorCallback ) { const actions = { activate: 'wpforms_activate_addon', install: 'wpforms_install_addon', deactivate: 'wpforms_deactivate_addon', }; const action = actions[ state ]; if ( ! action ) { return; } const data = { action, nonce: wpforms_admin.nonce, plugin, type: pluginType, }; $.post( wpforms_admin.ajax_url, data, function( res ) { callback( res ); } ).fail( function( xhr ) { errorCallback( xhr ); } ); }, /** * Toggle addon state. * * @since 1.8.6 * * @param {Object} $btn Button element. */ // eslint-disable-next-line max-lines-per-function, complexity addonToggleNew( $btn ) { const $footer = $btn.parents( '.wpforms-addons-list-item-footer' ); const classes = { active: 'wpforms-addons-list-item-footer-active', activating: 'wpforms-addons-list-item-footer-activating', installed: 'wpforms-addons-list-item-footer-installed', missing: 'wpforms-addons-list-item-footer-missing', goToUrl: 'wpforms-addons-list-item-footer-go-to-url', withError: 'wpforms-addons-list-item-footer-with-error', }; // Open url in new tab. if ( $footer.hasClass( classes.goToUrl ) ) { window.open( $btn.attr( 'data-plugin' ), '_blank' ); return; } $btn.prop( 'disabled', true ); let checked = $btn.is( ':checked' ); let cssClass; const plugin = $footer.attr( 'data-plugin' ); const pluginType = $footer.attr( 'data-type' ); const $addon = $btn.parents( '.wpforms-addons-list-item' ); const state = WPFormsAdmin.getAddonState( $footer, classes, $btn ); /** * Handle error. * * @param {Object} res Response object. */ function handleError( res ) { $footer.addClass( classes.withError ); if ( typeof res.data === 'object' ) { $footer.append( `` ); } else { $footer.append( `` ); } if ( state === 'install' ) { checked = false; WPFormsAdmin.removeSpinnerFromButton( $btn ); } else if ( state === 'deactivate' ) { checked = true; } else if ( state === 'activate' ) { checked = false; } } /** * Handle success. * * @param {Object} res Response object. */ function handleSuccess( res ) { if ( state === 'install' ) { cssClass = classes.active; checked = true; $footer.attr( 'data-plugin', res.data.basename ); if ( ! res.data.is_activated ) { cssClass = classes.installed; checked = false; } $btn.hide(); $btn = $btn.closest( '.wpforms-addons-list-item' ).find( '.wpforms-toggle-control input' ); } else if ( state === 'activate' ) { $footer.find( '.wpforms-addons-list-item-footer-settings-link' ).fadeIn( 150 ); cssClass = classes.active; checked = true; } else if ( state === 'deactivate' ) { $footer.find( '.wpforms-addons-list-item-footer-settings-link' ).fadeOut( 150 ); cssClass = classes.installed; checked = false; } $footer.removeClass( classes.active + ' ' + classes.installed + ' ' + classes.missing ).addClass( cssClass ); } WPFormsAdmin.setAddonState( plugin, state, pluginType, function( res ) { if ( res.success ) { handleSuccess( res ); } else { handleError( res ); } WPFormsAdmin.updateAddonButtonPropertiesAndUI( $btn, $addon, $footer, classes, checked ); }, function() { handleError( { data: wpforms_admin.server_error, } ); WPFormsAdmin.updateAddonButtonPropertiesAndUI( $btn, $addon, $footer, classes, checked ); } ); }, /** * Add spinner to button. * * @since 1.8.6 * * @param {Object} $button Button element. */ addSpinnerToButton( $button ) { const spinnerBlue = ''; const originalWidth = $button.width(); $button.data( 'original-text', $button.html() ); $button.width( originalWidth ).html( spinnerBlue ); }, /** * Remove spinner from button. * * @since 1.8.6 * * @param {Object} $button Button element. */ removeSpinnerFromButton( $button ) { $button.html( $button.data( 'original-text' ) ); }, /** * Get addon state. * * @since 1.8.6 * * @param {Object} $footer Footer element. * @param {Object} classes Classes object. * @param {Object} $button Button element. * * @return {string} State. */ getAddonState( $footer, classes, $button ) { let state; if ( $footer.hasClass( classes.active ) ) { state = 'deactivate'; } else if ( $footer.hasClass( classes.installed ) ) { state = 'activate'; } else if ( $footer.hasClass( classes.missing ) ) { WPFormsAdmin.addSpinnerToButton( $button ); state = 'install'; } return state; }, /** * Update button properties and UI. * * @since 1.8.6 * * @param {Object} $btn Button element. * @param {Object} $addon Addon element. * @param {Object} $footer Footer element. * @param {Object} classes Classes object. * @param {boolean} checked Checked state. */ updateAddonButtonPropertiesAndUI( $btn, $addon, $footer, classes, checked ) { $btn.prop( 'checked', checked ); $btn.prop( 'disabled', false ); $btn.siblings( '.wpforms-toggle-control-status' ).html( $btn.siblings( '.wpforms-toggle-control-status' ).data( checked ? 'on' : 'off' ) ); if ( $addon.find( '.wpforms-addons-list-item-footer-error' ).length > 0 ) { setTimeout( function() { $footer.removeClass( classes.withError ); $addon.find( '.wpforms-addons-list-item-footer-error' ).remove(); }, 6000 ); } }, /** * Scroll to integration. * * @since 1.8.6 */ scrollToIntegration() { const currentURL = window.location.href; // eslint-disable-next-line compat/compat const urlObject = new URL( currentURL ); const searchParams = urlObject.searchParams; const addon = searchParams.get( 'addon' ); if ( addon ) { const $elementToScrollTo = $( '.wpforms-settings-provider[id*="' + addon + '"]' ); if ( $elementToScrollTo.length ) { $( window ).scrollTop( $elementToScrollTo.offset().top ); searchParams.delete( 'addon' ); window.history.pushState( {}, document.title, urlObject.toString() ); } } }, /** * Toggle addon state. * * @since 1.3.9 * * @param {Object} $btn Button element. */ // eslint-disable-next-line max-lines-per-function,complexity addonToggle( $btn ) { let state, cssClass, stateText, buttonText, errorText, successText; if ( $btn.hasClass( 'status-go-to-url' ) ) { // Open url in new tab. window.open( $btn.attr( 'data-plugin' ), '_blank' ); return; } $btn.prop( 'disabled', true ).addClass( 'loading' ); $btn.html( s.iconSpinner ); const pluginType = $btn.attr( 'data-type' ); if ( $btn.hasClass( 'status-active' ) ) { // Deactivate. state = 'deactivate'; cssClass = 'status-installed'; if ( pluginType === 'plugin' ) { cssClass += ' button button-secondary'; } stateText = wpforms_admin.addon_inactive; buttonText = wpforms_admin.addon_activate; errorText = wpforms_admin.addon_deactivate; if ( pluginType === 'addon' ) { buttonText = s.iconActivate + buttonText; errorText = s.iconDeactivate + errorText; } } else if ( $btn.hasClass( 'status-installed' ) ) { // Activate. state = 'activate'; cssClass = 'status-active'; if ( pluginType === 'plugin' ) { cssClass += ' button button-secondary disabled'; } stateText = wpforms_admin.addon_active; buttonText = wpforms_admin.addon_deactivate; if ( pluginType === 'addon' ) { buttonText = s.iconDeactivate + buttonText; errorText = s.iconActivate + wpforms_admin.addon_activate; } else if ( pluginType === 'plugin' ) { buttonText = wpforms_admin.addon_activated; errorText = wpforms_admin.addon_activate; } } else if ( $btn.hasClass( 'status-missing' ) ) { // Install & Activate. state = 'install'; cssClass = 'status-active'; if ( pluginType === 'plugin' ) { cssClass += ' button disabled'; } stateText = wpforms_admin.addon_active; buttonText = wpforms_admin.addon_activated; errorText = s.iconInstall; if ( pluginType === 'addon' ) { buttonText = s.iconActivate + wpforms_admin.addon_deactivate; errorText += wpforms_admin.addon_install; } } else { return; } const plugin = $btn.attr( 'data-plugin' ); // eslint-disable-next-line complexity WPFormsAdmin.setAddonState( plugin, state, pluginType, function( res ) { const $addon = $btn.closest( '.addon-item' ); if ( res.success ) { if ( 'install' === state ) { $btn.attr( 'data-plugin', res.data.basename ); successText = res.data.msg; if ( ! res.data.is_activated ) { stateText = wpforms_admin.addon_inactive; buttonText = 'plugin' === pluginType ? wpforms_admin.addon_activate : s.iconActivate + wpforms_admin.addon_activate; cssClass = 'plugin' === pluginType ? 'status-installed button button-secondary' : 'status-installed'; } } else { successText = res.data; } $addon.find( '.actions' ).append( '
      ' + successText + '
      ' ); $addon.find( 'span.status-label' ) .removeClass( 'status-active status-installed status-missing' ) .addClass( cssClass ) .removeClass( 'button button-primary button-secondary disabled' ) .text( stateText ); $btn .removeClass( 'status-active status-installed status-missing' ) .removeClass( 'button button-primary button-secondary disabled' ) .addClass( cssClass ).html( buttonText ); } else { if ( 'object' === typeof res.data ) { if ( pluginType === 'addon' ) { $addon.find( '.actions' ).append( '

      ' + wpforms_admin.addon_error + '

      ' ); } else { $addon.find( '.actions' ).append( '

      ' + wpforms_admin.plugin_error + '

      ' ); } } else { $addon.find( '.actions' ).append( '

      ' + res.data + '

      ' ); } if ( 'install' === state && 'plugin' === pluginType ) { $btn.addClass( 'status-go-to-url' ).removeClass( 'status-missing' ); } $btn.html( errorText ); } $btn.prop( 'disabled', false ).removeClass( 'loading' ); if ( ! $addon.find( '.actions' ).find( '.msg.error' ).length ) { setTimeout( function() { $( '.addon-item .msg' ).remove(); }, 3000 ); } }, function( error ) { // eslint-disable-next-line no-console console.log( error.responseText ); } ); }, //--------------------------------------------------------------------// // Settings. //--------------------------------------------------------------------// /** * Element bindings for Settings page. * * @since 1.3.9 */ initSettings: function() { // On ready events. $( document ).on( 'wpformsReady', function() { // Only proceed if we're on the settings page. if ( ! $( '#wpforms-settings' ).length ) { return; } // Watch for hashes and scroll to if found. // Display all addon boxes as the same height. var integrationFocus = WPFormsAdmin.getQueryString( 'wpforms-integration' ), jumpTo = WPFormsAdmin.getQueryString( 'jump' ); if ( integrationFocus ) { $( 'body' ).animate( { scrollTop: $( '#wpforms-integration-' + integrationFocus ).offset().top }, 1000 ); } else if ( jumpTo ) { $( 'body' ).animate( { scrollTop: $( '#' + jumpTo ).offset().top }, 1000 ); } // Settings conditional logic. $( '.wpforms-admin-settings-form' ).conditions( [ // Misc > Disable User Cookies visibility. { conditions: { element: '#wpforms-setting-gdpr', type: 'checked', operator: 'is', }, actions: { if: { element: '#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details', action: 'show', }, else : { element: '#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details', action: 'hide', }, }, effect: 'appear', }, // CAPTCHA > Type. { conditions: { element: 'input[name=captcha-provider]:checked', type: 'value', operator: '=', condition: 'hcaptcha', }, actions: { if: [ { element: '.wpforms-setting-row', action: 'show', }, { element: '.wpforms-setting-recaptcha, #wpforms-setting-row-recaptcha-site-key, #wpforms-setting-row-recaptcha-secret-key, #wpforms-setting-row-recaptcha-fail-msg, .wpforms-setting-turnstile, #wpforms-setting-row-turnstile-heading, #wpforms-setting-row-turnstile-site-key, #wpforms-setting-row-turnstile-secret-key, #wpforms-setting-row-turnstile-theme, #wpforms-setting-row-turnstile-fail-msg', action: 'hide', }, ], }, effect: 'appear', }, { conditions: { element: 'input[name=captcha-provider]:checked', type: 'value', operator: '=', condition: 'recaptcha', }, actions: { if: [ { element: '.wpforms-setting-row', action: 'show', }, { element: '#wpforms-setting-row-hcaptcha-heading, #wpforms-setting-row-hcaptcha-site-key, #wpforms-setting-row-hcaptcha-secret-key, #wpforms-setting-row-hcaptcha-fail-msg, #wpforms-setting-row-turnstile-heading, #wpforms-setting-row-turnstile-site-key, #wpforms-setting-row-turnstile-secret-key, #wpforms-setting-row-turnstile-theme, #wpforms-setting-row-turnstile-fail-msg', action: 'hide', }, ], }, effect: 'appear', }, { conditions: { element: 'input[name=captcha-provider]:checked', type: 'value', operator: '=', condition: 'turnstile', }, actions: { if: [ { element: '.wpforms-setting-row', action: 'show', }, { element: '#wpforms-setting-row-hcaptcha-heading, #wpforms-setting-row-hcaptcha-site-key, #wpforms-setting-row-hcaptcha-secret-key, #wpforms-setting-row-hcaptcha-fail-msg, .wpforms-setting-recaptcha, #wpforms-setting-row-recaptcha-site-key, #wpforms-setting-row-recaptcha-secret-key, #wpforms-setting-row-recaptcha-fail-msg', action: 'hide', }, ], }, effect: 'appear', }, { conditions: { element: 'input[name=captcha-provider]:checked', type: 'value', operator: '=', condition: 'none', }, actions: { if: [ { element: '.wpforms-setting-row', action: 'hide', }, { element: '.wpforms-setting-captcha-heading, #wpforms-setting-row-captcha-provider', action: 'show', }, ], }, effect: 'appear', }, ] ); } ); // Render engine setting. $( document ).on( 'change', '#wpforms-setting-row-render-engine input', WPFormsAdmin.settingsRenderEngineChange ); // Form styles plugin setting. $( document ).on( 'change', '#wpforms-setting-disable-css', function() { WPFormsAdmin.settingsFormStylesAlert( $( this ).val() ); } ); // Image upload fields. $( document ).on( 'click', '.wpforms-setting-row-image button', function( event ) { event.preventDefault(); // If the remove button was clicked, clear the value and remove the image. if ( $( this ).hasClass( 'wpforms-setting-remove-image' ) ) { const $wrapper = $( this ).closest( '.wpforms-setting-row-image' ); $wrapper.find( 'input' ).val( '' ).attr( 'value', '' ).trigger( 'change' ).end().find( 'img' ).remove(); return; } WPFormsAdmin.imageUploadModal( $( this ) ); } ); // Verify license key. $( document ).on( 'click', '#wpforms-setting-license-key-verify', function( event ) { event.preventDefault(); WPFormsAdmin.licenseVerify( $( this ) ); } ); // Show message for license field. $( document ).on( 'click', '.wpforms-setting-license-wrapper', function( event ) { event.preventDefault(); var $keyField = $( '#wpforms-setting-license-key' ); if ( ! $keyField.length ) { return; } if ( ! $keyField.prop( 'disabled' ) ) { return; } WPFormsAdmin.licenseEditMessage(); } ); // Deactivate license key. $( document ).on( 'click', '#wpforms-setting-license-key-deactivate', function( event ) { event.preventDefault(); WPFormsAdmin.licenseDeactivate( $( this ) ); } ); // Refresh license key. $( document ).on( 'click', '#wpforms-setting-license-key-refresh', function( event ) { event.preventDefault(); WPFormsAdmin.licenseRefresh( $( this ) ); } ); /** * @todo Refactor providers settings tab. Code below is legacy. */ // Integration connect. $( document ).on( 'click', '.wpforms-settings-provider-connect', function( event ) { event.preventDefault(); var button = $( this ); WPFormsAdmin.integrationConnect( button ); } ); // Integration account disconnect. $( document ).on( 'click', '.wpforms-settings-provider-accounts-list .remove a', function( event ) { event.preventDefault(); WPFormsAdmin.integrationDisconnect( $( this ) ); } ); // Integration individual display toggling. $( document ).on( 'click', '.wpforms-settings-provider:not(.focus-out) .wpforms-settings-provider-header', function( event ) { event.preventDefault(); var $this = $( this ); $this .parent() .find( '.wpforms-settings-provider-accounts' ) .stop( false, true ) .slideToggle( '', function() { $this.parent().find( '.wpforms-settings-provider-logo i' ).toggleClass( 'fa-chevron-right fa-chevron-down' ); } ); } ); // Integration accounts display toggling. $( document ).on( 'click', '.wpforms-settings-provider-accounts-toggle a', function( event ) { event.preventDefault(); var $connectFields = $( this ).parent().next( '.wpforms-settings-provider-accounts-connect' ); $connectFields.find( 'input[type=text], input[type=password]' ).val( '' ); $connectFields.stop().slideToggle(); } ); // CAPTCHA settings page: type toggling. $( document ).on( 'change', '#wpforms-setting-row-captcha-provider input', function() { var $preview = $( '#wpforms-setting-row-captcha-preview' ); if ( this.value === 'hcaptcha' || this.value === 'turnstile' ) { $preview.removeClass( 'wpforms-hidden' ); } else if ( this.value === 'none' ) { $preview.addClass( 'wpforms-hidden' ); } else { $( '#wpforms-setting-row-recaptcha-type input:checked' ).trigger( 'change' ); } if ( $preview.find( '.wpforms-captcha-preview' ).length ) { $preview.find( '.wpforms-captcha-preview' ).empty(); $preview.find( '.wpforms-captcha-placeholder' ).removeClass( 'wpforms-hidden' ); } } ); // CAPTCHA settings page: reCAPTCHA type toggling. $( document ).on( 'change', '#wpforms-setting-row-recaptcha-type input', function() { $( '#wpforms-setting-row-captcha-preview' ).toggleClass( 'wpforms-hidden', 'v2' !== this.value ); $( '#wpforms-setting-row-recaptcha-v3-threshold' ).toggleClass( 'wpforms-hidden', 'v3' !== this.value ); } ); // Toggle control switch description. $( document ).on( 'change', '.wpforms-toggle-control input', function() { const $input = $( this ), checked = $input.is( ':checked' ), state = checked ? 'on' : 'off', $field = $input.closest( '.wpforms-setting-field' ), $control = $input.closest( '.wpforms-toggle-control' ), $status = $control.find( '.wpforms-toggle-control-status' ), $descOn = $field.find( '.wpforms-toggle-desc.desc-on' ), $descOff = $field.find( '.wpforms-toggle-desc.desc-off' ), isDoubleDesc = $descOn.length > 0 && $descOff.length > 0; $descOn.toggleClass( 'wpforms-hidden', ! checked && isDoubleDesc ); $descOff.toggleClass( 'wpforms-hidden', checked && isDoubleDesc ); $status.html( $status.data( state ) ); } ); }, /** * Render engine setting change event handler. * * @since 1.8.1 * * @param {object} e Event object. */ settingsRenderEngineChange: function( e ) { // noinspection JSUnusedLocalSymbols // eslint-disable-next-line const renderEngine = $( this ).val(); // TODO: Add corresponding code that need to be executed on change render engine setting. }, /** * Alert users if they change form styles to something that may give * unexpected results. * * @since 1.5.0 */ settingsFormStylesAlert: function( value ) { if ( '2' === value ) { var msg = wpforms_admin.settings_form_style_base; } else if ( '3' === value ) { var msg = wpforms_admin.settings_form_style_none; } else { return; } $.alert( { title: wpforms_admin.heads_up, content: msg, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, /** * Image upload modal window. * * @since 1.3.0 * * @param {jQuery} $el Image upload button element. */ imageUploadModal( $el ) { // To prevent caching of the media frame object and // avoid confusion between multiple instances, // this method no longer relies on the shared s.mediaFrame object. // Instead, it creates a new mediaFrame object for each instance. const $setting = $el.closest( '.wpforms-setting-field' ); s.mediaFrame = wpf.initMediaLibrary( { title: wpforms_admin.upload_image_title, extensions: wpforms_admin.upload_image_extensions, extensionsError: wpforms_admin.upload_image_extensions_error, buttonText: wpforms_admin.upload_image_button, } ); s.mediaFrame.on( 'select', function() { // Grab our attachment selection and construct a JSON representation of the model. const mediaAttachment = s.mediaFrame.state().get( 'selection' ).first().toJSON(); const $input = $setting.find( 'input[type=text]' ); // Send the attachment URL to our custom input field via jQuery. $input.val( mediaAttachment.url ); $setting.find( 'img' ).remove(); $setting.prepend( '' ); $input.trigger( 'change' ); } ).on( 'close', function() { s.mediaFrame.off( 'library:selection:add' ); } ); // Now that everything has been set, let's open up the frame. s.mediaFrame.open(); }, /** * Verify a license key. * * @since 1.3.9 * * @param {jQuery} $el Verify button element. */ licenseVerify: function( $el ) { var $row = $el.closest( '.wpforms-setting-row' ), $keyField = $( '#wpforms-setting-license-key' ), buttonWidth = $el.outerWidth(), buttonLabel = $el.text(), data = { action: 'wpforms_verify_license', nonce: wpforms_admin.nonce, license: $keyField.val(), }; $el.html( s.iconSpinner ).css( 'width', buttonWidth ).prop( 'disabled', true ); $.post( wpforms_admin.ajax_url, data, function( res ) { var icon = 'fa fa-check-circle', color = 'green', msg; if ( res.success ) { msg = res.data.msg; $el.hide(); $row.find( '#wpforms-setting-license-key-info-message' ).empty().hide(); $row.find( '.type, .desc, #wpforms-setting-license-key-deactivate' ).show(); $row.find( '.type strong' ).text( res.data.type ); $( '.wpforms-license-notice' ).remove(); $keyField .prop( 'disabled', true ) .addClass( 'wpforms-setting-license-is-valid' ) .attr( 'value', $keyField.val() ); } else { icon = 'fa fa-exclamation-circle'; color = 'orange'; msg = res.data; $row.find( '.type, .desc, #wpforms-setting-license-key-deactivate' ).hide(); $keyField.prop( 'disabled', false ); } $.alert( { title: msg.header ?? false, content: msg.msg ?? msg, icon: icon, type: color, buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); $el.html( buttonLabel ).css( 'width', 'auto' ).prop( 'disabled', false ); } ).fail( function( xhr ) { $keyField.prop( 'disabled', false ); console.log( xhr.responseText ); } ); }, /** * Show message that license key editing is disabled. * * @since 1.6.5 */ licenseEditMessage: function() { $.alert( { title: wpforms_admin.heads_up, content: wpforms_admin.edit_license, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, /** * Deactivate a license key. * * @since 1.3.9 * * @param {Element} el Button element. */ licenseDeactivate: function( el ) { const $this = $( el ); const $row = $this.closest( '.wpforms-setting-row' ); const buttonWidth = $this.outerWidth(); const buttonLabel = $this.text(); const data = { action: 'wpforms_deactivate_license', nonce: wpforms_admin.nonce, }; $this.html( s.iconSpinner ).css( 'width', buttonWidth ).prop( 'disabled', true ); $.post( wpforms_admin.ajax_url, data, function( res ) { let icon = 'fa fa-info-circle'; let color = 'blue'; let title = wpforms_admin.success; const data = res.data; const msg = ! data.msg || typeof data.msg !== 'string' ? wpforms_admin.something_went_wrong : data.msg; if ( res.success ) { $row.find( '#wpforms-setting-license-key' ) .val( '' ) .attr( 'value', '' ) .prop( { readonly: false, disabled: false } ) .removeClass(); $row.find( '.wpforms-license-key-deactivate-remove' ).remove(); $row.find( '#wpforms-setting-license-key-info-message' ).html( data.info ).show(); $row.find( '#wpforms-setting-license-key-verify' ).prop( 'disabled', false ).show(); $row.find( '.type, .desc, #wpforms-setting-license-key-deactivate' ).hide(); } else { icon = 'fa fa-exclamation-circle'; color = 'orange'; title = wpforms_admin.oops; } $.alert( { title: title, content: msg, icon: icon, type: color, buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); $this.html( buttonLabel ).css( 'width', 'auto' ).prop( 'disabled', false ); } ).fail( function( xhr ) { console.log( xhr.responseText ); } ); }, /** * Refresh a license key. * * @since 1.3.9 */ licenseRefresh: function( el ) { var $this = $( el ), $row = $this.closest( '.wpforms-setting-row' ), $input = $( '#wpforms-setting-license-key' ), data = { action: 'wpforms_refresh_license', nonce: wpforms_admin.nonce, license: $input.val(), }; $.post( wpforms_admin.ajax_url, data, function( res ) { var icon = 'fa fa-check-circle', color = 'green', msg; if ( res.success ) { msg = res.data.msg; $row.find( '.type strong' ).text( res.data.type ); } else { icon = 'fa fa-exclamation-circle'; color = 'orange'; msg = res.data; $row.find( '.type, .desc' ).hide(); $input.removeClass( 'wpforms-setting-license-is-valid' ).addClass( 'wpforms-setting-license-is-invalid' ); } $.alert( { title: msg.header ?? false, content: msg.msg ?? msg, icon: icon, type: color, buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); } ).fail( function( xhr ) { console.log( xhr.responseText ); } ); }, /** * Connect integration provider account. * * @param $btn Button (.wpforms-settings-provider-connect) that was clicked to establish connection. * * @since 1.3.9 */ integrationConnect: function( $btn ) { var buttonWidth = $btn.outerWidth(), buttonLabel = $btn.text(), $provider = $btn.closest( '.wpforms-settings-provider' ), data = { action : 'wpforms_settings_provider_add_' + $btn.data( 'provider' ), data : $btn.closest( 'form' ).serialize(), provider: $btn.data( 'provider' ), nonce : wpforms_admin.nonce, }, errorMessage = wpforms_admin.provider_auth_error; $btn.html( wpforms_admin.connecting ).css( 'width', buttonWidth ).prop( 'disabled', true ); $.post( wpforms_admin.ajax_url, data, function( response ) { if ( response.success ) { $provider.find( '.wpforms-settings-provider-accounts-list ul' ).append( response.data.html ); $provider.addClass( 'connected' ); $btn.closest( '.wpforms-settings-provider-accounts-connect' ).stop().slideToggle(); } else { if ( Object.prototype.hasOwnProperty.call( response, 'data' ) && Object.prototype.hasOwnProperty.call( response.data, 'error_msg' ) ) { errorMessage += '
      ' + response.data.error_msg; } WPFormsAdmin.integrationError( errorMessage ); } } ).fail( function() { WPFormsAdmin.integrationError( errorMessage ); } ).always( function() { $btn.html( buttonLabel ).css( 'width', 'auto' ).prop( 'disabled', false ); } ); }, /** * Remove integration provider account. * * @since 1.3.9 * * @param {object} el Disconnect link that was clicked to establish removing account. */ integrationDisconnect: function( el ) { var $this = $( el ), $provider = $this.parents( '.wpforms-settings-provider' ), data = { action : 'wpforms_settings_provider_disconnect_' + $this.data( 'provider' ), provider: $this.data( 'provider' ), key : $this.data( 'key' ), nonce : wpforms_admin.nonce, }, errorMessage = wpforms_admin.provider_delete_error; $.confirm( { title: wpforms_admin.heads_up, content: wpforms_admin.provider_delete_confirm, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { $.post( wpforms_admin.ajax_url, data, function( response ) { if ( response.success ) { $this.parent().parent().remove(); // Hide Connected status label if no more integrations are linked. var numberOfIntegrations = $provider.find( '.wpforms-settings-provider-accounts-list li' ).length; if ( typeof numberOfIntegrations === 'undefined' || numberOfIntegrations === 0 ) { $provider.removeClass( 'connected' ); } /** * Provider account has been removed. * * @since 1.7.7 */ $( document ).trigger( 'wpformsProviderRemoved', [ $provider, response ] ); } else { if ( Object.prototype.hasOwnProperty.call( response, 'data' ) && Object.prototype.hasOwnProperty.call( response.data, 'error_msg' ) ) { errorMessage += '
      ' + response.data.error_msg; } WPFormsAdmin.integrationError( errorMessage ); } } ).fail( function() { WPFormsAdmin.integrationError( errorMessage ); } ); }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, } ); }, /** * Error handling. * * @since 1.6.4 * * @param {string} error Error message. */ integrationError: function( error ) { $.alert( { title: wpforms_admin.something_went_wrong, content: error, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, //--------------------------------------------------------------------// // Tools. //--------------------------------------------------------------------// /** * Element bindings for Tools page. * * @since 1.4.2 */ initTools() { // Enable import/export buttons when a value is selected. $( document ).on( 'change', '#wpforms-tools-form-import, #wpforms-tools-form-other-import, #wpforms-tools-form-export, #wpforms-tools-form-template', function() { const $field = $( this ); const $button = $field.parents( 'form' ).find( 'button' ); $button.attr( 'aria-disabled', $field.val().length === 0 ); } ); // Copy system information to clipboard. $( document ).on( 'click', '#wpforms-system-information-copy', function( event ) { event.preventDefault(); WPFormsAdmin.copySystemInformation(); } ); // Run SSL test. $( document ).on( 'click', '#wpforms-ssl-verify', function( event ) { event.preventDefault(); WPFormsAdmin.verifySSLConnection(); } ); // Recreate database tables. $( document ).on( 'click', '#wpforms-recreate-tables', function( event ) { event.preventDefault(); WPFormsAdmin.recreateTables(); } ); // Run import for a specific provider. $( document ).on( 'click', '#wpforms-importer-forms-submit', function( event ) { event.preventDefault(); // Check to confirm user as selected a form. if ( $( '#wpforms-importer-forms input:checked' ).length ) { const ids = []; $( '#wpforms-importer-forms input:checked' ).each( function( i ) { ids[ i ] = $( this ).val(); } ); if ( ! wpforms_admin.isPro ) { // We need to analyze the forms before starting the actual import. WPFormsAdmin.analyzeForms( ids ); } else { // Begin the import process. WPFormsAdmin.importForms( ids ); } } else { // User didn't actually select a form so alert them. $.alert( { title: wpforms_admin.heads_up, content: wpforms_admin.importer_forms_required, icon: 'fa fa-info-circle', type: 'blue', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); } } ); // Continue import after analyzing. $( document ).on( 'click', '#wpforms-importer-continue-submit', function( event ) { event.preventDefault(); WPFormsAdmin.importForms( s.formIDs ); } ); }, /** * Copy system information to clipboard. * * @since 1.8.4 */ copySystemInformation() { $( '#wpforms-system-information' ).select(); document.execCommand( 'copy' ); }, /** * Perform test connection to verify that the current web host * can successfully make outbound SSL connections. * * @since 1.4.5 */ verifySSLConnection() { const $btn = $( '#wpforms-ssl-verify' ); const btnLabel = $btn.text(); const btnWidth = $btn.outerWidth(); const $settings = $btn.parent(); $btn.css( 'width', btnWidth ).prop( 'disabled', true ).text( wpforms_admin.testing ); const data = { action: 'wpforms_verify_ssl', nonce: wpforms_admin.nonce, }; // Trigger AJAX to test connection $.post( wpforms_admin.ajax_url, data, function( res ) { WPFormsAdmin.debug( res ); // Remove any previous alerts. $settings.find( '.wpforms-notice' ).remove(); if ( res.success ) { $btn.before( '
      ' + res.data.msg + '
      ' ); } if ( ! res.success && res.data.msg ) { $btn.before( '
      ' + res.data.msg + '
      ' ); } if ( ! res.success && res.data.debug ) { $btn.before( '
      ' + res.data.debug + '
      ' ); } $btn.css( 'width', btnWidth ).prop( 'disabled', false ).text( btnLabel ); } ); }, /** * Recreate custom tables. * * @since 1.9.0 */ recreateTables() { const $btn = $( '#wpforms-recreate-tables' ); const btnLabel = $btn.text(); const btnWidth = $btn.outerWidth(); const $settings = $btn.parent(); $btn.css( 'width', btnWidth ).prop( 'disabled', true ).text( wpforms_admin.recreating ); const data = { action: 'wpforms_recreate_tables', nonce: wpforms_admin.nonce, }; // Trigger AJAX to recreate tables. $.post( wpforms_admin.ajax_url, data, function( res ) { WPFormsAdmin.debug( res ); // Remove any previous alerts. $settings.find( '.wpforms-notice' ).remove(); if ( res.success ) { $btn.before( '
      ' + res.data.msg + '
      ' ); $btn.hide(); } if ( ! res.success && res.data.msg ) { $btn.before( '
      ' + res.data.msg + '
      ' ); } if ( ! res.success && res.data.debug ) { $btn.before( '
      ' + res.data.debug + '
      ' ); } } ).always( function() { $btn.css( 'width', btnWidth ).prop( 'disabled', false ).text( btnLabel ); } ); }, /** * Begins the process of analyzing the forms. * * This runs for non-Pro installs to check if any of the forms to be * imported contain fields * not currently available. * * @since 1.4.2 */ analyzeForms: function( forms ) { var $processAnalyze = $( '#wpforms-importer-analyze' ); // Display total number of forms we have to import. $processAnalyze.find( '.form-total' ).text( forms.length ); $processAnalyze.find( '.form-current' ).text( '1' ); // Hide the form select section. $( '#wpforms-importer-forms' ).hide(); // Show Analyze status. $processAnalyze.show(); // Create global analyze queue. s.analyzeQueue = forms; s.analyzed = 0; s.analyzeUpgrade = []; s.formIDs = forms; // Analyze the first form in the queue. WPFormsAdmin.analyzeForm(); }, /** * Analyze a single form from the queue. * * @since 1.4.2 */ analyzeForm: function() { var $analyzeSettings = $( '#wpforms-importer-analyze' ), formID = _.first( s.analyzeQueue ), provider = WPFormsAdmin.getQueryString( 'provider' ), data = { action: 'wpforms_import_form_' + provider, analyze: 1, form_id: formID, nonce: wpforms_admin.nonce, }; // Trigger AJAX analyze for this form. $.post( wpforms_admin.ajax_url, data, function( res ) { if ( res.success ) { if ( ! _.isEmpty( res.data.upgrade_plain ) || ! _.isEmpty( res.data.upgrade_omit ) ) { s.analyzeUpgrade.push( { name: res.data.name, fields: _.union( res.data.upgrade_omit, res.data.upgrade_plain ), } ); } // Remove this form ID from the queue. s.analyzeQueue = _.without( s.analyzeQueue, formID ); s.analyzed++; if ( _.isEmpty( s.analyzeQueue ) ) { if ( _.isEmpty( s.analyzeUpgrade ) ) { // Continue to import forms as no Pro fields were found. WPFormsAdmin.importForms( s.formIDs ); } else { // We found Pro fields, so alert the user. var upgradeDetails = wp.template( 'wpforms-importer-upgrade' ); $analyzeSettings.find( '.upgrade' ).append( upgradeDetails( s.analyzeUpgrade ) ); $analyzeSettings.find( '.upgrade' ).show(); $analyzeSettings.find( '.process-analyze' ).hide(); } } else { // Analyze next form in the queue. $analyzeSettings.find( '.form-current' ).text( s.analyzed + 1 ); WPFormsAdmin.analyzeForm(); } } } ); }, /** * Begins the process of importing the forms. * * @since 1.4.2 */ importForms: function( forms ) { var $processSettings = $( '#wpforms-importer-process' ); // Display total number of forms we have to import. $processSettings.find( '.form-total' ).text( forms.length ); $processSettings.find( '.form-current' ).text( '1' ); // Hide the form select and form analyze sections. $( '#wpforms-importer-forms, #wpforms-importer-analyze' ).hide(); // Show processing status. $processSettings.show(); // Create global import queue. s.importQueue = forms; s.imported = 0; // Import the first form in the queue. WPFormsAdmin.importForm(); }, /** * Imports a single form from the import queue. * * @since 1.4.2 */ importForm: function() { var $processSettings = $( '#wpforms-importer-process' ), formID = _.first( s.importQueue ), provider = WPFormsAdmin.getQueryString( 'provider' ), data = { action: 'wpforms_import_form_' + provider, form_id: formID, nonce: wpforms_admin.nonce, }; // Trigger AJAX import for this form. $.post( wpforms_admin.ajax_url, data, function( res ) { if ( res.success ) { var statusUpdate; if ( res.data.error ) { statusUpdate = wp.template( 'wpforms-importer-status-error' ); } else { statusUpdate = wp.template( 'wpforms-importer-status-update' ); } $processSettings.find( '.status' ).prepend( statusUpdate( res.data ) ); $processSettings.find( '.status' ).show(); // Remove this form ID from the queue. s.importQueue = _.without( s.importQueue, formID ); s.imported++; if ( _.isEmpty( s.importQueue ) ) { $processSettings.find( '.process-count' ).hide(); $processSettings.find( '.forms-completed' ).text( s.imported ); $processSettings.find( '.process-completed' ).show(); } else { // Import next form in the queue. $processSettings.find( '.form-current' ).text( s.imported + 1 ); WPFormsAdmin.importForm(); } } } ); }, //--------------------------------------------------------------------// // Upgrades (Tabs view). //--------------------------------------------------------------------// /** * Element bindings for Tools page. * * @since 1.4.3 */ initUpgrades: function() { // Prepare to run the v1.4.3 upgrade routine. $( document ).on( 'click', '#wpforms-upgrade-143 button', function( event ) { event.preventDefault(); var $this = $( this ), buttonWidth = $this.outerWidth(), $status = $( '#wpforms-upgrade-143 .status' ), data = { action: 'wpforms_upgrade_143', nonce: wpforms_admin.nonce, init: true, incomplete: $this.data( 'incomplete' ), }; // Change the button to indicate we are doing initial processing. $this.html( s.iconSpinner ).css( 'width', buttonWidth ).prop( 'disabled', true ); // Get the total number of entries, then kick off the routine. $.post( wpforms_admin.ajax_url, data, function( res ) { if ( res.success ) { // Set initial values. s.upgraded = Number( res.data.upgraded ); s.upgradeTotal = Number( res.data.total ); var percent = Math.round( ( Number( s.upgraded ) / Number( s.upgradeTotal ) ) * 100 ); // Show the status area. $this.remove(); $status.find( '.bar' ).css( 'width', percent + '%' ); $status.show().find( '.total' ).text( s.upgradeTotal ); $status.find( '.current' ).text( s.upgraded ); $status.find( '.percent' ).text( percent + '%' ); // Begin the actual upgrade routine. WPFormsAdmin.upgrade143(); } } ); } ); }, /** * The v1.4.3 entry fields upgrade routine. * * @since 1.4.3 */ upgrade143: function() { var $status = $( '#wpforms-upgrade-143 .status' ), data = { action: 'wpforms_upgrade_143', nonce: wpforms_admin.nonce, upgraded: s.upgraded, }; // Get the total number of entries, then kick off the routine. $.post( wpforms_admin.ajax_url, data, function( res ) { if ( res.success ) { s.upgraded = Number( s.upgraded ) + Number( res.data.count ); var percent = Math.round( ( Number( s.upgraded ) / Number( s.upgradeTotal ) ) * 100 ); // Update progress bar. $status.find( '.bar' ).css( 'width', percent + '%' ); if ( Number( res.data.count ) < 10 ) { // This batch completed the upgrade routine. $status.find( '.progress-bar' ).addClass( 'complete' ); $status.find( '.msg' ).text( wpforms_admin.upgrade_completed ); } else { $status.find( '.current' ).text( s.upgraded ); $status.find( '.percent' ).text( percent + '%' ); // Batch the next round of entries. WPFormsAdmin.upgrade143(); } } } ); }, /** * Element bindings for Flyout Menu. * * @since 1.5.7 */ initFlyoutMenu: function() { // Flyout Menu Elements. var $flyoutMenu = $( '#wpforms-flyout' ); if ( $flyoutMenu.length === 0 ) { return; } var $head = $flyoutMenu.find( '.wpforms-flyout-head' ), $sullie = $head.find( 'img' ), menu = { state: 'inactive', srcInactive: $sullie.attr( 'src' ), srcActive: $sullie.data( 'active' ), }; // Click on the menu head icon. $head.on( 'click', function( e ) { e.preventDefault(); if ( menu.state === 'active' ) { $flyoutMenu.removeClass( 'opened' ); $sullie.attr( 'src', menu.srcInactive ); menu.state = 'inactive'; } else { $flyoutMenu.addClass( 'opened' ); $sullie.attr( 'src', menu.srcActive ); menu.state = 'active'; } } ); // Page elements and other values. var $wpfooter = $( '#wpfooter' ); if ( $wpfooter.length === 0 ) { return; } var $overlap = $( '#wpforms-overview, ' + '#wpforms-entries-list, ' + '#wpforms-tools.wpforms-tools-tab-action-scheduler, ' + '#wpforms-tools.wpforms-tools-tab-logs' ); // Hide menu if scrolled down to the bottom of the page. $( window ).on( 'resize scroll', _.debounce( function( e ) { var wpfooterTop = $wpfooter.offset().top, wpfooterBottom = wpfooterTop + $wpfooter.height(), overlapBottom = $overlap.length > 0 ? $overlap.offset().top + $overlap.height() + 85 : 0, viewTop = $( window ).scrollTop(), viewBottom = viewTop + $( window ).height(); if ( wpfooterBottom <= viewBottom && wpfooterTop >= viewTop && overlapBottom > viewBottom ) { $flyoutMenu.addClass( 'out' ); } else { $flyoutMenu.removeClass( 'out' ); } }, 50 ) ); $( window ).trigger( 'scroll' ); }, /** * Lity improvements. * * @since 1.5.8 */ initLity: function() { // Use `data-lity-srcset` opener's attribute for add srcset to full image in opened lightbox. $( document ).on( 'lity:ready', function( event, instance ) { var $el = instance.element(), $opener = instance.opener(), srcset = typeof $opener !== 'undefined' ? $opener.data( 'lity-srcset' ) : ''; if ( typeof srcset !== 'undefined' && srcset !== '' ) { $el.find( '.lity-content img' ).attr( 'srcset', srcset ); } } ); }, //--------------------------------------------------------------------// // Helper functions. //--------------------------------------------------------------------// /** * Return if the target nodeName is a form element. * * @since 1.4.0 */ isFormTypeNode: function( name ) { name = name || false; if ( 'TEXTAREA' === name || 'INPUT' === name || 'SELECT' === name ) { return true; } return false; }, /** * Get query string in a URL. * * @since 1.3.9 */ getQueryString: function( name ) { var match = new RegExp( '[?&]' + name + '=([^&]*)' ).exec( window.location.search ); return match && decodeURIComponent( match[1].replace( /\+/g, ' ' ) ); }, /** * Debug output helper. * * @since 1.4.4 * @param msg */ debug: function( msg ) { if ( WPFormsAdmin.isDebug() ) { if ( typeof msg === 'object' || msg.constructor === Array ) { console.log( 'WPForms Debug:' ); console.log( msg ); } else { console.log( 'WPForms Debug: ' + msg ); } } }, /** * Is debug mode. * * @since 1.4.4 */ isDebug: function() { return ( window.location.hash && '#wpformsdebug' === window.location.hash ); }, /** * Get Delete / Trash all notice message. * * @since 1.8.5 * * @param {string} type Type of screen. * * @return {Object} Notice Data object. */ getDeleteAllNoticeData: ( type = '' ) => { // Define delete data for spam or trash. if ( [ 'spam', 'trash' ].includes( type ) ) { return { contentAll : wpforms_admin.entry_delete_all_confirm, content : wpforms_admin.entry_delete_n_confirm, action : 'delete', }; } // Otherwise define trash data. return { contentAll : wpforms_admin.entry_trash_all_confirm, content : wpforms_admin.entry_trash_n_confirm, action : 'trash', }; }, /** * Show/hide the right arrow for the scrollable menu on mobile devices. * * @since 1.8.8 */ initScrollableMenu() { $( document ).on( 'wpformsReady', function() { const $menu = $( '.wpforms-admin-tabs' ); if ( ! $menu.length ) { return; } const $lastMenuItem = $menu.find( 'li:last-child' ); // The last item of the menu is not visible - show the right arrow as an indicator of a scrollable menu. if ( ! wpf.isInViewport( $lastMenuItem ) ) { $menu.addClass( 'wpforms-admin-tabs--scrollable' ); } // Listen to `scroll` event in order to hide the right arrow when the last item is visible. $menu.on( 'scroll', function() { $menu.toggleClass( 'wpforms-admin-tabs--scrollable', ! wpf.isInViewport( $lastMenuItem ) ); } ); } ); }, }; WPFormsAdmin.init(); window.WPFormsAdmin = WPFormsAdmin; }( jQuery ) ); assets/js/admin/notices.min.js000064400000001220147400353540012336 0ustar00"use strict";var WPFormsAdminNotices=window.WPFormsAdminNotices||function(i,s){var o={init:function(){s(o.ready)},ready:function(){o.events()},events:function(){s(i).on("click",".wpforms-notice .notice-dismiss, .wpforms-notice .wpforms-notice-dismiss",o.dismissNotice)},dismissNotice:function(i){var o=s(i.target);o.hasClass("wpforms-review-out")||i.preventDefault(),o.closest(".wpforms-notice").remove(),s.post(wpforms_admin_notices.ajax_url,{action:"wpforms_notice_dismiss",nonce:wpforms_admin_notices.nonce,id:(o.closest(".wpforms-notice").attr("id")||"").replace("wpforms-notice-","")})}};return o}(document,(window,jQuery));WPFormsAdminNotices.init();assets/js/admin/payments/single.min.js000064400000004670147400353540014027 0ustar00const WPFormsPaymentsSingle=window.WPFormsPaymentsSingle||function(n,s,a){const i={init(){a(i.ready)},ready(){i.initTooltips(),i.paymentDeletionAlert(),i.actionButtons()},initTooltips(){void 0!==jQuery.fn.tooltipster&&jQuery(".wpforms-single-payment-tooltip").tooltipster({contentCloning:!0,theme:"borderless",contentAsHTML:!0,position:"top",maxWidth:500,multiple:!0,interactive:!0,debug:!1})},paymentDeletionAlert(){a(n).on("click",".wpforms-payment-actions .button-delete",function(n){n.preventDefault();const e=a(this).attr("href");a.confirm({title:wpforms_admin.heads_up,content:wpforms_admin_payments_single.payment_delete_confirm,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action(){s.location=e}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})})},actionButtons(){a(n).on("click",".wpforms-payments-single-action",n=>{const e=a(n.currentTarget).data("gateway"),t=wpforms_admin.single_payment_button_handlers;if(t&&t.includes(e)){n.preventDefault();const s=a(n.currentTarget).data("action-id"),o=a(n.currentTarget).data("action-type");a.confirm({title:wpforms_admin.heads_up,content:i.strings[o].confirm,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:()=>{i.sendActionRequest(s,e,o)}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}})},sendActionRequest(n,e,t){a.ajax({url:wpforms_admin.ajax_url,type:"POST",data:{action:"wpforms_"+e+"_payments_"+t,payment_id:n,nonce:wpforms_admin.nonce},dataType:"json",success:n=>{n.success?a.alert({title:wpforms_admin.success,content:i.strings[t].success,icon:"fa fa-check-circle",type:"green",buttons:{confirm:{text:wpforms_admin.close_refresh,btnClass:"btn-confirm",keys:["enter"],action:()=>{s.location.reload()}}}}):i.failedResponseAlert(n?.data?.modal_msg||"")},error:()=>{i.failedResponseAlert()}})},strings:{refund:{confirm:wpforms_admin_payments_single.payment_refund_confirm,success:wpforms_admin_payments_single.payment_refund_success},cancel:{confirm:wpforms_admin_payments_single.payment_cancel_confirm,success:wpforms_admin_payments_single.payment_cancel_success}},failedResponseAlert(n=""){a.alert({title:wpforms_admin.heads_up,content:""===n?wpforms_admin.try_again:n,icon:"fa fa-exclamation-circle",type:"red",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}};return i}(document,window,jQuery);WPFormsPaymentsSingle.init();assets/js/admin/payments/overview.min.js000064400000024441147400353540014412 0ustar00const WPFormsPaymentsOverview=window.WPFormsPaymentsOverview||function(e,t,i,r,a){const o={},l={chart:null,datepicker:null,locale:a.locale,currency:a.currency,currencyDecimals:a.decimals,nonce:a.nonce,data:[],type:1===a.settings.graph_style?"bar":"line",delimiter:a.delimiter,tooltipFormat:a.date_format,get currentPageUri(){return new URL(a.page_uri)},classNames:{hide:"wpforms-hide",ready:"is-ready",fetching:"doing-ajax",selected:"is-selected",calculated:"is-calculated"},timespan:"",report:a.active_report,isAmount:!1,get colors(){var e="line"===this.type;return{total_payments:{hoverBorderColor:"#055f9a",hoverBackgroundColor:"#055f9a",borderColor:"#056aab",backgroundColor:e?"#e6f0f7":"#056aab"},total_sales:{hoverBorderColor:"#00831e",hoverBackgroundColor:"#00831e",borderColor:"#008a20",backgroundColor:e?"#e3f3e4":"#008a20"},total_refunded:{hoverBorderColor:"#373e45",hoverBackgroundColor:"#373e45",borderColor:"#50575e",backgroundColor:e?"#ebebec":"#50575e"},default:{hoverBorderColor:"#cd6622",hoverBackgroundColor:"#cd6622",borderColor:"#e27730",backgroundColor:e?"#fcf1ea":"#e27730"}}},get i18n(){return a.i18n},get xAxesDisplayFormat(){var e;return!this.timespan.length||(e=this.timespan.split(this.delimiter),!Array.isArray(e))||2!==e.length||moment(e[0]).format("YYYY")===moment(e[1]).format("YYYY")?"MMM D":"MMM D YYYY"},get amountFormatter(){return new Intl.NumberFormat(this.locale,{style:"currency",useGrouping:!0,currencyDisplay:"narrowSymbol",currency:this.currency,minimumFractionDigits:this.currencyDecimals,maximumFractionDigits:this.currencyDecimals})},get datasetLabel(){var e=i(`[data-stats=${this.report}]`);return e.length?e.find(".statcard-label").text():this.i18n?.label},get settings(){var e=i("body").hasClass("rtl");return{type:this.type,data:{labels:[],datasets:[{data:[],label:"",borderWidth:2,pointRadius:4,pointBorderWidth:1,maxBarThickness:100,...{pointBackgroundColor:"#ffffff",...this.colors[this.report]||this.colors.default}}]},options:{layout:{padding:{left:15,right:19,top:25,bottom:9}},scales:{xAxes:[{type:"time",offset:"bar"===this.type,time:{unit:"day",tooltipFormat:this.tooltipFormat,displayFormats:{day:this.xAxesDisplayFormat}},distribution:"series",ticks:{reverse:e,beginAtZero:!0,padding:10,fontColor:"#a7aaad",labelOffset:10,fontSize:13,minRotation:25,maxRotation:25,callback(e,t,a){var r=Math.floor(a.length/7);return r<1||(a.length-t-1)%r==0?e:void 0}}}],yAxes:[{ticks:{beginAtZero:!0,maxTicksLimit:6,padding:20,fontColor:"#a7aaad",fontSize:13,callback:e=>this.isAmount?this.amountFormatter.format(e):Math.floor(e)===e?e:void 0}}]},elements:{line:{tension:0}},animation:{duration:0},hover:{animationDuration:0},legend:{display:!1},tooltips:{displayColors:!1,rtl:e,callbacks:{label:({yLabel:e})=>{let t=this.datasetLabel+" ";return this.isAmount?t+=this.amountFormatter.format(e):t+=e}}},responsiveAnimationDuration:0,maintainAspectRatio:!1}}}},n={init(){i(n.ready)},ready(){n.setup(),n.bindEvents(),n.initDatePicker(),n.initChart(),n.initMultiSelect()},setup(){o.$document=i(e),o.$wrapper=i(".wpforms-payments-wrap-payments"),o.$form=i("#wpforms-payments-table"),o.$spinner=i(".wpforms-overview-chart .spinner"),o.$canvas=i("#wpforms-payments-overview-canvas"),o.$filterBtn=i("#wpforms-datepicker-popover-button"),o.$datepicker=i("#wpforms-payments-overview-datepicker"),o.$filterForm=i(".wpforms-overview-top-bar-filter-form"),o.$activeStat=o.$filterForm.find('input[name="statcard"]'),o.$table=i(".wpforms-table-list"),o.$notice=i(".wpforms-overview-chart-notice"),o.$reports=i(".wpforms-payments-overview-reports"),o.$multiSelect=i(".wpforms-multiselect")},bindEvents(){o.$document.on("click",{selectors:[".wpforms-datepicker-popover",".wpforms-dash-widget-settings-menu"]},n.handleOnClickOutside),o.$wrapper.on("submit",".wpforms-overview-top-bar-filter-form",n.handleOnSubmitDatepicker).on("submit","#wpforms-payments-table",n.handleOnSubmitOverviewTable).on("click","#doaction",n.handleOnBulkAction).on("click",'.wpforms-overview-top-bar-filter-form [type="reset"]',n.handleOnResetDatepicker).on("change",'.wpforms-overview-top-bar-filter-form [type="radio"]',n.handleOnUpdateDatepicker).on("click",".wpforms-payments-overview-reports button",n.handleOnChangeStatCard).on("click",".wpforms-dash-widget-settings-menu-save",n.handleOnSaveSettings).on("click","#wpforms-payments-mode-toggle",n.handleOnToggleMode).on("click","#wpforms-dash-widget-settings-button",{selector:".wpforms-dash-widget-settings-menu",hide:".wpforms-datepicker-popover"},n.handleOnToggle).on("click","#wpforms-datepicker-popover-button",{selector:".wpforms-datepicker-popover",hide:".wpforms-dash-widget-settings-menu"},n.handleOnToggle)},initDatePicker(){o.$datepicker.length&&(l.timespan=o.$datepicker.val(),l.datepicker=flatpickr(o.$datepicker,{mode:"range",inline:!0,allowInput:!1,enableTime:!1,clickOpens:!1,altInput:!0,altFormat:"M j, Y",dateFormat:"Y-m-d",locale:{...flatpickr.l10ns[l.locale]||{},rangeSeparator:l.delimiter},onChange(e,t,a){var r=o.$filterForm.find('input[value="custom"]');r.prop("checked",!0),n.selectDatepickerChoice(r.parent()),t&&o.$filterBtn.text(a.altInput.value)}}),this.handleOnUpdateDatepicker({},o.$filterForm.find('input[value="custom"]').prop("checked")))},handleOnSubmitDatepicker(){i(this).find('input[type="radio"]').attr("name",""),n.hideElm(o.$filterBtn.next())},handleOnBulkAction(e){e.preventDefault();var t,e=o.$wrapper.find('select[name="action"]').val();["trash","delete"].includes(e)&&(e=o.$wrapper.find('input[name="payment_id[]"]:checked')).length&&e.closest("tr").hasClass("subscription-has-renewal")?({subscription_delete_confirm:e,delete_button:t}=l["i18n"],i.confirm({title:wpforms_admin.heads_up,content:e,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:t,btnClass:"btn-confirm",keys:["enter"],action(){o.$form.submit()}},cancel:{text:wpforms_admin.cancel,keys:["esc"],action(){o.$form.trigger("reset")}}}})):o.$form.submit()},handleOnSubmitOverviewTable(){o.$multiSelect.length&&i('.wpforms-multiselect-checkbox-input[value=""]').removeAttr("name")},handleOnResetDatepicker(e){e.preventDefault(),o.$filterForm.get(0).reset(),n.hideElm(o.$filterBtn.next()),n.handleOnUpdateDatepicker()},handleOnUpdateDatepicker(e=0,t=!1){var a=o.$filterForm.find("input:checked"),r=a.parent(),a=t?o.$datepicker:a,s=a.val().split(l.delimiter);o.$filterBtn.text(t?a.next().val():r.text()),n.selectDatepickerChoice(r),Array.isArray(s)&&2===s.length?l.datepicker.setDate(s):l.datepicker.clear()},initChart(){var e,t;o.$canvas.length&&(e=o.$canvas.get(0).getContext("2d"),t=o.$reports.find("."+l.classNames.selected),l.report=t.data("stats"),l.isAmount=t.hasClass("is-amount"),l.chart=new Chart(e,l.settings),this.updateChartByReport())},initMultiSelect(){o.$multiSelect.length&&t.WPFormsMultiSelectCheckbox&&o.$multiSelect.each(function(){new t.WPFormsMultiSelectCheckbox(this,{showMask:!0,delimiter:"|"}).init()})},handleOnChangeStatCard(e){e.preventDefault();e=i(this);e.hasClass(l.classNames.selected)||e.hasClass("disabled")||(n.spinner(),l.report=e.data("stats"),l.isAmount=e.hasClass("is-amount"),o.$reports.find("button").removeClass(l.classNames.selected),e.addClass(l.classNames.selected),o.$activeStat.length||(o.$filterForm.append(''),o.$activeStat=o.$filterForm.find('input[name="statcard"]')),o.$activeStat.val(l.report),n.updateChartByReport())},handleOnSaveSettings(e){e.preventDefault();var e=i(this).closest(".wpforms-dash-widget-settings-container").find('input[name="wpforms-style"]:checked').val(),t=(l.type=1===Number(e)?"bar":"line",Object.assign({},l.settings)),a=(t.data.labels=l.chart.data.labels,t.data.datasets[0].data=l.chart.data.datasets[0].data,l.chart.destroy(),o.$canvas.get(0).getContext("2d"));l.chart=new Chart(a,t),i.post(r,{graphStyle:e,_ajax_nonce:l.nonce,action:"wpforms_payments_overview_save_chart_preference_settings"}).done(function(){o.$wrapper.find(".wpforms-dash-widget-settings-menu").hide()})},handleOnToggleMode(){var e=l["currentPageUri"];e.searchParams.set("mode",this.checked?"test":"live"),t.location.href=e.href},handleOnToggle(e){e.preventDefault(),e.stopPropagation();const{selector:t,hide:a}=e["data"];o.$wrapper.find(t).toggle(0,function(){var e=i(t);e.attr("aria-expanded",e.is(":visible"))}),n.hideElm(o.$wrapper.find(a))},handleOnClickOutside(e){const{target:a,data:{selectors:t}}=e;i.each(t,function(e,t){i(a).closest(t+":visible").length||n.hideElm(o.$wrapper.find(t))})},processDatasetData(e){const r=[],s=[];if(i.isPlainObject(e)&&0 { // Update the scales if the dataset returned includes price amounts. if ( this.isAmount ) { return this.amountFormatter.format( value ); } // Make sure the tick value has no decimals. if ( Math.floor( value ) === value ) { return value; } }, }, }, ], }, elements: { line: { tension: 0, }, }, animation: { duration: 0, }, hover: { animationDuration: 0, }, legend: { display: false, }, tooltips: { displayColors: false, rtl: isRTL, callbacks: { label: ( { yLabel: value } ) => { let label = `${ this.datasetLabel } `; // Update the scales if the dataset returned includes price amounts. if ( this.isAmount ) { label += this.amountFormatter.format( value ); return label; } label += value; return label; }, }, }, responsiveAnimationDuration: 0, maintainAspectRatio: false, }, }; }, }; /** * Public functions and properties. * * @since 1.8.2 */ const app = { /** * Start the engine. * * @since 1.8.2 */ init() { $( app.ready ); }, /** * Document ready. * * @since 1.8.2 */ ready() { app.setup(); app.bindEvents(); app.initDatePicker(); app.initChart(); app.initMultiSelect(); }, /** * Setup. Prepare some variables. * * @since 1.8.2 */ setup() { // Cache DOM elements. el.$document = $( document ); el.$wrapper = $( '.wpforms-payments-wrap-payments' ); el.$form = $( '#wpforms-payments-table' ); el.$spinner = $( '.wpforms-overview-chart .spinner' ); el.$canvas = $( '#wpforms-payments-overview-canvas' ); el.$filterBtn = $( '#wpforms-datepicker-popover-button' ); el.$datepicker = $( '#wpforms-payments-overview-datepicker' ); el.$filterForm = $( '.wpforms-overview-top-bar-filter-form' ); el.$activeStat = el.$filterForm.find( 'input[name="statcard"]' ); el.$table = $( '.wpforms-table-list' ); el.$notice = $( '.wpforms-overview-chart-notice' ); el.$reports = $( '.wpforms-payments-overview-reports' ); el.$multiSelect = $( '.wpforms-multiselect' ); }, /** * Bind events. * * @since 1.8.2 */ bindEvents() { el.$document .on( 'click', { selectors: [ '.wpforms-datepicker-popover', '.wpforms-dash-widget-settings-menu' ] }, app.handleOnClickOutside ); el.$wrapper .on( 'submit', '.wpforms-overview-top-bar-filter-form', app.handleOnSubmitDatepicker ) .on( 'submit', '#wpforms-payments-table', app.handleOnSubmitOverviewTable ) .on( 'click', '#doaction', app.handleOnBulkAction ) .on( 'click', '.wpforms-overview-top-bar-filter-form [type="reset"]', app.handleOnResetDatepicker ) .on( 'change', '.wpforms-overview-top-bar-filter-form [type="radio"]', app.handleOnUpdateDatepicker ) .on( 'click', '.wpforms-payments-overview-reports button', app.handleOnChangeStatCard ) .on( 'click', '.wpforms-dash-widget-settings-menu-save', app.handleOnSaveSettings ) .on( 'click', '#wpforms-payments-mode-toggle', app.handleOnToggleMode ) .on( 'click', '#wpforms-dash-widget-settings-button', { selector: '.wpforms-dash-widget-settings-menu', hide: '.wpforms-datepicker-popover' }, app.handleOnToggle ) .on( 'click', '#wpforms-datepicker-popover-button', { selector: '.wpforms-datepicker-popover', hide: '.wpforms-dash-widget-settings-menu' }, app.handleOnToggle ); }, /** * Create an instance of "flatpickr". * * @since 1.8.2 */ initDatePicker() { if ( ! el.$datepicker.length ) { return; } vars.timespan = el.$datepicker.val(); vars.datepicker = flatpickr( el.$datepicker, { mode: 'range', inline: true, allowInput: false, enableTime: false, clickOpens: false, altInput: true, altFormat: 'M j, Y', dateFormat: 'Y-m-d', locale: { // Localized per-instance, if applicable. ...flatpickr.l10ns[ vars.locale ] || {}, rangeSeparator: vars.delimiter, }, onChange( selectedDates, dateStr, instance ) { // Immediately after a user interacts with the datepicker, ensure that the "Custom" option is chosen. const $custom = el.$filterForm.find( 'input[value="custom"]' ); $custom.prop( 'checked', true ); app.selectDatepickerChoice( $custom.parent() ); if ( dateStr ) { // Update filter button label when date range specified. el.$filterBtn.text( instance.altInput.value ); } }, } ); // Determine if a custom date range was provided or selected. this.handleOnUpdateDatepicker( {}, el.$filterForm.find( 'input[value="custom"]' ).prop( 'checked' ) ); }, /** * Callback which is called when the filter form gets submitted. * * @since 1.8.2 */ handleOnSubmitDatepicker() { // Exclude radio inputs from the form submission. $( this ).find( 'input[type="radio"]' ).attr( 'name', '' ); // Remove the popover from the view. // When the dropdown is closed, aria-expended="false". app.hideElm( el.$filterBtn.next() ); }, /** * Callback for the bulk action. * * @since 1.8.4 * * @param {Object} event An event which takes place in the DOM. */ handleOnBulkAction( event ) { event.preventDefault(); // Get the selected value for the name="action" select element. const $action = el.$wrapper.find( 'select[name="action"]' ); const selectedAction = $action.val(); const actionsToExclude = [ 'trash', 'delete' ]; // Leave early if delete/trash is not selected. // Trash is happening when you move payment to the trash. Delete is when you delete it permanently. if ( ! actionsToExclude.includes( selectedAction ) ) { el.$form.submit(); return; } // Get the selected checkboxes. const $checkboxes = el.$wrapper.find( 'input[name="payment_id[]"]:checked' ); // Leave early if no checkboxes are selected. if ( ! $checkboxes.length ) { el.$form.submit(); return; } // Determine whether the selected payment has a renewal. const hasRenewal = $checkboxes.closest( 'tr' ).hasClass( 'subscription-has-renewal' ); if ( ! hasRenewal ) { el.$form.submit(); return; } const { i18n: { subscription_delete_confirm: message, delete_button: buttonText } } = vars; // Warn the user that the selected payment has a renewal. $.confirm( { title: wpforms_admin.heads_up, content: message, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: buttonText, btnClass: 'btn-confirm', keys: [ 'enter' ], action() { el.$form.submit(); }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], action() { el.$form.trigger( 'reset' ); }, }, }, } ); }, /** * Callback which is called when the overview table gets submitted. * * @since 1.8.4 */ handleOnSubmitOverviewTable() { // Leave early if the multi-select element is not present. if ( ! el.$multiSelect.length ) { return; } // Prevent empty or unspecified values from being submitted. // This is to avoid having empty values in the $_GET array for aesthetic reasons. $( '.wpforms-multiselect-checkbox-input[value=""]' ).removeAttr( 'name' ); }, /** * Callback which is called when the datepicker "Cancel" button clicked. * * @since 1.8.2 * * @param {Object} event An event which takes place in the DOM. */ handleOnResetDatepicker( event ) { event.preventDefault(); // To return the form to its original state, manually reset it. el.$filterForm.get( 0 ).reset(); // Remove the popover from the view. // When the dropdown is closed, aria-expended="false". app.hideElm( el.$filterBtn.next() ); app.handleOnUpdateDatepicker(); }, /** * Callback which is called when the filter form elements change. * * @since 1.8.2 * * @param {Object} event An event which takes place in the DOM. * @param {boolean} isCustomDates Determine whether a custom date range is provided. */ // eslint-disable-next-line no-unused-vars handleOnUpdateDatepicker( event = {}, isCustomDates = false ) { const $selected = el.$filterForm.find( 'input:checked' ); const $parent = $selected.parent(); const $target = isCustomDates ? el.$datepicker : $selected; const dates = $target.val().split( vars.delimiter ); el.$filterBtn.text( isCustomDates ? $target.next().val() : $parent.text() ); app.selectDatepickerChoice( $parent ); if ( Array.isArray( dates ) && dates.length === 2 ) { // Sets the current selected date(s). vars.datepicker.setDate( dates ); return; } vars.datepicker.clear(); // Reset the datepicker. }, /** * Create an instance of chart. * * @since 1.8.2 */ initChart() { if ( ! el.$canvas.length ) { return; } const elm = el.$canvas.get( 0 ).getContext( '2d' ); const $selected = el.$reports.find( `.${ vars.classNames.selected }` ); vars.report = $selected.data( 'stats' ); vars.isAmount = $selected.hasClass( 'is-amount' ); vars.chart = new Chart( elm, vars.settings ); this.updateChartByReport(); }, /** * Create instances of multi-select. * * @since 1.8.4 */ initMultiSelect() { // Check if multi-select elements and required class are present if ( ! el.$multiSelect.length || ! window.WPFormsMultiSelectCheckbox ) { return; } // Initialize each multi-select element. el.$multiSelect.each( function() { const multiSelectCheckbox = new window.WPFormsMultiSelectCheckbox( this, { showMask: true, delimiter: '|', } ); multiSelectCheckbox.init(); } ); }, /** * Updates main chart stats when user switches between different stat card. * * @since 1.8.2 * * @param {Object} event An event which takes place in the DOM. */ handleOnChangeStatCard( event ) { event.preventDefault(); const $this = $( this ); // If the already selected stat card is clicked, don't process the dataset. if ( $this.hasClass( vars.classNames.selected ) || $this.hasClass( 'disabled' ) ) { return; } app.spinner(); vars.report = $this.data( 'stats' ); vars.isAmount = $this.hasClass( 'is-amount' ); el.$reports.find( 'button' ).removeClass( vars.classNames.selected ); $this.addClass( vars.classNames.selected ); // If the `statcard` field is not present, create it. if ( ! el.$activeStat.length ) { // Append a hidden input field for the statcard. el.$filterForm.append( '' ); // Update the reference to the activeStat element. el.$activeStat = el.$filterForm.find( 'input[name="statcard"]' ); } // Update the value of the statcard field with the selected report. el.$activeStat.val( vars.report ); // Update the chart stats with consideration to possible form stats being viewed. app.updateChartByReport(); }, /** * Save the user's preferred graph style and color scheme. * * @since 1.8.2 * * @param {Object} event An event which takes place in the DOM. */ handleOnSaveSettings( event ) { event.preventDefault(); const $wrapper = $( this ).closest( '.wpforms-dash-widget-settings-container' ); const graphStyle = $wrapper.find( 'input[name="wpforms-style"]:checked' ).val(); vars.type = Number( graphStyle ) === 1 ? 'bar' : 'line'; const options = Object.assign( {}, vars.settings ); options.data.labels = vars.chart.data.labels; options.data.datasets[ 0 ].data = vars.chart.data.datasets[ 0 ].data; vars.chart.destroy(); const elm = el.$canvas.get( 0 ).getContext( '2d' ); vars.chart = new Chart( elm, options ); $.post( ajaxurl, { graphStyle, _ajax_nonce: vars.nonce, action: 'wpforms_payments_overview_save_chart_preference_settings', } ).done( function() { el.$wrapper.find( '.wpforms-dash-widget-settings-menu' ).hide(); } ); }, /** * Callback which is called when the "Toggle Mode" button clicked. * * @since 1.8.2 */ handleOnToggleMode() { const { currentPageUri: url } = vars; url.searchParams.set( 'mode', this.checked ? 'test' : 'live' ); window.location.href = url.href; }, /** * Display or hide the matched elements. * * @since 1.8.2 * * @param {Object} event An event which takes place in the DOM. */ handleOnToggle( event ) { event.preventDefault(); event.stopPropagation(); const { data: { selector, hide } } = event; // Toggle the visibility of the matched element. el.$wrapper.find( selector ).toggle( 0, function() { const $selector = $( selector ); // When the dropdown is open, aria-expended="true". $selector.attr( 'aria-expanded', $selector.is( ':visible' ) ); } ); // In case the other popover is open, let’s hide it to avoid clutter. // When the dropdown is closed, aria-expended="false". app.hideElm( el.$wrapper.find( hide ) ); }, /** * Hide the matched elements when clicked outside their container. * * @since 1.8.2 * * @param {Object} event An event which takes place in the DOM. */ handleOnClickOutside( event ) { const { target, data: { selectors } } = event; $.each( selectors, function( index, selector ) { if ( ! $( target ).closest( `${ selector }:visible` ).length ) { app.hideElm( el.$wrapper.find( selector ) ); } } ); }, /** * Either fills the container with placeholder data or determines * whether actual data is available to process the chart dataset. * * @since 1.8.2 * * @param {Object} data Chart dataset data. * * @return {Object} Labels and dataset data object. */ processDatasetData( data ) { const labels = []; const datasets = []; if ( $.isPlainObject( data ) && Object.keys( data ).length > 0 ) { el.$notice.addClass( vars.classNames.hide ); $.each( data || [], function( index, item ) { const date = moment( item.day ); labels.push( date ); datasets.push( { t: date, y: item?.count || 0, } ); } ); return { labels, datasets }; } const { i18n: { no_dataset: placeholderText } } = vars; // If there is a placeholder text for the current report, use it. if ( placeholderText?.[ vars.report ] ) { el.$notice.find( 'h2' ).text( placeholderText[ vars.report ] ); } el.$notice.removeClass( vars.classNames.hide ); let date; const end = moment().startOf( 'day' ); const days = 30; const minY = 5; const maxY = 20; for ( let i = 1; i <= days; i++ ) { date = end.clone().subtract( i, 'days' ); labels.push( date ); datasets.push( { t: date, y: Math.floor( Math.random() * ( maxY - minY + 1 ) ) + minY, // NOSONAR not used in secure contexts. } ); } return { labels, datasets }; }, /** * Populate the chart with a fresh set of dataset data. * * @since 1.8.2 * * @param {Array} data Chart dataset data. */ updateChart( data ) { const { labels, datasets } = app.processDatasetData( data || [] ); vars.chart.data.labels = labels; vars.chart.data.datasets[ 0 ] = vars.settings.data.datasets[ 0 ]; vars.chart.data.datasets[ 0 ].data = datasets; vars.chart.update(); el.$spinner.addClass( vars.classNames.hide ); }, /** * Fetch and process the chart dataset data for the selected stat card. * * @since 1.8.2 * * @param {Object} args Optional. Additional arguments provided for the Ajax request. */ updateChartByReport( args ) { // Cache dataset of payments for the chart stats. if ( vars.report && Object.hasOwn( vars.data, vars.report ) ) { app.updateChart( vars.data[ vars.report ]?.data || [] ); return; } // Add a class name indicating that the chart is fetching data. // This is mainly to avoid fast clicking on the stat cards to avoid multiple Ajax requests. el.$reports.addClass( vars.classNames.fetching ); $.post( ajaxurl, $.extend( {}, { report: vars.report, dates: vars.timespan, _ajax_nonce: vars.nonce, action: 'wpforms_payments_overview_refresh_chart_dataset_data', }, args ), function( { data } ) { vars.data = Object.assign( { [ vars.report ]: data }, vars.data ); app.updateChart( data?.data || [] ); app.updateReports( data?.reports || {} ); } ).done( function() { el.$reports.addClass( vars.classNames.ready ); el.$reports.removeClass( vars.classNames.fetching ); } ); }, /** * Reflect payments summary stats in their corresponding areas (elements). * * @since 1.8.2 * * @param {Object} reports Reports summary stats queried from the database. */ updateReports( reports ) { // Bail early, in case given reports object is empty. if ( $.isEmptyObject( reports ) ) { return; } el.$reports .find( 'li' ).each( // eslint-disable-next-line complexity function() { const $this = $( this ); const $button = $this.find( 'button' ); // Skip iterating over stat cards that are disabled. if ( $button.hasClass( 'disabled' ) ) { return true; // This is the same as 'continue'. } const stats = $button.data( 'stats' ); const value = reports[ stats ] || 0; const delta = Number( reports[ `${ stats }_delta` ] ) || 0; const $value = $this.find( '.statcard-value' ); const $delta = $this.find( '.statcard-delta' ); $value.addClass( vars.classNames.calculated ).html( value ); $delta.addClass( vars.classNames.calculated ).html( Math.abs( delta ) ); if ( delta !== 0 ) { $delta.addClass( Number( delta > 0 ) ? 'is-upward' : 'is-downward' ); } // Skip iterating over stat cards that do not represent an amount. if ( ! $button.hasClass( 'is-amount' ) ) { return; // This is the same as 'continue'. } // Add a title attribute to the stat card value if it does not have one. $value.attr( 'title', $value.text() ); } ); }, /** * Pick an option (given) from the datepicker’s choices. * * @since 1.8.2 * * @param {Object} $this Reference to the DOM element. */ selectDatepickerChoice( $this ) { el.$filterForm.find( 'label' ).removeClass( vars.classNames.selected ); $this.addClass( vars.classNames.selected ); }, /** * Signal to users that the processing of their request is underway and will soon complete. * * @since 1.8.2 */ spinner() { el.$spinner.removeClass( vars.classNames.hide ); }, /** * Hides the given DOM element. * * @since 1.8.2 * * @param {Object} $elm Reference to the DOM element. */ hideElm( $elm ) { $elm.attr( 'aria-expanded', 'false' ).hide(); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery, ajaxurl, wpforms_admin_payments_overview ) ); // Initialize. WPFormsPaymentsOverview.init(); assets/js/admin/payments/single.js000064400000011577147400353540013251 0ustar00/* global wpforms_admin, wpforms_admin_payments_single */ /** * WPForms Single Payment View page. * * @since 1.8.2 */ const WPFormsPaymentsSingle = window.WPFormsPaymentsSingle || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.8.2 * * @type {Object} */ const app = { /** * Start the engine. * * @since 1.8.2 */ init() { $( app.ready ); }, /** * Document ready. * * @since 1.8.2 */ ready() { app.initTooltips(); app.paymentDeletionAlert(); app.actionButtons(); }, /** * Initialize WPForms admin area tooltips. * * @since 1.8.2 */ initTooltips() { if ( typeof jQuery.fn.tooltipster === 'undefined' ) { return; } jQuery( '.wpforms-single-payment-tooltip' ).tooltipster( { contentCloning: true, theme: 'borderless', contentAsHTML: true, position: 'top', maxWidth: 500, multiple: true, interactive: true, debug: false, } ); }, /** * Alert user before deleting payment. * * @since 1.8.2 */ paymentDeletionAlert() { $( document ).on( 'click', '.wpforms-payment-actions .button-delete', function( event ) { event.preventDefault(); const url = $( this ).attr( 'href' ); // Trigger alert modal to confirm. $.confirm( { title: wpforms_admin.heads_up, content: wpforms_admin_payments_single.payment_delete_confirm, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action() { window.location = url; }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, } ); } ); }, /** * Handle payment actions. * * @since 1.8.4 */ actionButtons() { $( document ).on( 'click', '.wpforms-payments-single-action', ( event ) => { const gateway = $( event.currentTarget ).data( 'gateway' ), registeredHandlers = wpforms_admin.single_payment_button_handlers; if ( ! registeredHandlers || ! registeredHandlers.includes( gateway ) ) { return; } event.preventDefault(); const paymentId = $( event.currentTarget ).data( 'action-id' ), actionType = $( event.currentTarget ).data( 'action-type' ); $.confirm( { title: wpforms_admin.heads_up, content: app.strings[ actionType ].confirm, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: () => { app.sendActionRequest( paymentId, gateway, actionType ); }, }, cancel: { text: wpforms_admin.cancel, keys: [ 'esc' ], }, }, } ); } ); }, /** * Send action request to server. * * @since 1.8.4 * * @param {number} paymentId Payment ID. * @param {string} gateway Payment gateway. * @param {string} actionType Action type. */ sendActionRequest( paymentId, gateway, actionType ) { $.ajax( { url: wpforms_admin.ajax_url, type: 'POST', data: { action: 'wpforms_' + gateway + '_payments_' + actionType, payment_id: paymentId, // eslint-disable-line camelcase nonce: wpforms_admin.nonce, }, dataType: 'json', success: ( response ) => { if ( response.success ) { $.alert( { title: wpforms_admin.success, content: app.strings[ actionType ].success, icon: 'fa fa-check-circle', type: 'green', buttons: { confirm: { text: wpforms_admin.close_refresh, btnClass: 'btn-confirm', keys: [ 'enter' ], action: () => { window.location.reload(); }, }, }, } ); } else { app.failedResponseAlert( response?.data?.modal_msg || '' ); } }, error: () => { app.failedResponseAlert(); }, } ); }, /** * Strings. * * @since 1.8.4 */ strings : { refund: { confirm: wpforms_admin_payments_single.payment_refund_confirm, success: wpforms_admin_payments_single.payment_refund_success, }, cancel: { confirm: wpforms_admin_payments_single.payment_cancel_confirm, success: wpforms_admin_payments_single.payment_cancel_success, }, }, /** * Alert user when refunding payment failed. * * @since 1.8.4 * * @param {string} message Modal message. */ failedResponseAlert( message = '' ) { $.alert( { title: wpforms_admin.heads_up, content: message === '' ? wpforms_admin.try_again : message, icon: 'fa fa-exclamation-circle', type: 'red', buttons: { confirm: { text: wpforms_admin.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, }; return app; }( document, window, jQuery ) ); // Initialize. WPFormsPaymentsSingle.init(); assets/js/admin/splash/modal.js000064400000005055147400353540012510 0ustar00/* global wpforms_splash_data, ajaxurl */ /** * WPForms What's New. * * @since 1.8.7 */ const WPSplash = window.WPSplash || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.8.7 * * @type {Object} */ const app = { /** * Initialize. * * @since 1.8.7 */ init() { $( app.ready ); }, /** * Document ready. * * @since 1.8.7 */ ready() { app.events(); if ( wpforms_splash_data.triggerForceOpen ) { app.openModal(); } }, /** * Events. * * @since 1.8.7 */ events() { $( document ) .on( 'click', '.wpforms-splash-modal-open', function( e ) { e.preventDefault(); app.openModal(); } ); }, /** * Open the modal. * * @since 1.8.7 */ openModal() { $.alert( { title: false, content: wp.template( 'wpforms-splash-modal-content' )(), icon: false, closeIcon: true, boxWidth: '1000px', theme: 'modern', useBootstrap: false, scrollToPreviousElement: false, buttons: false, backgroundDismiss: true, offsetTop: 50, offsetBottom: 50, animation: 'opacity', closeAnimation: 'opacity', animateFromElement: false, onOpenBefore() { const scrollbarWidth = ( window.innerWidth - document.body.clientWidth ) + 'px'; $( 'body' ) .addClass( 'wpforms-splash-modal' ) .css( '--wpforms-body-scrollbar-width', scrollbarWidth ); $( '.wpforms-challenge-popup-container' ).addClass( 'wpforms-invisible' ); setTimeout( () => { if ( navigator.userAgent.includes( 'Safari' ) && ! navigator.userAgent.includes( 'Chrome' ) ) { $( 'html, body' ).animate( { scrollTop: 0 }, 0 ); } $( '.jconfirm-box-container' ) .css( 'padding-top', '50px' ) .animate( { opacity: 1 }, 30 ); }, 0 ); }, onOpen() { $( '.jconfirm' ).css( 'bottom', 0 ); $( '.wpforms-dash-widget-welcome-block' ).remove(); app.dismissDashboardWidgetBanner(); }, onDestroy() { $( 'body' ) .removeClass( 'wpforms-splash-modal' ) .css( '--wpforms-body-scrollbar-width', null ); }, } ); }, /** * Dismiss the dashboard widget banner. * * @since 1.9.0 */ dismissDashboardWidgetBanner() { const data = { _wpnonce: wpforms_splash_data.nonce, action : 'wpforms_dash_widget_save_widget_meta', meta: 'hide_welcome_block', value: 1, }; $.post( ajaxurl, data ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); WPSplash.init(); assets/js/admin/splash/modal.min.js000064400000002644147400353540013273 0ustar00const WPSplash=window.WPSplash||function(e,s,a){const n={init(){a(n.ready)},ready(){n.events(),wpforms_splash_data.triggerForceOpen&&n.openModal()},events(){a(e).on("click",".wpforms-splash-modal-open",function(o){o.preventDefault(),n.openModal()})},openModal(){a.alert({title:!1,content:wp.template("wpforms-splash-modal-content")(),icon:!1,closeIcon:!0,boxWidth:"1000px",theme:"modern",useBootstrap:!1,scrollToPreviousElement:!1,buttons:!1,backgroundDismiss:!0,offsetTop:50,offsetBottom:50,animation:"opacity",closeAnimation:"opacity",animateFromElement:!1,onOpenBefore(){var o=s.innerWidth-e.body.clientWidth+"px";a("body").addClass("wpforms-splash-modal").css("--wpforms-body-scrollbar-width",o),a(".wpforms-challenge-popup-container").addClass("wpforms-invisible"),setTimeout(()=>{navigator.userAgent.includes("Safari")&&!navigator.userAgent.includes("Chrome")&&a("html, body").animate({scrollTop:0},0),a(".jconfirm-box-container").css("padding-top","50px").animate({opacity:1},30)},0)},onOpen(){a(".jconfirm").css("bottom",0),a(".wpforms-dash-widget-welcome-block").remove(),n.dismissDashboardWidgetBanner()},onDestroy(){a("body").removeClass("wpforms-splash-modal").css("--wpforms-body-scrollbar-width",null)}})},dismissDashboardWidgetBanner(){var o={_wpnonce:wpforms_splash_data.nonce,action:"wpforms_dash_widget_save_widget_meta",meta:"hide_welcome_block",value:1};a.post(ajaxurl,o)}};return n}(document,window,jQuery);WPSplash.init();assets/js/admin/admin.min.js000064400000114040147400353540011767 0ustar00!function(l){"use strict";var m,p={settings:{iconActivate:'',iconDeactivate:'',iconInstall:'',iconSpinner:'',mediaFrame:!1},init:function(){m=this.settings,l(p.ready),p.initEntriesSingle(),p.initEntriesList(),p.initWelcome(),l(document).on("wpformsReady",p.initAddons),p.initSettings(),p.initTools(),p.initUpgrades(),p.initScrollableMenu()},ready:function(){l.ajaxSetup({data:{_wp_http_referer:wpf.updateQueryString("_wp_http_referer",null)}}),p.scrollToIntegration(),l(".notice").show(),l("#screen-meta-links, #screen-meta").prependTo("#wpforms-header-temp").show(),p.initChoicesJS(),p.initCheckboxMultiselectColumns(),l(".wpforms-color-picker").each(function(){var e=l(this);e.minicolors({defaultValue:e.data("fallback-color")||""})}),l(".wpforms-file-upload").each(function(){var e=l(this).find("input[type=file]"),n=l(this).find("label"),o=n.html();e.on("change",function(e){var t="";this.files&&1'+t+"")):(e.parent().removeClass("checked"),n.find("#"+o).remove())}),l(document).on("click",".checkbox-multiselect-columns .all",function(e){e.preventDefault(),l(this).closest(".checkbox-multiselect-columns").find("input[type=checkbox]").prop("checked",!0).trigger("change"),l(this).remove()})},initFormOverview:function(){console.warn('WARNING! Function "WPFormsAdmin.initFormOverview()" has been deprecated, please use the new "WPFormsForms.Overview.init()" function instead!'),window.WPFormsForms.Overview.init()},initEntriesList(){l(document).on("click","#wpforms-entries-list .form-selector .toggle",function(e){e.preventDefault(),l(this).toggleClass("active").next(".form-list").toggle()}),l(document).on("click","#wpforms-entries-table #doaction",function(e){var t=l(this).closest("form"),n=t.find("table"),o=t.find("select[name=action]"),n=n.find("input[name^=entry_id]:checked");"delete"!==o.val()&&"trash"!==o.val()||!n.length||(o="delete"===o.val()?wpforms_admin.entry_delete_n_confirm:wpforms_admin.entry_trash_n_confirm,e.preventDefault(),l.confirm({title:wpforms_admin.heads_up,content:o.replace("{entry_count}",n.length),icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){t.trigger("submit")}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}}))}),l(document).on("click","#wpforms-entries-list .wp-list-table .delete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.entry_delete_confirm,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-list .wp-list-table .trash",function(e){e.preventDefault();const t=l(this).attr("href");l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.entry_trash_confirm,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:()=>{window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-list .wp-list-table .indicator-star",function(e){e.preventDefault();var e=l(this),t=l("#wpforms-entries-list .starred-num"),n=e.parents("table");let o="",i=Number(t.text());e.hasClass("star")?(o="star",i++,e.attr("title",wpforms_admin.entry_unstar)):(o="unstar",i--,e.attr("title",wpforms_admin.entry_star)),e.toggleClass("star unstar"),n.hasClass("wpforms-entries-table-spam")||n.hasClass("wpforms-entries-table-trash")||t.text(i);n={task:o,action:"wpforms_entry_list_star",nonce:wpforms_admin.nonce,entryId:e.data("id"),formId:e.data("form-id")};l.post(wpforms_admin.ajax_url,n)}),l(document).on("click","#wpforms-entries-list .wp-list-table .indicator-read",function(e){e.preventDefault();var e=l(this),t=l("#wpforms-entries-list .unread-num"),n=e.parents("table");let o="",i=Number(t.text());e.hasClass("read")?(o="read",i--,e.attr("title",wpforms_admin.entry_unread)):(o="unread",i++,e.attr("title",wpforms_admin.entry_read)),e.toggleClass("read unread"),n.hasClass("wpforms-entries-table-spam")||n.hasClass("wpforms-entries-table-trash")||t.text(i);n={task:o,action:"wpforms_entry_list_read",nonce:wpforms_admin.nonce,entryId:e.data("id"),formId:e.data("form-id")};l.post(wpforms_admin.ajax_url,n)}),l(document).on("click","#wpforms-entries-list .form-details-actions-removeall",function(e){e.preventDefault();const t=l(this).data("page"),n=p.getDeleteAllNoticeData(t),o=l(this).attr("href"),i=l("#wpforms-entries-table"),s=i.data("filtered-count-trash")&&"trash"===n.action?parseInt(i.data("filtered-count-trash"),10):0,a={action:"wpforms_entry_list_process_"+n.action+"_all",form_id:i.find('input[name="form_id"]').val(),date:i.find('input[name="date"]').val(),page:t,search:{field:i.find('select[name="search[field]"]').val(),comparison:i.find('select[name="search[comparison]"]').val(),term:i.find('input[name="search[term]"]').val()},nonce:wpforms_admin.nonce,url:o};l.confirm({title:wpforms_admin.heads_up,content:s&&l("#wpforms-reset-filter").length?n.content.replace("{entry_count}",s):n.contentAll,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:()=>{l.get(wpforms_admin.ajax_url,a).done(function(e){e.success&&(window.location=_.isEmpty(e.data)?o:e.data)})}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("heartbeat-send",function(e,t){var n,o=l("#wpforms-entries-list");o.length&&!o.find(".wpforms-dash-widget").length&&void 0!==(n=o.find("#wpforms-entries-table").data("last-entry-id"))&&(t.wpforms_new_entries_entry_id=n,t.wpforms_new_entries_form_id=o.find("input[name=form_id]").val())}),l(document).on("heartbeat-tick",function(e,t){var n,o,i=l("#wpforms-entries-list");i.length&&t.wpforms_new_entries_notification&&(n=i.find(".wp-list-table thead tr").first().children().length,i.find(".new-entries-notification").length||i.find(".wp-list-table thead").append(''),(o=i.find(".new-entries-notification a")).text(t.wpforms_new_entries_notification).slideDown({start:function(){o.css("display","block")},always:function(){o.css("display","block")}}))})},initEntriesSingle:function(){"wpforms-entries"===p.getQueryString("page")&&"details"===p.getQueryString("view")&&p.entryHotkeys(),l(document).on("click","#wpforms-entries-single .wpforms-entry-delete a",function(e){e.preventDefault();const t=l(this).attr("href");l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.entry_delete_confirm,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-single .trash",function(e){e.preventDefault();const t=l(this).attr("href");l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.entry_trash_confirm,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:()=>{window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-single .wpforms-entry-print a",function(e){e.preventDefault(),window.open(l(this).attr("href"))}),l(document).on("click","#wpforms-entries-single .wpforms-empty-field-toggle",function(e){e.preventDefault(),"true"===wpCookies.get("wpforms_entry_hide_empty")?(wpCookies.remove("wpforms_entry_hide_empty"),l(this).text(wpforms_admin.entry_empty_fields_hide)):(wpCookies.set("wpforms_entry_hide_empty","true",2592e3),l(this).text(wpforms_admin.entry_empty_fields_show)),l(".wpforms-entry-field.empty, .wpforms-edit-entry-field.empty").toggle()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .add",function(e){e.preventDefault(),l(this).hide().next("form").stop().slideToggle()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .cancel",function(e){e.preventDefault(),l(this).closest("form").stop().slideToggle(),l(".wpforms-entry-notes-new .add").show()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-byline .note-delete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.entry_note_delete_confirm,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})})},entryHotkeys:function(){l(document).on("keydown",function(e){74!==e.keyCode||e.metaKey||p.isFormTypeNode(e.target.nodeName)?75!==e.keyCode||e.metaKey||p.isFormTypeNode(e.target.nodeName)||"#"!==(e=l("#wpforms-admin-single-navigation-next-link").attr("href"))&&(window.location.href=e):"#"!==(e=l("#wpforms-admin-single-navigation-prev-link").attr("href"))&&(window.location.href=e)})},initWelcome:function(){l(document).on("click","#wpforms-welcome .play-video",function(e){e.preventDefault();l.dialog({title:!1,content:'
      ',closeIcon:!0,boxWidth:"70%"})})},initAddons:function(){if(l("#wpforms-admin-addons").length){var n=l("#wpforms-addons-list-section-all"),o=l("#wpforms-addons-list-section-installed");if(n.length||o.length){let e,t;o.length&&(e=new List("wpforms-addons-list-section-installed",{valueNames:["addon-link"]})),n.length&&(t=new List("wpforms-addons-list-section-all",{valueNames:["addon-link"]})),l("#wpforms-addons-search").on("keyup search",function(){p.updateAddonSearchResult(this,t,e)})}l(document).on("change",".wpforms-addons-list-item .wpforms-toggle-control input",function(e){if(e.preventDefault(),l(this).hasClass("disabled"))return!1;p.addonToggleNew(l(this))}),l(document).on("click",".wpforms-addons-list-item button",function(e){if(e.preventDefault(),l(this).hasClass("disabled"))return!1;p.addonToggleNew(l(this))}),l(document).on("click","#wpforms-admin-addons .addon-item button",function(e){if(e.preventDefault(),l(this).hasClass("disabled"))return!1;p.addonToggle(l(this))})}},updateAddonSearchResult(e,t,n){let o=l(e).val();o=o.replace(/[.,]/g," ");var e=l("#wpforms-addons-no-results"),i=l("#wpforms-addons-list-section-all"),s=l("#wpforms-addons-list-section-installed"),t=t?t.search(o):[],n=n?n.search(o):[];e.toggle(0===t.length&&0===n.length),i.toggle(0

      ${"addon"===t?wpforms_admin.addon_error:wpforms_admin.plugin_error}

      `):s.append(``),"install"===d?(n=!1,p.removeSpinnerFromButton(i)):"deactivate"===d?n=!0:"activate"===d&&(n=!1)}p.setAddonState(e,d,t,function(e){var t;e.success?(t=e,"install"===d?(o=a.active,n=!0,s.attr("data-plugin",t.data.basename),t.data.is_activated||(o=a.installed,n=!1),i.hide(),i=i.closest(".wpforms-addons-list-item").find(".wpforms-toggle-control input")):"activate"===d?(s.find(".wpforms-addons-list-item-footer-settings-link").fadeIn(150),o=a.active,n=!0):"deactivate"===d&&(s.find(".wpforms-addons-list-item-footer-settings-link").fadeOut(150),o=a.installed,n=!1),s.removeClass(a.active+" "+a.installed+" "+a.missing).addClass(o)):r(e),p.updateAddonButtonPropertiesAndUI(i,c,s,a,n)},function(){r({data:wpforms_admin.server_error}),p.updateAddonButtonPropertiesAndUI(i,c,s,a,n)})}},addSpinnerToButton(e){var t=e.width();e.data("original-text",e.html()),e.width(t).html('')},removeSpinnerFromButton(e){e.html(e.data("original-text"))},getAddonState(e,t,n){let o;return e.hasClass(t.active)?o="deactivate":e.hasClass(t.installed)?o="activate":e.hasClass(t.missing)&&(p.addSpinnerToButton(n),o="install"),o},updateAddonButtonPropertiesAndUI(e,t,n,o,i){e.prop("checked",i),e.prop("disabled",!1),e.siblings(".wpforms-toggle-control-status").html(e.siblings(".wpforms-toggle-control-status").data(i?"on":"off")),0'+c+""),t.find("span.status-label").removeClass("status-active status-installed status-missing").addClass(i).removeClass("button button-primary button-secondary disabled").text(s),n.removeClass("status-active status-installed status-missing").removeClass("button button-primary button-secondary disabled").addClass(i).html(a)):("object"==typeof e.data?"addon"===d?t.find(".actions").append('

      '+wpforms_admin.addon_error+"

      "):t.find(".actions").append('

      '+wpforms_admin.plugin_error+"

      "):t.find(".actions").append('

      '+e.data+"

      "),"install"===o&&"plugin"===d&&n.addClass("status-go-to-url").removeClass("status-missing"),n.html(r)),n.prop("disabled",!1).removeClass("loading"),t.find(".actions").find(".msg.error").length||setTimeout(function(){l(".addon-item .msg").remove()},3e3)},function(e){console.log(e.responseText)})}},initSettings:function(){l(document).on("wpformsReady",function(){var e,t;l("#wpforms-settings").length&&(e=p.getQueryString("wpforms-integration"),t=p.getQueryString("jump"),e?l("body").animate({scrollTop:l("#wpforms-integration-"+e).offset().top},1e3):t&&l("body").animate({scrollTop:l("#"+t).offset().top},1e3),l(".wpforms-admin-settings-form").conditions([{conditions:{element:"#wpforms-setting-gdpr",type:"checked",operator:"is"},actions:{if:{element:"#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details",action:"show"},else:{element:"#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details",action:"hide"}},effect:"appear"},{conditions:{element:"input[name=captcha-provider]:checked",type:"value",operator:"=",condition:"hcaptcha"},actions:{if:[{element:".wpforms-setting-row",action:"show"},{element:".wpforms-setting-recaptcha, #wpforms-setting-row-recaptcha-site-key, #wpforms-setting-row-recaptcha-secret-key, #wpforms-setting-row-recaptcha-fail-msg, .wpforms-setting-turnstile, #wpforms-setting-row-turnstile-heading, #wpforms-setting-row-turnstile-site-key, #wpforms-setting-row-turnstile-secret-key, #wpforms-setting-row-turnstile-theme, #wpforms-setting-row-turnstile-fail-msg",action:"hide"}]},effect:"appear"},{conditions:{element:"input[name=captcha-provider]:checked",type:"value",operator:"=",condition:"recaptcha"},actions:{if:[{element:".wpforms-setting-row",action:"show"},{element:"#wpforms-setting-row-hcaptcha-heading, #wpforms-setting-row-hcaptcha-site-key, #wpforms-setting-row-hcaptcha-secret-key, #wpforms-setting-row-hcaptcha-fail-msg, #wpforms-setting-row-turnstile-heading, #wpforms-setting-row-turnstile-site-key, #wpforms-setting-row-turnstile-secret-key, #wpforms-setting-row-turnstile-theme, #wpforms-setting-row-turnstile-fail-msg",action:"hide"}]},effect:"appear"},{conditions:{element:"input[name=captcha-provider]:checked",type:"value",operator:"=",condition:"turnstile"},actions:{if:[{element:".wpforms-setting-row",action:"show"},{element:"#wpforms-setting-row-hcaptcha-heading, #wpforms-setting-row-hcaptcha-site-key, #wpforms-setting-row-hcaptcha-secret-key, #wpforms-setting-row-hcaptcha-fail-msg, .wpforms-setting-recaptcha, #wpforms-setting-row-recaptcha-site-key, #wpforms-setting-row-recaptcha-secret-key, #wpforms-setting-row-recaptcha-fail-msg",action:"hide"}]},effect:"appear"},{conditions:{element:"input[name=captcha-provider]:checked",type:"value",operator:"=",condition:"none"},actions:{if:[{element:".wpforms-setting-row",action:"hide"},{element:".wpforms-setting-captcha-heading, #wpforms-setting-row-captcha-provider",action:"show"}]},effect:"appear"}]))}),l(document).on("change","#wpforms-setting-row-render-engine input",p.settingsRenderEngineChange),l(document).on("change","#wpforms-setting-disable-css",function(){p.settingsFormStylesAlert(l(this).val())}),l(document).on("click",".wpforms-setting-row-image button",function(e){e.preventDefault(),l(this).hasClass("wpforms-setting-remove-image")?l(this).closest(".wpforms-setting-row-image").find("input").val("").attr("value","").trigger("change").end().find("img").remove():p.imageUploadModal(l(this))}),l(document).on("click","#wpforms-setting-license-key-verify",function(e){e.preventDefault(),p.licenseVerify(l(this))}),l(document).on("click",".wpforms-setting-license-wrapper",function(e){e.preventDefault();e=l("#wpforms-setting-license-key");e.length&&e.prop("disabled")&&p.licenseEditMessage()}),l(document).on("click","#wpforms-setting-license-key-deactivate",function(e){e.preventDefault(),p.licenseDeactivate(l(this))}),l(document).on("click","#wpforms-setting-license-key-refresh",function(e){e.preventDefault(),p.licenseRefresh(l(this))}),l(document).on("click",".wpforms-settings-provider-connect",function(e){e.preventDefault();e=l(this);p.integrationConnect(e)}),l(document).on("click",".wpforms-settings-provider-accounts-list .remove a",function(e){e.preventDefault(),p.integrationDisconnect(l(this))}),l(document).on("click",".wpforms-settings-provider:not(.focus-out) .wpforms-settings-provider-header",function(e){e.preventDefault();var t=l(this);t.parent().find(".wpforms-settings-provider-accounts").stop(!1,!0).slideToggle("",function(){t.parent().find(".wpforms-settings-provider-logo i").toggleClass("fa-chevron-right fa-chevron-down")})}),l(document).on("click",".wpforms-settings-provider-accounts-toggle a",function(e){e.preventDefault();e=l(this).parent().next(".wpforms-settings-provider-accounts-connect");e.find("input[type=text], input[type=password]").val(""),e.stop().slideToggle()}),l(document).on("change","#wpforms-setting-row-captcha-provider input",function(){var e=l("#wpforms-setting-row-captcha-preview");"hcaptcha"===this.value||"turnstile"===this.value?e.removeClass("wpforms-hidden"):"none"===this.value?e.addClass("wpforms-hidden"):l("#wpforms-setting-row-recaptcha-type input:checked").trigger("change"),e.find(".wpforms-captcha-preview").length&&(e.find(".wpforms-captcha-preview").empty(),e.find(".wpforms-captcha-placeholder").removeClass("wpforms-hidden"))}),l(document).on("change","#wpforms-setting-row-recaptcha-type input",function(){l("#wpforms-setting-row-captcha-preview").toggleClass("wpforms-hidden","v2"!==this.value),l("#wpforms-setting-row-recaptcha-v3-threshold").toggleClass("wpforms-hidden","v3"!==this.value)}),l(document).on("change",".wpforms-toggle-control input",function(){var e=l(this),t=e.is(":checked"),n=t?"on":"off",o=e.closest(".wpforms-setting-field"),e=e.closest(".wpforms-toggle-control").find(".wpforms-toggle-control-status"),i=o.find(".wpforms-toggle-desc.desc-on"),o=o.find(".wpforms-toggle-desc.desc-off"),s=0'),t.trigger("change")}).on("close",function(){m.mediaFrame.off("library:selection:add")}),m.mediaFrame.open()},licenseVerify:function(i){var s=i.closest(".wpforms-setting-row"),a=l("#wpforms-setting-license-key"),e=i.outerWidth(),r=i.text(),t={action:"wpforms_verify_license",nonce:wpforms_admin.nonce,license:a.val()};i.html(m.iconSpinner).css("width",e).prop("disabled",!0),l.post(wpforms_admin.ajax_url,t,function(e){var t,n="fa fa-check-circle",o="green";e.success?(t=e.data.msg,i.hide(),s.find("#wpforms-setting-license-key-info-message").empty().hide(),s.find(".type, .desc, #wpforms-setting-license-key-deactivate").show(),s.find(".type strong").text(e.data.type),l(".wpforms-license-notice").remove(),a.prop("disabled",!0).addClass("wpforms-setting-license-is-valid").attr("value",a.val())):(n="fa fa-exclamation-circle",o="orange",t=e.data,s.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide(),a.prop("disabled",!1)),l.alert({title:t.header??!1,content:t.msg??t,icon:n,type:o,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.html(r).css("width","auto").prop("disabled",!1)}).fail(function(e){a.prop("disabled",!1),console.log(e.responseText)})},licenseEditMessage:function(){l.alert({title:wpforms_admin.heads_up,content:wpforms_admin.edit_license,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})},licenseDeactivate:function(e){const a=l(e),r=a.closest(".wpforms-setting-row");e=a.outerWidth();const c=a.text();var t={action:"wpforms_deactivate_license",nonce:wpforms_admin.nonce};a.html(m.iconSpinner).css("width",e).prop("disabled",!0),l.post(wpforms_admin.ajax_url,t,function(e){let t="fa fa-info-circle",n="blue",o=wpforms_admin.success;var i=e.data,s=i.msg&&"string"==typeof i.msg?i.msg:wpforms_admin.something_went_wrong;e.success?(r.find("#wpforms-setting-license-key").val("").attr("value","").prop({readonly:!1,disabled:!1}).removeClass(),r.find(".wpforms-license-key-deactivate-remove").remove(),r.find("#wpforms-setting-license-key-info-message").html(i.info).show(),r.find("#wpforms-setting-license-key-verify").prop("disabled",!1).show(),r.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()):(t="fa fa-exclamation-circle",n="orange",o=wpforms_admin.oops),l.alert({title:o,content:s,icon:t,type:n,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),a.html(c).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},licenseRefresh:function(e){var i=l(e).closest(".wpforms-setting-row"),s=l("#wpforms-setting-license-key"),e={action:"wpforms_refresh_license",nonce:wpforms_admin.nonce,license:s.val()};l.post(wpforms_admin.ajax_url,e,function(e){var t,n="fa fa-check-circle",o="green";e.success?(t=e.data.msg,i.find(".type strong").text(e.data.type)):(n="fa fa-exclamation-circle",o="orange",t=e.data,i.find(".type, .desc").hide(),s.removeClass("wpforms-setting-license-is-valid").addClass("wpforms-setting-license-is-invalid")),l.alert({title:t.header??!1,content:t.msg??t,icon:n,type:o,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}).fail(function(e){console.log(e.responseText)})},integrationConnect:function(t){var e=t.outerWidth(),n=t.text(),o=t.closest(".wpforms-settings-provider"),i={action:"wpforms_settings_provider_add_"+t.data("provider"),data:t.closest("form").serialize(),provider:t.data("provider"),nonce:wpforms_admin.nonce},s=wpforms_admin.provider_auth_error;t.html(wpforms_admin.connecting).css("width",e).prop("disabled",!0),l.post(wpforms_admin.ajax_url,i,function(e){e.success?(o.find(".wpforms-settings-provider-accounts-list ul").append(e.data.html),o.addClass("connected"),t.closest(".wpforms-settings-provider-accounts-connect").stop().slideToggle()):(Object.prototype.hasOwnProperty.call(e,"data")&&Object.prototype.hasOwnProperty.call(e.data,"error_msg")&&(s+="
      "+e.data.error_msg),p.integrationError(s))}).fail(function(){p.integrationError(s)}).always(function(){t.html(n).css("width","auto").prop("disabled",!1)})},integrationDisconnect:function(e){var n=l(e),o=n.parents(".wpforms-settings-provider"),t={action:"wpforms_settings_provider_disconnect_"+n.data("provider"),provider:n.data("provider"),key:n.data("key"),nonce:wpforms_admin.nonce},i=wpforms_admin.provider_delete_error;l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.provider_delete_confirm,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){l.post(wpforms_admin.ajax_url,t,function(e){var t;e.success?(n.parent().parent().remove(),void 0!==(t=o.find(".wpforms-settings-provider-accounts-list li").length)&&0!==t||o.removeClass("connected"),l(document).trigger("wpformsProviderRemoved",[o,e])):(Object.prototype.hasOwnProperty.call(e,"data")&&Object.prototype.hasOwnProperty.call(e.data,"error_msg")&&(i+="
      "+e.data.error_msg),p.integrationError(i))}).fail(function(){p.integrationError(i)})}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})},integrationError:function(e){l.alert({title:wpforms_admin.something_went_wrong,content:e,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})},initTools(){l(document).on("change","#wpforms-tools-form-import, #wpforms-tools-form-other-import, #wpforms-tools-form-export, #wpforms-tools-form-template",function(){var e=l(this);e.parents("form").find("button").attr("aria-disabled",0===e.val().length)}),l(document).on("click","#wpforms-system-information-copy",function(e){e.preventDefault(),p.copySystemInformation()}),l(document).on("click","#wpforms-ssl-verify",function(e){e.preventDefault(),p.verifySSLConnection()}),l(document).on("click","#wpforms-recreate-tables",function(e){e.preventDefault(),p.recreateTables()}),l(document).on("click","#wpforms-importer-forms-submit",function(e){if(e.preventDefault(),l("#wpforms-importer-forms input:checked").length){const t=[];l("#wpforms-importer-forms input:checked").each(function(e){t[e]=l(this).val()}),wpforms_admin.isPro?p.importForms(t):p.analyzeForms(t)}else l.alert({title:wpforms_admin.heads_up,content:wpforms_admin.importer_forms_required,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}),l(document).on("click","#wpforms-importer-continue-submit",function(e){e.preventDefault(),p.importForms(m.formIDs)})},copySystemInformation(){l("#wpforms-system-information").select(),document.execCommand("copy")},verifySSLConnection(){const t=l("#wpforms-ssl-verify"),n=t.text(),o=t.outerWidth(),i=t.parent();t.css("width",o).prop("disabled",!0).text(wpforms_admin.testing);var e={action:"wpforms_verify_ssl",nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,e,function(e){p.debug(e),i.find(".wpforms-notice").remove(),e.success&&t.before('
      '+e.data.msg+"
      "),!e.success&&e.data.msg&&t.before('
      '+e.data.msg+"
      "),!e.success&&e.data.debug&&t.before('
      '+e.data.debug+"
      "),t.css("width",o).prop("disabled",!1).text(n)})},recreateTables(){const t=l("#wpforms-recreate-tables"),e=t.text(),n=t.outerWidth(),o=t.parent();t.css("width",n).prop("disabled",!0).text(wpforms_admin.recreating);var i={action:"wpforms_recreate_tables",nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,i,function(e){p.debug(e),o.find(".wpforms-notice").remove(),e.success&&(t.before('
      '+e.data.msg+"
      "),t.hide()),!e.success&&e.data.msg&&t.before('
      '+e.data.msg+"
      "),!e.success&&e.data.debug&&t.before('
      '+e.data.debug+"
      ")}).always(function(){t.css("width",n).prop("disabled",!1).text(e)})},analyzeForms:function(e){var t=l("#wpforms-importer-analyze");t.find(".form-total").text(e.length),t.find(".form-current").text("1"),l("#wpforms-importer-forms").hide(),t.show(),m.analyzeQueue=e,m.analyzed=0,m.analyzeUpgrade=[],m.formIDs=e,p.analyzeForm()},analyzeForm:function(){var t=l("#wpforms-importer-analyze"),n=_.first(m.analyzeQueue),e={action:"wpforms_import_form_"+p.getQueryString("provider"),analyze:1,form_id:n,nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,e,function(e){e.success&&(_.isEmpty(e.data.upgrade_plain)&&_.isEmpty(e.data.upgrade_omit)||m.analyzeUpgrade.push({name:e.data.name,fields:_.union(e.data.upgrade_omit,e.data.upgrade_plain)}),m.analyzeQueue=_.without(m.analyzeQueue,n),m.analyzed++,_.isEmpty(m.analyzeQueue)?_.isEmpty(m.analyzeUpgrade)?p.importForms(m.formIDs):(e=wp.template("wpforms-importer-upgrade"),t.find(".upgrade").append(e(m.analyzeUpgrade)),t.find(".upgrade").show(),t.find(".process-analyze").hide()):(t.find(".form-current").text(m.analyzed+1),p.analyzeForm()))})},importForms:function(e){var t=l("#wpforms-importer-process");t.find(".form-total").text(e.length),t.find(".form-current").text("1"),l("#wpforms-importer-forms, #wpforms-importer-analyze").hide(),t.show(),m.importQueue=e,m.imported=0,p.importForm()},importForm:function(){var n=l("#wpforms-importer-process"),o=_.first(m.importQueue),e={action:"wpforms_import_form_"+p.getQueryString("provider"),form_id:o,nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,e,function(e){var t;e.success&&(t=e.data.error?wp.template("wpforms-importer-status-error"):wp.template("wpforms-importer-status-update"),n.find(".status").prepend(t(e.data)),n.find(".status").show(),m.importQueue=_.without(m.importQueue,o),m.imported++,_.isEmpty(m.importQueue)?(n.find(".process-count").hide(),n.find(".forms-completed").text(m.imported),n.find(".process-completed").show()):(n.find(".form-current").text(m.imported+1),p.importForm()))})},initUpgrades:function(){l(document).on("click","#wpforms-upgrade-143 button",function(e){e.preventDefault();var t=l(this),e=t.outerWidth(),n=l("#wpforms-upgrade-143 .status"),o={action:"wpforms_upgrade_143",nonce:wpforms_admin.nonce,init:!0,incomplete:t.data("incomplete")};t.html(m.iconSpinner).css("width",e).prop("disabled",!0),l.post(wpforms_admin.ajax_url,o,function(e){e.success&&(m.upgraded=Number(e.data.upgraded),m.upgradeTotal=Number(e.data.total),e=Math.round(Number(m.upgraded)/Number(m.upgradeTotal)*100),t.remove(),n.find(".bar").css("width",e+"%"),n.show().find(".total").text(m.upgradeTotal),n.find(".current").text(m.upgraded),n.find(".percent").text(e+"%"),p.upgrade143())})})},upgrade143:function(){var n=l("#wpforms-upgrade-143 .status"),e={action:"wpforms_upgrade_143",nonce:wpforms_admin.nonce,upgraded:m.upgraded};l.post(wpforms_admin.ajax_url,e,function(e){var t;e.success&&(m.upgraded=Number(m.upgraded)+Number(e.data.count),t=Math.round(Number(m.upgraded)/Number(m.upgradeTotal)*100),n.find(".bar").css("width",t+"%"),Number(e.data.count)<10?(n.find(".progress-bar").addClass("complete"),n.find(".msg").text(wpforms_admin.upgrade_completed)):(n.find(".current").text(m.upgraded),n.find(".percent").text(t+"%"),p.upgrade143()))})},initFlyoutMenu:function(){var e,t,n,a,r,c=l("#wpforms-flyout");0!==c.length&&(e=c.find(".wpforms-flyout-head"),t=e.find("img"),n={state:"inactive",srcInactive:t.attr("src"),srcActive:t.data("active")},e.on("click",function(e){e.preventDefault(),"active"===n.state?(c.removeClass("opened"),t.attr("src",n.srcInactive),n.state="inactive"):(c.addClass("opened"),t.attr("src",n.srcActive),n.state="active")}),0!==(a=l("#wpfooter")).length)&&(r=l("#wpforms-overview, #wpforms-entries-list, #wpforms-tools.wpforms-tools-tab-action-scheduler, #wpforms-tools.wpforms-tools-tab-logs"),l(window).on("resize scroll",_.debounce(function(e){var t=a.offset().top,n=t+a.height(),o=0["spam","trash"].includes(e)?{contentAll:wpforms_admin.entry_delete_all_confirm,content:wpforms_admin.entry_delete_n_confirm,action:"delete"}:{contentAll:wpforms_admin.entry_trash_all_confirm,content:wpforms_admin.entry_trash_n_confirm,action:"trash"},initScrollableMenu(){l(document).on("wpformsReady",function(){const e=l(".wpforms-admin-tabs");if(e.length){const t=e.find("li:last-child");wpf.isInViewport(t)||e.addClass("wpforms-admin-tabs--scrollable"),e.on("scroll",function(){e.toggleClass("wpforms-admin-tabs--scrollable",!wpf.isInViewport(t))})}})}};p.init(),window.WPFormsAdmin=p}(jQuery);assets/js/admin/builder/providers.min.js000064400000025057147400353540014353 0ustar00var WPForms=window.WPForms||{};WPForms.Admin=WPForms.Admin||{},WPForms.Admin.Builder=WPForms.Admin.Builder||{},WPForms.Admin.Builder.Providers=WPForms.Admin.Builder.Providers||function(e,l){"use strict";var f={cache:{},config:{templates:["wpforms-providers-builder-content-connection-fields","wpforms-providers-builder-content-connection-conditionals"]},fields:{}},p={panelHolder:{},form:l("#wpforms-builder-form"),spinner:'',ajax:{_mergeData:function(e,r){e={id:p.form.data("id"),revision_id:p.form.data("revision"),nonce:wpforms_builder.nonce,action:"wpforms_builder_provider_ajax_"+e};return l.extend(e,r),e},request:function(o,e){var t=p.getProviderHolder(o),i=t.find(".wpforms-builder-provider-connections-save-lock"),d=t.find(".wpforms-builder-provider-connections-error"),r={url:wpforms_builder.ajax_url,type:"post",dataType:"json",beforeSend:function(){t.addClass("loading"),i.val(1),d.hide()}};return e.data=p.ajax._mergeData(o,e.data||{}),l.extend(r,e),l.ajax(r).fail(function(e,r,n){console.error("provider:",o),console.error(e),console.error(r),i.val(1),d.show()}).always(function(e,r,n){t.removeClass("loading"),"success"===r&&(i.val(0),wpf.savedState=wpf.getFormState("#wpforms-builder-form"))})}},cache:{get:function(e,r){return void 0!==f.cache[e]&&f.cache[e]instanceof Map?f.cache[e].get(r):null},getById:function(e,r,n){return void 0===this.get(e,r)[n]?null:this.get(e,r)[n]},set:function(e,r,n){return void 0!==f.cache[e]&&f.cache[e]instanceof Map||(f.cache[e]=new Map),f.cache[e].set(r,n)},addTo:function(e,r,n,o){void 0!==f.cache[e]&&f.cache[e]instanceof Map||(f.cache[e]=new Map,this.set(e,r,{}));var t=this.get(e,r);return t[n]=o,this.set(e,r,t)},delete:function(e,r){return void 0!==f.cache[e]&&f.cache[e]instanceof Map?f.cache[e].delete(r):null},deleteFrom:function(e,r,n){var o;return void 0!==f.cache[e]&&f.cache[e]instanceof Map?(delete(o=this.get(e,r))[n],this.set(e,r,o)):null},clear:function(e){void 0!==f.cache[e]&&f.cache[e]instanceof Map&&f.cache[e].clear()}},init:function(){l(p.ready)},ready:function(){f.fields=l.extend({},wpf.getFields(!1,!0)),p.panelHolder=l("#wpforms-panel-providers, #wpforms-panel-settings"),p.Templates=WPForms.Admin.Builder.Templates,p.Templates.add(f.config.templates),p.bindActions(),p.ui.bindActions(),p.panelHolder.trigger("WPForms.Admin.Builder.Providers.ready")},bindActions:function(){l(e).on("wpformsSaved",function(){var o,e=p.panelHolder.find(".wpforms-builder-provider-connection");e.length&&(o=!1,e.each(function(){var e,r,n=!1;l(this).find("input.wpforms-required, select.wpforms-required, textarea.wpforms-required").each(function(){var e=l(this),r=e.val();_.isEmpty(r)&&!e.closest(".wpforms-builder-provider-connection-block").hasClass("wpforms-hidden")?(l(this).addClass("wpforms-error"),n=!0):l(this).removeClass("wpforms-error")}),n&&!o&&((e=l(this).closest(".wpforms-builder-provider").find(".wpforms-builder-provider-title").clone()).find("button").remove(),r=wpforms_builder.provider_required_flds,l.alert({title:wpforms_builder.heads_up,content:r.replace("{provider}",""+e.text().trim()+""),icon:"fa fa-exclamation-circle",type:"red",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}}),o=!0)}),"fields"===wpf.getQueryString("view"))&&p.updateMapSelects(e)}),p.panelHolder.on("connectionRendered",function(){!0===wpf.initialSave&&(wpf.savedState=wpf.getFormState("#wpforms-builder-form"))})},updateMapSelects:function(e){var r=l.extend({},wpf.getFields()),n=_.mapObject(r,function(e,r){return e.label}),o=_.mapObject(f.fields,function(e,r){return e.label});if(!(_.isEmpty(n)&&_.isEmpty(o)||JSON.stringify(n)===JSON.stringify(o))){for(var t,i,d,c=Object.keys(n).map(function(e){return parseInt(e,10)}),a=Object.keys(o).map(function(e){return parseInt(e,10)}).filter(function(e){return!c.includes(e)}),s=0;s",{value:d,text:t}));wpf.savedState!==wpf.getFormState("#wpforms-builder-form")&&(wpf.savedState=wpf.getFormState("#wpforms-builder-form")),f.fields=r,p.panelHolder.trigger("WPForms.Admin.Builder.Providers.updatedMapSelects",[e,r])}},ui:{bindActions:function(){p.panelHolder.on("click",".js-wpforms-builder-provider-account-add",function(e){e.preventDefault(),p.ui.account.setProvider(l(this).data("provider")),p.ui.account.add()}).on("click",".js-wpforms-builder-provider-connection-add",function(e){e.preventDefault(),p.ui.connectionAdd(l(this).data("provider"))}).on("click",".js-wpforms-builder-provider-connection-delete",function(e){var r=l(this);e.preventDefault(),p.ui.connectionDelete(r.closest(".wpforms-builder-provider").data("provider"),r.closest(".wpforms-builder-provider-connection"))}),p.panelHolder.on("click",".js-wpforms-builder-provider-connection-fields-add",function(e){e.preventDefault();var e=l(this).parents(".wpforms-builder-provider-connection-fields-table"),r=e.find("tr").last().clone(!0),n=parseInt(/\[.+]\[.+]\[.+]\[(\d+)]/.exec(r.find(".wpforms-builder-provider-connection-field-name").attr("name"))[1],10)+1;r.find(".wpforms-builder-provider-connection-field-name").attr("name",r.find(".wpforms-builder-provider-connection-field-name").attr("name").replace(/\[fields_meta\]\[(\d+)\]/g,"[fields_meta]["+n+"]")).val(""),r.find(".wpforms-builder-provider-connection-field-value").attr("name",r.find(".wpforms-builder-provider-connection-field-value").attr("name").replace(/\[fields_meta\]\[(\d+)\]/g,"[fields_meta]["+n+"]")).val(""),r.find(".js-wpforms-builder-provider-connection-fields-delete").removeClass("hidden"),e.find("tbody").append(r.get(0))}).on("click",".js-wpforms-builder-provider-connection-fields-delete",function(e){e.preventDefault(),l(this).parents(".wpforms-builder-provider-connection-fields-table tr").remove()}),p.panelHolder.on("connectionGenerated",function(e,r){wpf.initTooltips(),l(this).find('.wpforms-builder-provider-connection[data-connection_id="'+r.connection.id+'"]').closest(".wpforms-panel-content-section").find(".wpforms-builder-provider-connections-default").addClass("wpforms-hidden")}),p.panelHolder.on("connectionRendered",function(e,r,n){if(wpf.initTooltips(),void 0===n){if(!_.isObject(r)||!_.has(r,"connection_id"))return;n=r.connection_id}l(this).find('.wpforms-builder-provider-connection[data-connection_id="'+n+'"] .wpforms-field-map-select').length&&wpf.fieldUpdate()}),p.panelHolder.on("change",".wpforms-builder-provider select.wpforms-required",function(){var e=l(this);e.hasClass("wpforms-error")&&0!==e.val().length&&e.removeClass("wpforms-error")}),p.panelHolder.on("connectionDeleted",function(e){p.ui.updateStatus(e)})},connectionAdd:function(n){l.confirm({title:!1,content:wpforms_builder_providers.prompt_connection.replace(/%type%/g,"connection")+'

      '+wpforms_builder_providers.error_name+"

      ",icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){var e=this.$content.find("#wpforms-builder-provider-connection-name").val().trim(),r=this.$content.find(".error");if(""===e)return r.show(),!1;p.getProviderHolder(n).trigger("connectionCreate",[e])}},cancel:{text:wpforms_builder.cancel}}})},connectionDelete:function(r,n){l.confirm({title:!1,content:wpforms_builder_providers.confirm_connection,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){p.getProviderHolder(r).trigger("connectionDelete",[n]);var e=n.closest(".wpforms-panel-content-section");n.fadeOut("fast",function(){l(this).remove(),p.getProviderHolder(r).trigger("connectionDeleted",[n]),e.find(".wpforms-builder-provider-connection").length||e.find(".wpforms-builder-provider-connections-default").removeClass("wpforms-hidden")})}},cancel:{text:wpforms_builder.cancel}}})},updateStatus(e){var r=e.target.closest(".wpforms-panel-content-section");l(".wpforms-panel-sidebar-section-"+e.target.dataset.provider).find(".fa-check-circle-o").toggleClass("wpforms-hidden",l(r).find(".wpforms-builder-provider-connection").length<=0)},account:{provider:"",submitHandlers:[],setProvider:function(e){this.provider=e},add:function(){var o=this;l.confirm({title:!1,smoothContent:!0,content:function(){var r=this;return p.ajax.request(o.provider,{data:{task:"account_template_get"}}).done(function(e){e.success&&(e.data.title.length&&r.setTitle(e.data.title),e.data.content.length&&r.setContent(e.data.content),e.data.type.length&&r.setType(e.data.type),p.getProviderHolder(o.provider).trigger("accountAddModal.content.done",[r,o.provider,e]))}).fail(function(){p.getProviderHolder(o.provider).trigger("accountAddModal.content.fail",[r,o.provider])}).always(function(){p.getProviderHolder(o.provider).trigger("accountAddModal.content.always",[r,o.provider])})},contentLoaded:function(e,r,n){this.buttons.add.enable(),this.buttons.cancel.enable(),p.getProviderHolder(o.provider).trigger("accountAddModal.contentLoaded",[this])},onOpenBefore:function(){this.buttons.add.disable(),this.buttons.cancel.disable(),this.$body.addClass("wpforms-providers-account-add-modal"),p.getProviderHolder(o.provider).trigger("accountAddModal.onOpenBefore",[this])},onClose:function(){!0===p.ui.account.isConfigured(o.provider)&&p.ui.connectionAdd(o.provider)},icon:"fa fa-info-circle",type:"blue",buttons:{add:{text:wpforms_builder.provider_add_new_acc_btn,btnClass:"btn-confirm",keys:["enter"],action:function(){if(p.getProviderHolder(o.provider).trigger("accountAddModal.buttons.add.action.before",[this]),!_.isEmpty(o.provider)&&void 0!==o.submitHandlers[o.provider])return o.submitHandlers[o.provider](this)}},cancel:{text:wpforms_builder.cancel}}})},registerAddHandler:function(e,r){"string"==typeof e&&"function"==typeof r&&(this.submitHandlers[e]=r)},isConfigured:function(e){return p.getProviderHolder(e).find(".js-wpforms-builder-provider-account-add").hasClass("hidden")}}},getProviderHolder:function(e){return l("#"+e+"-provider")}};return p}(document,(window,jQuery)),WPForms.Admin.Builder.Providers.init();assets/js/admin/builder/form-templates.min.js000064400000020112147400353540015260 0ustar00var WPFormsFormTemplates=window.WPFormsFormTemplates||function(e,t,w){const v={},_={init(){w(_.ready),w(t).on("load",function(){"function"==typeof w.ready.then?w.ready.then(_.load):_.load()})},ready(){_.setup(),_.events()},load(){_.showUpgradeBanner()},setup(){v.templateList=new List("wpforms-setup-templates-list",{valueNames:["wpforms-template-name","wpforms-template-desc",{name:"fields",attr:"data-fields"},{name:"slug",attr:"data-slug"},{name:"categories",attr:"data-categories"},{name:"subcategories",attr:"data-subcategories"},{name:"has-access",attr:"data-has-access"},{name:"favorite",attr:"data-favorite"}]})},events(){w(e).on("click","#wpforms-setup-templates-list .wpforms-template-favorite i",_.selectFavorite).on("click","#wpforms-setup-templates-list .wpforms-template-remove i",_.removeTemplate)},selectFavorite(){const e=w(this),t=e.hasClass("fa-heart-o"),a=e.closest(".wpforms-template-favorite"),s=e.closest(".wpforms-template"),o=s.find(".wpforms-template-name"),r=s.find(".wpforms-template-select").data("slug"),l=w(".wpforms-setup-templates-categories").find("[data-category='favorites']"),n=l.find("span"),m={action:"wpforms_templates_favorite",slug:r,favorite:t,nonce:wpforms_form_templates.nonce};let p=parseInt(n.html(),10);function i(){d.favorite=!1,p-=1,f.values(d),u(),o.data("data-favorite",0),n.html(p),_.maybeHideFavoritesCategory()}function c(){d.favorite=!0,p+=1,f.values(d),u(),o.data("data-favorite",1),n.html(p),_.maybeHideFavoritesCategory()}const f=v.templateList.get("slug",r)[0],d=f.values(),u=function(){a.find(".fa-heart-o").toggleClass("wpforms-hidden",d.favorite),a.find(".fa-heart").toggleClass("wpforms-hidden",!d.favorite)};w.post(wpforms_form_templates.ajaxurl,m,function(e){e.success||(t?i:c)()}),(t?c:i)()},removeTemplate(){const e=w(this),t=e.closest(".wpforms-template-remove"),a=t.data("template");w.alert({title:wpforms_form_templates.delete_template_title,content:wpforms_form_templates.delete_template_content,icon:"fa fa-exclamation-circle",type:"red",buttons:{confirm:{text:wpforms_form_templates.delete_template,btnClass:"btn-confirm",keys:["enter"],action(){_.removeUserTemplate(a)}},cancel:{text:wpforms_form_templates.cancel}}})},removeUserTemplate(t){v.templateList.remove("slug","wpforms-user-template-"+t),w.post(wpforms_form_templates.ajaxurl,{action:"wpforms_user_template_remove",template:t,nonce:wpforms_form_templates.nonce},function(e){e.success&&(w("#wpforms-template-wpforms-user-template-"+t).remove(),_.updateCategoryCount("all"),_.updateCategoryCount("user"))})},updateCategoryCount(e){var t=w(".wpforms-setup-templates-categories").find(`[data-category='${e}']`),a=t.find("span"),s=parseInt(a.html(),10);a.html(s-1),t.data("count",s-1),s-1==0&&"user"===e&&t.hasClass("active")&&w(".wpforms-user-templates-empty-state").removeClass("wpforms-hidden")},maybeHideFavoritesCategory(){var e=w(".wpforms-setup-templates-categories"),t=e.find("[data-category='favorites']"),a=parseInt(t.find("span").html(),10);t.toggleClass("wpforms-hidden",!a),t.hasClass("active")&&(a?t:e.find("[data-category='all']")).trigger("click")},searchTemplate(){_.performSearch(w(this).val()),_.showUpgradeBanner()},performSearch(e){e=v.templateList.search(e,["name"],function(a){for(let e=0,t=v.templateList.items.length;e'+wpforms_form_templates.activating),this.$$cancel.prop("disabled",!0),_.installActivateAddons(a,this,e,t,o),!1}},cancel:{text:wpforms_form_templates.cancel,action(){WPFormsFormTemplates.selectTemplateCancel()}}}})},action(e,t=""){return 1',spinnerInline:'',tinymceDefaults:{tinymce:{toolbar1:"bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,link"},quicktags:!0},pagebreakTop:!1,pagebreakBottom:!1,upload_img_modal:!1,choicesLimit:20,choicesLimitLong:250},init(){const e=this;wpforms_panel_switch=!0,m=this.settings,b(k.ready),b(n).on("load",function(){"function"==typeof b.ready.then?b.ready.then(k.load):k.load()}),b(n).on("beforeunload",function(){if(!e.formIsSaved()&&o)return wpforms_builder.are_you_sure_to_close})},load(){if(wpf.getQueryString("newform")&&k.formSave(!1),"revisions"===b("#wpforms-panels-toggle .active").data("panel")&&k.updateRevisionPreview(),WPFormsUtils.triggerEvent(v,"wpformsBuilderReady").isDefaultPrevented())return!1;k.hideLoadingOverlay(),"1"==wpforms_builder.template_modal_display&&"fields"===wpf.getQueryString("view")&&b.alert({title:wpforms_builder.template_modal_title,content:wpforms_builder.template_modal_msg,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_builder.close,btnClass:"btn-confirm",keys:["enter"]}}})},ready(){k.isVisitedViaBackButton()?location.reload():(v=b("#wpforms-builder"),i.isWindows=/Win/.test(navigator.userAgent),i.isLinux=/Linux/.test(navigator.userAgent),i.isMac=/Mac/.test(navigator.userAgent),y.$helpButton=b("#wpforms-help"),y.$previewButton=b("#wpforms-preview-btn"),y.$embedButton=b("#wpforms-embed"),y.$saveButton=b("#wpforms-save"),y.$exitButton=b("#wpforms-exit"),y.$noFieldsOptions=b("#wpforms-panel-fields .wpforms-no-fields-holder .no-fields"),y.$noFieldsPreview=b("#wpforms-panel-fields .wpforms-no-fields-holder .no-fields-preview"),y.$formPreview=b("#wpforms-panel-fields .wpforms-preview-wrap"),y.$revisionPreview=b("#wpforms-panel-revisions .wpforms-panel-content"),y.defaultEmailSelector=".wpforms-field-option-email .wpforms-field-option-row-default_value input",y.$defaultEmail=b(y.defaultEmailSelector),y.$focusOutTarget=null,y.$nextFieldId=b("#wpforms-field-id"),y.$addFieldsTab=b("#add-fields a"),y.$fieldOptions=b("#wpforms-field-options"),y.$fieldsPreviewWrap=b("#wpforms-panel-fields .wpforms-panel-content-wrap"),y.$sortableFieldsWrap=b("#wpforms-panel-fields .wpforms-field-wrap"),y.$addFieldsButtons=b(".wpforms-add-fields-button").not(".not-draggable").not(".warning-modal").not(".education-modal"),y.$fieldsSidebar=b("#wpforms-panel-fields .wpforms-add-fields"),y.$searchInput=b("#wpforms-search-fields-input"),y.$sidebarToggle=b(".wpforms-panels .wpforms-panel-sidebar-content .wpforms-panel-sidebar-toggle"),b.ajaxSetup({data:{_wp_http_referer:wpf.updateQueryString("_wp_http_referer",null)}}),k.isBuilderInPopup()&&(y.$embedButton.remove(),y.$previewButton.addClass("wpforms-alone")),k.loadMsWinCSS(),k.bindUIActions(),m.formID=b("#wpforms-builder-form").data("id"),m.pagebreakTop=b(".wpforms-pagebreak-top").length,m.pagebreakBottom=b(".wpforms-pagebreak-bottom").length,v.on("keypress","#wpforms-builder-form :input:not(textarea)",function(e){13===e.keyCode&&e.preventDefault()}),b(".wpforms-panel").each(function(e,i){var o,t=b(this),r=t.find(".wpforms-panel-sidebar-section.configured").first();r.length?(o=r.data("section"),r.addClass("active"),t.find(".wpforms-panel-content-section-"+o).show().addClass("active"),t.find(".wpforms-panel-content-section-default").hide()):(t.find(".wpforms-panel-content-section:first-of-type").show().addClass("active"),t.find(".wpforms-panel-sidebar-section:first-of-type").addClass("active"))}),k.loadEntryPreviewFields(),k.fieldChoiceSortable("select"),k.fieldChoiceSortable("radio"),k.fieldChoiceSortable("checkbox"),k.fieldChoiceSortable("payment-multiple"),k.fieldChoiceSortable("payment-checkbox"),k.fieldChoiceSortable("payment-select"),b(".wpforms-add-fields-group").each(function(e,i){k.fieldGroupToggle(b(this),"load")}),k.registerTemplates(),k.trimFormTitle(),wpf.initTooltips(),k.loadColorPickers(),k.captchaToggle(),k.confirmationsSetup(),k.notificationToggle(),k.notificationsByStatusAlerts(),k.builderHotkeys(),jconfirm.defaults={closeIcon:!1,backgroundDismiss:!1,escapeKey:!0,animationBounce:1,useBootstrap:!1,theme:"modern",boxWidth:"400px",animateFromElement:!1,content:wpforms_builder.something_went_wrong},k.dropdownField.init(),k.iconChoices.init(),k.checkEmptyDynamicChoices(),k.initSomeFieldOptions(),k.dismissNotice(),wpf.initializeChoicesEventHandlers())},checkEmptyDynamicChoices(){var e=wpf.orders.choices||{};Object.keys(e).length&&wpf.orders.fields.forEach(function(i){if(k.dropdownField.helpers.isDynamicChoices(i)){var o=b("#wpforms-field-"+i),t=k.dropdownField.helpers.getDynamicChoicesOptionType(i),r=k.dropdownField.helpers.getDynamicChoicesOptionSource(i),s=k.dropdownField.helpers.isDynamicChoicesOptionModern(i);let e=s?o.find(".has-no-choices").length:0===o.find(".primary-input option:not(.placeholder), .primary-input li").length;s&&!e&&(o=b("#wpforms-field-option-"+i+"-placeholder").val(),s=k.dropdownField.helpers.getInitialChoices(i),e=1===s.length&&s[0].label===o&&!0===s[0].placeholder),e&&k.emptyChoicesNotice(i,r,t)}})},loadMsWinCSS(){i.isMac||b("").appendTo("head").attr({type:"text/css",rel:"stylesheet",href:wpforms_builder.scrollbars_css_url})},isVisitedViaBackButton(){if(!performance)return!1;let i=!1;return performance.getEntriesByType("navigation").forEach(function(e){"back_forward"===e.type&&(i=!0)}),i},hideLoadingOverlay(){const e=b("#wpforms-builder-overlay");e.addClass("fade-out"),setTimeout(function(){e.hide()},250)},showLoadingOverlay(){var e=b("#wpforms-builder-overlay");e.removeClass("fade-out"),e.show()},initSomeFieldOptions(){k.toggleAllOptionGroups(v),v.find(".wpforms-field-option-row-date .type select").trigger("change")},dropdownField:{config:{modernClass:"choicesjs-select",args:{searchEnabled:!1,searchChoices:!1,renderChoiceLimit:1,shouldSort:!1,callbackOnInit(){var e=b(this.containerOuter.element),i=e.closest(".wpforms-field").find("select");e.hasClass("is-disabled")&&e.removeClass("is-disabled"),i.is("[readonly]")&&(this.disable(),i.prop("disabled",!1)),this.passedElement.element.multiple&&this.getValue(!0).length&&b(this.input.element).addClass("choices__input--hidden"),e.find(".choices__item--selectable").each(function(){var e=b(this),i=wpf.decodeAllowedHTMLEntities(e.text());e.text(i)})}}},init(){v.find("."+k.dropdownField.config.modernClass).each(function(){k.dropdownField.events.choicesInit(b(this))}),v.on("change",".wpforms-field-option-select .wpforms-field-option-row-multiple input",k.dropdownField.events.multiple),v.on("change",".wpforms-field-option-select .wpforms-field-option-row-style select, .wpforms-field-option-payment-select .wpforms-field-option-row-style select",k.dropdownField.events.applyStyle),v.on("click",".choices",function(e){var i=b(this),o=i.find("select").data("choicesjs");o&&i.hasClass("is-open")&&e.target.classList.contains("choices__inner")&&o.hideDropdown()})},events:{choicesInit(e){var i=1===e.data("choicesjs-use-ajax");let o;o="select_pages"===e.data("choicesjs-callback-fn")?WPForms.Admin.Builder.WPFormsChoicesJS.setup(e[0],k.dropdownField.config.args,{action:"wpforms_ajax_search_pages_for_dropdown",nonce:i?wpforms_builder.nonce:null}):new Choices(e[0],k.dropdownField.config.args),k.dropdownField.helpers.setInstance(e,o),k.dropdownField.helpers.addPlaceholderChoice(e,o),e.closest(".choices").toggleClass("wpforms-hidden",!o.config.choices.length)},multiple(e){var i=b(this).closest(".wpforms-field-option-row-multiple").data().fieldId,o=k.dropdownField.helpers.getPrimarySelector(i),t=b("#wpforms-field-option-row-"+i+"-choices input.default"),r=o.find(".placeholder"),s=k.dropdownField.helpers.isDynamicChoices(i),e=e.target.checked,l=e?"checkbox":"radio",l=(o.prop("multiple",e),t.prop("type",l),s&&o.find("option:selected").prop("selected",!1),t.filter(":checked"));!e&&l.length&&(t.prop("checked",!1),b(l.get(0)).prop("checked",!0)),r.length&&r.prop("selected",!e),k.dropdownField.helpers.update(i,s)},applyStyle(){var e=b(this),i=e.closest(".wpforms-field-option-row-style").data().fieldId;"modern"===e.val()?k.dropdownField.helpers.convertClassicToModern(i):k.dropdownField.helpers.convertModernToClassic(i)}},helpers:{convertModernToClassic:e=>{var i=k.dropdownField.helpers.getPrimarySelector(e),o=k.dropdownField.helpers.isDynamicChoices(e),i=k.dropdownField.helpers.getInstance(i),t=b("#wpforms-field-option-row-"+e+"-choices").find(".choices-list").find("li").length;i&&"function"==typeof i.destroy&&(i.destroy(),k.dropdownField.helpers.updatePlaceholderChoice(i,e)),o||k.fieldChoiceUpdate("select",e,t)},getInitialChoices(e){e=k.dropdownField.helpers.getPrimarySelector(e);return k.dropdownField.helpers.getInstance(e).config.choices},convertClassicToModern(e){var i=k.dropdownField.helpers.getPrimarySelector(e);k.dropdownField.helpers.isDynamicChoices(e)||k.fieldChoiceUpdate("select",e),k.dropdownField.events.choicesInit(i)},update(e,i){var o=k.dropdownField.helpers.getPrimarySelector(e);k.dropdownField.helpers.isModernSelect(o)?(k.dropdownField.helpers.convertModernToClassic(e),i||k.dropdownField.events.choicesInit(o)):i||k.fieldChoiceUpdate("select",e)},addPlaceholderChoice(e,i){e=e.closest(".wpforms-field");if(e.length<=0)return!1;var o,t,e=e.data().fieldId;let r=k.dropdownField.helpers.hasDefaults(e);return k.dropdownField.helpers.isDynamicChoices(e)&&(r=!1),!1===k.dropdownField.helpers.searchPlaceholderChoice(i)&&!!i.config.choices.length&&(e=wpf.decodeAllowedHTMLEntities(i.config.choices[0].label),t=!((o=b(i.passedElement.element).prop("multiple"))||r),i.setChoices([{value:"",label:e,selected:t,placeholder:!0}],"value","label",!1),o&&b(i.input.element).prop("placeholder",e),!0)},searchPlaceholderChoice(e){let t=!1;return e.config.choices.forEach(function(e,i,o){if(void 0!==e.placeholder&&!0===e.placeholder)return!(t={key:i,item:e})}),t},updatePlaceholderChoice(e,i){var o=b(e.passedElement.element),i=wpf.sanitizeHTML(b("#wpforms-field-option-"+i+"-placeholder").val()),e=k.dropdownField.helpers.searchPlaceholderChoice(e);let t={};"object"==typeof e&&(t=b(o.find("option").get(e.key))),""!==i?!b.isEmptyObject(t)&&t.length?t.addClass("placeholder").text(i):o.prepend('"):t.length&&t.remove()},isModernSelect(e){e=k.dropdownField.helpers.getInstance(e);return"object"==typeof e&&!b.isEmptyObject(e)&&e.initialised},setInstance(e,i){e.data("choicesjs",i)},getInstance(e){return e.data("choicesjs")},getDynamicChoicesOption(e){e=b("#wpforms-field-option-"+e+"-dynamic_choices");return!!e.length&&e},isDynamicChoices(e){e=k.dropdownField.helpers.getDynamicChoicesOption(e);return!!e.length&&""!==e.val()},isDynamicChoicesOptionModern(e){e=b("#wpforms-field-option-"+e+"-style");return!!e.length&&"modern"===e.val()},getDynamicChoicesOptionType(e){e=k.dropdownField.helpers.getDynamicChoicesOption(e);return!!e.length&&e.val()},getDynamicChoicesOptionSource(e){var i=k.dropdownField.helpers.getDynamicChoicesOptionType(e),e=b("#wpforms-field-option-"+e+"-dynamic_"+i);return!!e.length&&e.find("option:selected").text()},hasDefaults(e){return!!b("#wpforms-field-option-row-"+e+"-choices .choices-list").find("input.default:checked").length},getPrimarySelector(e){return b("#wpforms-field-"+e+" .primary-input")}}},numberSliderEvents(e){e.on("focusout",".wpforms-field-option-row-min_max .wpforms-input-row .wpforms-number-slider-min",k.fieldNumberSliderUpdateMin),e.on("focusout",".wpforms-field-option-row-min_max .wpforms-input-row .wpforms-number-slider-max",k.fieldNumberSliderUpdateMax),e.on("input",".wpforms-number-slider-default-value",_.debounce(k.changeNumberSliderDefaultValue,500)),e.find(".wpforms-number-slider-default-value").trigger("input"),e.on("input",".wpforms-number-slider-step",_.debounce(k.changeNumberSliderStep,500)),e.on("focusout",".wpforms-number-slider-step",k.checkNumberSliderStep),e.on("input",".wpforms-number-slider-value-display",_.debounce(k.changeNumberSliderValueDisplay,500)),e.on("input",".wpforms-number-slider-min",_.debounce(k.changeNumberSliderMin,500)),e.on("input",".wpforms-number-slider-max",_.debounce(k.changeNumberSliderMax,500))},changeNumberSliderMin(e){var i=parseFloat(e.target.value);isNaN(i)||(i=b(e.target).parents(".wpforms-field-option-row").data("fieldId"),k.updateNumberSliderDefaultValueAttr(i,e.target.value,"min"))},changeNumberSliderMax(e){var i=parseFloat(e.target.value);isNaN(i)||(i=b(e.target).parents(".wpforms-field-option-row").data("fieldId"),k.updateNumberSliderDefaultValueAttr(i,e.target.value,"max").updateNumberSliderStepValueMaxAttr(i,e.target.value))},changeNumberSliderValueDisplay(e){var i=e.target.value,e=b(e.target).parents(".wpforms-field-option-row").data("fieldId"),o=r.getElementById("wpforms-field-option-"+e+"-default_value");o&&k.updateNumberSliderHintStr(e,i).updateNumberSliderHint(e,o.value)},changeNumberSliderStep(e){var i,o=parseFloat(e.target.value);isNaN(o)||o<=0||((i=parseFloat(e.target.max))

      ${e}

      `))},removeNotice(e){e.length&&e.find(".wpforms-alert").length&&e.find(".wpforms-alert").remove()},checkNumberSliderStep(e){e=parseFloat(e.target.value);if(isNaN(e)||!(0"+i+"")),this},fieldNumberSliderUpdateMin(e){var i,o,t=parseFloat(e.target.value);isNaN(t)||(i=b(e.target).parents(".wpforms-field-option-row-min_max"),(o=parseFloat(i.find(".wpforms-number-slider-max").val()))<=t?(e.preventDefault(),this.value=o):(e=i.data("field-id"),v.find("#wpforms-field-"+e+' input[type="range"]').attr("min",t)))},fieldNumberSliderUpdateMax(e){var i,o,t=parseFloat(e.target.value);isNaN(t)||(i=b(e.target).parents(".wpforms-field-option-row-min_max"),t<=(o=parseFloat(i.find(".wpforms-number-slider-min").val()))?(e.preventDefault(),this.value=o):(e=i.data("field-id"),v.find("#wpforms-field-"+e+' input[type="range"]').attr("max",t)))},updateNumberSliderStepValueMaxAttr(e,i){var o,e=r.getElementById("wpforms-field-option-"+e+"-step");return e&&(o=parseFloat(e.value),e.setAttribute("max",i),(i=parseFloat(i)) .label-title .text").text(r)}),v.on("input",".wpforms-field-option-row-description textarea",function(){var e=b(this),i=wpf.sanitizeHTML(e.val()),o=e.parent().data("field-id"),t=b(`#wpforms-field-${o} > .description, #wpforms-field-${o} .wpforms-field-internal-information-row-description`);k.updateDescription(t,i),e.trigger("wpformsDescriptionFieldUpdated",{id:o,descField:t,value:i})}),v.on("change",".wpforms-field-option-row-required input",function(e){var i=b(this).closest(".wpforms-field-option-row").data("field-id");b("#wpforms-field-"+i).toggleClass("required")}),v.on("change",".wpforms-field-option-row-summary input",function(){var e=b(this),i=e.closest(".wpforms-field-option-row").data("field-id");b("#wpforms-field-"+i).toggleClass("wpforms-summary-enabled"),e.closest(".wpforms-field-option-group-inner").find(".wpforms-total-summary-alert").toggleClass("wpforms-hidden")}),v.on("change",".wpforms-field-option-row-confirmation input",function(){var e=b(this).closest(".wpforms-field-option-row").data("field-id");b("#wpforms-field-"+e).find(".wpforms-confirm").toggleClass("wpforms-confirm-enabled wpforms-confirm-disabled"),b("#wpforms-field-option-"+e).toggleClass("wpforms-confirm-enabled wpforms-confirm-disabled")}),v.on("change",".wpforms-field-option-row-filter_type select",function(){var e=b(this).parent().data("field-id"),e=b("#wpforms-field-option-"+e);b(this).val()?(e.removeClass("wpforms-filter-allowlist"),e.removeClass("wpforms-filter-denylist"),e.addClass("wpforms-filter-"+b(this).val())):(e.removeClass("wpforms-filter-allowlist"),e.removeClass("wpforms-filter-denylist"))}),v.on("focusout",".wpforms-field-option-row-allowlist textarea,.wpforms-field-option-row-denylist textarea",function(){const o=b(this);let e="allow";var i,t;o.next(".wpforms-alert").remove(),""!==o.val()&&(i=b(".wpforms-field-option-row-allowlist textarea"),t=b(".wpforms-field-option-row-denylist textarea"),o.is(t)&&(e="deny"),b.get(wpforms_builder.ajax_url,{nonce:wpforms_builder.nonce,content:JSON.stringify({allow:i.val(),deny:t.val(),current:e}),action:"wpforms_sanitize_restricted_rules"},function(e){var i;e.success&&(o.val(e.data.currentField),0!==(i=e.data.intersect).length&&(i="

      "+wpforms_builder.allow_deny_lists_intersect+'

      '+i+"

      ",b.alert({title:wpforms_builder.heads_up,content:i,icon:"fa fa-exclamation-circle",type:"red",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})),e.data.restricted||0)&&o.after('

      '+wpforms_builder.restricted_rules+"

      ")}))}),v.on("focusout",y.defaultEmailSelector,function(){y.$focusOutTarget=b(this),k.focusOutEvent()}),v.on("change",".wpforms-field-option-row-size select",function(e){var i=b(this),o=i.val(),i=i.parent().data("field-id");b("#wpforms-field-"+i).removeClass("size-small size-medium size-large").addClass("size-"+o)}),v.on("input",".wpforms-field-option-row-placeholder input",function(){var e=b(this),i=e.parent().data("field-id"),o=b("#wpforms-field-"+i),t=o.find(".primary-input");let r=wpf.sanitizeHTML(e.val());"payment-single"===o.data("field-type")&&""===r&&(r=b("#wpforms-field-option-"+i+"-price").prop("placeholder")),t.is("select")?k.dropdownField.helpers.isModernSelect(t)?(e=k.dropdownField.helpers.getInstance(t),t.prop("multiple")?b(e.input.element).prop("placeholder",r):(e.setChoiceByValue(""),t.closest(".choices").find(".choices__inner .choices__placeholder").text(r),o=b("#wpforms-field-option-"+i+"-dynamic_choices").val(),k.dropdownField.helpers.update(i,o))):(e=t.find(".placeholder"),!r.length&&e.length?e.remove():(e.length?e.text(r):t.prepend('"),t.find(".placeholder").prop("selected",!t.prop("multiple")))):t.prop("placeholder",r)}),v.on("input",".wpforms-field-option-row-confirmation_placeholder input",function(e){var i=b(this),o=i.val(),i=i.parent().data("field-id");b("#wpforms-field-"+i).find(".secondary-input").attr("placeholder",o)}),v.on("input",".wpforms-field-option .format-selected input.placeholder",function(){var e=b(this),i=e.val(),e=e.closest(".wpforms-field-option-row"),o=e.data("field-id"),e=e.data("subfield");b("#wpforms-field-"+o).find(".wpforms-"+e+" input").attr("placeholder",i)}),v.on("input",".wpforms-field-option-address input.placeholder",function(){var e=b(this),i=e.closest(".wpforms-field-option-row"),o=i.data("field-id"),t=i.data("subfield"),r=b("#wpforms-field-"+o+" .wpforms-"+t).find("input, select"),i=i.find("#wpforms-field-option-"+o+"-"+t+"_default");const s=i.val(),l=i.find("option:selected").text(),n=e.val();r.each(function(){var e,i,o=b(this);o.is("select")?(e=o.find(".placeholder"),i=""===s&&""!==n?n:l,e.text(i)):o.attr("placeholder",n)})}),v.on("input",".wpforms-field-option-row-default_value input",function(){var e=b(this),i=wpf.sanitizeHTML(e.val()),e=e.closest(".wpforms-field-option-row").data("field-id");b("#wpforms-field-"+e+" .primary-input").val(i)}),v.on("input",".wpforms-field-options-column input.default",function(){var e=b(this),i=wpf.sanitizeHTML(e.val()),e=e.closest(".wpforms-field-option-row"),o=e.data("field-id"),e=e.data("subfield");b("#wpforms-field-"+o+" .wpforms-"+e+" input").val(i)}),v.on("change",".wpforms-field-option-address select.default",function(){var e=b(this),i=e.val(),o=e.find("option:selected").text(),e=e.closest(".wpforms-field-option-row"),t=e.data("field-id"),r=e.data("subfield"),s=b("#wpforms-field-option-"+t+"-scheme").val(),e=e.find("#wpforms-field-option-"+t+"-"+r+"_placeholder").val(),t=b("#wpforms-field-"+t+" .wpforms-address-scheme-"+s+" .wpforms-"+r+" .placeholder");""===i&&0parseInt(i.val(),10))}),v.on("change",".wpforms-field-option-row-format select",function(){var e,i,o,t,r,s=b(this),l=s.val(),s=s.parent().data("field-id"),n=b("#wpforms-field-option-row-"+s+"-sublabel_hide"),a=b("#wpforms-field-"+s);a.find(".format-selected").removeClass().addClass("format-selected format-selected-"+l),b("#wpforms-field-option-"+s).find(".format-selected").removeClass().addClass("format-selected format-selected-"+l),["date-time","first-last","first-middle-last"].includes(l)?n.removeClass("wpforms-hidden"):n.addClass("wpforms-hidden"),b(`#wpforms-field-option-row-${s}-price_label`).toggleClass("wpforms-hidden","single"!==l),["single","user","hidden"].includes(l)&&(n="user"===l,e="single"===l,l="hidden"===l,i=b("#wpforms-field-option-"+s+"-enable_quantity").is(":checked"),t=b("#wpforms-field-option-"+s+"-min_price"),t=(o=wpf.amountSanitize(t.val()))>=t.data("minimum-price"),r=b("#wpforms-field-option-row-"+s+"-min_price"),b("#wpforms-field-option-row-"+s+"-placeholder").toggleClass("wpforms-hidden",!n),b("#wpforms-field-option-row-"+s+"-enable_quantity").toggleClass("wpforms-hidden",!e),b("#wpforms-field-option-row-"+s+"-quantities_alert").toggleClass("wpforms-hidden",!e),b("#wpforms-field-option-row-"+s+"-quantity").toggleClass("wpforms-hidden",!e||!i),a.find(".quantity-input").toggleClass("wpforms-hidden",!e||!i),r.toggleClass("wpforms-hidden",!n),r.find(".wpforms-item-minimum-price-alert").toggleClass("wpforms-hidden",t),a.find(".item-min-price").toggleClass("wpforms-hidden",n&&o<=0),a.toggleClass("min-price-warning",!t),a.find(".fa-exclamation-triangle").toggleClass("wpforms-hidden",t),b(`#wpforms-field-${s} .item-price-single`).toggleClass("wpforms-hidden",!e),b(`#wpforms-field-${s} .item-price-hidden`).toggleClass("wpforms-hidden",!l))}),v.on("change",".wpforms-field-option-row-scheme select",function(e){var i=b(this),o=i.val(),i=i.parent().data("field-id"),t=b("#wpforms-field-"+i),r=b(`#wpforms-field-option-row-${i}-state`),i=b(`#wpforms-field-option-row-${i}-country`),t=(t.find(".wpforms-address-scheme").addClass("wpforms-hide"),t.find(".wpforms-address-scheme-"+o).removeClass("wpforms-hide"),t.find(`.wpforms-address-scheme-${o} .wpforms-country select, .wpforms-address-scheme-${o} .wpforms-country input`)),t=(0===t.length?i.addClass("wpforms-hidden"):i.removeClass("wpforms-hidden"),r.find(".default .default").not(".wpforms-hidden-strict")),r=r.find(`.default [data-scheme="${o}"]`),s=i.find(".default .default").not(".wpforms-hidden-strict"),i=i.find(`.default [data-scheme="${o}"]`);r.attr({id:t.attr("id"),name:t.attr("name")}).removeClass("wpforms-hidden-strict"),t.attr({id:"",name:""}).addClass("wpforms-hidden-strict"),i.attr({id:s.attr("id"),name:s.attr("name")}).removeClass("wpforms-hidden-strict"),s.attr({id:"",name:""}).addClass("wpforms-hidden-strict")}),v.on("change",".wpforms-field-option-row-date .type select",function(e){var i=b(this),o=i.val(),t=b(this).closest(".wpforms-field-option-row").data("field-id"),r="datepicker"===o?"wpforms-date-type-datepicker":"wpforms-date-type-dropdown",s="datepicker"===o?"wpforms-date-type-dropdown":"wpforms-date-type-datepicker",r=(b("#wpforms-field-"+t).find(".wpforms-date").addClass(r).removeClass(s),b("#wpforms-field-option-"+t).addClass(r).removeClass(s),i.closest(".wpforms-field-option-group-advanced").find(".wpforms-field-option-row-date_limit_days, .wpforms-field-option-row-date_limit_days_options, .wpforms-field-option-row-date_disable_past_dates")),s=b("#wpforms-field-option-row-"+t+"-date_limit_days_options");"dropdown"===o?((i=b("#wpforms-field-option-"+t+"-date_format")).find("option:selected").hasClass("datepicker-only")&&i.prop("selectedIndex",0).trigger("change"),r.hide()):(r.show(),b("#wpforms-field-option-"+t+"-date_limit_days").is(":checked")?s.show():s.hide())}),v.on("change",".wpforms-field-option-row-date .format select",function(e){var i=b(this).val(),o=b(this).closest(".wpforms-field-option-row").data("field-id"),o=b("#wpforms-field-"+o);"m/d/Y"===i?(o.find(".wpforms-date-dropdown .first option").text(wpforms_builder.date_select_month),o.find(".wpforms-date-dropdown .second option").text(wpforms_builder.date_select_day)):"d/m/Y"===i&&(o.find(".wpforms-date-dropdown .first option").text(wpforms_builder.date_select_day),o.find(".wpforms-date-dropdown .second option").text(wpforms_builder.date_select_month))}),v.on("change",".wpforms-field-option-row-time .format select",function(e){const i=b(this),r=i.closest(".wpforms-field-option-row").data("field-id");let s="",o;const l=i.val().match(/[gh]/)?12:24,t=12==l?1:0,n=12==l?13:24;for(let e=t;e{hh}'.replace(/{hh}/g,o);_.forEach(["start","end"],function(e){var i=v.find("#wpforms-field-option-"+r+"-time_limit_hours_"+e+"_hour"),e=v.find("#wpforms-field-option-"+r+"-time_limit_hours_"+e+"_ampm");let o=parseInt(i.val(),10),t=e.val();o=(o=24==l?"pm"===t?o+12:o:(t=12=e.data("minimum-price"),e=e.parent(),r=b("#wpforms-field-"+e.data("field-id"));e.find(".wpforms-item-minimum-price-alert").toggleClass("wpforms-hidden",o),r.find(".item-min-price").toggleClass("wpforms-hidden",t),r.toggleClass("min-price-warning",!o),r.find(".fa-exclamation-triangle").toggleClass("wpforms-hidden",o),t||r.find(".min-price").text(wpf.amountFormatCurrency(i))}),v.on("input",".wpforms-single-item-price-label-display",function(){var e=b(this),i=wpf.sanitizeHTML(e.val(),"<>"),o=e.parent().data("field-id"),t=b("#wpforms-field-"+o),o=wpf.amountFormatCurrency(b(`#wpforms-field-option-${o}-price`).val());i?t.find(".price-label").html(i.replaceAll("{price}",` ${o} `)):(e.val("{price}"),t.find(".price-label").html(` ${o} `))}),v.on("change",".wpforms-field-option-credit-card .payment-icons input",function(){var e=b(this),i=e.data("card"),e=e.parent().data("field-id");b("#wpforms-field-"+e).find("img.icon-"+i).toggleClass("card_hide")}),v.on("input",".wpforms-field-option input.placeholder-update",function(e){var i=b(this),o=i.val(),t=i.data("field-id"),i=i.data("subfield");b("#wpforms-field-"+t).find(".wpforms-"+i+" input").attr("placeholder",o)}),v.on("change",".wpforms-field-option-row-input_columns select",function(){var e=b(this),i=e.val(),e=e.parent().data("field-id");let o="";"2"===i?o="wpforms-list-2-columns":"3"===i?o="wpforms-list-3-columns":"inline"===i&&(o="wpforms-list-inline"),b("#wpforms-field-"+e).removeClass("wpforms-list-2-columns wpforms-list-3-columns wpforms-list-inline").addClass(o)}),v.on("change",".wpforms-field-option-row .wpforms-toggle-control input",function(e){var i=b(this),o=i.closest(".wpforms-toggle-control").find(".wpforms-toggle-control-status"),i=i.is(":checked")?"on":"off";o.html(o.data(i))}),v.on("change",".wpforms-field-option-row-dynamic_choices select",function(e){k.fieldDynamicChoiceToggle(b(this))}),v.on("change",".wpforms-field-option-row-dynamic_taxonomy select, .wpforms-field-option-row-dynamic_post_type select",function(e){k.fieldDynamicChoiceSource(b(this))}),v.on("click",".toggle-layout-selector-display",function(e){e.preventDefault(),k.fieldLayoutSelectorToggle(this)}),v.on("click",".layout-selector-display-layout",function(e){e.preventDefault(),k.fieldLayoutSelectorLayout(this)}),v.on("click",".layout-selector-display-columns span",function(e){e.preventDefault(),k.fieldLayoutSelectorInsert(this)}),b(r).on("change",".wpforms-field-option-row-scale select",function(){const e=b(this),i=e.val(),o=e.parent().data("field-id"),t=b("#wpforms-field-"+o+" .rating-icon");let r=1;t.each(function(e){r<=i?b(this).show():b(this).hide(),r++})}),b(r).on("change",".wpforms-field-option-row-icon select",function(){var e=b(this),i=e.val(),e=e.parent().data("field-id"),e=b("#wpforms-field-"+e+" .rating-icon");let o="fa-star";"heart"===i?o="fa-heart":"thumb"===i?o="fa-thumbs-up":"smiley"===i&&(o="fa-smile-o"),e.removeClass("fa-star fa-heart fa-thumbs-up fa-smile-o").addClass(o)}),b(r).on("change",".wpforms-field-option-row-icon_size select",function(){var e=b(this),i=e.val(),e=e.parent().data("field-id"),e=b("#wpforms-field-"+e+" .rating-icon");let o="28";"small"===i?o="18":"large"===i&&(o="38"),e.css("font-size",o+"px")}),b(r).on("input",".wpforms-field-option-row-icon_color input.wpforms-color-picker",function(){var e=b(this),i=e.closest(".wpforms-field-option-row").data("field-id");b("#wpforms-field-"+i+" > i.fa").css("color",k.getValidColorPickerValue(e))}),b(r).on("change",".wpforms-field-option-row-disclaimer_format input",function(){var e=b(this).closest(".wpforms-field-option-row").data("field-id");b("#wpforms-field-"+e+" .description").toggleClass("disclaimer")}),v.on("change",".wpforms-field-option-row-limit_enabled input",function(e){k.updateTextFieldsLimitControls(b(e.target).closest(".wpforms-field-option-row-limit_enabled").data().fieldId,e.target.checked)}),v.on("change",".wpforms-field-option-row-date_disable_past_dates input",function(e){k.updateDisableTodaysDateControls(b(e.target).closest(".wpforms-field-option-row-date_disable_past_dates").data().fieldId,e.target?.checked)}),v.on("change",".wpforms-field-option-row-password-strength input",function(e){k.updatePasswordStrengthControls(b(e.target).parents(".wpforms-field-option-row-password-strength").data().fieldId,e.target.checked)}),v.on("change",".wpforms-field-option-richtext .wpforms-field-option-row-media_enabled input",k.updateRichTextMediaFieldsLimitControls),v.on("change",".wpforms-field-option-richtext .wpforms-field-option-row-style select",k.updateRichTextStylePreview),v.on("change",".wpforms-field-option-file-upload .wpforms-field-option-row-style select, .wpforms-field-option-file-upload .wpforms-field-option-row-max_file_number input",function(e){k.fieldFileUploadPreviewUpdate(e.target)}),k.numberSliderEvents(v),k.fieldDynamicChoiceToggleImageChoices(),k.fieldDynamicChoiceToggleIconChoices(),v.on("change",".wpforms-field-option-row-show_price_after_labels input",function(e){var i=b(this).closest(".wpforms-field-option-group-basic").find(".wpforms-field-option-row-choices .choices-list");k.fieldChoiceUpdate(i.data("field-type"),i.data("field-id"))}),v.on("input",".wpforms-field-option-row-preview-notice textarea",k.updatePreviewNotice).on("change",".wpforms-field-option-row-preview-notice-enable input",k.toggleEntryPreviewNotice).on("wpformsFieldAdd",k.maybeLockEntryPreviewGroupOnAdd).on("wpformsFieldMove",k.maybeLockEntryPreviewGroupOnMove).on("click",".wpforms-entry-preview-block",k.entryPreviewBlockField),k.defaultStateEntryPreviewNotice()},focusOutEvent(){if(null!==y.$focusOutTarget){if(y.$defaultEmail.is(y.$focusOutTarget)){const i=y.$focusOutTarget;if(i.next(".wpforms-alert").remove(),""===i.val())return;b.get(wpforms_builder.ajax_url,{nonce:wpforms_builder.nonce,content:i.val(),action:"wpforms_sanitize_default_email"},function(e){e.success&&(i.val(e.data),i.trigger("input"),e.data||i.after('

      '+wpforms_builder.restricted_default_email+"

      "))})}y.$focusOutTarget=null}},isFieldPreviewActionsDisabled(e){return k.isFormPreviewActionsDisabled(e)||b(e).closest(".wpforms-field").hasClass("ui-sortable-disabled")},isFormPreviewActionsDisabled(e){return b(e).closest(".wpforms-field-wrap").hasClass("ui-sortable-disabled")},fieldGroupToggle(e,i){e=b(e);let o=e.next(".wpforms-add-fields-buttons");const t=o.parent();let r=e.find("i"),s=e.data("group"),l="wpforms_field_group_"+s;"click"===i?(t.hasClass("wpforms-closed")?wpCookies.remove(l):wpCookies.set(l,"true",2592e3),r.toggleClass("wpforms-angle-right"),o.stop().slideToggle("",function(){t.toggleClass("wpforms-closed")})):"load"===i&&(o=e.find(".wpforms-add-fields-buttons"),r=e.find(".wpforms-add-fields-heading i"),s=e.find(".wpforms-add-fields-heading").data("group"),"true"===wpCookies.get("wpforms_field_group_"+s))&&(r.toggleClass("wpforms-angle-right"),o.hide(),e.toggleClass("wpforms-closed"))},updateDescription(e,i){e.hasClass("nl2br")&&(i=i.replace(/\n/g,"
      ")),e.html(i)},defaultStateEntryPreviewNotice(){b(".wpforms-field-option-row-preview-notice-enable input").each(function(){b(this).trigger("change")})},updatePreviewNotice(){var e=b(this),i=wpf.sanitizeHTML(e.val()).trim(),e=e.parent().data("field-id"),e=b("#wpforms-field-"+e).find(".wpforms-entry-preview-notice"),i=i||wpforms_builder.entry_preview_default_notice;k.updateDescription(e,i)},toggleEntryPreviewNotice(){var e=b(this),i=e.closest(".wpforms-field-option").data("field-id"),o=b("#wpforms-field-"+i),i=b("#wpforms-field-option-"+i+" .wpforms-field-option-row-preview-notice"),t=o.find(".wpforms-entry-preview-notice"),o=o.find(".wpforms-alert-info");(e.is(":checked")?(o.hide(),t.show(),i):(i.hide(),t.hide(),o)).show()},fieldDelete(e){var i=b("#wpforms-field-"+e),o=i.data("field-type");"pagebreak"===o&&i.hasClass("wpforms-field-entry-preview-not-deleted")?k.youCantRemovePageBreakFieldPopup():i.hasClass("no-delete")?k.youCantRemoveFieldPopup():k.confirmFieldDeletion(e,o)},youCantRemovePageBreakFieldPopup(){b.alert({title:wpforms_builder.heads_up,content:wpforms_builder.entry_preview_require_page_break,icon:"fa fa-exclamation-circle",type:"red",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})},youCantReorderFieldPopup(){console.warn('WARNING! Function "WPFormsBuilder.youCantReorderFieldPopup()" has been deprecated, please use the new "WPForms.Admin.Builder.DragFields.youCantReorderFieldPopup()" function instead!'),WPForms.Admin.Builder.DragFields.youCantReorderFieldPopup()},youCantRemoveFieldPopup(){b.alert({title:wpforms_builder.field_locked,content:wpforms_builder.field_locked_no_delete_msg,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_builder.close,btnClass:"btn-confirm",keys:["enter"]}}})},validationErrorNotificationPopup(e){b.alert({title:wpforms_builder.heads_up,content:e,icon:"fa fa-exclamation-circle",type:"red",buttons:{confirm:{text:wpforms_builder.close,btnClass:"btn-confirm",keys:["enter"]}}})},confirmFieldDeletion(e,i){var o={id:e,message:wpforms_builder.delete_confirm};WPFormsUtils.triggerEvent(v,"wpformsBeforeFieldDeleteAlert",[o,i]).isDefaultPrevented()||b.confirm({title:!1,content:o.message,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"],action(){k.fieldDeleteById(e)}},cancel:{text:wpforms_builder.cancel}}})},fieldDeleteById(t,r="",e=400){b("#wpforms-field-"+t).fadeOut(e,function(){var e=b(this),i=e.parents(".wpforms-field-layout-columns"),e=(r=e.data("field-type"),v.trigger("wpformsBeforeFieldDelete",[t,r]),e.remove(),b("#wpforms-field-option-"+t).remove(),b(".wpforms-field, .wpforms-title-desc").removeClass("active"),k.fieldTabToggle("add-fields"),b(".wpforms-field-option")),o=v.find(".wpforms-field-submit");e.length<1&&(y.$sortableFieldsWrap.append(y.$noFieldsPreview.clone()),y.$fieldOptions.append(y.$noFieldsOptions.clone()),o.hide()),e.filter(":not(.wpforms-field-option-layout)").length||o.hide(),v.trigger("wpformsFieldDelete",[t,r,i])})},loadEntryPreviewFields(){var e=b("#wpforms-panel-fields .wpforms-field-wrap .wpforms-field-entry-preview");e.length&&e.each(function(){k.lockEntryPreviewFieldsPosition(b(this).data("field-id"))})},fieldEntryPreviewDelete(e,i,o){"entry-preview"===o&&(i=(o=b("#wpforms-field-"+i)).prevAll(".wpforms-field-pagebreak").first(),o=o.nextAll(".wpforms-field-pagebreak").first().data("field-id"),o=b("#wpforms-field-option-"+o),i.removeClass("wpforms-field-not-draggable wpforms-field-entry-preview-not-deleted"),o.find(".wpforms-entry-preview-block").removeClass("wpforms-entry-preview-block"),v.trigger("wpformsFieldDragToggle",[i.data("field-id"),i.data("field-type")]))},maybeLockEntryPreviewGroupOnMove(e,i){i.item.hasClass("wpforms-field-pagebreak")&&k.maybeLockEntryPreviewGroupOnAdd(e,i.item.data("field-id"),"pagebreak")},maybeLockEntryPreviewGroupOnAdd(e,i,o){var t,r,s,l,n;"pagebreak"===o&&(r=(t=b("#wpforms-field-"+i)).prevAll(".wpforms-field-entry-preview,.wpforms-field-pagebreak").first(),n=t.nextAll(".wpforms-field-entry-preview,.wpforms-field-pagebreak").first(),r.hasClass("wpforms-field-entry-preview")||n.hasClass("wpforms-field-entry-preview"))&&(s=(l=b("#wpforms-field-option-"+i+" .wpforms-field-option-row-prev_toggle")).find("input"),n=b("#wpforms-field-option-"+n.data("field-id")+" .wpforms-field-option-row-prev_toggle"),r.hasClass("wpforms-field-entry-preview")?(s.attr("checked","checked").trigger("change"),l.addClass("wpforms-entry-preview-block"),n.removeClass("wpforms-entry-preview-block")):(s=r.data("field-id"),n=(l=b("#wpforms-field-option-"+s+" .wpforms-field-option-row-prev_toggle")).find("input"),t.addClass("wpforms-field-not-draggable wpforms-field-entry-preview-not-deleted"),v.trigger("wpformsFieldDragToggle",[i,o]),r.removeClass("wpforms-field-not-draggable wpforms-field-entry-preview-not-deleted"),v.trigger("wpformsFieldDragToggle",[s,r.data("field-type")]),r.prevAll(".wpforms-field-entry-preview,.wpforms-field-pagebreak").first().hasClass("wpforms-field-entry-preview")&&(n.attr("checked","checked").trigger("change"),l.addClass("wpforms-entry-preview-block"))))},entryPreviewBlockField(e){e.preventDefault(),b.alert({title:wpforms_builder.heads_up,content:wpforms_builder.entry_preview_require_previous_button,icon:"fa fa-exclamation-circle",type:"red",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})},isUncheckedEntryPreviewField(e,i){return!("entry-preview"!==e||i&&i.passed)},addEntryPreviewField(e,i){var o,t,r,s=b("#wpforms-add-fields-entry-preview");s.hasClass("wpforms-entry-preview-adding")||(r=b("#wpforms-panel-fields .wpforms-field-wrap > .wpforms-field"),o=i?.position?i.position:r.length,t=k.isEntryPreviewFieldRequiresPageBreakBefore(r,o),r=k.isEntryPreviewFieldRequiresPageBreakAfter(r,o),s.addClass("wpforms-entry-preview-adding"),(i=i||{}).passed=!0,t||r?t?k.addPageBreakAndEntryPreviewFields(i,o):k.addEntryPreviewAndPageBreakFields(i,o):k.fieldAdd("entry-preview",i).done(function(e){k.lockEntryPreviewFieldsPosition(e.data.field.id)}))},addEntryPreviewFieldAfterPageBreak(e){const i=setInterval(function(){2===b("#wpforms-panel-fields .wpforms-field-wrap").find(".wpforms-pagebreak-bottom, .wpforms-pagebreak-top").length&&(k.fieldAdd("entry-preview",e).done(function(e){k.lockEntryPreviewFieldsPosition(e.data.field.id)}),clearInterval(i))},100)},addPageBreakAndEntryPreviewFields(i,o){const t=3<=b("#wpforms-panel-fields .wpforms-field-wrap > .wpforms-field-pagebreak").length;k.fieldAdd("pagebreak",{position:o}).done(function(e){i.position=t?o+1:o+2,k.addEntryPreviewFieldAfterPageBreak(i);e=b("#wpforms-field-option-"+e.data.field.id).find(".wpforms-field-option-row-prev_toggle");e.find("input").attr("checked","checked").trigger("change"),e.addClass("wpforms-entry-preview-block")})},fieldDuplicate(o){const t=b("#wpforms-field-"+o);t.hasClass("no-duplicate")?b.alert({title:wpforms_builder.field_locked,content:wpforms_builder.field_locked_no_duplicate_msg,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_builder.close,btnClass:"btn-confirm",keys:["enter"]}}}):b.confirm({title:!1,content:wpforms_builder.duplicate_confirm,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"],action(){var e,i;this.$$confirm.prop("disabled",!0),WPFormsUtils.triggerEvent(v,"wpformsBeforeFieldDuplicate",[o,t]).isDefaultPrevented()||(e=k.fieldDuplicateRoutine(o),i=b("#wpforms-field-"+e),k.increaseNextFieldIdAjaxRequest(),WPFormsUtils.triggerEvent(v,"wpformsFieldDuplicated",[o,t,e,i]))}},cancel:{text:wpforms_builder.cancel}}})},increaseNextFieldIdAjaxRequest(){b.post(wpforms_builder.ajax_url,{form_id:m.formID,field_id:y.$nextFieldId.val(),nonce:wpforms_builder.nonce,action:"wpforms_builder_increase_next_field_id"})},fieldDuplicateRoutine(e){var i=b("#wpforms-field-"+e),o=b("#wpforms-field-option-"+e),t=y.$sortableFieldsWrap.find(">.active"),r=y.$fieldOptions.find(">:visible"),s=r.find(">.active"),l=i.data("field-type"),n=o.attr("class"),a=k.dropdownField.helpers.isModernSelect(i.find("> .choices .primary-input"));wpf.restoreTooltips(o),a&&k.dropdownField.helpers.convertModernToClassic(e);let d=o.html();const p=i.clone(),f=parseInt(y.$nextFieldId.val(),10),c=b(`#wpforms-field-option-${e}-label`),m=(c.length?c:b(`#wpforms-field-option-${e}-name`)).val(),w=f+1,u={};var h=""!==m?m+" "+wpforms_builder.duplicate_copy:wpforms_builder.field+` #${e} `+wpforms_builder.duplicate_copy;u.fieldOptionsID=new RegExp("ID #"+e,"g"),u.fieldID=new RegExp("fields\\["+e+"\\]","g"),u.dataFieldID=new RegExp('data-field-id="'+e+'"',"g"),u.referenceID=new RegExp('data-reference="'+e+'"',"g"),u.elementID=new RegExp('\\b(id|for)="wpforms-(.*?)'+e+'(.*?)"',"ig"),i.after(p),t.removeClass("active"),p.addClass("active").attr({id:"wpforms-field-"+f,"data-field-id":f}),u.elementIdReplace=function(e,i,o,t,r,s){return`${i}="wpforms-${o}${f}${t}"`},d=(d=(d=(d=(d=d.replace(u.fieldOptionsID,"ID #"+f)).replace(u.fieldID,`fields[${f}]`)).replace(u.dataFieldID,`data-field-id="${f}"`)).replace(u.referenceID,`data-reference="${f}"`)).replace(u.elementID,u.elementIdReplace),r.hide(),o.after(`
      ${d}
      `);const g=b("#wpforms-field-option-"+f);return t.data("field-id")===e&&s.length&&(i=s.attr("class").match(/wpforms-field-option-group-\S*/i)[0],r=g.find(">."+i),g.find(">").removeClass("active"),r.addClass("active")),t.data("field-id")!==e&&s.length&&(g.find(">").removeClass("active"),g.find(">.wpforms-field-option-group-basic").addClass("active")),o.find(":input").each(function(e,i){var o=b(this),t=o.attr("name");if(!t)return"continue";var t=t.replace(u.fieldID,`fields[${f}]`),r=o.attr("type");"checkbox"===r||"radio"===r?o.is(":checked")?g.find(`[name="${t}"]`).prop("checked",!0).attr("checked","checked"):g.find(`[name="${t}"]`).prop("checked",!1).attr("checked",!1):o.is("select")?o.find("option:selected").length&&(r=o.find("option:selected").val(),g.find(`[name="${t}"]`).find(`[value="${r}"]`).prop("selected",!0)):""===(r=o.val())&&o.hasClass("wpforms-money-input")?g.find(`[name="${t}"]`).val(wpf.numberFormat("0",wpforms_builder.currency_decimals,wpforms_builder.currency_decimal,wpforms_builder.currency_thousands)):g.find(`[name="${t}"]`).val(r)}),g.find(".wpforms-field-option-hidden-id").val(f),y.$nextFieldId.val(w),b("html"===l?`#wpforms-field-option-${f}-name`:`#wpforms-field-option-${f}-label`).val(h).trigger("input"),v.trigger("wpformsFieldAdd",[f,l]),wpf.initTooltips(),a&&(k.dropdownField.helpers.convertClassicToModern(e),k.dropdownField.helpers.convertClassicToModern(f)),k.fieldChoiceUpdate(p.data("field-type"),f),k.loadColorPickers(),f},addEntryPreviewAndPageBreakFields(e,o){k.fieldAdd("entry-preview",e).done(function(e){const i=e.data.field.id;k.fieldAdd("pagebreak",{position:o+1}).done(function(e){k.lockEntryPreviewFieldsPosition(i);e=b("#wpforms-field-"+e.data.field.id).nextAll(".wpforms-field-pagebreak, .wpforms-field-entry-preview").first();e.hasClass("wpforms-field-entry-preview")&&k.lockEntryPreviewFieldsPosition(e.data("field-id"))})})},lockEntryPreviewFieldsPosition(e){var i=b("#wpforms-field-"+e),o=i.prevAll(".wpforms-field-pagebreak:not(.wpforms-pagebreak-bottom)").first(),t=i.nextAll(".wpforms-field-pagebreak").first().data("field-id"),t=b("#wpforms-field-option-"+t).find(".wpforms-field-option-row-prev_toggle"),r=t.find("input");i.addClass("wpforms-field-not-draggable"),o.addClass("wpforms-field-not-draggable wpforms-field-entry-preview-not-deleted"),r.prop("checked","checked").trigger("change"),t.addClass("wpforms-entry-preview-block"),b("#wpforms-add-fields-entry-preview").removeClass("wpforms-entry-preview-adding"),v.trigger("wpformsFieldDragToggle",[e,i.data("field-type")]),v.trigger("wpformsFieldDragToggle",[o.data("field-id"),o.data("field-type")])},isEntryPreviewFieldRequiresPageBreakBefore(e,i){e=e.slice(0,i).filter(".wpforms-field-pagebreak,.wpforms-field-entry-preview");let o=!0;return e.length&&b(e.get().reverse()).each(function(){var e=b(this);return!e.hasClass("wpforms-field-entry-preview")&&(e.hasClass("wpforms-field-pagebreak")&&!e.hasClass("wpforms-field-stick")?o=!1:void 0)}),o},isEntryPreviewFieldRequiresPageBreakAfter(e,i){e=e.slice(i).filter(".wpforms-field-pagebreak,.wpforms-field-entry-preview");let o=Boolean(e.length);return e.length&&e.each(function(){var e=b(this);return!e.hasClass("wpforms-field-entry-preview")&&(e.hasClass("wpforms-field-pagebreak")?o=!1:void 0)}),o},fieldAdd(s,l){var e=b("#wpforms-add-fields-"+s);if(!(e.hasClass("upgrade-modal")||e.hasClass("education-modal")||e.hasClass("warning-modal")))if(["captcha_turnstile","captcha_hcaptcha","captcha_recaptcha","captcha_none"].includes(s))k.captchaUpdate();else{if(a=!0,WPForms.Admin.Builder.DragFields.disableDragAndDrop(),k.disableFormActions(),!k.isUncheckedEntryPreviewField(s,l))return l=b.extend({},{position:"bottom",$sortable:"base",placeholder:!1,scroll:!0,defaults:!1},l),e={action:"wpforms_new_field_"+s,id:m.formID,type:s,defaults:l.defaults,nonce:wpforms_builder.nonce},b.post(wpforms_builder.ajax_url,e,function(i){if(i.success){var o=y.$sortableFieldsWrap,t=b(i.data.preview),r=b(i.data.options);let e=l.$sortable;a=!1,t.css("display","none"),l.placeholder&&l.placeholder.remove(),"default"!==l.$sortable&&l.$sortable.length||(e=o.find(".wpforms-fields-sortable-default")),"base"!==l.$sortable&&e.length||(e=o);o=WPFormsUtils.triggerEvent(v,"wpformsBeforeFieldAddToDOM",[l,t,r,e]);o.isDefaultPrevented()||(o.skipAddFieldToBaseLevel||k.fieldAddToBaseLevel(l,t,r),t.fadeIn(),v.find(".no-fields, .no-fields-preview").remove(),b(".wpforms-field-option:not(.wpforms-field-option-layout)").length&&v.find(".wpforms-field-submit").show(),l.scroll&&l.position.length&&k.scrollPreviewToField(i.data.field.id),y.$nextFieldId.val(i.data.field.id+1),wpf.initTooltips(),k.loadColorPickers(),k.toggleAllOptionGroups(),v.trigger("wpformsFieldAdd",[i.data.field.id,s]))}else wpf.debug("Add field AJAX call is unsuccessful:",i)}).fail(function(e,i,o){a=!1,wpf.debug("Add field AJAX call failed:",e.responseText)}).always(function(){a||(WPForms.Admin.Builder.DragFields.enableDragAndDrop(),k.enableFormActions())});k.addEntryPreviewField(s,l)}},fieldAddToBaseLevel(e,i,o){var t=y.$sortableFieldsWrap,r=t.find("> :not(.wpforms-field-drag-pending)"),s=r.length,l=y.$fieldOptions;"top"===e.position?(t.prepend(i),l.prepend(o)):(r=r.last(),"bottom"!==e.position||r.length&&r.hasClass("wpforms-field-stick")?("bottom"===e.position&&(e.position=s),e.position===s&&r.length&&r.hasClass("wpforms-field-stick")?(s=r.data("field-id"),r.before(i),l.find("#wpforms-field-option-"+s).before(o)):(r=t.children(":not(.wpforms-field-drag-pending)").eq(e.position)).length?(s=r.data("field-id"),r.before(i),l.find("#wpforms-field-option-"+s).before(o)):(t.append(i),l.append(o))):(t.append(i),l.append(o)))},scrollPreviewToField(e){var e=b("#wpforms-field-"+e),i=y.$fieldsPreviewWrap.scrollTop(),o=e.closest(".wpforms-field-layout");let t=e.position().top;e=(t=o.length?o.position().top+t+20:t)>i?t-i:t+i;y.$fieldsPreviewWrap.scrollTop(e)},captchaUpdate(){var e={action:"wpforms_update_field_captcha",id:m.formID,nonce:wpforms_builder.nonce};return b.post(wpforms_builder.ajax_url,e,function(i){if(i.success){const o={title:!1,content:!1,icon:"fa fa-exclamation-circle",type:"orange",boxWidth:"450px",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}},t=b("#wpforms-panel-field-settings-recaptcha");let e=i.data.current;t.data("provider",i.data.provider),"configured_not_enabled"!==e&&"configured_enabled"!==e||(e=t.prop("checked")?"configured_enabled":"configured_not_enabled",o.buttons.confirm.action=function(){t.prop("checked","configured_not_enabled"===e).trigger("change")}),o.title=i.data.cases[e].title,o.content=i.data.cases[e].content,i.data.cases[e].cancel&&(o.buttons.cancel={text:wpforms_builder.cancel,keys:["esc"]}),b.confirm(o)}else console.log(i)}).fail(function(e,i,o){console.log(e.responseText)})},disableDragAndDrop(){console.warn('WARNING! Function "WPFormsBuilder.disableDragAndDrop()" has been deprecated, please use the new "WPForms.Admin.Builder.DragFields.disableDragAndDrop()" function instead!'),WPForms.Admin.Builder.DragFields.disableDragAndDrop()},enableDragAndDrop(){console.warn('WARNING! Function "WPFormsBuilder.enableDragAndDrop()" has been deprecated, please use the new "WPForms.Admin.Builder.DragFields.enableDragAndDrop()" function instead!'),WPForms.Admin.Builder.DragFields.enableDragAndDrop()},disableFormActions(){b.each([y.$previewButton,y.$embedButton,y.$saveButton,y.$exitButton],function(e,i){i.prop("disabled",!0).addClass("wpforms-disabled")})},enableFormActions(){b.each([y.$previewButton,y.$embedButton,y.$saveButton,y.$exitButton],function(e,i){i.prop("disabled",!1).removeClass("wpforms-disabled")})},fieldSortable(){console.warn('WARNING! Function "WPFormsBuilder.fieldSortable()" has been deprecated, please use the new "WPForms.Admin.Builder.DragFields.initSortableFields()" function instead!'),WPForms.Admin.Builder.DragFields.initSortableFields()},fieldDragDisable(e,i=!0){console.warn('WARNING! Function "WPFormsBuilder.fieldDragDisable()" has been deprecated, please use the new "WPForms.Admin.Builder.DragFields.fieldDragDisable()" function instead!'),WPForms.Admin.Builder.DragFields.fieldDragDisable(e,i)},fieldDragEnable(e){console.warn('WARNING! Function "WPFormsBuilder.fieldDragEnable()" has been deprecated, please use the new "WPForms.Admin.Builder.DragFields.fieldDragEnable()" function instead!'),WPForms.Admin.Builder.DragFields.fieldDragEnable(e)},fieldChoiceAdd(e,i){e.preventDefault();var e=b(i),i=e.parent(),o=i.find("input.default").is(":checked"),e=e.closest(".wpforms-field-option-row-choices").data("field-id"),t=i.parent().attr("data-next-id"),r=i.parent().data("field-type"),s=i.clone().insertAfter(i);s.attr("data-key",t),s.find("input.label").val("").attr("name","fields["+e+"][choices]["+t+"][label]"),s.find("input.value").val("").attr("name","fields["+e+"][choices]["+t+"][value]"),s.find(".wpforms-image-upload input.source").val("").attr("name","fields["+e+"][choices]["+t+"][image]"),s.find(".wpforms-icon-select input.source-icon").val(wpforms_builder.icon_choices.default_icon).attr("name","fields["+e+"][choices]["+t+"][icon]"),s.find(".wpforms-icon-select input.source-icon-style").val(wpforms_builder.icon_choices.default_icon_style).attr("name","fields["+e+"][choices]["+t+"][icon_style]"),s.find(".wpforms-icon-select .ic-fa-preview").removeClass().addClass("ic-fa-preview ic-fa-"+wpforms_builder.icon_choices.default_icon_style+" ic-fa-"+wpforms_builder.icon_choices.default_icon),s.find(".wpforms-icon-select .ic-fa-preview + span").text(wpforms_builder.icon_choices.default_icon),s.find("input.default").attr("name","fields["+e+"][choices]["+t+"][default]").prop("checked",!1),s.find(".preview").empty(),s.find(".wpforms-image-upload-add").show(),s.find(".wpforms-money-input").trigger("focusout"),!0===o&&i.find("input.default").prop("checked",!0),t++,i.parent().attr("data-next-id",t),v.trigger("wpformsFieldChoiceAdd",[e]),k.fieldChoiceUpdate(r,e)},fieldChoiceDelete(e,i){e.preventDefault();const o=b(i),t=o.parent().parent(),r=t.find("li").length,s={id:t.data("field-id"),choiceId:o.closest("li").data("key"),message:""+wpforms_builder.delete_choice_confirm+"",trigger:!1};if(v.trigger("wpformsBeforeFieldDeleteAlert",[s]),1===r)k.fieldChoiceDeleteAlert();else{const l=function(){o.parent().remove(),k.fieldChoiceUpdate(t.data("field-type"),t.data("field-id")),v.trigger("wpformsFieldChoiceDelete",[t.data("field-id")])};s.trigger?b.confirm({title:!1,content:s.message,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"],action(){l()}},cancel:{text:wpforms_builder.cancel}}}):l()}},fieldChoiceDeleteAlert(){b.alert({title:!1,content:wpforms_builder.error_choice,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})},fieldChoiceSortable(t,e){b(e=void 0!==e?e:".wpforms-field-option-"+t+" .wpforms-field-option-row-choices ul").sortable({items:"li",axis:"y",delay:100,opacity:.6,handle:".move",stop(e,i){var o=i.item.parent().data("field-id");k.fieldChoiceUpdate(t,o),v.trigger("wpformsFieldChoiceMove",i)},update(e,i){}})},fieldChoiceLabel(e,i){var o=["payment-multiple","payment-checkbox"].includes(e.settings.type),t=e.settings.choices_icons||e.settings.choices_images,r=void 0===e.settings.choices[i].label||0===e.settings.choices[i].label.length;if(r&&!o&&t)return"";t=o?wpforms_builder.payment_choice_empty_label_tpl:wpforms_builder.choice_empty_label_tpl;let s=r?t.replace("{number}",i):wpf.sanitizeHTML(e.settings.choices[i].label,wpforms_builder.allowed_label_html_tags);return e.settings.show_price_after_labels&&(s+=" - "+wpf.amountFormatCurrency(e.settings.choices[i].value)),s},fieldChoiceUpdate:(l,e,i=-1)=>{const n=k.dropdownField.helpers.isDynamicChoices(e);if(!k.replaceChoicesWithTemplate(l,e,n)){-1===i&&(i=k.settings.choicesLimitLong),"payment-select"===l&&(l="select");const a=b("#wpforms-field-"+e+" .primary-input");let s="";"select"===l?n||(s='',a.find("option").not(".placeholder").remove()):"radio"!==l&&"checkbox"!==l&&"gdpr-checkbox"!==l||(l="gdpr-checkbox"===l?"checkbox":l,a.find("li").remove(),s='
    • {label}
    • ');const t=b("#wpforms-field-option-row-"+e+"-choices .choices-list"),r=t.find("li").slice(0,i),d=!!t.find("input.default:checked").length,p=[],f=b("#wpforms-field-option-"+e+"-show_price_after_labels").prop("checked"),c=k.dropdownField.helpers.isModernSelect(a);var o;r.get().forEach(function(e){var e=b(e),i=e.find("input.value").val(),o=e.data("key");let t=wpf.sanitizeHTML(e.find("input.label").val().trim(),wpforms_builder.allowed_label_html_tags),r;if(t=""!==t?t:wpforms_builder.choice_empty_label_tpl.replace("{number}",o),t+=f&&i?" - "+wpf.amountFormatCurrency(i):"",c?p.push({value:t,label:t}):n||(r=b(s.replace(/{label}/g,t)),a.append(r)),!0===e.find("input.default").is(":checked"))switch(l){case"select":c?p[p.length-1].selected=!0:k.setClassicSelectedChoice(r);break;case"radio":case"checkbox":r.find("input").prop("checked","true")}}),c&&(i=a.prop("multiple")?"input.choices__input":".choices__inner .choices__placeholder",o=k.dropdownField.helpers.getInstance(a),n||o.removeActiveItems(),o.setChoices(p,"value","label",!0),k.dropdownField.helpers.update(e,n),a.closest(".choices").find(i).toggleClass("wpforms-hidden",d))}},replaceChoicesWithTemplate:(e,i,o)=>{if("radio"!==e&&"checkbox"!==e&&"payment-multiple"!==e&&"payment-checkbox"!==e)return!1;var t=wpf.getChoicesOrder(i),r=wp.template("wpforms-field-preview-checkbox-radio-payment-multiple");const s=wpf.getField(i),l={},n=t.slice(0,k.settings.choicesLimit),a={settings:s,order:n,type:"radio"};return s.choices_icons&&(a.settings.choices_icons_color=k.getValidColorPickerValue(b("#wpforms-field-option-"+i+"-choices_icons_color"))),n.forEach(function(e){l[e]=s.choices[e]}),s.choices=l,"checkbox"!==e&&"payment-checkbox"!==e||(a.type="checkbox"),o||b("#wpforms-field-"+i).find("ul.primary-input").replaceWith(r(a)),k.firstNChoicesAlert(i,t.length),!0},setClassicSelectedChoice(e){void 0!==e&&e.prop("selected","true")},fieldChoiceBulkAddToggle(i){var i=b(i),o=i.closest("label");if(i.hasClass("bulk-add-showing")){const e=o.next(".bulk-add-display");e.slideUp(400,function(){e.remove()}),i.find("span").text(wpforms_builder.bulk_add_show)}else{let e='
      ';e=e+('

      '+wpforms_builder.bulk_add_heading+' '+wpforms_builder.bulk_add_presets_show+"

      ")+"")+(''))+('")+"
      ",o.after(e),o.next(".bulk-add-display").slideDown(400,function(){b(this).find("textarea").trigger("focus")}),i.find("span").text(wpforms_builder.bulk_add_hide)}i.toggleClass("bulk-add-showing")},fieldChoiceBulkAddInsert(e){var i,e=b(e),o=e.closest(".wpforms-field-option-row"),t=o.find("textarea"),r=o.find(".choices-list"),s=r.find("li:first-of-type").clone().wrap("
      ").parent(),l=o.data("field-id"),n=r.data("field-type");let a=Number(r.attr("data-next-id"));var d=t.val().split("\n");let p="";e.prop("disabled",!0).html(e.html()+" "+m.spinner),s.find("input.value,input.label").attr("value",""),s.find("input.default").attr("checked",!1),s.find("input.source-icon").attr("value",wpforms_builder.icon_choices.default_icon),s.find("input.source-icon-style").attr("value",wpforms_builder.icon_choices.default_icon_style),s.find(".ic-fa-preview").removeClass().addClass(`ic-fa-preview ic-fa-${wpforms_builder.icon_choices.default_icon_style} ic-fa-`+wpforms_builder.icon_choices.default_icon),s.find(".ic-fa-preview + span").text(wpforms_builder.icon_choices.default_icon),i=s.html();for(const c in d)if(d.hasOwnProperty(c)){var f=wpf.sanitizeHTML(d[c]).trim().replace(/"/g,""");let e=i;e=(e=(e=(e=e.replace(/\[choices\]\[(\d+)\]/g,"[choices]["+a+"]")).replace(/data-key="(\d+)"/g,'data-key="'+a+'"')).replace(/value="" class="label"/g,'value="'+f+'" class="label"')).replace(/class="label" type="text" value=""/g,'class="label" type="text" value="'+f+'"'),p+=e,a++}r.attr("data-next-id",a).append(p),k.fieldChoiceUpdate(n,l,a),v.trigger("wpformsFieldChoiceAdd"),k.fieldChoiceBulkAddToggle(o.find(".toggle-bulk-add-display"))},triggerBuilderEvent(e){v.trigger(e)},fieldTabToggle(e){var i;if(WPFormsUtils.triggerEvent(v,"wpformsFieldTabToggle",[e]).isDefaultPrevented())return!1;b(".wpforms-tab a").removeClass("active"),b(".wpforms-field, .wpforms-title-desc").removeClass("active"),"add-fields"===e?(y.$addFieldsTab.addClass("active"),b(".wpforms-field-options").hide(),b(".wpforms-add-fields").show()):(b("#field-options a").addClass("active"),"field-options"===e?((i=b(".wpforms-field").first()).addClass("active"),e=i.data("field-id")):b("#wpforms-field-"+e).addClass("active"),b(".wpforms-field-option").hide(),b("#wpforms-field-option-"+e).show(),b(".wpforms-add-fields").hide(),b(".wpforms-field-options").show(),v.trigger("wpformsFieldOptionTabToggle",[e]))},fieldPagebreakAdd(e,i,o){if("pagebreak"===o){let e;m.pagebreakTop?m.pagebreakBottom||(m.pagebreakBottom=!0,e={position:"bottom",scroll:!1,defaults:{position:"bottom"}},k.fieldAdd("pagebreak",e).done(function(e){m.pagebreakBottom=e.data.field.id;var i=b("#wpforms-field-"+e.data.field.id);b("#wpforms-field-option-"+e.data.field.id).find(".wpforms-field-option-group").addClass("wpforms-pagebreak-bottom"),i.addClass("wpforms-field-stick wpforms-pagebreak-bottom")})):(m.pagebreakTop=!0,e={position:"top",scroll:!1,defaults:{position:"top",nav_align:"left"}},k.fieldAdd("pagebreak",e).done(function(e){m.pagebreakTop=e.data.field.id;var i=b("#wpforms-field-"+e.data.field.id);b("#wpforms-field-option-"+e.data.field.id).find(".wpforms-field-option-group").addClass("wpforms-pagebreak-top"),i.addClass("wpforms-field-stick wpforms-pagebreak-top")}))}},fieldPagebreakDelete(e,i,o){var t,r,s;"pagebreak"!==o||b("#wpforms-panel-fields .wpforms-field-pagebreak").not(".wpforms-pagebreak-top, .wpforms-pagebreak-bottom").length||(r=(t=(o=b("#wpforms-panel-fields .wpforms-preview-wrap")).find(".wpforms-pagebreak-top")).data("field-id"),s=(o=o.find(".wpforms-pagebreak-bottom")).data("field-id"),t.remove(),b("#wpforms-field-option-"+r).remove(),m.pagebreakTop=!1,o.remove(),b("#wpforms-field-option-"+s).remove(),m.pagebreakBottom=!1)},fieldPageBreakInitDisplayPrevious(e){var i=e.data("field-id"),o=b("#wpforms-field-option-row-"+i+"-prev_toggle"),i=b("#wpforms-field-option-row-"+i+"-prev"),t=e.find(".wpforms-pagebreak-prev");0":">")+f[e].label+"",c.append(t)}else for(e in i="radio",d.hasClass("wpforms-field-checkbox")&&(i="checkbox"),c.empty(),f)t='
    • ":">")+f[e].label+"
    • ",c.append(t);o.find("ul").removeClass("wpforms-hidden"),o.find(".wpforms-alert").addClass("wpforms-hidden"),c.removeClass("wpforms-hidden")}wpf.fieldOptionLoading(r,!0)}},fieldDynamicChoiceSource(e){const i=b(e),o=i.parent(),t=i.val(),r=o.data("field-id"),s=b("#wpforms-builder-form").data("id"),l=b("#wpforms-field-option-row-"+r+"-choices"),n=b("#wpforms-field-"+r),a=b("#wpforms-field-option-"+r+"-dynamic_choices option:selected").val();let d=20;wpf.fieldOptionLoading(o);e={type:a,source:t,field_id:r,form_id:s,action:"wpforms_builder_dynamic_source",nonce:wpforms_builder.nonce};b.post(wpforms_builder.ajax_url,e,function(i){if(i.success){if(l.find(".dynamic-name").text(i.data.source_name),l.find(".dynamic-type").text(i.data.type_name),l.find("ul").addClass("wpforms-hidden"),l.find(".wpforms-alert").removeClass("wpforms-hidden"),k.fieldDynamicChoiceSourceItems(n,i.data.items),n.hasClass("wpforms-field-select")&&(d=200),n.find(".wpforms-notice-dynamic-empty").remove(),Number(i.data.total)>d){let e=wpforms_builder.dynamic_choices.limit_message;e=(e=(e=(e=e.replace("{source}",i.data.source_name)).replace("{type}",i.data.type_name)).replace("{limit}",d)).replace("{total}",i.data.total),b.alert({title:wpforms_builder.heads_up,content:e,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})}k.firstNChoicesAlert(r,i.data.total),0===Number(i.data.total)&&k.emptyChoicesNotice(r,i.data.source_name,i.data.type)}else console.log(i);wpf.fieldOptionLoading(o,!0)}).fail(function(e,i,o){console.log(e.responseText)})},fieldDynamicChoiceSourceItems(i,o){var t=i.find(".primary-input");let r=0;if(i.hasClass("wpforms-field-select"))k.dropdownField.helpers.isModernSelect(t)?k.fieldDynamicChoiceSourceForModernSelect(t,o):k.fieldDynamicChoiceSourceForClassicSelect(t,o);else{let e="radio";for(r in i.hasClass("wpforms-field-checkbox")&&(e="checkbox"),t.empty(),o)t.append('
    • '+wpf.sanitizeHTML(o[r])+"
    • ")}},fieldDynamicChoiceSourceForModernSelect(e,i){var o=k.dropdownField.helpers.getInstance(e),t=e.closest(".wpforms-field").data().fieldId;o.destroy(),k.dropdownField.helpers.updatePlaceholderChoice(o,t),k.fieldDynamicChoiceSourceForClassicSelect(e,i),k.dropdownField.events.choicesInit(e)},fieldDynamicChoiceSourceForClassicSelect(e,i){let o=0;var t=i.length;for(e.find("option").not(".placeholder").remove();o'+r+"")}e.toggleClass("wpforms-hidden",!t)},fieldDynamicChoiceToggleImageChoices(){b("#wpforms-builder .wpforms-field-options .wpforms-field-option").each(function(e,i){var i=b(i),o=i.find(".wpforms-field-option-row-dynamic_choices select").val(),o=void 0!==o&&""!==o,t=i.find(".wpforms-field-option-row-choices_images input").is(":checked");i.find(".wpforms-field-option-row-choices_images").toggleClass("wpforms-hidden",o),t&&!o||i.find(".wpforms-field-option-row-choices_images_style").addClass("wpforms-hidden")})},fieldDynamicChoiceToggleIconChoices(){b("#wpforms-builder .wpforms-field-options .wpforms-field-option").each(function(e,i){var i=b(i),o=i.find(".wpforms-field-option-row-dynamic_choices select").val(),o=void 0!==o&&""!==o,t=i.find(".wpforms-field-option-row-choices_icons input").is(":checked");i.find(".wpforms-field-option-row-choices_icons").toggleClass("wpforms-hidden",o),t&&!o||(i.find(".wpforms-field-option-row-choices_icons_color").addClass("wpforms-hidden"),i.find(".wpforms-field-option-row-choices_icons_size").addClass("wpforms-hidden"),i.find(".wpforms-field-option-row-choices_icons_style").addClass("wpforms-hidden"))})},firstNChoicesAlert:(e,i)=>{var o,t,r,e=b("#wpforms-field-"+e);e.hasClass("wpforms-field-select")||(o=wp.template("wpforms-choices-limit-message"),t={total:i},r=k.settings.choicesLimit,e.find(".wpforms-alert-dynamic").remove(),r .layout-selector-display`);if(!e.length){var t={"layout-1":[{class:"one-half",data:"wpforms-one-half wpforms-first"},{class:"one-half",data:"wpforms-one-half"}],"layout-2":[{class:"one-third",data:"wpforms-one-third wpforms-first"},{class:"one-third",data:"wpforms-one-third"},{class:"one-third",data:"wpforms-one-third"}],"layout-3":[{class:"one-fourth",data:"wpforms-one-fourth wpforms-first"},{class:"one-fourth",data:"wpforms-one-fourth"},{class:"one-fourth",data:"wpforms-one-fourth"},{class:"one-fourth",data:"wpforms-one-fourth"}],"layout-4":[{class:"one-third",data:"wpforms-one-third wpforms-first"},{class:"two-third",data:"wpforms-two-thirds"}],"layout-5":[{class:"two-third",data:"wpforms-two-thirds wpforms-first"},{class:"one-third",data:"wpforms-one-third"}],"layout-6":[{class:"one-fourth",data:"wpforms-one-fourth wpforms-first"},{class:"one-fourth",data:"wpforms-one-fourth"},{class:"two-fourth",data:"wpforms-two-fourths"}],"layout-7":[{class:"two-fourth",data:"wpforms-two-fourths wpforms-first"},{class:"one-fourth",data:"wpforms-one-fourth"},{class:"one-fourth",data:"wpforms-one-fourth"}],"layout-8":[{class:"one-fourth",data:"wpforms-one-fourth wpforms-first"},{class:"two-fourth",data:"wpforms-two-fourths"},{class:"one-fourth",data:"wpforms-one-fourth"}]};let e,i=`

      ${wpforms_builder.layout_selector_layout}

      `;for(const r in t){e=t[r],i+='
      ';for(const s in e)i+=``;i+="
      "}i+="
      ",b(`#wpforms-field-option-row-${o}-css > label`).after(i)}},fieldLayoutSelectorLayout(e){e=b(e);e.parent().find(".layout-selector-display-layout").not(e).remove(),e.parent().find(".heading").text(wpforms_builder.layout_selector_column),e.toggleClass("layout-selector-display-layout layout-selector-display-columns")},fieldLayoutSelectorInsert(e){const i=b(e),o=i.closest(".layout-selector-display"),t=o.parent(),r=t.data("field-id"),s=t.find("label"),l=t.find("input[type=text]");let n=i.data("classes"),a=l.val();a&&(["wpforms-one-half","wpforms-first","wpforms-one-third","wpforms-one-fourth","wpforms-two-thirds","wpforms-two-fourths"].forEach(e=>{a=a.replace(new RegExp("\\b"+e+"\\b","gi"),"")}),a=a.replace(/\s\s+/g," ").trim(),n+=" "+a),l.val(n),o.slideUp(400,function(){o.remove(),k.fieldLayoutSelectorInit(r)}),s.find(".toggle-layout-selector-display").removeClass("layout-selector-showing"),s.find(".toggle-layout-selector-display span").text(wpforms_builder.layout_selector_show)},toggleOrderSummaryConfirmation(e,i,o){"payment-total"===o&&b(".wpforms-confirmation").each(function(){b(this).find(".wpforms-panel-field-confirmations-message_order_summary").closest(".wpforms-panel-field").toggle(0!==b("#wpforms-panel-fields .wpforms-field-payment-total").length)})},bindUIActionsSettings(){v.on("click","#wpforms-panel-fields .wpforms-title-desc, #wpforms-panel-fields .wpforms-field-submit-button, .wpforms-center-form-name",function(e){e.preventDefault(),k.panelSwitch("settings"),(b(this).hasClass("wpforms-center-form-name")||b(this).hasClass("wpforms-title-desc"))&&setTimeout(function(){b("#wpforms-panel-field-settings-form_title").trigger("focus")},300)}),v.on("click",".wpforms-field-pagebreak-last button",function(e){e.preventDefault(),k.panelSwitch("settings"),b("#wpforms-panel-field-settings-pagebreak_prev").trigger("focus")}),v.on("click",".wpforms-panel-content-also-available-item-add-captcha",function(e){e.preventDefault();e=v.find("#wpforms-add-fields-captcha");e.data("action")?e.trigger("click"):k.fieldAdd("captcha",{}).done(function(e){k.panelSwitch("fields"),b("#wpforms-field-"+e.data.field.id).trigger("click")})}),v.on("input","#wpforms-panel-field-settings-pagebreak_prev",function(){b(".wpforms-field-pagebreak-last button").text(b(this).val())}),v.on("input","#wpforms-panel-field-settings-form_title, #wpforms-setup-name",function(){var e=b(this).val().toString().trim();b(".wpforms-preview .wpforms-form-name").text(e),b(".wpforms-center-form-name.wpforms-form-name").text(e),k.trimFormTitle()}),v.on("input","#wpforms-panel-field-settings-form_desc",function(){b(".wpforms-form-desc").text(b(this).val())}),v.on("input","#wpforms-panel-field-settings-submit_text",function(){b(".wpforms-field-submit input[type=submit]").val(b(this).val())}),v.on("change","#wpforms-panel-field-settings-recaptcha",function(){k.captchaToggle()}),v.on("change",".wpforms-panel-field-confirmations-type",function(){k.confirmationFieldsToggle(b(this))}),v.on("change",".wpforms-panel-field-confirmations-message_entry_preview",k.confirmationEntryPreviewToggle),v.on("change","#wpforms-panel-field-settings-notification_enable",function(){k.notificationToggle()}),v.on("click",".wpforms-builder-settings-block-add",function(e){e.preventDefault(),wpforms_builder.pro&&k.settingsBlockAdd(b(this))}),v.on("click",".wpforms-builder-settings-block-edit",function(e){e.preventDefault();e=b(this);e.parents(".wpforms-builder-settings-block-header").find(".wpforms-builder-settings-block-name").hasClass("editing")?k.settingsBlockNameEditingHide(e):k.settingsBlockNameEditingShow(e)}),v.on("blur",".wpforms-builder-settings-block-name-edit input",function(e){b(e.relatedTarget).hasClass("wpforms-builder-settings-block-edit")||k.settingsBlockNameEditingHide(b(this))}),v.on("keypress",".wpforms-builder-settings-block-name-edit input",function(e){13===e.keyCode&&(k.settingsBlockNameEditingHide(b(this)),e.preventDefault())}),v.on("click",".wpforms-builder-settings-block-clone",function(e){e.preventDefault(),k.settingsBlockPanelClone(b(this))}),v.on("click",".wpforms-builder-settings-block-toggle",function(e){e.preventDefault(),k.settingsBlockPanelToggle(b(this))}),v.on("click",".wpforms-builder-settings-block-delete",function(e){e.preventDefault(),k.settingsBlockDelete(b(this))})},captchaToggle(){var e=v.find(".wpforms-field-recaptcha"),i=b("#wpforms-panel-field-settings-recaptcha"),o=i.data("provider")||"recaptcha";e.length&&(i.is(":checked")?e.show().toggleClass("is-recaptcha","recaptcha"===o):e.hide())},confirmationsSetup(){b(".wpforms-panel-field-confirmations-type").each(function(){k.confirmationFieldsToggle(b(this))}),b(".wpforms-panel-field-confirmations-message").each(function(){"undefined"!=typeof tinymce&&void 0!==wp.editor&&wp.editor.initialize(b(this).attr("id"),m.tinymceDefaults)}),v.on("focusout",".wpforms-panel-field-confirmations-redirect",function(e){const i=b(this);var o=i.val().trim();i.val(o),wpf.isURL(o)||""===o||k.confirmationRedirectValidationError(function(){i.trigger("focus")})}),v.on("wpformsBeforeSave wpformsPanelSectionSwitch wpformsPanelSwitch",function(t){b(".wpforms-confirmation").each(function(e,i){i=b(i);const o=i.find(".wpforms-panel-field-confirmations-redirect");if(!o.is(":hidden")){i=i.find(".wpforms-panel-field-confirmations-type");if(!("redirect"!==i.val()||0',o='

      '+wpforms_builder[f+"_error"]+"

      ",t=e+i+o,r=b.confirm({container:v,title:!1,content:t,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"],action(){var e=this.$content.find("input#settings-block-name").val().toString().trim(),i=this.$content.find(".error");if(""===e)return i.show(),!1;var i=a.closest(".wpforms-panel-content-section").find(".wpforms-builder-settings-block").first(),o=(wpf.restoreTooltips(i),i.clone()),t=i.data("block-id");let r;o.attr("data-block-id",d),o.find(".wpforms-builder-settings-block-header span").text(e);o.find("input, textarea, select").each(function(){var e=b(this),i=e.parent();e.hasClass("wpforms-disabled")&&(i.hasClass("from-name")||i.hasClass("from-email"))||(i=e).attr("name")&&(i.val("").attr("name",i.attr("name").replace(/\[(\d+)\]/,"["+d+"]")),i.is("select")?(i.find("option").prop("selected",!1).attr("selected",!1),i.find("option").first().prop("selected",!0).attr("selected","selected")):"checkbox"===i.attr("type")?i.prop("checked",!1).attr("checked",!1).val("1"):i.val("").attr("value",""))});const s="wpforms-panel-field-"+p+"-",l=s+t,n=(o.find('[id^="'+l+'"], [for^="'+l+'"]').each(function(e,i){var o=b(this),t="LABEL"===o.prop("tagName")?"for":"id",r=o.attr(t).replace(new RegExp(l,"g"),s+d);o.attr(t,r)}),t+"-notification-by-status");o.find('[data-radio-group="'+n+'"]').each(function(e,i){b(this).removeClass("wpforms-radio-group-"+n).addClass("wpforms-radio-group-"+d+"-notification-by-status").attr("data-radio-group",d+"-notification-by-status")}),o.find(".wpforms-builder-settings-block-header input").val(e).attr("value",e),"notification"===f&&(o.find(".email-msg textarea").val("{all_fields}").attr("value","{all_fields}"),o.find(".email-recipient input").val("{admin_email}").attr("value","{admin_email}")),o.removeClass("wpforms-builder-settings-block-default"),"confirmation"===f&&(o.find(".wpforms-panel-field-tinymce").remove(),"undefined"!=typeof WPForms)&&o.find(".wpforms-panel-field-confirmations-type-wrap").after(WPForms.Admin.Builder.Templates.get("wpforms-builder-confirmations-message-field")({id:d}));t=o.find(".wpforms-conditional-block"),t.length&&"undefined"!=typeof WPForms&&t.html(WPForms.Admin.Builder.Templates.get("wpforms-builder-conditional-logic-toggle-field")({id:d,type:f,actions:JSON.stringify(o.find(".wpforms-panel-field-conditional_logic-checkbox").data("actions")),actionDesc:o.find(".wpforms-panel-field-conditional_logic-checkbox").data("action-desc")})),e=o.find(".wpforms-field-map-table"),e.length&&e.each(function(e,i){var i=b(i),o=(i.find("tr:not(:first-child)").remove(),i.find(".key input")),i=i.find(".field select"),t=i.data("name");o.attr("value",""),i.attr("name","").attr("data-name",t.replace(/\[(\d+)\]/,"["+d+"]"))}),r=(r=o.wrap("
      ").parent().html()).replace(/\[conditionals\]\[(\d+)\]\[(\d+)\]/g,"[conditionals][0][0]"),i.before(r),t=i.prev();"confirmation"===f&&(k.prepareChoicesJSField(t,d),k.confirmationFieldsToggle(b(".wpforms-panel-field-confirmations-type").first())),"undefined"!=typeof tinymce&&void 0!==wp.editor&&"confirmation"===f&&wp.editor.initialize("wpforms-panel-field-confirmations-message-"+d,m.tinymceDefaults),wpf.initTooltips(),v.trigger("wpformsSettingsBlockAdded",[t]),a.attr("data-next-id",d+1)}},cancel:{text:wpforms_builder.cancel}}});v.on("keypress","#settings-block-name",function(e){13===e.keyCode&&b(r.buttons.confirm.el).trigger("click")})},prepareChoicesJSField(e,i){var o,e=e.find(`#wpforms-panel-field-confirmations-${i}-page-wrap`);e.length<=0||(i=e.find(`#wpforms-panel-field-confirmations-${i}-page`)).length<=0&&!i.hasClass("choicesjs-select")||(o=e.find(".choices")).length<=0||((i=i.first()).removeAttr("data-choice"),i.removeAttr("hidden"),i.removeClass("choices__input"),b(i).appendTo(e.first()),o.first().remove(),k.dropdownField.events.choicesInit(i))},settingsBlockNameEditingShow(e){e=e.parents(".wpforms-builder-settings-block-header");e.find(".wpforms-builder-settings-block-name").addClass("editing").hide(),e.find(".wpforms-builder-settings-block-name-edit").addClass("active"),wpf.focusCaretToEnd(e.find("input"))},settingsBlockNameEditingHide(e){var i=e.parents(".wpforms-builder-settings-block-header"),o=i.find(".wpforms-builder-settings-block-name"),i=i.find(".wpforms-builder-settings-block-name-edit");let t=i.find("input").val().trim();e=e.closest(".wpforms-builder-settings-block").data("block-type");t.length||(t=wpforms_builder[e+"_def_name"]),i.find("input").val(t),o.text(t),o.removeClass("editing").show(),i.removeClass("active")},settingsBlockPanelClone(e){const i=e.closest(".wpforms-panel-content-section"),o=i.find(".wpforms-builder-settings-block-add"),t=e.closest(".wpforms-builder-settings-block"),r=t.find(".wpforms-builder-settings-block-content"),s=parseInt(o.attr("data-next-id"),10),l=t.data("block-type"),n=t.find(".wpforms-builder-settings-block-name").text().trim()+wpforms_builder[l+"_clone"],a=r.is(":hidden"),d=(wpf.restoreTooltips(t),t.clone(!1,!0));k.settingsBlockUpdateState(a,s,l),d.data("block-id",s),d.find(".wpforms-builder-settings-block-header span").text(n),d.find(".wpforms-builder-settings-block-header input").val(n),d.removeClass("wpforms-builder-settings-block-default"),o.attr("data-next-id",s+1),d.find("input, textarea, select").each(function(){var e=b(this);e.attr("name")&&e.attr("name",e.attr("name").replace(/\[(\d+)\]/,"["+s+"]")),e.data("name")&&e.data("name",e.data("name").replace(/\[(\d+)\]/,"["+s+"]")),e.attr("class")&&e.attr("class",e.attr("class").replace(/-(\d+)/,"-"+s)),e.attr("data-radio-group")&&e.attr("data-radio-group",e.attr("data-radio-group").replace(/(\d+)-/,s+"-"))}),d.find("*").each(function(){var e=b(this);e.attr("id")&&e.attr("id",e.attr("id").replace(/-(\d+)/,"-"+s)),e.attr("for")&&e.attr("for",e.attr("for").replace(/-(\d+)-/,"-"+s+"-")),e.data("input-name")&&e.data("input-name",e.data("input-name").replace(/\[(\d+)\]/,"["+s+"]"))}),t.find("select").each(function(){var e=b(this).attr("name"),i=b(this).attr("name").replace(/\[(\d+)\]/,"["+s+"]");d.find('select[name="'+i+'"]').val(b(this).attr("name",e).val())}),d.css("display","none").insertBefore(t).show("fast",function(){wpf.initTooltips()}),v.trigger("wpformsSettingsBlockCloned",[d,t.data("block-id")])},settingsBlockPanelToggle(e){const i=e.closest(".wpforms-builder-settings-block"),o=i.data("block-id"),t=i.data("block-type"),r=i.find(".wpforms-builder-settings-block-content"),s=r.is(":visible");r.stop().slideToggle({duration:400,start(){k.settingsBlockUpdateState(s,o,t)},always(){r.is(":visible")?e.html(''):e.html('')}})},settingsBlockDelete(e){var i=e.closest(".wpforms-panel-content-section");if(!(i.find(".wpforms-builder-settings-block").length<2)){const o=e.closest(".wpforms-builder-settings-block"),t=o.data("block-type");b.confirm({title:!1,content:wpforms_builder[t+"_delete"],icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"],action(){var e=o.data("block-id"),i=o.data("block-type");b.post(wpforms_builder.ajax_url,{action:"wpforms_builder_settings_block_state_remove",nonce:wpforms_builder.nonce,block_id:e,block_type:i,form_id:m.formID}),o.remove(),v.trigger("wpformsSettingsBlockDeleted",[t,e])}},cancel:{text:wpforms_builder.cancel}}})}},settingsBlockUpdateState(e,i,o){b.post(wpforms_builder.ajax_url,{action:"wpforms_builder_settings_block_state_save",state:e?"closed":"opened",form_id:m.formID,block_id:i,block_type:o,nonce:wpforms_builder.nonce})},bindUIActionsRevisions(){v.on("wpformsPanelSwitched",function(e,i){"revisions"===i&&(k.updateRevisionsList(),k.updateRevisionPreview())}),v.on("wpformsSaved",function(e){"revisions"===wpf.getQueryString("view")&&k.updateRevisionsList()})},updateRevisionsList(){const i=b(".wpforms-panel-revisions-button .badge-exclamation");if(i.length&&b.post(wpforms_builder.ajax_url,{action:"wpforms_mark_panel_viewed",form_id:m.formID,nonce:wpforms_builder.nonce}).done(function(e){e.success?i.remove():wpf.debug(e)}).fail(function(e,i,o){wpf.debug(e.responseText||i||"")}),v.hasClass("wpforms-revisions-enabled")){const t=b("#wpforms-panel-revisions .wpforms-revisions-content");t.fadeTo(250,.25,function(){b.post(wpforms_builder.ajax_url,{action:"wpforms_get_form_revisions",form_id:m.formID,revision_id:wpf.getQueryString("revision_id"),nonce:wpforms_builder.nonce}).done(function(e){e.success?t.replaceWith(e.data.html):wpf.debug(e)}).fail(function(e,i,o){wpf.debug(e.responseText||i||""),t.fadeTo(250,1)})})}},updateRevisionPreview(){var e=y.$formPreview.clone();e.find(".wpforms-field-duplicate, .wpforms-field-delete, .wpforms-field-helper, .wpforms-debug").remove().end(),e.find(".wpforms-field-wrap").removeClass("ui-sortable").addClass("ui-sortable-disabled"),e.find(".wpforms-field").removeClass("ui-sortable-handle ui-draggable ui-draggable-handle active").removeAttr("id data-field-id data-field-type").removeData(),e.find(".wpforms-field-submit-button").prop("disabled",!0),y.$revisionPreview.hasClass("has-preview")?y.$revisionPreview.find(".wpforms-preview-wrap").replaceWith(e):y.$revisionPreview.append(e).addClass("has-preview")},confirmSaveRevision(){b.confirm({title:wpforms_builder.heads_up,content:wpforms_builder.revision_update_confirm,icon:"fa fa-exclamation-circle",type:"orange",closeIcon:!1,buttons:{confirm:{text:wpforms_builder.save,btnClass:"btn-confirm",keys:["enter"],action(){v.addClass("wpforms-revision-is-saving"),WPFormsBuilder.formSave(!1).done(k.revisionSavedReload)}},cancel:{text:wpforms_builder.cancel,action(){WPFormsBuilder.setCloseConfirmation(!0)}}}})},revisionSavedReload(){wpf.updateQueryString("view",wpf.getQueryString("view")),wpf.removeQueryParam("revision_id"),n.location.reload()},bindUIActionsSaveExit(){v.on("click","#wpforms-embed",function(e){e.preventDefault(),b(this).hasClass("wpforms-disabled")||b(this).hasClass("wpforms-btn-light-grey-disabled")||WPFormsFormEmbedWizard.openPopup()}),v.on("click","#wpforms-save",function(e){e.preventDefault(),k.formSave(!1)}),v.on("click","#wpforms-exit",function(e){e.preventDefault(),k.formExit()}),v.on("wpformsSaved",function(e,i){wpf.removeQueryParam("newform")})},formSave(i){if(v.hasClass("wpforms-is-revision")&&!v.hasClass("wpforms-revision-is-saving"))k.confirmSaveRevision();else{"undefined"!=typeof tinyMCE&&tinyMCE.triggerSave();var e=WPFormsUtils.triggerEvent(v,"wpformsBeforeSave");if(!e.isDefaultPrevented()){const o=y.$saveButton,t=o.find("i.fa-check"),r=o.find("i.wpforms-loading-spinner"),s=o.find("span"),l=s.text();s.text(wpforms_builder.saving),o.prop("disabled",!0),t.addClass("wpforms-hidden"),r.removeClass("wpforms-hidden");e={action:"wpforms_save_form",data:JSON.stringify(k.serializeAllData(b("#wpforms-builder-form"))),id:m.formID,nonce:wpforms_builder.nonce};return b.post(wpforms_builder.ajax_url,e,function(e){e.success?(wpf.savedState=wpf.getFormState("#wpforms-builder-form"),wpf.initialSave=!1,v.trigger("wpformsSaved",e.data),!0===i&&k.isBuilderInPopup()?k.builderInPopupClose("saved"):!0===i&&(n.location.href=wpforms_builder.exit_url)):(wpf.debug(e),k.formSaveError(e.data))}).fail(function(e,i,o){wpf.debug(e),k.formSaveError()}).always(function(){s.text(l),o.prop("disabled",!1),r.addClass("wpforms-hidden"),t.removeClass("wpforms-hidden")})}}},serializeAllData(e){const o=e.serializeArray();return e.find(".wpforms-field-option-layout .wpforms-field-option-row-label_hide input[type=checkbox]").each(function(){var e=b(this),i=e.attr("name"),e=e.is(":checked")?"1":"";e||o.push({name:i,value:e})}),o},formSaveError(e){wpf.empty(e)&&(e=wpforms_builder.error_save_form),b.confirm({title:wpforms_builder.heads_up,content:"

      "+e+"

      "+wpforms_builder.error_contact_support+"

      ",icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})},formExit(){k.isBuilderInPopup()&&k.formIsSaved()?k.builderInPopupClose("saved"):k.formIsSaved()?n.location.href=wpforms_builder.exit_url:b.confirm({title:!1,content:wpforms_builder.exit_confirm,icon:"fa fa-exclamation-circle",type:"orange",closeIcon:!0,buttons:{confirm:{text:wpforms_builder.save_exit,btnClass:"btn-confirm",keys:["enter"],action(){k.formSave(!0)}},cancel:{text:wpforms_builder.exit,action(){o=!1,k.isBuilderInPopup()?k.builderInPopupClose("canceled"):n.location.href=wpforms_builder.exit_url}}}})},setCloseConfirmation(e){o=!!e},formIsSaved(){return wpf.savedState===wpf.getFormState("#wpforms-builder-form")},isBuilderInPopup(){return n.self!==n.parent&&"wpforms-builder-iframe"===n.self.frameElement.id},builderInPopupClose(e){var i=n.parent.jQuery(".wpforms-builder-popup"),o=b(".wpforms-center-form-name").text();i.find("#wpforms-builder-iframe").attr("src","about:blank"),i.fadeOut(),i.trigger("wpformsBuilderInPopupClose",[e,m.formID,o])},bindUIActionsGeneral(){v.on("click",".toggle-smart-tag-display",k.smartTagToggle),v.on("click",".smart-tags-list-display a",k.smartTagInsert),v.on("click",".wpforms-panel-fields-group.unfoldable .wpforms-panel-fields-group-title",k.toggleUnfoldableGroup),v.on("click",".wpforms-field-helper-hide ",k.hideFieldHelper),v.on("input",".wpforms-field-map-table .key-source",function(){var e=b(this).val(),i=b(this).parent().parent().find(".key-destination"),o=i.data("name");e&&i.attr("name",o.replace("{source}",e.replace(/[^0-9a-zA-Z_-]/gi,"")))}),v.on("click",".wpforms-field-map-table .remove",function(e){e.preventDefault(),k.fieldMapTableDeleteRow(e,b(this))}),v.on("click",".wpforms-field-map-table .add",function(e){e.preventDefault(),k.fieldMapTableAddRow(e,b(this))}),b(r).on("wpformsFieldUpdate",k.fieldMapSelect),v.on("input",".wpforms-money-input",function(e){var i=b(this),o=i.val(),t=i[0].selectionStart,r=i[0].selectionEnd;i.val(o.replace(/[^0-9.,]/g,"")),i[0].setSelectionRange(t,r)}),v.on("focusout",".wpforms-money-input",function(e){var i=b(this),o=i.val();if(!o)return o;o=wpf.amountSanitize(o),o=wpf.amountFormat(o);i.val(o)}),v.on("change",".wpforms-panel-field-toggle",function(){var e=b(this);e.prop("disabled")||(e.prop("disabled",!0),k.toggleOptionsGroup(e))}),v.on("change",k.getPaymentsTogglesSelector(),function(e){var i=b(this),o=i.attr("id").replace(/wpforms-panel-field-|-enable|_one_time|_recurring/gi,""),t=b('.wpforms-panel-content-section-notifications [id*="-'+o+'-wrap"]');i.prop("checked")||b("#wpforms-panel-field-"+o+"-enable_one_time").prop("checked")||b("#wpforms-panel-field-"+o+"-enable_recurring").prop("checked")?b("#wpforms-panel-field-settings-disable_entries").prop("checked")?(b.confirm({title:wpforms_builder.heads_up,content:wpforms_builder.payments_entries_off,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.prop("checked",!1)):t.removeClass("wpforms-hidden"):(t.addClass("wpforms-hidden"),t.find('input[id*="-'+o+'"]').prop("checked",!1))}),v.on("change","#wpforms-panel-field-settings-disable_entries",function(e){var i=b(this);b("#wpforms-panel-field-settings-store_spam_entries-wrap").toggleClass("wpforms-hidden",i.prop("checked")),i.prop("checked")&&(k.isPaymentsEnabled()?(b.confirm({title:wpforms_builder.heads_up,content:wpforms_builder.payments_on_entries_off,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.prop("checked",!1)):b.alert({title:wpforms_builder.heads_up,content:wpforms_builder.disable_entries,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}}))}),v.on("click",".wpforms-image-upload-add",function(e){e.preventDefault();const o=b(this),t=o.parent(),r=wpf.initMediaLibrary({title:wpforms_builder.upload_image_title,extensions:wpforms_builder.upload_image_extensions,extensionsError:wpforms_builder.upload_image_extensions_error,buttonText:wpforms_builder.upload_image_button});r.on("select",function(){var e=r.state().get("selection").first().toJSON(),i=t.find(".preview");t.find(".source").val(e.url),i.empty(),i.prepend(''),"hide"===o.data("after-upload")&&o.hide(),v.trigger("wpformsImageUploadAdd",[o,t])}).on("close",function(){r.off("library:selection:add")}),r.open()}),v.on("click",".wpforms-image-upload-remove",function(e){e.preventDefault();e=b(this).parent().parent();e.find(".preview").empty(),e.find(".wpforms-image-upload-add").show(),e.find(".source").val(""),v.trigger("wpformsImageUploadRemove",[b(this),e])}),v.on("blur",".wpforms-notification .wpforms-panel-field-text input",function(){k.validateEmailSmartTags(b(this))}),v.on("blur",".wpforms-notification .wpforms-panel-field-textarea textarea",function(){k.validateEmailSmartTags(b(this))}),v.on("focusout",".wpforms-notification .wpforms-panel-field.js-wpforms-from-email-validation input",k.validateFromEmail),v.on("wpformsPanelSectionSwitch",k.notificationsPanelSectionSwitch),v.on("click","#wpforms-builder-mobile-notice .wpforms-fullscreen-notice-button-primary, #wpforms-builder-mobile-notice .close",function(){n.location.href=wpforms_builder.exit_url}),v.on("click","#wpforms-builder-mobile-notice .wpforms-fullscreen-notice-button-secondary",function(){n.location.href=wpf.updateQueryString("force_desktop_view",1,n.location.href)}),b("#wpforms-builder-license-alert .close").on("click",function(){n.location.href=wpforms_builder.exit_url}),b("#wpforms-builder-license-alert .dismiss").on("click",function(e){e.preventDefault(),b("#wpforms-builder-license-alert").remove(),wpCookies.set("wpforms-builder-license-alert","true",3600)}),v.on("change","#wpforms-panel-field-settings-akismet.wpforms-akismet-disabled",function(e){const i=b(this),o=i.data("akismet-status");i.prop("checked")&&b.alert({title:wpforms_builder.heads_up,content:wpforms_builder[o],icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}},onClose(){i.prop("checked",!1)}})}),v.on("wpformsPanelSectionSwitch wpformsPanelSwitched",function(){wpf.reInitShowMoreChoices(b("#wpforms-panel-providers, #wpforms-panel-settings"))})},notificationsPanelSectionSwitch(e,i){"notifications"===i&&b(".wpforms-notification .wpforms-panel-field.js-wpforms-from-email-validation input").trigger("focusout")},isPaymentsEnabled(){let e=!1;return b(k.getPaymentsTogglesSelector()).each(function(){if(b(this).prop("checked"))return!(e=!0)}),e},getPaymentsTogglesSelector(){return`.wpforms-panel-content-section-payment-toggle-one-time input, .wpforms-panel-content-section-payment-toggle-recurring input, #wpforms-panel-field-stripe-enable, #wpforms-panel-field-paypal_standard-enable, #wpforms-panel-field-authorize_net-enable, #wpforms-panel-field-square-enable`},toggleOptionsGroup(e){var i=e.attr("name");let o="";function t(){e.prop("disabled",!1)}const r=b('.wpforms-panel-field-toggle-body[data-toggle="'+i+'"]');0===r.length?t():(i=e.attr("type"),o="checkbox"!==i&&"radio"!==i||e.prop("checked")?e.val():"0",r.each(function(){var e=b(this);e.attr("data-toggle-value").toString()===o.toString()?e.slideDown("",t):e.slideUp("",t)}))},toggleAllOptionGroups(e){(e=e||v||b("#wpforms-builder")||b("body"))&&e.find(".wpforms-panel-field-toggle").each(function(){var e=b(this);e.prop("disabled",!0),k.toggleOptionsGroup(e)})},toggleUnfoldableGroup(e){e.preventDefault();const i=b(e.target),o=i.closest(".wpforms-panel-fields-group"),t=o.find(".wpforms-panel-fields-group-inner"),r="wpforms_fields_group_"+o.data("group");o.hasClass("opened")?(wpCookies.remove(r),t.stop().slideUp(150,function(){o.removeClass("opened")})):(wpCookies.set(r,"true",2592e3),o.addClass("opened"),t.stop().slideDown(150))},hideFieldHelper(e){e.preventDefault(),e.stopPropagation();e=b(".wpforms-field-helper");wpCookies.set("wpforms_field_helper_hide","true",2592e3),e.hide()},smartTagToggle(e){e.preventDefault(),y.$focusOutTarget=null;var e=b(this),i=e.closest(".wpforms-panel-field,.wpforms-field-option-row");i.hasClass("smart-tags-toggling")||(i.addClass("smart-tags-toggling"),e.hasClass("smart-tag-showing")?k.removeSmartTagsList(e):k.insertSmartTagsList(e))},removeSmartTagsList(e){const i=e.closest(".wpforms-panel-field,.wpforms-field-option-row"),o=i.find(".smart-tags-list-display");e.find("span").text(wpforms_builder.smart_tags_show),o.slideUp("",function(){o.remove(),e.removeClass("smart-tag-showing"),i.removeClass("smart-tags-toggling")})},insertSmartTagsList(e){const i=e.closest(".wpforms-panel-field,.wpforms-field-option-row");let o=e.closest("label"),t=!0;o.length||(o=i.find("label"),t=!1);var r=k.getSmartTagsList(e,-1!==o.attr("for").indexOf("wpforms-field-option-"));(t?o:e).after(r),e.find("span").text(wpforms_builder.smart_tags_hide),i.find(".smart-tags-list-display").slideDown("",function(){e.addClass("smart-tag-showing"),i.removeClass("smart-tags-toggling")})},getSmartTagsList(e,i){var o='
        ';return(o+=k.getSmartTagsListFieldsElements(e))+k.getSmartTagsListOtherElements(e,i)+"
      "},getSmartTagsListFieldsElements(e){var i=e.data("type");if(!["fields","all"].includes(i))return"";var o=k.getSmartTagsFields(e);if(!o)return'
    • '+wpforms_builder.fields_unavailable+"
    • ";let t="";t+='
    • '+wpforms_builder.fields_available+"
    • ";for(const r in o)t+=k.getSmartTagsListFieldsElement(o[r]);return t},getSmartTagsFields(e){var i=e.data("fields"),e=e.data("allow-repeated-fields"),i=i?i.split(","):void 0;return wpf.getFields(i,!0,e)},getSmartTagsListFieldsElement(o){const t=o.label?wpf.encodeHTMLEntities(wpf.sanitizeHTML(o.label)):wpforms_builder.field+" #"+o.id;let r=`
    • ${t}
    • `;var e=o.additional||[];return 1{var i=e.charAt(0).toUpperCase()+e.slice(1).replace(/(\D)(\d)/g,"$1 $2");r+=`
    • ${t} – ${i}
    • `}),r},getSmartTagsListOtherElements(e,i){e=e.data("type");let o;if("other"!==e&&"all"!==e)return"";o='
    • '+wpforms_builder.other+"
    • ";for(const t in wpforms_builder.smart_tags)i&&-1"+wpforms_builder.smart_tags[t]+"");return o},smartTagInsert(e){e.preventDefault();const i=b(this),o=i.closest(".smart-tags-list-display"),t=o.closest(".wpforms-panel-field,.wpforms-field-option-row"),r=t.find(".toggle-smart-tag-display"),s=t.find("input[type=text], textarea"),l=i.data("meta"),n=i.data("additional")?"|"+i.data("additional"):"",a=i.data("type");let d="field"===a?'{field_id="'+l+n+'"}':"{"+l+"}",p;"undefined"!=typeof tinyMCE&&(p=tinyMCE.get(s.prop("id")))&&!p.hasFocus()&&p.focus(!0),p&&!p.isHidden()?p.insertContent(d):(s.insertAtCaret(" "+d+" "),s.val(s.val().trim().replace(" "," ")),s.trigger("focus").trigger("input")),o.slideUp("",function(){o.remove()}),r.find("span").text(wpforms_builder.smart_tags_show),t.find(".toggle-smart-tag-display").removeClass("smart-tag-showing")},fieldMapTableDeleteRow(e,i){var i=b(i),o=i.closest("tr"),i=i.closest("table"),t=o.closest(".wpforms-builder-settings-block");"1"",{value:"",text:r})),n&&!b.isEmptyObject(n))for(const l in n){let e="";n[l]&&(e=void 0!==n[l].label&&""!==n[l].label.toString().trim()?wpf.sanitizeHTML(n[l].label.toString().trim()):wpforms_builder.field+" #"+l,0<=b.inArray(n[l].type,t)||0<=b.inArray("all-fields",t))&&o.append(b("
      "),this.$btnc.after(wpforms_education.upgrade.pro.doc.replace(/%25name%25/g,"AP - "+t)),this.$body.find(".jconfirm-content").addClass("lite-upgrade")},buttons:{confirm:{text:wpforms_education.upgrade.pro.button,btnClass:"btn-confirm",keys:["enter"],action:function(){window.open(WPFormsEducation.core.getUpgradeURL(o[e],r),"_blank"),WPFormsEducation.core.upgradeModalThankYou(r)}}}})},showLicenseModal:function(e,t,r){WPFormsEducation.proCore.licenseModal(e,t,r)}})},{}],20:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var o,a,l,s,i,c,u,n;r.default=(o=(wp.blockEditor||wp.editor).PanelColorSettings,r=wp.components,a=r.SelectControl,l=r.PanelBody,s=r.Flex,i=r.FlexBlock,c=r.__experimentalUnitControl,r=wpforms_gutenberg_form_selector,u=r.strings,n=r.defaults,{getBlockAttributes:function(){return{fieldSize:{type:"string",default:n.fieldSize},fieldBorderStyle:{type:"string",default:n.fieldBorderStyle},fieldBorderSize:{type:"string",default:n.fieldBorderSize},fieldBorderRadius:{type:"string",default:n.fieldBorderRadius},fieldBackgroundColor:{type:"string",default:n.fieldBackgroundColor},fieldBorderColor:{type:"string",default:n.fieldBorderColor},fieldTextColor:{type:"string",default:n.fieldTextColor},fieldMenuColor:{type:"string",default:n.fieldMenuColor}}},getFieldStyles:function(e,t,r,n){return React.createElement(l,{className:n.getPanelClass(e),title:u.field_styles},React.createElement(s,{gap:4,align:"flex-start",className:"wpforms-gutenberg-form-selector-flex",justify:"space-between"},React.createElement(i,null,React.createElement(a,{label:u.size,value:e.attributes.fieldSize,options:r,onChange:function(e){return t.styleAttrChange("fieldSize",e)}})),React.createElement(i,null,React.createElement(a,{label:u.border,value:e.attributes.fieldBorderStyle,options:[{label:u.none,value:"none"},{label:u.solid,value:"solid"},{label:u.dashed,value:"dashed"},{label:u.dotted,value:"dotted"}],onChange:function(e){return t.styleAttrChange("fieldBorderStyle",e)}}))),React.createElement(s,{gap:4,align:"flex-start",className:"wpforms-gutenberg-form-selector-flex",justify:"space-between"},React.createElement(i,null,React.createElement(c,{label:u.border_size,value:"none"===e.attributes.fieldBorderStyle?"":e.attributes.fieldBorderSize,min:0,disabled:"none"===e.attributes.fieldBorderStyle,onChange:function(e){return t.styleAttrChange("fieldBorderSize",e)},isUnitSelectTabbable:!0})),React.createElement(i,null,React.createElement(c,{label:u.border_radius,value:e.attributes.fieldBorderRadius,min:0,isUnitSelectTabbable:!0,onChange:function(e){return t.styleAttrChange("fieldBorderRadius",e)}}))),React.createElement("div",{className:"wpforms-gutenberg-form-selector-color-picker"},React.createElement("div",{className:"wpforms-gutenberg-form-selector-control-label"},u.colors),React.createElement(o,{__experimentalIsRenderedInSidebar:!0,enableAlpha:!0,showTitle:!1,className:n.getColorPanelClass(e.attributes.fieldBorderStyle),colorSettings:[{value:e.attributes.fieldBackgroundColor,onChange:function(e){return t.styleAttrChange("fieldBackgroundColor",e)},label:u.background},{value:e.attributes.fieldBorderColor,onChange:function(e){return t.styleAttrChange("fieldBorderColor",e)},label:u.border},{value:e.attributes.fieldTextColor,onChange:function(e){return t.styleAttrChange("fieldTextColor",e)},label:u.text},{value:e.attributes.fieldMenuColor,onChange:function(e){return t.styleAttrChange("fieldMenuColor",e)},label:u.menu}]})))}})},{}],21:[function(e,t,r){"use strict";function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(t,e){var r,n=Object.keys(t);return Object.getOwnPropertySymbols&&(r=Object.getOwnPropertySymbols(t),e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)),n}function u(t){for(var e=1;e".concat(e.attributes.themeName,"")),n='

      '.concat(n," ").concat(y.theme_delete_cant_undone,"

      ");s.confirm({title:y.theme_delete_title,content:n,icon:"wpforms-exclamation-circle",type:"red",buttons:{confirm:{text:y.theme_delete_yes,btnClass:"btn-confirm",keys:["enter"],action:function(){r.selectTheme("default"),C.$window.trigger("wpformsFormSelectorDeleteTheme",[t,e])}},cancel:{text:y.cancel,keys:["esc"]}}})},isMac:function(){return navigator.userAgent.includes("Macintosh")}}).init(),E)},{}]},{},[12]);assets/lite/js/integrations/gutenberg/formselector.es5.js000064400002220113147400353540017652 0ustar00(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) { var fn = queue.shift(); fn(); } } }, true); return function nextTick(fn) { queue.push(fn); window.postMessage('process-tick', '*'); }; } return function nextTick(fn) { setTimeout(fn, 0); }; })(); process.title = 'browser'; process.browser = true; process.env = {}; process.argv = []; function noop() {} process.on = noop; process.addListener = noop; process.once = noop; process.off = noop; process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; process.binding = function (name) { throw new Error('process.binding is not supported'); } // TODO(shtylman) process.cwd = function () { return '/' }; process.chdir = function (dir) { throw new Error('process.chdir is not supported'); }; },{}],2:[function(require,module,exports){ /* object-assign (c) Sindre Sorhus @license MIT */ 'use strict'; /* eslint-disable no-unused-vars */ var getOwnPropertySymbols = Object.getOwnPropertySymbols; var hasOwnProperty = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { if (val === null || val === undefined) { throw new TypeError('Object.assign cannot be called with null or undefined'); } return Object(val); } function shouldUseNative() { try { if (!Object.assign) { return false; } // Detect buggy property enumeration order in older V8 versions. // https://bugs.chromium.org/p/v8/issues/detail?id=4118 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers test1[5] = 'de'; if (Object.getOwnPropertyNames(test1)[0] === '5') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test2 = {}; for (var i = 0; i < 10; i++) { test2['_' + String.fromCharCode(i)] = i; } var order2 = Object.getOwnPropertyNames(test2).map(function (n) { return test2[n]; }); if (order2.join('') !== '0123456789') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test3 = {}; 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { test3[letter] = letter; }); if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { return false; } return true; } catch (err) { // We don't expect any of the above to throw, but better to be safe. return false; } } module.exports = shouldUseNative() ? Object.assign : function (target, source) { var from; var to = toObject(target); var symbols; for (var s = 1; s < arguments.length; s++) { from = Object(arguments[s]); for (var key in from) { if (hasOwnProperty.call(from, key)) { to[key] = from[key]; } } if (getOwnPropertySymbols) { symbols = getOwnPropertySymbols(from); for (var i = 0; i < symbols.length; i++) { if (propIsEnumerable.call(from, symbols[i])) { to[symbols[i]] = from[symbols[i]]; } } } } return to; }; },{}],3:[function(require,module,exports){ (function (process){ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var printWarning = function() {}; if (process.env.NODE_ENV !== 'production') { var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret'); var loggedTypeFailures = {}; var has = require('./lib/has'); printWarning = function(text) { var message = 'Warning: ' + text; if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) { /**/ } }; } /** * Assert that the values match with the type specs. * Error messages are memorized and will only be shown once. * * @param {object} typeSpecs Map of name to a ReactPropType * @param {object} values Runtime values that need to be type-checked * @param {string} location e.g. "prop", "context", "child context" * @param {string} componentName Name of the component for error messages. * @param {?Function} getStack Returns the component stack. * @private */ function checkPropTypes(typeSpecs, values, location, componentName, getStack) { if (process.env.NODE_ENV !== 'production') { for (var typeSpecName in typeSpecs) { if (has(typeSpecs, typeSpecName)) { var error; // Prop type validation may throw. In case they do, we don't want to // fail the render phase where it didn't fail before. So we log it. // After these have been cleaned up, we'll let them throw. try { // This is intentionally an invariant that gets caught. It's the same // behavior as without this statement except with a better message. if (typeof typeSpecs[typeSpecName] !== 'function') { var err = Error( (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.' ); err.name = 'Invariant Violation'; throw err; } error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret); } catch (ex) { error = ex; } if (error && !(error instanceof Error)) { printWarning( (componentName || 'React class') + ': type specification of ' + location + ' `' + typeSpecName + '` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).' ); } if (error instanceof Error && !(error.message in loggedTypeFailures)) { // Only monitor this failure once because there tends to be a lot of the // same error. loggedTypeFailures[error.message] = true; var stack = getStack ? getStack() : ''; printWarning( 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '') ); } } } } } /** * Resets warning cache when testing. * * @private */ checkPropTypes.resetWarningCache = function() { if (process.env.NODE_ENV !== 'production') { loggedTypeFailures = {}; } } module.exports = checkPropTypes; }).call(this,require("hmr7eR")) },{"./lib/ReactPropTypesSecret":7,"./lib/has":8,"hmr7eR":1}],4:[function(require,module,exports){ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret'); function emptyFunction() {} function emptyFunctionWithReset() {} emptyFunctionWithReset.resetWarningCache = emptyFunction; module.exports = function() { function shim(props, propName, componentName, location, propFullName, secret) { if (secret === ReactPropTypesSecret) { // It is still safe when called from React. return; } var err = new Error( 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types' ); err.name = 'Invariant Violation'; throw err; }; shim.isRequired = shim; function getShim() { return shim; }; // Important! // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`. var ReactPropTypes = { array: shim, bigint: shim, bool: shim, func: shim, number: shim, object: shim, string: shim, symbol: shim, any: shim, arrayOf: getShim, element: shim, elementType: shim, instanceOf: getShim, node: shim, objectOf: getShim, oneOf: getShim, oneOfType: getShim, shape: getShim, exact: getShim, checkPropTypes: emptyFunctionWithReset, resetWarningCache: emptyFunction }; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; },{"./lib/ReactPropTypesSecret":7}],5:[function(require,module,exports){ (function (process){ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var ReactIs = require('react-is'); var assign = require('object-assign'); var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret'); var has = require('./lib/has'); var checkPropTypes = require('./checkPropTypes'); var printWarning = function() {}; if (process.env.NODE_ENV !== 'production') { printWarning = function(text) { var message = 'Warning: ' + text; if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) {} }; } function emptyFunctionThatReturnsNull() { return null; } module.exports = function(isValidElement, throwOnDirectAccess) { /* global Symbol */ var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. /** * Returns the iterator method function contained on the iterable object. * * Be sure to invoke the function with the iterable as context: * * var iteratorFn = getIteratorFn(myIterable); * if (iteratorFn) { * var iterator = iteratorFn.call(myIterable); * ... * } * * @param {?object} maybeIterable * @return {?function} */ function getIteratorFn(maybeIterable) { var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); if (typeof iteratorFn === 'function') { return iteratorFn; } } /** * Collection of methods that allow declaration and validation of props that are * supplied to React components. Example usage: * * var Props = require('ReactPropTypes'); * var MyArticle = React.createClass({ * propTypes: { * // An optional string prop named "description". * description: Props.string, * * // A required enum prop named "category". * category: Props.oneOf(['News','Photos']).isRequired, * * // A prop named "dialog" that requires an instance of Dialog. * dialog: Props.instanceOf(Dialog).isRequired * }, * render: function() { ... } * }); * * A more formal specification of how these methods are used: * * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) * decl := ReactPropTypes.{type}(.isRequired)? * * Each and every declaration produces a function with the same signature. This * allows the creation of custom validation functions. For example: * * var MyLink = React.createClass({ * propTypes: { * // An optional string or URI prop named "href". * href: function(props, propName, componentName) { * var propValue = props[propName]; * if (propValue != null && typeof propValue !== 'string' && * !(propValue instanceof URI)) { * return new Error( * 'Expected a string or an URI for ' + propName + ' in ' + * componentName * ); * } * } * }, * render: function() {...} * }); * * @internal */ var ANONYMOUS = '<>'; // Important! // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. var ReactPropTypes = { array: createPrimitiveTypeChecker('array'), bigint: createPrimitiveTypeChecker('bigint'), bool: createPrimitiveTypeChecker('boolean'), func: createPrimitiveTypeChecker('function'), number: createPrimitiveTypeChecker('number'), object: createPrimitiveTypeChecker('object'), string: createPrimitiveTypeChecker('string'), symbol: createPrimitiveTypeChecker('symbol'), any: createAnyTypeChecker(), arrayOf: createArrayOfTypeChecker, element: createElementTypeChecker(), elementType: createElementTypeTypeChecker(), instanceOf: createInstanceTypeChecker, node: createNodeChecker(), objectOf: createObjectOfTypeChecker, oneOf: createEnumTypeChecker, oneOfType: createUnionTypeChecker, shape: createShapeTypeChecker, exact: createStrictShapeTypeChecker, }; /** * inlined Object.is polyfill to avoid requiring consumers ship their own * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ /*eslint-disable no-self-compare*/ function is(x, y) { // SameValue algorithm if (x === y) { // Steps 1-5, 7-10 // Steps 6.b-6.e: +0 != -0 return x !== 0 || 1 / x === 1 / y; } else { // Step 6.a: NaN == NaN return x !== x && y !== y; } } /*eslint-enable no-self-compare*/ /** * We use an Error-like object for backward compatibility as people may call * PropTypes directly and inspect their output. However, we don't use real * Errors anymore. We don't inspect their stack anyway, and creating them * is prohibitively expensive if they are created too often, such as what * happens in oneOfType() for any type before the one that matched. */ function PropTypeError(message, data) { this.message = message; this.data = data && typeof data === 'object' ? data: {}; this.stack = ''; } // Make `instanceof Error` still work for returned errors. PropTypeError.prototype = Error.prototype; function createChainableTypeChecker(validate) { if (process.env.NODE_ENV !== 'production') { var manualPropTypeCallCache = {}; var manualPropTypeWarningCount = 0; } function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { componentName = componentName || ANONYMOUS; propFullName = propFullName || propName; if (secret !== ReactPropTypesSecret) { if (throwOnDirectAccess) { // New behavior only for users of `prop-types` package var err = new Error( 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types' ); err.name = 'Invariant Violation'; throw err; } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') { // Old behavior for people using React.PropTypes var cacheKey = componentName + ':' + propName; if ( !manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors manualPropTypeWarningCount < 3 ) { printWarning( 'You are manually calling a React.PropTypes validation ' + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.' ); manualPropTypeCallCache[cacheKey] = true; manualPropTypeWarningCount++; } } } if (props[propName] == null) { if (isRequired) { if (props[propName] === null) { return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); } return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); } return null; } else { return validate(props, propName, componentName, location, propFullName); } } var chainedCheckType = checkType.bind(null, false); chainedCheckType.isRequired = checkType.bind(null, true); return chainedCheckType; } function createPrimitiveTypeChecker(expectedType) { function validate(props, propName, componentName, location, propFullName, secret) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== expectedType) { // `propValue` being instance of, say, date/regexp, pass the 'object' // check, but we can offer a more precise error message here rather than // 'of type `object`'. var preciseType = getPreciseType(propValue); return new PropTypeError( 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'), {expectedType: expectedType} ); } return null; } return createChainableTypeChecker(validate); } function createAnyTypeChecker() { return createChainableTypeChecker(emptyFunctionThatReturnsNull); } function createArrayOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); } var propValue = props[propName]; if (!Array.isArray(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); } for (var i = 0; i < propValue.length; i++) { var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); if (error instanceof Error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createElementTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!isValidElement(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); } return null; } return createChainableTypeChecker(validate); } function createElementTypeTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!ReactIs.isValidElementType(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); } return null; } return createChainableTypeChecker(validate); } function createInstanceTypeChecker(expectedClass) { function validate(props, propName, componentName, location, propFullName) { if (!(props[propName] instanceof expectedClass)) { var expectedClassName = expectedClass.name || ANONYMOUS; var actualClassName = getClassName(props[propName]); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); } return null; } return createChainableTypeChecker(validate); } function createEnumTypeChecker(expectedValues) { if (!Array.isArray(expectedValues)) { if (process.env.NODE_ENV !== 'production') { if (arguments.length > 1) { printWarning( 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).' ); } else { printWarning('Invalid argument supplied to oneOf, expected an array.'); } } return emptyFunctionThatReturnsNull; } function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; for (var i = 0; i < expectedValues.length; i++) { if (is(propValue, expectedValues[i])) { return null; } } var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { var type = getPreciseType(value); if (type === 'symbol') { return String(value); } return value; }); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); } return createChainableTypeChecker(validate); } function createObjectOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); } var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); } for (var key in propValue) { if (has(propValue, key)) { var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error instanceof Error) { return error; } } } return null; } return createChainableTypeChecker(validate); } function createUnionTypeChecker(arrayOfTypeCheckers) { if (!Array.isArray(arrayOfTypeCheckers)) { process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0; return emptyFunctionThatReturnsNull; } for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; if (typeof checker !== 'function') { printWarning( 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.' ); return emptyFunctionThatReturnsNull; } } function validate(props, propName, componentName, location, propFullName) { var expectedTypes = []; for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret); if (checkerResult == null) { return null; } if (checkerResult.data && has(checkerResult.data, 'expectedType')) { expectedTypes.push(checkerResult.data.expectedType); } } var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': ''; return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.')); } return createChainableTypeChecker(validate); } function createNodeChecker() { function validate(props, propName, componentName, location, propFullName) { if (!isNode(props[propName])) { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); } return null; } return createChainableTypeChecker(validate); } function invalidValidatorError(componentName, location, propFullName, key, type) { return new PropTypeError( (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.' ); } function createShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } for (var key in shapeTypes) { var checker = shapeTypes[key]; if (typeof checker !== 'function') { return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createStrictShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } // We need to check all keys in case some are required but missing from props. var allKeys = assign({}, props[propName], shapeTypes); for (var key in allKeys) { var checker = shapeTypes[key]; if (has(shapeTypes, key) && typeof checker !== 'function') { return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); } if (!checker) { return new PropTypeError( 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') ); } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function isNode(propValue) { switch (typeof propValue) { case 'number': case 'string': case 'undefined': return true; case 'boolean': return !propValue; case 'object': if (Array.isArray(propValue)) { return propValue.every(isNode); } if (propValue === null || isValidElement(propValue)) { return true; } var iteratorFn = getIteratorFn(propValue); if (iteratorFn) { var iterator = iteratorFn.call(propValue); var step; if (iteratorFn !== propValue.entries) { while (!(step = iterator.next()).done) { if (!isNode(step.value)) { return false; } } } else { // Iterator will provide entry [k,v] tuples rather than values. while (!(step = iterator.next()).done) { var entry = step.value; if (entry) { if (!isNode(entry[1])) { return false; } } } } } else { return false; } return true; default: return false; } } function isSymbol(propType, propValue) { // Native Symbol. if (propType === 'symbol') { return true; } // falsy value can't be a Symbol if (!propValue) { return false; } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' if (propValue['@@toStringTag'] === 'Symbol') { return true; } // Fallback for non-spec compliant Symbols which are polyfilled. if (typeof Symbol === 'function' && propValue instanceof Symbol) { return true; } return false; } // Equivalent of `typeof` but with special handling for array and regexp. function getPropType(propValue) { var propType = typeof propValue; if (Array.isArray(propValue)) { return 'array'; } if (propValue instanceof RegExp) { // Old webkits (at least until Android 4.0) return 'function' rather than // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ // passes PropTypes.object. return 'object'; } if (isSymbol(propType, propValue)) { return 'symbol'; } return propType; } // This handles more types than `getPropType`. Only used for error messages. // See `createPrimitiveTypeChecker`. function getPreciseType(propValue) { if (typeof propValue === 'undefined' || propValue === null) { return '' + propValue; } var propType = getPropType(propValue); if (propType === 'object') { if (propValue instanceof Date) { return 'date'; } else if (propValue instanceof RegExp) { return 'regexp'; } } return propType; } // Returns a string that is postfixed to a warning about an invalid type. // For example, "undefined" or "of type array" function getPostfixForTypeWarning(value) { var type = getPreciseType(value); switch (type) { case 'array': case 'object': return 'an ' + type; case 'boolean': case 'date': case 'regexp': return 'a ' + type; default: return type; } } // Returns class name of the object, if any. function getClassName(propValue) { if (!propValue.constructor || !propValue.constructor.name) { return ANONYMOUS; } return propValue.constructor.name; } ReactPropTypes.checkPropTypes = checkPropTypes; ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; }).call(this,require("hmr7eR")) },{"./checkPropTypes":3,"./lib/ReactPropTypesSecret":7,"./lib/has":8,"hmr7eR":1,"object-assign":2,"react-is":11}],6:[function(require,module,exports){ (function (process){ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ if (process.env.NODE_ENV !== 'production') { var ReactIs = require('react-is'); // By explicitly using `prop-types` you are opting into new development behavior. // http://fb.me/prop-types-in-prod var throwOnDirectAccess = true; module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess); } else { // By explicitly using `prop-types` you are opting into new production behavior. // http://fb.me/prop-types-in-prod module.exports = require('./factoryWithThrowingShims')(); } }).call(this,require("hmr7eR")) },{"./factoryWithThrowingShims":4,"./factoryWithTypeCheckers":5,"hmr7eR":1,"react-is":11}],7:[function(require,module,exports){ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; module.exports = ReactPropTypesSecret; },{}],8:[function(require,module,exports){ module.exports = Function.call.bind(Object.prototype.hasOwnProperty); },{}],9:[function(require,module,exports){ (function (process){ /** @license React v16.13.1 * react-is.development.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; if (process.env.NODE_ENV !== "production") { (function() { 'use strict'; // The Symbol used to tag the ReactElement-like types. If there is no native Symbol // nor polyfill, then a plain number is used for performance. var hasSymbol = typeof Symbol === 'function' && Symbol.for; var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary // (unstable) APIs that have been removed. Can we remove the symbols? var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9; var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7; function isValidElementType(type) { return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); } function typeOf(object) { if (typeof object === 'object' && object !== null) { var $$typeof = object.$$typeof; switch ($$typeof) { case REACT_ELEMENT_TYPE: var type = object.type; switch (type) { case REACT_ASYNC_MODE_TYPE: case REACT_CONCURRENT_MODE_TYPE: case REACT_FRAGMENT_TYPE: case REACT_PROFILER_TYPE: case REACT_STRICT_MODE_TYPE: case REACT_SUSPENSE_TYPE: return type; default: var $$typeofType = type && type.$$typeof; switch ($$typeofType) { case REACT_CONTEXT_TYPE: case REACT_FORWARD_REF_TYPE: case REACT_LAZY_TYPE: case REACT_MEMO_TYPE: case REACT_PROVIDER_TYPE: return $$typeofType; default: return $$typeof; } } case REACT_PORTAL_TYPE: return $$typeof; } } return undefined; } // AsyncMode is deprecated along with isAsyncMode var AsyncMode = REACT_ASYNC_MODE_TYPE; var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; var ContextConsumer = REACT_CONTEXT_TYPE; var ContextProvider = REACT_PROVIDER_TYPE; var Element = REACT_ELEMENT_TYPE; var ForwardRef = REACT_FORWARD_REF_TYPE; var Fragment = REACT_FRAGMENT_TYPE; var Lazy = REACT_LAZY_TYPE; var Memo = REACT_MEMO_TYPE; var Portal = REACT_PORTAL_TYPE; var Profiler = REACT_PROFILER_TYPE; var StrictMode = REACT_STRICT_MODE_TYPE; var Suspense = REACT_SUSPENSE_TYPE; var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated function isAsyncMode(object) { { if (!hasWarnedAboutDeprecatedIsAsyncMode) { hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); } } return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; } function isConcurrentMode(object) { return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; } function isContextConsumer(object) { return typeOf(object) === REACT_CONTEXT_TYPE; } function isContextProvider(object) { return typeOf(object) === REACT_PROVIDER_TYPE; } function isElement(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; } function isForwardRef(object) { return typeOf(object) === REACT_FORWARD_REF_TYPE; } function isFragment(object) { return typeOf(object) === REACT_FRAGMENT_TYPE; } function isLazy(object) { return typeOf(object) === REACT_LAZY_TYPE; } function isMemo(object) { return typeOf(object) === REACT_MEMO_TYPE; } function isPortal(object) { return typeOf(object) === REACT_PORTAL_TYPE; } function isProfiler(object) { return typeOf(object) === REACT_PROFILER_TYPE; } function isStrictMode(object) { return typeOf(object) === REACT_STRICT_MODE_TYPE; } function isSuspense(object) { return typeOf(object) === REACT_SUSPENSE_TYPE; } exports.AsyncMode = AsyncMode; exports.ConcurrentMode = ConcurrentMode; exports.ContextConsumer = ContextConsumer; exports.ContextProvider = ContextProvider; exports.Element = Element; exports.ForwardRef = ForwardRef; exports.Fragment = Fragment; exports.Lazy = Lazy; exports.Memo = Memo; exports.Portal = Portal; exports.Profiler = Profiler; exports.StrictMode = StrictMode; exports.Suspense = Suspense; exports.isAsyncMode = isAsyncMode; exports.isConcurrentMode = isConcurrentMode; exports.isContextConsumer = isContextConsumer; exports.isContextProvider = isContextProvider; exports.isElement = isElement; exports.isForwardRef = isForwardRef; exports.isFragment = isFragment; exports.isLazy = isLazy; exports.isMemo = isMemo; exports.isPortal = isPortal; exports.isProfiler = isProfiler; exports.isStrictMode = isStrictMode; exports.isSuspense = isSuspense; exports.isValidElementType = isValidElementType; exports.typeOf = typeOf; })(); } }).call(this,require("hmr7eR")) },{"hmr7eR":1}],10:[function(require,module,exports){ /** @license React v16.13.1 * react-is.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict';var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b? Symbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119; function z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d; exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t}; exports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p}; exports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z; },{}],11:[function(require,module,exports){ (function (process){ 'use strict'; if (process.env.NODE_ENV === 'production') { module.exports = require('./cjs/react-is.production.min.js'); } else { module.exports = require('./cjs/react-is.development.js'); } }).call(this,require("hmr7eR")) },{"./cjs/react-is.development.js":9,"./cjs/react-is.production.min.js":10,"hmr7eR":1}],12:[function(require,module,exports){ "use strict"; var _education = _interopRequireDefault(require("../../../js/integrations/gutenberg/modules/education.js")); var _common = _interopRequireDefault(require("../../../js/integrations/gutenberg/modules/common.js")); var _themesPanel = _interopRequireDefault(require("../../../js/integrations/gutenberg/modules/themes-panel.js")); var _containerStyles = _interopRequireDefault(require("../../../js/integrations/gutenberg/modules/container-styles.js")); var _backgroundStyles = _interopRequireDefault(require("../../../js/integrations/gutenberg/modules/background-styles.js")); var _buttonStyles = _interopRequireDefault(require("../../../js/integrations/gutenberg/modules/button-styles.js")); var _advancedSettings = _interopRequireDefault(require("../../../js/integrations/gutenberg/modules/advanced-settings.js")); var _fieldStyles = _interopRequireDefault(require("../../../js/integrations/gutenberg/modules/field-styles.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* jshint es3: false, esversion: 6 */ /** * Gutenberg editor block for Lite. * * @since 1.8.8 */ var WPForms = window.WPForms || {}; WPForms.FormSelector = WPForms.FormSelector || function () { /** * Public functions and properties. * * @since 1.8.8 * * @type {Object} */ var app = { /** * Common module object. * * @since 1.8.8 * * @type {Object} */ common: {}, /** * Panel modules objects. * * @since 1.8.8 * * @type {Object} */ panels: {}, /** * Start the engine. * * @since 1.8.8 */ init: function init() { app.education = _education.default; app.common = _common.default; app.panels.themes = _themesPanel.default; app.panels.container = _containerStyles.default; app.panels.background = _backgroundStyles.default; app.panels.button = _buttonStyles.default; app.panels.advanced = _advancedSettings.default; app.panels.field = _fieldStyles.default; var blockOptions = { panels: app.panels, getThemesPanel: app.panels.themes.getThemesPanel, getFieldStyles: app.panels.field.getFieldStyles, getContainerStyles: app.panels.container.getContainerStyles, getBackgroundStyles: app.panels.background.getBackgroundStyles, getButtonStyles: app.panels.button.getButtonStyles, getCommonAttributes: app.getCommonAttributes, setStylesHandlers: app.getStyleHandlers(), education: app.education }; // Initialize Advanced Settings module. app.panels.advanced.init(app.common); // Initialize block. app.common.init(blockOptions); }, /** * Get style handlers. * * @since 1.8.8 * * @return {Object} Style handlers. */ getCommonAttributes: function getCommonAttributes() { return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, app.panels.field.getBlockAttributes()), app.panels.container.getBlockAttributes()), app.panels.background.getBlockAttributes()), app.panels.button.getBlockAttributes()); }, /** * Get style handlers. * * @since 1.8.8 * * @return {Object} Style handlers. */ getStyleHandlers: function getStyleHandlers() { return { 'background-image': app.panels.background.setContainerBackgroundImage, 'background-position': app.panels.background.setContainerBackgroundPosition, 'background-repeat': app.panels.background.setContainerBackgroundRepeat, 'background-width': app.panels.background.setContainerBackgroundWidth, 'background-height': app.panels.background.setContainerBackgroundHeight, 'background-color': app.panels.background.setBackgroundColor, 'background-url': app.panels.background.setBackgroundUrl }; } }; // Provide access to public functions/properties. return app; }(); // Initialize. WPForms.FormSelector.init(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZWR1Y2F0aW9uIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29tbW9uIiwiX3RoZW1lc1BhbmVsIiwiX2NvbnRhaW5lclN0eWxlcyIsIl9iYWNrZ3JvdW5kU3R5bGVzIiwiX2J1dHRvblN0eWxlcyIsIl9hZHZhbmNlZFNldHRpbmdzIiwiX2ZpZWxkU3R5bGVzIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJrZXkiLCJ2YWx1ZSIsIl90b1Byb3BlcnR5S2V5IiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwiU3RyaW5nIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiTnVtYmVyIiwiV1BGb3JtcyIsIndpbmRvdyIsIkZvcm1TZWxlY3RvciIsImFwcCIsImNvbW1vbiIsInBhbmVscyIsImluaXQiLCJlZHVjYXRpb24iLCJ0aGVtZXMiLCJ0aGVtZXNQYW5lbCIsImNvbnRhaW5lciIsImNvbnRhaW5lclN0eWxlcyIsImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kU3R5bGVzIiwiYnV0dG9uIiwiYnV0dG9uU3R5bGVzIiwiYWR2YW5jZWQiLCJhZHZhbmNlZFNldHRpbmdzIiwiZmllbGQiLCJmaWVsZFN0eWxlcyIsImJsb2NrT3B0aW9ucyIsImdldFRoZW1lc1BhbmVsIiwiZ2V0RmllbGRTdHlsZXMiLCJnZXRDb250YWluZXJTdHlsZXMiLCJnZXRCYWNrZ3JvdW5kU3R5bGVzIiwiZ2V0QnV0dG9uU3R5bGVzIiwiZ2V0Q29tbW9uQXR0cmlidXRlcyIsInNldFN0eWxlc0hhbmRsZXJzIiwiZ2V0U3R5bGVIYW5kbGVycyIsImdldEJsb2NrQXR0cmlidXRlcyIsInNldENvbnRhaW5lckJhY2tncm91bmRJbWFnZSIsInNldENvbnRhaW5lckJhY2tncm91bmRQb3NpdGlvbiIsInNldENvbnRhaW5lckJhY2tncm91bmRSZXBlYXQiLCJzZXRDb250YWluZXJCYWNrZ3JvdW5kV2lkdGgiLCJzZXRDb250YWluZXJCYWNrZ3JvdW5kSGVpZ2h0Iiwic2V0QmFja2dyb3VuZENvbG9yIiwic2V0QmFja2dyb3VuZFVybCJdLCJzb3VyY2VzIjpbImZha2VfY2E1MzU3MjEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoganNoaW50IGVzMzogZmFsc2UsIGVzdmVyc2lvbjogNiAqL1xuXG5pbXBvcnQgZWR1Y2F0aW9uIGZyb20gJy4uLy4uLy4uL2pzL2ludGVncmF0aW9ucy9ndXRlbmJlcmcvbW9kdWxlcy9lZHVjYXRpb24uanMnO1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi8uLi8uLi9qcy9pbnRlZ3JhdGlvbnMvZ3V0ZW5iZXJnL21vZHVsZXMvY29tbW9uLmpzJztcbmltcG9ydCB0aGVtZXNQYW5lbCBmcm9tICcuLi8uLi8uLi9qcy9pbnRlZ3JhdGlvbnMvZ3V0ZW5iZXJnL21vZHVsZXMvdGhlbWVzLXBhbmVsLmpzJztcbmltcG9ydCBjb250YWluZXJTdHlsZXMgZnJvbSAnLi4vLi4vLi4vanMvaW50ZWdyYXRpb25zL2d1dGVuYmVyZy9tb2R1bGVzL2NvbnRhaW5lci1zdHlsZXMuanMnO1xuaW1wb3J0IGJhY2tncm91bmRTdHlsZXMgZnJvbSAnLi4vLi4vLi4vanMvaW50ZWdyYXRpb25zL2d1dGVuYmVyZy9tb2R1bGVzL2JhY2tncm91bmQtc3R5bGVzLmpzJztcbmltcG9ydCBidXR0b25TdHlsZXMgZnJvbSAnLi4vLi4vLi4vanMvaW50ZWdyYXRpb25zL2d1dGVuYmVyZy9tb2R1bGVzL2J1dHRvbi1zdHlsZXMuanMnO1xuaW1wb3J0IGFkdmFuY2VkU2V0dGluZ3MgZnJvbSAnLi4vLi4vLi4vanMvaW50ZWdyYXRpb25zL2d1dGVuYmVyZy9tb2R1bGVzL2FkdmFuY2VkLXNldHRpbmdzLmpzJztcbmltcG9ydCBmaWVsZFN0eWxlcyBmcm9tICcuLi8uLi8uLi9qcy9pbnRlZ3JhdGlvbnMvZ3V0ZW5iZXJnL21vZHVsZXMvZmllbGQtc3R5bGVzLmpzJztcblxuLyoqXG4gKiBHdXRlbmJlcmcgZWRpdG9yIGJsb2NrIGZvciBMaXRlLlxuICpcbiAqIEBzaW5jZSAxLjguOFxuICovXG5jb25zdCBXUEZvcm1zID0gd2luZG93LldQRm9ybXMgfHwge307XG5cbldQRm9ybXMuRm9ybVNlbGVjdG9yID0gV1BGb3Jtcy5Gb3JtU2VsZWN0b3IgfHwgKCBmdW5jdGlvbigpIHtcblx0LyoqXG5cdCAqIFB1YmxpYyBmdW5jdGlvbnMgYW5kIHByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjguOFxuXHQgKlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKi9cblx0Y29uc3QgYXBwID0ge1xuXHRcdC8qKlxuXHRcdCAqIENvbW1vbiBtb2R1bGUgb2JqZWN0LlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHRcdGNvbW1vbjoge30sXG5cblx0XHQvKipcblx0XHQgKiBQYW5lbCBtb2R1bGVzIG9iamVjdHMuXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44Ljhcblx0XHQgKlxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdFx0cGFuZWxzOiB7fSxcblxuXHRcdC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSBlbmdpbmUuXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44Ljhcblx0XHQgKi9cblx0XHRpbml0KCkge1xuXHRcdFx0YXBwLmVkdWNhdGlvbiA9IGVkdWNhdGlvbjtcblx0XHRcdGFwcC5jb21tb24gPSBjb21tb247XG5cdFx0XHRhcHAucGFuZWxzLnRoZW1lcyA9IHRoZW1lc1BhbmVsO1xuXHRcdFx0YXBwLnBhbmVscy5jb250YWluZXIgPSBjb250YWluZXJTdHlsZXM7XG5cdFx0XHRhcHAucGFuZWxzLmJhY2tncm91bmQgPSBiYWNrZ3JvdW5kU3R5bGVzO1xuXHRcdFx0YXBwLnBhbmVscy5idXR0b24gPSBidXR0b25TdHlsZXM7XG5cdFx0XHRhcHAucGFuZWxzLmFkdmFuY2VkID0gYWR2YW5jZWRTZXR0aW5ncztcblx0XHRcdGFwcC5wYW5lbHMuZmllbGQgPSBmaWVsZFN0eWxlcztcblxuXHRcdFx0Y29uc3QgYmxvY2tPcHRpb25zID0ge1xuXHRcdFx0XHRwYW5lbHM6IGFwcC5wYW5lbHMsXG5cdFx0XHRcdGdldFRoZW1lc1BhbmVsOiBhcHAucGFuZWxzLnRoZW1lcy5nZXRUaGVtZXNQYW5lbCxcblx0XHRcdFx0Z2V0RmllbGRTdHlsZXM6IGFwcC5wYW5lbHMuZmllbGQuZ2V0RmllbGRTdHlsZXMsXG5cdFx0XHRcdGdldENvbnRhaW5lclN0eWxlczogYXBwLnBhbmVscy5jb250YWluZXIuZ2V0Q29udGFpbmVyU3R5bGVzLFxuXHRcdFx0XHRnZXRCYWNrZ3JvdW5kU3R5bGVzOiBhcHAucGFuZWxzLmJhY2tncm91bmQuZ2V0QmFja2dyb3VuZFN0eWxlcyxcblx0XHRcdFx0Z2V0QnV0dG9uU3R5bGVzOiBhcHAucGFuZWxzLmJ1dHRvbi5nZXRCdXR0b25TdHlsZXMsXG5cdFx0XHRcdGdldENvbW1vbkF0dHJpYnV0ZXM6IGFwcC5nZXRDb21tb25BdHRyaWJ1dGVzLFxuXHRcdFx0XHRzZXRTdHlsZXNIYW5kbGVyczogYXBwLmdldFN0eWxlSGFuZGxlcnMoKSxcblx0XHRcdFx0ZWR1Y2F0aW9uOiBhcHAuZWR1Y2F0aW9uLFxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gSW5pdGlhbGl6ZSBBZHZhbmNlZCBTZXR0aW5ncyBtb2R1bGUuXG5cdFx0XHRhcHAucGFuZWxzLmFkdmFuY2VkLmluaXQoIGFwcC5jb21tb24gKTtcblxuXHRcdFx0Ly8gSW5pdGlhbGl6ZSBibG9jay5cblx0XHRcdGFwcC5jb21tb24uaW5pdCggYmxvY2tPcHRpb25zICk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEdldCBzdHlsZSBoYW5kbGVycy5cblx0XHQgKlxuXHRcdCAqIEBzaW5jZSAxLjguOFxuXHRcdCAqXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBTdHlsZSBoYW5kbGVycy5cblx0XHQgKi9cblx0XHRnZXRDb21tb25BdHRyaWJ1dGVzKCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Li4uYXBwLnBhbmVscy5maWVsZC5nZXRCbG9ja0F0dHJpYnV0ZXMoKSxcblx0XHRcdFx0Li4uYXBwLnBhbmVscy5jb250YWluZXIuZ2V0QmxvY2tBdHRyaWJ1dGVzKCksXG5cdFx0XHRcdC4uLmFwcC5wYW5lbHMuYmFja2dyb3VuZC5nZXRCbG9ja0F0dHJpYnV0ZXMoKSxcblx0XHRcdFx0Li4uYXBwLnBhbmVscy5idXR0b24uZ2V0QmxvY2tBdHRyaWJ1dGVzKCksXG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBHZXQgc3R5bGUgaGFuZGxlcnMuXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44Ljhcblx0XHQgKlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gU3R5bGUgaGFuZGxlcnMuXG5cdFx0ICovXG5cdFx0Z2V0U3R5bGVIYW5kbGVycygpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdCdiYWNrZ3JvdW5kLWltYWdlJzogYXBwLnBhbmVscy5iYWNrZ3JvdW5kLnNldENvbnRhaW5lckJhY2tncm91bmRJbWFnZSxcblx0XHRcdFx0J2JhY2tncm91bmQtcG9zaXRpb24nOiBhcHAucGFuZWxzLmJhY2tncm91bmQuc2V0Q29udGFpbmVyQmFja2dyb3VuZFBvc2l0aW9uLFxuXHRcdFx0XHQnYmFja2dyb3VuZC1yZXBlYXQnOiBhcHAucGFuZWxzLmJhY2tncm91bmQuc2V0Q29udGFpbmVyQmFja2dyb3VuZFJlcGVhdCxcblx0XHRcdFx0J2JhY2tncm91bmQtd2lkdGgnOiBhcHAucGFuZWxzLmJhY2tncm91bmQuc2V0Q29udGFpbmVyQmFja2dyb3VuZFdpZHRoLFxuXHRcdFx0XHQnYmFja2dyb3VuZC1oZWlnaHQnOiBhcHAucGFuZWxzLmJhY2tncm91bmQuc2V0Q29udGFpbmVyQmFja2dyb3VuZEhlaWdodCxcblx0XHRcdFx0J2JhY2tncm91bmQtY29sb3InOiBhcHAucGFuZWxzLmJhY2tncm91bmQuc2V0QmFja2dyb3VuZENvbG9yLFxuXHRcdFx0XHQnYmFja2dyb3VuZC11cmwnOiBhcHAucGFuZWxzLmJhY2tncm91bmQuc2V0QmFja2dyb3VuZFVybCxcblx0XHRcdH07XG5cdFx0fSxcblx0fTtcblxuXHQvLyBQcm92aWRlIGFjY2VzcyB0byBwdWJsaWMgZnVuY3Rpb25zL3Byb3BlcnRpZXMuXG5cdHJldHVybiBhcHA7XG59KCkgKTtcblxuLy8gSW5pdGlhbGl6ZS5cbldQRm9ybXMuRm9ybVNlbGVjdG9yLmluaXQoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFFQSxJQUFBQSxVQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxnQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksaUJBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLGFBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLGlCQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxZQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFBcUYsU0FBQUQsdUJBQUFTLEdBQUEsV0FBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUE7QUFBQSxTQUFBRyxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQVgsQ0FBQSxHQUFBUyxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBUCxDQUFBLEdBQUFBLENBQUEsQ0FBQVksTUFBQSxXQUFBTCxDQUFBLFdBQUFFLE1BQUEsQ0FBQUksd0JBQUEsQ0FBQVAsQ0FBQSxFQUFBQyxDQUFBLEVBQUFPLFVBQUEsT0FBQU4sQ0FBQSxDQUFBTyxJQUFBLENBQUFDLEtBQUEsQ0FBQVIsQ0FBQSxFQUFBUixDQUFBLFlBQUFRLENBQUE7QUFBQSxTQUFBUyxjQUFBWCxDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBVyxTQUFBLENBQUFDLE1BQUEsRUFBQVosQ0FBQSxVQUFBQyxDQUFBLFdBQUFVLFNBQUEsQ0FBQVgsQ0FBQSxJQUFBVyxTQUFBLENBQUFYLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBWSxPQUFBLFdBQUFiLENBQUEsSUFBQWMsZUFBQSxDQUFBZixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWEseUJBQUEsR0FBQWIsTUFBQSxDQUFBYyxnQkFBQSxDQUFBakIsQ0FBQSxFQUFBRyxNQUFBLENBQUFhLHlCQUFBLENBQUFkLENBQUEsS0FBQUgsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsR0FBQVksT0FBQSxXQUFBYixDQUFBLElBQUFFLE1BQUEsQ0FBQWUsY0FBQSxDQUFBbEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUksd0JBQUEsQ0FBQUwsQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBO0FBQUEsU0FBQWUsZ0JBQUF6QixHQUFBLEVBQUE2QixHQUFBLEVBQUFDLEtBQUEsSUFBQUQsR0FBQSxHQUFBRSxjQUFBLENBQUFGLEdBQUEsT0FBQUEsR0FBQSxJQUFBN0IsR0FBQSxJQUFBYSxNQUFBLENBQUFlLGNBQUEsQ0FBQTVCLEdBQUEsRUFBQTZCLEdBQUEsSUFBQUMsS0FBQSxFQUFBQSxLQUFBLEVBQUFaLFVBQUEsUUFBQWMsWUFBQSxRQUFBQyxRQUFBLG9CQUFBakMsR0FBQSxDQUFBNkIsR0FBQSxJQUFBQyxLQUFBLFdBQUE5QixHQUFBO0FBQUEsU0FBQStCLGVBQUFuQixDQUFBLFFBQUFzQixDQUFBLEdBQUFDLFlBQUEsQ0FBQXZCLENBQUEsZ0NBQUFULE9BQUEsQ0FBQStCLENBQUEsSUFBQUEsQ0FBQSxHQUFBRSxNQUFBLENBQUFGLENBQUE7QUFBQSxTQUFBQyxhQUFBdkIsQ0FBQSxFQUFBRCxDQUFBLG9CQUFBUixPQUFBLENBQUFTLENBQUEsTUFBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFGLENBQUEsR0FBQUUsQ0FBQSxDQUFBUCxNQUFBLENBQUFnQyxXQUFBLGtCQUFBM0IsQ0FBQSxRQUFBd0IsQ0FBQSxHQUFBeEIsQ0FBQSxDQUFBNEIsSUFBQSxDQUFBMUIsQ0FBQSxFQUFBRCxDQUFBLGdDQUFBUixPQUFBLENBQUErQixDQUFBLFVBQUFBLENBQUEsWUFBQUssU0FBQSx5RUFBQTVCLENBQUEsR0FBQXlCLE1BQUEsR0FBQUksTUFBQSxFQUFBNUIsQ0FBQSxLQVRyRjtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNNkIsT0FBTyxHQUFHQyxNQUFNLENBQUNELE9BQU8sSUFBSSxDQUFDLENBQUM7QUFFcENBLE9BQU8sQ0FBQ0UsWUFBWSxHQUFHRixPQUFPLENBQUNFLFlBQVksSUFBTSxZQUFXO0VBQzNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0MsSUFBTUMsR0FBRyxHQUFHO0lBQ1g7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDRUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUVWO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0VDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFVjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0lBQ0VDLElBQUksV0FBQUEsS0FBQSxFQUFHO01BQ05ILEdBQUcsQ0FBQ0ksU0FBUyxHQUFHQSxrQkFBUztNQUN6QkosR0FBRyxDQUFDQyxNQUFNLEdBQUdBLGVBQU07TUFDbkJELEdBQUcsQ0FBQ0UsTUFBTSxDQUFDRyxNQUFNLEdBQUdDLG9CQUFXO01BQy9CTixHQUFHLENBQUNFLE1BQU0sQ0FBQ0ssU0FBUyxHQUFHQyx3QkFBZTtNQUN0Q1IsR0FBRyxDQUFDRSxNQUFNLENBQUNPLFVBQVUsR0FBR0MseUJBQWdCO01BQ3hDVixHQUFHLENBQUNFLE1BQU0sQ0FBQ1MsTUFBTSxHQUFHQyxxQkFBWTtNQUNoQ1osR0FBRyxDQUFDRSxNQUFNLENBQUNXLFFBQVEsR0FBR0MseUJBQWdCO01BQ3RDZCxHQUFHLENBQUNFLE1BQU0sQ0FBQ2EsS0FBSyxHQUFHQyxvQkFBVztNQUU5QixJQUFNQyxZQUFZLEdBQUc7UUFDcEJmLE1BQU0sRUFBRUYsR0FBRyxDQUFDRSxNQUFNO1FBQ2xCZ0IsY0FBYyxFQUFFbEIsR0FBRyxDQUFDRSxNQUFNLENBQUNHLE1BQU0sQ0FBQ2EsY0FBYztRQUNoREMsY0FBYyxFQUFFbkIsR0FBRyxDQUFDRSxNQUFNLENBQUNhLEtBQUssQ0FBQ0ksY0FBYztRQUMvQ0Msa0JBQWtCLEVBQUVwQixHQUFHLENBQUNFLE1BQU0sQ0FBQ0ssU0FBUyxDQUFDYSxrQkFBa0I7UUFDM0RDLG1CQUFtQixFQUFFckIsR0FBRyxDQUFDRSxNQUFNLENBQUNPLFVBQVUsQ0FBQ1ksbUJBQW1CO1FBQzlEQyxlQUFlLEVBQUV0QixHQUFHLENBQUNFLE1BQU0sQ0FBQ1MsTUFBTSxDQUFDVyxlQUFlO1FBQ2xEQyxtQkFBbUIsRUFBRXZCLEdBQUcsQ0FBQ3VCLG1CQUFtQjtRQUM1Q0MsaUJBQWlCLEVBQUV4QixHQUFHLENBQUN5QixnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDckIsU0FBUyxFQUFFSixHQUFHLENBQUNJO01BQ2hCLENBQUM7O01BRUQ7TUFDQUosR0FBRyxDQUFDRSxNQUFNLENBQUNXLFFBQVEsQ0FBQ1YsSUFBSSxDQUFFSCxHQUFHLENBQUNDLE1BQU8sQ0FBQzs7TUFFdEM7TUFDQUQsR0FBRyxDQUFDQyxNQUFNLENBQUNFLElBQUksQ0FBRWMsWUFBYSxDQUFDO0lBQ2hDLENBQUM7SUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNFTSxtQkFBbUIsV0FBQUEsb0JBQUEsRUFBRztNQUNyQixPQUFBOUMsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNJdUIsR0FBRyxDQUFDRSxNQUFNLENBQUNhLEtBQUssQ0FBQ1csa0JBQWtCLENBQUMsQ0FBQyxHQUNyQzFCLEdBQUcsQ0FBQ0UsTUFBTSxDQUFDSyxTQUFTLENBQUNtQixrQkFBa0IsQ0FBQyxDQUFDLEdBQ3pDMUIsR0FBRyxDQUFDRSxNQUFNLENBQUNPLFVBQVUsQ0FBQ2lCLGtCQUFrQixDQUFDLENBQUMsR0FDMUMxQixHQUFHLENBQUNFLE1BQU0sQ0FBQ1MsTUFBTSxDQUFDZSxrQkFBa0IsQ0FBQyxDQUFDO0lBRTNDLENBQUM7SUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNFRCxnQkFBZ0IsV0FBQUEsaUJBQUEsRUFBRztNQUNsQixPQUFPO1FBQ04sa0JBQWtCLEVBQUV6QixHQUFHLENBQUNFLE1BQU0sQ0FBQ08sVUFBVSxDQUFDa0IsMkJBQTJCO1FBQ3JFLHFCQUFxQixFQUFFM0IsR0FBRyxDQUFDRSxNQUFNLENBQUNPLFVBQVUsQ0FBQ21CLDhCQUE4QjtRQUMzRSxtQkFBbUIsRUFBRTVCLEdBQUcsQ0FBQ0UsTUFBTSxDQUFDTyxVQUFVLENBQUNvQiw0QkFBNEI7UUFDdkUsa0JBQWtCLEVBQUU3QixHQUFHLENBQUNFLE1BQU0sQ0FBQ08sVUFBVSxDQUFDcUIsMkJBQTJCO1FBQ3JFLG1CQUFtQixFQUFFOUIsR0FBRyxDQUFDRSxNQUFNLENBQUNPLFVBQVUsQ0FBQ3NCLDRCQUE0QjtRQUN2RSxrQkFBa0IsRUFBRS9CLEdBQUcsQ0FBQ0UsTUFBTSxDQUFDTyxVQUFVLENBQUN1QixrQkFBa0I7UUFDNUQsZ0JBQWdCLEVBQUVoQyxHQUFHLENBQUNFLE1BQU0sQ0FBQ08sVUFBVSxDQUFDd0I7TUFDekMsQ0FBQztJQUNGO0VBQ0QsQ0FBQzs7RUFFRDtFQUNBLE9BQU9qQyxHQUFHO0FBQ1gsQ0FBQyxDQUFDLENBQUc7O0FBRUw7QUFDQUgsT0FBTyxDQUFDRSxZQUFZLENBQUNJLElBQUksQ0FBQyxDQUFDIn0= },{"../../../js/integrations/gutenberg/modules/advanced-settings.js":13,"../../../js/integrations/gutenberg/modules/background-styles.js":15,"../../../js/integrations/gutenberg/modules/button-styles.js":16,"../../../js/integrations/gutenberg/modules/common.js":17,"../../../js/integrations/gutenberg/modules/container-styles.js":18,"../../../js/integrations/gutenberg/modules/education.js":19,"../../../js/integrations/gutenberg/modules/field-styles.js":20,"../../../js/integrations/gutenberg/modules/themes-panel.js":21}],13:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; /* global wpforms_gutenberg_form_selector */ /* jshint es3: false, esversion: 6 */ /** * @param strings.custom_css * @param strings.custom_css_notice * @param strings.copy_paste_settings * @param strings.copy_paste_notice */ /** * Gutenberg editor block. * * Advanced Settings module. * * @since 1.8.8 */ var _default = exports.default = function ($) { /** * WP core components. * * @since 1.8.8 */ var addFilter = wp.hooks.addFilter; var createHigherOrderComponent = wp.compose.createHigherOrderComponent; var Fragment = wp.element.Fragment; var _ref = wp.blockEditor || wp.editor, InspectorAdvancedControls = _ref.InspectorAdvancedControls; var TextareaControl = wp.components.TextareaControl; /** * Localized data aliases. * * @since 1.8.8 */ var _wpforms_gutenberg_fo = wpforms_gutenberg_form_selector, strings = _wpforms_gutenberg_fo.strings; /** * Public functions and properties. * * @since 1.8.8 * * @type {Object} */ var app = { /** * Initialize module. * * @since 1.8.8 * * @param {Object} commonModule Common module. */ init: function init(commonModule) { app.common = commonModule; app.hooks(); app.events(); }, /** * Hooks. * * @since 1.8.8 */ hooks: function hooks() { addFilter('editor.BlockEdit', 'editorskit/custom-advanced-control', app.withAdvancedControls); }, /** * Events. * * @since 1.8.8 */ events: function events() { $(document).on('focus click', 'textarea', app.copyPasteFocus); }, /** * Copy / Paste Style Settings textarea focus event. * * @since 1.8.8 */ copyPasteFocus: function copyPasteFocus() { var $input = $(this); if ($input.siblings('label').text() === strings.copy_paste_settings) { // Select all text, so it's easier to copy and paste value. $input.select(); } }, /** * Get fields. * * @since 1.8.8 * * @param {Object} props Block properties. * * @return {Object} Inspector advanced controls JSX code. */ getFields: function getFields(props) { // Proceed only for WPForms block. if ((props === null || props === void 0 ? void 0 : props.name) !== 'wpforms/form-selector') { return null; } // Common event handlers. var handlers = app.common.getSettingsFieldsHandlers(props); return /*#__PURE__*/React.createElement(InspectorAdvancedControls, null, /*#__PURE__*/React.createElement("div", { className: app.common.getPanelClass(props) + ' advanced' }, /*#__PURE__*/React.createElement(TextareaControl, { className: "wpforms-gutenberg-form-selector-custom-css", label: strings.custom_css, rows: "5", spellCheck: "false", value: props.attributes.customCss, onChange: function onChange(value) { return handlers.attrChange('customCss', value); } }), /*#__PURE__*/React.createElement("div", { className: "wpforms-gutenberg-form-selector-legend", dangerouslySetInnerHTML: { __html: strings.custom_css_notice } }), /*#__PURE__*/React.createElement(TextareaControl, { className: "wpforms-gutenberg-form-selector-copy-paste-settings", label: strings.copy_paste_settings, rows: "4", spellCheck: "false", value: props.attributes.copyPasteJsonValue, onChange: function onChange(value) { return handlers.pasteSettings(value); } }), /*#__PURE__*/React.createElement("div", { className: "wpforms-gutenberg-form-selector-legend", dangerouslySetInnerHTML: { __html: strings.copy_paste_notice } }))); }, /** * Add controls on Advanced Settings Panel. * * @param {Function} BlockEdit Block edit component. * * @return {Function} BlockEdit Modified block edit component. */ withAdvancedControls: createHigherOrderComponent(function (BlockEdit) { return function (props) { return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(BlockEdit, props), app.getFields(props)); }; }, 'withAdvancedControls') }; // Provide access to public functions/properties. return app; }(jQuery); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwiJCIsImFkZEZpbHRlciIsIndwIiwiaG9va3MiLCJjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCIsImNvbXBvc2UiLCJGcmFnbWVudCIsImVsZW1lbnQiLCJfcmVmIiwiYmxvY2tFZGl0b3IiLCJlZGl0b3IiLCJJbnNwZWN0b3JBZHZhbmNlZENvbnRyb2xzIiwiVGV4dGFyZWFDb250cm9sIiwiY29tcG9uZW50cyIsIl93cGZvcm1zX2d1dGVuYmVyZ19mbyIsIndwZm9ybXNfZ3V0ZW5iZXJnX2Zvcm1fc2VsZWN0b3IiLCJzdHJpbmdzIiwiYXBwIiwiaW5pdCIsImNvbW1vbk1vZHVsZSIsImNvbW1vbiIsImV2ZW50cyIsIndpdGhBZHZhbmNlZENvbnRyb2xzIiwiZG9jdW1lbnQiLCJvbiIsImNvcHlQYXN0ZUZvY3VzIiwiJGlucHV0Iiwic2libGluZ3MiLCJ0ZXh0IiwiY29weV9wYXN0ZV9zZXR0aW5ncyIsInNlbGVjdCIsImdldEZpZWxkcyIsInByb3BzIiwibmFtZSIsImhhbmRsZXJzIiwiZ2V0U2V0dGluZ3NGaWVsZHNIYW5kbGVycyIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImdldFBhbmVsQ2xhc3MiLCJsYWJlbCIsImN1c3RvbV9jc3MiLCJyb3dzIiwic3BlbGxDaGVjayIsInZhbHVlIiwiYXR0cmlidXRlcyIsImN1c3RvbUNzcyIsIm9uQ2hhbmdlIiwiYXR0ckNoYW5nZSIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwiY3VzdG9tX2Nzc19ub3RpY2UiLCJjb3B5UGFzdGVKc29uVmFsdWUiLCJwYXN0ZVNldHRpbmdzIiwiY29weV9wYXN0ZV9ub3RpY2UiLCJCbG9ja0VkaXQiLCJqUXVlcnkiXSwic291cmNlcyI6WyJhZHZhbmNlZC1zZXR0aW5ncy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgd3Bmb3Jtc19ndXRlbmJlcmdfZm9ybV9zZWxlY3RvciAqL1xuLyoganNoaW50IGVzMzogZmFsc2UsIGVzdmVyc2lvbjogNiAqL1xuXG4vKipcbiAqIEBwYXJhbSBzdHJpbmdzLmN1c3RvbV9jc3NcbiAqIEBwYXJhbSBzdHJpbmdzLmN1c3RvbV9jc3Nfbm90aWNlXG4gKiBAcGFyYW0gc3RyaW5ncy5jb3B5X3Bhc3RlX3NldHRpbmdzXG4gKiBAcGFyYW0gc3RyaW5ncy5jb3B5X3Bhc3RlX25vdGljZVxuICovXG5cbi8qKlxuICogR3V0ZW5iZXJnIGVkaXRvciBibG9jay5cbiAqXG4gKiBBZHZhbmNlZCBTZXR0aW5ncyBtb2R1bGUuXG4gKlxuICogQHNpbmNlIDEuOC44XG4gKi9cbmV4cG9ydCBkZWZhdWx0ICggZnVuY3Rpb24oICQgKSB7XG5cdC8qKlxuXHQgKiBXUCBjb3JlIGNvbXBvbmVudHMuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjguOFxuXHQgKi9cblx0Y29uc3QgeyBhZGRGaWx0ZXIgfSA9IHdwLmhvb2tzO1xuXHRjb25zdCB7IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IH0gPSB3cC5jb21wb3NlO1xuXHRjb25zdCB7IEZyYWdtZW50IH1cdD0gd3AuZWxlbWVudDtcblx0Y29uc3QgeyBJbnNwZWN0b3JBZHZhbmNlZENvbnRyb2xzIH0gPSB3cC5ibG9ja0VkaXRvciB8fCB3cC5lZGl0b3I7XG5cdGNvbnN0IHsgVGV4dGFyZWFDb250cm9sIH0gPSB3cC5jb21wb25lbnRzO1xuXG5cdC8qKlxuXHQgKiBMb2NhbGl6ZWQgZGF0YSBhbGlhc2VzLlxuXHQgKlxuXHQgKiBAc2luY2UgMS44Ljhcblx0ICovXG5cdGNvbnN0IHsgc3RyaW5ncyB9ID0gd3Bmb3Jtc19ndXRlbmJlcmdfZm9ybV9zZWxlY3RvcjtcblxuXHQvKipcblx0ICogUHVibGljIGZ1bmN0aW9ucyBhbmQgcHJvcGVydGllcy5cblx0ICpcblx0ICogQHNpbmNlIDEuOC44XG5cdCAqXG5cdCAqIEB0eXBlIHtPYmplY3R9XG5cdCAqL1xuXHRjb25zdCBhcHAgPSB7XG5cdFx0LyoqXG5cdFx0ICogSW5pdGlhbGl6ZSBtb2R1bGUuXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44Ljhcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBjb21tb25Nb2R1bGUgQ29tbW9uIG1vZHVsZS5cblx0XHQgKi9cblx0XHRpbml0KCBjb21tb25Nb2R1bGUgKSB7XG5cdFx0XHRhcHAuY29tbW9uID0gY29tbW9uTW9kdWxlO1xuXG5cdFx0XHRhcHAuaG9va3MoKTtcblx0XHRcdGFwcC5ldmVudHMoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSG9va3MuXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44Ljhcblx0XHQgKi9cblx0XHRob29rcygpIHtcblx0XHRcdGFkZEZpbHRlcihcblx0XHRcdFx0J2VkaXRvci5CbG9ja0VkaXQnLFxuXHRcdFx0XHQnZWRpdG9yc2tpdC9jdXN0b20tYWR2YW5jZWQtY29udHJvbCcsXG5cdFx0XHRcdGFwcC53aXRoQWR2YW5jZWRDb250cm9sc1xuXHRcdFx0KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRXZlbnRzLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICovXG5cdFx0ZXZlbnRzKCkge1xuXHRcdFx0JCggZG9jdW1lbnQgKVxuXHRcdFx0XHQub24oICdmb2N1cyBjbGljaycsICd0ZXh0YXJlYScsIGFwcC5jb3B5UGFzdGVGb2N1cyApO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDb3B5IC8gUGFzdGUgU3R5bGUgU2V0dGluZ3MgdGV4dGFyZWEgZm9jdXMgZXZlbnQuXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44Ljhcblx0XHQgKi9cblx0XHRjb3B5UGFzdGVGb2N1cygpIHtcblx0XHRcdGNvbnN0ICRpbnB1dCA9ICQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCAkaW5wdXQuc2libGluZ3MoICdsYWJlbCcgKS50ZXh0KCkgPT09IHN0cmluZ3MuY29weV9wYXN0ZV9zZXR0aW5ncyApIHtcblx0XHRcdFx0Ly8gU2VsZWN0IGFsbCB0ZXh0LCBzbyBpdCdzIGVhc2llciB0byBjb3B5IGFuZCBwYXN0ZSB2YWx1ZS5cblx0XHRcdFx0JGlucHV0LnNlbGVjdCgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBHZXQgZmllbGRzLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmxvY2sgcHJvcGVydGllcy5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gSW5zcGVjdG9yIGFkdmFuY2VkIGNvbnRyb2xzIEpTWCBjb2RlLlxuXHRcdCAqL1xuXHRcdGdldEZpZWxkcyggcHJvcHMgKSB7XG5cdFx0XHQvLyBQcm9jZWVkIG9ubHkgZm9yIFdQRm9ybXMgYmxvY2suXG5cdFx0XHRpZiAoIHByb3BzPy5uYW1lICE9PSAnd3Bmb3Jtcy9mb3JtLXNlbGVjdG9yJyApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbW1vbiBldmVudCBoYW5kbGVycy5cblx0XHRcdGNvbnN0IGhhbmRsZXJzID0gYXBwLmNvbW1vbi5nZXRTZXR0aW5nc0ZpZWxkc0hhbmRsZXJzKCBwcm9wcyApO1xuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8SW5zcGVjdG9yQWR2YW5jZWRDb250cm9scz5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGFwcC5jb21tb24uZ2V0UGFuZWxDbGFzcyggcHJvcHMgKSArICcgYWR2YW5jZWQnIH0+XG5cdFx0XHRcdFx0XHQ8VGV4dGFyZWFDb250cm9sXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIndwZm9ybXMtZ3V0ZW5iZXJnLWZvcm0tc2VsZWN0b3ItY3VzdG9tLWNzc1wiXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgc3RyaW5ncy5jdXN0b21fY3NzIH1cblx0XHRcdFx0XHRcdFx0cm93cz1cIjVcIlxuXHRcdFx0XHRcdFx0XHRzcGVsbENoZWNrPVwiZmFsc2VcIlxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IHByb3BzLmF0dHJpYnV0ZXMuY3VzdG9tQ3NzIH1cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIHZhbHVlICkgPT4gaGFuZGxlcnMuYXR0ckNoYW5nZSggJ2N1c3RvbUNzcycsIHZhbHVlICkgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwid3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1sZWdlbmRcIiBkYW5nZXJvdXNseVNldElubmVySFRNTD17IHsgX19odG1sOiBzdHJpbmdzLmN1c3RvbV9jc3Nfbm90aWNlIH0gfT48L2Rpdj5cblx0XHRcdFx0XHRcdDxUZXh0YXJlYUNvbnRyb2xcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwid3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1jb3B5LXBhc3RlLXNldHRpbmdzXCJcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBzdHJpbmdzLmNvcHlfcGFzdGVfc2V0dGluZ3MgfVxuXHRcdFx0XHRcdFx0XHRyb3dzPVwiNFwiXG5cdFx0XHRcdFx0XHRcdHNwZWxsQ2hlY2s9XCJmYWxzZVwiXG5cdFx0XHRcdFx0XHRcdHZhbHVlPXsgcHJvcHMuYXR0cmlidXRlcy5jb3B5UGFzdGVKc29uVmFsdWUgfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggdmFsdWUgKSA9PiBoYW5kbGVycy5wYXN0ZVNldHRpbmdzKCB2YWx1ZSApIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndwZm9ybXMtZ3V0ZW5iZXJnLWZvcm0tc2VsZWN0b3ItbGVnZW5kXCIgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9eyB7IF9faHRtbDogc3RyaW5ncy5jb3B5X3Bhc3RlX25vdGljZSB9IH0+PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvSW5zcGVjdG9yQWR2YW5jZWRDb250cm9scz5cblx0XHRcdCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFkZCBjb250cm9scyBvbiBBZHZhbmNlZCBTZXR0aW5ncyBQYW5lbC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IEJsb2NrRWRpdCBCbG9jayBlZGl0IGNvbXBvbmVudC5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm4ge0Z1bmN0aW9ufSBCbG9ja0VkaXQgTW9kaWZpZWQgYmxvY2sgZWRpdCBjb21wb25lbnQuXG5cdFx0ICovXG5cdFx0d2l0aEFkdmFuY2VkQ29udHJvbHM6IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KFxuXHRcdFx0KCBCbG9ja0VkaXQgKSA9PiB7XG5cdFx0XHRcdHJldHVybiAoIHByb3BzICkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdFx0XHRcdDxCbG9ja0VkaXQgeyAuLi5wcm9wcyB9IC8+XG5cdFx0XHRcdFx0XHRcdHsgYXBwLmdldEZpZWxkcyggcHJvcHMgKSB9XG5cdFx0XHRcdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdFx0J3dpdGhBZHZhbmNlZENvbnRyb2xzJ1xuXHRcdCksXG5cdH07XG5cblx0Ly8gUHJvdmlkZSBhY2Nlc3MgdG8gcHVibGljIGZ1bmN0aW9ucy9wcm9wZXJ0aWVzLlxuXHRyZXR1cm4gYXBwO1xufSggalF1ZXJ5ICkgKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FPaUIsVUFBVUMsQ0FBQyxFQUFHO0VBQzlCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7RUFDQyxJQUFRQyxTQUFTLEdBQUtDLEVBQUUsQ0FBQ0MsS0FBSyxDQUF0QkYsU0FBUztFQUNqQixJQUFRRywwQkFBMEIsR0FBS0YsRUFBRSxDQUFDRyxPQUFPLENBQXpDRCwwQkFBMEI7RUFDbEMsSUFBUUUsUUFBUSxHQUFLSixFQUFFLENBQUNLLE9BQU8sQ0FBdkJELFFBQVE7RUFDaEIsSUFBQUUsSUFBQSxHQUFzQ04sRUFBRSxDQUFDTyxXQUFXLElBQUlQLEVBQUUsQ0FBQ1EsTUFBTTtJQUF6REMseUJBQXlCLEdBQUFILElBQUEsQ0FBekJHLHlCQUF5QjtFQUNqQyxJQUFRQyxlQUFlLEdBQUtWLEVBQUUsQ0FBQ1csVUFBVSxDQUFqQ0QsZUFBZTs7RUFFdkI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtFQUNDLElBQUFFLHFCQUFBLEdBQW9CQywrQkFBK0I7SUFBM0NDLE9BQU8sR0FBQUYscUJBQUEsQ0FBUEUsT0FBTzs7RUFFZjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNDLElBQU1DLEdBQUcsR0FBRztJQUNYO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0VDLElBQUksV0FBQUEsS0FBRUMsWUFBWSxFQUFHO01BQ3BCRixHQUFHLENBQUNHLE1BQU0sR0FBR0QsWUFBWTtNQUV6QkYsR0FBRyxDQUFDZCxLQUFLLENBQUMsQ0FBQztNQUNYYyxHQUFHLENBQUNJLE1BQU0sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7SUFDRWxCLEtBQUssV0FBQUEsTUFBQSxFQUFHO01BQ1BGLFNBQVMsQ0FDUixrQkFBa0IsRUFDbEIsb0NBQW9DLEVBQ3BDZ0IsR0FBRyxDQUFDSyxvQkFDTCxDQUFDO0lBQ0YsQ0FBQztJQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7SUFDRUQsTUFBTSxXQUFBQSxPQUFBLEVBQUc7TUFDUnJCLENBQUMsQ0FBRXVCLFFBQVMsQ0FBQyxDQUNYQyxFQUFFLENBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRVAsR0FBRyxDQUFDUSxjQUFlLENBQUM7SUFDdEQsQ0FBQztJQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7SUFDRUEsY0FBYyxXQUFBQSxlQUFBLEVBQUc7TUFDaEIsSUFBTUMsTUFBTSxHQUFHMUIsQ0FBQyxDQUFFLElBQUssQ0FBQztNQUV4QixJQUFLMEIsTUFBTSxDQUFDQyxRQUFRLENBQUUsT0FBUSxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDLEtBQUtaLE9BQU8sQ0FBQ2EsbUJBQW1CLEVBQUc7UUFDeEU7UUFDQUgsTUFBTSxDQUFDSSxNQUFNLENBQUMsQ0FBQztNQUNoQjtJQUNELENBQUM7SUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDRUMsU0FBUyxXQUFBQSxVQUFFQyxLQUFLLEVBQUc7TUFDbEI7TUFDQSxJQUFLLENBQUFBLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFQyxJQUFJLE1BQUssdUJBQXVCLEVBQUc7UUFDOUMsT0FBTyxJQUFJO01BQ1o7O01BRUE7TUFDQSxJQUFNQyxRQUFRLEdBQUdqQixHQUFHLENBQUNHLE1BQU0sQ0FBQ2UseUJBQXlCLENBQUVILEtBQU0sQ0FBQztNQUU5RCxvQkFDQ0ksS0FBQSxDQUFBQyxhQUFBLENBQUMxQix5QkFBeUIscUJBQ3pCeUIsS0FBQSxDQUFBQyxhQUFBO1FBQUtDLFNBQVMsRUFBR3JCLEdBQUcsQ0FBQ0csTUFBTSxDQUFDbUIsYUFBYSxDQUFFUCxLQUFNLENBQUMsR0FBRztNQUFhLGdCQUNqRUksS0FBQSxDQUFBQyxhQUFBLENBQUN6QixlQUFlO1FBQ2YwQixTQUFTLEVBQUMsNENBQTRDO1FBQ3RERSxLQUFLLEVBQUd4QixPQUFPLENBQUN5QixVQUFZO1FBQzVCQyxJQUFJLEVBQUMsR0FBRztRQUNSQyxVQUFVLEVBQUMsT0FBTztRQUNsQkMsS0FBSyxFQUFHWixLQUFLLENBQUNhLFVBQVUsQ0FBQ0MsU0FBVztRQUNwQ0MsUUFBUSxFQUFHLFNBQUFBLFNBQUVILEtBQUs7VUFBQSxPQUFNVixRQUFRLENBQUNjLFVBQVUsQ0FBRSxXQUFXLEVBQUVKLEtBQU0sQ0FBQztRQUFBO01BQUUsQ0FDbkUsQ0FBQyxlQUNGUixLQUFBLENBQUFDLGFBQUE7UUFBS0MsU0FBUyxFQUFDLHdDQUF3QztRQUFDVyx1QkFBdUIsRUFBRztVQUFFQyxNQUFNLEVBQUVsQyxPQUFPLENBQUNtQztRQUFrQjtNQUFHLENBQU0sQ0FBQyxlQUNoSWYsS0FBQSxDQUFBQyxhQUFBLENBQUN6QixlQUFlO1FBQ2YwQixTQUFTLEVBQUMscURBQXFEO1FBQy9ERSxLQUFLLEVBQUd4QixPQUFPLENBQUNhLG1CQUFxQjtRQUNyQ2EsSUFBSSxFQUFDLEdBQUc7UUFDUkMsVUFBVSxFQUFDLE9BQU87UUFDbEJDLEtBQUssRUFBR1osS0FBSyxDQUFDYSxVQUFVLENBQUNPLGtCQUFvQjtRQUM3Q0wsUUFBUSxFQUFHLFNBQUFBLFNBQUVILEtBQUs7VUFBQSxPQUFNVixRQUFRLENBQUNtQixhQUFhLENBQUVULEtBQU0sQ0FBQztRQUFBO01BQUUsQ0FDekQsQ0FBQyxlQUNGUixLQUFBLENBQUFDLGFBQUE7UUFBS0MsU0FBUyxFQUFDLHdDQUF3QztRQUFDVyx1QkFBdUIsRUFBRztVQUFFQyxNQUFNLEVBQUVsQyxPQUFPLENBQUNzQztRQUFrQjtNQUFHLENBQU0sQ0FDM0gsQ0FDcUIsQ0FBQztJQUU5QixDQUFDO0lBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDRWhDLG9CQUFvQixFQUFFbEIsMEJBQTBCLENBQy9DLFVBQUVtRCxTQUFTLEVBQU07TUFDaEIsT0FBTyxVQUFFdkIsS0FBSyxFQUFNO1FBQ25CLG9CQUNDSSxLQUFBLENBQUFDLGFBQUEsQ0FBQy9CLFFBQVEscUJBQ1I4QixLQUFBLENBQUFDLGFBQUEsQ0FBQ2tCLFNBQVMsRUFBTXZCLEtBQVMsQ0FBQyxFQUN4QmYsR0FBRyxDQUFDYyxTQUFTLENBQUVDLEtBQU0sQ0FDZCxDQUFDO01BRWIsQ0FBQztJQUNGLENBQUMsRUFDRCxzQkFDRDtFQUNELENBQUM7O0VBRUQ7RUFDQSxPQUFPZixHQUFHO0FBQ1gsQ0FBQyxDQUFFdUMsTUFBTyxDQUFDIn0= },{}],14:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _propTypes = _interopRequireDefault(require("prop-types")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* global wpforms_gutenberg_form_selector */ /* jshint es3: false, esversion: 6 */ /** * @param strings.remove_image */ /** * React component for the background preview. * * @since 1.8.8 * * @param {Object} props Component props. * @param {Object} props.attributes Block attributes. * @param {Function} props.onRemoveBackground Function to remove the background. * @param {Function} props.onPreviewClicked Function to handle the preview click. * * @return {Object} React component. */ var BackgroundPreview = function BackgroundPreview(_ref) { var attributes = _ref.attributes, onRemoveBackground = _ref.onRemoveBackground, onPreviewClicked = _ref.onPreviewClicked; var Button = wp.components.Button; var _wpforms_gutenberg_fo = wpforms_gutenberg_form_selector, strings = _wpforms_gutenberg_fo.strings; return /*#__PURE__*/React.createElement("div", { className: "wpforms-gutenberg-form-selector-background-preview" }, /*#__PURE__*/React.createElement("style", null, "\n\t\t\t\t\t.wpforms-gutenberg-form-selector-background-preview-image {\n\t\t\t\t\t\t--wpforms-background-url: ".concat(attributes.backgroundUrl, ";\n\t\t\t\t\t}\n\t\t\t\t")), /*#__PURE__*/React.createElement("input", { className: "wpforms-gutenberg-form-selector-background-preview-image", onClick: onPreviewClicked, tabIndex: 0, type: "button", onKeyDown: function onKeyDown(event) { if (event.key === 'Enter' || event.key === ' ') { onPreviewClicked(); } } }), /*#__PURE__*/React.createElement(Button, { isSecondary: true, className: "is-destructive", onClick: onRemoveBackground }, strings.remove_image)); }; BackgroundPreview.propTypes = { attributes: _propTypes.default.object.isRequired, onRemoveBackground: _propTypes.default.func.isRequired, onPreviewClicked: _propTypes.default.func.isRequired }; var _default = exports.default = BackgroundPreview; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkJhY2tncm91bmRQcmV2aWV3IiwiX3JlZiIsImF0dHJpYnV0ZXMiLCJvblJlbW92ZUJhY2tncm91bmQiLCJvblByZXZpZXdDbGlja2VkIiwiQnV0dG9uIiwid3AiLCJjb21wb25lbnRzIiwiX3dwZm9ybXNfZ3V0ZW5iZXJnX2ZvIiwid3Bmb3Jtc19ndXRlbmJlcmdfZm9ybV9zZWxlY3RvciIsInN0cmluZ3MiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb25jYXQiLCJiYWNrZ3JvdW5kVXJsIiwib25DbGljayIsInRhYkluZGV4IiwidHlwZSIsIm9uS2V5RG93biIsImV2ZW50Iiwia2V5IiwiaXNTZWNvbmRhcnkiLCJyZW1vdmVfaW1hZ2UiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwiZnVuYyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbImJhY2tncm91bmQtcHJldmlldy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgd3Bmb3Jtc19ndXRlbmJlcmdfZm9ybV9zZWxlY3RvciAqL1xuLyoganNoaW50IGVzMzogZmFsc2UsIGVzdmVyc2lvbjogNiAqL1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIEBwYXJhbSBzdHJpbmdzLnJlbW92ZV9pbWFnZVxuICovXG5cbi8qKlxuICogUmVhY3QgY29tcG9uZW50IGZvciB0aGUgYmFja2dyb3VuZCBwcmV2aWV3LlxuICpcbiAqIEBzaW5jZSAxLjguOFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSAgIHByb3BzICAgICAgICAgICAgICAgICAgICBDb21wb25lbnQgcHJvcHMuXG4gKiBAcGFyYW0ge09iamVjdH0gICBwcm9wcy5hdHRyaWJ1dGVzICAgICAgICAgQmxvY2sgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9uUmVtb3ZlQmFja2dyb3VuZCBGdW5jdGlvbiB0byByZW1vdmUgdGhlIGJhY2tncm91bmQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5vblByZXZpZXdDbGlja2VkICAgRnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBwcmV2aWV3IGNsaWNrLlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gUmVhY3QgY29tcG9uZW50LlxuICovXG5jb25zdCBCYWNrZ3JvdW5kUHJldmlldyA9ICggeyBhdHRyaWJ1dGVzLCBvblJlbW92ZUJhY2tncm91bmQsIG9uUHJldmlld0NsaWNrZWQgfSApID0+IHtcblx0Y29uc3QgeyBCdXR0b24gfSA9IHdwLmNvbXBvbmVudHM7XG5cdGNvbnN0IHsgc3RyaW5ncyB9ID0gd3Bmb3Jtc19ndXRlbmJlcmdfZm9ybV9zZWxlY3RvcjtcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwid3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1iYWNrZ3JvdW5kLXByZXZpZXdcIj5cblx0XHRcdDxzdHlsZT5cblx0XHRcdFx0eyBgXG5cdFx0XHRcdFx0LndwZm9ybXMtZ3V0ZW5iZXJnLWZvcm0tc2VsZWN0b3ItYmFja2dyb3VuZC1wcmV2aWV3LWltYWdlIHtcblx0XHRcdFx0XHRcdC0td3Bmb3Jtcy1iYWNrZ3JvdW5kLXVybDogJHsgYXR0cmlidXRlcy5iYWNrZ3JvdW5kVXJsIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRgIH1cblx0XHRcdDwvc3R5bGU+XG5cdFx0XHQ8aW5wdXRcblx0XHRcdFx0Y2xhc3NOYW1lPVwid3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1iYWNrZ3JvdW5kLXByZXZpZXctaW1hZ2VcIlxuXHRcdFx0XHRvbkNsaWNrPXsgb25QcmV2aWV3Q2xpY2tlZCB9XG5cdFx0XHRcdHRhYkluZGV4PXsgMCB9XG5cdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRvbktleURvd249e1xuXHRcdFx0XHRcdCggZXZlbnQgKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcgJyApIHtcblx0XHRcdFx0XHRcdFx0b25QcmV2aWV3Q2xpY2tlZCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0PlxuXHRcdFx0PC9pbnB1dD5cblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aXNTZWNvbmRhcnlcblx0XHRcdFx0Y2xhc3NOYW1lPVwiaXMtZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRvbkNsaWNrPXsgb25SZW1vdmVCYWNrZ3JvdW5kIH1cblx0XHRcdD5cblx0XHRcdFx0eyBzdHJpbmdzLnJlbW92ZV9pbWFnZSB9XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L2Rpdj5cblx0KTtcbn07XG5cbkJhY2tncm91bmRQcmV2aWV3LnByb3BUeXBlcyA9IHtcblx0YXR0cmlidXRlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuXHRvblJlbW92ZUJhY2tncm91bmQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdG9uUHJldmlld0NsaWNrZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBCYWNrZ3JvdW5kUHJldmlldztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQW1DLFNBQUFELHVCQUFBRSxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsS0FBQUUsT0FBQSxFQUFBRixHQUFBO0FBSG5DO0FBQ0E7O0FBSUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1HLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUFDLElBQUEsRUFBK0Q7RUFBQSxJQUF4REMsVUFBVSxHQUFBRCxJQUFBLENBQVZDLFVBQVU7SUFBRUMsa0JBQWtCLEdBQUFGLElBQUEsQ0FBbEJFLGtCQUFrQjtJQUFFQyxnQkFBZ0IsR0FBQUgsSUFBQSxDQUFoQkcsZ0JBQWdCO0VBQzdFLElBQVFDLE1BQU0sR0FBS0MsRUFBRSxDQUFDQyxVQUFVLENBQXhCRixNQUFNO0VBQ2QsSUFBQUcscUJBQUEsR0FBb0JDLCtCQUErQjtJQUEzQ0MsT0FBTyxHQUFBRixxQkFBQSxDQUFQRSxPQUFPO0VBRWYsb0JBQ0NDLEtBQUEsQ0FBQUMsYUFBQTtJQUFLQyxTQUFTLEVBQUM7RUFBb0QsZ0JBQ2xFRixLQUFBLENBQUFDLGFBQUEsa0lBQUFFLE1BQUEsQ0FHZ0NaLFVBQVUsQ0FBQ2EsYUFBYSw2QkFHakQsQ0FBQyxlQUNSSixLQUFBLENBQUFDLGFBQUE7SUFDQ0MsU0FBUyxFQUFDLDBEQUEwRDtJQUNwRUcsT0FBTyxFQUFHWixnQkFBa0I7SUFDNUJhLFFBQVEsRUFBRyxDQUFHO0lBQ2RDLElBQUksRUFBQyxRQUFRO0lBQ2JDLFNBQVMsRUFDUixTQUFBQSxVQUFFQyxLQUFLLEVBQU07TUFDWixJQUFLQSxLQUFLLENBQUNDLEdBQUcsS0FBSyxPQUFPLElBQUlELEtBQUssQ0FBQ0MsR0FBRyxLQUFLLEdBQUcsRUFBRztRQUNqRGpCLGdCQUFnQixDQUFDLENBQUM7TUFDbkI7SUFDRDtFQUNBLENBRUssQ0FBQyxlQUNSTyxLQUFBLENBQUFDLGFBQUEsQ0FBQ1AsTUFBTTtJQUNOaUIsV0FBVztJQUNYVCxTQUFTLEVBQUMsZ0JBQWdCO0lBQzFCRyxPQUFPLEVBQUdiO0VBQW9CLEdBRTVCTyxPQUFPLENBQUNhLFlBQ0gsQ0FDSixDQUFDO0FBRVIsQ0FBQztBQUVEdkIsaUJBQWlCLENBQUN3QixTQUFTLEdBQUc7RUFDN0J0QixVQUFVLEVBQUV1QixrQkFBUyxDQUFDQyxNQUFNLENBQUNDLFVBQVU7RUFDdkN4QixrQkFBa0IsRUFBRXNCLGtCQUFTLENBQUNHLElBQUksQ0FBQ0QsVUFBVTtFQUM3Q3ZCLGdCQUFnQixFQUFFcUIsa0JBQVMsQ0FBQ0csSUFBSSxDQUFDRDtBQUNsQyxDQUFDO0FBQUMsSUFBQUUsUUFBQSxHQUFBQyxPQUFBLENBQUEvQixPQUFBLEdBRWFDLGlCQUFpQiJ9 },{"prop-types":6}],15:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _backgroundPreview = _interopRequireDefault(require("./background-preview.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _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); } function _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; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } /* global wpforms_gutenberg_form_selector */ /* jshint es3: false, esversion: 6 */ /** * @param strings.background_styles * @param strings.bottom_center * @param strings.bottom_left * @param strings.bottom_right * @param strings.center_center * @param strings.center_left * @param strings.center_right * @param strings.choose_image * @param strings.image_url * @param strings.media_library * @param strings.no_repeat * @param strings.repeat_x * @param strings.repeat_y * @param strings.select_background_image * @param strings.select_image * @param strings.stock_photo * @param strings.tile * @param strings.top_center * @param strings.top_left * @param strings.top_right */ /** * Gutenberg editor block. * * Background styles panel module. * * @since 1.8.8 */ var _default = exports.default = function () { /** * WP core components. * * @since 1.8.8 */ var _ref = wp.blockEditor || wp.editor, PanelColorSettings = _ref.PanelColorSettings; var _wp$components = wp.components, SelectControl = _wp$components.SelectControl, PanelBody = _wp$components.PanelBody, Flex = _wp$components.Flex, FlexBlock = _wp$components.FlexBlock, __experimentalUnitControl = _wp$components.__experimentalUnitControl, TextControl = _wp$components.TextControl, Button = _wp$components.Button; var _wp$element = wp.element, useState = _wp$element.useState, useEffect = _wp$element.useEffect; /** * Localized data aliases. * * @since 1.8.8 */ var _wpforms_gutenberg_fo = wpforms_gutenberg_form_selector, strings = _wpforms_gutenberg_fo.strings, defaults = _wpforms_gutenberg_fo.defaults, isPro = _wpforms_gutenberg_fo.isPro, isLicenseActive = _wpforms_gutenberg_fo.isLicenseActive; /** * Whether the background is selected. * * @since 1.8.8 * * @type {boolean} */ var backgroundSelected = false; /** * Public functions and properties. * * @since 1.8.8 * * @type {Object} */ var app = { /** * Get block attributes. * * @since 1.8.8 * * @return {Object} Block attributes. */ getBlockAttributes: function getBlockAttributes() { return { backgroundImage: { type: 'string', default: defaults.backgroundImage }, backgroundPosition: { type: 'string', default: defaults.backgroundPosition }, backgroundRepeat: { type: 'string', default: defaults.backgroundRepeat }, backgroundSizeMode: { type: 'string', default: defaults.backgroundSizeMode }, backgroundSize: { type: 'string', default: defaults.backgroundSize }, backgroundWidth: { type: 'string', default: defaults.backgroundWidth }, backgroundHeight: { type: 'string', default: defaults.backgroundHeight }, backgroundColor: { type: 'string', default: defaults.backgroundColor }, backgroundUrl: { type: 'string', default: defaults.backgroundUrl } }; }, /** * Get Background Styles panel JSX code. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block handlers. * @param {Object} formSelectorCommon Block properties. * @param {Object} stockPhotos Stock Photos module. * * @return {Object} Field styles JSX code. */ getBackgroundStyles: function getBackgroundStyles(props, handlers, formSelectorCommon, stockPhotos) { // eslint-disable-line max-lines-per-function, complexity var _useState = useState(app._showBackgroundPreview(props)), _useState2 = _slicedToArray(_useState, 2), showBackgroundPreview = _useState2[0], setShowBackgroundPreview = _useState2[1]; // eslint-disable-line react-hooks/rules-of-hooks var _useState3 = useState(''), _useState4 = _slicedToArray(_useState3, 2), lastBgImage = _useState4[0], setLastBgImage = _useState4[1]; // eslint-disable-line react-hooks/rules-of-hooks var _useState5 = useState(isPro && isLicenseActive), _useState6 = _slicedToArray(_useState5, 2), isNotDisabled = _useState6[0], _setIsNotDisabled = _useState6[1]; // eslint-disable-line react-hooks/rules-of-hooks, no-unused-vars var _useState7 = useState(isPro), _useState8 = _slicedToArray(_useState7, 2), isProEnabled = _useState8[0], _setIsProEnabled = _useState8[1]; // eslint-disable-line react-hooks/rules-of-hooks, no-unused-vars var tabIndex = isNotDisabled ? 0 : -1; var cssClass = formSelectorCommon.getPanelClass(props) + (isNotDisabled ? '' : ' wpforms-gutenberg-panel-disabled'); useEffect(function () { // eslint-disable-line react-hooks/rules-of-hooks setShowBackgroundPreview(props.attributes.backgroundImage !== 'none' && props.attributes.backgroundUrl && props.attributes.backgroundUrl !== 'url()'); }, [backgroundSelected, props.attributes.backgroundImage, props.attributes.backgroundUrl]); // eslint-disable-line react-hooks/exhaustive-deps return /*#__PURE__*/React.createElement(PanelBody, { className: cssClass, title: strings.background_styles }, /*#__PURE__*/React.createElement("div", { // eslint-disable-line jsx-a11y/no-static-element-interactions className: "wpforms-gutenberg-form-selector-panel-body", onClick: function onClick(event) { if (isNotDisabled) { return; } event.stopPropagation(); if (!isProEnabled) { return formSelectorCommon.education.showProModal('background', strings.background_styles); } formSelectorCommon.education.showLicenseModal('background', strings.background_styles, 'background-styles'); }, onKeyDown: function onKeyDown(event) { if (isNotDisabled) { return; } event.stopPropagation(); if (!isProEnabled) { return formSelectorCommon.education.showProModal('background', strings.background_styles); } formSelectorCommon.education.showLicenseModal('background', strings.background_styles, 'background-styles'); } }, /*#__PURE__*/React.createElement(Flex, { gap: 4, align: "flex-start", className: 'wpforms-gutenberg-form-selector-flex', justify: "space-between" }, /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(SelectControl, { label: strings.image, tabIndex: tabIndex, value: props.attributes.backgroundImage, options: [{ label: strings.none, value: 'none' }, { label: strings.media_library, value: 'library' }, { label: strings.stock_photo, value: 'stock' }], onChange: function onChange(value) { return app.setContainerBackgroundImageWrapper(props, handlers, value, lastBgImage, setLastBgImage); } })), /*#__PURE__*/React.createElement(FlexBlock, null, (props.attributes.backgroundImage !== 'none' || !isNotDisabled) && /*#__PURE__*/React.createElement(SelectControl, { label: strings.position, value: props.attributes.backgroundPosition, tabIndex: tabIndex, options: [{ label: strings.top_left, value: 'top left' }, { label: strings.top_center, value: 'top center' }, { label: strings.top_right, value: 'top right' }, { label: strings.center_left, value: 'center left' }, { label: strings.center_center, value: 'center center' }, { label: strings.center_right, value: 'center right' }, { label: strings.bottom_left, value: 'bottom left' }, { label: strings.bottom_center, value: 'bottom center' }, { label: strings.bottom_right, value: 'bottom right' }], disabled: props.attributes.backgroundImage === 'none' && isNotDisabled, onChange: function onChange(value) { return handlers.styleAttrChange('backgroundPosition', value); } }))), (props.attributes.backgroundImage !== 'none' || !isNotDisabled) && /*#__PURE__*/React.createElement(Flex, { gap: 4, align: "flex-start", className: 'wpforms-gutenberg-form-selector-flex', justify: "space-between" }, /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(SelectControl, { label: strings.repeat, tabIndex: tabIndex, value: props.attributes.backgroundRepeat, options: [{ label: strings.no_repeat, value: 'no-repeat' }, { label: strings.tile, value: 'repeat' }, { label: strings.repeat_x, value: 'repeat-x' }, { label: strings.repeat_y, value: 'repeat-y' }], disabled: props.attributes.backgroundImage === 'none' && isNotDisabled, onChange: function onChange(value) { return handlers.styleAttrChange('backgroundRepeat', value); } })), /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(SelectControl, { label: strings.size, tabIndex: tabIndex, value: props.attributes.backgroundSizeMode, options: [{ label: strings.dimensions, value: 'dimensions' }, { label: strings.cover, value: 'cover' }], disabled: props.attributes.backgroundImage === 'none' && isNotDisabled, onChange: function onChange(value) { return app.handleSizeFromDimensions(props, handlers, value); } }))), (props.attributes.backgroundSizeMode === 'dimensions' && props.attributes.backgroundImage !== 'none' || !isNotDisabled) && /*#__PURE__*/React.createElement(Flex, { gap: 4, align: "flex-start", className: 'wpforms-gutenberg-form-selector-flex', justify: "space-between" }, /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(__experimentalUnitControl, { label: strings.width, tabIndex: tabIndex, value: props.attributes.backgroundWidth, isUnitSelectTabbable: isNotDisabled, onChange: function onChange(value) { return app.handleSizeFromWidth(props, handlers, value); } })), /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(__experimentalUnitControl, { label: strings.height, tabIndex: tabIndex, value: props.attributes.backgroundHeight, isUnitSelectTabbable: isNotDisabled, onChange: function onChange(value) { return app.handleSizeFromHeight(props, handlers, value); } }))), (!showBackgroundPreview || props.attributes.backgroundUrl === 'url()') && (props.attributes.backgroundImage === 'library' && /*#__PURE__*/React.createElement(Flex, { gap: 4, align: "flex-start", className: 'wpforms-gutenberg-form-selector-flex', justify: "space-between" }, /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(Button, { isSecondary: true, tabIndex: tabIndex, className: 'wpforms-gutenberg-form-selector-media-library-button', onClick: app.openMediaLibrary.bind(null, props, handlers, setShowBackgroundPreview) }, strings.choose_image))) || props.attributes.backgroundImage === 'stock' && /*#__PURE__*/React.createElement(Flex, { gap: 4, align: "flex-start", className: 'wpforms-gutenberg-form-selector-flex', justify: "space-between" }, /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(Button, { isSecondary: true, tabIndex: tabIndex, className: 'wpforms-gutenberg-form-selector-media-library-button', onClick: stockPhotos === null || stockPhotos === void 0 ? void 0 : stockPhotos.openModal.bind(null, props, handlers, 'bg-styles', setShowBackgroundPreview) }, strings.choose_image)))), (showBackgroundPreview && props.attributes.backgroundImage !== 'none' || props.attributes.backgroundUrl !== 'url()') && /*#__PURE__*/React.createElement(Flex, { gap: 4, align: "flex-start", className: 'wpforms-gutenberg-form-selector-flex', justify: "space-between" }, /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(_backgroundPreview.default, { attributes: props.attributes, onRemoveBackground: function onRemoveBackground() { app.onRemoveBackground(setShowBackgroundPreview, handlers, setLastBgImage); }, onPreviewClicked: function onPreviewClicked() { if (props.attributes.backgroundImage === 'library') { return app.openMediaLibrary(props, handlers, setShowBackgroundPreview); } return stockPhotos === null || stockPhotos === void 0 ? void 0 : stockPhotos.openModal(props, handlers, 'bg-styles', setShowBackgroundPreview); } })), /*#__PURE__*/React.createElement(TextControl, { label: strings.image_url, tabIndex: tabIndex, value: props.attributes.backgroundImage !== 'none' && props.attributes.backgroundUrl, className: 'wpforms-gutenberg-form-selector-image-url', onChange: function onChange(value) { return handlers.styleAttrChange('backgroundUrl', value); }, onLoad: function onLoad(value) { return props.attributes.backgroundImage !== 'none' && handlers.styleAttrChange('backgroundUrl', value); } }))), /*#__PURE__*/React.createElement(Flex, { gap: 4, align: "flex-start", className: 'wpforms-gutenberg-form-selector-flex', justify: "space-between" }, /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement("div", { className: "wpforms-gutenberg-form-selector-control-label" }, strings.colors), /*#__PURE__*/React.createElement(PanelColorSettings, { __experimentalIsRenderedInSidebar: true, enableAlpha: true, showTitle: false, tabIndex: tabIndex, className: "wpforms-gutenberg-form-selector-color-panel", colorSettings: [{ value: props.attributes.backgroundColor, onChange: function onChange(value) { if (!isNotDisabled) { return; } handlers.styleAttrChange('backgroundColor', value); }, label: strings.background }] }))))); }, /** * Open media library modal and handle image selection. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block handlers. * @param {Function} setShowBackgroundPreview Set show background preview. */ openMediaLibrary: function openMediaLibrary(props, handlers, setShowBackgroundPreview) { var frame = wp.media({ title: strings.select_background_image, multiple: false, library: { type: 'image' }, button: { text: strings.select_image } }); frame.on('select', function () { var attachment = frame.state().get('selection').first().toJSON(); var setAttr = {}; var attribute = 'backgroundUrl'; if (attachment.url) { var value = "url(".concat(attachment.url, ")"); setAttr[attribute] = value; props.setAttributes(setAttr); handlers.styleAttrChange('backgroundUrl', value); setShowBackgroundPreview(true); } }); frame.open(); }, /** * Set container background image. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setContainerBackgroundImage: function setContainerBackgroundImage(container, value) { if (value === 'none') { container.style.setProperty("--wpforms-background-url", 'url()'); } return true; }, /** * Set container background image. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block event handlers. * @param {string} value Value. * @param {string} lastBgImage Last background image. * @param {Function} setLastBgImage Set last background image. */ setContainerBackgroundImageWrapper: function setContainerBackgroundImageWrapper(props, handlers, value, lastBgImage, setLastBgImage) { if (value === 'none') { setLastBgImage(props.attributes.backgroundUrl); props.attributes.backgroundUrl = 'url()'; handlers.styleAttrChange('backgroundUrl', 'url()'); } else if (lastBgImage) { props.attributes.backgroundUrl = lastBgImage; handlers.styleAttrChange('backgroundUrl', lastBgImage); } handlers.styleAttrChange('backgroundImage', value); }, /** * Set container background position. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setContainerBackgroundPosition: function setContainerBackgroundPosition(container, value) { container.style.setProperty("--wpforms-background-position", value); return true; }, /** * Set container background repeat. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setContainerBackgroundRepeat: function setContainerBackgroundRepeat(container, value) { container.style.setProperty("--wpforms-background-repeat", value); return true; }, /** * Handle real size from dimensions. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block handlers. * @param {string} value Value. */ handleSizeFromDimensions: function handleSizeFromDimensions(props, handlers, value) { if (value === 'cover') { props.attributes.backgroundSize = 'cover'; handlers.styleAttrChange('backgroundWidth', props.attributes.backgroundWidth); handlers.styleAttrChange('backgroundHeight', props.attributes.backgroundHeight); handlers.styleAttrChange('backgroundSizeMode', 'cover'); handlers.styleAttrChange('backgroundSize', 'cover'); } else { props.attributes.backgroundSize = 'dimensions'; handlers.styleAttrChange('backgroundSizeMode', 'dimensions'); handlers.styleAttrChange('backgroundSize', props.attributes.backgroundWidth + ' ' + props.attributes.backgroundHeight); } }, /** * Handle real size from width. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block handlers. * @param {string} value Value. */ handleSizeFromWidth: function handleSizeFromWidth(props, handlers, value) { props.attributes.backgroundSize = value + ' ' + props.attributes.backgroundHeight; props.attributes.backgroundWidth = value; handlers.styleAttrChange('backgroundSize', value + ' ' + props.attributes.backgroundHeight); handlers.styleAttrChange('backgroundWidth', value); }, /** * Handle real size from height. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block handlers. * @param {string} value Value. */ handleSizeFromHeight: function handleSizeFromHeight(props, handlers, value) { props.attributes.backgroundSize = props.attributes.backgroundWidth + ' ' + value; props.attributes.backgroundHeight = value; handlers.styleAttrChange('backgroundSize', props.attributes.backgroundWidth + ' ' + value); handlers.styleAttrChange('backgroundHeight', value); }, /** * Set container background width. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setContainerBackgroundWidth: function setContainerBackgroundWidth(container, value) { container.style.setProperty("--wpforms-background-width", value); return true; }, /** * Set container background height. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setContainerBackgroundHeight: function setContainerBackgroundHeight(container, value) { container.style.setProperty("--wpforms-background-height", value); return true; }, /** * Set container background url. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setBackgroundUrl: function setBackgroundUrl(container, value) { container.style.setProperty("--wpforms-background-url", value); return true; }, /** * Set container background color. * * @since 1.8.8 * * @param {HTMLElement} container Container element. * @param {string} value Value. * * @return {boolean} True if the value was set, false otherwise. */ setBackgroundColor: function setBackgroundColor(container, value) { container.style.setProperty("--wpforms-background-color", value); return true; }, _showBackgroundPreview: function _showBackgroundPreview(props) { return props.attributes.backgroundImage !== 'none' && props.attributes.backgroundUrl && props.attributes.backgroundUrl !== 'url()'; }, /** * Remove background image. * * @since 1.8.8 * * @param {Function} setShowBackgroundPreview Set show background preview. * @param {Object} handlers Block handlers. * @param {Function} setLastBgImage Set last background image. */ onRemoveBackground: function onRemoveBackground(setShowBackgroundPreview, handlers, setLastBgImage) { setShowBackgroundPreview(false); handlers.styleAttrChange('backgroundUrl', 'url()'); setLastBgImage(''); }, /** * Handle theme change. * * @since 1.8.8 * * @param {Object} props Block properties. */ onSetTheme: function onSetTheme(props) { backgroundSelected = props.attributes.backgroundImage !== 'url()'; } }; return app; }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmFja2dyb3VuZFByZXZpZXciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiX3NsaWNlZFRvQXJyYXkiLCJhcnIiLCJpIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsIm8iLCJtaW5MZW4iLCJfYXJyYXlMaWtlVG9BcnJheSIsIm4iLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJsZW4iLCJsZW5ndGgiLCJhcnIyIiwiciIsImwiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJlIiwidSIsImEiLCJmIiwibmV4dCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJyZXR1cm4iLCJpc0FycmF5IiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiX3JlZiIsIndwIiwiYmxvY2tFZGl0b3IiLCJlZGl0b3IiLCJQYW5lbENvbG9yU2V0dGluZ3MiLCJfd3AkY29tcG9uZW50cyIsImNvbXBvbmVudHMiLCJTZWxlY3RDb250cm9sIiwiUGFuZWxCb2R5IiwiRmxleCIsIkZsZXhCbG9jayIsIl9fZXhwZXJpbWVudGFsVW5pdENvbnRyb2wiLCJUZXh0Q29udHJvbCIsIkJ1dHRvbiIsIl93cCRlbGVtZW50IiwiZWxlbWVudCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiX3dwZm9ybXNfZ3V0ZW5iZXJnX2ZvIiwid3Bmb3Jtc19ndXRlbmJlcmdfZm9ybV9zZWxlY3RvciIsInN0cmluZ3MiLCJkZWZhdWx0cyIsImlzUHJvIiwiaXNMaWNlbnNlQWN0aXZlIiwiYmFja2dyb3VuZFNlbGVjdGVkIiwiYXBwIiwiZ2V0QmxvY2tBdHRyaWJ1dGVzIiwiYmFja2dyb3VuZEltYWdlIiwidHlwZSIsImJhY2tncm91bmRQb3NpdGlvbiIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kU2l6ZU1vZGUiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRXaWR0aCIsImJhY2tncm91bmRIZWlnaHQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kVXJsIiwiZ2V0QmFja2dyb3VuZFN0eWxlcyIsInByb3BzIiwiaGFuZGxlcnMiLCJmb3JtU2VsZWN0b3JDb21tb24iLCJzdG9ja1Bob3RvcyIsIl91c2VTdGF0ZSIsIl9zaG93QmFja2dyb3VuZFByZXZpZXciLCJfdXNlU3RhdGUyIiwic2hvd0JhY2tncm91bmRQcmV2aWV3Iiwic2V0U2hvd0JhY2tncm91bmRQcmV2aWV3IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJsYXN0QmdJbWFnZSIsInNldExhc3RCZ0ltYWdlIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc05vdERpc2FibGVkIiwiX3NldElzTm90RGlzYWJsZWQiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImlzUHJvRW5hYmxlZCIsIl9zZXRJc1Byb0VuYWJsZWQiLCJ0YWJJbmRleCIsImNzc0NsYXNzIiwiZ2V0UGFuZWxDbGFzcyIsImF0dHJpYnV0ZXMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ0aXRsZSIsImJhY2tncm91bmRfc3R5bGVzIiwib25DbGljayIsImV2ZW50Iiwic3RvcFByb3BhZ2F0aW9uIiwiZWR1Y2F0aW9uIiwic2hvd1Byb01vZGFsIiwic2hvd0xpY2Vuc2VNb2RhbCIsIm9uS2V5RG93biIsImdhcCIsImFsaWduIiwianVzdGlmeSIsImxhYmVsIiwiaW1hZ2UiLCJvcHRpb25zIiwibm9uZSIsIm1lZGlhX2xpYnJhcnkiLCJzdG9ja19waG90byIsIm9uQ2hhbmdlIiwic2V0Q29udGFpbmVyQmFja2dyb3VuZEltYWdlV3JhcHBlciIsInBvc2l0aW9uIiwidG9wX2xlZnQiLCJ0b3BfY2VudGVyIiwidG9wX3JpZ2h0IiwiY2VudGVyX2xlZnQiLCJjZW50ZXJfY2VudGVyIiwiY2VudGVyX3JpZ2h0IiwiYm90dG9tX2xlZnQiLCJib3R0b21fY2VudGVyIiwiYm90dG9tX3JpZ2h0IiwiZGlzYWJsZWQiLCJzdHlsZUF0dHJDaGFuZ2UiLCJyZXBlYXQiLCJub19yZXBlYXQiLCJ0aWxlIiwicmVwZWF0X3giLCJyZXBlYXRfeSIsInNpemUiLCJkaW1lbnNpb25zIiwiY292ZXIiLCJoYW5kbGVTaXplRnJvbURpbWVuc2lvbnMiLCJ3aWR0aCIsImlzVW5pdFNlbGVjdFRhYmJhYmxlIiwiaGFuZGxlU2l6ZUZyb21XaWR0aCIsImhlaWdodCIsImhhbmRsZVNpemVGcm9tSGVpZ2h0IiwiaXNTZWNvbmRhcnkiLCJvcGVuTWVkaWFMaWJyYXJ5IiwiYmluZCIsImNob29zZV9pbWFnZSIsIm9wZW5Nb2RhbCIsIm9uUmVtb3ZlQmFja2dyb3VuZCIsIm9uUHJldmlld0NsaWNrZWQiLCJpbWFnZV91cmwiLCJvbkxvYWQiLCJjb2xvcnMiLCJfX2V4cGVyaW1lbnRhbElzUmVuZGVyZWRJblNpZGViYXIiLCJlbmFibGVBbHBoYSIsInNob3dUaXRsZSIsImNvbG9yU2V0dGluZ3MiLCJiYWNrZ3JvdW5kIiwiZnJhbWUiLCJtZWRpYSIsInNlbGVjdF9iYWNrZ3JvdW5kX2ltYWdlIiwibXVsdGlwbGUiLCJsaWJyYXJ5IiwiYnV0dG9uIiwidGV4dCIsInNlbGVjdF9pbWFnZSIsIm9uIiwiYXR0YWNobWVudCIsInN0YXRlIiwiZ2V0IiwiZmlyc3QiLCJ0b0pTT04iLCJzZXRBdHRyIiwiYXR0cmlidXRlIiwidXJsIiwiY29uY2F0Iiwic2V0QXR0cmlidXRlcyIsIm9wZW4iLCJzZXRDb250YWluZXJCYWNrZ3JvdW5kSW1hZ2UiLCJjb250YWluZXIiLCJzdHlsZSIsInNldFByb3BlcnR5Iiwic2V0Q29udGFpbmVyQmFja2dyb3VuZFBvc2l0aW9uIiwic2V0Q29udGFpbmVyQmFja2dyb3VuZFJlcGVhdCIsInNldENvbnRhaW5lckJhY2tncm91bmRXaWR0aCIsInNldENvbnRhaW5lckJhY2tncm91bmRIZWlnaHQiLCJzZXRCYWNrZ3JvdW5kVXJsIiwic2V0QmFja2dyb3VuZENvbG9yIiwib25TZXRUaGVtZSJdLCJzb3VyY2VzIjpbImJhY2tncm91bmQtc3R5bGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCB3cGZvcm1zX2d1dGVuYmVyZ19mb3JtX3NlbGVjdG9yICovXG4vKiBqc2hpbnQgZXMzOiBmYWxzZSwgZXN2ZXJzaW9uOiA2ICovXG5cbmltcG9ydCBCYWNrZ3JvdW5kUHJldmlldyBmcm9tICcuL2JhY2tncm91bmQtcHJldmlldy5qcyc7XG5cbi8qKlxuICogQHBhcmFtIHN0cmluZ3MuYmFja2dyb3VuZF9zdHlsZXNcbiAqIEBwYXJhbSBzdHJpbmdzLmJvdHRvbV9jZW50ZXJcbiAqIEBwYXJhbSBzdHJpbmdzLmJvdHRvbV9sZWZ0XG4gKiBAcGFyYW0gc3RyaW5ncy5ib3R0b21fcmlnaHRcbiAqIEBwYXJhbSBzdHJpbmdzLmNlbnRlcl9jZW50ZXJcbiAqIEBwYXJhbSBzdHJpbmdzLmNlbnRlcl9sZWZ0XG4gKiBAcGFyYW0gc3RyaW5ncy5jZW50ZXJfcmlnaHRcbiAqIEBwYXJhbSBzdHJpbmdzLmNob29zZV9pbWFnZVxuICogQHBhcmFtIHN0cmluZ3MuaW1hZ2VfdXJsXG4gKiBAcGFyYW0gc3RyaW5ncy5tZWRpYV9saWJyYXJ5XG4gKiBAcGFyYW0gc3RyaW5ncy5ub19yZXBlYXRcbiAqIEBwYXJhbSBzdHJpbmdzLnJlcGVhdF94XG4gKiBAcGFyYW0gc3RyaW5ncy5yZXBlYXRfeVxuICogQHBhcmFtIHN0cmluZ3Muc2VsZWN0X2JhY2tncm91bmRfaW1hZ2VcbiAqIEBwYXJhbSBzdHJpbmdzLnNlbGVjdF9pbWFnZVxuICogQHBhcmFtIHN0cmluZ3Muc3RvY2tfcGhvdG9cbiAqIEBwYXJhbSBzdHJpbmdzLnRpbGVcbiAqIEBwYXJhbSBzdHJpbmdzLnRvcF9jZW50ZXJcbiAqIEBwYXJhbSBzdHJpbmdzLnRvcF9sZWZ0XG4gKiBAcGFyYW0gc3RyaW5ncy50b3BfcmlnaHRcbiAqL1xuXG4vKipcbiAqIEd1dGVuYmVyZyBlZGl0b3IgYmxvY2suXG4gKlxuICogQmFja2dyb3VuZCBzdHlsZXMgcGFuZWwgbW9kdWxlLlxuICpcbiAqIEBzaW5jZSAxLjguOFxuICovXG5leHBvcnQgZGVmYXVsdCAoIGZ1bmN0aW9uKCkge1xuXHQvKipcblx0ICogV1AgY29yZSBjb21wb25lbnRzLlxuXHQgKlxuXHQgKiBAc2luY2UgMS44Ljhcblx0ICovXG5cdGNvbnN0IHsgUGFuZWxDb2xvclNldHRpbmdzIH0gPSB3cC5ibG9ja0VkaXRvciB8fCB3cC5lZGl0b3I7XG5cdGNvbnN0IHsgU2VsZWN0Q29udHJvbCwgUGFuZWxCb2R5LCBGbGV4LCBGbGV4QmxvY2ssIF9fZXhwZXJpbWVudGFsVW5pdENvbnRyb2wsIFRleHRDb250cm9sLCBCdXR0b24gfSA9IHdwLmNvbXBvbmVudHM7XG5cdGNvbnN0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9ID0gd3AuZWxlbWVudDtcblxuXHQvKipcblx0ICogTG9jYWxpemVkIGRhdGEgYWxpYXNlcy5cblx0ICpcblx0ICogQHNpbmNlIDEuOC44XG5cdCAqL1xuXHRjb25zdCB7IHN0cmluZ3MsIGRlZmF1bHRzLCBpc1BybywgaXNMaWNlbnNlQWN0aXZlIH0gPSB3cGZvcm1zX2d1dGVuYmVyZ19mb3JtX3NlbGVjdG9yO1xuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBiYWNrZ3JvdW5kIGlzIHNlbGVjdGVkLlxuXHQgKlxuXHQgKiBAc2luY2UgMS44Ljhcblx0ICpcblx0ICogQHR5cGUge2Jvb2xlYW59XG5cdCAqL1xuXHRsZXQgYmFja2dyb3VuZFNlbGVjdGVkID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFB1YmxpYyBmdW5jdGlvbnMgYW5kIHByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjguOFxuXHQgKlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKi9cblx0Y29uc3QgYXBwID0ge1xuXG5cdFx0LyoqXG5cdFx0ICogR2V0IGJsb2NrIGF0dHJpYnV0ZXMuXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44Ljhcblx0XHQgKlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gQmxvY2sgYXR0cmlidXRlcy5cblx0XHQgKi9cblx0XHRnZXRCbG9ja0F0dHJpYnV0ZXMoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRiYWNrZ3JvdW5kSW1hZ2U6IHtcblx0XHRcdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdFx0XHRkZWZhdWx0OiBkZWZhdWx0cy5iYWNrZ3JvdW5kSW1hZ2UsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJhY2tncm91bmRQb3NpdGlvbjoge1xuXHRcdFx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0XHRcdGRlZmF1bHQ6IGRlZmF1bHRzLmJhY2tncm91bmRQb3NpdGlvbixcblx0XHRcdFx0fSxcblx0XHRcdFx0YmFja2dyb3VuZFJlcGVhdDoge1xuXHRcdFx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0XHRcdGRlZmF1bHQ6IGRlZmF1bHRzLmJhY2tncm91bmRSZXBlYXQsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJhY2tncm91bmRTaXplTW9kZToge1xuXHRcdFx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0XHRcdGRlZmF1bHQ6IGRlZmF1bHRzLmJhY2tncm91bmRTaXplTW9kZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0YmFja2dyb3VuZFNpemU6IHtcblx0XHRcdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdFx0XHRkZWZhdWx0OiBkZWZhdWx0cy5iYWNrZ3JvdW5kU2l6ZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0YmFja2dyb3VuZFdpZHRoOiB7XG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdFx0ZGVmYXVsdDogZGVmYXVsdHMuYmFja2dyb3VuZFdpZHRoLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRiYWNrZ3JvdW5kSGVpZ2h0OiB7XG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdFx0ZGVmYXVsdDogZGVmYXVsdHMuYmFja2dyb3VuZEhlaWdodCxcblx0XHRcdFx0fSxcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiB7XG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdFx0ZGVmYXVsdDogZGVmYXVsdHMuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRiYWNrZ3JvdW5kVXJsOiB7XG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdFx0ZGVmYXVsdDogZGVmYXVsdHMuYmFja2dyb3VuZFVybCxcblx0XHRcdFx0fSxcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEdldCBCYWNrZ3JvdW5kIFN0eWxlcyBwYW5lbCBKU1ggY29kZS5cblx0XHQgKlxuXHRcdCAqIEBzaW5jZSAxLjguOFxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHByb3BzICAgICAgICAgICAgICBCbG9jayBwcm9wZXJ0aWVzLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBoYW5kbGVycyAgICAgICAgICAgQmxvY2sgaGFuZGxlcnMuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZvcm1TZWxlY3RvckNvbW1vbiBCbG9jayBwcm9wZXJ0aWVzLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzdG9ja1Bob3RvcyAgICAgICAgU3RvY2sgUGhvdG9zIG1vZHVsZS5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gRmllbGQgc3R5bGVzIEpTWCBjb2RlLlxuXHRcdCAqL1xuXHRcdGdldEJhY2tncm91bmRTdHlsZXMoIHByb3BzLCBoYW5kbGVycywgZm9ybVNlbGVjdG9yQ29tbW9uLCBzdG9ja1Bob3RvcyApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGluZXMtcGVyLWZ1bmN0aW9uLCBjb21wbGV4aXR5XG5cdFx0XHRjb25zdCBbIHNob3dCYWNrZ3JvdW5kUHJldmlldywgc2V0U2hvd0JhY2tncm91bmRQcmV2aWV3IF0gPSB1c2VTdGF0ZSggYXBwLl9zaG93QmFja2dyb3VuZFByZXZpZXcoIHByb3BzICkgKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuXHRcdFx0Y29uc3QgWyBsYXN0QmdJbWFnZSwgc2V0TGFzdEJnSW1hZ2UgXSA9IHVzZVN0YXRlKCAnJyApOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG5cdFx0XHRjb25zdCBbIGlzTm90RGlzYWJsZWQsIF9zZXRJc05vdERpc2FibGVkIF0gPSB1c2VTdGF0ZSggaXNQcm8gJiYgaXNMaWNlbnNlQWN0aXZlICk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MsIG5vLXVudXNlZC12YXJzXG5cdFx0XHRjb25zdCBbIGlzUHJvRW5hYmxlZCwgX3NldElzUHJvRW5hYmxlZCBdID0gdXNlU3RhdGUoIGlzUHJvICk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MsIG5vLXVudXNlZC12YXJzXG5cblx0XHRcdGNvbnN0IHRhYkluZGV4ID0gaXNOb3REaXNhYmxlZCA/IDAgOiAtMTtcblx0XHRcdGNvbnN0IGNzc0NsYXNzID0gZm9ybVNlbGVjdG9yQ29tbW9uLmdldFBhbmVsQ2xhc3MoIHByb3BzICkgKyAoIGlzTm90RGlzYWJsZWQgPyAnJyA6ICcgd3Bmb3Jtcy1ndXRlbmJlcmctcGFuZWwtZGlzYWJsZWQnICk7XG5cblx0XHRcdHVzZUVmZmVjdCggKCkgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG5cdFx0XHRcdHNldFNob3dCYWNrZ3JvdW5kUHJldmlldyhcblx0XHRcdFx0XHRwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRJbWFnZSAhPT0gJ25vbmUnICYmXG5cdFx0XHRcdFx0cHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kVXJsICYmXG5cdFx0XHRcdFx0cHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kVXJsICE9PSAndXJsKCknXG5cdFx0XHRcdCk7XG5cdFx0XHR9LCBbIGJhY2tncm91bmRTZWxlY3RlZCwgcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kSW1hZ2UsIHByb3BzLmF0dHJpYnV0ZXMuYmFja2dyb3VuZFVybCBdICk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxQYW5lbEJvZHkgY2xhc3NOYW1lPXsgY3NzQ2xhc3MgfSB0aXRsZT17IHN0cmluZ3MuYmFja2dyb3VuZF9zdHlsZXMgfT5cblx0XHRcdFx0XHQ8ZGl2IC8vIGVzbGludC1kaXNhYmxlLWxpbmUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3cGZvcm1zLWd1dGVuYmVyZy1mb3JtLXNlbGVjdG9yLXBhbmVsLWJvZHlcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17ICggZXZlbnQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNOb3REaXNhYmxlZCApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoICEgaXNQcm9FbmFibGVkICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmb3JtU2VsZWN0b3JDb21tb24uZWR1Y2F0aW9uLnNob3dQcm9Nb2RhbCggJ2JhY2tncm91bmQnLCBzdHJpbmdzLmJhY2tncm91bmRfc3R5bGVzICk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRmb3JtU2VsZWN0b3JDb21tb24uZWR1Y2F0aW9uLnNob3dMaWNlbnNlTW9kYWwoICdiYWNrZ3JvdW5kJywgc3RyaW5ncy5iYWNrZ3JvdW5kX3N0eWxlcywgJ2JhY2tncm91bmQtc3R5bGVzJyApO1xuXHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRvbktleURvd249eyAoIGV2ZW50ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGlzTm90RGlzYWJsZWQgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCAhIGlzUHJvRW5hYmxlZCApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZm9ybVNlbGVjdG9yQ29tbW9uLmVkdWNhdGlvbi5zaG93UHJvTW9kYWwoICdiYWNrZ3JvdW5kJywgc3RyaW5ncy5iYWNrZ3JvdW5kX3N0eWxlcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Zm9ybVNlbGVjdG9yQ29tbW9uLmVkdWNhdGlvbi5zaG93TGljZW5zZU1vZGFsKCAnYmFja2dyb3VuZCcsIHN0cmluZ3MuYmFja2dyb3VuZF9zdHlsZXMsICdiYWNrZ3JvdW5kLXN0eWxlcycgKTtcblx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxGbGV4IGdhcD17IDQgfSBhbGlnbj1cImZsZXgtc3RhcnRcIiBjbGFzc05hbWU9eyAnd3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1mbGV4JyB9IGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdDxGbGV4QmxvY2s+XG5cdFx0XHRcdFx0XHRcdFx0PFNlbGVjdENvbnRyb2xcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPXsgc3RyaW5ncy5pbWFnZSB9XG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17IHRhYkluZGV4IH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXsgcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kSW1hZ2UgfVxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucz17IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogc3RyaW5ncy5ub25lLCB2YWx1ZTogJ25vbmUnIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHN0cmluZ3MubWVkaWFfbGlicmFyeSwgdmFsdWU6ICdsaWJyYXJ5JyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBzdHJpbmdzLnN0b2NrX3Bob3RvLCB2YWx1ZTogJ3N0b2NrJyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XSB9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggdmFsdWUgKSA9PiBhcHAuc2V0Q29udGFpbmVyQmFja2dyb3VuZEltYWdlV3JhcHBlciggcHJvcHMsIGhhbmRsZXJzLCB2YWx1ZSwgbGFzdEJnSW1hZ2UsIHNldExhc3RCZ0ltYWdlICkgfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvRmxleEJsb2NrPlxuXHRcdFx0XHRcdFx0XHQ8RmxleEJsb2NrPlxuXHRcdFx0XHRcdFx0XHRcdHsgKCBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRJbWFnZSAhPT0gJ25vbmUnIHx8ICEgaXNOb3REaXNhYmxlZCApICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPXsgc3RyaW5ncy5wb3NpdGlvbiB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXsgcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kUG9zaXRpb24gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17IHRhYkluZGV4IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucz17IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBzdHJpbmdzLnRvcF9sZWZ0LCB2YWx1ZTogJ3RvcCBsZWZ0JyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHN0cmluZ3MudG9wX2NlbnRlciwgdmFsdWU6ICd0b3AgY2VudGVyJyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHN0cmluZ3MudG9wX3JpZ2h0LCB2YWx1ZTogJ3RvcCByaWdodCcgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBzdHJpbmdzLmNlbnRlcl9sZWZ0LCB2YWx1ZTogJ2NlbnRlciBsZWZ0JyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHN0cmluZ3MuY2VudGVyX2NlbnRlciwgdmFsdWU6ICdjZW50ZXIgY2VudGVyJyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHN0cmluZ3MuY2VudGVyX3JpZ2h0LCB2YWx1ZTogJ2NlbnRlciByaWdodCcgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBzdHJpbmdzLmJvdHRvbV9sZWZ0LCB2YWx1ZTogJ2JvdHRvbSBsZWZ0JyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHN0cmluZ3MuYm90dG9tX2NlbnRlciwgdmFsdWU6ICdib3R0b20gY2VudGVyJyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHN0cmluZ3MuYm90dG9tX3JpZ2h0LCB2YWx1ZTogJ2JvdHRvbSByaWdodCcgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XSB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXsgKCBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRJbWFnZSA9PT0gJ25vbmUnICYmIGlzTm90RGlzYWJsZWQgKSB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCB2YWx1ZSApID0+IGhhbmRsZXJzLnN0eWxlQXR0ckNoYW5nZSggJ2JhY2tncm91bmRQb3NpdGlvbicsIHZhbHVlICkgfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQpIH1cblx0XHRcdFx0XHRcdFx0PC9GbGV4QmxvY2s+XG5cdFx0XHRcdFx0XHQ8L0ZsZXg+XG5cdFx0XHRcdFx0XHR7ICggcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kSW1hZ2UgIT09ICdub25lJyB8fCAhIGlzTm90RGlzYWJsZWQgKSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxGbGV4IGdhcD17IDQgfSBhbGlnbj1cImZsZXgtc3RhcnRcIiBjbGFzc05hbWU9eyAnd3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1mbGV4JyB9IGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PEZsZXhCbG9jaz5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPXsgc3RyaW5ncy5yZXBlYXQgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17IHRhYkluZGV4IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9eyBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRSZXBlYXQgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zPXsgW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHN0cmluZ3Mubm9fcmVwZWF0LCB2YWx1ZTogJ25vLXJlcGVhdCcgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBzdHJpbmdzLnRpbGUsIHZhbHVlOiAncmVwZWF0JyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHN0cmluZ3MucmVwZWF0X3gsIHZhbHVlOiAncmVwZWF0LXgnIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogc3RyaW5ncy5yZXBlYXRfeSwgdmFsdWU6ICdyZXBlYXQteScgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XSB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXsgKCBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRJbWFnZSA9PT0gJ25vbmUnICYmIGlzTm90RGlzYWJsZWQgKSB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCB2YWx1ZSApID0+IGhhbmRsZXJzLnN0eWxlQXR0ckNoYW5nZSggJ2JhY2tncm91bmRSZXBlYXQnLCB2YWx1ZSApIH1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9GbGV4QmxvY2s+XG5cdFx0XHRcdFx0XHRcdFx0PEZsZXhCbG9jaz5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPXsgc3RyaW5ncy5zaXplIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9eyB0YWJJbmRleCB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXsgcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kU2l6ZU1vZGUgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zPXsgW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHN0cmluZ3MuZGltZW5zaW9ucywgdmFsdWU6ICdkaW1lbnNpb25zJyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHN0cmluZ3MuY292ZXIsIHZhbHVlOiAnY292ZXInIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF0gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17ICggcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kSW1hZ2UgPT09ICdub25lJyAmJiBpc05vdERpc2FibGVkICkgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggdmFsdWUgKSA9PiBhcHAuaGFuZGxlU2l6ZUZyb21EaW1lbnNpb25zKCBwcm9wcywgaGFuZGxlcnMsIHZhbHVlICkgfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L0ZsZXhCbG9jaz5cblx0XHRcdFx0XHRcdFx0PC9GbGV4PlxuXHRcdFx0XHRcdFx0KSB9XG5cdFx0XHRcdFx0XHR7ICggKCBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRTaXplTW9kZSA9PT0gJ2RpbWVuc2lvbnMnICYmIHByb3BzLmF0dHJpYnV0ZXMuYmFja2dyb3VuZEltYWdlICE9PSAnbm9uZScgKSB8fCAhIGlzTm90RGlzYWJsZWQgKSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxGbGV4IGdhcD17IDQgfSBhbGlnbj1cImZsZXgtc3RhcnRcIiBjbGFzc05hbWU9eyAnd3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1mbGV4JyB9IGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PEZsZXhCbG9jaz5cblx0XHRcdFx0XHRcdFx0XHRcdDxfX2V4cGVyaW1lbnRhbFVuaXRDb250cm9sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPXsgc3RyaW5ncy53aWR0aCB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRhYkluZGV4PXsgdGFiSW5kZXggfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17IHByb3BzLmF0dHJpYnV0ZXMuYmFja2dyb3VuZFdpZHRoIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNVbml0U2VsZWN0VGFiYmFibGU9eyBpc05vdERpc2FibGVkIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIHZhbHVlICkgPT4gYXBwLmhhbmRsZVNpemVGcm9tV2lkdGgoIHByb3BzLCBoYW5kbGVycywgdmFsdWUgKSB9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvRmxleEJsb2NrPlxuXHRcdFx0XHRcdFx0XHRcdDxGbGV4QmxvY2s+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8X19leHBlcmltZW50YWxVbml0Q29udHJvbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD17IHN0cmluZ3MuaGVpZ2h0IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9eyB0YWJJbmRleCB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXsgcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kSGVpZ2h0IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNVbml0U2VsZWN0VGFiYmFibGU9eyBpc05vdERpc2FibGVkIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIHZhbHVlICkgPT4gYXBwLmhhbmRsZVNpemVGcm9tSGVpZ2h0KCBwcm9wcywgaGFuZGxlcnMsIHZhbHVlICkgfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L0ZsZXhCbG9jaz5cblx0XHRcdFx0XHRcdFx0PC9GbGV4PlxuXHRcdFx0XHRcdFx0KSB9XG5cdFx0XHRcdFx0XHR7ICggISBzaG93QmFja2dyb3VuZFByZXZpZXcgfHwgcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kVXJsID09PSAndXJsKCknICkgJiYgKFxuXHRcdFx0XHRcdFx0XHQoIHByb3BzLmF0dHJpYnV0ZXMuYmFja2dyb3VuZEltYWdlID09PSAnbGlicmFyeScgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdDxGbGV4IGdhcD17IDQgfSBhbGlnbj1cImZsZXgtc3RhcnRcIiBjbGFzc05hbWU9eyAnd3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1mbGV4JyB9IGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJsb2NrPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNTZWNvbmRhcnlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17IHRhYkluZGV4IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9eyAnd3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1tZWRpYS1saWJyYXJ5LWJ1dHRvbicgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyBhcHAub3Blbk1lZGlhTGlicmFyeS5iaW5kKCBudWxsLCBwcm9wcywgaGFuZGxlcnMsIHNldFNob3dCYWNrZ3JvdW5kUHJldmlldyApIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgc3RyaW5ncy5jaG9vc2VfaW1hZ2UgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJsb2NrPlxuXHRcdFx0XHRcdFx0XHRcdDwvRmxleD5cblx0XHRcdFx0XHRcdFx0KSApIHx8ICggcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kSW1hZ2UgPT09ICdzdG9jaycgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdDxGbGV4IGdhcD17IDQgfSBhbGlnbj1cImZsZXgtc3RhcnRcIiBjbGFzc05hbWU9eyAnd3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1mbGV4JyB9IGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJsb2NrPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNTZWNvbmRhcnlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17IHRhYkluZGV4IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9eyAnd3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1tZWRpYS1saWJyYXJ5LWJ1dHRvbicgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyBzdG9ja1Bob3Rvcz8ub3Blbk1vZGFsLmJpbmQoIG51bGwsIHByb3BzLCBoYW5kbGVycywgJ2JnLXN0eWxlcycsIHNldFNob3dCYWNrZ3JvdW5kUHJldmlldyApIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgc3RyaW5ncy5jaG9vc2VfaW1hZ2UgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJsb2NrPlxuXHRcdFx0XHRcdFx0XHRcdDwvRmxleD5cblx0XHRcdFx0XHRcdFx0KSApXG5cdFx0XHRcdFx0XHQpIH1cblx0XHRcdFx0XHRcdHsgKCAoIHNob3dCYWNrZ3JvdW5kUHJldmlldyAmJiBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRJbWFnZSAhPT0gJ25vbmUnICkgfHwgcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kVXJsICE9PSAndXJsKCknICkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8RmxleCBnYXA9eyA0IH0gYWxpZ249XCJmbGV4LXN0YXJ0XCIgY2xhc3NOYW1lPXsgJ3dwZm9ybXMtZ3V0ZW5iZXJnLWZvcm0tc2VsZWN0b3ItZmxleCcgfSBqdXN0aWZ5PVwic3BhY2UtYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxGbGV4QmxvY2s+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8QmFja2dyb3VuZFByZXZpZXdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyaWJ1dGVzPXsgcHJvcHMuYXR0cmlidXRlcyB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25SZW1vdmVCYWNrZ3JvdW5kPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXBwLm9uUmVtb3ZlQmFja2dyb3VuZCggc2V0U2hvd0JhY2tncm91bmRQcmV2aWV3LCBoYW5kbGVycywgc2V0TGFzdEJnSW1hZ2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25QcmV2aWV3Q2xpY2tlZD17ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kSW1hZ2UgPT09ICdsaWJyYXJ5JyApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFwcC5vcGVuTWVkaWFMaWJyYXJ5KCBwcm9wcywgaGFuZGxlcnMsIHNldFNob3dCYWNrZ3JvdW5kUHJldmlldyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc3RvY2tQaG90b3M/Lm9wZW5Nb2RhbCggcHJvcHMsIGhhbmRsZXJzLCAnYmctc3R5bGVzJywgc2V0U2hvd0JhY2tncm91bmRQcmV2aWV3ICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxUZXh0Q29udHJvbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD17IHN0cmluZ3MuaW1hZ2VfdXJsIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9eyB0YWJJbmRleCB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXsgcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kSW1hZ2UgIT09ICdub25lJyAmJiBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRVcmwgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9eyAnd3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1pbWFnZS11cmwnIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIHZhbHVlICkgPT4gaGFuZGxlcnMuc3R5bGVBdHRyQ2hhbmdlKCAnYmFja2dyb3VuZFVybCcsIHZhbHVlICkgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkxvYWQ9eyAoIHZhbHVlICkgPT4gcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kSW1hZ2UgIT09ICdub25lJyAmJiBoYW5kbGVycy5zdHlsZUF0dHJDaGFuZ2UoICdiYWNrZ3JvdW5kVXJsJywgdmFsdWUgKSB9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvRmxleEJsb2NrPlxuXHRcdFx0XHRcdFx0XHQ8L0ZsZXg+XG5cdFx0XHRcdFx0XHQpIH1cblx0XHRcdFx0XHRcdDxGbGV4IGdhcD17IDQgfSBhbGlnbj1cImZsZXgtc3RhcnRcIiBjbGFzc05hbWU9eyAnd3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1mbGV4JyB9IGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdDxGbGV4QmxvY2s+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3cGZvcm1zLWd1dGVuYmVyZy1mb3JtLXNlbGVjdG9yLWNvbnRyb2wtbGFiZWxcIj57IHN0cmluZ3MuY29sb3JzIH08L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8UGFuZWxDb2xvclNldHRpbmdzXG5cdFx0XHRcdFx0XHRcdFx0XHRfX2V4cGVyaW1lbnRhbElzUmVuZGVyZWRJblNpZGViYXJcblx0XHRcdFx0XHRcdFx0XHRcdGVuYWJsZUFscGhhXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93VGl0bGU9eyBmYWxzZSB9XG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17IHRhYkluZGV4IH1cblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIndwZm9ybXMtZ3V0ZW5iZXJnLWZvcm0tc2VsZWN0b3ItY29sb3ItcGFuZWxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3JTZXR0aW5ncz17IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZTogKCB2YWx1ZSApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggISBpc05vdERpc2FibGVkICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhhbmRsZXJzLnN0eWxlQXR0ckNoYW5nZSggJ2JhY2tncm91bmRDb2xvcicsIHZhbHVlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogc3RyaW5ncy5iYWNrZ3JvdW5kLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XSB9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9GbGV4QmxvY2s+XG5cdFx0XHRcdFx0XHQ8L0ZsZXg+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogT3BlbiBtZWRpYSBsaWJyYXJ5IG1vZGFsIGFuZCBoYW5kbGUgaW1hZ2Ugc2VsZWN0aW9uLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gICBwcm9wcyAgICAgICAgICAgICAgICAgICAgQmxvY2sgcHJvcGVydGllcy5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gICBoYW5kbGVycyAgICAgICAgICAgICAgICAgQmxvY2sgaGFuZGxlcnMuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0U2hvd0JhY2tncm91bmRQcmV2aWV3IFNldCBzaG93IGJhY2tncm91bmQgcHJldmlldy5cblx0XHQgKi9cblx0XHRvcGVuTWVkaWFMaWJyYXJ5KCBwcm9wcywgaGFuZGxlcnMsIHNldFNob3dCYWNrZ3JvdW5kUHJldmlldyApIHtcblx0XHRcdGNvbnN0IGZyYW1lID0gd3AubWVkaWEoIHtcblx0XHRcdFx0dGl0bGU6IHN0cmluZ3Muc2VsZWN0X2JhY2tncm91bmRfaW1hZ2UsXG5cdFx0XHRcdG11bHRpcGxlOiBmYWxzZSxcblx0XHRcdFx0bGlicmFyeToge1xuXHRcdFx0XHRcdHR5cGU6ICdpbWFnZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJ1dHRvbjoge1xuXHRcdFx0XHRcdHRleHQ6IHN0cmluZ3Muc2VsZWN0X2ltYWdlLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSApO1xuXG5cdFx0XHRmcmFtZS5vbiggJ3NlbGVjdCcsICgpID0+IHtcblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IGZyYW1lLnN0YXRlKCkuZ2V0KCAnc2VsZWN0aW9uJyApLmZpcnN0KCkudG9KU09OKCk7XG5cdFx0XHRcdGNvbnN0IHNldEF0dHIgPSB7fTtcblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlID0gJ2JhY2tncm91bmRVcmwnO1xuXG5cdFx0XHRcdGlmICggYXR0YWNobWVudC51cmwgKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBgdXJsKCR7IGF0dGFjaG1lbnQudXJsIH0pYDtcblxuXHRcdFx0XHRcdHNldEF0dHJbIGF0dHJpYnV0ZSBdID0gdmFsdWU7XG5cblx0XHRcdFx0XHRwcm9wcy5zZXRBdHRyaWJ1dGVzKCBzZXRBdHRyICk7XG5cblx0XHRcdFx0XHRoYW5kbGVycy5zdHlsZUF0dHJDaGFuZ2UoICdiYWNrZ3JvdW5kVXJsJywgdmFsdWUgKTtcblxuXHRcdFx0XHRcdHNldFNob3dCYWNrZ3JvdW5kUHJldmlldyggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHRcdGZyYW1lLm9wZW4oKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0IGNvbnRhaW5lciBiYWNrZ3JvdW5kIGltYWdlLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgQ29udGFpbmVyIGVsZW1lbnQuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9ICAgICAgdmFsdWUgICAgIFZhbHVlLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgd2FzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHRcdCAqL1xuXHRcdHNldENvbnRhaW5lckJhY2tncm91bmRJbWFnZSggY29udGFpbmVyLCB2YWx1ZSApIHtcblx0XHRcdGlmICggdmFsdWUgPT09ICdub25lJyApIHtcblx0XHRcdFx0Y29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KCBgLS13cGZvcm1zLWJhY2tncm91bmQtdXJsYCwgJ3VybCgpJyApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0IGNvbnRhaW5lciBiYWNrZ3JvdW5kIGltYWdlLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gICBwcm9wcyAgICAgICAgICBCbG9jayBwcm9wZXJ0aWVzLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSAgIGhhbmRsZXJzICAgICAgIEJsb2NrIGV2ZW50IGhhbmRsZXJzLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSAgIHZhbHVlICAgICAgICAgIFZhbHVlLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSAgIGxhc3RCZ0ltYWdlICAgIExhc3QgYmFja2dyb3VuZCBpbWFnZS5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXRMYXN0QmdJbWFnZSBTZXQgbGFzdCBiYWNrZ3JvdW5kIGltYWdlLlxuXHRcdCAqL1xuXHRcdHNldENvbnRhaW5lckJhY2tncm91bmRJbWFnZVdyYXBwZXIoIHByb3BzLCBoYW5kbGVycywgdmFsdWUsIGxhc3RCZ0ltYWdlLCBzZXRMYXN0QmdJbWFnZSApIHtcblx0XHRcdGlmICggdmFsdWUgPT09ICdub25lJyApIHtcblx0XHRcdFx0c2V0TGFzdEJnSW1hZ2UoIHByb3BzLmF0dHJpYnV0ZXMuYmFja2dyb3VuZFVybCApO1xuXHRcdFx0XHRwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRVcmwgPSAndXJsKCknO1xuXG5cdFx0XHRcdGhhbmRsZXJzLnN0eWxlQXR0ckNoYW5nZSggJ2JhY2tncm91bmRVcmwnLCAndXJsKCknICk7XG5cdFx0XHR9IGVsc2UgaWYgKCBsYXN0QmdJbWFnZSApIHtcblx0XHRcdFx0cHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kVXJsID0gbGFzdEJnSW1hZ2U7XG5cdFx0XHRcdGhhbmRsZXJzLnN0eWxlQXR0ckNoYW5nZSggJ2JhY2tncm91bmRVcmwnLCBsYXN0QmdJbWFnZSApO1xuXHRcdFx0fVxuXG5cdFx0XHRoYW5kbGVycy5zdHlsZUF0dHJDaGFuZ2UoICdiYWNrZ3JvdW5kSW1hZ2UnLCB2YWx1ZSApO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXQgY29udGFpbmVyIGJhY2tncm91bmQgcG9zaXRpb24uXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44Ljhcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciBDb250YWluZXIgZWxlbWVudC5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gICAgICB2YWx1ZSAgICAgVmFsdWUuXG5cdFx0ICpcblx0XHQgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSB3YXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuXG5cdFx0ICovXG5cdFx0c2V0Q29udGFpbmVyQmFja2dyb3VuZFBvc2l0aW9uKCBjb250YWluZXIsIHZhbHVlICkge1xuXHRcdFx0Y29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KCBgLS13cGZvcm1zLWJhY2tncm91bmQtcG9zaXRpb25gLCB2YWx1ZSApO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0IGNvbnRhaW5lciBiYWNrZ3JvdW5kIHJlcGVhdC5cblx0XHQgKlxuXHRcdCAqIEBzaW5jZSAxLjguOFxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyIENvbnRhaW5lciBlbGVtZW50LlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSAgICAgIHZhbHVlICAgICBWYWx1ZS5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIHdhcyBzZXQsIGZhbHNlIG90aGVyd2lzZS5cblx0XHQgKi9cblx0XHRzZXRDb250YWluZXJCYWNrZ3JvdW5kUmVwZWF0KCBjb250YWluZXIsIHZhbHVlICkge1xuXHRcdFx0Y29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KCBgLS13cGZvcm1zLWJhY2tncm91bmQtcmVwZWF0YCwgdmFsdWUgKTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEhhbmRsZSByZWFsIHNpemUgZnJvbSBkaW1lbnNpb25zLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgICAgQmxvY2sgcHJvcGVydGllcy5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gaGFuZGxlcnMgQmxvY2sgaGFuZGxlcnMuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlICAgIFZhbHVlLlxuXHRcdCAqL1xuXHRcdGhhbmRsZVNpemVGcm9tRGltZW5zaW9ucyggcHJvcHMsIGhhbmRsZXJzLCB2YWx1ZSApIHtcblx0XHRcdGlmICggdmFsdWUgPT09ICdjb3ZlcicgKSB7XG5cdFx0XHRcdHByb3BzLmF0dHJpYnV0ZXMuYmFja2dyb3VuZFNpemUgPSAnY292ZXInO1xuXG5cdFx0XHRcdGhhbmRsZXJzLnN0eWxlQXR0ckNoYW5nZSggJ2JhY2tncm91bmRXaWR0aCcsIHByb3BzLmF0dHJpYnV0ZXMuYmFja2dyb3VuZFdpZHRoICk7XG5cdFx0XHRcdGhhbmRsZXJzLnN0eWxlQXR0ckNoYW5nZSggJ2JhY2tncm91bmRIZWlnaHQnLCBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRIZWlnaHQgKTtcblx0XHRcdFx0aGFuZGxlcnMuc3R5bGVBdHRyQ2hhbmdlKCAnYmFja2dyb3VuZFNpemVNb2RlJywgJ2NvdmVyJyApO1xuXHRcdFx0XHRoYW5kbGVycy5zdHlsZUF0dHJDaGFuZ2UoICdiYWNrZ3JvdW5kU2l6ZScsICdjb3ZlcicgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHByb3BzLmF0dHJpYnV0ZXMuYmFja2dyb3VuZFNpemUgPSAnZGltZW5zaW9ucyc7XG5cblx0XHRcdFx0aGFuZGxlcnMuc3R5bGVBdHRyQ2hhbmdlKCAnYmFja2dyb3VuZFNpemVNb2RlJywgJ2RpbWVuc2lvbnMnICk7XG5cdFx0XHRcdGhhbmRsZXJzLnN0eWxlQXR0ckNoYW5nZSggJ2JhY2tncm91bmRTaXplJywgcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kV2lkdGggKyAnICcgKyBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRIZWlnaHQgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSGFuZGxlIHJlYWwgc2l6ZSBmcm9tIHdpZHRoLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgICAgQmxvY2sgcHJvcGVydGllcy5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gaGFuZGxlcnMgQmxvY2sgaGFuZGxlcnMuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlICAgIFZhbHVlLlxuXHRcdCAqL1xuXHRcdGhhbmRsZVNpemVGcm9tV2lkdGgoIHByb3BzLCBoYW5kbGVycywgdmFsdWUgKSB7XG5cdFx0XHRwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRTaXplID0gdmFsdWUgKyAnICcgKyBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRIZWlnaHQ7XG5cdFx0XHRwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRXaWR0aCA9IHZhbHVlO1xuXG5cdFx0XHRoYW5kbGVycy5zdHlsZUF0dHJDaGFuZ2UoICdiYWNrZ3JvdW5kU2l6ZScsIHZhbHVlICsgJyAnICsgcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kSGVpZ2h0ICk7XG5cdFx0XHRoYW5kbGVycy5zdHlsZUF0dHJDaGFuZ2UoICdiYWNrZ3JvdW5kV2lkdGgnLCB2YWx1ZSApO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBIYW5kbGUgcmVhbCBzaXplIGZyb20gaGVpZ2h0LlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgICAgQmxvY2sgcHJvcGVydGllcy5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gaGFuZGxlcnMgQmxvY2sgaGFuZGxlcnMuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlICAgIFZhbHVlLlxuXHRcdCAqL1xuXHRcdGhhbmRsZVNpemVGcm9tSGVpZ2h0KCBwcm9wcywgaGFuZGxlcnMsIHZhbHVlICkge1xuXHRcdFx0cHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kU2l6ZSA9IHByb3BzLmF0dHJpYnV0ZXMuYmFja2dyb3VuZFdpZHRoICsgJyAnICsgdmFsdWU7XG5cdFx0XHRwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRIZWlnaHQgPSB2YWx1ZTtcblxuXHRcdFx0aGFuZGxlcnMuc3R5bGVBdHRyQ2hhbmdlKCAnYmFja2dyb3VuZFNpemUnLCBwcm9wcy5hdHRyaWJ1dGVzLmJhY2tncm91bmRXaWR0aCArICcgJyArIHZhbHVlICk7XG5cdFx0XHRoYW5kbGVycy5zdHlsZUF0dHJDaGFuZ2UoICdiYWNrZ3JvdW5kSGVpZ2h0JywgdmFsdWUgKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0IGNvbnRhaW5lciBiYWNrZ3JvdW5kIHdpZHRoLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgQ29udGFpbmVyIGVsZW1lbnQuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9ICAgICAgdmFsdWUgICAgIFZhbHVlLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgd2FzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHRcdCAqL1xuXHRcdHNldENvbnRhaW5lckJhY2tncm91bmRXaWR0aCggY29udGFpbmVyLCB2YWx1ZSApIHtcblx0XHRcdGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eSggYC0td3Bmb3Jtcy1iYWNrZ3JvdW5kLXdpZHRoYCwgdmFsdWUgKTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNldCBjb250YWluZXIgYmFja2dyb3VuZCBoZWlnaHQuXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44Ljhcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciBDb250YWluZXIgZWxlbWVudC5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gICAgICB2YWx1ZSAgICAgVmFsdWUuXG5cdFx0ICpcblx0XHQgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSB3YXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuXG5cdFx0ICovXG5cdFx0c2V0Q29udGFpbmVyQmFja2dyb3VuZEhlaWdodCggY29udGFpbmVyLCB2YWx1ZSApIHtcblx0XHRcdGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eSggYC0td3Bmb3Jtcy1iYWNrZ3JvdW5kLWhlaWdodGAsIHZhbHVlICk7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXQgY29udGFpbmVyIGJhY2tncm91bmQgdXJsLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgQ29udGFpbmVyIGVsZW1lbnQuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9ICAgICAgdmFsdWUgICAgIFZhbHVlLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgd2FzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHRcdCAqL1xuXHRcdHNldEJhY2tncm91bmRVcmwoIGNvbnRhaW5lciwgdmFsdWUgKSB7XG5cdFx0XHRjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoIGAtLXdwZm9ybXMtYmFja2dyb3VuZC11cmxgLCB2YWx1ZSApO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0IGNvbnRhaW5lciBiYWNrZ3JvdW5kIGNvbG9yLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgQ29udGFpbmVyIGVsZW1lbnQuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9ICAgICAgdmFsdWUgICAgIFZhbHVlLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgd2FzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHRcdCAqL1xuXHRcdHNldEJhY2tncm91bmRDb2xvciggY29udGFpbmVyLCB2YWx1ZSApIHtcblx0XHRcdGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eSggYC0td3Bmb3Jtcy1iYWNrZ3JvdW5kLWNvbG9yYCwgdmFsdWUgKTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdF9zaG93QmFja2dyb3VuZFByZXZpZXcoIHByb3BzICkge1xuXHRcdFx0cmV0dXJuIHByb3BzLmF0dHJpYnV0ZXMuYmFja2dyb3VuZEltYWdlICE9PSAnbm9uZScgJiZcblx0XHRcdFx0cHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kVXJsICYmXG5cdFx0XHRcdHByb3BzLmF0dHJpYnV0ZXMuYmFja2dyb3VuZFVybCAhPT0gJ3VybCgpJztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlIGJhY2tncm91bmQgaW1hZ2UuXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44Ljhcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldFNob3dCYWNrZ3JvdW5kUHJldmlldyBTZXQgc2hvdyBiYWNrZ3JvdW5kIHByZXZpZXcuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9ICAgaGFuZGxlcnMgICAgICAgICAgICAgICAgIEJsb2NrIGhhbmRsZXJzLlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IHNldExhc3RCZ0ltYWdlICAgICAgICAgICBTZXQgbGFzdCBiYWNrZ3JvdW5kIGltYWdlLlxuXHRcdCAqL1xuXHRcdG9uUmVtb3ZlQmFja2dyb3VuZCggc2V0U2hvd0JhY2tncm91bmRQcmV2aWV3LCBoYW5kbGVycywgc2V0TGFzdEJnSW1hZ2UgKSB7XG5cdFx0XHRzZXRTaG93QmFja2dyb3VuZFByZXZpZXcoIGZhbHNlICk7XG5cdFx0XHRoYW5kbGVycy5zdHlsZUF0dHJDaGFuZ2UoICdiYWNrZ3JvdW5kVXJsJywgJ3VybCgpJyApO1xuXHRcdFx0c2V0TGFzdEJnSW1hZ2UoICcnICk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEhhbmRsZSB0aGVtZSBjaGFuZ2UuXG5cdFx0ICpcblx0XHQgKiBAc2luY2UgMS44Ljhcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCbG9jayBwcm9wZXJ0aWVzLlxuXHRcdCAqL1xuXHRcdG9uU2V0VGhlbWUoIHByb3BzICkge1xuXHRcdFx0YmFja2dyb3VuZFNlbGVjdGVkID0gcHJvcHMuYXR0cmlidXRlcy5iYWNrZ3JvdW5kSW1hZ2UgIT09ICd1cmwoKSc7XG5cdFx0fSxcblx0fTtcblxuXHRyZXR1cm4gYXBwO1xufSgpICk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLElBQUFBLGtCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBd0QsU0FBQUQsdUJBQUFFLEdBQUEsV0FBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUE7QUFBQSxTQUFBRyxlQUFBQyxHQUFBLEVBQUFDLENBQUEsV0FBQUMsZUFBQSxDQUFBRixHQUFBLEtBQUFHLHFCQUFBLENBQUFILEdBQUEsRUFBQUMsQ0FBQSxLQUFBRywyQkFBQSxDQUFBSixHQUFBLEVBQUFDLENBQUEsS0FBQUksZ0JBQUE7QUFBQSxTQUFBQSxpQkFBQSxjQUFBQyxTQUFBO0FBQUEsU0FBQUYsNEJBQUFHLENBQUEsRUFBQUMsTUFBQSxTQUFBRCxDQUFBLHFCQUFBQSxDQUFBLHNCQUFBRSxpQkFBQSxDQUFBRixDQUFBLEVBQUFDLE1BQUEsT0FBQUUsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsQ0FBQUMsUUFBQSxDQUFBQyxJQUFBLENBQUFQLENBQUEsRUFBQVEsS0FBQSxhQUFBTCxDQUFBLGlCQUFBSCxDQUFBLENBQUFTLFdBQUEsRUFBQU4sQ0FBQSxHQUFBSCxDQUFBLENBQUFTLFdBQUEsQ0FBQUMsSUFBQSxNQUFBUCxDQUFBLGNBQUFBLENBQUEsbUJBQUFRLEtBQUEsQ0FBQUMsSUFBQSxDQUFBWixDQUFBLE9BQUFHLENBQUEsK0RBQUFVLElBQUEsQ0FBQVYsQ0FBQSxVQUFBRCxpQkFBQSxDQUFBRixDQUFBLEVBQUFDLE1BQUE7QUFBQSxTQUFBQyxrQkFBQVQsR0FBQSxFQUFBcUIsR0FBQSxRQUFBQSxHQUFBLFlBQUFBLEdBQUEsR0FBQXJCLEdBQUEsQ0FBQXNCLE1BQUEsRUFBQUQsR0FBQSxHQUFBckIsR0FBQSxDQUFBc0IsTUFBQSxXQUFBckIsQ0FBQSxNQUFBc0IsSUFBQSxPQUFBTCxLQUFBLENBQUFHLEdBQUEsR0FBQXBCLENBQUEsR0FBQW9CLEdBQUEsRUFBQXBCLENBQUEsSUFBQXNCLElBQUEsQ0FBQXRCLENBQUEsSUFBQUQsR0FBQSxDQUFBQyxDQUFBLFVBQUFzQixJQUFBO0FBQUEsU0FBQXBCLHNCQUFBcUIsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsV0FBQUYsQ0FBQSxnQ0FBQUcsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLDRCQUFBRSxDQUFBLFFBQUFHLENBQUEsRUFBQW5CLENBQUEsRUFBQVQsQ0FBQSxFQUFBNkIsQ0FBQSxFQUFBQyxDQUFBLE9BQUFDLENBQUEsT0FBQXpCLENBQUEsaUJBQUFOLENBQUEsSUFBQXlCLENBQUEsR0FBQUEsQ0FBQSxDQUFBWixJQUFBLENBQUFVLENBQUEsR0FBQVMsSUFBQSxRQUFBUixDQUFBLFFBQUFkLE1BQUEsQ0FBQWUsQ0FBQSxNQUFBQSxDQUFBLFVBQUFNLENBQUEsdUJBQUFBLENBQUEsSUFBQUgsQ0FBQSxHQUFBNUIsQ0FBQSxDQUFBYSxJQUFBLENBQUFZLENBQUEsR0FBQVEsSUFBQSxNQUFBSCxDQUFBLENBQUFJLElBQUEsQ0FBQU4sQ0FBQSxDQUFBTyxLQUFBLEdBQUFMLENBQUEsQ0FBQVQsTUFBQSxLQUFBRyxDQUFBLEdBQUFPLENBQUEsaUJBQUFSLENBQUEsSUFBQWpCLENBQUEsT0FBQUcsQ0FBQSxHQUFBYyxDQUFBLHlCQUFBUSxDQUFBLFlBQUFOLENBQUEsQ0FBQVcsTUFBQSxLQUFBUCxDQUFBLEdBQUFKLENBQUEsQ0FBQVcsTUFBQSxJQUFBMUIsTUFBQSxDQUFBbUIsQ0FBQSxNQUFBQSxDQUFBLDJCQUFBdkIsQ0FBQSxRQUFBRyxDQUFBLGFBQUFxQixDQUFBO0FBQUEsU0FBQTdCLGdCQUFBRixHQUFBLFFBQUFrQixLQUFBLENBQUFvQixPQUFBLENBQUF0QyxHQUFBLFVBQUFBLEdBQUEsSUFIeEQsNkNBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEsSUFBQXVDLFFBQUEsR0FBQUMsT0FBQSxDQUFBMUMsT0FBQSxHQU9pQixZQUFXO0VBQzNCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7RUFDQyxJQUFBMkMsSUFBQSxHQUErQkMsRUFBRSxDQUFDQyxXQUFXLElBQUlELEVBQUUsQ0FBQ0UsTUFBTTtJQUFsREMsa0JBQWtCLEdBQUFKLElBQUEsQ0FBbEJJLGtCQUFrQjtFQUMxQixJQUFBQyxjQUFBLEdBQXNHSixFQUFFLENBQUNLLFVBQVU7SUFBM0dDLGFBQWEsR0FBQUYsY0FBQSxDQUFiRSxhQUFhO0lBQUVDLFNBQVMsR0FBQUgsY0FBQSxDQUFURyxTQUFTO0lBQUVDLElBQUksR0FBQUosY0FBQSxDQUFKSSxJQUFJO0lBQUVDLFNBQVMsR0FBQUwsY0FBQSxDQUFUSyxTQUFTO0lBQUVDLHlCQUF5QixHQUFBTixjQUFBLENBQXpCTSx5QkFBeUI7SUFBRUMsV0FBVyxHQUFBUCxjQUFBLENBQVhPLFdBQVc7SUFBRUMsTUFBTSxHQUFBUixjQUFBLENBQU5RLE1BQU07RUFDakcsSUFBQUMsV0FBQSxHQUFnQ2IsRUFBRSxDQUFDYyxPQUFPO0lBQWxDQyxRQUFRLEdBQUFGLFdBQUEsQ0FBUkUsUUFBUTtJQUFFQyxTQUFTLEdBQUFILFdBQUEsQ0FBVEcsU0FBUzs7RUFFM0I7QUFDRDtBQUNBO0FBQ0E7QUFDQTtFQUNDLElBQUFDLHFCQUFBLEdBQXNEQywrQkFBK0I7SUFBN0VDLE9BQU8sR0FBQUYscUJBQUEsQ0FBUEUsT0FBTztJQUFFQyxRQUFRLEdBQUFILHFCQUFBLENBQVJHLFFBQVE7SUFBRUMsS0FBSyxHQUFBSixxQkFBQSxDQUFMSSxLQUFLO0lBQUVDLGVBQWUsR0FBQUwscUJBQUEsQ0FBZkssZUFBZTs7RUFFakQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQyxJQUFJQyxrQkFBa0IsR0FBRyxLQUFLOztFQUU5QjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNDLElBQU1DLEdBQUcsR0FBRztJQUVYO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0VDLGtCQUFrQixXQUFBQSxtQkFBQSxFQUFHO01BQ3BCLE9BQU87UUFDTkMsZUFBZSxFQUFFO1VBQ2hCQyxJQUFJLEVBQUUsUUFBUTtVQUNkdkUsT0FBTyxFQUFFZ0UsUUFBUSxDQUFDTTtRQUNuQixDQUFDO1FBQ0RFLGtCQUFrQixFQUFFO1VBQ25CRCxJQUFJLEVBQUUsUUFBUTtVQUNkdkUsT0FBTyxFQUFFZ0UsUUFBUSxDQUFDUTtRQUNuQixDQUFDO1FBQ0RDLGdCQUFnQixFQUFFO1VBQ2pCRixJQUFJLEVBQUUsUUFBUTtVQUNkdkUsT0FBTyxFQUFFZ0UsUUFBUSxDQUFDUztRQUNuQixDQUFDO1FBQ0RDLGtCQUFrQixFQUFFO1VBQ25CSCxJQUFJLEVBQUUsUUFBUTtVQUNkdkUsT0FBTyxFQUFFZ0UsUUFBUSxDQUFDVTtRQUNuQixDQUFDO1FBQ0RDLGNBQWMsRUFBRTtVQUNmSixJQUFJLEVBQUUsUUFBUTtVQUNkdkUsT0FBTyxFQUFFZ0UsUUFBUSxDQUFDVztRQUNuQixDQUFDO1FBQ0RDLGVBQWUsRUFBRTtVQUNoQkwsSUFBSSxFQUFFLFFBQVE7VUFDZHZFLE9BQU8sRUFBRWdFLFFBQVEsQ0FBQ1k7UUFDbkIsQ0FBQztRQUNEQyxnQkFBZ0IsRUFBRTtVQUNqQk4sSUFBSSxFQUFFLFFBQVE7VUFDZHZFLE9BQU8sRUFBRWdFLFFBQVEsQ0FBQ2E7UUFDbkIsQ0FBQztRQUNEQyxlQUFlLEVBQUU7VUFDaEJQLElBQUksRUFBRSxRQUFRO1VBQ2R2RSxPQUFPLEVBQUVnRSxRQUFRLENBQUNjO1FBQ25CLENBQUM7UUFDREMsYUFBYSxFQUFFO1VBQ2RSLElBQUksRUFBRSxRQUFRO1VBQ2R2RSxPQUFPLEVBQUVnRSxRQUFRLENBQUNlO1FBQ25CO01BQ0QsQ0FBQztJQUNGLENBQUM7SUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDRUMsbUJBQW1CLFdBQUFBLG9CQUFFQyxLQUFLLEVBQUVDLFFBQVEsRUFBRUMsa0JBQWtCLEVBQUVDLFdBQVcsRUFBRztNQUFFO01BQ3pFLElBQUFDLFNBQUEsR0FBNEQxQixRQUFRLENBQUVTLEdBQUcsQ0FBQ2tCLHNCQUFzQixDQUFFTCxLQUFNLENBQUUsQ0FBQztRQUFBTSxVQUFBLEdBQUF0RixjQUFBLENBQUFvRixTQUFBO1FBQW5HRyxxQkFBcUIsR0FBQUQsVUFBQTtRQUFFRSx3QkFBd0IsR0FBQUYsVUFBQSxJQUFxRCxDQUFDO01BQzdHLElBQUFHLFVBQUEsR0FBd0MvQixRQUFRLENBQUUsRUFBRyxDQUFDO1FBQUFnQyxVQUFBLEdBQUExRixjQUFBLENBQUF5RixVQUFBO1FBQTlDRSxXQUFXLEdBQUFELFVBQUE7UUFBRUUsY0FBYyxHQUFBRixVQUFBLElBQW9CLENBQUM7TUFDeEQsSUFBQUcsVUFBQSxHQUE2Q25DLFFBQVEsQ0FBRU0sS0FBSyxJQUFJQyxlQUFnQixDQUFDO1FBQUE2QixVQUFBLEdBQUE5RixjQUFBLENBQUE2RixVQUFBO1FBQXpFRSxhQUFhLEdBQUFELFVBQUE7UUFBRUUsaUJBQWlCLEdBQUFGLFVBQUEsSUFBMEMsQ0FBQztNQUNuRixJQUFBRyxVQUFBLEdBQTJDdkMsUUFBUSxDQUFFTSxLQUFNLENBQUM7UUFBQWtDLFVBQUEsR0FBQWxHLGNBQUEsQ0FBQWlHLFVBQUE7UUFBcERFLFlBQVksR0FBQUQsVUFBQTtRQUFFRSxnQkFBZ0IsR0FBQUYsVUFBQSxJQUF1QixDQUFDOztNQUU5RCxJQUFNRyxRQUFRLEdBQUdOLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3ZDLElBQU1PLFFBQVEsR0FBR3BCLGtCQUFrQixDQUFDcUIsYUFBYSxDQUFFdkIsS0FBTSxDQUFDLElBQUtlLGFBQWEsR0FBRyxFQUFFLEdBQUcsbUNBQW1DLENBQUU7TUFFekhwQyxTQUFTLENBQUUsWUFBTTtRQUFFO1FBQ2xCNkIsd0JBQXdCLENBQ3ZCUixLQUFLLENBQUN3QixVQUFVLENBQUNuQyxlQUFlLEtBQUssTUFBTSxJQUMzQ1csS0FBSyxDQUFDd0IsVUFBVSxDQUFDMUIsYUFBYSxJQUM5QkUsS0FBSyxDQUFDd0IsVUFBVSxDQUFDMUIsYUFBYSxLQUFLLE9BQ3BDLENBQUM7TUFDRixDQUFDLEVBQUUsQ0FBRVosa0JBQWtCLEVBQUVjLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ25DLGVBQWUsRUFBRVcsS0FBSyxDQUFDd0IsVUFBVSxDQUFDMUIsYUFBYSxDQUFHLENBQUMsQ0FBQyxDQUFDOztNQUUvRixvQkFDQzJCLEtBQUEsQ0FBQUMsYUFBQSxDQUFDeEQsU0FBUztRQUFDeUQsU0FBUyxFQUFHTCxRQUFVO1FBQUNNLEtBQUssRUFBRzlDLE9BQU8sQ0FBQytDO01BQW1CLGdCQUNwRUosS0FBQSxDQUFBQyxhQUFBO1FBQUs7UUFDSkMsU0FBUyxFQUFDLDRDQUE0QztRQUN0REcsT0FBTyxFQUFHLFNBQUFBLFFBQUVDLEtBQUssRUFBTTtVQUN0QixJQUFLaEIsYUFBYSxFQUFHO1lBQ3BCO1VBQ0Q7VUFFQWdCLEtBQUssQ0FBQ0MsZUFBZSxDQUFDLENBQUM7VUFFdkIsSUFBSyxDQUFFYixZQUFZLEVBQUc7WUFDckIsT0FBT2pCLGtCQUFrQixDQUFDK0IsU0FBUyxDQUFDQyxZQUFZLENBQUUsWUFBWSxFQUFFcEQsT0FBTyxDQUFDK0MsaUJBQWtCLENBQUM7VUFDNUY7VUFFQTNCLGtCQUFrQixDQUFDK0IsU0FBUyxDQUFDRSxnQkFBZ0IsQ0FBRSxZQUFZLEVBQUVyRCxPQUFPLENBQUMrQyxpQkFBaUIsRUFBRSxtQkFBb0IsQ0FBQztRQUM5RyxDQUFHO1FBQ0hPLFNBQVMsRUFBRyxTQUFBQSxVQUFFTCxLQUFLLEVBQU07VUFDeEIsSUFBS2hCLGFBQWEsRUFBRztZQUNwQjtVQUNEO1VBRUFnQixLQUFLLENBQUNDLGVBQWUsQ0FBQyxDQUFDO1VBRXZCLElBQUssQ0FBRWIsWUFBWSxFQUFHO1lBQ3JCLE9BQU9qQixrQkFBa0IsQ0FBQytCLFNBQVMsQ0FBQ0MsWUFBWSxDQUFFLFlBQVksRUFBRXBELE9BQU8sQ0FBQytDLGlCQUFrQixDQUFDO1VBQzVGO1VBRUEzQixrQkFBa0IsQ0FBQytCLFNBQVMsQ0FBQ0UsZ0JBQWdCLENBQUUsWUFBWSxFQUFFckQsT0FBTyxDQUFDK0MsaUJBQWlCLEVBQUUsbUJBQW9CLENBQUM7UUFDOUc7TUFBRyxnQkFFSEosS0FBQSxDQUFBQyxhQUFBLENBQUN2RCxJQUFJO1FBQUNrRSxHQUFHLEVBQUcsQ0FBRztRQUFDQyxLQUFLLEVBQUMsWUFBWTtRQUFDWCxTQUFTLEVBQUcsc0NBQXdDO1FBQUNZLE9BQU8sRUFBQztNQUFlLGdCQUM5R2QsS0FBQSxDQUFBQyxhQUFBLENBQUN0RCxTQUFTLHFCQUNUcUQsS0FBQSxDQUFBQyxhQUFBLENBQUN6RCxhQUFhO1FBQ2J1RSxLQUFLLEVBQUcxRCxPQUFPLENBQUMyRCxLQUFPO1FBQ3ZCcEIsUUFBUSxFQUFHQSxRQUFVO1FBQ3JCaEUsS0FBSyxFQUFHMkMsS0FBSyxDQUFDd0IsVUFBVSxDQUFDbkMsZUFBaUI7UUFDMUNxRCxPQUFPLEVBQUcsQ0FDVDtVQUFFRixLQUFLLEVBQUUxRCxPQUFPLENBQUM2RCxJQUFJO1VBQUV0RixLQUFLLEVBQUU7UUFBTyxDQUFDLEVBQ3RDO1VBQUVtRixLQUFLLEVBQUUxRCxPQUFPLENBQUM4RCxhQUFhO1VBQUV2RixLQUFLLEVBQUU7UUFBVSxDQUFDLEVBQ2xEO1VBQUVtRixLQUFLLEVBQUUxRCxPQUFPLENBQUMrRCxXQUFXO1VBQUV4RixLQUFLLEVBQUU7UUFBUSxDQUFDLENBQzVDO1FBQ0h5RixRQUFRLEVBQUcsU0FBQUEsU0FBRXpGLEtBQUs7VUFBQSxPQUFNOEIsR0FBRyxDQUFDNEQsa0NBQWtDLENBQUUvQyxLQUFLLEVBQUVDLFFBQVEsRUFBRTVDLEtBQUssRUFBRXNELFdBQVcsRUFBRUMsY0FBZSxDQUFDO1FBQUE7TUFBRSxDQUN2SCxDQUNTLENBQUMsZUFDWmEsS0FBQSxDQUFBQyxhQUFBLENBQUN0RCxTQUFTLFFBQ1AsQ0FBRTRCLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ25DLGVBQWUsS0FBSyxNQUFNLElBQUksQ0FBRTBCLGFBQWEsa0JBQ2pFVSxLQUFBLENBQUFDLGFBQUEsQ0FBQ3pELGFBQWE7UUFDYnVFLEtBQUssRUFBRzFELE9BQU8sQ0FBQ2tFLFFBQVU7UUFDMUIzRixLQUFLLEVBQUcyQyxLQUFLLENBQUN3QixVQUFVLENBQUNqQyxrQkFBb0I7UUFDN0M4QixRQUFRLEVBQUdBLFFBQVU7UUFDckJxQixPQUFPLEVBQUcsQ0FDVDtVQUFFRixLQUFLLEVBQUUxRCxPQUFPLENBQUNtRSxRQUFRO1VBQUU1RixLQUFLLEVBQUU7UUFBVyxDQUFDLEVBQzlDO1VBQUVtRixLQUFLLEVBQUUxRCxPQUFPLENBQUNvRSxVQUFVO1VBQUU3RixLQUFLLEVBQUU7UUFBYSxDQUFDLEVBQ2xEO1VBQUVtRixLQUFLLEVBQUUxRCxPQUFPLENBQUNxRSxTQUFTO1VBQUU5RixLQUFLLEVBQUU7UUFBWSxDQUFDLEVBQ2hEO1VBQUVtRixLQUFLLEVBQUUxRCxPQUFPLENBQUNzRSxXQUFXO1VBQUUvRixLQUFLLEVBQUU7UUFBYyxDQUFDLEVBQ3BEO1VBQUVtRixLQUFLLEVBQUUxRCxPQUFPLENBQUN1RSxhQUFhO1VBQUVoRyxLQUFLLEVBQUU7UUFBZ0IsQ0FBQyxFQUN4RDtVQUFFbUYsS0FBSyxFQUFFMUQsT0FBTyxDQUFDd0UsWUFBWTtVQUFFakcsS0FBSyxFQUFFO1FBQWUsQ0FBQyxFQUN0RDtVQUFFbUYsS0FBSyxFQUFFMUQsT0FBTyxDQUFDeUUsV0FBVztVQUFFbEcsS0FBSyxFQUFFO1FBQWMsQ0FBQyxFQUNwRDtVQUFFbUYsS0FBSyxFQUFFMUQsT0FBTyxDQUFDMEUsYUFBYTtVQUFFbkcsS0FBSyxFQUFFO1FBQWdCLENBQUMsRUFDeEQ7VUFBRW1GLEtBQUssRUFBRTFELE9BQU8sQ0FBQzJFLFlBQVk7VUFBRXBHLEtBQUssRUFBRTtRQUFlLENBQUMsQ0FDcEQ7UUFDSHFHLFFBQVEsRUFBSzFELEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ25DLGVBQWUsS0FBSyxNQUFNLElBQUkwQixhQUFpQjtRQUM3RStCLFFBQVEsRUFBRyxTQUFBQSxTQUFFekYsS0FBSztVQUFBLE9BQU00QyxRQUFRLENBQUMwRCxlQUFlLENBQUUsb0JBQW9CLEVBQUV0RyxLQUFNLENBQUM7UUFBQTtNQUFFLENBQ2pGLENBRVEsQ0FDTixDQUFDLEVBQ0wsQ0FBRTJDLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ25DLGVBQWUsS0FBSyxNQUFNLElBQUksQ0FBRTBCLGFBQWEsa0JBQ2pFVSxLQUFBLENBQUFDLGFBQUEsQ0FBQ3ZELElBQUk7UUFBQ2tFLEdBQUcsRUFBRyxDQUFHO1FBQUNDLEtBQUssRUFBQyxZQUFZO1FBQUNYLFNBQVMsRUFBRyxzQ0FBd0M7UUFBQ1ksT0FBTyxFQUFDO01BQWUsZ0JBQzlHZCxLQUFBLENBQUFDLGFBQUEsQ0FBQ3RELFNBQVMscUJBQ1RxRCxLQUFBLENBQUFDLGFBQUEsQ0FBQ3pELGFBQWE7UUFDYnVFLEtBQUssRUFBRzFELE9BQU8sQ0FBQzhFLE1BQVE7UUFDeEJ2QyxRQUFRLEVBQUdBLFFBQVU7UUFDckJoRSxLQUFLLEVBQUcyQyxLQUFLLENBQUN3QixVQUFVLENBQUNoQyxnQkFBa0I7UUFDM0NrRCxPQUFPLEVBQUcsQ0FDVDtVQUFFRixLQUFLLEVBQUUxRCxPQUFPLENBQUMrRSxTQUFTO1VBQUV4RyxLQUFLLEVBQUU7UUFBWSxDQUFDLEVBQ2hEO1VBQUVtRixLQUFLLEVBQUUxRCxPQUFPLENBQUNnRixJQUFJO1VBQUV6RyxLQUFLLEVBQUU7UUFBUyxDQUFDLEVBQ3hDO1VBQUVtRixLQUFLLEVBQUUxRCxPQUFPLENBQUNpRixRQUFRO1VBQUUxRyxLQUFLLEVBQUU7UUFBVyxDQUFDLEVBQzlDO1VBQUVtRixLQUFLLEVBQUUxRCxPQUFPLENBQUNrRixRQUFRO1VBQUUzRyxLQUFLLEVBQUU7UUFBVyxDQUFDLENBQzVDO1FBQ0hxRyxRQUFRLEVBQUsxRCxLQUFLLENBQUN3QixVQUFVLENBQUNuQyxlQUFlLEtBQUssTUFBTSxJQUFJMEIsYUFBaUI7UUFDN0UrQixRQUFRLEVBQUcsU0FBQUEsU0FBRXpGLEtBQUs7VUFBQSxPQUFNNEMsUUFBUSxDQUFDMEQsZUFBZSxDQUFFLGtCQUFrQixFQUFFdEcsS0FBTSxDQUFDO1FBQUE7TUFBRSxDQUMvRSxDQUNTLENBQUMsZUFDWm9FLEtBQUEsQ0FBQUMsYUFBQSxDQUFDdEQsU0FBUyxxQkFDVHFELEtBQUEsQ0FBQUMsYUFBQSxDQUFDekQsYUFBYTtRQUNidUUsS0FBSyxFQUFHMUQsT0FBTyxDQUFDbUYsSUFBTTtRQUN0QjVDLFFBQVEsRUFBR0EsUUFBVTtRQUNyQmhFLEtBQUssRUFBRzJDLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQy9CLGtCQUFvQjtRQUM3Q2lELE9BQU8sRUFBRyxDQUNUO1VBQUVGLEtBQUssRUFBRTFELE9BQU8sQ0FBQ29GLFVBQVU7VUFBRTdHLEtBQUssRUFBRTtRQUFhLENBQUMsRUFDbEQ7VUFBRW1GLEtBQUssRUFBRTFELE9BQU8sQ0FBQ3FGLEtBQUs7VUFBRTlHLEtBQUssRUFBRTtRQUFRLENBQUMsQ0FDdEM7UUFDSHFHLFFBQVEsRUFBSzFELEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ25DLGVBQWUsS0FBSyxNQUFNLElBQUkwQixhQUFpQjtRQUM3RStCLFFBQVEsRUFBRyxTQUFBQSxTQUFFekYsS0FBSztVQUFBLE9BQU04QixHQUFHLENBQUNpRix3QkFBd0IsQ0FBRXBFLEtBQUssRUFBRUMsUUFBUSxFQUFFNUMsS0FBTSxDQUFDO1FBQUE7TUFBRSxDQUNoRixDQUNTLENBQ04sQ0FDTixFQUNDLENBQUkyQyxLQUFLLENBQUN3QixVQUFVLENBQUMvQixrQkFBa0IsS0FBSyxZQUFZLElBQUlPLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ25DLGVBQWUsS0FBSyxNQUFNLElBQU0sQ0FBRTBCLGFBQWEsa0JBQzdIVSxLQUFBLENBQUFDLGFBQUEsQ0FBQ3ZELElBQUk7UUFBQ2tFLEdBQUcsRUFBRyxDQUFHO1FBQUNDLEtBQUssRUFBQyxZQUFZO1FBQUNYLFNBQVMsRUFBRyxzQ0FBd0M7UUFBQ1ksT0FBTyxFQUFDO01BQWUsZ0JBQzlHZCxLQUFBLENBQUFDLGFBQUEsQ0FBQ3RELFNBQVMscUJBQ1RxRCxLQUFBLENBQUFDLGFBQUEsQ0FBQ3JELHlCQUF5QjtRQUN6Qm1FLEtBQUssRUFBRzFELE9BQU8sQ0FBQ3VGLEtBQU87UUFDdkJoRCxRQUFRLEVBQUdBLFFBQVU7UUFDckJoRSxLQUFLLEVBQUcyQyxLQUFLLENBQUN3QixVQUFVLENBQUM3QixlQUFpQjtRQUMxQzJFLG9CQUFvQixFQUFHdkQsYUFBZTtRQUN0QytCLFFBQVEsRUFBRyxTQUFBQSxTQUFFekYsS0FBSztVQUFBLE9BQU04QixHQUFHLENBQUNvRixtQkFBbUIsQ0FBRXZFLEtBQUssRUFBRUMsUUFBUSxFQUFFNUMsS0FBTSxDQUFDO1FBQUE7TUFBRSxDQUMzRSxDQUNTLENBQUMsZUFDWm9FLEtBQUEsQ0FBQUMsYUFBQSxDQUFDdEQsU0FBUyxxQkFDVHFELEtBQUEsQ0FBQUMsYUFBQSxDQUFDckQseUJBQXlCO1FBQ3pCbUUsS0FBSyxFQUFHMUQsT0FBTyxDQUFDMEYsTUFBUTtRQUN4Qm5ELFFBQVEsRUFBR0EsUUFBVTtRQUNyQmhFLEtBQUssRUFBRzJDLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQzVCLGdCQUFrQjtRQUMzQzBFLG9CQUFvQixFQUFHdkQsYUFBZTtRQUN0QytCLFFBQVEsRUFBRyxTQUFBQSxTQUFFekYsS0FBSztVQUFBLE9BQU04QixHQUFHLENBQUNzRixvQkFBb0IsQ0FBRXpFLEtBQUssRUFBRUMsUUFBUSxFQUFFNUMsS0FBTSxDQUFDO1FBQUE7TUFBRSxDQUM1RSxDQUNTLENBQ04sQ0FDTixFQUNDLENBQUUsQ0FBRWtELHFCQUFxQixJQUFJUCxLQUFLLENBQUN3QixVQUFVLENBQUMxQixhQUFhLEtBQUssT0FBTyxNQUN0RUUsS0FBSyxDQUFDd0IsVUFBVSxDQUFDbkMsZUFBZSxLQUFLLFNBQVMsaUJBQy9Db0MsS0FBQSxDQUFBQyxhQUFBLENBQUN2RCxJQUFJO1FBQUNrRSxHQUFHLEVBQUcsQ0FBRztRQUFDQyxLQUFLLEVBQUMsWUFBWTtRQUFDWCxTQUFTLEVBQUcsc0NBQXdDO1FBQUNZLE9BQU8sRUFBQztNQUFlLGdCQUM5R2QsS0FBQSxDQUFBQyxhQUFBLENBQUN0RCxTQUFTLHFCQUNUcUQsS0FBQSxDQUFBQyxhQUFBLENBQUNuRCxNQUFNO1FBQ05tRyxXQUFXO1FBQ1hyRCxRQUFRLEVBQUdBLFFBQVU7UUFDckJNLFNBQVMsRUFBRyxzREFBd0Q7UUFDcEVHLE9BQU8sRUFBRzNDLEdBQUcsQ0FBQ3dGLGdCQUFnQixDQUFDQyxJQUFJLENBQUUsSUFBSSxFQUFFNUUsS0FBSyxFQUFFQyxRQUFRLEVBQUVPLHdCQUF5QjtNQUFHLEdBRXRGMUIsT0FBTyxDQUFDK0YsWUFDSCxDQUNFLENBQ04sQ0FDTixJQUFRN0UsS0FBSyxDQUFDd0IsVUFBVSxDQUFDbkMsZUFBZSxLQUFLLE9BQU8saUJBQ3BEb0MsS0FBQSxDQUFBQyxhQUFBLENBQUN2RCxJQUFJO1FBQUNrRSxHQUFHLEVBQUcsQ0FBRztRQUFDQyxLQUFLLEVBQUMsWUFBWTtRQUFDWCxTQUFTLEVBQUcsc0NBQXdDO1FBQUNZLE9BQU8sRUFBQztNQUFlLGdCQUM5R2QsS0FBQSxDQUFBQyxhQUFBLENBQUN0RCxTQUFTLHFCQUNUcUQsS0FBQSxDQUFBQyxhQUFBLENBQUNuRCxNQUFNO1FBQ05tRyxXQUFXO1FBQ1hyRCxRQUFRLEVBQUdBLFFBQVU7UUFDckJNLFNBQVMsRUFBRyxzREFBd0Q7UUFDcEVHLE9BQU8sRUFBRzNCLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFMkUsU0FBUyxDQUFDRixJQUFJLENBQUUsSUFBSSxFQUFFNUUsS0FBSyxFQUFFQyxRQUFRLEVBQUUsV0FBVyxFQUFFTyx3QkFBeUI7TUFBRyxHQUVyRzFCLE9BQU8sQ0FBQytGLFlBQ0gsQ0FDRSxDQUNOLENBQ0osQ0FDSCxFQUNDLENBQUl0RSxxQkFBcUIsSUFBSVAsS0FBSyxDQUFDd0IsVUFBVSxDQUFDbkMsZUFBZSxLQUFLLE1BQU0sSUFBTVcsS0FBSyxDQUFDd0IsVUFBVSxDQUFDMUIsYUFBYSxLQUFLLE9BQU8sa0JBQ3pIMkIsS0FBQSxDQUFBQyxhQUFBLENBQUN2RCxJQUFJO1FBQUNrRSxHQUFHLEVBQUcsQ0FBRztRQUFDQyxLQUFLLEVBQUMsWUFBWTtRQUFDWCxTQUFTLEVBQUcsc0NBQXdDO1FBQUNZLE9BQU8sRUFBQztNQUFlLGdCQUM5R2QsS0FBQSxDQUFBQyxhQUFBLENBQUN0RCxTQUFTLHFCQUNUcUQsS0FBQSxDQUFBQyxhQUFBLDJCQUNDRCxLQUFBLENBQUFDLGFBQUEsQ0FBQ2hILGtCQUFBLENBQUFLLE9BQWlCO1FBQ2pCeUcsVUFBVSxFQUFHeEIsS0FBSyxDQUFDd0IsVUFBWTtRQUMvQnVELGtCQUFrQixFQUNqQixTQUFBQSxtQkFBQSxFQUFNO1VBQ0w1RixHQUFHLENBQUM0RixrQkFBa0IsQ0FBRXZFLHdCQUF3QixFQUFFUCxRQUFRLEVBQUVXLGNBQWUsQ0FBQztRQUM3RSxDQUNBO1FBQ0RvRSxnQkFBZ0IsRUFBRyxTQUFBQSxpQkFBQSxFQUFNO1VBQ3hCLElBQUtoRixLQUFLLENBQUN3QixVQUFVLENBQUNuQyxlQUFlLEtBQUssU0FBUyxFQUFHO1lBQ3JELE9BQU9GLEdBQUcsQ0FBQ3dGLGdCQUFnQixDQUFFM0UsS0FBSyxFQUFFQyxRQUFRLEVBQUVPLHdCQUF5QixDQUFDO1VBQ3pFO1VBRUEsT0FBT0wsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUUyRSxTQUFTLENBQUU5RSxLQUFLLEVBQUVDLFFBQVEsRUFBRSxXQUFXLEVBQUVPLHdCQUF5QixDQUFDO1FBQ3hGO01BQUcsQ0FDSCxDQUNHLENBQUMsZUFDTmlCLEtBQUEsQ0FBQUMsYUFBQSxDQUFDcEQsV0FBVztRQUNYa0UsS0FBSyxFQUFHMUQsT0FBTyxDQUFDbUcsU0FBVztRQUMzQjVELFFBQVEsRUFBR0EsUUFBVTtRQUNyQmhFLEtBQUssRUFBRzJDLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ25DLGVBQWUsS0FBSyxNQUFNLElBQUlXLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQzFCLGFBQWU7UUFDdkY2QixTQUFTLEVBQUcsMkNBQTZDO1FBQ3pEbUIsUUFBUSxFQUFHLFNBQUFBLFNBQUV6RixLQUFLO1VBQUEsT0FBTTRDLFFBQVEsQ0FBQzBELGVBQWUsQ0FBRSxlQUFlLEVBQUV0RyxLQUFNLENBQUM7UUFBQSxDQUFFO1FBQzVFNkgsTUFBTSxFQUFHLFNBQUFBLE9BQUU3SCxLQUFLO1VBQUEsT0FBTTJDLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQ25DLGVBQWUsS0FBSyxNQUFNLElBQUlZLFFBQVEsQ0FBQzBELGVBQWUsQ0FBRSxlQUFlLEVBQUV0RyxLQUFNLENBQUM7UUFBQTtNQUFFLENBQ3pILENBQ1MsQ0FDTixDQUNOLGVBQ0RvRSxLQUFBLENBQUFDLGFBQUEsQ0FBQ3ZELElBQUk7UUFBQ2tFLEdBQUcsRUFBRyxDQUFHO1FBQUNDLEtBQUssRUFBQyxZQUFZO1FBQUNYLFNBQVMsRUFBRyxzQ0FBd0M7UUFBQ1ksT0FBTyxFQUFDO01BQWUsZ0JBQzlHZCxLQUFBLENBQUFDLGFBQUEsQ0FBQ3RELFNBQVMscUJBQ1RxRCxLQUFBLENBQUFDLGFBQUE7UUFBS0MsU0FBUyxFQUFDO01BQStDLEdBQUc3QyxPQUFPLENBQUNxRyxNQUFhLENBQUMsZUFDdkYxRCxLQUFBLENBQUFDLGFBQUEsQ0FBQzVELGtCQUFrQjtRQUNsQnNILGlDQUFpQztRQUNqQ0MsV0FBVztRQUNYQyxTQUFTLEVBQUcsS0FBTztRQUNuQmpFLFFBQVEsRUFBR0EsUUFBVTtRQUNyQk0sU0FBUyxFQUFDLDZDQUE2QztRQUN2RDRELGFBQWEsRUFBRyxDQUNmO1VBQ0NsSSxLQUFLLEVBQUUyQyxLQUFLLENBQUN3QixVQUFVLENBQUMzQixlQUFlO1VBQ3ZDaUQsUUFBUSxFQUFFLFNBQUFBLFNBQUV6RixLQUFLLEVBQU07WUFDdEIsSUFBSyxDQUFFMEQsYUFBYSxFQUFHO2NBQ3RCO1lBQ0Q7WUFFQWQsUUFBUSxDQUFDMEQsZUFBZSxDQUFFLGlCQUFpQixFQUFFdEcsS0FBTSxDQUFDO1VBQ3JELENBQUM7VUFDRG1GLEtBQUssRUFBRTFELE9BQU8sQ0FBQzBHO1FBQ2hCLENBQUM7TUFDQyxDQUNILENBQ1MsQ0FDTixDQUNGLENBQ0ssQ0FBQztJQUVkLENBQUM7SUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDRWIsZ0JBQWdCLFdBQUFBLGlCQUFFM0UsS0FBSyxFQUFFQyxRQUFRLEVBQUVPLHdCQUF3QixFQUFHO01BQzdELElBQU1pRixLQUFLLEdBQUc5SCxFQUFFLENBQUMrSCxLQUFLLENBQUU7UUFDdkI5RCxLQUFLLEVBQUU5QyxPQUFPLENBQUM2Ryx1QkFBdUI7UUFDdENDLFFBQVEsRUFBRSxLQUFLO1FBQ2ZDLE9BQU8sRUFBRTtVQUNSdkcsSUFBSSxFQUFFO1FBQ1AsQ0FBQztRQUNEd0csTUFBTSxFQUFFO1VBQ1BDLElBQUksRUFBRWpILE9BQU8sQ0FBQ2tIO1FBQ2Y7TUFDRCxDQUFFLENBQUM7TUFFSFAsS0FBSyxDQUFDUSxFQUFFLENBQUUsUUFBUSxFQUFFLFlBQU07UUFDekIsSUFBTUMsVUFBVSxHQUFHVCxLQUFLLENBQUNVLEtBQUssQ0FBQyxDQUFDLENBQUNDLEdBQUcsQ0FBRSxXQUFZLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDLENBQUM7UUFDcEUsSUFBTUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFNQyxTQUFTLEdBQUcsZUFBZTtRQUVqQyxJQUFLTixVQUFVLENBQUNPLEdBQUcsRUFBRztVQUNyQixJQUFNcEosS0FBSyxVQUFBcUosTUFBQSxDQUFXUixVQUFVLENBQUNPLEdBQUcsTUFBSTtVQUV4Q0YsT0FBTyxDQUFFQyxTQUFTLENBQUUsR0FBR25KLEtBQUs7VUFFNUIyQyxLQUFLLENBQUMyRyxhQUFhLENBQUVKLE9BQVEsQ0FBQztVQUU5QnRHLFFBQVEsQ0FBQzBELGVBQWUsQ0FBRSxlQUFlLEVBQUV0RyxLQUFNLENBQUM7VUFFbERtRCx3QkFBd0IsQ0FBRSxJQUFLLENBQUM7UUFDakM7TUFDRCxDQUFFLENBQUM7TUFFSGlGLEtBQUssQ0FBQ21CLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0VDLDJCQUEyQixXQUFBQSw0QkFBRUMsU0FBUyxFQUFFekosS0FBSyxFQUFHO01BQy9DLElBQUtBLEtBQUssS0FBSyxNQUFNLEVBQUc7UUFDdkJ5SixTQUFTLENBQUNDLEtBQUssQ0FBQ0MsV0FBVyw2QkFBOEIsT0FBUSxDQUFDO01BQ25FO01BRUEsT0FBTyxJQUFJO0lBQ1osQ0FBQztJQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDRWpFLGtDQUFrQyxXQUFBQSxtQ0FBRS9DLEtBQUssRUFBRUMsUUFBUSxFQUFFNUMsS0FBSyxFQUFFc0QsV0FBVyxFQUFFQyxjQUFjLEVBQUc7TUFDekYsSUFBS3ZELEtBQUssS0FBSyxNQUFNLEVBQUc7UUFDdkJ1RCxjQUFjLENBQUVaLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQzFCLGFBQWMsQ0FBQztRQUNoREUsS0FBSyxDQUFDd0IsVUFBVSxDQUFDMUIsYUFBYSxHQUFHLE9BQU87UUFFeENHLFFBQVEsQ0FBQzBELGVBQWUsQ0FBRSxlQUFlLEVBQUUsT0FBUSxDQUFDO01BQ3JELENBQUMsTUFBTSxJQUFLaEQsV0FBVyxFQUFHO1FBQ3pCWCxLQUFLLENBQUN3QixVQUFVLENBQUMxQixhQUFhLEdBQUdhLFdBQVc7UUFDNUNWLFFBQVEsQ0FBQzBELGVBQWUsQ0FBRSxlQUFlLEVBQUVoRCxXQUFZLENBQUM7TUFDekQ7TUFFQVYsUUFBUSxDQUFDMEQsZUFBZSxDQUFFLGlCQUFpQixFQUFFdEcsS0FBTSxDQUFDO0lBQ3JELENBQUM7SUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNFNEosOEJBQThCLFdBQUFBLCtCQUFFSCxTQUFTLEVBQUV6SixLQUFLLEVBQUc7TUFDbER5SixTQUFTLENBQUNDLEtBQUssQ0FBQ0MsV0FBVyxrQ0FBbUMzSixLQUFNLENBQUM7TUFFckUsT0FBTyxJQUFJO0lBQ1osQ0FBQztJQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0U2Siw0QkFBNEIsV0FBQUEsNkJBQUVKLFNBQVMsRUFBRXpKLEtBQUssRUFBRztNQUNoRHlKLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDQyxXQUFXLGdDQUFpQzNKLEtBQU0sQ0FBQztNQUVuRSxPQUFPLElBQUk7SUFDWixDQUFDO0lBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0UrRyx3QkFBd0IsV0FBQUEseUJBQUVwRSxLQUFLLEVBQUVDLFFBQVEsRUFBRTVDLEtBQUssRUFBRztNQUNsRCxJQUFLQSxLQUFLLEtBQUssT0FBTyxFQUFHO1FBQ3hCMkMsS0FBSyxDQUFDd0IsVUFBVSxDQUFDOUIsY0FBYyxHQUFHLE9BQU87UUFFekNPLFFBQVEsQ0FBQzBELGVBQWUsQ0FBRSxpQkFBaUIsRUFBRTNELEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQzdCLGVBQWdCLENBQUM7UUFDL0VNLFFBQVEsQ0FBQzBELGVBQWUsQ0FBRSxrQkFBa0IsRUFBRTNELEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQzVCLGdCQUFpQixDQUFDO1FBQ2pGSyxRQUFRLENBQUMwRCxlQUFlLENBQUUsb0JBQW9CLEVBQUUsT0FBUSxDQUFDO1FBQ3pEMUQsUUFBUSxDQUFDMEQsZUFBZSxDQUFFLGdCQUFnQixFQUFFLE9BQVEsQ0FBQztNQUN0RCxDQUFDLE1BQU07UUFDTjNELEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQzlCLGNBQWMsR0FBRyxZQUFZO1FBRTlDTyxRQUFRLENBQUMwRCxlQUFlLENBQUUsb0JBQW9CLEVBQUUsWUFBYSxDQUFDO1FBQzlEMUQsUUFBUSxDQUFDMEQsZUFBZSxDQUFFLGdCQUFnQixFQUFFM0QsS0FBSyxDQUFDd0IsVUFBVSxDQUFDN0IsZUFBZSxHQUFHLEdBQUcsR0FBR0ssS0FBSyxDQUFDd0IsVUFBVSxDQUFDNUIsZ0JBQWlCLENBQUM7TUFDekg7SUFDRCxDQUFDO0lBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0UyRSxtQkFBbUIsV0FBQUEsb0JBQUV2RSxLQUFLLEVBQUVDLFFBQVEsRUFBRTVDLEtBQUssRUFBRztNQUM3QzJDLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQzlCLGNBQWMsR0FBR3JDLEtBQUssR0FBRyxHQUFHLEdBQUcyQyxLQUFLLENBQUN3QixVQUFVLENBQUM1QixnQkFBZ0I7TUFDakZJLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQzdCLGVBQWUsR0FBR3RDLEtBQUs7TUFFeEM0QyxRQUFRLENBQUMwRCxlQUFlLENBQUUsZ0JBQWdCLEVBQUV0RyxLQUFLLEdBQUcsR0FBRyxHQUFHMkMsS0FBSyxDQUFDd0IsVUFBVSxDQUFDNUIsZ0JBQWlCLENBQUM7TUFDN0ZLLFFBQVEsQ0FBQzBELGVBQWUsQ0FBRSxpQkFBaUIsRUFBRXRHLEtBQU0sQ0FBQztJQUNyRCxDQUFDO0lBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0VvSCxvQkFBb0IsV0FBQUEscUJBQUV6RSxLQUFLLEVBQUVDLFFBQVEsRUFBRTVDLEtBQUssRUFBRztNQUM5QzJDLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQzlCLGNBQWMsR0FBR00sS0FBSyxDQUFDd0IsVUFBVSxDQUFDN0IsZUFBZSxHQUFHLEdBQUcsR0FBR3RDLEtBQUs7TUFDaEYyQyxLQUFLLENBQUN3QixVQUFVLENBQUM1QixnQkFBZ0IsR0FBR3ZDLEtBQUs7TUFFekM0QyxRQUFRLENBQUMwRCxlQUFlLENBQUUsZ0JBQWdCLEVBQUUzRCxLQUFLLENBQUN3QixVQUFVLENBQUM3QixlQUFlLEdBQUcsR0FBRyxHQUFHdEMsS0FBTSxDQUFDO01BQzVGNEMsUUFBUSxDQUFDMEQsZUFBZSxDQUFFLGtCQUFrQixFQUFFdEcsS0FBTSxDQUFDO0lBQ3RELENBQUM7SUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNFOEosMkJBQTJCLFdBQUFBLDRCQUFFTCxTQUFTLEVBQUV6SixLQUFLLEVBQUc7TUFDL0N5SixTQUFTLENBQUNDLEtBQUssQ0FBQ0MsV0FBVywrQkFBZ0MzSixLQUFNLENBQUM7TUFFbEUsT0FBTyxJQUFJO0lBQ1osQ0FBQztJQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0UrSiw0QkFBNEIsV0FBQUEsNkJBQUVOLFNBQVMsRUFBRXpKLEtBQUssRUFBRztNQUNoRHlKLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDQyxXQUFXLGdDQUFpQzNKLEtBQU0sQ0FBQztNQUVuRSxPQUFPLElBQUk7SUFDWixDQUFDO0lBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDRWdLLGdCQUFnQixXQUFBQSxpQkFBRVAsU0FBUyxFQUFFekosS0FBSyxFQUFHO01BQ3BDeUosU0FBUyxDQUFDQyxLQUFLLENBQUNDLFdBQVcsNkJBQThCM0osS0FBTSxDQUFDO01BRWhFLE9BQU8sSUFBSTtJQUNaLENBQUM7SUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNFaUssa0JBQWtCLFdBQUFBLG1CQUFFUixTQUFTLEVBQUV6SixLQUFLLEVBQUc7TUFDdEN5SixTQUFTLENBQUNDLEtBQUssQ0FBQ0MsV0FBVywrQkFBZ0MzSixLQUFNLENBQUM7TUFFbEUsT0FBTyxJQUFJO0lBQ1osQ0FBQztJQUVEZ0Qsc0JBQXNCLFdBQUFBLHVCQUFFTCxLQUFLLEVBQUc7TUFDL0IsT0FBT0EsS0FBSyxDQUFDd0IsVUFBVSxDQUFDbkMsZUFBZSxLQUFLLE1BQU0sSUFDakRXLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQzFCLGFBQWEsSUFDOUJFLEtBQUssQ0FBQ3dCLFVBQVUsQ0FBQzFCLGFBQWEsS0FBSyxPQUFPO0lBQzVDLENBQUM7SUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDRWlGLGtCQUFrQixXQUFBQSxtQkFBRXZFLHdCQUF3QixFQUFFUCxRQUFRLEVBQUVXLGNBQWMsRUFBRztNQUN4RUosd0JBQXdCLENBQUUsS0FBTSxDQUFDO01BQ2pDUCxRQUFRLENBQUMwRCxlQUFlLENBQUUsZUFBZSxFQUFFLE9BQVEsQ0FBQztNQUNwRC9DLGNBQWMsQ0FBRSxFQUFHLENBQUM7SUFDckIsQ0FBQztJQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0UyRyxVQUFVLFdBQUFBLFdBQUV2SCxLQUFLLEVBQUc7TUFDbkJkLGtCQUFrQixHQUFHYyxLQUFLLENBQUN3QixVQUFVLENBQUNuQyxlQUFlLEtBQUssT0FBTztJQUNsRTtFQUNELENBQUM7RUFFRCxPQUFPRixHQUFHO0FBQ1gsQ0FBQyxDQUFDLENBQUMifQ== },{"./background-preview.js":14}],16:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; /* global wpforms_gutenberg_form_selector */ /* jshint es3: false, esversion: 6 */ /** * @param strings.border_radius * @param strings.border_size * @param strings.button_color_notice * @param strings.button_styles * @param strings.dashed * @param strings.solid */ /** * Gutenberg editor block. * * Button styles panel module. * * @since 1.8.8 */ var _default = exports.default = function () { /** * WP core components. * * @since 1.8.8 */ var _ref = wp.blockEditor || wp.editor, PanelColorSettings = _ref.PanelColorSettings; var _wp$components = wp.components, SelectControl = _wp$components.SelectControl, PanelBody = _wp$components.PanelBody, Flex = _wp$components.Flex, FlexBlock = _wp$components.FlexBlock, __experimentalUnitControl = _wp$components.__experimentalUnitControl; /** * Localized data aliases. * * @since 1.8.8 */ var _wpforms_gutenberg_fo = wpforms_gutenberg_form_selector, strings = _wpforms_gutenberg_fo.strings, defaults = _wpforms_gutenberg_fo.defaults; // noinspection UnnecessaryLocalVariableJS /** * Public functions and properties. * * @since 1.8.8 * * @type {Object} */ var app = { /** * Get block attributes. * * @since 1.8.8 * * @return {Object} Block attributes. */ getBlockAttributes: function getBlockAttributes() { return { buttonSize: { type: 'string', default: defaults.buttonSize }, buttonBorderStyle: { type: 'string', default: defaults.buttonBorderStyle }, buttonBorderSize: { type: 'string', default: defaults.buttonBorderSize }, buttonBorderRadius: { type: 'string', default: defaults.buttonBorderRadius }, buttonBackgroundColor: { type: 'string', default: defaults.buttonBackgroundColor }, buttonTextColor: { type: 'string', default: defaults.buttonTextColor }, buttonBorderColor: { type: 'string', default: defaults.buttonBorderColor } }; }, /** * Get Button styles JSX code. * * @since 1.8.8 * * @param {Object} props Block properties. * @param {Object} handlers Block event handlers. * @param {Object} sizeOptions Size selector options. * @param {Object} formSelectorCommon Form selector common object. * * @return {Object} Button styles JSX code. */ getButtonStyles: function getButtonStyles(props, handlers, sizeOptions, formSelectorCommon) { // eslint-disable-line max-lines-per-function return /*#__PURE__*/React.createElement(PanelBody, { className: formSelectorCommon.getPanelClass(props), title: strings.button_styles }, /*#__PURE__*/React.createElement(Flex, { gap: 4, align: "flex-start", className: 'wpforms-gutenberg-form-selector-flex', justify: "space-between" }, /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(SelectControl, { label: strings.size, value: props.attributes.buttonSize, options: sizeOptions, onChange: function onChange(value) { return handlers.styleAttrChange('buttonSize', value); } })), /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(SelectControl, { label: strings.border, value: props.attributes.buttonBorderStyle, options: [{ label: strings.none, value: 'none' }, { label: strings.solid, value: 'solid' }, { label: strings.dashed, value: 'dashed' }, { label: strings.dotted, value: 'dotted' }], onChange: function onChange(value) { return handlers.styleAttrChange('buttonBorderStyle', value); } }))), /*#__PURE__*/React.createElement(Flex, { gap: 4, align: "flex-start", className: 'wpforms-gutenberg-form-selector-flex', justify: "space-between" }, /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(__experimentalUnitControl, { label: strings.border_size, value: props.attributes.buttonBorderStyle === 'none' ? '' : props.attributes.buttonBorderSize, min: 0, disabled: props.attributes.buttonBorderStyle === 'none', onChange: function onChange(value) { return handlers.styleAttrChange('buttonBorderSize', value); }, isUnitSelectTabbable: true })), /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(__experimentalUnitControl, { onChange: function onChange(value) { return handlers.styleAttrChange('buttonBorderRadius', value); }, label: strings.border_radius, min: 0, isUnitSelectTabbable: true, value: props.attributes.buttonBorderRadius }))), /*#__PURE__*/React.createElement("div", { className: "wpforms-gutenberg-form-selector-color-picker" }, /*#__PURE__*/React.createElement("div", { className: "wpforms-gutenberg-form-selector-control-label" }, strings.colors), /*#__PURE__*/React.createElement(PanelColorSettings, { __experimentalIsRenderedInSidebar: true, enableAlpha: true, showTitle: false, className: formSelectorCommon.getColorPanelClass(props.attributes.buttonBorderStyle), colorSettings: [{ value: props.attributes.buttonBackgroundColor, onChange: function onChange(value) { return handlers.styleAttrChange('buttonBackgroundColor', value); }, label: strings.background }, { value: props.attributes.buttonBorderColor, onChange: function onChange(value) { return handlers.styleAttrChange('buttonBorderColor', value); }, label: strings.border }, { value: props.attributes.buttonTextColor, onChange: function onChange(value) { return handlers.styleAttrChange('buttonTextColor', value); }, label: strings.text }] }), /*#__PURE__*/React.createElement("div", { className: "wpforms-gutenberg-form-selector-legend wpforms-button-color-notice" }, strings.button_color_notice))); } }; return app; }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwiX3JlZiIsIndwIiwiYmxvY2tFZGl0b3IiLCJlZGl0b3IiLCJQYW5lbENvbG9yU2V0dGluZ3MiLCJfd3AkY29tcG9uZW50cyIsImNvbXBvbmVudHMiLCJTZWxlY3RDb250cm9sIiwiUGFuZWxCb2R5IiwiRmxleCIsIkZsZXhCbG9jayIsIl9fZXhwZXJpbWVudGFsVW5pdENvbnRyb2wiLCJfd3Bmb3Jtc19ndXRlbmJlcmdfZm8iLCJ3cGZvcm1zX2d1dGVuYmVyZ19mb3JtX3NlbGVjdG9yIiwic3RyaW5ncyIsImRlZmF1bHRzIiwiYXBwIiwiZ2V0QmxvY2tBdHRyaWJ1dGVzIiwiYnV0dG9uU2l6ZSIsInR5cGUiLCJidXR0b25Cb3JkZXJTdHlsZSIsImJ1dHRvbkJvcmRlclNpemUiLCJidXR0b25Cb3JkZXJSYWRpdXMiLCJidXR0b25CYWNrZ3JvdW5kQ29sb3IiLCJidXR0b25UZXh0Q29sb3IiLCJidXR0b25Cb3JkZXJDb2xvciIsImdldEJ1dHRvblN0eWxlcyIsInByb3BzIiwiaGFuZGxlcnMiLCJzaXplT3B0aW9ucyIsImZvcm1TZWxlY3RvckNvbW1vbiIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImdldFBhbmVsQ2xhc3MiLCJ0aXRsZSIsImJ1dHRvbl9zdHlsZXMiLCJnYXAiLCJhbGlnbiIsImp1c3RpZnkiLCJsYWJlbCIsInNpemUiLCJ2YWx1ZSIsImF0dHJpYnV0ZXMiLCJvcHRpb25zIiwib25DaGFuZ2UiLCJzdHlsZUF0dHJDaGFuZ2UiLCJib3JkZXIiLCJub25lIiwic29saWQiLCJkYXNoZWQiLCJkb3R0ZWQiLCJib3JkZXJfc2l6ZSIsIm1pbiIsImRpc2FibGVkIiwiaXNVbml0U2VsZWN0VGFiYmFibGUiLCJib3JkZXJfcmFkaXVzIiwiY29sb3JzIiwiX19leHBlcmltZW50YWxJc1JlbmRlcmVkSW5TaWRlYmFyIiwiZW5hYmxlQWxwaGEiLCJzaG93VGl0bGUiLCJnZXRDb2xvclBhbmVsQ2xhc3MiLCJjb2xvclNldHRpbmdzIiwiYmFja2dyb3VuZCIsInRleHQiLCJidXR0b25fY29sb3Jfbm90aWNlIl0sInNvdXJjZXMiOlsiYnV0dG9uLXN0eWxlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgd3Bmb3Jtc19ndXRlbmJlcmdfZm9ybV9zZWxlY3RvciAqL1xuLyoganNoaW50IGVzMzogZmFsc2UsIGVzdmVyc2lvbjogNiAqL1xuXG4vKipcbiAqIEBwYXJhbSBzdHJpbmdzLmJvcmRlcl9yYWRpdXNcbiAqIEBwYXJhbSBzdHJpbmdzLmJvcmRlcl9zaXplXG4gKiBAcGFyYW0gc3RyaW5ncy5idXR0b25fY29sb3Jfbm90aWNlXG4gKiBAcGFyYW0gc3RyaW5ncy5idXR0b25fc3R5bGVzXG4gKiBAcGFyYW0gc3RyaW5ncy5kYXNoZWRcbiAqIEBwYXJhbSBzdHJpbmdzLnNvbGlkXG4gKi9cblxuLyoqXG4gKiBHdXRlbmJlcmcgZWRpdG9yIGJsb2NrLlxuICpcbiAqIEJ1dHRvbiBzdHlsZXMgcGFuZWwgbW9kdWxlLlxuICpcbiAqIEBzaW5jZSAxLjguOFxuICovXG5leHBvcnQgZGVmYXVsdCAoICggZnVuY3Rpb24oKSB7XG5cdC8qKlxuXHQgKiBXUCBjb3JlIGNvbXBvbmVudHMuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjguOFxuXHQgKi9cblx0Y29uc3QgeyBQYW5lbENvbG9yU2V0dGluZ3MgfSA9IHdwLmJsb2NrRWRpdG9yIHx8IHdwLmVkaXRvcjtcblx0Y29uc3QgeyBTZWxlY3RDb250cm9sLCBQYW5lbEJvZHksIEZsZXgsIEZsZXhCbG9jaywgX19leHBlcmltZW50YWxVbml0Q29udHJvbCB9ID0gd3AuY29tcG9uZW50cztcblxuXHQvKipcblx0ICogTG9jYWxpemVkIGRhdGEgYWxpYXNlcy5cblx0ICpcblx0ICogQHNpbmNlIDEuOC44XG5cdCAqL1xuXHRjb25zdCB7IHN0cmluZ3MsIGRlZmF1bHRzIH0gPSB3cGZvcm1zX2d1dGVuYmVyZ19mb3JtX3NlbGVjdG9yO1xuXG5cdC8vIG5vaW5zcGVjdGlvbiBVbm5lY2Vzc2FyeUxvY2FsVmFyaWFibGVKU1xuXHQvKipcblx0ICogUHVibGljIGZ1bmN0aW9ucyBhbmQgcHJvcGVydGllcy5cblx0ICpcblx0ICogQHNpbmNlIDEuOC44XG5cdCAqXG5cdCAqIEB0eXBlIHtPYmplY3R9XG5cdCAqL1xuXHRjb25zdCBhcHAgPSB7XG5cblx0XHQvKipcblx0XHQgKiBHZXQgYmxvY2sgYXR0cmlidXRlcy5cblx0XHQgKlxuXHRcdCAqIEBzaW5jZSAxLjguOFxuXHRcdCAqXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBCbG9jayBhdHRyaWJ1dGVzLlxuXHRcdCAqL1xuXHRcdGdldEJsb2NrQXR0cmlidXRlcygpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGJ1dHRvblNpemU6IHtcblx0XHRcdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdFx0XHRkZWZhdWx0OiBkZWZhdWx0cy5idXR0b25TaXplLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRidXR0b25Cb3JkZXJTdHlsZToge1xuXHRcdFx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0XHRcdGRlZmF1bHQ6IGRlZmF1bHRzLmJ1dHRvbkJvcmRlclN0eWxlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRidXR0b25Cb3JkZXJTaXplOiB7XG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdFx0ZGVmYXVsdDogZGVmYXVsdHMuYnV0dG9uQm9yZGVyU2l6ZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0YnV0dG9uQm9yZGVyUmFkaXVzOiB7XG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdFx0ZGVmYXVsdDogZGVmYXVsdHMuYnV0dG9uQm9yZGVyUmFkaXVzLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRidXR0b25CYWNrZ3JvdW5kQ29sb3I6IHtcblx0XHRcdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdFx0XHRkZWZhdWx0OiBkZWZhdWx0cy5idXR0b25CYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJ1dHRvblRleHRDb2xvcjoge1xuXHRcdFx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0XHRcdGRlZmF1bHQ6IGRlZmF1bHRzLmJ1dHRvblRleHRDb2xvcixcblx0XHRcdFx0fSxcblx0XHRcdFx0YnV0dG9uQm9yZGVyQ29sb3I6IHtcblx0XHRcdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdFx0XHRkZWZhdWx0OiBkZWZhdWx0cy5idXR0b25Cb3JkZXJDb2xvcixcblx0XHRcdFx0fSxcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEdldCBCdXR0b24gc3R5bGVzIEpTWCBjb2RlLlxuXHRcdCAqXG5cdFx0ICogQHNpbmNlIDEuOC44XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgICAgICAgICAgICAgIEJsb2NrIHByb3BlcnRpZXMuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGhhbmRsZXJzICAgICAgICAgICBCbG9jayBldmVudCBoYW5kbGVycy5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2l6ZU9wdGlvbnMgICAgICAgIFNpemUgc2VsZWN0b3Igb3B0aW9ucy5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZm9ybVNlbGVjdG9yQ29tbW9uIEZvcm0gc2VsZWN0b3IgY29tbW9uIG9iamVjdC5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gIEJ1dHRvbiBzdHlsZXMgSlNYIGNvZGUuXG5cdFx0ICovXG5cdFx0Z2V0QnV0dG9uU3R5bGVzKCBwcm9wcywgaGFuZGxlcnMsIHNpemVPcHRpb25zLCBmb3JtU2VsZWN0b3JDb21tb24gKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbWF4LWxpbmVzLXBlci1mdW5jdGlvblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFBhbmVsQm9keSBjbGFzc05hbWU9eyBmb3JtU2VsZWN0b3JDb21tb24uZ2V0UGFuZWxDbGFzcyggcHJvcHMgKSB9IHRpdGxlPXsgc3RyaW5ncy5idXR0b25fc3R5bGVzIH0+XG5cdFx0XHRcdFx0PEZsZXggZ2FwPXsgNCB9IGFsaWduPVwiZmxleC1zdGFydFwiIGNsYXNzTmFtZT17ICd3cGZvcm1zLWd1dGVuYmVyZy1mb3JtLXNlbGVjdG9yLWZsZXgnIH0ganVzdGlmeT1cInNwYWNlLWJldHdlZW5cIj5cblx0XHRcdFx0XHRcdDxGbGV4QmxvY2s+XG5cdFx0XHRcdFx0XHRcdDxTZWxlY3RDb250cm9sXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw9eyBzdHJpbmdzLnNpemUgfVxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlPXsgcHJvcHMuYXR0cmlidXRlcy5idXR0b25TaXplIH1cblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zPXsgc2l6ZU9wdGlvbnMgfVxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCB2YWx1ZSApID0+IGhhbmRsZXJzLnN0eWxlQXR0ckNoYW5nZSggJ2J1dHRvblNpemUnLCB2YWx1ZSApIH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvRmxleEJsb2NrPlxuXHRcdFx0XHRcdFx0PEZsZXhCbG9jaz5cblx0XHRcdFx0XHRcdFx0PFNlbGVjdENvbnRyb2xcblx0XHRcdFx0XHRcdFx0XHRsYWJlbD17IHN0cmluZ3MuYm9yZGVyIH1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17IHByb3BzLmF0dHJpYnV0ZXMuYnV0dG9uQm9yZGVyU3R5bGUgfVxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnM9e1xuXHRcdFx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBzdHJpbmdzLm5vbmUsIHZhbHVlOiAnbm9uZScgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogc3RyaW5ncy5zb2xpZCwgdmFsdWU6ICdzb2xpZCcgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogc3RyaW5ncy5kYXNoZWQsIHZhbHVlOiAnZGFzaGVkJyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBzdHJpbmdzLmRvdHRlZCwgdmFsdWU6ICdkb3R0ZWQnIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCB2YWx1ZSApID0+IGhhbmRsZXJzLnN0eWxlQXR0ckNoYW5nZSggJ2J1dHRvbkJvcmRlclN0eWxlJywgdmFsdWUgKSB9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L0ZsZXhCbG9jaz5cblx0XHRcdFx0XHQ8L0ZsZXg+XG5cdFx0XHRcdFx0PEZsZXggZ2FwPXsgNCB9IGFsaWduPVwiZmxleC1zdGFydFwiIGNsYXNzTmFtZT17ICd3cGZvcm1zLWd1dGVuYmVyZy1mb3JtLXNlbGVjdG9yLWZsZXgnIH0ganVzdGlmeT1cInNwYWNlLWJldHdlZW5cIj5cblx0XHRcdFx0XHRcdDxGbGV4QmxvY2s+XG5cdFx0XHRcdFx0XHRcdDxfX2V4cGVyaW1lbnRhbFVuaXRDb250cm9sXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw9eyBzdHJpbmdzLmJvcmRlcl9zaXplIH1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17IHByb3BzLmF0dHJpYnV0ZXMuYnV0dG9uQm9yZGVyU3R5bGUgPT09ICdub25lJyA/ICcnIDogcHJvcHMuYXR0cmlidXRlcy5idXR0b25Cb3JkZXJTaXplIH1cblx0XHRcdFx0XHRcdFx0XHRtaW49eyAwIH1cblx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17IHByb3BzLmF0dHJpYnV0ZXMuYnV0dG9uQm9yZGVyU3R5bGUgPT09ICdub25lJyB9XG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIHZhbHVlICkgPT4gaGFuZGxlcnMuc3R5bGVBdHRyQ2hhbmdlKCAnYnV0dG9uQm9yZGVyU2l6ZScsIHZhbHVlICkgfVxuXHRcdFx0XHRcdFx0XHRcdGlzVW5pdFNlbGVjdFRhYmJhYmxlXG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L0ZsZXhCbG9jaz5cblx0XHRcdFx0XHRcdDxGbGV4QmxvY2s+XG5cdFx0XHRcdFx0XHRcdDxfX2V4cGVyaW1lbnRhbFVuaXRDb250cm9sXG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIHZhbHVlICkgPT4gaGFuZGxlcnMuc3R5bGVBdHRyQ2hhbmdlKCAnYnV0dG9uQm9yZGVyUmFkaXVzJywgdmFsdWUgKSB9XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw9eyBzdHJpbmdzLmJvcmRlcl9yYWRpdXMgfVxuXHRcdFx0XHRcdFx0XHRcdG1pbj17IDAgfVxuXHRcdFx0XHRcdFx0XHRcdGlzVW5pdFNlbGVjdFRhYmJhYmxlXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9eyBwcm9wcy5hdHRyaWJ1dGVzLmJ1dHRvbkJvcmRlclJhZGl1cyB9IC8+XG5cdFx0XHRcdFx0XHQ8L0ZsZXhCbG9jaz5cblx0XHRcdFx0XHQ8L0ZsZXg+XG5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndwZm9ybXMtZ3V0ZW5iZXJnLWZvcm0tc2VsZWN0b3ItY29sb3ItcGlja2VyXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndwZm9ybXMtZ3V0ZW5iZXJnLWZvcm0tc2VsZWN0b3ItY29udHJvbC1sYWJlbFwiPnsgc3RyaW5ncy5jb2xvcnMgfTwvZGl2PlxuXHRcdFx0XHRcdFx0PFBhbmVsQ29sb3JTZXR0aW5nc1xuXHRcdFx0XHRcdFx0XHRfX2V4cGVyaW1lbnRhbElzUmVuZGVyZWRJblNpZGViYXJcblx0XHRcdFx0XHRcdFx0ZW5hYmxlQWxwaGFcblx0XHRcdFx0XHRcdFx0c2hvd1RpdGxlPXsgZmFsc2UgfVxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9eyBmb3JtU2VsZWN0b3JDb21tb24uZ2V0Q29sb3JQYW5lbENsYXNzKCBwcm9wcy5hdHRyaWJ1dGVzLmJ1dHRvbkJvcmRlclN0eWxlICkgfVxuXHRcdFx0XHRcdFx0XHRjb2xvclNldHRpbmdzPXsgW1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBwcm9wcy5hdHRyaWJ1dGVzLmJ1dHRvbkJhY2tncm91bmRDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlOiAoIHZhbHVlICkgPT4gaGFuZGxlcnMuc3R5bGVBdHRyQ2hhbmdlKCAnYnV0dG9uQmFja2dyb3VuZENvbG9yJywgdmFsdWUgKSxcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBzdHJpbmdzLmJhY2tncm91bmQsXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogcHJvcHMuYXR0cmlidXRlcy5idXR0b25Cb3JkZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlOiAoIHZhbHVlICkgPT4gaGFuZGxlcnMuc3R5bGVBdHRyQ2hhbmdlKCAnYnV0dG9uQm9yZGVyQ29sb3InLCB2YWx1ZSApLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHN0cmluZ3MuYm9yZGVyLFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHByb3BzLmF0dHJpYnV0ZXMuYnV0dG9uVGV4dENvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U6ICggdmFsdWUgKSA9PiBoYW5kbGVycy5zdHlsZUF0dHJDaGFuZ2UoICdidXR0b25UZXh0Q29sb3InLCB2YWx1ZSApLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHN0cmluZ3MudGV4dCxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRdIH0gLz5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwid3Bmb3Jtcy1ndXRlbmJlcmctZm9ybS1zZWxlY3Rvci1sZWdlbmQgd3Bmb3Jtcy1idXR0b24tY29sb3Itbm90aWNlXCI+XG5cdFx0XHRcdFx0XHRcdHsgc3RyaW5ncy5idXR0b25fY29sb3Jfbm90aWNlIH1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1BhbmVsQm9keT5cblx0XHRcdCk7XG5cdFx0fSxcblx0fTtcblxuXHRyZXR1cm4gYXBwO1xufSApKCkgKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BLElBQUFBLFFBQUEsR0FBQUMsT0FBQSxDQUFBQyxPQUFBLEdBT21CLFlBQVc7RUFDN0I7QUFDRDtBQUNBO0FBQ0E7QUFDQTtFQUNDLElBQUFDLElBQUEsR0FBK0JDLEVBQUUsQ0FBQ0MsV0FBVyxJQUFJRCxFQUFFLENBQUNFLE1BQU07SUFBbERDLGtCQUFrQixHQUFBSixJQUFBLENBQWxCSSxrQkFBa0I7RUFDMUIsSUFBQUMsY0FBQSxHQUFpRkosRUFBRSxDQUFDSyxVQUFVO0lBQXRGQyxhQUFhLEdBQUFGLGNBQUEsQ0FBYkUsYUFBYTtJQUFFQyxTQUFTLEdBQUFILGNBQUEsQ0FBVEcsU0FBUztJQUFFQyxJQUFJLEdBQUFKLGNBQUEsQ0FBSkksSUFBSTtJQUFFQyxTQUFTLEdBQUFMLGNBQUEsQ0FBVEssU0FBUztJQUFFQyx5QkFBeUIsR0FBQU4sY0FBQSxDQUF6Qk0seUJBQXlCOztFQUU1RTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0VBQ0MsSUFBQUMscUJBQUEsR0FBOEJDLCtCQUErQjtJQUFyREMsT0FBTyxHQUFBRixxQkFBQSxDQUFQRSxPQUFPO0lBQUVDLFFBQVEsR0FBQUgscUJBQUEsQ0FBUkcsUUFBUTs7RUFFekI7RUFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNDLElBQU1DLEdBQUcsR0FBRztJQUVYO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0VDLGtCQUFrQixXQUFBQSxtQkFBQSxFQUFHO01BQ3BCLE9BQU87UUFDTkMsVUFBVSxFQUFFO1VBQ1hDLElBQUksRUFBRSxRQUFRO1VBQ2RwQixPQUFPLEVBQUVnQixRQUFRLENBQUNHO1FBQ25CLENBQUM7UUFDREUsaUJBQWlCLEVBQUU7VUFDbEJELElBQUksRUFBRSxRQUFRO1VBQ2RwQixPQUFPLEVBQUVnQixRQUFRLENBQUNLO1FBQ25CLENBQUM7UUFDREMsZ0JBQWdCLEVBQUU7VUFDakJGLElBQUksRUFBRSxRQUFRO1VBQ2RwQixPQUFPLEVBQUVnQixRQUFRLENBQUNNO1FBQ25CLENBQUM7UUFDREMsa0JBQWtCLEVBQUU7VUFDbkJILElBQUksRUFBRSxRQUFRO1VBQ2RwQixPQUFPLEVBQUVnQixRQUFRLENBQUNPO1FBQ25CLENBQUM7UUFDREMscUJBQXFCLEVBQUU7VUFDdEJKLElBQUksRUFBRSxRQUFRO1VBQ2RwQixPQUFPLEVBQUVnQixRQUFRLENBQUNRO1FBQ25CLENBQUM7UUFDREMsZUFBZSxFQUFFO1VBQ2hCTCxJQUFJLEVBQUUsUUFBUTtVQUNkcEIsT0FBTyxFQUFFZ0IsUUFBUSxDQUFDUztRQUNuQixDQUFDO1FBQ0RDLGlCQUFpQixFQUFFO1VBQ2xCTixJQUFJLEVBQUUsUUFBUTtVQUNkcEIsT0FBTyxFQUFFZ0IsUUFBUSxDQUFDVTtRQUNuQjtNQUNELENBQUM7SUFDRixDQUFDO0lBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0VDLGVBQWUsV0FBQUEsZ0JBQUVDLEtBQUssRUFBRUMsUUFBUSxFQUFFQyxXQUFXLEVBQUVDLGtCQUFrQixFQUFHO01BQUU7TUFDckUsb0JBQ0NDLEtBQUEsQ0FBQUMsYUFBQSxDQUFDeEIsU0FBUztRQUFDeUIsU0FBUyxFQUFHSCxrQkFBa0IsQ0FBQ0ksYUFBYSxDQUFFUCxLQUFNLENBQUc7UUFBQ1EsS0FBSyxFQUFHckIsT0FBTyxDQUFDc0I7TUFBZSxnQkFDakdMLEtBQUEsQ0FBQUMsYUFBQSxDQUFDdkIsSUFBSTtRQUFDNEIsR0FBRyxFQUFHLENBQUc7UUFBQ0MsS0FBSyxFQUFDLFlBQVk7UUFBQ0wsU0FBUyxFQUFHLHNDQUF3QztRQUFDTSxPQUFPLEVBQUM7TUFBZSxnQkFDOUdSLEtBQUEsQ0FBQUMsYUFBQSxDQUFDdEIsU0FBUyxxQkFDVHFCLEtBQUEsQ0FBQUMsYUFBQSxDQUFDekIsYUFBYTtRQUNiaUMsS0FBSyxFQUFHMUIsT0FBTyxDQUFDMkIsSUFBTTtRQUN0QkMsS0FBSyxFQUFHZixLQUFLLENBQUNnQixVQUFVLENBQUN6QixVQUFZO1FBQ3JDMEIsT0FBTyxFQUFHZixXQUFhO1FBQ3ZCZ0IsUUFBUSxFQUFHLFNBQUFBLFNBQUVILEtBQUs7VUFBQSxPQUFNZCxRQUFRLENBQUNrQixlQUFlLENBQUUsWUFBWSxFQUFFSixLQUFNLENBQUM7UUFBQTtNQUFFLENBQ3pFLENBQ1MsQ0FBQyxlQUNaWCxLQUFBLENBQUFDLGFBQUEsQ0FBQ3RCLFNBQVMscUJBQ1RxQixLQUFBLENBQUFDLGFBQUEsQ0FBQ3pCLGFBQWE7UUFDYmlDLEtBQUssRUFBRzFCLE9BQU8sQ0FBQ2lDLE1BQVE7UUFDeEJMLEtBQUssRUFBR2YsS0FBSyxDQUFDZ0IsVUFBVSxDQUFDdkIsaUJBQW1CO1FBQzVDd0IsT0FBTyxFQUNOLENBQ0M7VUFBRUosS0FBSyxFQUFFMUIsT0FBTyxDQUFDa0MsSUFBSTtVQUFFTixLQUFLLEVBQUU7UUFBTyxDQUFDLEVBQ3RDO1VBQUVGLEtBQUssRUFBRTFCLE9BQU8sQ0FBQ21DLEtBQUs7VUFBRVAsS0FBSyxFQUFFO1FBQVEsQ0FBQyxFQUN4QztVQUFFRixLQUFLLEVBQUUxQixPQUFPLENBQUNvQyxNQUFNO1VBQUVSLEtBQUssRUFBRTtRQUFTLENBQUMsRUFDMUM7VUFBRUYsS0FBSyxFQUFFMUIsT0FBTyxDQUFDcUMsTUFBTTtVQUFFVCxLQUFLLEVBQUU7UUFBUyxDQUFDLENBRTNDO1FBQ0RHLFFBQVEsRUFBRyxTQUFBQSxTQUFFSCxLQUFLO1VBQUEsT0FBTWQsUUFBUSxDQUFDa0IsZUFBZSxDQUFFLG1CQUFtQixFQUFFSixLQUFNLENBQUM7UUFBQTtNQUFFLENBQ2hGLENBQ1MsQ0FDTixDQUFDLGVBQ1BYLEtBQUEsQ0FBQUMsYUFBQSxDQUFDdkIsSUFBSTtRQUFDNEIsR0FBRyxFQUFHLENBQUc7UUFBQ0MsS0FBSyxFQUFDLFlBQVk7UUFBQ0wsU0FBUyxFQUFHLHNDQUF3QztRQUFDTSxPQUFPLEVBQUM7TUFBZSxnQkFDOUdSLEtBQUEsQ0FBQUMsYUFBQSxDQUFDdEIsU0FBUyxxQkFDVHFCLEtBQUEsQ0FBQUMsYUFBQSxDQUFDckIseUJBQXlCO1FBQ3pCNkIsS0FBSyxFQUFHMUIsT0FBTyxDQUFDc0MsV0FBYTtRQUM3QlYsS0FBSyxFQUFHZixLQUFLLENBQUNnQixVQUFVLENBQUN2QixpQkFBaUIsS0FBSyxNQUFNLEdBQUcsRUFBRSxHQUFHTyxLQUFLLENBQUNnQixVQUFVLENBQUN0QixnQkFBa0I7UUFDaEdnQyxHQUFHLEVBQUcsQ0FBRztRQUNUQyxRQUFRLEVBQUczQixLQUFLLENBQUNnQixVQUFVLENBQUN2QixpQkFBaUIsS0FBSyxNQUFRO1FBQzFEeUIsUUFBUSxFQUFHLFNBQUFBLFNBQUVILEtBQUs7VUFBQSxPQUFNZCxRQUFRLENBQUNrQixlQUFlLENBQUUsa0JBQWtCLEVBQUVKLEtBQU0sQ0FBQztRQUFBLENBQUU7UUFDL0VhLG9CQUFvQjtNQUFBLENBQ3BCLENBQ1MsQ0FBQyxlQUNaeEIsS0FBQSxDQUFBQyxhQUFBLENBQUN0QixTQUFTLHFCQUNUcUIsS0FBQSxDQUFBQyxhQUFBLENBQUNyQix5QkFBeUI7UUFDekJrQyxRQUFRLEVBQUcsU0FBQUEsU0FBRUgsS0FBSztVQUFBLE9BQU1kLFFBQVEsQ0FBQ2tCLGVBQWUsQ0FBRSxvQkFBb0IsRUFBRUosS0FBTSxDQUFDO1FBQUEsQ0FBRTtRQUNqRkYsS0FBSyxFQUFHMUIsT0FBTyxDQUFDMEMsYUFBZTtRQUMvQkgsR0FBRyxFQUFHLENBQUc7UUFDVEUsb0JBQW9CO1FBQ3BCYixLQUFLLEVBQUdmLEtBQUssQ0FBQ2dCLFVBQVUsQ0FBQ3JCO01BQW9CLENBQUUsQ0FDdEMsQ0FDTixDQUFDLGVBRVBTLEtBQUEsQ0FBQUMsYUFBQTtRQUFLQyxTQUFTLEVBQUM7TUFBOEMsZ0JBQzVERixLQUFBLENBQUFDLGFBQUE7UUFBS0MsU0FBUyxFQUFDO01BQStDLEdBQUduQixPQUFPLENBQUMyQyxNQUFhLENBQUMsZUFDdkYxQixLQUFBLENBQUFDLGFBQUEsQ0FBQzVCLGtCQUFrQjtRQUNsQnNELGlDQUFpQztRQUNqQ0MsV0FBVztRQUNYQyxTQUFTLEVBQUcsS0FBTztRQUNuQjNCLFNBQVMsRUFBR0gsa0JBQWtCLENBQUMrQixrQkFBa0IsQ0FBRWxDLEtBQUssQ0FBQ2dCLFVBQVUsQ0FBQ3ZCLGlCQUFrQixDQUFHO1FBQ3pGMEMsYUFBYSxFQUFHLENBQ2Y7VUFDQ3BCLEtBQUssRUFBRWYsS0FBSyxDQUFDZ0IsVUFBVSxDQUFDcEIscUJBQXFCO1VBQzdDc0IsUUFBUSxFQUFFLFNBQUFBLFNBQUVILEtBQUs7WUFBQSxPQUFNZCxRQUFRLENBQUNrQixlQUFlLENBQUUsdUJBQXVCLEVBQUVKLEtBQU0sQ0FBQztVQUFBO1VBQ2pGRixLQUFLLEVBQUUxQixPQUFPLENBQUNpRDtRQUNoQixDQUFDLEVBQ0Q7VUFDQ3JCLEtBQUssRUFBRWYsS0FBSyxDQUFDZ0IsVUFBVSxDQUFDbEIsaUJBQWlCO1VBQ3pDb0IsUUFBUSxFQUFFLFNBQUFBLFNBQUVILEtBQUs7WUFBQSxPQUFNZCxRQUFRLENBQUNrQixlQUFlLENBQUUsbUJBQW1CLEVBQUVKLEtBQU0sQ0FBQztVQUFBO1VBQzdFRixLQUFLLEVBQUUxQixPQUFPLENBQUNpQztRQUNoQixDQUFDLEVBQ0Q7VUFDQ0wsS0FBSyxFQUFFZixLQUFLLENBQUNnQixVQUFVLENBQUNuQixlQUFlO1VBQ3ZDcUIsUUFBUSxFQUFFLFNBQUFBLFNBQUVILEtBQUs7WUFBQSxPQUFNZCxRQUFRLENBQUNrQixlQUFlLENBQUUsaUJBQWlCLEVBQUVKLEtBQU0sQ0FBQztVQUFBO1VBQzNFRixLQUFLLEVBQUUxQixPQUFPLENBQUNrRDtRQUNoQixDQUFDO01BQ0MsQ0FBRSxDQUFDLGVBQ1BqQyxLQUFBLENBQUFDLGFBQUE7UUFBS0MsU0FBUyxFQUFDO01BQW9FLEdBQ2hGbkIsT0FBTyxDQUFDbUQsbUJBQ04sQ0FDRCxDQUNLLENBQUM7SUFFZDtFQUNELENBQUM7RUFFRCxPQUFPakQsR0FBRztBQUNYLENBQUMsQ0FBRyxDQUFDIn0= },{}],17:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } function 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); } } function _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); }); }; } /* global jconfirm, wpforms_gutenberg_form_selector, Choices, JSX, DOM, WPFormsUtils */ /* jshint es3: false, esversion: 6 */ /** * @param strings.copy_paste_error * @param strings.error_message * @param strings.form_edit * @param strings.form_entries * @param strings.form_keywords * @param strings.form_select * @param strings.form_selected * @param strings.form_settings * @param strings.label_styles * @param strings.other_styles * @param strings.page_break * @param strings.panel_notice_head * @param strings.panel_notice_link * @param strings.panel_notice_link_text * @param strings.panel_notice_text * @param strings.show_description * @param strings.show_title * @param strings.sublabel_hints * @param strings.form_not_available_message * @param urls.entries_url * @param urls.form_url * @param window.wpforms_choicesjs_config * @param wpforms_education.upgrade_bonus * @param wpforms_gutenberg_form_selector.block_empty_url * @param wpforms_gutenberg_form_selector.block_preview_url * @param wpforms_gutenberg_form_selector.get_started_url * @param wpforms_gutenberg_form_selector.is_full_styling * @param wpforms_gutenberg_form_selector.is_modern_markup * @param wpforms_gutenberg_form_selector.logo_url * @param wpforms_gutenberg_form_selector.wpforms_guide */ /** * Gutenberg editor block. * * Common module. * * @since 1.8.8 */ var _default = exports.default = function (document, window, $) { /** * WP core components. * * @since 1.8.8 */ var _wp = wp, _wp$serverSideRender = _wp.serverSideRender, ServerSideRender = _wp$serverSideRender === void 0 ? wp.components.ServerSideRender : _wp$serverSideRender; var _wp$element = wp.element, createElement = _wp$element.createElement, Fragment = _wp$element.Fragment, createInterpolateElement = _wp$element.createInterpolateElement; var registerBlockType = wp.blocks.registerBlockType; var _ref = wp.blockEditor || wp.editor, InspectorControls = _ref.InspectorControls, PanelColorSettings = _ref.PanelColorSettings; var _wp$components = wp.components, SelectControl = _wp$components.SelectControl, ToggleControl = _wp$components.ToggleControl, PanelBody = _wp$components.PanelBody, Placeholder = _wp$components.Placeholder; var __ = wp.i18n.__; /** * Localized data aliases. * * @since 1.8.8 */ var _wpforms_gutenberg_fo = wpforms_gutenberg_form_selector, strings = _wpforms_gutenberg_fo.strings, defaults = _wpforms_gutenberg_fo.defaults, sizes = _wpforms_gutenberg_fo.sizes, urls = _wpforms_gutenberg_fo.urls, isPro = _wpforms_gutenberg_fo.isPro, isLicenseActive = _wpforms_gutenberg_fo.isLicenseActive; var defaultStyleSettings = defaults; // noinspection JSUnusedLocalSymbols /** * WPForms Education script. * * @since 1.8.8 */ var WPFormsEducation = window.WPFormsEducation || {}; // eslint-disable-line no-unused-vars /** * List of forms. * * The default value is localized in FormSelector.php. * * @since 1.8.4 * * @type {Object} */ var formList = wpforms_gutenberg_form_selector.forms; /** * Blocks runtime data. * * @since 1.8.1 * * @type {Object} */ var blocks = {}; /** * Whether it is needed to trigger server rendering. * * @since 1.8.1 * * @type {boolean} */ var triggerServerRender = true; /** * Popup container. * * @since 1.8.3 * * @type {Object} */ var $popup = {}; /** * Track fetch status. * * @since 1.8.4 * * @type {boolean} */ var isFetching = false; /** * Elements holder. * * @since 1.8.8 * * @type {Object} */ var el = {}; /** * Common block attributes. * * @since 1.8.8 * * @type {Object} */ var commonAttributes = { clientId: { type: 'string', default: '' }, formId: { type: 'string', default: defaultStyleSettings.formId }, displayTitle: { type: 'boolean', default: defaultStyleSettings.displayTitle }, displayDesc: { type: 'boolean', default: defaultStyleSettings.displayDesc }, preview: { type: 'boolean' }, theme: { type: 'string', default: defaultStyleSettings.theme }, themeName: { type: 'string', default: defaultStyleSettings.themeName }, labelSize: { type: 'string', default: defaultStyleSettings.labelSize }, labelColor: { type: 'string', default: defaultStyleSettings.labelColor }, labelSublabelColor: { type: 'string', default: defaultStyleSettings.labelSublabelColor }, labelErrorColor: { type: 'string', default: defaultStyleSettings.labelErrorColor }, pageBreakColor: { type: 'string', default: defaultStyleSettings.pageBreakColor }, customCss: { type: 'string', default: defaultStyleSettings.customCss }, copyPasteJsonValue: { type: 'string', default: defaultStyleSettings.copyPasteJsonValue }, pageTitle: { type: 'string', default: defaultStyleSettings.pageTitle } }; /** * Handlers for custom styles settings, defined outside this module. * * @since 1.8.8 * * @type {Object} */ var customStylesHandlers = {}; /** * Dropdown timeout. * * @since 1.8.8 * * @type {number} */ var dropdownTimeout; /** * Whether copy-paste content was generated on edit. * * @since 1.9.1 * * @type {boolean} */ var isCopyPasteGeneratedOnEdit = false; /** * Public functions and properties. * * @since 1.8.1 * * @type {Object} */ var app = { /** * Panel modules. * * @since 1.8.8 * * @type {Object} */ panels: {}, /** * Start the engine. * * @since 1.8.1 * * @param {Object} blockOptions Block options. */ init: function init(blockOptions) { el.$window = $(window); app.panels = blockOptions.panels; app.education = blockOptions.education; app.initDefaults(blockOptions); app.registerBlock(blockOptions); app.initJConfirm(); $(app.ready); }, /** * Document ready. * * @since 1.8.1 */ ready: function ready() { app.events(); }, /** * Events. * * @since 1.8.1 */ events: function events() { el.$window.on('wpformsFormSelectorEdit', _.debounce(app.blockEdit, 250)).on('wpformsFormSelectorFormLoaded', app.formLoaded); }, /** * Init jConfirm. * * @since 1.8.8 */ initJConfirm: function initJConfirm() { // jquery-confirm defaults. jconfirm.defaults = { closeIcon: false, backgroundDismiss: false, escapeKey: true, animationBounce: 1, useBootstrap: false, theme: 'modern', boxWidth: '400px', animateFromElement: false }; }, /** * Get a fresh list of forms via REST-API. * * @since 1.8.4 * * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-api-fetch/ */ getForms: function getForms() { return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() { return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: if (!isFetching) { _context.next = 2; break; } return _context.abrupt("return"); case 2: // Set the flag to true indicating a fetch is in progress. isFetching = true; _context.prev = 3; _context.next = 6; return wp.apiFetch({ path: wpforms_gutenberg_form_selector.route_namespace + 'forms/', method: 'GET', cache: 'no-cache' }); case 6: formList = _context.sent; _context.next = 12; break; case 9: _context.prev = 9; _context.t0 = _context["catch"](3); // eslint-disable-next-line no-console console.error(_context.t0); case 12: _context.prev = 12; isFetching = false; return _context.finish(12); case 15: case "end": return _context.stop(); } }, _callee, null, [[3, 9, 12, 15]]); }))(); }, /** * Open builder popup. * * @since 1.6.2 * * @param {string} clientID Block Client ID. */ openBuilderPopup: function openBuilderPopup(clientID) { if ($.isEmptyObject($popup)) { var _parent = $('#wpwrap'); var canvasIframe = $('iframe[name="editor-canvas"]'); var isFseMode = Boolean(canvasIframe.length); var tmpl = isFseMode ? canvasIframe.contents().find('#wpforms-gutenberg-popup') : $('#wpforms-gutenberg-popup'); _parent.after(tmpl); $popup = _parent.siblings('#wpforms-gutenberg-popup'); } var url = wpforms_gutenberg_form_selector.get_started_url, $iframe = $popup.find('iframe'); app.builderCloseButtonEvent(clientID); $iframe.attr('src', url); $popup.fadeIn(); }, /** * Close button (inside the form builder) click event. * * @since 1.8.3 * * @param {string} clientID Block Client ID. */ builderCloseButtonEvent: function builderCloseButtonEvent(clientID) { $popup.off('wpformsBuilderInPopupClose').on('wpformsBuilderInPopupClose', function (e, action, formId, formTitle) { if (action !== 'saved' || !formId) { return; } // Insert a new block when a new form is created from the popup to update the form list and attributes. var newBlock = wp.blocks.createBlock('wpforms/form-selector', { formId: formId.toString() // Expects string value, make sure we insert string. }); // eslint-disable-next-line camelcase formList = [{ ID: formId, post_title: formTitle }]; // Insert a new block. wp.data.dispatch('core/block-editor').removeBlock(clientID); wp.data.dispatch('core/block-editor').insertBlocks(newBlock); }); }, /** * Register block. * * @since 1.8.1 * * @param {Object} blockOptions Additional block options. */ // eslint-disable-next-line max-lines-per-function registerBlock: function registerBlock(blockOptions) { registerBlockType('wpforms/form-selector', { title: strings.title, description: strings.description, icon: app.getIcon(), keywords: strings.form_keywords, category: 'widgets', attributes: app.getBlockAttributes(), supports: { customClassName: app.hasForms() }, example: { attributes: { preview: true } }, edit: function edit(props) { var attributes = props.attributes; var formOptions = app.getFormOptions(); var handlers = app.getSettingsFieldsHandlers(props); // Store block clientId in attributes. if (!attributes.clientId || !app.isClientIdAttrUnique(props)) { // We just want the client ID to update once. // The block editor doesn't have a fixed block ID, so we need to get it on the initial load, but only once. props.setAttributes({ clientId: props.clientId }); } // Main block settings. var jsx = [app.jsxParts.getMainSettings(attributes, handlers, formOptions)]; // Block preview picture. if (!app.hasForms()) { jsx.push(app.jsxParts.getEmptyFormsPreview(props)); return jsx; } var sizeOptions = app.getSizeOptions(); // Show placeholder when form is not available (trashed, deleted etc.). if (attributes && attributes.formId && app.isFormAvailable(attributes.formId) === false) { // Block placeholder (form selector). jsx.push(app.jsxParts.getBlockPlaceholder(props.attributes, handlers, formOptions)); return jsx; } // Form style settings & block content. if (attributes.formId) { // Subscribe to block events. app.maybeSubscribeToBlockEvents(props, handlers, blockOptions); jsx.push(app.jsxParts.getStyleSettings(props, handlers, sizeOptions, blockOptions), app.jsxParts.getBlockFormContent(props)); if (!isCopyPasteGeneratedOnEdit) { handlers.updateCopyPasteContent(); isCopyPasteGeneratedOnEdit = true; } el.$window.trigger('wpformsFormSelectorEdit', [props]); return jsx; } // Block preview picture. if (attributes.preview) { jsx.push(app.jsxParts.getBlockPreview()); return jsx; } // Block placeholder (form selector). jsx.push(app.jsxParts.getBlockPlaceholder(props.attributes, handlers, formOptions)); return jsx; }, save: function save() { return null; } }); }, /** * Init default style settings. * * @since 1.8.1 * @since 1.8.8 Added blockOptions parameter. * * @param {Object} blockOptions Additional block options. */ initDefaults: function initDefaults() { var blockOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; commonAttributes = _objectSpread(_objectSpread({}, commonAttributes), blockOptions.getCommonAttributes()); customStylesHandlers = blockOptions.setStylesHandlers; ['formId', 'copyPasteJsonValue'].forEach(function (key) { return delete defaultStyleSettings[key]; }); }, /** * Check if the site has forms. * * @since 1.8.3 * * @return {boolean} Whether site has at least one form. */ hasForms: function hasForms() { return formList.length > 0; }, /** * Check if form is available to be previewed. * * @since 1.8.9 * * @param {number} formId Form ID. * * @return {boolean} Whether form is available. */ isFormAvailable: function isFormAvailable(formId) { return formList.find(function (_ref2) { var ID = _ref2.ID; return ID === Number(formId); }) !== undefined; }, /** * Set triggerServerRender flag. * * @since 1.8.8 * * @param {boolean} $flag The value of the triggerServerRender flag. */ setTriggerServerRender: function setTriggerServerRender($flag) { triggerServerRender = Boolean($flag); }, /** * Maybe subscribe to block events. * * @since 1.8.8 * * @param {Object} subscriberProps Subscriber block properties. * @param {Object} subscriberHandlers Subscriber block event handlers. * @param {Object} subscriberBlockOptions Subscriber block options. */ maybeSubscribeToBlockEvents: function maybeSubscribeToBlockEvents(subscriberProps, subscriberHandlers, subscriberBlockOptions) { var id = subscriberProps.clientId; // Unsubscribe from block events. // This is needed to avoid multiple subscriptions when the block is re-rendered. el.$window.off('wpformsFormSelectorDeleteTheme.' + id).off('wpformsFormSelectorUpdateTheme.' + id).off('wpformsFormSelectorSetTheme.' + id); // Subscribe to block events. el.$window.on('wpformsFormSelectorDeleteTheme.' + id, app.subscriberDeleteTheme(subscriberProps, subscriberBlockOptions)).on('wpformsFormSelectorUpdateTheme.' + id, app.subscriberUpdateTheme(subscriberProps, subscriberBlockOptions)).on('wpformsFormSelectorSetTheme.' + id, app.subscriberSetTheme(subscriberProps, subscriberBlockOptions)); }, /** * Block event `wpformsFormSelectorDeleteTheme` handler. * * @since 1.8.8 * * @param {Object} subscriberProps Subscriber block properties * @param {Object} subscriberBlockOptions Subscriber block options. * * @return {Function} Event handler. */ subscriberDeleteTheme: function subscriberDeleteTheme(subscriberProps, subscriberBlockOptions) { return function (e, themeSlug, triggerProps) { var _subscriberProps$attr, _subscriberBlockOptio; if (subscriberProps.clientId === triggerProps.clientId) { return; } if ((subscriberProps === null || subscriberProps === void 0 || (_subscriberProps$attr = subscriberProps.attributes) === null || _subscriberProps$attr === void 0 ? void 0 : _subscriberProps$attr.theme) !== themeSlug) { return; } if (!(subscriberBlockOptions !== null && subscriberBlockOptions !== void 0 && (_subscriberBlockOptio = subscriberBlockOptions.panels) !== null && _subscriberBlockOptio !== void 0 && _subscriberBlockOptio.themes)) { return; } // Reset theme to default one. subscriberBlockOptions.panels.themes.setBlockTheme(subscriberProps, 'default'); }; }, /** * Block event `wpformsFormSelectorDeleteTheme` handler. * * @since 1.8.8 * * @param {Object} subscriberProps Subscriber block properties * @param {Object} subscriberBlockOptions Subscriber block options. * * @return {Function} Event handler. */ subscriberUpdateTheme: function subscriberUpdateTheme(subscriberProps, subscriberBlockOptions) { return function (e, themeSlug, themeData, triggerProps) { var _subscriberProps$attr2, _subscriberBlockOptio2; if (subscriberProps.clientId === triggerProps.clientId) { return; } if ((subscriberProps === null || subscriberProps === void 0 || (_subscriberProps$attr2 = subscriberProps.attributes) === null || _subscriberProps$attr2 === void 0 ? void 0 : _subscriberProps$attr2.theme) !== themeSlug) { return; } if (!(subscriberBlockOptions !== null && subscriberBlockOptions !== void 0 && (_subscriberBlockOptio2 = subscriberBlockOptions.panels) !== null && _subscriberBlockOptio2 !== void 0 && _subscriberBlockOptio2.themes)) { return; } // Reset theme to default one. subscriberBlockOptions.panels.themes.setBlockTheme(subscriberProps, themeSlug); }; }, /** * Block event `wpformsFormSelectorSetTheme` handler. * * @since 1.8.8 * * @param {Object} subscriberProps Subscriber block properties * @param {Object} subscriberBlockOptions Subscriber block options. * * @return {Function} Event handler. */ subscriberSetTheme: function subscriberSetTheme(subscriberProps, subscriberBlockOptions) { // noinspection JSUnusedLocalSymbols return function (e, block, themeSlug, triggerProps) { var _subscriberBlockOptio3; // eslint-disable-line no-unused-vars if (subscriberProps.clientId === triggerProps.clientId) { return; } if (!(subscriberBlockOptions !== null && subscriberBlockOptions !== void 0 && (_subscriberBlockOptio3 = subscriberBlockOptions.panels) !== null && _subscriberBlockOptio3 !== void 0 && _subscriberBlockOptio3.themes)) { return; } // Set theme. subscriberBlockOptions.panels.background.onSetTheme(subscriberProps); }; }, /** * Block JSX parts. * * @since 1.8.1 * * @type {Object} */ jsxParts: { /** * Get main settings JSX code. * * @since 1.8.1 * * @param {Object} attributes Block attributes. * @param {Object} handlers Block event handlers. * @param {Object} formOptions Form selector options. * * @return {JSX.Element} Main setting JSX code. */ getMainSettings: function getMainSettings(attributes, handlers, formOptions) { if (!app.hasForms()) { return app.jsxParts.printEmptyFormsNotice(attributes.clientId); } return /*#__PURE__*/React.createElement(InspectorControls, { key: "wpforms-gutenberg-form-selector-inspector-main-settings" }, /*#__PURE__*/React.createElement(PanelBody, { className: "wpforms-gutenberg-panel wpforms-gutenberg-panel-form-settings", title: strings.form_settings }, /*#__PURE__*/React.createElement(SelectControl, { label: strings.form_selected, value: attributes.formId, options: formOptions, onChange: function onChange(value) { return handlers.attrChange('formId', value); } }), attributes.formId ? /*#__PURE__*/React.createElement("p", { className: "wpforms-gutenberg-form-selector-actions" }, /*#__PURE__*/React.createElement("a", { href: urls.form_url.replace('{ID}', attributes.formId), rel: "noreferrer", target: "_blank" }, strings.form_edit), isPro && isLicenseActive && /*#__PURE__*/React.createElement(React.Fragment, null, "\xA0\xA0|\xA0\xA0", /*#__PURE__*/React.createElement("a", { href: urls.entries_url.replace('{ID}', attributes.formId), rel: "noreferrer", target: "_blank" }, strings.form_entries))) : null, /*#__PURE__*/React.createElement(ToggleControl, { label: strings.show_title, checked: attributes.displayTitle, onChange: function onChange(value) { return handlers.attrChange('displayTitle', value); } }), /*#__PURE__*/React.createElement(ToggleControl, { label: strings.show_description, checked: attributes.displayDesc, onChange: function onChange(value) { return handlers.attrChange('displayDesc', value); } }), /*#__PURE__*/React.createElement("p", { className: "wpforms-gutenberg-panel-notice" }, /*#__PURE__*/React.createElement("strong", null, strings.panel_notice_head), strings.panel_notice_text, /*#__PURE__*/React.createElement("a", { href: strings.panel_notice_link, rel: "noreferrer", target: "_blank" }, strings.panel_notice_link_text)))); }, /** * Print empty forms notice. * * @since 1.8.3 * * @param {string} clientId Block client ID. * * @return {JSX.Element} Field styles JSX code. */ printEmptyFormsNotice: function printEmptyFormsNotice(clientId) { return /*#__PURE__*/React.createElement(InspectorControls, { key: "wpforms-gutenberg-form-selector-inspector-main-settings" }, /*#__PURE__*/React.createElement(PanelBody, { className: "wpforms-gutenberg-panel", title: strings.form_settings }, /*#__PURE__*/React.createElement("p", { className: "wpforms-gutenberg-panel-notice wpforms-warning wpforms-empty-form-notice", style: { display: 'block' } }, /*#__PURE__*/React.createElement("strong", null, __('You haven’t created a form, yet!', 'wpforms-lite')), __('What are you waiting for?', 'wpforms-lite')), /*#__PURE__*/React.createElement("button", { type: "button", className: "get-started-button components-button is-secondary", onClick: function onClick() { app.openBuilderPopup(clientId); } }, __('Get Started', 'wpforms-lite')))); }, /** * Get Label styles JSX code. * * @since 1.8.1 * * @param {Object} props Block properties. * @param {Object} handlers Block event handlers. * @param {Object} sizeOptions Size selector options. * * @return {Object} Label styles JSX code. */ getLabelStyles: function getLabelStyles(props, handlers, sizeOptions) { return /*#__PURE__*/React.createElement(PanelBody, { className: app.getPanelClass(props), title: strings.label_styles }, /*#__PURE__*/React.createElement(SelectControl, { label: strings.size, value: props.attributes.labelSize, className: "wpforms-gutenberg-form-selector-fix-bottom-margin", options: sizeOptions, onChange: function onChange(value) { return handlers.styleAttrChange('labelSize', value); } }), /*#__PURE__*/React.createElement("div", { className: "wpforms-gutenberg-form-selector-color-picker" }, /*#__PURE__*/React.createElement("div", { className: "wpforms-gutenberg-form-selector-control-label" }, strings.colors), /*#__PURE__*/React.createElement(PanelColorSettings, { __experimentalIsRenderedInSidebar: true, enableAlpha: true, showTitle: false, className: "wpforms-gutenberg-form-selector-color-panel", colorSettings: [{ value: props.attributes.labelColor, onChange: function onChange(value) { return handlers.styleAttrChange('labelColor', value); }, label: strings.label }, { value: props.attributes.labelSublabelColor, onChange: function onChange(value) { return handlers.styleAttrChange('labelSublabelColor', value); }, label: strings.sublabel_hints.replace('&', '&') }, { value: props.attributes.labelErrorColor, onChange: function onChange(value) { return handlers.styleAttrChange('labelErrorColor', value); }, label: strings.error_message }] }))); }, /** * Get Page Indicator styles JSX code. * * @since 1.8.7 * * @param {Object} props Block properties. * @param {Object} handlers Block event handlers. * * @return {Object} Page Indicator styles JSX code. */ getPageIndicatorStyles: function getPageIndicatorStyles(props, handlers) { // eslint-disable-line complexity var hasPageBreak = app.hasPageBreak(formList, props.attributes.formId); var hasRating = app.hasRating(formList, props.attributes.formId); if (!hasPageBreak && !hasRating) { return null; } var label = ''; if (hasPageBreak && hasRating) { label = "".concat(strings.page_break, " / ").concat(strings.rating); } else if (hasPageBreak) { label = strings.page_break; } else if (hasRating) { label = strings.rating; } return /*#__PURE__*/React.createElement(PanelBody, { className: app.getPanelClass(props), title: strings.other_styles }, /*#__PURE__*/React.createElement("div", { className: "wpforms-gutenberg-form-selector-color-picker" }, /*#__PURE__*/React.createElement("div", { className: "wpforms-gutenberg-form-selector-control-label" }, strings.colors), /*#__PURE__*/React.createElement(PanelColorSettings, { __experimentalIsRenderedInSidebar: true, enableAlpha: true, showTitle: false, className: "wpforms-gutenberg-form-selector-color-panel", colorSettings: [{ value: props.attributes.pageBreakColor, onChange: function onChange(value) { return handlers.styleAttrChange('pageBreakColor', value); }, label: label }] }))); }, /** * Get style settings JSX code. * * @since 1.8.1 * * @param {Object} props Block properties. * @param {Object} handlers Block event handlers. * @param {Object} sizeOptions Size selector options. * @param {Object} blockOptions Block options loaded from external modules. * * @return {Object} Inspector controls JSX code. */ getStyleSettings: function getStyleSettings(props, handlers, sizeOptions, blockOptions) { return /*#__PURE__*/React.createElement(InspectorControls, { key: "wpforms-gutenberg-form-selector-style-settings" }, blockOptions.getThemesPanel(props, app, blockOptions.stockPhotos), blockOptions.getFieldStyles(props, handlers, sizeOptions, app), app.jsxParts.getLabelStyles(props, handlers, sizeOptions), blockOptions.getButtonStyles(props, handlers, sizeOptions, app), blockOptions.getContainerStyles(props, handlers, app), blockOptions.getBackgroundStyles(props, handlers, app, blockOptions.stockPhotos), app.jsxParts.getPageIndicatorStyles(props, handlers)); }, /** * Get block content JSX code. * * @since 1.8.1 * * @param {Object} props Block properties. * * @return {JSX.Element} Block content JSX code. */ getBlockFormContent: function getBlockFormContent(props) { if (triggerServerRender) { props.attributes.pageTitle = app.getPageTitle(); return /*#__PURE__*/React.createElement(ServerSideRender, { key: "wpforms-gutenberg-form-selector-server-side-renderer", block: "wpforms/form-selector", attributes: props.attributes }); } var clientId = props.clientId; var block = app.getBlockContainer(props); // In the case of empty content, use server side renderer. // This happens when the block is duplicated or converted to a reusable block. if (!(block !== null && block !== void 0 && block.innerHTML)) { triggerServerRender = true; return app.jsxParts.getBlockFormContent(props); } blocks[clientId] = blocks[clientId] || {}; blocks[clientId].blockHTML = block.innerHTML; blocks[clientId].loadedFormId = props.attributes.formId; return /*#__PURE__*/React.createElement(Fragment, { key: "wpforms-gutenberg-form-selector-fragment-form-html" }, /*#__PURE__*/React.createElement("div", { dangerouslySetInnerHTML: { __html: blocks[clientId].blockHTML } })); }, /** * Get block preview JSX code. * * @since 1.8.1 * * @return {JSX.Element} Block preview JSX code. */ getBlockPreview: function getBlockPreview() { return /*#__PURE__*/React.createElement(Fragment, { key: "wpforms-gutenberg-form-selector-fragment-block-preview" }, /*#__PURE__*/React.createElement("img", { src: wpforms_gutenberg_form_selector.block_preview_url, style: { width: '100%' }, alt: "" })); }, /** * Get block empty JSX code. * * @since 1.8.3 * * @param {Object} props Block properties. * @return {JSX.Element} Block empty JSX code. */ getEmptyFormsPreview: function getEmptyFormsPreview(props) { var clientId = props.clientId; return /*#__PURE__*/React.createElement(Fragment, { key: "wpforms-gutenberg-form-selector-fragment-block-empty" }, /*#__PURE__*/React.createElement("div", { className: "wpforms-no-form-preview" }, /*#__PURE__*/React.createElement("img", { src: wpforms_gutenberg_form_selector.block_empty_url, alt: "" }), /*#__PURE__*/React.createElement("p", null, createInterpolateElement(__('You can use WPForms to build contact forms, surveys, payment forms, and more with just a few clicks.', 'wpforms-lite'), { b: /*#__PURE__*/React.createElement("strong", null) })), /*#__PURE__*/React.createElement("button", { type: "button", className: "get-started-button components-button is-primary", onClick: function onClick() { app.openBuilderPopup(clientId); } }, __('Get Started', 'wpforms-lite')), /*#__PURE__*/React.createElement("p", { className: "empty-desc" }, createInterpolateElement(__('Need some help? Check out our comprehensive guide.', 'wpforms-lite'), { // eslint-disable-next-line jsx-a11y/anchor-has-content a: /*#__PURE__*/React.createElement("a", { href: wpforms_gutenberg_form_selector.wpforms_guide, target: "_blank", rel: "noopener noreferrer" }) })), /*#__PURE__*/React.createElement("div", { id: "wpforms-gutenberg-popup", className: "wpforms-builder-popup" }, /*#__PURE__*/React.createElement("iframe", { src: "about:blank", width: "100%", height: "100%", id: "wpforms-builder-iframe", title: "WPForms Builder Popup" })))); }, /** * Get block placeholder (form selector) JSX code. * * @since 1.8.1 * * @param {Object} attributes Block attributes. * @param {Object} handlers Block event handlers. * @param {Object} formOptions Form selector options. * * @return {JSX.Element} Block placeholder JSX code. */ getBlockPlaceholder: function getBlockPlaceholder(attributes, handlers, formOptions) { var isFormNotAvailable = attributes.formId && !app.isFormAvailable(attributes.formId); return /*#__PURE__*/React.createElement(Placeholder, { key: "wpforms-gutenberg-form-selector-wrap", className: "wpforms-gutenberg-form-selector-wrap" }, /*#__PURE__*/React.createElement("img", { src: wpforms_gutenberg_form_selector.logo_url, alt: "" }), isFormNotAvailable && /*#__PURE__*/React.createElement("p", { style: { textAlign: 'center', marginTop: '0' } }, strings.form_not_available_message), /*#__PURE__*/React.createElement(SelectControl, { key: "wpforms-gutenberg-form-selector-select-control", value: attributes.formId, options: formOptions, onChange: function onChange(value) { return handlers.attrChange('formId', value); } })); } }, /** * Determine if the form has a Page Break field. * * @since 1.8.7 * * @param {Object} forms The forms' data object. * @param {number|string} formId Form ID. * * @return {boolean} True when the form has a Page Break field, false otherwise. */ hasPageBreak: function hasPageBreak(forms, formId) { var _JSON$parse; var currentForm = forms.find(function (form) { return parseInt(form.ID, 10) === parseInt(formId, 10); }); if (!currentForm.post_content) { return false; } var fields = (_JSON$parse = JSON.parse(currentForm.post_content)) === null || _JSON$parse === void 0 ? void 0 : _JSON$parse.fields; return Object.values(fields).some(function (field) { return field.type === 'pagebreak'; }); }, hasRating: function hasRating(forms, formId) { var _JSON$parse2; var currentForm = forms.find(function (form) { return parseInt(form.ID, 10) === parseInt(formId, 10); }); if (!currentForm.post_content || !isPro || !isLicenseActive) { return false; } var fields = (_JSON$parse2 = JSON.parse(currentForm.post_content)) === null || _JSON$parse2 === void 0 ? void 0 : _JSON$parse2.fields; return Object.values(fields).some(function (field) { return field.type === 'rating'; }); }, /** * Get Style Settings panel class. * * @since 1.8.1 * * @param {Object} props Block properties. * * @return {string} Style Settings panel class. */ getPanelClass: function getPanelClass(props) { var cssClass = 'wpforms-gutenberg-panel wpforms-block-settings-' + props.clientId; if (!app.isFullStylingEnabled()) { cssClass += ' disabled_panel'; } return cssClass; }, /** * Get color panel settings CSS class. * * @since 1.8.8 * * @param {string} borderStyle Border style value. * * @return {string} Style Settings panel class. */ getColorPanelClass: function getColorPanelClass(borderStyle) { var cssClass = 'wpforms-gutenberg-form-selector-color-panel'; if (borderStyle === 'none') { cssClass += ' wpforms-gutenberg-form-selector-border-color-disabled'; } return cssClass; }, /** * Determine whether the full styling is enabled. * * @since 1.8.1 * * @return {boolean} Whether the full styling is enabled. */ isFullStylingEnabled: function isFullStylingEnabled() { return wpforms_gutenberg_form_selector.is_modern_markup && wpforms_gutenberg_form_selector.is_full_styling; }, /** * Determine whether the block has lead forms enabled. * * @since 1.9.0 * * @param {Object} block Gutenberg block * * @return {boolean} Whether the block has lead forms enabled */ isLeadFormsEnabled: function isLeadFormsEnabled(block) { if (!block) { return false; } var $form = $(block.querySelector('.wpforms-container')); return $form.hasClass('wpforms-lead-forms-container'); }, /** * Get block container DOM element. * * @since 1.8.1 * * @param {Object} props Block properties. * * @return {Element} Block container. */ getBlockContainer: function getBlockContainer(props) { var blockSelector = "#block-".concat(props.clientId, " > div"); var block = document.querySelector(blockSelector); // For FSE / Gutenberg plugin, we need to take a look inside the iframe. if (!block) { var editorCanvas = document.querySelector('iframe[name="editor-canvas"]'); block = editorCanvas === null || editorCanvas === void 0 ? void 0 : editorCanvas.contentWindow.document.querySelector(blockSelector); } return block; }, /** * Update CSS variable(s) value(s) of the given attribute for given container on the preview. * * @since 1.8.8 * * @param {string} attribute Style attribute: field-size, label-size, button-size, etc. * @param {string} value Property new value. * @param {Element} container Form container. * @param {Object} props Block properties. */ updatePreviewCSSVarValue: function updatePreviewCSSVarValue(attribute, value, container, props) { // eslint-disable-line complexity, max-lines-per-function if (!container || !attribute) { return; } var property = attribute.replace(/[A-Z]/g, function (letter) { return "-".concat(letter.toLowerCase()); }); if (typeof customStylesHandlers[property] === 'function') { customStylesHandlers[property](container, value); return; } switch (property) { case 'field-size': case 'label-size': case 'button-size': case 'container-shadow-size': for (var key in sizes[property][value]) { container.style.setProperty("--wpforms-".concat(property, "-").concat(key), sizes[property][value][key]); } break; case 'field-border-style': if (value === 'none') { app.toggleFieldBorderNoneCSSVarValue(container, true); } else { app.toggleFieldBorderNoneCSSVarValue(container, false); container.style.setProperty("--wpforms-".concat(property), value); } break; case 'button-background-color': app.maybeUpdateAccentColor(props.attributes.buttonBorderColor, value, container); value = app.maybeSetButtonAltBackgroundColor(value, props.attributes.buttonBorderColor, container); app.maybeSetButtonAltTextColor(props.attributes.buttonTextColor, value, props.attributes.buttonBorderColor, container); container.style.setProperty("--wpforms-".concat(property), value); break; case 'button-border-color': app.maybeUpdateAccentColor(value, props.attributes.buttonBackgroundColor, container); app.maybeSetButtonAltTextColor(props.attributes.buttonTextColor, props.attributes.buttonBackgroundColor, value, container); container.style.setProperty("--wpforms-".concat(property), value); break; case 'button-text-color': app.maybeSetButtonAltTextColor(value, props.attributes.buttonBackgroundColor, props.attributes.buttonBorderColor, container); container.style.setProperty("--wpforms-".concat(property), value); break; default: container.style.setProperty("--wpforms-".concat(property), value); container.style.setProperty("--wpforms-".concat(property, "-spare"), value); } }, /** * Set/unset field border vars in case of border-style is none. * * @since 1.8.8 * * @param {Object} container Form container. * @param {boolean} set True when set, false when unset. */ toggleFieldBorderNoneCSSVarValue: function toggleFieldBorderNoneCSSVarValue(container, set) { var cont = container.querySelector('form'); if (set) { cont.style.setProperty('--wpforms-field-border-style', 'solid'); cont.style.setProperty('--wpforms-field-border-size', '1px'); cont.style.setProperty('--wpforms-field-border-color', 'transparent'); return; } cont.style.setProperty('--wpforms-field-border-style', null); cont.style.setProperty('--wpforms-field-border-size', null); cont.style.setProperty('--wpforms-field-border-color', null); }, /** * Maybe set the button's alternative background color. * * @since 1.8.8 * * @param {string} value Attribute value. * @param {string} buttonBorderColor Button border color. * @param {Object} container Form container. * * @return {string|*} New background color. */ maybeSetButtonAltBackgroundColor: function maybeSetButtonAltBackgroundColor(value, buttonBorderColor, container) { // Setting css property value to child `form` element overrides the parent property value. var form = container.querySelector('form'); form.style.setProperty('--wpforms-button-background-color-alt', value); if (WPFormsUtils.cssColorsUtils.isTransparentColor(value)) { return WPFormsUtils.cssColorsUtils.isTransparentColor(buttonBorderColor) ? defaultStyleSettings.buttonBackgroundColor : buttonBorderColor; } return value; }, /** * Maybe set the button's alternative text color. * * @since 1.8.8 * * @param {string} value Attribute value. * @param {string} buttonBackgroundColor Button background color. * @param {string} buttonBorderColor Button border color. * @param {Object} container Form container. */ maybeSetButtonAltTextColor: function maybeSetButtonAltTextColor(value, buttonBackgroundColor, buttonBorderColor, container) { var form = container.querySelector('form'); var altColor = null; value = value.toLowerCase(); if (WPFormsUtils.cssColorsUtils.isTransparentColor(value) || value === buttonBackgroundColor || WPFormsUtils.cssColorsUtils.isTransparentColor(buttonBackgroundColor) && value === buttonBorderColor) { altColor = WPFormsUtils.cssColorsUtils.getContrastColor(buttonBackgroundColor); } container.style.setProperty("--wpforms-button-text-color-alt", value); form.style.setProperty("--wpforms-button-text-color-alt", altColor); }, /** * Maybe update accent color. * * @since 1.8.8 * * @param {string} color Color value. * @param {string} buttonBackgroundColor Button background color. * @param {Object} container Form container. */ maybeUpdateAccentColor: function maybeUpdateAccentColor(color, buttonBackgroundColor, container) { // Setting css property value to child `form` element overrides the parent property value. var form = container.querySelector('form'); // Fallback to default color if the border color is transparent. color = WPFormsUtils.cssColorsUtils.isTransparentColor(color) ? defaultStyleSettings.buttonBackgroundColor : color; if (WPFormsUtils.cssColorsUtils.isTransparentColor(buttonBackgroundColor)) { form.style.setProperty('--wpforms-button-background-color-alt', 'rgba( 0, 0, 0, 0 )'); form.style.setProperty('--wpforms-button-background-color', color); } else { container.style.setProperty('--wpforms-button-background-color-alt', buttonBackgroundColor); form.style.setProperty('--wpforms-button-background-color-alt', null); form.style.setProperty('--wpforms-button-background-color', null); } }, /** * Get settings fields event handlers. * * @since 1.8.1 * * @param {Object} props Block properties. * * @return {Object} Object that contains event handlers for the settings fields. */ getSettingsFieldsHandlers: function getSettingsFieldsHandlers(props) { // eslint-disable-line max-lines-per-function return { /** * Field style attribute change event handler. * * @since 1.8.1 * * @param {string} attribute Attribute name. * @param {string} value New attribute value. */ styleAttrChange: function styleAttrChange(attribute, value) { var block = app.getBlockContainer(props), container = block.querySelector("#wpforms-".concat(props.attributes.formId)), setAttr = {}; // Unset the color means setting the transparent color. if (attribute.includes('Color')) { var _value; value = (_value = value) !== null && _value !== void 0 ? _value : 'rgba( 0, 0, 0, 0 )'; } app.updatePreviewCSSVarValue(attribute, value, container, props); setAttr[attribute] = value; app.setBlockRuntimeStateVar(props.clientId, 'prevAttributesState', props.attributes); props.setAttributes(setAttr); triggerServerRender = false; this.updateCopyPasteContent(); app.panels.themes.updateCustomThemeAttribute(attribute, value, props); this.maybeToggleDropdown(props, attribute); // Trigger event for developers. el.$window.trigger('wpformsFormSelectorStyleAttrChange', [block, props, attribute, value]); }, /** * Handles the toggling of the dropdown menu's visibility. * * @since 1.8.8 * * @param {Object} props The block properties. * @param {string} attribute The name of the attribute being changed. */ maybeToggleDropdown: function maybeToggleDropdown(props, attribute) { var _this = this; // eslint-disable-line no-shadow var formId = props.attributes.formId; var menu = document.querySelector("#wpforms-form-".concat(formId, " .choices__list.choices__list--dropdown")); var classicMenu = document.querySelector("#wpforms-form-".concat(formId, " .wpforms-field-select-style-classic select")); if (attribute === 'fieldMenuColor') { if (menu) { menu.classList.add('is-active'); menu.parentElement.classList.add('is-open'); } else { this.showClassicMenu(classicMenu); } clearTimeout(dropdownTimeout); dropdownTimeout = setTimeout(function () { var toClose = document.querySelector("#wpforms-form-".concat(formId, " .choices__list.choices__list--dropdown")); if (toClose) { toClose.classList.remove('is-active'); toClose.parentElement.classList.remove('is-open'); } else { _this.hideClassicMenu(document.querySelector("#wpforms-form-".concat(formId, " .wpforms-field-select-style-classic select"))); } }, 5000); } else if (menu) { menu.classList.remove('is-active'); } else { this.hideClassicMenu(classicMenu); } }, /** * Shows the classic menu. * * @since 1.8.8 * * @param {Object} classicMenu The classic menu. */ showClassicMenu: function showClassicMenu(classicMenu) { if (!classicMenu) { return; } classicMenu.size = 2; classicMenu.style.cssText = 'padding-top: 40px; padding-inline-end: 0; padding-inline-start: 0; position: relative;'; classicMenu.querySelectorAll('option').forEach(function (option) { option.style.cssText = 'border-left: 1px solid #8c8f94; border-right: 1px solid #8c8f94; padding: 0 10px; z-index: 999999; position: relative;'; }); classicMenu.querySelector('option:last-child').style.cssText = 'border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; padding: 0 10px; border-left: 1px solid #8c8f94; border-right: 1px solid #8c8f94; border-bottom: 1px solid #8c8f94; z-index: 999999; position: relative;'; }, /** * Hides the classic menu. * * @since 1.8.8 * * @param {Object} classicMenu The classic menu. */ hideClassicMenu: function hideClassicMenu(classicMenu) { if (!classicMenu) { return; } classicMenu.size = 0; classicMenu.style.cssText = 'padding-top: 0; padding-inline-end: 24px; padding-inline-start: 12px; position: relative;'; classicMenu.querySelectorAll('option').forEach(function (option) { option.style.cssText = 'border: none;'; }); }, /** * Field regular attribute change event handler. * * @since 1.8.1 * * @param {string} attribute Attribute name. * @param {string} value New attribute value. */ attrChange: function attrChange(attribute, value) { var setAttr = {}; setAttr[attribute] = value; app.setBlockRuntimeStateVar(props.clientId, 'prevAttributesState', props.attributes); props.setAttributes(setAttr); triggerServerRender = true; this.updateCopyPasteContent(); }, /** * Update content of the "Copy/Paste" fields. * * @since 1.8.1 */ updateCopyPasteContent: function updateCopyPasteContent() { var content = {}; var atts = wp.data.select('core/block-editor').getBlockAttributes(props.clientId); for (var key in defaultStyleSettings) { content[key] = atts[key]; } props.setAttributes({ copyPasteJsonValue: JSON.stringify(content) }); }, /** * Paste settings handler. * * @since 1.8.1 * * @param {string} value New attribute value. */ pasteSettings: function pasteSettings(value) { value = value.trim(); var pasteAttributes = app.parseValidateJson(value); if (!pasteAttributes) { wp.data.dispatch('core/notices').createErrorNotice(strings.copy_paste_error, { id: 'wpforms-json-parse-error' }); this.updateCopyPasteContent(); return; } pasteAttributes.copyPasteJsonValue = value; var themeSlug = app.panels.themes.maybeCreateCustomThemeFromAttributes(pasteAttributes); app.setBlockRuntimeStateVar(props.clientId, 'prevAttributesState', props.attributes); props.setAttributes(pasteAttributes); app.panels.themes.setBlockTheme(props, themeSlug); triggerServerRender = false; } }; }, /** * Parse and validate JSON string. * * @since 1.8.1 * * @param {string} value JSON string. * * @return {boolean|object} Parsed JSON object OR false on error. */ parseValidateJson: function parseValidateJson(value) { if (typeof value !== 'string') { return false; } var atts; try { atts = JSON.parse(value.trim()); } catch (error) { atts = false; } return atts; }, /** * Get WPForms icon DOM element. * * @since 1.8.1 * * @return {DOM.element} WPForms icon DOM element. */ getIcon: function getIcon() { return createElement('svg', { width: 20, height: 20, viewBox: '0 0 612 612', className: 'dashicon' }, createElement('path', { fill: 'currentColor', d: 'M544,0H68C30.445,0,0,30.445,0,68v476c0,37.556,30.445,68,68,68h476c37.556,0,68-30.444,68-68V68 C612,30.445,581.556,0,544,0z M464.44,68L387.6,120.02L323.34,68H464.44z M288.66,68l-64.26,52.02L147.56,68H288.66z M544,544H68 V68h22.1l136,92.14l79.9-64.6l79.56,64.6l136-92.14H544V544z M114.24,263.16h95.88v-48.28h-95.88V263.16z M114.24,360.4h95.88 v-48.62h-95.88V360.4z M242.76,360.4h255v-48.62h-255V360.4L242.76,360.4z M242.76,263.16h255v-48.28h-255V263.16L242.76,263.16z M368.22,457.3h129.54V408H368.22V457.3z' })); }, /** * Get WPForms blocks. * * @since 1.8.8 * * @return {Array} Blocks array. */ getWPFormsBlocks: function getWPFormsBlocks() { var wpformsBlocks = wp.data.select('core/block-editor').getBlocks(); return wpformsBlocks.filter(function (props) { return props.name === 'wpforms/form-selector'; }); }, /** * Get WPForms blocks. * * @since 1.8.8 * * @param {Object} props Block properties. * * @return {Object} Block attributes. */ isClientIdAttrUnique: function isClientIdAttrUnique(props) { var wpformsBlocks = app.getWPFormsBlocks(); for (var key in wpformsBlocks) { // Skip the current block. if (wpformsBlocks[key].clientId === props.clientId) { continue; } if (wpformsBlocks[key].attributes.clientId === props.attributes.clientId) { return false; } } return true; }, /** * Get block attributes. * * @since 1.8.1 * * @return {Object} Block attributes. */ getBlockAttributes: function getBlockAttributes() { // Update pageTitle attribute. commonAttributes.pageTitle.default = app.getPageTitle(); return commonAttributes; }, /** * Get the current page title. * * @since 1.9.0 * * @return {string} Current page title. */ getPageTitle: function getPageTitle() { var _document$querySelect, _document$querySelect2; return (_document$querySelect = (_document$querySelect2 = document.querySelector('.editor-post-title__input')) === null || _document$querySelect2 === void 0 ? void 0 : _document$querySelect2.textContent) !== null && _document$querySelect !== void 0 ? _document$querySelect : document.title; }, /** * Get block runtime state variable. * * @since 1.8.8 * * @param {string} clientId Block client ID. * @param {string} varName Block runtime variable name. * * @return {*} Block runtime state variable value. */ getBlockRuntimeStateVar: function getBlockRuntimeStateVar(clientId, varName) { var _blocks$clientId; return (_blocks$clientId = blocks[clientId]) === null || _blocks$clientId === void 0 ? void 0 : _blocks$clientId[varName]; }, /** * Set block runtime state variable value. * * @since 1.8.8 * * @param {string} clientId Block client ID. * @param {string} varName Block runtime state key. * @param {*} value State variable value. * * @return {boolean} True on success. */ setBlockRuntimeStateVar: function setBlockRuntimeStateVar(clientId, varName, value) { // eslint-disable-line complexity if (!clientId || !varName) { return false; } blocks[clientId] = blocks[clientId] || {}; blocks[clientId][varName] = value; // Prevent referencing to object. if (_typeof(value) === 'object' && !Array.isArray(value) && value !== null) { blocks[clientId][varName] = _objectSpread({}, value); } return true; }, /** * Get form selector options. * * @since 1.8.1 * * @return {Array} Form options. */ getFormOptions: function getFormOptions() { var formOptions = formList.map(function (value) { return { value: value.ID, label: value.post_title }; }); formOptions.unshift({ value: '', label: strings.form_select }); return formOptions; }, /** * Get size selector options. * * @since 1.8.1 * * @return {Array} Size options. */ getSizeOptions: function getSizeOptions() { return [{ label: strings.small, value: 'small' }, { label: strings.medium, value: 'medium' }, { label: strings.large, value: 'large' }]; }, /** * Event `wpformsFormSelectorEdit` handler. * * @since 1.8.1 * * @param {Object} e Event object. * @param {Object} props Block properties. */ blockEdit: function blockEdit(e, props) { var block = app.getBlockContainer(props); if (!(block !== null && block !== void 0 && block.dataset)) { return; } app.initLeadFormSettings(block.parentElement); }, /** * Init Lead Form Settings panels. * * @since 1.8.1 * * @param {Element} block Block element. * @param {Object} block.dataset Block element. */ initLeadFormSettings: function initLeadFormSettings(block) { if (!(block !== null && block !== void 0 && block.dataset)) { return; } if (!app.isFullStylingEnabled()) { return; } var clientId = block.dataset.block; var $panel = $(".wpforms-block-settings-".concat(clientId)); if (app.isLeadFormsEnabled(block)) { $panel.addClass('disabled_panel').find('.wpforms-gutenberg-panel-notice.wpforms-lead-form-notice').css('display', 'block'); $panel.find('.wpforms-gutenberg-panel-notice.wpforms-use-modern-notice').css('display', 'none'); return; } $panel.removeClass('disabled_panel').find('.wpforms-gutenberg-panel-notice.wpforms-lead-form-notice').css('display', 'none'); $panel.find('.wpforms-gutenberg-panel-notice.wpforms-use-modern-notice').css('display', null); }, /** * Event `wpformsFormSelectorFormLoaded` handler. * * @since 1.8.1 * * @param {Object} e Event object. */ formLoaded: function formLoaded(e) { app.initLeadFormSettings(e.detail.block); app.updateAccentColors(e.detail); app.loadChoicesJS(e.detail); app.initRichTextField(e.detail.formId); app.initRepeaterField(e.detail.formId); $(e.detail.block).off('click').on('click', app.blockClick); }, /** * Click on the block event handler. * * @since 1.8.1 * * @param {Object} e Event object. */ blockClick: function blockClick(e) { app.initLeadFormSettings(e.currentTarget); }, /** * Update accent colors of some fields in GB block in Modern Markup mode. * * @since 1.8.1 * * @param {Object} detail Event details object. */ updateAccentColors: function updateAccentColors(detail) { var _window$WPForms; if (!wpforms_gutenberg_form_selector.is_modern_markup || !((_window$WPForms = window.WPForms) !== null && _window$WPForms !== void 0 && _window$WPForms.FrontendModern) || !(detail !== null && detail !== void 0 && detail.block)) { return; } var $form = $(detail.block.querySelector("#wpforms-".concat(detail.formId))), FrontendModern = window.WPForms.FrontendModern; FrontendModern.updateGBBlockPageIndicatorColor($form); FrontendModern.updateGBBlockIconChoicesColor($form); FrontendModern.updateGBBlockRatingColor($form); }, /** * Init Modern style Dropdown fields (
      templates/fields/number-slider/frontend.php000064400000002024147400353540015113 0ustar00 min="" max="" step="">
      templates/fields/number-slider/builder-option-min-max.php000064400000001344147400353540017600 0ustar00
      templates/fields/content/action-buttons.php000064400000004236147400353540015156 0ustar00
      templates/fields/total/summary-preview.php000064400000005733147400353540015035 0ustar00', wpforms_html_attributes( '', isset( $field['class'] ) ? (array) $field['class'] : [] , $field['data'] ?? [] ), ! empty( $field['is_hidden'] ) ? 'style="display:none;"' : '' ); // Item column. $rows_html .= sprintf( '%s', wp_kses_post( $field['label'] ) ); // Quantity column. $rows_html .= sprintf( '%s', esc_html( $field['quantity'] ) ); // Price column. $rows_html .= sprintf( '%2$s', esc_attr( $total_width ), esc_html( $field['amount'] ) ); // Close a row. $rows_html .= ''; // If a product item is not hidden (pre-selected), then hide the placeholder. if ( $is_placeholder_visible && isset( $field['is_hidden'] ) && $field['is_hidden'] === false ) { $is_placeholder_visible = false; } endforeach; $placeholder_display = $is_placeholder_visible ? 'display: table-row;' : 'display: none;'; $placeholder_classes = $is_placeholder_visible ? 'wpforms-order-summary-placeholder' : 'wpforms-order-summary-placeholder wpforms-order-summary-placeholder-hidden'; ?>
      templates/fields/internal-information/icon-not-expanded.php000064400000001057147400353540020204 0ustar00 templates/fields/internal-information/icon-expanded.php000064400000001052147400353540017401 0ustar00 templates/fields/internal-information/icon-lightbulb.php000064400000001601147400353540017565 0ustar00
      templates/admin-bar-menu.php000064400000004400147400353540012052 0ustar00 templates/integrations/wpcode/code-snippets.php000064400000011042147400353540016022 0ustar00

      WPCode library.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'rel' => [], 'target' => [], ], ] ), esc_url( admin_url( 'admin.php?page=wpcode-library' ) ) ); ?>

      templates/integrations/elementor/popup.php000064400000000630147400353540015122 0ustar00 templates/integrations/elementor/form-selector.php000064400000001020147400353540016532 0ustar00s for the select tag. */ if ( ! \defined( 'ABSPATH' ) ) { exit; } ?>
      WPForms Logo
      templates/integrations/elementor/no-forms.php000064400000002132147400353540015516 0ustar00

      WPForms to build contact forms, surveys, payment forms, and more with just a few clicks.', 'wpforms-lite' ), [ 'b' => [] ] ); ?>

      templates/admin/promotion.php000064400000011200147400353540012370 0ustar00 templates/admin/forms/search-reset.php000064400000000712147400353540014063 0ustar00
      [], 'em' => [], ] ); ?>
      templates/admin/forms/search-box.php000064400000001277147400353540013540 0ustar00 templates/admin/forms/bulk-edit-tags.php000064400000002257147400353540014320 0ustar00
      templates/admin/settings/recaptcha-description.php000064400000003523147400353540016466 0ustar00

      • v2 Checkbox reCAPTCHA: Prompts users to check a box to prove they\'re human.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?>
      • v2 Invisible reCAPTCHA: Uses advanced technology to detect real users without requiring any input.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?>
      • v3 reCAPTCHA: Uses a behind-the-scenes scoring system to detect abusive traffic, and lets you decide the minimum passing score. Recommended for advanced use only (or if using Google AMP).', 'wpforms-lite' ), [ 'strong' => [] ] ); ?>

      Read our walk through to learn more and for step-by-step directions.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'target' => [], 'rel' => [], ], ] ), esc_url( wpforms_utm_link( 'https://wpforms.com/docs/how-to-set-up-and-use-recaptcha-in-wpforms/', 'Settings - Captcha', 'reCAPTCHA Documentation' ) ) ); ?>

      templates/admin/settings/specific-note.php000064400000002113147400353540014735 0ustar00
      templates/admin/settings/turnstile-description.php000064400000001664147400353540016571 0ustar00

      documentation.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'target' => [], 'rel' => [], ], ] ), esc_url( wpforms_utm_link( 'https://wpforms.com/docs/setting-up-cloudflare-turnstile/', 'Settings - Captcha', 'Turnstile Documentation' ) ) ); ?>

      templates/admin/settings/email-heading.php000064400000001022147400353540014667 0ustar00

      obj( 'education_smtp_notice' )->get_template(); /* Omit closing PHP tag at the end of PHP files to avoid "headers already sent" issues. */ templates/admin/settings/hcaptcha-description.php000064400000001741147400353540016307 0ustar00

      documentation.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'target' => [], 'rel' => [], ], ] ), esc_url( wpforms_utm_link( 'https://wpforms.com/docs/how-to-set-up-and-use-hcaptcha-in-wpforms/', 'Settings - Captcha', 'hCaptcha Documentation' ) ) ); ?>

      templates/admin/empty-states/no-forms.php000064400000002664147400353540014557 0ustar00


      templates/admin/empty-states/payments/no-payments.php000064400000003000147400353540017112 0ustar00

      templates/admin/empty-states/payments/get-started.php000064400000003105147400353540017071 0ustar00 [ 'href' => [], 'rel' => [], 'target' => [], ], 'strong' => [], ]; ?>

      " alt="">
      templates/admin/empty-states/no-user-templates.php000064400000002405147400353540016374 0ustar00

      templates/admin/dashboard/widget/settings.php000064400000005575147400353540015436 0ustar00

      >
      >

      >
      >
      templates/admin/dashboard/widget/welcome.php000064400000001254147400353540015217 0ustar00
      [ 'href' => [], 'class' => [], ], 'strong' => [], ] ); ?>
      templates/admin/form-embed-wizard/tooltip.php000064400000002510147400353540015353 0ustar00

      embed it. Learn More', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'rel' => [], 'target' => [], ], 'br' => [], ] ), 'https://wpforms.com/docs/creating-first-form/#display-form' ); ?>

      templates/admin/form-embed-wizard/popup.php000064400000010721147400353540015027 0ustar00

      [ 'href' => [], 'class' => [], ], ]; if ( ! empty( $args['user_can_edit_pages'] ) ) { printf( wp_kses( /* translators: %1$s - video tutorial toggle CSS classes, %2$s - shortcode toggle CSS classes. */ __( 'You can also embed your form manually or use a shortcode', 'wpforms-lite' ), $allowed_tags ), 'tutorial-toggle wpforms-admin-popup-toggle', 'shortcode-toggle wpforms-admin-popup-toggle' ); } else { printf( wp_kses( /* translators: %1$s - video tutorial toggle CSS classes, %2$s - shortcode toggle CSS classes. */ __( 'You can embed your form using the WPForms block or a shortcode.', 'wpforms-lite' ), $allowed_tags ), 'tutorial-toggle wpforms-admin-popup-toggle', 'shortcode-toggle wpforms-admin-popup-toggle' ); } ?>

      templates/admin/challenge/builder.php000064400000004070147400353540013721 0ustar00

      templates/admin/challenge/modal.php000064400000006613147400353540013374 0ustar00

      WPForms Challenge and get up and running within %1$d %2$s.', 'wpforms-lite' ), absint( $minutes ), _n( 'minute', 'minutes', absint( $minutes ), 'wpforms-lite' ) ), [ 'b' => [] ] ); ?>

      <?php esc_html_e( 'Sullie the WPForms mascot', 'wpforms-lite' ); ?>

      ' . absint( $minutes ) . ':00' ); ?>

      templates/admin/challenge/welcome.php000064400000001313147400353540013723 0ustar00 templates/admin/challenge/embed.php000064400000012071147400353540013347 0ustar00

      embed it. Learn More', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'rel' => [], 'target' => [], ], 'br' => [], ] ), esc_url( wpforms_utm_link( 'https://wpforms.com/docs/creating-first-form/#display-form', 'WPForms Challenge Block', 'Add A Block' ) ) ); ?>

      %1$s %2$s %3$s %4$s. Share your success story with other WPForms users and help us spread the word by giving WPForms a 5-star rating (%5$s) on WordPress.org. Thanks for your support and we look forward to bringing you more awesome features.', 'wpforms-lite' ), '', _n( 'minute', 'minutes', absint( $minutes ), 'wpforms-lite' ), '', _n( 'second', 'seconds', absint( $minutes ), 'wpforms-lite' ), '' ), [ 'span' => [ 'id' => [], 'class' => [], ], 'b' => [], 'i' => [ 'class' => [], ], ] ); ?>

      How can we help you to be successful? Please send us your feedback. Our support team is standing by to help.', 'wpforms-lite' ), absint( $minutes ), _n( 'minute', 'minutes', absint( $minutes ), 'wpforms-lite' ) ), [ 'br' => [] ] ); ?>

      is_pro() ) { ?>
      templates/admin/pages/constant-contact.php000064400000015017147400353540014735 0ustar00

      $44 back for every $1 spent according to DMA.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?>

      ', esc_url( WPFORMS_PLUGIN_URL . 'assets/images/constant-contact/cc-about-logo.png' ), esc_url( WPFORMS_PLUGIN_URL . 'assets/images/constant-contact/cc-about-logo@2x.png' ) ); ?>
      1. Email is still #1 - At least 91% of consumers check their email on a daily basis. You get direct access to your subscribers, without having to play by social media\'s rules and algorithms.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?>
      2. You own your email list - Unlike with social media, your list is your property and no one can revoke your access to it.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?>
      3. Email converts - People who buy products marketed through email spend 138% more than those who don\'t receive email offers.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?>

      why building your email list is so important.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'target' => [], 'rel' => [], ], ] ), esc_url( $wpbeginners_guide_link ) ); ?>



      $item ) { ++ $index; ?>
      %2$d. %3$s
      ', esc_url( WPFORMS_PLUGIN_URL . 'assets/images/constant-contact/cc-about-step' . $index . '.png' ), absint( $index ), esc_html( $item ) ); ?>

      templates/admin/components/datepicker.php000064400000006276147400353540014663 0ustar00 [], 'label' => [], 'input' => [ 'type' => [], 'name' => [], 'value' => [], 'checked' => [], 'aria-hidden' => [], ], ]; // Hidden fields to be included in the form submission. // `orderby` and `order` are always included by default. $default_hidden_fields = [ 'orderby', 'order' ]; $hidden_fields = array_merge( $default_hidden_fields, $hidden_fields ?? [] ); ?>
      '; } // phpcs:enable WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized ?>
        ' . implode( '
      • ', (array) $choices ) . '
      • ', $choices_allowed_html ); ?>

      : 0

      templates/admin/payments/single/payment-history.php000064400000005337147400353540016655 0ustar00

      id === wp_unslash( $_GET['payment_id'] ); ?>
      id ); ?> date_created_gmt, 'M j, Y', true ); ?> type ] ) ? $renewal->type : $placeholder_na_text ); ?> total_amount, $renewal->currency ), true, $renewal->currency ); ?> status ] ); ?>

        $stat_card ) : ?>
      [] ] ); ?>
      templates/admin/payments/single/log.php000064400000002323147400353540014252 0ustar00

      date, 'M j, Y', true ), wpforms_time_format( $item->date, '', true ) ); if ( empty( $item->value ) ) { continue; } ?>
      value ); ?>
      templates/admin/payments/single/field.php000064400000001045147400353540014554 0ustar00

      templates/admin/payments/single/heading-navigation.php000064400000004005147400353540017224 0ustar00 templates/admin/payments/single/no-payment.php000064400000001356147400353540015565 0ustar00 templates/admin/payments/single/entry-details.php000064400000003402147400353540016254 0ustar00

      $field ) { if ( $field['type'] === 'repeater' && wpforms()->is_pro() ) { echo wpforms_render( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 'admin/payments/single/repeater', [ 'field' => $field, 'form_data' => $form_data, 'entry_fields' => $entry_fields, ], true ); } else { echo wpforms_render( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 'admin/payments/single/field', [ 'field' => $field, ], true ); } } ?>
      templates/admin/payments/single/details.php000064400000004633147400353540015124 0ustar00

      [ 'href' => [], 'class' => [], ], 'span' => [ 'class' => [] ], ] ); ?>

      templates/admin/payments/single/advanced-details.php000064400000002061147400353540016660 0ustar00 templates/admin/payments/mode-toggle.php000064400000001312147400353540014410 0ustar00 > templates/admin/payments/hidden-field.php000064400000001101147400353540014515 0ustar00 [ 'name' => [], 'class' => [], 'multiple' => [], 'placeholder' => [], 'data-settings' => [], ], 'option' => [ 'value' => [], 'selected' => [], ], ]; ?>
      %d payment', 'Found %d payments', $total, 'wpforms-lite' ), [ 'strong' => [], ] ), (int) $total ); $is_more_than_one_filter = count( $applied_filters ) > 1; $last_applied_filter = end( $applied_filters ); // Display applied filters in a safe way. foreach ( $applied_filters as $filter ) : // Skip empty filters with no results. if ( empty( $filter['results'] ) ) { continue; } echo wp_kses( $filter['results'], [ 'em' => [] ] ); ?>
      %s', esc_html__( 'New Feature', 'wpforms-lite' ) ); } ?>

      $button ) { $button_class = $button_type === 'main' ? 'wpforms-btn-orange' : 'wpforms-btn-bordered'; printf( '%2$s', esc_url( $button['url'] ), esc_html( $button['text'] ), esc_attr( $button_class ) ); } ?>
      templates/admin/splash/header.php000064400000000700147400353540013067 0ustar00

      templates/admin/splash/footer.php000064400000001077147400353540013145 0ustar00
      templates/admin/splash/modal.php000064400000001627147400353540012744 0ustar00 templates/admin/notifications.php000064400000003565147400353540013232 0ustar00 templates/emails/summary-footer.php000064400000002244147400353540013525 0ustar00 how to disable', 'wpforms-lite' ), [ 'a' => [ 'href' => [], ], ] ), '' . esc_html( wp_specialchars_decode( get_bloginfo( 'name' ) ) ) . '', 'https://wpforms.com/docs/how-to-use-email-summaries/#disable-email-summaries' ); ?> templates/emails/general-style.php000064400000001103147400353540013300 0ustar00 body, .body { background-color: ; } .header img { max-width: px; } templates/emails/classic-queries.php000064400000006351147400353540013633 0ustar00 @media (prefers-color-scheme: dark) { body, .body { background-color: !important; } .wrapper-inner { background-color: !important; border: 1px solid !important; } body, table.body, h1, h2, h3, h4, h5, h6, p, td, th, a { color: !important; font-family: !important; } a, a:visited, a:hover, a:active, h1 a, h1 a:visited, h2 a, h2 a:visited, h3 a, h3 a:visited, h4 a, h4 a:visited, h5 a, h5 a:visited, h6 a, h6 a:visited { color: !important; } a.button-link { background-color: !important; border: 1px solid !important; color: !important; } .content .field-value { border-bottom: 1px solid !important; } .footer, .footer a { color: !important; } table.wpforms-order-summary-preview { border: 1px solid !important; } table.wpforms-order-summary-preview td { border-top: 1px solid !important; } .dark-mode .header-image { max-width: px !important; } .dark-mode .header-image img { max-height: px !important; } } templates/emails/classic-header.php000064400000005107147400353540013404 0ustar00 > <?php echo esc_html( $title ); ?> ="0" marginwidth="0" topmargin="0" marginheight="0" offset="0" bgcolor="#e9eaec" class=""> templates/emails/classic-body.php000064400000000620147400353540013104 0ustar00
      templates/emails/compact-queries.php000064400000006337147400353540013644 0ustar00 @media (prefers-color-scheme: dark) { body, .body { background-color: !important; } .wrapper-inner { background-color: !important; border: 1px solid !important; } body, table.body, h1, h2, h3, h4, h5, h6, p, td, th, a { color: !important; font-family: !important; } a, a:visited, a:hover, a:active, h1 a, h1 a:visited, h2 a, h2 a:visited, h3 a, h3 a:visited, h4 a, h4 a:visited, h5 a, h5 a:visited, h6 a, h6 a:visited { color: !important; } a.button-link { background-color: !important; border: 1px solid !important; color: !important; } .content td { border-bottom: 1px solid !important; } .footer, .footer a { color: !important; } table.wpforms-order-summary-preview { border: 1px solid !important; } table.wpforms-order-summary-preview td { border-top: 1px solid !important; } .dark-mode .header-image { max-width: px !important; } .dark-mode .header-image img { max-height: px !important; } } templates/emails/general-body.php000064400000000551147400353540013103 0ustar00
      templates/emails/summary-queries.php000064400000000745147400353540013710 0ustar00 > <?php echo esc_html( $title ); ?> ="0" marginwidth="0" topmargin="0" marginheight="0" offset="0" bgcolor="#f8f8f8" class=""> templates/emails/compact-body.php000064400000000620147400353540013111 0ustar00
      templates/emails/compact-header.php000064400000005165147400353540013415 0ustar00 > <?php echo esc_html( $title ); ?> ="0" marginwidth="0" topmargin="0" marginheight="0" offset="0" bgcolor="#e9eaec" class="">