WP User Frontend – Membership, Profile, Registration & Post Submission Plugin for WordPress - Version 3.6.0

Version Description

Download this release

Release Info

Developer tareq1988
Plugin Icon 128x128 WP User Frontend – Membership, Profile, Registration & Post Submission Plugin for WordPress
Version 3.6.0
Comparing to
See all releases

Code changes from version 3.5.29 to 3.6.0

Files changed (90) hide show
  1. admin/class-admin-settings.php +1 -1
  2. admin/class-admin-subscription.php +11 -9
  3. admin/dashboard-metabox.php +177 -0
  4. admin/form-builder/assets/js/components/builder-stage/index.js +6 -6
  5. admin/form-builder/assets/js/components/field-option-data/index.js +1 -1
  6. admin/form-builder/assets/js/components/form-column_field/index.js +8 -8
  7. admin/form-builder/assets/js/components/form-fields/index.js +1 -1
  8. admin/form-builder/assets/js/components/form-post_excerpt/template.php +4 -0
  9. admin/form-builder/assets/js/form-builder.js +1 -1
  10. admin/form-builder/assets/js/mixins/add-form-field.js +2 -1
  11. admin/form-builder/assets/js/mixins/global.js +1 -1
  12. admin/form-builder/assets/less/form-builder.less +25 -1
  13. admin/form-builder/class-wpuf-admin-form-builder.php +2 -2
  14. admin/form-template.php +1 -0
  15. admin/html/modal.php +40 -1
  16. admin/html/whats-new.php +34 -0
  17. admin/posting.php +12 -7
  18. admin/settings-options.php +25 -8
  19. assets/css/admin.css +180 -5
  20. assets/css/admin/wpuf-module.css +325 -0
  21. assets/css/frontend-forms.css +26 -10
  22. assets/css/wpuf-form-builder.css +21 -1
  23. assets/images/check.svg +3 -0
  24. assets/images/conditional-form.png +0 -0
  25. assets/images/content-restriction.png +0 -0
  26. assets/images/crown.svg +3 -0
  27. assets/images/diamond.svg +13 -0
  28. assets/images/modules.png +0 -0
  29. assets/images/profile-header-template-1.jpg +0 -0
  30. assets/images/profile-header-template-2.jpg +0 -0
  31. assets/images/profile-header-template-3.jpg +0 -0
  32. assets/images/templates/edd.png +0 -0
  33. assets/images/user-listing-template-1.jpg +0 -0
  34. assets/images/user-listing-template-2.jpg +0 -0
  35. assets/images/user-listing-template-3.jpg +0 -0
  36. assets/images/user-listing-template-4.jpg +0 -0
  37. assets/images/user-listing-template-5.jpg +0 -0
  38. assets/images/user-listing-template-6.jpg +0 -0
  39. assets/images/woocommerce-form-template.png +0 -0
  40. assets/images/wpuf-updates.png +0 -0
  41. assets/images/x.svg +4 -0
  42. assets/js-templates/form-components.php +4 -0
  43. assets/js/admin/wpuf-module.js +39 -0
  44. assets/js/frontend-form.js +315 -190
  45. assets/js/frontend-form.min.js +1 -1
  46. assets/js/promotion.json +6 -6
  47. assets/js/upload.js +1 -1
  48. assets/js/upload.min.js +1 -1
  49. assets/js/wpuf-admin.js +45 -1
  50. assets/js/wpuf-form-builder-components.js +16 -16
  51. assets/js/wpuf-form-builder-mixins.js +3 -2
  52. assets/js/wpuf-form-builder.js +1 -1
  53. assets/less/admin.less +178 -4
  54. assets/less/frontend-forms.less +29 -11
  55. assets/less/metabox-tabs.less +1 -1
  56. assets/vendor/sweetalert2/dist/sweetalert2.common.js +0 -1635
  57. assets/vendor/sweetalert2/dist/sweetalert2.css +1412 -681
  58. assets/vendor/sweetalert2/dist/sweetalert2.js +3949 -1512
  59. assets/vendor/sweetalert2/dist/sweetalert2.min.css +1 -1
  60. assets/vendor/sweetalert2/dist/sweetalert2.min.js +1 -1
  61. assets/vendor/swiffy-slider/swiffy-slider-extensions.min.js +8 -0
  62. assets/vendor/swiffy-slider/swiffy-slider-extensions.min.js.map +65 -0
  63. assets/vendor/swiffy-slider/swiffy-slider.min.css +8 -0
  64. assets/vendor/swiffy-slider/swiffy-slider.min.css.map +8 -0
  65. assets/vendor/swiffy-slider/swiffy-slider.min.js +8 -0
  66. assets/vendor/swiffy-slider/swiffy-slider.min.js.map +104 -0
  67. changelog.txt +12 -0
  68. class/admin-asset-loader.php +2 -2
  69. class/asset-loader.php +2 -1
  70. class/post-form-templates/post.php +36 -33
  71. includes/class-upgrades.php +50 -0
  72. includes/fields/class-abstract-fields.php +1 -1
  73. includes/fields/class-field-checkbox.php +9 -2
  74. includes/fields/class-field-post-content.php +12 -11
  75. includes/fields/class-field-post-excerpt.php +11 -10
  76. includes/fields/class-field-radio.php +3 -1
  77. includes/fields/class-field-textarea.php +1 -0
  78. includes/fields/class-field-url.php +1 -1
  79. includes/free/loader.php +1161 -4
  80. includes/free/post-form-templates/easy_digital_download.php +52 -0
  81. includes/free/post-form-templates/the_events_calendar.php +33 -30
  82. includes/free/post-form-templates/woocommerce.php +48 -45
  83. includes/free/prompt.php +11 -0
  84. includes/free/subscription.php +9 -2
  85. includes/upgrades/upgrade-3.6.0.php +32 -0
  86. languages/wp-user-frontend.pot +1071 -539
  87. lib/class.settings-api.php +100 -36
  88. readme.txt +79 -70
  89. wpuf-functions.php +81 -5
  90. wpuf.php +9 -11
admin/class-admin-settings.php CHANGED
@@ -90,7 +90,7 @@ class WPUF_Admin_Settings {
90
  $this->menu_pages[] = $post_form_submenu;
91
 
92
  add_action( "load-$post_form_submenu", [ $this, 'post_form_menu_action' ] );
93
-
94
  remove_submenu_page( 'wp-user-frontend', 'wp-user-frontend' );
95
 
96
  /*
90
  $this->menu_pages[] = $post_form_submenu;
91
 
92
  add_action( "load-$post_form_submenu", [ $this, 'post_form_menu_action' ] );
93
+
94
  remove_submenu_page( 'wp-user-frontend', 'wp-user-frontend' );
95
 
96
  /*
admin/class-admin-subscription.php CHANGED
@@ -671,16 +671,18 @@ class WPUF_Admin_Subscription {
671
  </tr>
672
  <?php } ?>
673
  <?php
674
- foreach ( $user_sub['posts'] as $key => $value ) {
675
- $post_type_object = get_post_type_object( $key );
 
676
 
677
- if ( $post_type_object ) {
678
- ?>
679
- <tr>
680
- <th><label><?php echo esc_html( $post_type_object->labels->name ); ?></label></th>
681
- <td><input type="text" value="<?php echo esc_attr( $value ); ?>" name="<?php echo esc_attr( $key ); ?>" ></td>
682
- </tr>
683
- <?php
 
684
  }
685
  }
686
  ?>
671
  </tr>
672
  <?php } ?>
673
  <?php
674
+ if ( ! empty( $user_sub['posts'] ) ) {
675
+ foreach ( $user_sub['posts'] as $key => $value ) {
676
+ $post_type_object = get_post_type_object( $key );
677
 
678
+ if ( $post_type_object ) {
679
+ ?>
680
+ <tr>
681
+ <th><label><?php echo esc_html( $post_type_object->labels->name ); ?></label></th>
682
+ <td><input type="text" value="<?php echo esc_attr( $value ); ?>" name="<?php echo esc_attr( $key ); ?>" ></td>
683
+ </tr>
684
+ <?php
685
+ }
686
  }
687
  }
688
  ?>
admin/dashboard-metabox.php ADDED
@@ -0,0 +1,177 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Dashboard_Metabox {
4
+ const URL = 'https://wedevs.com/category/user-frontend-pro';
5
+ const OPT_KEY = 'wpuf_admin_db_mb';
6
+ const BANNER = WPUF_ASSET_URI . '/images/wpuf-updates.png';
7
+
8
+ public function __construct() {
9
+ add_action( 'wp_dashboard_setup', [ $this, 'add_metabox' ] );
10
+ }
11
+
12
+ public function add_metabox() {
13
+ wp_add_dashboard_widget(
14
+ self::OPT_KEY, esc_html__( 'WP User Frontend News & Updates', 'wp-user-frontend' ), [
15
+ $this,
16
+ 'render_metabox',
17
+ ], null, null, 'normal', 'high'
18
+ );
19
+ }
20
+
21
+ public function render_metabox() {
22
+ ?>
23
+ <style>
24
+ .wpuf-db-banner > img {
25
+ max-width: 100%;
26
+ }
27
+
28
+ .wpuf-divider-bottom {
29
+ margin: 0 -12px;
30
+ border-bottom: 1px solid #f0f0f1;
31
+ }
32
+
33
+ .wpuf-db-latest-blog {
34
+ padding: 4px 0;
35
+ }
36
+
37
+ .wpuf-db-links ul {
38
+ display: flex;
39
+ margin-bottom: 0;
40
+ }
41
+
42
+ .wpuf-db-links .blog-item:not(:first-of-type) {
43
+ margin-right: 4px;
44
+ padding-left: 4px;
45
+ border-left: 1px solid #ddd;
46
+ }
47
+ </style>
48
+ <div class="wpuf-db-widget">
49
+ <div class="wpuf-db-banner">
50
+ <img src="<?php echo self::BANNER; ?>" alt="Rating Banner">
51
+ <p>
52
+ Could you please take a moment and <a
53
+ href="https://wordpress.org/support/plugin/wp-user-frontend/reviews/?filter=5" target="_blank">share your
54
+ opinion</a> on WP.org? It would motivate us a lot and help other users get decisive while
55
+ choosing WP User Frontend. Thanks in advance.
56
+ </p>
57
+ </div>
58
+ <div class="wpuf-divider-bottom"></div>
59
+ <div class="wpuf-db-latest-blog">
60
+ <ul>
61
+ <?php
62
+ $articles = $this->fetch_articles();
63
+ foreach ( $articles as $article ) {
64
+ ?>
65
+ <li><a href="<?php echo esc_url( $article['href'] ); ?>" target="_blank"><?php echo $article['title']; ?></a></li>
66
+ <?php }; ?>
67
+ </ul>
68
+ </div>
69
+ <div class="wpuf-divider-bottom"></div>
70
+ <div class="wpuf-db-links">
71
+ <ul>
72
+ <?php
73
+ foreach ( $this->get_links() as $link ) {
74
+ if ( wpuf()->is_pro() && 'Go Pro' === $link['title'] ) {
75
+ continue;
76
+ }
77
+ ?>
78
+ <li class="blog-item">
79
+ <a href="<?php echo $link['href']; ?>"
80
+ target="_blank"><?php esc_html_e( $link['title'], 'wp-user-frontend' ); ?>
81
+ <span aria-hidden="true" class="dashicons dashicons-external"></span></a>
82
+ </li>
83
+ <?php }; ?>
84
+ </ul>
85
+ </div>
86
+ </div>
87
+ <?php
88
+ }
89
+
90
+ private function fetch_articles() {
91
+ $article_list = get_transient( self::OPT_KEY );
92
+
93
+ if ( $article_list ) {
94
+ return $article_list;
95
+ }
96
+
97
+ $response = wp_remote_get( esc_url( self::URL ) );
98
+
99
+ if ( is_wp_error( $response ) ) {
100
+ return [];
101
+ }
102
+
103
+ $body = wp_remote_retrieve_body( $response );
104
+
105
+ $dom = new DOMDocument();
106
+ @$dom->loadHTML( $body );
107
+
108
+ $finder = new DomXPath( $dom );
109
+
110
+ $classname = 'post__title';
111
+ $nodes = $finder->query( "//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]" );
112
+
113
+ if ( empty( $nodes ) ) {
114
+ return [];
115
+ }
116
+
117
+ $url = parse_url( self::URL );
118
+ $domain = $url['scheme'] . '://' . $url['host'];
119
+ $article_list = [];
120
+ $count = 0;
121
+
122
+ foreach ( $nodes as $node ) {
123
+ $title = $node->nodeValue;
124
+ $path = $node->lastChild->attributes[0]->nodeValue;
125
+
126
+ $article = [
127
+ 'title' => $title,
128
+ 'href' => $domain . $path,
129
+ ];
130
+
131
+ array_push( $article_list, $article );
132
+
133
+ $count ++;
134
+
135
+ if ( $count >= 5 ) {
136
+ break;
137
+ }
138
+ }
139
+
140
+ if ( ! empty( $article_list ) ) {
141
+ set_transient( self::OPT_KEY, $article_list, DAY_IN_SECONDS );
142
+
143
+ return $article_list;
144
+ }
145
+
146
+ return [];
147
+ }
148
+
149
+ private function get_links() {
150
+ return [
151
+ [
152
+ 'title' => 'Blog',
153
+ 'href' => 'https://wedevs.com/category/user-frontend-pro',
154
+ ],
155
+ [
156
+ 'title' => 'Docs',
157
+ 'href' => 'https://wedevs.com/docs/wp-user-frontend-pro/',
158
+ ],
159
+ [
160
+ 'title' => 'Help',
161
+ 'href' => 'https://wedevs.com/contact',
162
+ ],
163
+ [
164
+ 'title' => 'Go Pro',
165
+ 'href' => 'https://wedevs.com/wp-user-frontend-pro/pricing/',
166
+ ],
167
+ [
168
+ 'title' => 'Tutorials',
169
+ 'href' => 'https://www.youtube.com/watch?v=rzxdIN8ZMYc&list=PLJorZsV2RVv9G5J3kcqJQjUwgqZSwc_Hf&index=2&ab_channel=weDevs',
170
+ ],
171
+ [
172
+ 'title' => 'Community',
173
+ 'href' => 'https://www.facebook.com/groups/weDevs',
174
+ ],
175
+ ];
176
+ }
177
+ }
admin/form-builder/assets/js/components/builder-stage/index.js CHANGED
@@ -101,7 +101,7 @@ Vue.component('builder-stage', {
101
 
102
  // check if these are already inserted
103
  if ( this.isSingleInstance( field.template ) && this.containsField( field.template ) ) {
104
- swal({
105
  title: "Oops...",
106
  text: "You already have this field in the form"
107
  });
@@ -114,7 +114,7 @@ Vue.component('builder-stage', {
114
  delete_field: function(index) {
115
  var self = this;
116
 
117
- swal({
118
  text: self.i18n.delete_field_warn_msg,
119
  type: 'warning',
120
  showCancelButton: true,
@@ -123,10 +123,10 @@ Vue.component('builder-stage', {
123
  cancelButtonText: self.i18n.no_cancel_it,
124
  confirmButtonClass: 'btn btn-success',
125
  cancelButtonClass: 'btn btn-danger',
126
- }).then(function () {
127
- self.$store.commit('delete_form_field_element', index);
128
- }, function() {
129
-
130
  });
131
  },
132
 
101
 
102
  // check if these are already inserted
103
  if ( this.isSingleInstance( field.template ) && this.containsField( field.template ) ) {
104
+ new swal({
105
  title: "Oops...",
106
  text: "You already have this field in the form"
107
  });
114
  delete_field: function(index) {
115
  var self = this;
116
 
117
+ (new swal({
118
  text: self.i18n.delete_field_warn_msg,
119
  type: 'warning',
120
  showCancelButton: true,
123
  cancelButtonText: self.i18n.no_cancel_it,
124
  confirmButtonClass: 'btn btn-success',
125
  cancelButtonClass: 'btn btn-danger',
126
+ })).then((result) => {
127
+ if (result.isConfirmed) {
128
+ self.$store.commit('delete_form_field_element', index);
129
+ }
130
  });
131
  },
132
 
admin/form-builder/assets/js/components/field-option-data/index.js CHANGED
@@ -106,7 +106,7 @@ Vue.component('field-option-data', {
106
  i = 0;
107
 
108
  for (i = 0; i < new_opts.length; i++) {
109
- options[new_opts[i].value] = new_opts[i].label;
110
  }
111
 
112
  this.update_value('options', options);
106
  i = 0;
107
 
108
  for (i = 0; i < new_opts.length; i++) {
109
+ options['' + new_opts[i].value] = new_opts[i].label;
110
  }
111
 
112
  this.update_value('options', options);
admin/form-builder/assets/js/components/form-column_field/index.js CHANGED
@@ -181,7 +181,7 @@ Vue.component('form-column_field', {
181
  };
182
 
183
  if (this.isAllowedInClolumnField(data.field_template)) {
184
- swal({
185
  title: "Oops...",
186
  text: "You cannot add this field as inner column field"
187
  });
@@ -190,7 +190,7 @@ Vue.component('form-column_field', {
190
 
191
  // check if these are already inserted
192
  if ( this.isSingleInstance( data.field_template ) && this.containsField( data.field_template ) ) {
193
- swal({
194
  title: "Oops...",
195
  text: "You already have this field in the form"
196
  });
@@ -258,7 +258,7 @@ Vue.component('form-column_field', {
258
 
259
  // check if the field is allowed to duplicate
260
  if ( self.isSingleInstance( field.template ) ) {
261
- swal({
262
  title: "Oops...",
263
  text: "You already have this field in the form"
264
  });
@@ -276,7 +276,7 @@ Vue.component('form-column_field', {
276
  fromColumn: fromColumn
277
  };
278
 
279
- swal({
280
  text: self.i18n.delete_field_warn_msg,
281
  type: 'warning',
282
  showCancelButton: true,
@@ -285,10 +285,10 @@ Vue.component('form-column_field', {
285
  cancelButtonText: self.i18n.no_cancel_it,
286
  confirmButtonClass: 'btn btn-success',
287
  cancelButtonClass: 'btn btn-danger',
288
- }).then(function () {
289
- self.$store.commit('delete_column_field_element', payload);
290
- }, function() {
291
-
292
  });
293
  },
294
 
181
  };
182
 
183
  if (this.isAllowedInClolumnField(data.field_template)) {
184
+ new swal({
185
  title: "Oops...",
186
  text: "You cannot add this field as inner column field"
187
  });
190
 
191
  // check if these are already inserted
192
  if ( this.isSingleInstance( data.field_template ) && this.containsField( data.field_template ) ) {
193
+ new swal({
194
  title: "Oops...",
195
  text: "You already have this field in the form"
196
  });
258
 
259
  // check if the field is allowed to duplicate
260
  if ( self.isSingleInstance( field.template ) ) {
261
+ new swal({
262
  title: "Oops...",
263
  text: "You already have this field in the form"
264
  });
276
  fromColumn: fromColumn
277
  };
278
 
279
+ (new swal({
280
  text: self.i18n.delete_field_warn_msg,
281
  type: 'warning',
282
  showCancelButton: true,
285
  cancelButtonText: self.i18n.no_cancel_it,
286
  confirmButtonClass: 'btn btn-success',
287
  cancelButtonClass: 'btn btn-danger',
288
+ })).then((result) => {
289
+ if (result.isConfirmed) {
290
+ self.$store.commit('delete_form_field_element', index);
291
+ }
292
  });
293
  },
294
 
admin/form-builder/assets/js/components/form-fields/index.js CHANGED
@@ -42,7 +42,7 @@ Vue.component('form-fields', {
42
  alert_pro_feature: function (field) {
43
  var title = this.field_settings[field].title;
44
 
45
- swal({
46
  title: '<i class="fa fa-lock"></i> ' + title + ' <br>' + this.i18n.is_a_pro_feature,
47
  text: this.i18n.pro_feature_msg,
48
  type: '',
42
  alert_pro_feature: function (field) {
43
  var title = this.field_settings[field].title;
44
 
45
+ new swal({
46
  title: '<i class="fa fa-lock"></i> ' + title + ' <br>' + this.i18n.is_a_pro_feature,
47
  text: this.i18n.pro_feature_msg,
48
  type: '',
admin/form-builder/assets/js/components/form-post_excerpt/template.php CHANGED
@@ -1,9 +1,13 @@
1
  <div class="wpuf-fields">
2
  <textarea
 
3
  :class="class_names('textareafield')"
4
  :placeholder="field.placeholder"
5
  :rows="field.rows"
6
  :cols="field.cols"
7
  >{{ field.default }}</textarea>
 
 
 
8
  <span v-if="field.help" class="wpuf-help" v-html="field.help" ></span>
9
  </div>
1
  <div class="wpuf-fields">
2
  <textarea
3
+ v-if="'no' === field.rich"
4
  :class="class_names('textareafield')"
5
  :placeholder="field.placeholder"
6
  :rows="field.rows"
7
  :cols="field.cols"
8
  >{{ field.default }}</textarea>
9
+
10
+ <text-editor v-if="'no' !== field.rich" :rich="field.rich" :default_text="field.default"></text-editor>
11
+
12
  <span v-if="field.help" class="wpuf-help" v-html="field.help" ></span>
13
  </div>
admin/form-builder/assets/js/form-builder.js CHANGED
@@ -173,7 +173,7 @@
173
  html += '<img src="' + image_two + '" alt="custom field data">';
174
  html += '</div>';
175
  html += '</div>';
176
- swal({
177
  title: __( 'Do you want to show custom field data inside your post ?', 'wp-user-frontend' ),
178
  html: html,
179
  showCancelButton: true,
173
  html += '<img src="' + image_two + '" alt="custom field data">';
174
  html += '</div>';
175
  html += '</div>';
176
+ new swal({
177
  title: __( 'Do you want to show custom field data inside your post ?', 'wp-user-frontend' ),
178
  html: html,
179
  showCancelButton: true,
admin/form-builder/assets/js/mixins/add-form-field.js CHANGED
@@ -1,3 +1,4 @@
 
1
  wpuf_mixins.add_form_field = {
2
  methods: {
3
  add_form_field: function (field_template) {
@@ -16,7 +17,7 @@ wpuf_mixins.add_form_field = {
16
 
17
  // check if these are already inserted
18
  if ( this.isSingleInstance( field_template ) && this.containsField( field_template ) ) {
19
- swal({
20
  title: "Oops...",
21
  text: "You already have this field in the form"
22
  });
1
+
2
  wpuf_mixins.add_form_field = {
3
  methods: {
4
  add_form_field: function (field_template) {
17
 
18
  // check if these are already inserted
19
  if ( this.isSingleInstance( field_template ) && this.containsField( field_template ) ) {
20
+ Swal.fire({
21
  title: "Oops...",
22
  text: "You already have this field in the form"
23
  });
admin/form-builder/assets/js/mixins/global.js CHANGED
@@ -27,7 +27,7 @@ Vue.mixin({
27
  cancelButtonText: this.i18n.cancel,
28
  }, settings);
29
 
30
- swal(settings, callback);
31
  },
32
 
33
  is_failed_to_validate: function (template) {
27
  cancelButtonText: this.i18n.cancel,
28
  }, settings);
29
 
30
+ new swal(settings, callback);
31
  },
32
 
33
  is_failed_to_validate: function (template) {
admin/form-builder/assets/less/form-builder.less CHANGED
@@ -1226,7 +1226,7 @@ ul.wpuf-form li .wpuf-password-field:after {
1226
  text-align: center;
1227
  min-height: 280px;
1228
  width: 220px;
1229
- border: 0px;
1230
  box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.1);
1231
  position: relative;
1232
  border-radius: 3px;
@@ -1354,6 +1354,11 @@ ul.wpuf-form li .wpuf-password-field:after {
1354
  }
1355
  }
1356
 
 
 
 
 
 
1357
  &.blank-form {
1358
  text-align: center;
1359
 
@@ -1373,6 +1378,18 @@ ul.wpuf-form li .wpuf-password-field:after {
1373
 
1374
  }
1375
  }
 
 
 
 
 
 
 
 
 
 
 
 
1376
  }
1377
  }
1378
  }
@@ -1647,5 +1664,12 @@ and (max-device-width : 480px) {
1647
  display: none;
1648
  }
1649
 
 
 
 
 
 
 
 
1650
  @import "builder-responsive.less";
1651
 
1226
  text-align: center;
1227
  min-height: 280px;
1228
  width: 220px;
1229
+ border: 0;
1230
  box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.1);
1231
  position: relative;
1232
  border-radius: 3px;
1354
  }
1355
  }
1356
 
1357
+ &.template-inactive h3 {
1358
+ display: flex;
1359
+ justify-content: space-between;
1360
+ }
1361
+
1362
  &.blank-form {
1363
  text-align: center;
1364
 
1378
 
1379
  }
1380
  }
1381
+
1382
+ a.wpuf-button.button-upgrade-to-pro {
1383
+ padding: 10px 15px;
1384
+ background: #ff9000;
1385
+ color: #fff;
1386
+ min-height: auto;
1387
+ border-radius: 5px;
1388
+ }
1389
+
1390
+ a.wpuf-button.button-upgrade-to-pro:hover {
1391
+ background: #d07805;
1392
+ }
1393
  }
1394
  }
1395
  }
1664
  display: none;
1665
  }
1666
 
1667
+ span.pro-icon svg {
1668
+ height: 1em;
1669
+ }
1670
+ span.pro-icon svg path {
1671
+ fill: #fff;
1672
+ }
1673
+
1674
  @import "builder-responsive.less";
1675
 
admin/form-builder/class-wpuf-admin-form-builder.php CHANGED
@@ -79,7 +79,7 @@ class WPUF_Admin_Form_Builder {
79
  */
80
  wp_enqueue_style( 'wpuf-css', WPUF_ASSET_URI . '/css/frontend-forms.css' );
81
  wp_enqueue_style( 'wpuf-font-awesome', WPUF_ASSET_URI . '/vendor/font-awesome/css/font-awesome.min.css', [], WPUF_VERSION );
82
- wp_enqueue_style( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.css', [], WPUF_VERSION );
83
  wp_enqueue_style( 'wpuf-selectize', WPUF_ASSET_URI . '/vendor/selectize/css/selectize.default.css', [], WPUF_VERSION );
84
  wp_enqueue_style( 'wpuf-toastr', WPUF_ASSET_URI . '/vendor/toastr/toastr.min.css', [], WPUF_VERSION );
85
  wp_enqueue_style( 'wpuf-tooltip', WPUF_ASSET_URI . '/vendor/tooltip/tooltip.css', [], WPUF_VERSION );
@@ -101,7 +101,7 @@ class WPUF_Admin_Form_Builder {
101
 
102
  wp_enqueue_script( 'wpuf-vue', WPUF_ASSET_URI . '/vendor/vue/vue' . $prefix . '.js', [], WPUF_VERSION, true );
103
  wp_enqueue_script( 'wpuf-vuex', WPUF_ASSET_URI . '/vendor/vuex/vuex' . $prefix . '.js', [ 'wpuf-vue' ], WPUF_VERSION, true );
104
- wp_enqueue_script( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.js', [], WPUF_VERSION, true );
105
  wp_enqueue_script( 'wpuf-jquery-scrollTo', WPUF_ASSET_URI . '/vendor/jquery.scrollTo/jquery.scrollTo' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
106
  wp_enqueue_script( 'wpuf-selectize', WPUF_ASSET_URI . '/vendor/selectize/js/standalone/selectize' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
107
  wp_enqueue_script( 'wpuf-toastr', WPUF_ASSET_URI . '/vendor/toastr/toastr' . $prefix . '.js', [], WPUF_VERSION, true );
79
  */
80
  wp_enqueue_style( 'wpuf-css', WPUF_ASSET_URI . '/css/frontend-forms.css' );
81
  wp_enqueue_style( 'wpuf-font-awesome', WPUF_ASSET_URI . '/vendor/font-awesome/css/font-awesome.min.css', [], WPUF_VERSION );
82
+ wp_enqueue_style( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.css', [], '11.4.30' );
83
  wp_enqueue_style( 'wpuf-selectize', WPUF_ASSET_URI . '/vendor/selectize/css/selectize.default.css', [], WPUF_VERSION );
84
  wp_enqueue_style( 'wpuf-toastr', WPUF_ASSET_URI . '/vendor/toastr/toastr.min.css', [], WPUF_VERSION );
85
  wp_enqueue_style( 'wpuf-tooltip', WPUF_ASSET_URI . '/vendor/tooltip/tooltip.css', [], WPUF_VERSION );
101
 
102
  wp_enqueue_script( 'wpuf-vue', WPUF_ASSET_URI . '/vendor/vue/vue' . $prefix . '.js', [], WPUF_VERSION, true );
103
  wp_enqueue_script( 'wpuf-vuex', WPUF_ASSET_URI . '/vendor/vuex/vuex' . $prefix . '.js', [ 'wpuf-vue' ], WPUF_VERSION, true );
104
+ wp_enqueue_script( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.js', [], '11.4.30', true );
105
  wp_enqueue_script( 'wpuf-jquery-scrollTo', WPUF_ASSET_URI . '/vendor/jquery.scrollTo/jquery.scrollTo' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
106
  wp_enqueue_script( 'wpuf-selectize', WPUF_ASSET_URI . '/vendor/selectize/js/standalone/selectize' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
107
  wp_enqueue_script( 'wpuf-toastr', WPUF_ASSET_URI . '/vendor/toastr/toastr' . $prefix . '.js', [], WPUF_VERSION, true );
admin/form-template.php CHANGED
@@ -58,6 +58,7 @@ class WPUF_Admin_Form_Template {
58
  }
59
 
60
  $registry = wpuf_get_post_form_templates();
 
61
  $blank_form_url = admin_url( 'admin.php?page=wpuf-post-forms&action=add-new' );
62
  $action_name = 'wpuf_post_form_template';
63
  $footer_help = sprintf( __( 'Want a new integration? <a href="%s" target="_blank">Let us know</a>.', 'wp-user-frontend' ), 'mailto:support@wedevs.com?subject=WPUF Custom Post Template Integration Request' );
58
  }
59
 
60
  $registry = wpuf_get_post_form_templates();
61
+ $pro_templates = wpuf_get_pro_form_previews();
62
  $blank_form_url = admin_url( 'admin.php?page=wpuf-post-forms&action=add-new' );
63
  $action_name = 'wpuf_post_form_template';
64
  $footer_help = sprintf( __( 'Want a new integration? <a href="%s" target="_blank">Let us know</a>.', 'wp-user-frontend' ), 'mailto:support@wedevs.com?subject=WPUF Custom Post Template Integration Request' );
admin/html/modal.php CHANGED
@@ -73,7 +73,46 @@
73
  </li>
74
 
75
  <?php
76
- } ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  </ul>
78
  </div>
79
  </div>
73
  </li>
74
 
75
  <?php
76
+ }
77
+
78
+ $crown_icon = WPUF_ROOT . '/assets/images/crown.svg';
79
+ foreach ( $pro_templates as $template ) {
80
+ $class = 'template-inactive is-pro-template';
81
+ $image = $template->get_image();
82
+ $title = $template->get_title();
83
+ ?>
84
+
85
+ <li class="<?php echo esc_attr( $class ); ?>">
86
+ <h3>
87
+ <?php
88
+ echo esc_html( $title );
89
+ if ( file_exists( $crown_icon ) ) {
90
+ printf( '<span class="pro-icon-title"> %s</span>', file_get_contents( $crown_icon ) );
91
+ }
92
+ ?>
93
+ </h3>
94
+ <?php if ( $image ) {
95
+ printf( '<img src="%s" alt="%s">', esc_attr( $image ), esc_attr( $title ) );
96
+ } ?>
97
+
98
+ <div class="form-create-overlay">
99
+ <a href="<?php echo esc_url( WPUF_Pro_Prompt::get_upgrade_to_pro_popup_url() ); ?>"
100
+ target="_blank"
101
+ class="wpuf-button button-upgrade-to-pro"
102
+ title="<?php echo esc_attr( $template->get_title() ); ?>" >
103
+ <?php
104
+ esc_html_e( 'Upgrade to PRO', 'wp-user-frontend' );
105
+ if ( file_exists( $crown_icon ) ) {
106
+ printf( '<span class="pro-icon"> %s</span>', file_get_contents( $crown_icon ) );
107
+ }
108
+ ?>
109
+ </a>
110
+ </div>
111
+ </li>
112
+
113
+ <?php
114
+ }
115
+ ?>
116
  </ul>
117
  </div>
118
  </div>
admin/html/whats-new.php CHANGED
@@ -1,5 +1,39 @@
1
  <?php
2
  $changelog = [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  [
4
  'version' => 'Version 3.5.29',
5
  'released' => '2022-09-15',
1
  <?php
2
  $changelog = [
3
+ [
4
+ 'version' => 'Version 3.6.0',
5
+ 'released' => '2022-11-23',
6
+ 'changes' => [
7
+ [
8
+ 'title' => __( 'Admin dashboard news and update meta-box added', 'wp-user-frontend' ),
9
+ 'type' => 'Enhancement',
10
+ ],
11
+ [
12
+ 'title' => __( 'Upgrade prompts design', 'wp-user-frontend' ),
13
+ 'type' => 'Enhancement',
14
+ ],
15
+ [
16
+ 'title' => __( 'Email style handled', 'wp-user-frontend' ),
17
+ 'type' => 'Fix',
18
+ ],
19
+ [
20
+ 'title' => __( 'text-area type selection(Normal, Rich text-area, Teeny Rich text-area) bug in field options', 'wp-user-frontend' ),
21
+ 'type' => 'Fix',
22
+ ],
23
+ [
24
+ 'title' => __( 'Frontend form validation', 'wp-user-frontend' ),
25
+ 'type' => 'Fix',
26
+ ],
27
+ [
28
+ 'title' => __( 'Default value not saving for radio, dropdown, checkbox', 'wp-user-frontend' ),
29
+ 'type' => 'Fix',
30
+ ],
31
+ [
32
+ 'title' => __( 'sweetalert2 version', 'wp-user-frontend' ),
33
+ 'type' => 'Update',
34
+ ],
35
+ ],
36
+ ],
37
  [
38
  'version' => 'Version 3.5.29',
39
  'released' => '2022-09-15',
admin/posting.php CHANGED
@@ -65,8 +65,8 @@ class WPUF_Admin_Posting {
65
  }
66
  }
67
 
68
- wp_enqueue_style( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.css', [], WPUF_VERSION );
69
- wp_enqueue_script( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.js', [], WPUF_VERSION, true );
70
  wp_enqueue_script( 'wpuf-upload', WPUF_ASSET_URI . '/js/upload.js', ['jquery', 'plupload-handlers'] );
71
  wp_localize_script( 'wpuf-upload', 'wpuf_frontend_upload', [
72
  'confirmMsg' => __( 'Are you sure?', 'wp-user-frontend' ),
@@ -215,14 +215,14 @@ class WPUF_Admin_Posting {
215
  <!-- <input type="hidden" name="wpuf_lock_editing_post_nonce" value="<?php // echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" /> -->
216
  <?php wp_nonce_field( plugin_basename( __FILE__ ), 'wpuf_lock_editing_post_nonce' ); ?>
217
  <p>
218
- <?php
219
- echo wp_kses( $msg, [
220
  'a' => [
221
  'href' => [],
222
  'id' => [],
223
  'data' => [],
224
- ]
225
- ] );
226
  ?>
227
  </p>
228
 
@@ -327,9 +327,14 @@ class WPUF_Admin_Posting {
327
  * you can override that by using the following filter.
328
  */
329
  $hide_with_acf = class_exists( 'acf' ) ? apply_filters( 'wpuf_hide_meta_when_acf_active', true ) : false;
 
 
 
 
 
330
 
331
  // hide the metabox itself if no form ID is set
332
- if ( !$form_id || $hide_with_acf ) {
333
  $this->hide_form();
334
 
335
  return;
65
  }
66
  }
67
 
68
+ wp_enqueue_style( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.css', [], '11.4.30' );
69
+ wp_enqueue_script( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.js', [], '11.4.30', true );
70
  wp_enqueue_script( 'wpuf-upload', WPUF_ASSET_URI . '/js/upload.js', ['jquery', 'plupload-handlers'] );
71
  wp_localize_script( 'wpuf-upload', 'wpuf_frontend_upload', [
72
  'confirmMsg' => __( 'Are you sure?', 'wp-user-frontend' ),
215
  <!-- <input type="hidden" name="wpuf_lock_editing_post_nonce" value="<?php // echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" /> -->
216
  <?php wp_nonce_field( plugin_basename( __FILE__ ), 'wpuf_lock_editing_post_nonce' ); ?>
217
  <p>
218
+ <?php
219
+ echo wp_kses( $msg, [
220
  'a' => [
221
  'href' => [],
222
  'id' => [],
223
  'data' => [],
224
+ ]
225
+ ] );
226
  ?>
227
  </p>
228
 
327
  * you can override that by using the following filter.
328
  */
329
  $hide_with_acf = class_exists( 'acf' ) ? apply_filters( 'wpuf_hide_meta_when_acf_active', true ) : false;
330
+ $acf_enable = wpuf_get_option( 'wpuf_compatibility_acf', 'wpuf_general', 'yes' );
331
+
332
+ if ( 'yes' === $acf_enable && $hide_with_acf ) {
333
+ $hide_with_acf = false;
334
+ }
335
 
336
  // hide the metabox itself if no form ID is set
337
+ if ( ! $form_id || $hide_with_acf ) {
338
  $this->hide_form();
339
 
340
  return;
admin/settings-options.php CHANGED
@@ -566,10 +566,17 @@ function wpuf_settings_field_profile( $form ) {
566
  'post_type' => 'wpuf_profile',
567
  ]
568
  );
 
 
 
569
 
570
  $val = get_option( 'wpuf_profile', [] );
571
 
572
- if ( class_exists( 'WP_User_Frontend_Pro' ) ) {
 
 
 
 
573
  ?>
574
 
575
  <p style="padding-left: 10px; font-style: italic; font-size: 13px;">
@@ -580,15 +587,26 @@ function wpuf_settings_field_profile( $form ) {
580
  foreach ( $user_roles as $role => $name ) {
581
  $current = isset( $val['roles'][ $role ] ) ? $val['roles'][ $role ] : '';
582
  ?>
583
- <tr valign="top">
584
- <th scrope="row"><?php echo esc_attr( $name ); ?></th>
585
  <td>
586
- <select name="wpuf_profile[roles][<?php echo esc_attr( $role ); ?>]">
587
  <option value=""><?php esc_html_e( '&mdash; Select &mdash;', 'wp-user-frontend' ); ?></option>
588
- <?php foreach ( $forms as $form ) { ?>
589
- <option value="<?php echo esc_attr( $form->ID ); ?>"<?php selected( $current, $form->ID ); ?>><?php echo esc_html( $form->post_title ); ?></option>
590
- <?php } ?>
 
 
 
 
 
 
591
  </select>
 
 
 
 
 
592
  </td>
593
  </tr>
594
  <?php
@@ -596,7 +614,6 @@ function wpuf_settings_field_profile( $form ) {
596
  ?>
597
  </table>
598
  <?php
599
- }
600
  }
601
 
602
  add_action( 'wsa_form_bottom_wpuf_profile', 'wpuf_settings_field_profile' );
566
  'post_type' => 'wpuf_profile',
567
  ]
568
  );
569
+ $crown_icon = '';
570
+ $class = '';
571
+ $disabled = '';
572
 
573
  $val = get_option( 'wpuf_profile', [] );
574
 
575
+ if ( ! class_exists( 'WP_User_Frontend_Pro' ) ) {
576
+ $crown_icon = sprintf( '<span class="pro-icon"> %s</span>', file_get_contents( WPUF_ROOT . '/assets/images/crown.svg' ) );
577
+ $class = 'class="pro-preview"';
578
+ $disabled = 'disabled';
579
+ }
580
  ?>
581
 
582
  <p style="padding-left: 10px; font-style: italic; font-size: 13px;">
587
  foreach ( $user_roles as $role => $name ) {
588
  $current = isset( $val['roles'][ $role ] ) ? $val['roles'][ $role ] : '';
589
  ?>
590
+ <tr valign="top" <?php echo $class; ?>>
591
+ <th scrope="row"><?php echo esc_attr( $name ) . $crown_icon; ?></th>
592
  <td>
593
+ <select name="wpuf_profile[roles][<?php echo esc_attr( $role ); ?>]" class="regular" style="min-width: 300px;" <?php echo esc_attr( $disabled ); ?>>
594
  <option value=""><?php esc_html_e( '&mdash; Select &mdash;', 'wp-user-frontend' ); ?></option>
595
+ <?php
596
+ if ( class_exists( 'WP_User_Frontend_Pro' ) ) {
597
+ foreach ( $forms as $form ) {
598
+ ?>
599
+ <option value="<?php echo esc_attr( $form->ID ); ?>"<?php selected( $current, $form->ID ); ?>><?php echo esc_html( $form->post_title ); ?></option>
600
+ <?php
601
+ }
602
+ }
603
+ ?>
604
  </select>
605
+ <?php
606
+ if ( ! class_exists( 'WP_User_Frontend_Pro' ) ) {
607
+ echo wpuf_get_pro_preview_html();
608
+ }
609
+ ?>
610
  </td>
611
  </tr>
612
  <?php
614
  ?>
615
  </table>
616
  <?php
 
617
  }
618
 
619
  add_action( 'wsa_form_bottom_wpuf_profile', 'wpuf_settings_field_profile' );
assets/css/admin.css CHANGED
@@ -139,8 +139,9 @@ span.wpuf_help {
139
  }
140
  .wpuf-settings-wrap h2.nav-tab-wrapper a.nav-tab {
141
  float: none;
142
- display: block;
143
- margin: 0;
 
144
  border: none;
145
  padding: 14px;
146
  border-bottom: 1px solid #c8d7e1;
@@ -149,7 +150,7 @@ span.wpuf_help {
149
  border-right: 1px solid #c8d7e1;
150
  color: #444;
151
  text-decoration: none;
152
- margin-right: -1px;
153
  background-color: #f1f1f1;
154
  }
155
  .wpuf-settings-wrap h2.nav-tab-wrapper a.nav-tab.nav-tab-active {
@@ -189,10 +190,14 @@ span.wpuf_help {
189
  .wpuf-settings-wrap h2.nav-tab-wrapper a.nav-tab#user_directory-tab .dashicons {
190
  color: #e74c3c;
191
  }
 
 
 
192
  .wpuf-settings-wrap .metabox-holder {
193
  flex: 3;
194
- margin-left: 30px;
195
  margin-bottom: 30px;
 
 
196
  }
197
  .wpuf-settings-wrap .metabox-holder h2 {
198
  border-bottom: 1px solid #c8d7e1;
@@ -637,6 +642,176 @@ ul.wpuf-form .wpuf-field-columns .wpuf-column-field-inner-columns .wpuf-column .
637
  .wpuf-setup-menu-link {
638
  display: none;
639
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
640
  .wpuf-xmp-tag {
641
  display: inline;
642
  }
@@ -997,7 +1172,7 @@ ul.wpuf-form .wpuf-field-columns .wpuf-column-field-inner-columns .wpuf-column .
997
  }
998
  .wpuf-subscription-pack-settings nav {
999
  background-color: #f1f1f1;
1000
- min-width: 200px;
1001
  border-right: 1px solid #e5e5e5;
1002
  }
1003
  .wpuf-subscription-pack-settings nav ul,
139
  }
140
  .wpuf-settings-wrap h2.nav-tab-wrapper a.nav-tab {
141
  float: none;
142
+ display: flex;
143
+ -webkit-align-items: center;
144
+ align-items: center;
145
  border: none;
146
  padding: 14px;
147
  border-bottom: 1px solid #c8d7e1;
150
  border-right: 1px solid #c8d7e1;
151
  color: #444;
152
  text-decoration: none;
153
+ margin: 0 -1px 0 0;
154
  background-color: #f1f1f1;
155
  }
156
  .wpuf-settings-wrap h2.nav-tab-wrapper a.nav-tab.nav-tab-active {
190
  .wpuf-settings-wrap h2.nav-tab-wrapper a.nav-tab#user_directory-tab .dashicons {
191
  color: #e74c3c;
192
  }
193
+ .wpuf-settings-wrap h2.nav-tab-wrapper a.nav-tab .pro-icon-title {
194
+ margin-left: auto;
195
+ }
196
  .wpuf-settings-wrap .metabox-holder {
197
  flex: 3;
 
198
  margin-bottom: 30px;
199
+ padding-left: 30px;
200
+ position: relative;
201
  }
202
  .wpuf-settings-wrap .metabox-holder h2 {
203
  border-bottom: 1px solid #c8d7e1;
642
  .wpuf-setup-menu-link {
643
  display: none;
644
  }
645
+ tr.pro-preview td {
646
+ display: inline-block;
647
+ position: relative;
648
+ }
649
+ .pro-preview-html {
650
+ position: relative;
651
+ }
652
+ tr.pro-preview td:hover .pro-field-overlay,
653
+ .pro-preview-html:hover .pro-field-overlay {
654
+ -webkit-opacity: 1;
655
+ opacity: 1;
656
+ display: block;
657
+ }
658
+ tr.pro-preview .pro-field-overlay,
659
+ .pro-preview-html .pro-field-overlay,
660
+ .metabox-holder .pro-field-overlay {
661
+ position: absolute;
662
+ width: 100%;
663
+ height: 100%;
664
+ background: rgba(0, 0, 0, 0.4);
665
+ border-radius: 5px;
666
+ top: 0;
667
+ left: 0;
668
+ display: none;
669
+ }
670
+ tr.pro-preview-html th {
671
+ width: 50%;
672
+ }
673
+ .pro-preview-html:hover ~ .pro-field-overlay {
674
+ display: block;
675
+ }
676
+ .pro-field-overlay:hover {
677
+ display: block;
678
+ }
679
+ a.wpuf-button.button-upgrade-to-pro {
680
+ padding: 10px 15px;
681
+ background: #ff9000;
682
+ color: #fff;
683
+ min-height: auto;
684
+ border-radius: 5px;
685
+ text-decoration: none;
686
+ }
687
+ .pro-field-overlay a.wpuf-button.button-upgrade-to-pro {
688
+ position: absolute;
689
+ top: 50%;
690
+ left: 50%;
691
+ -webkit-transform: translate(-50%, -50%);
692
+ transform: translate(-50%, -50%);
693
+ }
694
+ a.wpuf-button.button-upgrade-to-pro:hover {
695
+ background: #d07805;
696
+ }
697
+ span.pro-icon svg {
698
+ height: 1em;
699
+ }
700
+ span.pro-icon.icon-white svg path {
701
+ fill: #fff;
702
+ }
703
+ label span.pro-icon svg path {
704
+ fill: #fB9a28;
705
+ }
706
+ img.profile-header,
707
+ img.user-listing {
708
+ display: block;
709
+ width: 50%;
710
+ background: #fff;
711
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
712
+ box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
713
+ margin: -25px 0 15px 30px;
714
+ position: relative;
715
+ line-height: 0;
716
+ border: 1px solid #ededed;
717
+ padding: 4px;
718
+ -webkit-filter: grayscale(100%) opacity(0.3);
719
+ /* Safari 6.0 - 9.0 */
720
+ filter: grayscale(100%) opacity(0.3);
721
+ }
722
+ img.profile-header:hover,
723
+ input[type=radio]:checked + img.profile-header,
724
+ img.profile-header.active,
725
+ img.user-listing:hover,
726
+ input[type=radio]:checked + img.user-listing,
727
+ img.user-listing.active {
728
+ -webkit-filter: grayscale(0%) opacity(1) drop-shadow(8px 8px 5px #ccc);
729
+ /* Safari 6.0 - 9.0 */
730
+ filter: grayscale(0%) opacity(1) drop-shadow(8px 8px 5px #ccc);
731
+ }
732
+ .wpuf-pro-field-tooltip {
733
+ background: #000;
734
+ width: max-content;
735
+ padding: 25px 50px 20px 20px;
736
+ border-radius: 5px;
737
+ color: #fff;
738
+ position: absolute;
739
+ top: 0;
740
+ left: 50%;
741
+ -webkit-transform: translate(-50%, -100%);
742
+ transform: translate(-50%, -100%);
743
+ -webkit-box-sizing: border-box;
744
+ box-sizing: border-box;
745
+ z-index: 99999;
746
+ display: none;
747
+ -webkit-opacity: 0;
748
+ opacity: 0;
749
+ -webkit-transition: opacity 0.8s;
750
+ transition: opacity 0.8s;
751
+ }
752
+ h3.tooltip-header {
753
+ color: #fff;
754
+ }
755
+ .wpuf-pro-field-tooltip ul li span.tooltip-check svg path {
756
+ fill: #139F84;
757
+ }
758
+ .wpuf-pro-field-tooltip ul {
759
+ margin-bottom: 30px;
760
+ }
761
+ .wpuf-pro-field-tooltip ul li {
762
+ font-size: 1.2em;
763
+ line-height: 1.5em;
764
+ font-weight: 400;
765
+ }
766
+ span.tooltip-check {
767
+ margin-right: 10px;
768
+ }
769
+ .wpuf-pro-field-tooltip .pro-link {
770
+ display: flex;
771
+ -webkit-justify-content: center;
772
+ justify-content: center;
773
+ margin-left: 25px;
774
+ }
775
+ .wpuf-pro-field-tooltip i {
776
+ position: absolute;
777
+ top: 100%;
778
+ left: 50%;
779
+ margin-left: -12px;
780
+ width: 24px;
781
+ height: 12px;
782
+ overflow: hidden;
783
+ }
784
+ .wpuf-pro-field-tooltip i::after {
785
+ content: '';
786
+ position: absolute;
787
+ width: 12px;
788
+ height: 12px;
789
+ left: 50%;
790
+ -webkit-transform: translate(-50%, -50%) rotate(45deg);
791
+ transform: translate(-50%, -50%) rotate(45deg);
792
+ background-color: #000;
793
+ }
794
+ tr.pro-preview span.pro-icon,
795
+ tr span.pro-icon-title {
796
+ position: relative;
797
+ padding-top: 10px;
798
+ }
799
+ a span.pro-icon-title {
800
+ position: relative;
801
+ }
802
+ a span.pro-icon-title wpuf-pro-field-tooltip {
803
+ left: 185px;
804
+ }
805
+ span.pro-icon-title:hover .wpuf-pro-field-tooltip {
806
+ display: block;
807
+ -webkit-opacity: 1;
808
+ opacity: 1;
809
+ }
810
+ span.pro-icon:hover .wpuf-pro-field-tooltip {
811
+ display: block;
812
+ -webkit-opacity: 1;
813
+ opacity: 1;
814
+ }
815
  .wpuf-xmp-tag {
816
  display: inline;
817
  }
1172
  }
1173
  .wpuf-subscription-pack-settings nav {
1174
  background-color: #f1f1f1;
1175
+ min-width: max-content;
1176
  border-right: 1px solid #e5e5e5;
1177
  }
1178
  .wpuf-subscription-pack-settings nav ul,
assets/css/admin/wpuf-module.css ADDED
@@ -0,0 +1,325 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .font-orange {
2
+ color: #ff9000;
3
+ }
4
+
5
+ .font-gray {
6
+ color: #656668;
7
+ }
8
+
9
+ .font-black {
10
+ color: #000;
11
+ }
12
+
13
+ .font-bold {
14
+ font-weight: bold;
15
+ }
16
+
17
+ .header-one {
18
+ font-size: 30px;
19
+ font-weight: 500;
20
+ }
21
+
22
+ .header-two {
23
+ font-size: 20px;
24
+ font-weight: 400;
25
+ }
26
+
27
+ .header-three {
28
+ font-size: 20px;
29
+ font-weight: 400;
30
+ }
31
+
32
+ .modal-window h2 {
33
+ margin: 0;
34
+ padding: 0;
35
+ line-height: 1.6em;
36
+ }
37
+
38
+ .wpuf-toggle-switch {
39
+ position: relative;
40
+ display: inline-block;
41
+ width: 50px;
42
+ height: 26px;
43
+ }
44
+
45
+ .wpuf-toggle-switch input {
46
+ display: none;
47
+ }
48
+
49
+ .wpuf-toggle-switch .slider {
50
+ position: absolute;
51
+ cursor: pointer;
52
+ top: 0;
53
+ left: 0;
54
+ right: 0;
55
+ bottom: 0;
56
+ background-color: #ccc;
57
+ -webkit-transition: .4s;
58
+ transition: .4s;
59
+ }
60
+
61
+ .wpuf-toggle-switch .slider:before {
62
+ position: absolute;
63
+ content: "";
64
+ height: 18px;
65
+ width: 18px;
66
+ left: 3px;
67
+ bottom: 4px;
68
+ background-color: white;
69
+ -webkit-transition: .4s;
70
+ transition: .4s;
71
+ }
72
+
73
+ .wpuf-toggle-switch input:checked + .slider {
74
+ background-color: #0073aa;
75
+ }
76
+
77
+ .wpuf-toggle-switch input:focus + .slider {
78
+ -webkit-box-shadow: 0 0 1px #2196F3;
79
+ box-shadow: 0 0 1px #2196F3;
80
+ }
81
+
82
+ .wpuf-toggle-switch input:checked + .slider:before {
83
+ -webkit-transform: translateX(26px);
84
+ -ms-transform: translateX(26px);
85
+ transform: translateX(26px);
86
+ }
87
+
88
+ /* Rounded sliders */
89
+ .slider.round {
90
+ border-radius: 34px;
91
+ }
92
+
93
+ .slider.round:before {
94
+ border-radius: 50%;
95
+ }
96
+
97
+ .wpuf-modules .plugin-card {
98
+ border: 1px solid #e5e5e5;
99
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
100
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
101
+ position: relative;
102
+ }
103
+
104
+ .wpuf-modules .plugin-card .plugin-name {
105
+ color: #0073aa;
106
+ }
107
+
108
+ .wpuf-modules .plugin-card .desc,
109
+ .wpuf-modules .plugin-card .name {
110
+ margin-left: 115px;
111
+ }
112
+
113
+ .wpuf-modules .plugin-card .plugin-card-top {
114
+ min-height: 110px;
115
+ }
116
+
117
+ .wpuf-modules .plugin-card .plugin-icon {
118
+ width: 96px;
119
+ height: 96px;
120
+ margin: 0 20px 0px 0;
121
+ }
122
+
123
+ .activate-deactivate-all {
124
+ float: right;
125
+ margin-top: 15px;
126
+ }
127
+
128
+ .activate-deactivate-all span {
129
+ color: #0073aa;
130
+ cursor: pointer;
131
+ }
132
+
133
+ .wpuf-doc-link {
134
+ clear: both;
135
+ text-align: center;
136
+ padding-left: 26px;
137
+ padding-top: 26px;
138
+ }
139
+
140
+ .plugin-card:hover .form-create-overlay {
141
+ -webkit-opacity: 1;
142
+ opacity: 1;
143
+ z-index: 1;
144
+ }
145
+ .form-create-overlay {
146
+ -webkit-opacity: 0;
147
+ opacity: 0;
148
+ position: absolute;
149
+ width: 100%;
150
+ height: 100%;
151
+ content: "";
152
+ background: rgba(0, 0, 0, .5);
153
+ top: 0;
154
+ left: 0;
155
+ z-index: -1;
156
+ }
157
+ a.wpuf-button.button-upgrade-to-pro {
158
+ padding: 10px 15px;
159
+ background: #ff9000;
160
+ color: #fff;
161
+ min-height: auto;
162
+ border-radius: 5px;
163
+ }
164
+
165
+ .form-create-overlay a.wpuf-button.button-upgrade-to-pro {
166
+ position: absolute;
167
+ top: 50%;
168
+ left: 50%;
169
+ -webkit-transform: translate(-50%, -50%);
170
+ transform: translate(-50%, -50%);
171
+ }
172
+
173
+ span.pro-icon svg {
174
+ height: 1em;
175
+ }
176
+
177
+ span.pro-icon svg path {
178
+ fill: #fff;
179
+ }
180
+
181
+ .wpuf-popup-window {
182
+ display: none;
183
+ position: fixed;
184
+ z-index: 9999; /* to display over WP admin menu */
185
+ background: rgba(0, 0, 0, .5);
186
+ width: 100%;
187
+ height: 100%;
188
+ top: 0;
189
+ left: 0;
190
+ }
191
+
192
+ .wpuf-popup-window.state-show {
193
+ display: block;
194
+ }
195
+
196
+ ul.slider-container li img {
197
+ max-width: 100%;
198
+ height: auto;
199
+ }
200
+
201
+ .modal-window {
202
+ position: fixed;
203
+ line-height: initial;
204
+ background: #fff;
205
+ padding: 50px 80px 30px;
206
+ -webkit-border-radius: 5px;
207
+ border-radius: 5px;
208
+ width: 55%;
209
+ top: 50%;
210
+ left: 50%;
211
+ -webkit-transform: translate(-50%, -50%);
212
+ transform: translate(-50%, -50%);
213
+ }
214
+
215
+ .modal-window-inner {
216
+ /*display: -webkit-box;*/
217
+ display: grid;
218
+ -webkit-grid-auto-flow: column;
219
+ grid-auto-flow: column;
220
+ -webkit-grid-auto-columns: 1fr;
221
+ grid-auto-columns: 1fr;
222
+ -webkit-align-items: end;
223
+ align-items: end;
224
+ margin: 0 auto;
225
+ }
226
+
227
+ .popup-close-button {
228
+ display: block;
229
+ cursor: pointer;
230
+ position: absolute;
231
+ top: 10px;
232
+ right: 10px;
233
+ padding: 10px;
234
+ -webkit-opacity: .4;
235
+ opacity: .4;
236
+ -webkit-transition: .4s;
237
+ transition: .4s;
238
+ }
239
+
240
+ .popup-close-button:hover {
241
+ -webkit-opacity: 1;
242
+ opacity: 1;
243
+ }
244
+
245
+ .popup-diamond svg {
246
+ background: linear-gradient(220.03deg, #FFF3DD 39.57%, #FFE3AD 97.5%);
247
+ padding: 6px;
248
+ -webkit-border-radius: 5px;
249
+ border-radius: 5px;
250
+ }
251
+
252
+ .wpuf-popup-list-area {
253
+ margin-bottom: 64px;
254
+ }
255
+
256
+ .modal-window span.pro-icon {
257
+ margin-left: 5px;
258
+ }
259
+
260
+ .single-checklist {
261
+ display: flex;
262
+ }
263
+
264
+ .single-checklist p {
265
+ color: #656668;
266
+ }
267
+
268
+ .check-icon {
269
+ margin: 1em 14px 0 0;
270
+ }
271
+
272
+ .check-icon svg {
273
+ background: #139F84;
274
+ padding: 11px 10px;
275
+ -webkit-border-radius: 20px;
276
+ border-radius: 20px;
277
+ }
278
+
279
+ .modal-window a.wpuf-button.button-upgrade-to-pro {
280
+ text-decoration: none;
281
+ padding: 15px 30px;
282
+ }
283
+
284
+ .slider-area {
285
+ margin-left: 30px;
286
+ overflow: hidden;
287
+ text-align: center;
288
+ }
289
+
290
+ .slider-nav-mousedrag .slider-container {
291
+ overflow: hidden;
292
+ max-width: fit-content;
293
+ }
294
+
295
+ .slider-area .single-slider img {
296
+ width: 100%;
297
+ }
298
+
299
+ #wpuf-slider .slider-indicators {
300
+ position: initial;
301
+ }
302
+
303
+ .slider-indicators button {
304
+ -webkit-filter: invert(94%) sepia(8%) saturate(249%) hue-rotate(178deg) brightness(99%) contrast(84%);
305
+ filter: invert(94%) sepia(8%) saturate(249%) hue-rotate(178deg) brightness(99%) contrast(84%);
306
+ }
307
+
308
+ .slider-indicators button.active {
309
+ -webkit-filter: invert(62%) sepia(30%) saturate(1208%) hue-rotate(119deg) brightness(92%) contrast(80%);
310
+ filter: invert(62%) sepia(30%) saturate(1208%) hue-rotate(119deg) brightness(92%) contrast(80%);
311
+ }
312
+
313
+ .footer-feature {
314
+ display: flex;
315
+ justify-content: space-between;
316
+ margin-top: 40px;
317
+ }
318
+
319
+ .footer-feature p svg {
320
+ margin-right: 5px;
321
+ }
322
+
323
+ .footer-feature p svg path {
324
+ fill: #139F84;
325
+ }
assets/css/frontend-forms.css CHANGED
@@ -189,6 +189,11 @@ body #form-preview-stage.wpuf-style ul.wpuf-form .wpuf-fields select[multiple],
189
  body .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields select[multiple] {
190
  height: auto;
191
  }
 
 
 
 
 
192
  body #form-preview-stage.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit],
193
  body .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit] {
194
  font-size: 16px;
@@ -945,9 +950,6 @@ body .pass-strength-result.strong {
945
  background-color: #c3ff88;
946
  border-color: #8dff1c !important;
947
  }
948
- body .password[type="text"] {
949
- display: none;
950
- }
951
  body table.wpuf-table {
952
  border: 1px solid #E7E7E7;
953
  margin: 0 0px 10px 0;
@@ -1096,16 +1098,30 @@ body fieldset.wpuf-multistep-fieldset {
1096
  body fieldset.wpuf-multistep-fieldset.field-active {
1097
  display: block;
1098
  }
1099
- body fieldset.wpuf-multistep-fieldset .wpuf-multistep-prev-btn,
1100
- body fieldset.wpuf-multistep-fieldset .wpuf-multistep-next-btn {
1101
  position: absolute;
1102
- bottom: 5px;
 
1103
  }
1104
- body fieldset.wpuf-multistep-fieldset .wpuf-multistep-prev-btn {
1105
- left: 10px;
 
 
 
 
 
 
 
1106
  }
1107
- body fieldset.wpuf-multistep-fieldset .wpuf-multistep-next-btn {
1108
- right: 10px;
 
 
 
 
 
 
 
1109
  }
1110
  body .wpuf-multistep-progressbar {
1111
  overflow: hidden;
189
  body .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields select[multiple] {
190
  height: auto;
191
  }
192
+ body #form-preview-stage.wpuf-style ul.wpuf-form .wpuf-fields-inline,
193
+ body .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields-inline {
194
+ display: flex;
195
+ justify-content: space-between;
196
+ }
197
  body #form-preview-stage.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit],
198
  body .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit] {
199
  font-size: 16px;
950
  background-color: #c3ff88;
951
  border-color: #8dff1c !important;
952
  }
 
 
 
953
  body table.wpuf-table {
954
  border: 1px solid #E7E7E7;
955
  margin: 0 0px 10px 0;
1098
  body fieldset.wpuf-multistep-fieldset.field-active {
1099
  display: block;
1100
  }
1101
+ body fieldset.wpuf-multistep-fieldset button.wpuf-multistep-next-btn.btn.btn-primary {
 
1102
  position: absolute;
1103
+ bottom: 0;
1104
+ right: 0;
1105
  }
1106
+ body fieldset.wpuf-multistep-fieldset button.wpuf-multistep-prev-btn.btn.btn-primary {
1107
+ position: absolute;
1108
+ bottom: 0;
1109
+ left: 0;
1110
+ }
1111
+ body fieldset.wpuf-multistep-fieldset a#wpuf-post-draft {
1112
+ position: absolute;
1113
+ bottom: 0;
1114
+ right: calc(50% - 35px);
1115
  }
1116
+ body fieldset.wpuf-multistep-fieldset span.wpuf-draft-saved {
1117
+ position: absolute;
1118
+ bottom: 0;
1119
+ right: calc(50% - 150px);
1120
+ }
1121
+ body fieldset.wpuf-multistep-fieldset span.wpuf-loading {
1122
+ position: absolute;
1123
+ bottom: 8px;
1124
+ right: calc(50% - 60px);
1125
  }
1126
  body .wpuf-multistep-progressbar {
1127
  overflow: hidden;
assets/css/wpuf-form-builder.css CHANGED
@@ -958,7 +958,7 @@ ul.wpuf-form li .wpuf-password-field:after {
958
  text-align: center;
959
  min-height: 280px;
960
  width: 220px;
961
- border: 0px;
962
  box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.1);
963
  position: relative;
964
  border-radius: 3px;
@@ -1066,6 +1066,10 @@ ul.wpuf-form li .wpuf-password-field:after {
1066
  .wpuf-form-template-modal .content ul li.template-inactive .description {
1067
  color: #ddd;
1068
  }
 
 
 
 
1069
  .wpuf-form-template-modal .content ul li.blank-form {
1070
  text-align: center;
1071
  }
@@ -1079,6 +1083,16 @@ ul.wpuf-form li .wpuf-password-field:after {
1079
  width: auto;
1080
  height: auto;
1081
  }
 
 
 
 
 
 
 
 
 
 
1082
  .wpuf-form-template-modal footer {
1083
  position: absolute;
1084
  left: 0;
@@ -1322,6 +1336,12 @@ ul.wpuf-form li .wpuf-password-field:after {
1322
  padding: 10px;
1323
  display: none;
1324
  }
 
 
 
 
 
 
1325
  @media (min-width: 768px) and (max-width: 991px) {
1326
  #wpuf-form-builder {
1327
  width: 100% !important;
958
  text-align: center;
959
  min-height: 280px;
960
  width: 220px;
961
+ border: 0;
962
  box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.1);
963
  position: relative;
964
  border-radius: 3px;
1066
  .wpuf-form-template-modal .content ul li.template-inactive .description {
1067
  color: #ddd;
1068
  }
1069
+ .wpuf-form-template-modal .content ul li.template-inactive h3 {
1070
+ display: flex;
1071
+ justify-content: space-between;
1072
+ }
1073
  .wpuf-form-template-modal .content ul li.blank-form {
1074
  text-align: center;
1075
  }
1083
  width: auto;
1084
  height: auto;
1085
  }
1086
+ .wpuf-form-template-modal .content ul li a.wpuf-button.button-upgrade-to-pro {
1087
+ padding: 10px 15px;
1088
+ background: #ff9000;
1089
+ color: #fff;
1090
+ min-height: auto;
1091
+ border-radius: 5px;
1092
+ }
1093
+ .wpuf-form-template-modal .content ul li a.wpuf-button.button-upgrade-to-pro:hover {
1094
+ background: #d07805;
1095
+ }
1096
  .wpuf-form-template-modal footer {
1097
  position: absolute;
1098
  left: 0;
1336
  padding: 10px;
1337
  display: none;
1338
  }
1339
+ span.pro-icon svg {
1340
+ height: 1em;
1341
+ }
1342
+ span.pro-icon svg path {
1343
+ fill: #fff;
1344
+ }
1345
  @media (min-width: 768px) and (max-width: 991px) {
1346
  #wpuf-form-builder {
1347
  width: 100% !important;
assets/images/check.svg ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <svg width="10" height="8" viewBox="0 0 10 8" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M8.92671 1.13426C8.59667 0.804188 8.06162 0.804234 7.73159 1.13423L3.37421 5.49165L1.89718 4.01462C1.56712 3.68454 1.03208 3.68467 0.702082 4.0146C0.372021 4.34463 0.372046 4.8797 0.702068 5.20972L2.77666 7.28428C3.10675 7.61442 3.64199 7.61406 3.97177 7.28428L8.92668 2.32937C9.25676 1.99933 9.25668 1.46426 8.92671 1.13426ZM0.992017 4.85283C1.00166 4.86513 1.01215 4.87698 1.02348 4.88831L3.09807 6.96287C3.25053 7.11537 3.49796 7.11527 3.65036 6.96287L8.60528 2.00795C8.74649 1.86675 8.75695 1.64433 8.6367 1.49107C8.7569 1.64433 8.74643 1.86671 8.60524 2.00789L3.65032 6.96281C3.49792 7.11521 3.25048 7.11532 3.09803 6.96281L1.02343 4.88825C1.01212 4.87694 1.00165 4.86511 0.992017 4.85283Z" fill="white"/>
3
+ </svg>
assets/images/conditional-form.png ADDED
Binary file
assets/images/content-restriction.png ADDED
Binary file
assets/images/crown.svg ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <svg width="20" height="15" viewBox="0 0 20 15" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M19.2131 4.11564C19.2161 4.16916 19.2121 4.22364 19.1983 4.27775L17.9646 10.5323C17.9024 10.7741 17.6796 10.9441 17.4235 10.9455L10.0216 10.9818H10.0188H2.61682C2.35933 10.9818 2.13495 10.8112 2.07275 10.5681L0.839103 4.29542C0.824897 4.23985 0.820785 4.18385 0.824374 4.12895C0.34714 3.98269 0 3.54829 0 3.03636C0 2.40473 0.528224 1.89091 1.17757 1.89091C1.82692 1.89091 2.35514 2.40473 2.35514 3.03636C2.35514 3.39207 2.18759 3.71033 1.92523 3.92058L3.46976 5.43433C3.86011 5.81695 4.40179 6.03629 4.95596 6.03629C5.61122 6.03629 6.23596 5.7336 6.62938 5.22647L9.1677 1.95491C8.95447 1.74764 8.82243 1.46124 8.82243 1.14545C8.82243 0.513818 9.35065 0 10 0C10.6493 0 11.1776 0.513818 11.1776 1.14545C11.1776 1.45178 11.0526 1.72982 10.8505 1.93556L10.8526 1.93811L13.3726 5.21869C13.7658 5.73069 14.3928 6.03636 15.0499 6.03636C15.6092 6.03636 16.1351 5.82451 16.5305 5.43978L18.0848 3.92793C17.8169 3.71775 17.6449 3.39644 17.6449 3.03636C17.6449 2.40473 18.1731 1.89091 18.8224 1.89091C19.4718 1.89091 20 2.40473 20 3.03636C20 3.53462 19.6707 3.9584 19.2131 4.11564ZM17.8443 12.6909C17.8443 12.3897 17.5932 12.1455 17.2835 12.1455H2.77884C2.46916 12.1455 2.21809 12.3897 2.21809 12.6909V14C2.21809 14.3012 2.46916 14.5455 2.77884 14.5455H17.2835C17.5932 14.5455 17.8443 14.3012 17.8443 14V12.6909Z" fill="#FB9A28"/>
3
+ </svg>
assets/images/diamond.svg ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg width="32" height="30" viewBox="0 0 32 30" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M22.3651 16L16.0787 30L31.5338 16H22.3651Z" fill="#FBDD7E"/>
3
+ <path d="M7.11201 8L0.623596 15.3469H9.92589L7.11201 8Z" fill="#FFCD73"/>
4
+ <path d="M22.682 15.3469H31.9843L25.4958 8L22.682 15.3469Z" fill="#FCC471"/>
5
+ <path d="M22.682 15.3469L16.304 8L9.92596 15.3469H22.682Z" fill="#FCC471"/>
6
+ <path d="M16.3039 8H7.11195L9.92584 15.3469L16.3039 8Z" fill="#FFAA64"/>
7
+ <path d="M25.4958 8H16.3039L22.6819 15.3469L25.4958 8Z" fill="#FBDD7E"/>
8
+ <path d="M9.45512 16L16.0787 30L22.7023 16H9.45512Z" fill="#FFAA64"/>
9
+ <path d="M0.623596 16L16.0787 30L9.79225 16H0.623596Z" fill="#FF8C5A"/>
10
+ <path d="M15.8892 1V5" stroke="#FF8C5A" stroke-linecap="round"/>
11
+ <path d="M8.35118 2L11.4736 4.82843" stroke="#FF8C5A" stroke-linecap="round"/>
12
+ <path d="M23.4273 2L20.3049 4.82843" stroke="#FF8C5A" stroke-linecap="round"/>
13
+ </svg>
assets/images/modules.png ADDED
Binary file
assets/images/profile-header-template-1.jpg ADDED
Binary file
assets/images/profile-header-template-2.jpg ADDED
Binary file
assets/images/profile-header-template-3.jpg ADDED
Binary file
assets/images/templates/edd.png ADDED
Binary file
assets/images/user-listing-template-1.jpg ADDED
Binary file
assets/images/user-listing-template-2.jpg ADDED
Binary file
assets/images/user-listing-template-3.jpg ADDED
Binary file
assets/images/user-listing-template-4.jpg ADDED
Binary file
assets/images/user-listing-template-5.jpg ADDED
Binary file
assets/images/user-listing-template-6.jpg ADDED
Binary file
assets/images/woocommerce-form-template.png ADDED
Binary file
assets/images/wpuf-updates.png ADDED
Binary file
assets/images/x.svg ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M0.781391 16C0.626854 16 0.47578 15.9542 0.347278 15.8684C0.218776 15.7825 0.11862 15.6605 0.0594773 15.5177C0.000334659 15.375 -0.0151368 15.2179 0.0150197 15.0663C0.0451763 14.9147 0.119606 14.7755 0.228895 14.6663L14.6663 0.228852C14.8128 0.0823204 15.0116 0 15.2188 0C15.426 0 15.6248 0.0823204 15.7713 0.228852C15.9178 0.375383 16.0001 0.574122 16.0001 0.781348C16.0001 0.988574 15.9178 1.18731 15.7713 1.33384L1.33389 15.7713C1.2614 15.8439 1.17527 15.9015 1.08046 15.9407C0.985646 15.98 0.884011 16.0001 0.781391 16Z" fill="#999999"/>
3
+ <path d="M15.2188 16C15.1161 16.0001 15.0145 15.98 14.9197 15.9407C14.8249 15.9015 14.7387 15.8439 14.6663 15.7713L0.228852 1.33384C0.0823204 1.18731 0 0.988574 0 0.781348C0 0.574122 0.0823204 0.375383 0.228852 0.228852C0.375383 0.0823204 0.574122 0 0.781348 0C0.988574 0 1.18731 0.0823204 1.33384 0.228852L15.7713 14.6663C15.8805 14.7755 15.955 14.9147 15.9851 15.0663C16.0153 15.2179 15.9998 15.375 15.9407 15.5177C15.8815 15.6605 15.7814 15.7825 15.6529 15.8684C15.5244 15.9542 15.3733 16 15.2188 16Z" fill="#999999"/>
4
+ </svg>
assets/js-templates/form-components.php CHANGED
@@ -670,11 +670,15 @@
670
  <script type="text/x-template" id="tmpl-wpuf-form-post_excerpt">
671
  <div class="wpuf-fields">
672
  <textarea
 
673
  :class="class_names('textareafield')"
674
  :placeholder="field.placeholder"
675
  :rows="field.rows"
676
  :cols="field.cols"
677
  >{{ field.default }}</textarea>
 
 
 
678
  <span v-if="field.help" class="wpuf-help" v-html="field.help" ></span>
679
  </div>
680
  </script>
670
  <script type="text/x-template" id="tmpl-wpuf-form-post_excerpt">
671
  <div class="wpuf-fields">
672
  <textarea
673
+ v-if="'no' === field.rich"
674
  :class="class_names('textareafield')"
675
  :placeholder="field.placeholder"
676
  :rows="field.rows"
677
  :cols="field.cols"
678
  >{{ field.default }}</textarea>
679
+
680
+ <text-editor v-if="'no' !== field.rich" :rich="field.rich" :default_text="field.default"></text-editor>
681
+
682
  <span v-if="field.help" class="wpuf-help" v-html="field.help" ></span>
683
  </div>
684
  </script>
assets/js/admin/wpuf-module.js ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ;(function($){
2
+ $( '.button-upgrade-to-pro' ).click( function () {
3
+ let popupWindow = $( '.wpuf-popup-window' );
4
+ // append the popup window to the body for styling
5
+ $( 'body' ).css( 'position', 'relative' );
6
+ $( 'body' ).append( popupWindow );
7
+ $( '.wpuf-popup-window' ).addClass( 'state-show' );
8
+ } );
9
+
10
+ $( '.popup-close-button' ).click( function () {
11
+ closePopUp();
12
+ } );
13
+
14
+ // init swiffyslider
15
+ $( window ).on( 'load', function () {
16
+ swiffyslider.initSlider( document.getElementById( 'wpuf-slider' ) );
17
+ } );
18
+
19
+ // show the overlay on hovering over to each modules
20
+ $( '.wp-list-table.wpuf-modules .plugin-card' ).on( 'mouseover', function () {
21
+ let overlay = $( '.form-create-overlay' );
22
+ overlay.appendTo( this );
23
+ } );
24
+
25
+ $( '#wpuf-upgrade-popup' ).on( 'click', function( e ) {
26
+ let modal = $( '.modal-window' );
27
+
28
+ // clicking outside the popup modal
29
+ if ( ! modal.is( e.target ) && modal.has( e.target ).length === 0) {
30
+ closePopUp();
31
+ }
32
+ } );
33
+
34
+ // close the 'upgrade to pro' popup on the module page
35
+ function closePopUp() {
36
+ $( '.wpuf-popup-window' ).removeClass( 'state-show' );
37
+ $( 'body' ).css( 'position', 'initial' );
38
+ }
39
+ })(jQuery);
assets/js/frontend-form.js CHANGED
@@ -69,7 +69,7 @@
69
  $( ':submit[name="wpuf_user_subscription_cancel"]').click(function(e){
70
  e.preventDefault();
71
 
72
- swal({
73
  text: wpuf_frontend.cancelSubMsg,
74
  type: 'warning',
75
  showCancelButton: true,
@@ -129,7 +129,7 @@
129
 
130
  if ( typeof wp.passwordStrength != 'undefined' ) {
131
 
132
- strength = wp.passwordStrength.meter( pass1, wp.passwordStrength.userInputBlacklist(), pass1 );
133
 
134
  switch ( strength ) {
135
  case 2:
@@ -479,7 +479,7 @@
479
  grecaptcha.reset();
480
  }
481
 
482
- swal({
483
  html: res.error,
484
  type: 'warning',
485
  showCancelButton: false,
@@ -504,52 +504,68 @@
504
  },
505
 
506
  validateForm: function( self ) {
507
-
508
- var temp,
509
- temp_val = '',
510
- error = false,
511
- error_type = '',
512
- rich_texts = [];
513
 
514
  // remove all initial errors if any
515
- WP_User_Frontend.removeErrors(self);
516
- WP_User_Frontend.removeErrorNotice(self);
517
 
518
- var visibleFields = self.find('input:visible, textarea:visible, select:visible, .wpuf-rich-validation');
 
519
 
520
  visibleFields.each( function( i, item ) {
521
- var input_type = $(item).attr('type');
522
- var data_type = $(item).data('type');
523
- var required = $(item).data('required');
524
- var val = '';
525
 
526
- switch(data_type) {
527
  case 'rich':
528
- var name = $(item).data('id')
529
- // val = $.trim( tinyMCE.get(name).getContent() );
530
- var item = $(item);
531
- var editor_id = item.data('id');
532
- var item_name = item.data('name');
533
- val = $.trim( tinyMCE.get(editor_id).getContent() );
534
 
535
  if ( required === 'yes' && val === '' ) {
536
- error = true;
537
- error_type = 'required';
538
- WP_User_Frontend.markError(item);
 
 
 
 
 
 
 
 
 
 
 
 
539
  }
540
 
541
- rich_texts.push(item_name + '=' + encodeURIComponent( val ) );
542
 
543
  break;
544
  case 'textarea':
545
  case 'text':
546
- val = $.trim( $(item).val() );
547
 
548
  if ( required === 'yes' && val === '' ) {
549
- error = true;
550
- error_type = 'required';
 
 
551
 
552
- WP_User_Frontend.markError( item, error_type );
 
 
 
 
 
 
 
 
 
553
 
554
  break;
555
  }
@@ -558,199 +574,271 @@
558
  // Get intlTelInput instance
559
  var iti = window.intlTelInputGlobals.getInstance( item );
560
  if ( '' !== iti.getNumber() && ! iti.isValidNumber() ) {
561
- error = true;
562
- error_type = 'validation';
563
- WP_User_Frontend.markError( item, error_type );
 
564
 
565
  break;
566
  }
567
 
568
- var name = $(item).attr('name');
569
  var value = iti.getNumber();
570
- $('<input>').attr('type', 'hidden').attr('name', name).attr('value', value).appendTo(self); // append the mobile number with country code
 
 
 
 
 
 
571
 
572
  break;
573
  }
574
 
575
- if ( input_type === 'url' && val !== '' && ! WP_User_Frontend.isValidURL( val ) ) {
576
- error = true;
577
- error_type = 'validation';
578
- WP_User_Frontend.markError( item, error_type );
 
 
 
 
 
579
 
580
  break;
581
  }
582
 
583
- // check for content restriction
584
- error = WP_User_Frontend.editorLimit.checkRestrictionError(item);
 
 
 
 
 
 
585
  break;
586
  case 'password':
587
  case 'confirm_password':
588
  var hasRepeat = $(item).data('repeat');
 
 
589
 
590
  val = $.trim( $(item).val() );
591
 
592
  if ( required === 'yes' && val === '' ) {
593
- error = true;
594
- error_type = 'required';
595
- WP_User_Frontend.markError( item, error_type );
 
 
 
 
 
 
 
 
 
 
 
596
 
597
  break;
598
  }
599
 
600
  if ( hasRepeat ) {
601
- var repeatItem = $('[data-type="confirm_password"]').eq(0);;
602
 
603
- if ( repeatItem.val() != val ) {
604
- error = true;
605
- error_type = 'mismatch';
 
 
 
 
606
 
607
- WP_User_Frontend.markError( repeatItem, error_type );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
608
  }
609
  }
 
610
  break;
611
  case 'select':
612
  val = $(item).val();
613
 
614
- if ( required === 'yes' && val == '-1' ) {
615
- error = true;
616
- error_type = 'required';
617
-
618
- WP_User_Frontend.markError( item, error_type );
619
  }
620
  break;
621
  case 'multiselect':
622
- val = $(item).val();
623
 
624
  if ( required === 'yes' && val.length === 0 ) {
625
- error = true;
626
- error_type = 'required';
627
- WP_User_Frontend.markError( item, error_type );
 
628
  }
629
  break;
630
  case 'tax-checkbox':
631
  var length = $(item).children().find('input:checked').length;
632
 
633
  if ( required === 'yes' && ! length ) {
634
- error = true;
635
- error_type = 'required';
636
- WP_User_Frontend.markError( item, error_type );
 
637
  }
638
  break;
639
  case 'radio':
640
- var length = $(item).find('input:checked').length;
 
 
641
 
642
  if ( required === 'yes' && ! length ) {
643
- error = true;
644
- error_type = 'required';
645
- WP_User_Frontend.markError( item, error_type );
 
646
  }
 
647
  break;
648
  case 'file':
649
- var length = $(item).find('ul').children().length;
650
 
651
  if ( required === 'yes' && ! length ) {
652
- error = true;
653
- error_type = 'required';
654
-
655
- // make it warn collor
656
- WP_User_Frontend.markError( item, error_type );
657
  }
658
  break;
659
  case 'email':
660
- val = $(item).val();
661
 
662
  if ( required === 'yes' && val === '' ) {
663
- error = true;
664
- error_type = 'required';
665
- WP_User_Frontend.markError( item, error_type );
 
666
 
667
  break;
668
  }
669
 
670
  if ( val !== '' && ! WP_User_Frontend.isValidEmail( val ) ) {
671
- error = true;
672
- error_type = 'validation';
673
- WP_User_Frontend.markError( item, error_type );
 
674
  }
675
  break;
676
  case 'url':
677
  var val = $(item).val();
678
 
679
  if ( required === 'yes' && val === '' ) {
680
- error = true;
681
- error_type = 'required';
682
- WP_User_Frontend.markError( item, error_type );
 
683
 
684
  break;
685
  }
686
 
687
  if ( val !== '' && ! WP_User_Frontend.isValidURL( val ) ) {
688
- error = true;
689
- error_type = 'validation';
690
- WP_User_Frontend.markError( item, error_type );
 
691
  }
692
  break;
693
- default: // radio fields, Google map etc.
694
  // if this is a Google map
695
- if ( $(item).attr('id') && $(item).attr('id').startsWith('wpuf-map') ) {
696
- var mapContainer = $(item).parents('.wpuf-form-google-map-container');
697
- map_field = $(mapContainer).find('input[id^="wpuf-map-lat"]');
698
- required = $(map_field).data('required');
699
- val = $(map_field).val(); // needs to grab from parent to get all the data
700
-
701
- if ( required == 'yes' && val == '' ) {
702
- error = true;
703
- error_type = 'required';
704
- WP_User_Frontend.markError( mapContainer, error_type );
 
705
  }
706
  }
707
- break;
708
 
 
 
 
 
 
 
 
 
 
 
 
 
 
709
  }
710
 
711
- // if error found, bail out
712
- if ( error ) {
713
- WP_User_Frontend.markError(item, error_type);
714
- // WP_User_Frontend.addErrorNotice(self,'end');
715
 
716
- return false;
 
 
 
 
717
  }
718
- });
 
 
 
 
 
719
 
720
  // Fields that are conditionally hidden
721
- var conditionallyHiddenFields = self.find('li.wpuf-el[style*="display: none"] input');
722
 
723
  conditionallyHiddenFields.each( function( i, item ) {
724
- var input_type = $(item).attr('type');
725
 
726
- switch ( input_type ) {
727
  case 'url':
728
  case 'email':
729
  // removing conditionally hidden fields value
730
  // so that default HTML validation don't restrict those fields
731
- $(item).val('');
732
  }
733
  });
734
 
735
- if ( error ) {
736
- WP_User_Frontend.addErrorNotice(self,'end');
737
-
738
- return false;
739
- }
740
-
741
- /*// if already some error found, bail out
742
- if (error) {
743
- // add error notice
744
- WP_User_Frontend.addErrorNotice(self,'end');
745
-
746
- return false;
747
- }*/
748
-
749
- var form_data = self.serialize();
750
 
751
  // append them to the form var
752
- form_data = form_data + '&' + rich_texts.join('&');
753
- return form_data;
754
  },
755
 
756
  /**
@@ -771,43 +859,47 @@
771
  $(form).find('.wpuf-errors').remove();
772
  },
773
 
774
- markError: function(item, error_type) {
775
  $(item).closest('div').addClass('has-error');
776
 
777
- if ( error_type ) {
778
- var error_string = '';
779
- var address_field_label = $(item).data('label');
780
- if ( address_field_label ) {
781
- error_string = address_field_label;
782
- } else {
783
- error_string = $(item).closest('li').data('label');
784
- }
785
- switch ( error_type ) {
786
- case 'required' :
787
- error_string = error_string + ' ' + error_str_obj[error_type];
788
- break;
789
- case 'mismatch' :
790
- error_string = error_string + ' ' + error_str_obj[error_type];
791
- break;
792
- case 'validation' :
793
- error_string = error_string + ' ' + error_str_obj[error_type];
794
- break
795
- case 'limit':
796
- error_string = '';
797
- break
798
- }
799
- $(item).siblings('.wpuf-error-msg').remove();
800
 
801
- // if input type is radio, append the error message for design issue
802
- if ( $(item).prev().prop('nodeName') === 'DIV' && ! $(item).hasClass('wpuf_telephone') ) {
803
- $(item).append('<div class="wpuf-error-msg">'+ error_string +'</div>')
804
- } else {
805
- // if input type is not radio, add the div after current item
806
- $(item).after('<div class="wpuf-error-msg">'+ error_string +'</div>')
807
- }
808
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
809
 
810
- $(item).focus();
 
 
 
 
 
 
 
811
  },
812
 
813
  removeErrors: function(item) {
@@ -989,45 +1081,53 @@
989
  var fieldType = (typeof(data[2]) !== "undefined" && data[2] !== null) ? (data[2]).trim() : '';
990
  var limit_type = (typeof(data[3]) !== "undefined" && data[3] !== null) ? (data[3]).trim() : '';
991
  var limit_to = (typeof(data[4]) !== "undefined" && data[4] !== null) ? (data[4]).trim() : '';
992
- var limit_label = ( 'word' === limit_type ) ? 'Word Limit : ' : 'Character Limit : ';
993
 
994
  if ( 'word' === limit_type ) {
995
  numWords = WP_User_Frontend.editorLimit.tinymce.getStats(ed).words;
 
996
  } else {
997
- numWords = WP_User_Frontend.editorLimit.tinymce.getStats(ed).chars + 1;
 
998
  }
999
 
1000
  var errorMessage = wpuf_frontend['word_'+limit_to ] + ' ' + limit;
1001
 
1002
- if ( (numWords > 1) && (numWords > limit) && ('max' === limit_to) ) {
 
 
 
 
 
1003
  WP_User_Frontend.markError( field, 'limit' );
1004
- jQuery('.mce-path-item.mce-last', ed.container).html( wpuf_frontend['word_'+limit_to ] + ' ' + numWords +'/'+ limit );
1005
 
1006
  return true;
1007
- } else if ( (numWords < limit) && ('min' === limit_to) && numWords > 1 ) {
1008
  WP_User_Frontend.markError( field, 'limit' );
1009
- jQuery('.mce-path-item.mce-last', ed.container).html( wpuf_frontend['word_'+limit_to ] + ' ' + numWords +'/'+ limit );
1010
 
1011
  return true;
1012
- } else {
1013
- if ($(field).hasClass('has-error')) {
1014
- $(field).removeClass('has-error');
1015
- }
1016
-
1017
- return false;
1018
  }
1019
  },
1020
 
1021
- checkRestrictionError: function(field) {
1022
- var fieldId = $(field).attr('id');
 
1023
  var isTinymce = false;
1024
  var ed = null;
 
1025
  var numWords = 0;
1026
  var data = '';
1027
 
 
 
 
 
 
1028
  if ( typeof tinyMCE !== 'undefined' && tinyMCE.get(fieldId) !== null ) {
1029
  isTinymce = true;
1030
- ed = tinyMCE.get(fieldId);
1031
 
1032
  ed.focus();
1033
  }
@@ -1045,30 +1145,42 @@
1045
  }
1046
 
1047
  var limit = (typeof(data[0]) !== "undefined" && data[0] !== null) ? parseInt(data[0]) : 0;
1048
- var fieldId = (typeof(data[1]) !== "undefined" && data[1] !== null) ? (data[1]).trim() : '';
1049
- var fieldType = (typeof(data[2]) !== "undefined" && data[2] !== null) ? (data[2]).trim() : '';
1050
  var limit_type = (typeof(data[3]) !== "undefined" && data[3] !== null) ? (data[3]).trim() : '';
1051
  var limit_to = (typeof(data[4]) !== "undefined" && data[4] !== null) ? (data[4]).trim() : '';
1052
  var limit_label = ( 'word' === limit_type ) ? 'Word Limit : ' : 'Character Limit : ';
1053
 
1054
- numWords = $(field).val().length;
 
1055
 
1056
- var errorMessage = wpuf_frontend['word_'+limit_to ] + ' ' + limit;
 
 
 
1057
 
1058
- if ( (numWords > 1) && (numWords > limit) && ('max' === limit_to) ) {
1059
- WP_User_Frontend.markError( field, 'limit' );
 
1060
 
1061
- return true;
1062
- } else if ( (numWords < limit) && ('min' === limit_to) && numWords > 1 ) {
1063
- WP_User_Frontend.markError( field, 'limit' );
1064
 
1065
- return true;
 
1066
  } else {
1067
- if ($(field).hasClass('has-error')) {
1068
- $(field).removeClass('has-error');
 
 
 
 
 
 
1069
  }
1070
- return false;
1071
  }
 
 
 
1072
  },
1073
 
1074
  tinymce: {
@@ -1078,29 +1190,37 @@
1078
 
1079
  return {
1080
  chars: text.length,
1081
- words: text.split(/[\w\u2019\'-]+/).length
1082
  };
1083
  },
1084
 
1085
  onKeyDown: function(ed, event, limit, limit_type, limit_to ) {
1086
  var field = $('.wpuf-fields.wpuf_'+ed.id);
1087
 
 
 
 
 
 
1088
  var numWords = WP_User_Frontend.editorLimit.tinymce.getStats(ed).chars + 1,
1089
- limit_label = ( 'word' === limit_type ) ? 'Word Limit : ' : 'Character Limit : ';
1090
 
1091
  if ( 'word' === limit_type ) {
1092
  numWords = WP_User_Frontend.editorLimit.tinymce.getStats(ed).words;
 
 
 
 
1093
  }
1094
 
1095
  if ( limit && numWords > limit && 'max' === limit_to ) {
1096
  WP_User_Frontend.editorLimit.blockTyping(event);
1097
  WP_User_Frontend.markError( field, 'limit' );
1098
- jQuery('.mce-path-item.mce-last', ed.container).html( wpuf_frontend['word_'+limit_to ] + ' ' + numWords + '/' + limit );
1099
  } else if ( limit && numWords < limit && 'min' === limit_to ) {
1100
  WP_User_Frontend.markError( field, 'limit' );
1101
- jQuery('.mce-path-item.mce-last', ed.container).html( wpuf_frontend['word_'+limit_to ] + ' ' + numWords + '/' + limit );
1102
  } else {
1103
- field.removeClass('has-error')
1104
  jQuery('.mce-path-item.mce-last', ed.container).html('');
1105
  }
1106
  },
@@ -1121,16 +1241,21 @@
1121
  content_length = self.val().length + 1;
1122
  var content = self.val();
1123
 
 
 
 
 
 
1124
  if ( 'word' === limit_type ) {
1125
  content_length = self.val().split(' ').length;
1126
  }
 
1127
  if ( limit && content_length > limit && 'max' === limit_to ) {
1128
  WP_User_Frontend.content_limit_message( self, limit_type, limit_to, limit );
1129
  WP_User_Frontend.editorLimit.blockTyping(event);
1130
  }else if ( limit && content_length < limit && 'min' === limit_to ) {
1131
  WP_User_Frontend.content_limit_message( self, limit_type, limit_to, limit )
1132
  }else {
1133
- self.closest('li').removeClass('has-error')
1134
  self.closest('.wpuf-fields').find('span.wpuf-wordlimit-message').html('');
1135
  }
1136
 
69
  $( ':submit[name="wpuf_user_subscription_cancel"]').click(function(e){
70
  e.preventDefault();
71
 
72
+ new swal({
73
  text: wpuf_frontend.cancelSubMsg,
74
  type: 'warning',
75
  showCancelButton: true,
129
 
130
  if ( typeof wp.passwordStrength != 'undefined' ) {
131
 
132
+ strength = wp.passwordStrength.meter( pass1, wp.passwordStrength.userInputDisallowedList(), pass1 );
133
 
134
  switch ( strength ) {
135
  case 2:
479
  grecaptcha.reset();
480
  }
481
 
482
+ new swal({
483
  html: res.error,
484
  type: 'warning',
485
  showCancelButton: false,
504
  },
505
 
506
  validateForm: function( self ) {
507
+ var richTexts = [];
508
+ var errors = [];
 
 
 
 
509
 
510
  // remove all initial errors if any
511
+ WP_User_Frontend.removeErrors( self );
512
+ WP_User_Frontend.removeErrorNotice( self );
513
 
514
+ // get all the visible fields
515
+ var visibleFields = self.find( 'input:visible, textarea:visible, select:visible, div.br-widget:visible, .wpuf-rich-validation:visible, div.wpuf-attachment-upload-filelist:visible' );
516
 
517
  visibleFields.each( function( i, item ) {
518
+ var container = '';
519
+ var dataType = $( item ).data( 'type' );
520
+ var required = $( item ).data( 'required' );
 
521
 
522
+ switch( dataType ) {
523
  case 'rich':
524
+ var editor_id = $( item ).data( 'id' );
525
+ var item_name = $( item ).data( 'name' );
526
+ val = $.trim( tinyMCE.get( editor_id ).getContent() );
 
 
 
527
 
528
  if ( required === 'yes' && val === '' ) {
529
+ errors.push({
530
+ type: 'required',
531
+ container: item
532
+ });
533
+ }
534
+
535
+ var isRestrictionFailed = WP_User_Frontend.editorLimit.isRestrictionFailed( item );
536
+
537
+ if ( isRestrictionFailed ) {
538
+ errors.push({
539
+ type: 'limit',
540
+ container: item
541
+ });
542
+
543
+ break;
544
  }
545
 
546
+ richTexts.push( item_name + '=' + encodeURIComponent( val ) );
547
 
548
  break;
549
  case 'textarea':
550
  case 'text':
551
+ val = $.trim( $( item ).val() );
552
 
553
  if ( required === 'yes' && val === '' ) {
554
+ errors.push({
555
+ type: 'required',
556
+ container: item
557
+ });
558
 
559
+ break;
560
+ }
561
+
562
+ var isRestrictionFailed = WP_User_Frontend.editorLimit.isRestrictionFailed( item );
563
+
564
+ if ( isRestrictionFailed ) {
565
+ errors.push({
566
+ type: 'limit',
567
+ container: item
568
+ });
569
 
570
  break;
571
  }
574
  // Get intlTelInput instance
575
  var iti = window.intlTelInputGlobals.getInstance( item );
576
  if ( '' !== iti.getNumber() && ! iti.isValidNumber() ) {
577
+ errors.push({
578
+ type: 'validation',
579
+ container: item
580
+ });
581
 
582
  break;
583
  }
584
 
585
+ var name = $( item ).attr( 'name' );
586
  var value = iti.getNumber();
587
+
588
+ // append the mobile number with country code
589
+ $( '<input>' )
590
+ .attr( 'type', 'hidden' )
591
+ .attr( 'name', name )
592
+ .attr( 'value', value )
593
+ .appendTo( self );
594
 
595
  break;
596
  }
597
 
598
+ break;
599
+ case 'url':
600
+ val = $.trim( $( item ).val() );
601
+
602
+ if ( required === 'yes' && val === '' ) {
603
+ errors.push({
604
+ type: 'required',
605
+ container: item
606
+ });
607
 
608
  break;
609
  }
610
 
611
+ if ( val !== '' && ! WP_User_Frontend.isValidURL( val ) ) {
612
+ errors.push({
613
+ type: 'validation',
614
+ container: item
615
+ });
616
+
617
+ break;
618
+ }
619
  break;
620
  case 'password':
621
  case 'confirm_password':
622
  var hasRepeat = $(item).data('repeat');
623
+ var strength = $(item).data('strength');
624
+ var min_length = $(item).data('minimum-length');
625
 
626
  val = $.trim( $(item).val() );
627
 
628
  if ( required === 'yes' && val === '' ) {
629
+ errors.push({
630
+ type: 'required',
631
+ container: item
632
+ });
633
+
634
+ break;
635
+ }
636
+
637
+ if ( val.length < min_length ) {
638
+ errors.push({
639
+ type: 'custom',
640
+ container: item,
641
+ message: 'Minimum ' + min_length + ' character is required'
642
+ });
643
 
644
  break;
645
  }
646
 
647
  if ( hasRepeat ) {
648
+ var repeatItem = $('[data-type="confirm_password"]').eq(0);
649
 
650
+ if ( repeatItem.val() !== val ) {
651
+ errors.push({
652
+ error_type: 'mismatch',
653
+ container: item
654
+ });
655
+ }
656
+ }
657
 
658
+ if ( strength ) {
659
+ var strengthMeter = wp.passwordStrength.meter(val, wp.passwordStrength.userInputDisallowedList());
660
+
661
+ if (strength === 'weak' && strengthMeter < 2) {
662
+ errors.push({
663
+ type: 'custom',
664
+ container: item,
665
+ message: 'Password minimum strength should be weak'
666
+ });
667
+ } else if (strength === 'medium' && strengthMeter < 3) {
668
+ errors.push({
669
+ type: 'custom',
670
+ container: item,
671
+ message: 'Password minimum strength should be medium'
672
+ });
673
+ } else if (strength === 'strong' && strengthMeter < 4) {
674
+ errors.push({
675
+ type: 'custom',
676
+ container: item,
677
+ message: 'Password strength should be strong'
678
+ });
679
  }
680
  }
681
+
682
  break;
683
  case 'select':
684
  val = $(item).val();
685
 
686
+ if ( required === 'yes' && val === '-1' ) {
687
+ errors.push({
688
+ type: 'required',
689
+ container: item
690
+ });
691
  }
692
  break;
693
  case 'multiselect':
694
+ val = $( item ).val();
695
 
696
  if ( required === 'yes' && val.length === 0 ) {
697
+ errors.push({
698
+ type: 'required',
699
+ container: item
700
+ });
701
  }
702
  break;
703
  case 'tax-checkbox':
704
  var length = $(item).children().find('input:checked').length;
705
 
706
  if ( required === 'yes' && ! length ) {
707
+ errors.push({
708
+ type: 'required',
709
+ container: item
710
+ });
711
  }
712
  break;
713
  case 'radio':
714
+ case 'checkbox':
715
+ container = $( item ).parents( '.wpuf-fields' );
716
+ length = $( container ).find( 'input:checked' ).length;
717
 
718
  if ( required === 'yes' && ! length ) {
719
+ errors.push({
720
+ type: 'required',
721
+ container: item
722
+ });
723
  }
724
+
725
  break;
726
  case 'file':
727
+ var length = $( item ).find('ul').children().length;
728
 
729
  if ( required === 'yes' && ! length ) {
730
+ errors.push({
731
+ type: 'required',
732
+ container: $( item ).closest( '.wpuf-fields' )
733
+ });
 
734
  }
735
  break;
736
  case 'email':
737
+ val = $( item ).val();
738
 
739
  if ( required === 'yes' && val === '' ) {
740
+ errors.push({
741
+ type: 'required',
742
+ container: item
743
+ });
744
 
745
  break;
746
  }
747
 
748
  if ( val !== '' && ! WP_User_Frontend.isValidEmail( val ) ) {
749
+ errors.push({
750
+ type: 'validation',
751
+ container: item
752
+ });
753
  }
754
  break;
755
  case 'url':
756
  var val = $(item).val();
757
 
758
  if ( required === 'yes' && val === '' ) {
759
+ errors.push({
760
+ type: 'validation',
761
+ container: item
762
+ });
763
 
764
  break;
765
  }
766
 
767
  if ( val !== '' && ! WP_User_Frontend.isValidURL( val ) ) {
768
+ errors.push({
769
+ type: 'validation',
770
+ container: item
771
+ });
772
  }
773
  break;
774
+ default: // Google map etc.
775
  // if this is a Google map
776
+ if ( $( item ).attr( 'id' ) && $( item ).attr( 'id' ).startsWith( 'wpuf-map' ) ) {
777
+ var mapContainer = $( item ).parents( '.wpuf-form-google-map-container' );
778
+ mapField = $( mapContainer ).find( 'input[id^="wpuf-map-lat"]' );
779
+ required = $( mapField ).data( 'required' );
780
+ val = $( mapField ).val(); // needs to grab from parent to get all the data
781
+
782
+ if ( required === 'yes' && val === '' ) {
783
+ errors.push({
784
+ type: 'required',
785
+ container: mapContainer
786
+ });
787
  }
788
  }
 
789
 
790
+ // if rating field
791
+ if ( $( item ).hasClass( 'br-widget' ) ) {
792
+ container = $( item ).parents('.wpuf-fields');
793
+ required = $( container ).find( 'select.wpuf-ratings' ).data( 'required' );
794
+ length = $( item ).find('.br-selected').length;
795
+
796
+ if ( required === 'yes' && ! length ) {
797
+ errors.push({
798
+ type: 'required',
799
+ container: item
800
+ });
801
+ }
802
+ }
803
  }
804
 
805
+ });
 
 
 
806
 
807
+ if ( errors.length ) {
808
+ var i;
809
+ var length = errors.length;
810
+ for ( i = 0; i < length; i++ ) {
811
+ WP_User_Frontend.markError( errors[i].container, errors[i].type, errors[i].message );
812
  }
813
+
814
+ WP_User_Frontend.addErrorNotice( self,'end' );
815
+ $( errors[0].container ).focus();
816
+
817
+ return false;
818
+ }
819
 
820
  // Fields that are conditionally hidden
821
+ var conditionallyHiddenFields = self.find( 'li.wpuf-el[style*="display: none"] input' );
822
 
823
  conditionallyHiddenFields.each( function( i, item ) {
824
+ var inputType = $( item ).attr( 'type' );
825
 
826
+ switch ( inputType ) {
827
  case 'url':
828
  case 'email':
829
  // removing conditionally hidden fields value
830
  // so that default HTML validation don't restrict those fields
831
+ $( item ).val( '' );
832
  }
833
  });
834
 
835
+ var disable_fields = self.find(":disabled").removeAttr("disabled");
836
+ var formData = self.serialize();
837
+ disable_fields.attr("disabled", "disabled");
 
 
 
 
 
 
 
 
 
 
 
 
838
 
839
  // append them to the form var
840
+ formData = formData + '&' + richTexts.join( '&' );
841
+ return formData;
842
  },
843
 
844
  /**
859
  $(form).find('.wpuf-errors').remove();
860
  },
861
 
862
+ markError: function(item, error_type, error_message) {
863
  $(item).closest('div').addClass('has-error');
864
 
865
+ if ( ! error_type ) {
866
+ return;
867
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
868
 
869
+ var error_string = '';
870
+ var address_field_label = $( item ).data( 'label' );
871
+ if ( address_field_label ) {
872
+ error_string = address_field_label;
873
+ } else {
874
+ error_string = $(item).closest('li').data('label');
 
875
  }
876
+ switch ( error_type ) {
877
+ case 'required' :
878
+ error_string = error_string + ' ' + error_str_obj[error_type];
879
+ break;
880
+ case 'mismatch' :
881
+ error_string = error_string + ' ' + error_str_obj[error_type];
882
+ break;
883
+ case 'validation' :
884
+ error_string = error_string + ' ' + error_str_obj[error_type];
885
+ break;
886
+ case 'limit':
887
+ error_string = '';
888
+ break;
889
+ case 'custom' :
890
+ error_string = error_message;
891
+ break;
892
+ }
893
+ $(item).siblings('.wpuf-error-msg').remove();
894
 
895
+ // for address fields
896
+ if ( $( item ).closest( '.wpuf-fields.wpuf-fields-address' ).length ) {
897
+ $( item ).closest( 'div.wpuf-sub-fields' ).find( 'div.wpuf-error-msg' ).remove();
898
+ $( item ).closest( 'div.wpuf-sub-fields' ).append( '<div class="wpuf-error-msg">' + error_string + '</div>' );
899
+ } else {
900
+ $( item ).closest( 'div.wpuf-fields' ).find( 'div.wpuf-error-msg' ).remove();
901
+ $( item ).closest( 'div.wpuf-fields' ).append( '<div class="wpuf-error-msg">' + error_string + '</div>' );
902
+ }
903
  },
904
 
905
  removeErrors: function(item) {
1081
  var fieldType = (typeof(data[2]) !== "undefined" && data[2] !== null) ? (data[2]).trim() : '';
1082
  var limit_type = (typeof(data[3]) !== "undefined" && data[3] !== null) ? (data[3]).trim() : '';
1083
  var limit_to = (typeof(data[4]) !== "undefined" && data[4] !== null) ? (data[4]).trim() : '';
1084
+ var limit_label = '';
1085
 
1086
  if ( 'word' === limit_type ) {
1087
  numWords = WP_User_Frontend.editorLimit.tinymce.getStats(ed).words;
1088
+ limit_label = 'word_' + limit_to;
1089
  } else {
1090
+ numWords = WP_User_Frontend.editorLimit.tinymce.getStats(ed).chars;
1091
+ limit_label = 'char_' + limit_to;
1092
  }
1093
 
1094
  var errorMessage = wpuf_frontend['word_'+limit_to ] + ' ' + limit;
1095
 
1096
+ // if blank field, no need to check for content restriction
1097
+ if ( numWords === 0 ) {
1098
+ return false;
1099
+ }
1100
+
1101
+ if ( (numWords > limit) && ('max' === limit_to) ) {
1102
  WP_User_Frontend.markError( field, 'limit' );
1103
+ jQuery('.mce-path-item.mce-last', ed.container).html( wpuf_frontend[ limit_label ] + ' ' + numWords +'/'+ limit );
1104
 
1105
  return true;
1106
+ } else if ( (numWords < limit) && ('min' === limit_to) ) {
1107
  WP_User_Frontend.markError( field, 'limit' );
1108
+ jQuery('.mce-path-item.mce-last', ed.container).html( wpuf_frontend[ limit_label ] + ' ' + numWords +'/'+ limit );
1109
 
1110
  return true;
 
 
 
 
 
 
1111
  }
1112
  },
1113
 
1114
+ isRestrictionFailed: function( field ) {
1115
+ var fieldId = $( field ).data( 'id' );
1116
+ var fieldType = $( field ).data( 'type' );
1117
  var isTinymce = false;
1118
  var ed = null;
1119
+ var numChars = 0;
1120
  var numWords = 0;
1121
  var data = '';
1122
 
1123
+ // clear previous style
1124
+ if ( $( field ).closest( 'div.wpuf-fields' ).hasClass( 'has-error' ) ) {
1125
+ $( field ).closest( 'div.wpuf-fields' ).removeClass( 'has-error' )
1126
+ }
1127
+
1128
  if ( typeof tinyMCE !== 'undefined' && tinyMCE.get(fieldId) !== null ) {
1129
  isTinymce = true;
1130
+ ed = tinyMCE.get( fieldId );
1131
 
1132
  ed.focus();
1133
  }
1145
  }
1146
 
1147
  var limit = (typeof(data[0]) !== "undefined" && data[0] !== null) ? parseInt(data[0]) : 0;
 
 
1148
  var limit_type = (typeof(data[3]) !== "undefined" && data[3] !== null) ? (data[3]).trim() : '';
1149
  var limit_to = (typeof(data[4]) !== "undefined" && data[4] !== null) ? (data[4]).trim() : '';
1150
  var limit_label = ( 'word' === limit_type ) ? 'Word Limit : ' : 'Character Limit : ';
1151
 
1152
+ numChars = $(field).val().trim().length;
1153
+ numWords = $(field).val().trim().split(' ').length;
1154
 
1155
+ // if blank field, no need to check for content restriction
1156
+ if ( numChars === 0 ) {
1157
+ return false;
1158
+ }
1159
 
1160
+ if ( limit_type === 'word' ) {
1161
+ if ( ( numWords > limit ) && ( 'max' === limit_to ) ) {
1162
+ WP_User_Frontend.markError( field, 'limit' );
1163
 
1164
+ return true;
1165
+ } else if ( ( numWords < limit ) && ( 'min' === limit_to ) ) {
1166
+ WP_User_Frontend.markError( field, 'limit' );
1167
 
1168
+ return true;
1169
+ }
1170
  } else {
1171
+ if ( ( numChars > limit ) && ( 'max' === limit_to ) ) {
1172
+ WP_User_Frontend.markError( field, 'limit' );
1173
+
1174
+ return true;
1175
+ } else if ( ( numChars < limit ) && ( 'min' === limit_to ) ) {
1176
+ WP_User_Frontend.markError( field, 'limit' );
1177
+
1178
+ return true;
1179
  }
 
1180
  }
1181
+
1182
+ return false;
1183
+
1184
  },
1185
 
1186
  tinymce: {
1190
 
1191
  return {
1192
  chars: text.length,
1193
+ words: text.split(/[\w\u2019\'-]+/).length - 1 // -1 to remove counting of blank or empty string
1194
  };
1195
  },
1196
 
1197
  onKeyDown: function(ed, event, limit, limit_type, limit_to ) {
1198
  var field = $('.wpuf-fields.wpuf_'+ed.id);
1199
 
1200
+ // remove previous errors
1201
+ if ( field.closest('.wpuf-fields').hasClass('has-error') ) {
1202
+ field.closest('.wpuf-fields').removeClass('has-error');
1203
+ }
1204
+
1205
  var numWords = WP_User_Frontend.editorLimit.tinymce.getStats(ed).chars + 1,
1206
+ limit_label = '';
1207
 
1208
  if ( 'word' === limit_type ) {
1209
  numWords = WP_User_Frontend.editorLimit.tinymce.getStats(ed).words;
1210
+ limit_label = 'word_' + limit_to;
1211
+ } else {
1212
+ numWords = WP_User_Frontend.editorLimit.tinymce.getStats(ed).chars;
1213
+ limit_label = 'char_' + limit_to;
1214
  }
1215
 
1216
  if ( limit && numWords > limit && 'max' === limit_to ) {
1217
  WP_User_Frontend.editorLimit.blockTyping(event);
1218
  WP_User_Frontend.markError( field, 'limit' );
1219
+ jQuery('.mce-path-item.mce-last', ed.container).html( wpuf_frontend[ limit_label ] + ' ' + numWords + '/' + limit );
1220
  } else if ( limit && numWords < limit && 'min' === limit_to ) {
1221
  WP_User_Frontend.markError( field, 'limit' );
1222
+ jQuery('.mce-path-item.mce-last', ed.container).html( wpuf_frontend[ limit_label ] + ' ' + numWords + '/' + limit );
1223
  } else {
 
1224
  jQuery('.mce-path-item.mce-last', ed.container).html('');
1225
  }
1226
  },
1241
  content_length = self.val().length + 1;
1242
  var content = self.val();
1243
 
1244
+ // remove previous errors
1245
+ if ( self.closest('.wpuf-fields').hasClass('has-error') ) {
1246
+ self.closest('.wpuf-fields').removeClass('has-error');
1247
+ }
1248
+
1249
  if ( 'word' === limit_type ) {
1250
  content_length = self.val().split(' ').length;
1251
  }
1252
+
1253
  if ( limit && content_length > limit && 'max' === limit_to ) {
1254
  WP_User_Frontend.content_limit_message( self, limit_type, limit_to, limit );
1255
  WP_User_Frontend.editorLimit.blockTyping(event);
1256
  }else if ( limit && content_length < limit && 'min' === limit_to ) {
1257
  WP_User_Frontend.content_limit_message( self, limit_type, limit_to, limit )
1258
  }else {
 
1259
  self.closest('.wpuf-fields').find('span.wpuf-wordlimit-message').html('');
1260
  }
1261
 
assets/js/frontend-form.min.js CHANGED
@@ -1 +1 @@
1
- !function(a,b){a.fn.listautowidth=function(){return this.each(function(){var b=a(this).width(),c=b/a(this).children("li").length;a(this).children("li").each(function(){var b=a(this).outerWidth(!0)-a(this).width();a(this).width(c-b)})})},b.WP_User_Frontend={init:function(){this.enableMultistep(this),a(".wpuf-form").on("click","img.wpuf-clone-field",this.cloneField),a(".wpuf-form").on("click","img.wpuf-remove-field",this.removeField),a(".wpuf-form").on("click","a.wpuf-delete-avatar",this.deleteAvatar),a(".wpuf-form").on("click","a#wpuf-post-draft",this.draftPost),a(".wpuf-form").on("click","button#wpuf-account-update-profile",this.account_update_profile),a(".wpuf-form-add").on("submit",this.formSubmit),a("form#post").on("submit",this.adminPostSubmit),b.matchMedia("(max-width: 600px)").matches&&(a("table.items-table tr td .post-edit-icon").click(function(b){b.preventDefault(),a(this).parents("tr").find(".data-column").toggleClass("flex-column"),a(this).toggleClass("toggle-icon")}),a(".wpuf-dashboard-navigation ul li:first-child").after().click(function(b){b.preventDefault(),a(".wpuf-dashboard-navigation ul li").not(":first").toggle()})),a(".wpuf-form").on("step-change-fieldset",function(a,b,c){if(wpuf_plupload_items.length)for(var d=wpuf_plupload_items.length-1;d>=0;d--)wpuf_plupload_items[d].refresh();if(wpuf_map_items.length)for(var d=wpuf_map_items.length-1;d>=0;d--)google.maps.event.trigger(wpuf_map_items[d].map,"resize"),wpuf_map_items[d].map.setCenter(wpuf_map_items[d].center)}),this.ajaxCategory(),a(':submit[name="wpuf_user_subscription_cancel"]').click(function(b){b.preventDefault(),swal({text:wpuf_frontend.cancelSubMsg,type:"warning",showCancelButton:!0,confirmButtonColor:"#d54e21",confirmButtonText:wpuf_frontend.delete_it,cancelButtonText:wpuf_frontend.cancel_it,confirmButtonClass:"btn btn-success",cancelButtonClass:"btn btn-danger"}).then(function(b){if(!b)return!1;a("#wpuf_cancel_subscription").submit()})}),this.warningOnExit(),this.handleReadOnly()},warningOnExit:function(){a('input[name="submit"], #wpuf-post-draft').on("click",function(){b.onbeforeunload=null}),a(".wpuf-form-add").on("change",function(){a(".wpuf-form-add input, .wpuf-form-add select, .wpuf-form-add textarea").each(function(c){"hidden"===a(this).attr("type")&&"submit"===a(this).attr("type")&&-1===a(this).val()||(b.onbeforeunload=function(){return"you have changes"})})})},handleReadOnly:function(){a(".wpuf-form .read-only").each(function(){a("input, select, textarea",this).each(function(){a(this).attr("disabled",!0)})})},check_pass_strength:function(){var b=a("#pass1").val();if(a("#pass-strength-result").show(),a("#pass-strength-result").removeClass("short bad good strong"),!b)return a("#pass-strength-result").html("&nbsp;"),void a("#pass-strength-result").hide();if(void 0!==wp.passwordStrength)switch(wp.passwordStrength.meter(b,wp.passwordStrength.userInputBlacklist(),b)){case 2:a("#pass-strength-result").addClass("bad").html(pwsL10n.bad);break;case 3:a("#pass-strength-result").addClass("good").html(pwsL10n.good);break;case 4:a("#pass-strength-result").addClass("strong").html(pwsL10n.strong);break;case 5:a("#pass-strength-result").addClass("short").html(pwsL10n.mismatch);break;default:a("#pass-strength-result").addClass("short").html(pwsL10n.short)}},enableMultistep:function(c){var d=this,e=0,f=a(':hidden[name="wpuf_multistep_type"]').val();if(null!=f){if(a("fieldset.wpuf-multistep-fieldset").find(".wpuf-multistep-prev-btn").first().remove(),a("fieldset.wpuf-multistep-fieldset").find(".wpuf-multistep-next-btn").last().remove(),a(".wpuf-form fieldset").removeClass("field-active").first().addClass("field-active"),"progressive"==f&&0!=a(".wpuf-form .wpuf-multistep-fieldset").length){a("fieldset.wpuf-multistep-fieldset legend").first();a(".wpuf-multistep-progressbar").html('<div class="wpuf-progress-percentage"></div>');var g=a(".wpuf-multistep-progressbar"),h=a(".wpuf-progress-percentage");a(".wpuf-multistep-progressbar").progressbar({change:function(){h.text(g.progressbar("value")+"%")}}),a(".wpuf-multistep-fieldset legend").hide()}else a(".wpuf-form").each(function(){var b=a(this),c=a(".wpuf-multistep-progressbar",b),d="";c.addClass("wizard-steps"),d+='<ul class="wpuf-step-wizard">',a(".wpuf-multistep-fieldset",this).each(function(){d+="<li>"+a.trim(a("legend",this).text())+"</li>",a("legend",this).hide()}),d+="</ul>",c.append(d),a(".wpuf-step-wizard li",c).first().addClass("active-step"),a(".wpuf-step-wizard",c).listautowidth()});this.change_fieldset(e,f),a("fieldset .wpuf-multistep-prev-btn, fieldset .wpuf-multistep-next-btn").click(function(g){if(a(this).hasClass("wpuf-multistep-next-btn")){0!=d.formStepCheck("",a(this).closest("fieldset"))&&c.change_fieldset(++e,f)}else a(this).hasClass("wpuf-multistep-prev-btn")&&c.change_fieldset(--e,f);var h=a("form.wpuf-form-add"),i=h.offset().top;return b.scrollTo({top:i-32,behavior:"smooth"}),!1})}},change_fieldset:function(b,c){var d=a("fieldset.wpuf-multistep-fieldset").eq(b);a("fieldset.wpuf-multistep-fieldset").removeClass("field-active").eq(b).addClass("field-active"),a(".wpuf-step-wizard li").each(function(){a(this).index()<=b?"step_by_step"==c?a(this).addClass("passed-wpuf-ms-bar"):a(".wpuf-ps-bar",this).addClass("passed-wpuf-ms-bar"):"step_by_step"==c?a(this).removeClass("passed-wpuf-ms-bar"):a(".wpuf-ps-bar",this).removeClass("passed-wpuf-ms-bar")}),a(".wpuf-step-wizard li").removeClass("wpuf-ms-bar-active active-step completed-step"),a(".passed-wpuf-ms-bar").addClass("completed-step").last().addClass("wpuf-ms-bar-active"),a(".wpuf-ms-bar-active").addClass("active-step");var e=a("fieldset.wpuf-multistep-fieldset").eq(b).find("legend").text();if(e=a.trim(e),"progressive"==c&&0!=a(".wpuf-form .wpuf-multistep-fieldset").length){var f=100*(b+1)/a("fieldset.wpuf-multistep-fieldset").length,f=Number(f.toFixed(2));a(".wpuf-multistep-progressbar").progressbar({value:f}),a(".wpuf-progress-percentage").text(e+" ("+f+"%)")}a(".wpuf-form").trigger("step-change-fieldset",[b,d])},ajaxCategory:function(){a(".category-wrap").on("change",".cat-ajax",function(){var b=a(this).data("form-id");currentLevel=parseInt(a(this).parent().attr("level")),WP_User_Frontend.getChildCats(a(this),currentLevel+1,"category",b)})},getChildCats:function(b,c,d,e){var f=a(b).val(),g="wpuf-category-dropdown-lvl-"+c,d=void 0!==d?d:"category",h=a(b).siblings("span").data("taxonomy");a.ajax({type:"post",url:wpuf_frontend.ajaxurl,data:{action:"wpuf_get_child_cat",catID:f,nonce:wpuf_frontend.nonce,field_attr:h,form_id:e},beforeSend:function(){a(b).parent().parent().next(".loading").addClass("wpuf-loading")},complete:function(){a(b).parent().parent().next(".loading").removeClass("wpuf-loading")},success:function(e){a(b).parent().nextAll().each(function(){a(this).remove()}),""!=e&&(a(b).parent().addClass("hasChild").parent().append('<div id="'+g+'" level="'+c+'"></div>'),b.parent().parent().find("#"+g).html(e).slideDown("fast")),a(document).trigger("wpuf-ajax-fetched-child-categories",g,c,d)}})},cloneField:function(b){b.preventDefault();var c=a(this).closest("tr"),d=c.clone();d.find("input").val(""),d.find(":checked").attr("checked",""),c.after(d)},removeField:function(){var b=a(this).closest("tr");b.siblings().addBack().length>1&&b.remove()},adminPostSubmit:function(b){b.preventDefault();var c=a(this);if(WP_User_Frontend.validateForm(c))return!0},draftPost:function(b){b.preventDefault();var c=a(this),d=a(this).closest("form"),e=d.serialize()+"&action=wpuf_draft_post",f=d.find('input[type="hidden"][name="post_id"]').val(),g=[];a(".wpuf-rich-validation").each(function(b,c){var c=a(c),d=c.data("id"),e=c.data("name"),f=a.trim(tinyMCE.get(d).getContent());g.push(e+"="+encodeURIComponent(f))}),e=e+"&"+g.join("&"),c.after(' <span class="wpuf-loading"></span>'),a.post(wpuf_frontend.ajaxurl,e,function(b){if(void 0===f){var e='<input type="hidden" name="post_id" value="'+b.post_id+'">';e+='<input type="hidden" name="post_date" value="'+b.date+'">',e+='<input type="hidden" name="post_author" value="'+b.post_author+'">',e+='<input type="hidden" name="comment_status" value="'+b.comment_status+'">',d.append(e)}c.next("span.wpuf-loading").remove(),c.after('<span class="wpuf-draft-saved">&nbsp; '+b.message+"</span>"),a(".wpuf-draft-saved").delay(2500).fadeOut("fast",function(){a(this).remove()})})},account_update_profile:function(b){b.preventDefault();var c=a(this).closest("form");a.post(wpuf_frontend.ajaxurl,c.serialize(),function(a){a.success?(c.find(".wpuf-error").hide(),c.find(".wpuf-success").show()):(c.find(".wpuf-success").hide(),c.find(".wpuf-error").show(),c.find(".wpuf-error").text(a.data))})},formStepCheck:function(a,b){var c=b,d=(c.find("input[type=submit]"),WP_User_Frontend.validateForm(c));return 0==d&&WP_User_Frontend.addErrorNotice(self,"bottom"),d},formSubmit:function(c){c.preventDefault();var d=a(this),e=d.find("input[type=submit]");form_data=WP_User_Frontend.validateForm(d),form_data&&(d.find("li.wpuf-submit").append('<span class="wpuf-loading"></span>'),e.attr("disabled","disabled").addClass("button-primary-disabled"),a.post(wpuf_frontend.ajaxurl,form_data,function(c){if(c.success)a("body").trigger("wpuf:postform:success",c),1==c.show_message?(d.before('<div class="wpuf-success">'+c.message+"</div>"),d.slideUp("fast",function(){d.remove()}),a("html, body").animate({scrollTop:a(".wpuf-success").offset().top-100},"fast")):b.location=c.redirect_to;else{if(void 0!==c.type&&"login"===c.type)return void(confirm(c.error)?b.location=c.redirect_to:(e.removeAttr("disabled"),e.removeClass("button-primary-disabled"),d.find("span.wpuf-loading").remove()));d.find(".g-recaptcha").length>0&&grecaptcha.reset(),swal({html:c.error,type:"warning",showCancelButton:!1,confirmButtonColor:"#d54e21",confirmButtonText:"OK",cancelButtonClass:"btn btn-danger"}),e.removeAttr("disabled")}e.removeClass("button-primary-disabled"),d.find("span.wpuf-loading").remove()}))},isTelephoneField:function(b){return a(b).hasClass("wpuf_telephone")&&"yes"===a(b).data("show-list")},validateForm:function(c){var d=!1,e="",f=[];if(WP_User_Frontend.removeErrors(c),WP_User_Frontend.removeErrorNotice(c),c.find("input:visible, textarea:visible, select:visible, .wpuf-rich-validation").each(function(g,h){var i=a(h).attr("type"),j=a(h).data("type"),k=a(h).data("required"),l="";switch(j){case"rich":var m=a(h).data("id"),h=a(h),n=h.data("id"),o=h.data("name");l=a.trim(tinyMCE.get(n).getContent()),"yes"===k&&""===l&&(d=!0,e="required",WP_User_Frontend.markError(h)),f.push(o+"="+encodeURIComponent(l));break;case"textarea":case"text":if(l=a.trim(a(h).val()),"yes"===k&&""===l){d=!0,e="required",WP_User_Frontend.markError(h,e);break}if(WP_User_Frontend.isTelephoneField(h)){var p=b.intlTelInputGlobals.getInstance(h);if(""!==p.getNumber()&&!p.isValidNumber()){d=!0,e="validation",WP_User_Frontend.markError(h,e);break}var m=a(h).attr("name"),q=p.getNumber();a("<input>").attr("type","hidden").attr("name",m).attr("value",q).appendTo(c);break}if("url"===i&&""!==l&&!WP_User_Frontend.isValidURL(l)){d=!0,e="validation",WP_User_Frontend.markError(h,e);break}d=WP_User_Frontend.editorLimit.checkRestrictionError(h);break;case"password":case"confirm_password":var r=a(h).data("repeat");if(l=a.trim(a(h).val()),"yes"===k&&""===l){d=!0,e="required",WP_User_Frontend.markError(h,e);break}if(r){var s=a('[data-type="confirm_password"]').eq(0);s.val()!=l&&(d=!0,e="mismatch",WP_User_Frontend.markError(s,e))}break;case"select":l=a(h).val(),"yes"===k&&"-1"==l&&(d=!0,e="required",WP_User_Frontend.markError(h,e));break;case"multiselect":l=a(h).val(),"yes"===k&&0===l.length&&(d=!0,e="required",WP_User_Frontend.markError(h,e));break;case"tax-checkbox":var t=a(h).children().find("input:checked").length;"yes"!==k||t||(d=!0,e="required",WP_User_Frontend.markError(h,e));break;case"radio":var t=a(h).find("input:checked").length;"yes"!==k||t||(d=!0,e="required",WP_User_Frontend.markError(h,e));break;case"file":var t=a(h).find("ul").children().length;"yes"!==k||t||(d=!0,e="required",WP_User_Frontend.markError(h,e));break;case"email":if(l=a(h).val(),"yes"===k&&""===l){d=!0,e="required",WP_User_Frontend.markError(h,e);break}""===l||WP_User_Frontend.isValidEmail(l)||(d=!0,e="validation",WP_User_Frontend.markError(h,e));break;case"url":var l=a(h).val();if("yes"===k&&""===l){d=!0,e="required",WP_User_Frontend.markError(h,e);break}""===l||WP_User_Frontend.isValidURL(l)||(d=!0,e="validation",WP_User_Frontend.markError(h,e));break;default:if(a(h).attr("id")&&a(h).attr("id").startsWith("wpuf-map")){var u=a(h).parents(".wpuf-form-google-map-container");map_field=a(u).find('input[id^="wpuf-map-lat"]'),k=a(map_field).data("required"),l=a(map_field).val(),"yes"==k&&""==l&&(d=!0,e="required",WP_User_Frontend.markError(u,e))}}if(d)return WP_User_Frontend.markError(h,e),!1}),c.find('li.wpuf-el[style*="display: none"] input').each(function(b,c){switch(a(c).attr("type")){case"url":case"email":a(c).val("")}}),d)return WP_User_Frontend.addErrorNotice(c,"end"),!1;var g=c.serialize();return g=g+"&"+f.join("&")},addErrorNotice:function(b,c){"bottom"==c?a(".wpuf-multistep-fieldset:visible").append('<div class="wpuf-errors">'+wpuf_frontend.error_message+"</div>"):a(b).find("li.wpuf-submit").append('<div class="wpuf-errors">'+wpuf_frontend.error_message+"</div>")},removeErrorNotice:function(b){a(b).find(".wpuf-errors").remove()},markError:function(b,c){if(a(b).closest("div").addClass("has-error"),c){var d="",e=a(b).data("label");switch(d=e||a(b).closest("li").data("label"),c){case"required":case"mismatch":case"validation":d=d+" "+error_str_obj[c];break;case"limit":d=""}a(b).siblings(".wpuf-error-msg").remove(),"DIV"!==a(b).prev().prop("nodeName")||a(b).hasClass("wpuf_telephone")?a(b).after('<div class="wpuf-error-msg">'+d+"</div>"):a(b).append('<div class="wpuf-error-msg">'+d+"</div>")}a(b).focus()},removeErrors:function(b){a(b).find(".has-error").removeClass("has-error"),a(".wpuf-error-msg").remove()},isValidEmail:function(a){return new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i).test(a)},isValidURL:function(a){return new RegExp("^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/){1}[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,20}(:[0-9]{1,20})?(\\/.*)?$").test(a)},insertImage:function(b,c){if(a("#"+b).length){var d=new plupload.Uploader({runtimes:"html5,html4",browse_button:b,container:"wpuf-insert-image-container",multipart:!0,multipart_params:{action:"wpuf_insert_image",form_id:a("#"+b).data("form_id")},multiple_queues:!1,multi_selection:!1,urlstream_upload:!0,file_data_name:"wpuf_file",max_file_size:wpuf_frontend_upload.max_filesize,url:wpuf_frontend_upload.plupload.url,flash_swf_url:wpuf_frontend_upload.flash_swf_url,filters:[{title:"Allowed Files",extensions:"jpg,jpeg,gif,png,bmp"}]});d.bind("Init",function(a,b){}),d.bind("FilesAdded",function(b,c){var d=a("#wpuf-insert-image-container");a.each(c,function(a,b){d.append('<div class="upload-item" id="'+b.id+'"><div class="progress progress-striped active"><div class="bar"></div></div></div>')}),b.refresh(),b.start()}),d.bind("QueueChanged",function(a){d.start()}),d.bind("UploadProgress",function(b,c){var d=a("#"+c.id);a(".bar",d).css({width:c.percent+"%"}),a(".percent",d).html(c.percent+"%")}),d.bind("Error",function(a,b){alert("Error #"+b.code+": "+b.message)}),d.bind("FileUploaded",function(b,d,e){if(a("#"+d.id).remove(),"error"!==e.response){if("undefined"!=typeof tinyMCE)if("function"!=typeof tinyMCE.execInstanceCommand){var f=tinyMCE.get("post_content_"+c);null!==f&&f.insertContent(e.response)}else tinyMCE.execInstanceCommand("post_content_"+c,"mceInsertContent",!1,e.response);var g=a("#post_content_"+c);g.val(g.val()+e.response)}else alert("Something went wrong")}),d.init()}},deleteAvatar:function(b){b.preventDefault(),confirm(a(this).data("confirm"))&&a.post(wpuf_frontend.ajaxurl,{action:"wpuf_delete_avatar",_wpnonce:wpuf_frontend.nonce},function(){a(b.target).parent().remove(),a("[id^=wpuf-avatar]").css("display","")})},editorLimit:{bind:function(b,c,d,e,f){"no"===d?(a("textarea#"+c).keydown(function(a){WP_User_Frontend.editorLimit.textLimit.call(this,a,b,e,f)}),a("input#"+c).keydown(function(a){WP_User_Frontend.editorLimit.textLimit.call(this,a,b,e,f)}),a("input#"+c).change(function(a){WP_User_Frontend.editorLimit.textLimit.call(this,a,b,e,f)}),a("textarea#"+c).on("paste",function(c){var d=a(this);setTimeout(function(){WP_User_Frontend.editorLimit.textLimit.call(d,c,b,e,f)},100)}),a("input#"+c).on("paste",function(c){var d=a(this);setTimeout(function(){WP_User_Frontend.editorLimit.textLimit.call(d,c,b,e,f)},100)})):setTimeout(function(){tinyMCE.get(c).onKeyDown.add(function(a,c){WP_User_Frontend.editorLimit.tinymce.onKeyDown(a,c,b,e,f)}),tinyMCE.get(c).onPaste.add(function(a,c){setTimeout(function(){WP_User_Frontend.editorLimit.tinymce.onPaste(a,c,b,e,f)},100)})},1e3)},checkTinyMCERestriction:function(b,c,d){var e=0,f=void 0!==c[0]&&null!==c[0]?parseInt(c[0]):0,g=(void 0!==c[1]&&null!==c[1]&&c[1].trim(),void 0!==c[2]&&null!==c[2]&&c[2].trim(),void 0!==c[3]&&null!==c[3]?c[3].trim():""),h=void 0!==c[4]&&null!==c[4]?c[4].trim():"";e="word"===g?WP_User_Frontend.editorLimit.tinymce.getStats(d).words:WP_User_Frontend.editorLimit.tinymce.getStats(d).chars+1;wpuf_frontend["word_"+h];return e>1&&e>f&&"max"===h?(WP_User_Frontend.markError(b,"limit"),jQuery(".mce-path-item.mce-last",d.container).html(wpuf_frontend["word_"+h]+" "+e+"/"+f),!0):e<f&&"min"===h&&e>1?(WP_User_Frontend.markError(b,"limit"),jQuery(".mce-path-item.mce-last",d.container).html(wpuf_frontend["word_"+h]+" "+e+"/"+f),!0):(a(b).hasClass("has-error")&&a(b).removeClass("has-error"),!1)},checkRestrictionError:function(b){var c=a(b).attr("id"),d=!1,e=null,f=0,g="";if("undefined"!=typeof tinyMCE&&null!==tinyMCE.get(c)&&(d=!0,e=tinyMCE.get(c),e.focus()),a(b).closest("li.wpuf-el").find("script").html()){var h=a(b).closest("li.wpuf-el").find("script").html();g=h.match(/(?:bind\()(.*?(?=\)))/)?h.match(/(?:bind\()(.*?(?=\)))/)[1].replace(/['"]/g,"").split(","):""}if(d)return WP_User_Frontend.editorLimit.checkTinyMCERestriction(b,g,e);var i=void 0!==g[0]&&null!==g[0]?parseInt(g[0]):0,c=void 0!==g[1]&&null!==g[1]?g[1].trim():"",j=(void 0!==g[2]&&null!==g[2]&&g[2].trim(),void 0!==g[3]&&null!==g[3]&&g[3].trim(),void 0!==g[4]&&null!==g[4]?g[4].trim():"");f=a(b).val().length;wpuf_frontend["word_"+j];return f>1&&f>i&&"max"===j?(WP_User_Frontend.markError(b,"limit"),!0):f<i&&"min"===j&&f>1?(WP_User_Frontend.markError(b,"limit"),!0):(a(b).hasClass("has-error")&&a(b).removeClass("has-error"),!1)},tinymce:{getStats:function(a){var b=a.getBody(),c=tinymce.trim(b.innerText||b.textContent);return{chars:c.length,words:c.split(/[\w\u2019\'-]+/).length}},onKeyDown:function(b,c,d,e,f){var g=a(".wpuf-fields.wpuf_"+b.id),h=WP_User_Frontend.editorLimit.tinymce.getStats(b).chars+1;"word"===e&&(h=WP_User_Frontend.editorLimit.tinymce.getStats(b).words),d&&h>d&&"max"===f?(WP_User_Frontend.editorLimit.blockTyping(c),WP_User_Frontend.markError(g,"limit"),jQuery(".mce-path-item.mce-last",b.container).html(wpuf_frontend["word_"+f]+" "+h+"/"+d)):d&&h<d&&"min"===f?(WP_User_Frontend.markError(g,"limit"),jQuery(".mce-path-item.mce-last",b.container).html(wpuf_frontend["word_"+f]+" "+h+"/"+d)):(g.removeClass("has-error"),jQuery(".mce-path-item.mce-last",b.container).html(""))},onPaste:function(a,b,c){var d=a.getContent().split(" ").slice(0,c).join(" ");a.setContent(d),WP_User_Frontend.editorLimit.make_media_embed_code(d,a)}},textLimit:function(b,c,d,e){var f=a(this),g=f.val().length+1,h=f.val();"word"===d&&(g=f.val().split(" ").length),c&&g>c&&"max"===e?(WP_User_Frontend.content_limit_message(f,d,e,c),WP_User_Frontend.editorLimit.blockTyping(b)):c&&g<c&&"min"===e?WP_User_Frontend.content_limit_message(f,d,e,c):(f.closest("li").removeClass("has-error"),f.closest(".wpuf-fields").find("span.wpuf-wordlimit-message").html("")),"paste"===b.type&&(f.val(h.substring(0,c)),"word"===d&&f.val(h.slice(0,c).join(" ")))},blockTyping:function(b){-1!==a.inArray(b.keyCode,[46,8,9,27,13,110,190,189])||65==b.keyCode&&!0===b.ctrlKey||b.keyCode>=35&&b.keyCode<=40||(b.preventDefault(),b.stopPropagation())},make_media_embed_code:function(b,c){a.post(ajaxurl,{action:"make_media_embed_code",content:b},function(a){c.setContent(c.getContent()+c.setContent(a))})}},doUncheckRadioBtn:function(a){a.checked=!1},content_limit_message:function(a,b,c,d){WP_User_Frontend.markError(a,"limit");var e="";"word"===b&&(e=wpuf_frontend["word_"+c]+" "+d),"character"===b&&(e=wpuf_frontend["char_"+c]+" "+d),a.closest(".wpuf-fields").find("span.wpuf-wordlimit-message").html(e)}},a(function(){if(WP_User_Frontend.init(),a("ul.wpuf-payment-gateways").on("click","input[type=radio]",function(b){a(".wpuf-payment-instruction").slideUp(250),a(this).parents("li").find(".wpuf-payment-instruction").slideDown(250)}),a("ul.wpuf-payment-gateways li").find("input[type=radio]").is(":checked")){a("ul.wpuf-payment-gateways li").find("input[type=radio]:checked").parents("li").find(".wpuf-payment-instruction").slideDown(250)}else a("ul.wpuf-payment-gateways li").first().find("input[type=radio]").click()}),a(function(){a('input[name="first_name"], input[name="last_name"]').on("change keyup",function(){var b,c=a.makeArray(a('input[name="first_name"], input[name="last_name"]').map(function(){if(b=a(this).val())return b})).join(" ");a('input[name="display_name"]').val(c)})}),a(function(a){a('.wpuf-form-add input[name="dokan_store_name"]').on("focusout",function(){var b=a(this).val().toLowerCase().replace(/-+/g,"").replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"");a('input[name="shopurl"]').val(b),a("#url-alart").text(b),a('input[name="shopurl"]').focus()}),a('.wpuf-form-add input[name="shopurl"]').keydown(function(b){a(this).val();-1!==a.inArray(b.keyCode,[46,8,9,27,13,91,109,110,173,189,190])||65==b.keyCode&&!0===b.ctrlKey||b.keyCode>=35&&b.keyCode<=39||(b.shiftKey||(b.keyCode<65||b.keyCode>90)&&(b.keyCode<48||b.keyCode>57))&&(b.keyCode<96||b.keyCode>105)&&b.preventDefault()}),a('.wpuf-form-add input[name="shopurl"]').keyup(function(b){a("#url-alart").text(a(this).val())}),a('.wpuf-form-add input[name="shopurl"]').on("focusout",function(){var b=a(this),c={action:"shop_url",url_slug:b.val(),_nonce:dokan.nonce};""!==b.val()&&a.post(dokan.ajaxurl,c,function(b){0==b?(a("#url-alart").removeClass("text-success").addClass("text-danger"),a("#url-alart-mgs").removeClass("text-success").addClass("text-danger").text(dokan.seller.notAvailable)):(a("#url-alart").removeClass("text-danger").addClass("text-success"),a("#url-alart-mgs").removeClass("text-danger").addClass("text-success").text(dokan.seller.available))})}),a(".wpuf-form-add #wpuf-map-add-location").attr("name","find_address")})}(jQuery,window);
1
+ !function(a,b){a.fn.listautowidth=function(){return this.each(function(){var b=a(this).width(),c=b/a(this).children("li").length;a(this).children("li").each(function(){var b=a(this).outerWidth(!0)-a(this).width();a(this).width(c-b)})})},b.WP_User_Frontend={init:function(){this.enableMultistep(this),a(".wpuf-form").on("click","img.wpuf-clone-field",this.cloneField),a(".wpuf-form").on("click","img.wpuf-remove-field",this.removeField),a(".wpuf-form").on("click","a.wpuf-delete-avatar",this.deleteAvatar),a(".wpuf-form").on("click","a#wpuf-post-draft",this.draftPost),a(".wpuf-form").on("click","button#wpuf-account-update-profile",this.account_update_profile),a(".wpuf-form-add").on("submit",this.formSubmit),a("form#post").on("submit",this.adminPostSubmit),b.matchMedia("(max-width: 600px)").matches&&(a("table.items-table tr td .post-edit-icon").click(function(b){b.preventDefault(),a(this).parents("tr").find(".data-column").toggleClass("flex-column"),a(this).toggleClass("toggle-icon")}),a(".wpuf-dashboard-navigation ul li:first-child").after().click(function(b){b.preventDefault(),a(".wpuf-dashboard-navigation ul li").not(":first").toggle()})),a(".wpuf-form").on("step-change-fieldset",function(a,b,c){if(wpuf_plupload_items.length)for(var d=wpuf_plupload_items.length-1;d>=0;d--)wpuf_plupload_items[d].refresh();if(wpuf_map_items.length)for(var d=wpuf_map_items.length-1;d>=0;d--)google.maps.event.trigger(wpuf_map_items[d].map,"resize"),wpuf_map_items[d].map.setCenter(wpuf_map_items[d].center)}),this.ajaxCategory(),a(':submit[name="wpuf_user_subscription_cancel"]').click(function(b){b.preventDefault(),new swal({text:wpuf_frontend.cancelSubMsg,type:"warning",showCancelButton:!0,confirmButtonColor:"#d54e21",confirmButtonText:wpuf_frontend.delete_it,cancelButtonText:wpuf_frontend.cancel_it,confirmButtonClass:"btn btn-success",cancelButtonClass:"btn btn-danger"}).then(function(b){if(!b)return!1;a("#wpuf_cancel_subscription").submit()})}),this.warningOnExit(),this.handleReadOnly()},warningOnExit:function(){a('input[name="submit"], #wpuf-post-draft').on("click",function(){b.onbeforeunload=null}),a(".wpuf-form-add").on("change",function(){a(".wpuf-form-add input, .wpuf-form-add select, .wpuf-form-add textarea").each(function(c){"hidden"===a(this).attr("type")&&"submit"===a(this).attr("type")&&-1===a(this).val()||(b.onbeforeunload=function(){return"you have changes"})})})},handleReadOnly:function(){a(".wpuf-form .read-only").each(function(){a("input, select, textarea",this).each(function(){a(this).attr("disabled",!0)})})},check_pass_strength:function(){var b=a("#pass1").val();if(a("#pass-strength-result").show(),a("#pass-strength-result").removeClass("short bad good strong"),!b)return a("#pass-strength-result").html("&nbsp;"),void a("#pass-strength-result").hide();if(void 0!==wp.passwordStrength)switch(wp.passwordStrength.meter(b,wp.passwordStrength.userInputDisallowedList(),b)){case 2:a("#pass-strength-result").addClass("bad").html(pwsL10n.bad);break;case 3:a("#pass-strength-result").addClass("good").html(pwsL10n.good);break;case 4:a("#pass-strength-result").addClass("strong").html(pwsL10n.strong);break;case 5:a("#pass-strength-result").addClass("short").html(pwsL10n.mismatch);break;default:a("#pass-strength-result").addClass("short").html(pwsL10n.short)}},enableMultistep:function(c){var d=this,e=0,f=a(':hidden[name="wpuf_multistep_type"]').val();if(null!=f){if(a("fieldset.wpuf-multistep-fieldset").find(".wpuf-multistep-prev-btn").first().remove(),a("fieldset.wpuf-multistep-fieldset").find(".wpuf-multistep-next-btn").last().remove(),a(".wpuf-form fieldset").removeClass("field-active").first().addClass("field-active"),"progressive"==f&&0!=a(".wpuf-form .wpuf-multistep-fieldset").length){a("fieldset.wpuf-multistep-fieldset legend").first();a(".wpuf-multistep-progressbar").html('<div class="wpuf-progress-percentage"></div>');var g=a(".wpuf-multistep-progressbar"),h=a(".wpuf-progress-percentage");a(".wpuf-multistep-progressbar").progressbar({change:function(){h.text(g.progressbar("value")+"%")}}),a(".wpuf-multistep-fieldset legend").hide()}else a(".wpuf-form").each(function(){var b=a(this),c=a(".wpuf-multistep-progressbar",b),d="";c.addClass("wizard-steps"),d+='<ul class="wpuf-step-wizard">',a(".wpuf-multistep-fieldset",this).each(function(){d+="<li>"+a.trim(a("legend",this).text())+"</li>",a("legend",this).hide()}),d+="</ul>",c.append(d),a(".wpuf-step-wizard li",c).first().addClass("active-step"),a(".wpuf-step-wizard",c).listautowidth()});this.change_fieldset(e,f),a("fieldset .wpuf-multistep-prev-btn, fieldset .wpuf-multistep-next-btn").click(function(g){if(a(this).hasClass("wpuf-multistep-next-btn")){0!=d.formStepCheck("",a(this).closest("fieldset"))&&c.change_fieldset(++e,f)}else a(this).hasClass("wpuf-multistep-prev-btn")&&c.change_fieldset(--e,f);var h=a("form.wpuf-form-add"),i=h.offset().top;return b.scrollTo({top:i-32,behavior:"smooth"}),!1})}},change_fieldset:function(b,c){var d=a("fieldset.wpuf-multistep-fieldset").eq(b);a("fieldset.wpuf-multistep-fieldset").removeClass("field-active").eq(b).addClass("field-active"),a(".wpuf-step-wizard li").each(function(){a(this).index()<=b?"step_by_step"==c?a(this).addClass("passed-wpuf-ms-bar"):a(".wpuf-ps-bar",this).addClass("passed-wpuf-ms-bar"):"step_by_step"==c?a(this).removeClass("passed-wpuf-ms-bar"):a(".wpuf-ps-bar",this).removeClass("passed-wpuf-ms-bar")}),a(".wpuf-step-wizard li").removeClass("wpuf-ms-bar-active active-step completed-step"),a(".passed-wpuf-ms-bar").addClass("completed-step").last().addClass("wpuf-ms-bar-active"),a(".wpuf-ms-bar-active").addClass("active-step");var e=a("fieldset.wpuf-multistep-fieldset").eq(b).find("legend").text();if(e=a.trim(e),"progressive"==c&&0!=a(".wpuf-form .wpuf-multistep-fieldset").length){var f=100*(b+1)/a("fieldset.wpuf-multistep-fieldset").length,f=Number(f.toFixed(2));a(".wpuf-multistep-progressbar").progressbar({value:f}),a(".wpuf-progress-percentage").text(e+" ("+f+"%)")}a(".wpuf-form").trigger("step-change-fieldset",[b,d])},ajaxCategory:function(){a(".category-wrap").on("change",".cat-ajax",function(){var b=a(this).data("form-id");currentLevel=parseInt(a(this).parent().attr("level")),WP_User_Frontend.getChildCats(a(this),currentLevel+1,"category",b)})},getChildCats:function(b,c,d,e){var f=a(b).val(),g="wpuf-category-dropdown-lvl-"+c,d=void 0!==d?d:"category",h=a(b).siblings("span").data("taxonomy");a.ajax({type:"post",url:wpuf_frontend.ajaxurl,data:{action:"wpuf_get_child_cat",catID:f,nonce:wpuf_frontend.nonce,field_attr:h,form_id:e},beforeSend:function(){a(b).parent().parent().next(".loading").addClass("wpuf-loading")},complete:function(){a(b).parent().parent().next(".loading").removeClass("wpuf-loading")},success:function(e){a(b).parent().nextAll().each(function(){a(this).remove()}),""!=e&&(a(b).parent().addClass("hasChild").parent().append('<div id="'+g+'" level="'+c+'"></div>'),b.parent().parent().find("#"+g).html(e).slideDown("fast")),a(document).trigger("wpuf-ajax-fetched-child-categories",g,c,d)}})},cloneField:function(b){b.preventDefault();var c=a(this).closest("tr"),d=c.clone();d.find("input").val(""),d.find(":checked").attr("checked",""),c.after(d)},removeField:function(){var b=a(this).closest("tr");b.siblings().addBack().length>1&&b.remove()},adminPostSubmit:function(b){b.preventDefault();var c=a(this);if(WP_User_Frontend.validateForm(c))return!0},draftPost:function(b){b.preventDefault();var c=a(this),d=a(this).closest("form"),e=d.serialize()+"&action=wpuf_draft_post",f=d.find('input[type="hidden"][name="post_id"]').val(),g=[];a(".wpuf-rich-validation").each(function(b,c){var c=a(c),d=c.data("id"),e=c.data("name"),f=a.trim(tinyMCE.get(d).getContent());g.push(e+"="+encodeURIComponent(f))}),e=e+"&"+g.join("&"),c.after(' <span class="wpuf-loading"></span>'),a.post(wpuf_frontend.ajaxurl,e,function(b){if(void 0===f){var e='<input type="hidden" name="post_id" value="'+b.post_id+'">';e+='<input type="hidden" name="post_date" value="'+b.date+'">',e+='<input type="hidden" name="post_author" value="'+b.post_author+'">',e+='<input type="hidden" name="comment_status" value="'+b.comment_status+'">',d.append(e)}c.next("span.wpuf-loading").remove(),c.after('<span class="wpuf-draft-saved">&nbsp; '+b.message+"</span>"),a(".wpuf-draft-saved").delay(2500).fadeOut("fast",function(){a(this).remove()})})},account_update_profile:function(b){b.preventDefault();var c=a(this).closest("form");a.post(wpuf_frontend.ajaxurl,c.serialize(),function(a){a.success?(c.find(".wpuf-error").hide(),c.find(".wpuf-success").show()):(c.find(".wpuf-success").hide(),c.find(".wpuf-error").show(),c.find(".wpuf-error").text(a.data))})},formStepCheck:function(a,b){var c=b,d=(c.find("input[type=submit]"),WP_User_Frontend.validateForm(c));return 0==d&&WP_User_Frontend.addErrorNotice(self,"bottom"),d},formSubmit:function(c){c.preventDefault();var d=a(this),e=d.find("input[type=submit]");form_data=WP_User_Frontend.validateForm(d),form_data&&(d.find("li.wpuf-submit").append('<span class="wpuf-loading"></span>'),e.attr("disabled","disabled").addClass("button-primary-disabled"),a.post(wpuf_frontend.ajaxurl,form_data,function(c){if(c.success)a("body").trigger("wpuf:postform:success",c),1==c.show_message?(d.before('<div class="wpuf-success">'+c.message+"</div>"),d.slideUp("fast",function(){d.remove()}),a("html, body").animate({scrollTop:a(".wpuf-success").offset().top-100},"fast")):b.location=c.redirect_to;else{if(void 0!==c.type&&"login"===c.type)return void(confirm(c.error)?b.location=c.redirect_to:(e.removeAttr("disabled"),e.removeClass("button-primary-disabled"),d.find("span.wpuf-loading").remove()));d.find(".g-recaptcha").length>0&&grecaptcha.reset(),new swal({html:c.error,type:"warning",showCancelButton:!1,confirmButtonColor:"#d54e21",confirmButtonText:"OK",cancelButtonClass:"btn btn-danger"}),e.removeAttr("disabled")}e.removeClass("button-primary-disabled"),d.find("span.wpuf-loading").remove()}))},isTelephoneField:function(b){return a(b).hasClass("wpuf_telephone")&&"yes"===a(b).data("show-list")},validateForm:function(c){var d=[],e=[];if(WP_User_Frontend.removeErrors(c),WP_User_Frontend.removeErrorNotice(c),c.find("input:visible, textarea:visible, select:visible, div.br-widget:visible, .wpuf-rich-validation:visible, div.wpuf-attachment-upload-filelist:visible").each(function(f,g){var h="",i=a(g).data("type"),j=a(g).data("required");switch(i){case"rich":var k=a(g).data("id"),l=a(g).data("name");v=a.trim(tinyMCE.get(k).getContent()),"yes"===j&&""===v&&e.push({type:"required",container:g});var m=WP_User_Frontend.editorLimit.isRestrictionFailed(g);if(m){e.push({type:"limit",container:g});break}d.push(l+"="+encodeURIComponent(v));break;case"textarea":case"text":if(v=a.trim(a(g).val()),"yes"===j&&""===v){e.push({type:"required",container:g});break}var m=WP_User_Frontend.editorLimit.isRestrictionFailed(g);if(m){e.push({type:"limit",container:g});break}if(WP_User_Frontend.isTelephoneField(g)){var n=b.intlTelInputGlobals.getInstance(g);if(""!==n.getNumber()&&!n.isValidNumber()){e.push({type:"validation",container:g});break}var o=a(g).attr("name"),p=n.getNumber();a("<input>").attr("type","hidden").attr("name",o).attr("value",p).appendTo(c);break}break;case"url":if(v=a.trim(a(g).val()),"yes"===j&&""===v){e.push({type:"required",container:g});break}if(""!==v&&!WP_User_Frontend.isValidURL(v)){e.push({type:"validation",container:g});break}break;case"password":case"confirm_password":var q=a(g).data("repeat"),r=a(g).data("strength"),s=a(g).data("minimum-length");if(v=a.trim(a(g).val()),"yes"===j&&""===v){e.push({type:"required",container:g});break}if(v.length<s){e.push({type:"custom",container:g,message:"Minimum "+s+" character is required"});break}if(q&&a('[data-type="confirm_password"]').eq(0).val()!==v&&e.push({error_type:"mismatch",container:g}),r){var t=wp.passwordStrength.meter(v,wp.passwordStrength.userInputDisallowedList());"weak"===r&&t<2?e.push({type:"custom",container:g,message:"Password minimum strength should be weak"}):"medium"===r&&t<3?e.push({type:"custom",container:g,message:"Password minimum strength should be medium"}):"strong"===r&&t<4&&e.push({type:"custom",container:g,message:"Password strength should be strong"})}break;case"select":v=a(g).val(),"yes"===j&&"-1"===v&&e.push({type:"required",container:g});break;case"multiselect":v=a(g).val(),"yes"===j&&0===v.length&&e.push({type:"required",container:g});break;case"tax-checkbox":var u=a(g).children().find("input:checked").length;"yes"!==j||u||e.push({type:"required",container:g});break;case"radio":case"checkbox":h=a(g).parents(".wpuf-fields"),u=a(h).find("input:checked").length,"yes"!==j||u||e.push({type:"required",container:g});break;case"file":var u=a(g).find("ul").children().length;"yes"!==j||u||e.push({type:"required",container:a(g).closest(".wpuf-fields")});break;case"email":if(v=a(g).val(),"yes"===j&&""===v){e.push({type:"required",container:g});break}""===v||WP_User_Frontend.isValidEmail(v)||e.push({type:"validation",container:g});break;case"url":var v=a(g).val();if("yes"===j&&""===v){e.push({type:"validation",container:g});break}""===v||WP_User_Frontend.isValidURL(v)||e.push({type:"validation",container:g});break;default:if(a(g).attr("id")&&a(g).attr("id").startsWith("wpuf-map")){var w=a(g).parents(".wpuf-form-google-map-container");mapField=a(w).find('input[id^="wpuf-map-lat"]'),j=a(mapField).data("required"),v=a(mapField).val(),"yes"===j&&""===v&&e.push({type:"required",container:w})}a(g).hasClass("br-widget")&&(h=a(g).parents(".wpuf-fields"),j=a(h).find("select.wpuf-ratings").data("required"),u=a(g).find(".br-selected").length,"yes"!==j||u||e.push({type:"required",container:g}))}}),e.length){var f,g=e.length;for(f=0;f<g;f++)WP_User_Frontend.markError(e[f].container,e[f].type,e[f].message);return WP_User_Frontend.addErrorNotice(c,"end"),a(e[0].container).focus(),!1}c.find('li.wpuf-el[style*="display: none"] input').each(function(b,c){switch(a(c).attr("type")){case"url":case"email":a(c).val("")}});var h=c.find(":disabled").removeAttr("disabled"),i=c.serialize();return h.attr("disabled","disabled"),i=i+"&"+d.join("&")},addErrorNotice:function(b,c){"bottom"==c?a(".wpuf-multistep-fieldset:visible").append('<div class="wpuf-errors">'+wpuf_frontend.error_message+"</div>"):a(b).find("li.wpuf-submit").append('<div class="wpuf-errors">'+wpuf_frontend.error_message+"</div>")},removeErrorNotice:function(b){a(b).find(".wpuf-errors").remove()},markError:function(b,c,d){if(a(b).closest("div").addClass("has-error"),c){var e="",f=a(b).data("label");switch(e=f||a(b).closest("li").data("label"),c){case"required":case"mismatch":case"validation":e=e+" "+error_str_obj[c];break;case"limit":e="";break;case"custom":e=d}a(b).siblings(".wpuf-error-msg").remove(),a(b).closest(".wpuf-fields.wpuf-fields-address").length?(a(b).closest("div.wpuf-sub-fields").find("div.wpuf-error-msg").remove(),a(b).closest("div.wpuf-sub-fields").append('<div class="wpuf-error-msg">'+e+"</div>")):(a(b).closest("div.wpuf-fields").find("div.wpuf-error-msg").remove(),a(b).closest("div.wpuf-fields").append('<div class="wpuf-error-msg">'+e+"</div>"))}},removeErrors:function(b){a(b).find(".has-error").removeClass("has-error"),a(".wpuf-error-msg").remove()},isValidEmail:function(a){return new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i).test(a)},isValidURL:function(a){return new RegExp("^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/){1}[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,20}(:[0-9]{1,20})?(\\/.*)?$").test(a)},insertImage:function(b,c){if(a("#"+b).length){var d=new plupload.Uploader({runtimes:"html5,html4",browse_button:b,container:"wpuf-insert-image-container",multipart:!0,multipart_params:{action:"wpuf_insert_image",form_id:a("#"+b).data("form_id")},multiple_queues:!1,multi_selection:!1,urlstream_upload:!0,file_data_name:"wpuf_file",max_file_size:wpuf_frontend_upload.max_filesize,url:wpuf_frontend_upload.plupload.url,flash_swf_url:wpuf_frontend_upload.flash_swf_url,filters:[{title:"Allowed Files",extensions:"jpg,jpeg,gif,png,bmp"}]});d.bind("Init",function(a,b){}),d.bind("FilesAdded",function(b,c){var d=a("#wpuf-insert-image-container");a.each(c,function(a,b){d.append('<div class="upload-item" id="'+b.id+'"><div class="progress progress-striped active"><div class="bar"></div></div></div>')}),b.refresh(),b.start()}),d.bind("QueueChanged",function(a){d.start()}),d.bind("UploadProgress",function(b,c){var d=a("#"+c.id);a(".bar",d).css({width:c.percent+"%"}),a(".percent",d).html(c.percent+"%")}),d.bind("Error",function(a,b){alert("Error #"+b.code+": "+b.message)}),d.bind("FileUploaded",function(b,d,e){if(a("#"+d.id).remove(),"error"!==e.response){if("undefined"!=typeof tinyMCE)if("function"!=typeof tinyMCE.execInstanceCommand){var f=tinyMCE.get("post_content_"+c);null!==f&&f.insertContent(e.response)}else tinyMCE.execInstanceCommand("post_content_"+c,"mceInsertContent",!1,e.response);var g=a("#post_content_"+c);g.val(g.val()+e.response)}else alert("Something went wrong")}),d.init()}},deleteAvatar:function(b){b.preventDefault(),confirm(a(this).data("confirm"))&&a.post(wpuf_frontend.ajaxurl,{action:"wpuf_delete_avatar",_wpnonce:wpuf_frontend.nonce},function(){a(b.target).parent().remove(),a("[id^=wpuf-avatar]").css("display","")})},editorLimit:{bind:function(b,c,d,e,f){"no"===d?(a("textarea#"+c).keydown(function(a){WP_User_Frontend.editorLimit.textLimit.call(this,a,b,e,f)}),a("input#"+c).keydown(function(a){WP_User_Frontend.editorLimit.textLimit.call(this,a,b,e,f)}),a("input#"+c).change(function(a){WP_User_Frontend.editorLimit.textLimit.call(this,a,b,e,f)}),a("textarea#"+c).on("paste",function(c){var d=a(this);setTimeout(function(){WP_User_Frontend.editorLimit.textLimit.call(d,c,b,e,f)},100)}),a("input#"+c).on("paste",function(c){var d=a(this);setTimeout(function(){WP_User_Frontend.editorLimit.textLimit.call(d,c,b,e,f)},100)})):setTimeout(function(){tinyMCE.get(c).onKeyDown.add(function(a,c){WP_User_Frontend.editorLimit.tinymce.onKeyDown(a,c,b,e,f)}),tinyMCE.get(c).onPaste.add(function(a,c){setTimeout(function(){WP_User_Frontend.editorLimit.tinymce.onPaste(a,c,b,e,f)},100)})},1e3)},checkTinyMCERestriction:function(a,b,c){var d=0,e=void 0!==b[0]&&null!==b[0]?parseInt(b[0]):0,f=(void 0!==b[1]&&null!==b[1]&&b[1].trim(),void 0!==b[2]&&null!==b[2]&&b[2].trim(),void 0!==b[3]&&null!==b[3]?b[3].trim():""),g=void 0!==b[4]&&null!==b[4]?b[4].trim():"",h="";"word"===f?(d=WP_User_Frontend.editorLimit.tinymce.getStats(c).words,h="word_"+g):(d=WP_User_Frontend.editorLimit.tinymce.getStats(c).chars,h="char_"+g);wpuf_frontend["word_"+g];return 0!==d&&(d>e&&"max"===g?(WP_User_Frontend.markError(a,"limit"),jQuery(".mce-path-item.mce-last",c.container).html(wpuf_frontend[h]+" "+d+"/"+e),!0):d<e&&"min"===g?(WP_User_Frontend.markError(a,"limit"),jQuery(".mce-path-item.mce-last",c.container).html(wpuf_frontend[h]+" "+d+"/"+e),!0):void 0)},isRestrictionFailed:function(b){var c=a(b).data("id"),d=(a(b).data("type"),!1),e=null,f=0,g=0,h="";if(a(b).closest("div.wpuf-fields").hasClass("has-error")&&a(b).closest("div.wpuf-fields").removeClass("has-error"),"undefined"!=typeof tinyMCE&&null!==tinyMCE.get(c)&&(d=!0,e=tinyMCE.get(c),e.focus()),a(b).closest("li.wpuf-el").find("script").html()){var i=a(b).closest("li.wpuf-el").find("script").html();h=i.match(/(?:bind\()(.*?(?=\)))/)?i.match(/(?:bind\()(.*?(?=\)))/)[1].replace(/['"]/g,"").split(","):""}if(d)return WP_User_Frontend.editorLimit.checkTinyMCERestriction(b,h,e);var j=void 0!==h[0]&&null!==h[0]?parseInt(h[0]):0,k=void 0!==h[3]&&null!==h[3]?h[3].trim():"",l=void 0!==h[4]&&null!==h[4]?h[4].trim():"";if(f=a(b).val().trim().length,g=a(b).val().trim().split(" ").length,0===f)return!1;if("word"===k){if(g>j&&"max"===l)return WP_User_Frontend.markError(b,"limit"),!0;if(g<j&&"min"===l)return WP_User_Frontend.markError(b,"limit"),!0}else{if(f>j&&"max"===l)return WP_User_Frontend.markError(b,"limit"),!0;if(f<j&&"min"===l)return WP_User_Frontend.markError(b,"limit"),!0}return!1},tinymce:{getStats:function(a){var b=a.getBody(),c=tinymce.trim(b.innerText||b.textContent);return{chars:c.length,words:c.split(/[\w\u2019\'-]+/).length-1}},onKeyDown:function(b,c,d,e,f){var g=a(".wpuf-fields.wpuf_"+b.id);g.closest(".wpuf-fields").hasClass("has-error")&&g.closest(".wpuf-fields").removeClass("has-error");var h=WP_User_Frontend.editorLimit.tinymce.getStats(b).chars+1,i="";"word"===e?(h=WP_User_Frontend.editorLimit.tinymce.getStats(b).words,i="word_"+f):(h=WP_User_Frontend.editorLimit.tinymce.getStats(b).chars,i="char_"+f),d&&h>d&&"max"===f?(WP_User_Frontend.editorLimit.blockTyping(c),WP_User_Frontend.markError(g,"limit"),jQuery(".mce-path-item.mce-last",b.container).html(wpuf_frontend[i]+" "+h+"/"+d)):d&&h<d&&"min"===f?(WP_User_Frontend.markError(g,"limit"),jQuery(".mce-path-item.mce-last",b.container).html(wpuf_frontend[i]+" "+h+"/"+d)):jQuery(".mce-path-item.mce-last",b.container).html("")},onPaste:function(a,b,c){var d=a.getContent().split(" ").slice(0,c).join(" ");a.setContent(d),WP_User_Frontend.editorLimit.make_media_embed_code(d,a)}},textLimit:function(b,c,d,e){var f=a(this),g=f.val().length+1,h=f.val();f.closest(".wpuf-fields").hasClass("has-error")&&f.closest(".wpuf-fields").removeClass("has-error"),"word"===d&&(g=f.val().split(" ").length),c&&g>c&&"max"===e?(WP_User_Frontend.content_limit_message(f,d,e,c),WP_User_Frontend.editorLimit.blockTyping(b)):c&&g<c&&"min"===e?WP_User_Frontend.content_limit_message(f,d,e,c):f.closest(".wpuf-fields").find("span.wpuf-wordlimit-message").html(""),"paste"===b.type&&(f.val(h.substring(0,c)),"word"===d&&f.val(h.slice(0,c).join(" ")))},blockTyping:function(b){-1!==a.inArray(b.keyCode,[46,8,9,27,13,110,190,189])||65==b.keyCode&&!0===b.ctrlKey||b.keyCode>=35&&b.keyCode<=40||(b.preventDefault(),b.stopPropagation())},make_media_embed_code:function(b,c){a.post(ajaxurl,{action:"make_media_embed_code",content:b},function(a){c.setContent(c.getContent()+c.setContent(a))})}},doUncheckRadioBtn:function(a){a.checked=!1},content_limit_message:function(a,b,c,d){WP_User_Frontend.markError(a,"limit");var e="";"word"===b&&(e=wpuf_frontend["word_"+c]+" "+d),"character"===b&&(e=wpuf_frontend["char_"+c]+" "+d),a.closest(".wpuf-fields").find("span.wpuf-wordlimit-message").html(e)}},a(function(){if(WP_User_Frontend.init(),a("ul.wpuf-payment-gateways").on("click","input[type=radio]",function(b){a(".wpuf-payment-instruction").slideUp(250),a(this).parents("li").find(".wpuf-payment-instruction").slideDown(250)}),a("ul.wpuf-payment-gateways li").find("input[type=radio]").is(":checked")){a("ul.wpuf-payment-gateways li").find("input[type=radio]:checked").parents("li").find(".wpuf-payment-instruction").slideDown(250)}else a("ul.wpuf-payment-gateways li").first().find("input[type=radio]").click()}),a(function(){a('input[name="first_name"], input[name="last_name"]').on("change keyup",function(){var b,c=a.makeArray(a('input[name="first_name"], input[name="last_name"]').map(function(){if(b=a(this).val())return b})).join(" ");a('input[name="display_name"]').val(c)})}),a(function(a){a('.wpuf-form-add input[name="dokan_store_name"]').on("focusout",function(){var b=a(this).val().toLowerCase().replace(/-+/g,"").replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"");a('input[name="shopurl"]').val(b),a("#url-alart").text(b),a('input[name="shopurl"]').focus()}),a('.wpuf-form-add input[name="shopurl"]').keydown(function(b){a(this).val();-1!==a.inArray(b.keyCode,[46,8,9,27,13,91,109,110,173,189,190])||65==b.keyCode&&!0===b.ctrlKey||b.keyCode>=35&&b.keyCode<=39||(b.shiftKey||(b.keyCode<65||b.keyCode>90)&&(b.keyCode<48||b.keyCode>57))&&(b.keyCode<96||b.keyCode>105)&&b.preventDefault()}),a('.wpuf-form-add input[name="shopurl"]').keyup(function(b){a("#url-alart").text(a(this).val())}),a('.wpuf-form-add input[name="shopurl"]').on("focusout",function(){var b=a(this),c={action:"shop_url",url_slug:b.val(),_nonce:dokan.nonce};""!==b.val()&&a.post(dokan.ajaxurl,c,function(b){0==b?(a("#url-alart").removeClass("text-success").addClass("text-danger"),a("#url-alart-mgs").removeClass("text-success").addClass("text-danger").text(dokan.seller.notAvailable)):(a("#url-alart").removeClass("text-danger").addClass("text-success"),a("#url-alart-mgs").removeClass("text-danger").addClass("text-success").text(dokan.seller.available))})}),a(".wpuf-form-add #wpuf-map-add-location").attr("name","find_address")})}(jQuery,window);
assets/js/promotion.json CHANGED
@@ -1,9 +1,9 @@
1
  {
2
- "key": "wpdashboard-summer-2022",
3
- "start_date": "2022-07-07 8:00:00 EST",
4
- "end_date": "2022-07-13 22:00:00 EST",
5
- "title": "Beat the Heat with WP User Frontend Pro this Summer.",
6
- "content": "Enjoy Up To 35% OFF",
7
- "action_url": "https://wedevs.com/wp-user-frontend-pro/pricing?utm_medium=text&utm_source=wpdashboard-summer-2022",
8
  "action_title": "Get Now"
9
  }
1
  {
2
+ "key": "wpdashboard-halloween-2022",
3
+ "start_date": "2022-10-27 8:00:00 EST",
4
+ "end_date": "2022-11-04 01:59:00 EST",
5
+ "title": "Deals too good to turn down.",
6
+ "content": "Get up to 40% OFF WP User Frontend this Halloween!",
7
+ "action_url": "https://wedevs.com/wp-user-frontend-pro/pricing/",
8
  "action_title": "Get Now"
9
  }
assets/js/upload.js CHANGED
@@ -202,7 +202,7 @@
202
  var self = this,
203
  el = $(e.currentTarget);
204
 
205
- swal({
206
  text: wpuf_frontend_upload.confirmMsg,
207
  type: 'warning',
208
  showCancelButton: true,
202
  var self = this,
203
  el = $(e.currentTarget);
204
 
205
+ new swal({
206
  text: wpuf_frontend_upload.confirmMsg,
207
  type: 'warning',
208
  showCancelButton: true,
assets/js/upload.min.js CHANGED
@@ -1 +1 @@
1
- !function(a){window.WPUF_Uploader=function(b,c,d,e,f,g){if(this.removed_files=[],this.container=c,this.browse_button=b,this.max=d||1,this.count=a("#"+c).find(".wpuf-attachment-list > li").length,this.perFileCount=0,this.UploadedFiles=0,a("#"+b).length)return a("ul.wpuf-attachment-list").sortable({placeholder:"highlight"}),a("ul.wpuf-attachment-list").disableSelection(),this.uploader=new plupload.Uploader({runtimes:"html5,html4",browse_button:b,container:c,multipart:!0,multipart_params:{action:"wpuf_upload_file",form_id:a("#"+b).data("form_id")},urlstream_upload:!0,file_data_name:"wpuf_file",max_file_size:g+"kb",url:wpuf_frontend_upload.plupload.url+"&type="+e,flash_swf_url:wpuf_frontend_upload.flash_swf_url,filters:[{title:"Allowed Files",extensions:f}]}),this.uploader.bind("Init",a.proxy(this,"init")),this.uploader.bind("FilesAdded",a.proxy(this,"added")),this.uploader.bind("QueueChanged",a.proxy(this,"upload")),this.uploader.bind("UploadProgress",a.proxy(this,"progress")),this.uploader.bind("Error",a.proxy(this,"error")),this.uploader.bind("FileUploaded",a.proxy(this,"uploaded")),this.uploader.init(),a("#"+c).on("click","a.attachment-delete",a.proxy(this.removeAttachment,this)),this.uploader},WPUF_Uploader.prototype={init:function(b,c){this.showHide(),a("#"+this.container).prepend('<div class="wpuf-file-warning"></div>')},showHide:function(){if(this.count>=this.max)return this.count,this.max,a("#"+this.container+" .wpuf-file-warning").html(wpuf_frontend_upload.warning),void a("#"+this.container).find(".file-selector").hide();a("#"+this.container+" .wpuf-file-warning").html(""),a("#"+this.container).find(".file-selector").show()},added:function(b,c){var d=a("#"+this.container).find(".wpuf-attachment-upload-filelist");this.showHide(),a.each(c,function(b,c){a(".wpuf-submit-button").attr("disabled","disabled"),d.append('<div class="upload-item" id="'+c.id+'"><div class="progress progress-striped active"><div class="bar"></div></div><div class="filename original">'+c.name+" ("+plupload.formatSize(c.size)+") <b></b></div></div>")}),b.refresh(),b.start()},upload:function(a){this.count=a.files.length-this.removed_files.length,this.showHide()},progress:function(b,c){var d=a("#"+c.id);a(".bar",d).css({width:c.percent+"%"}),a(".percent",d).html(c.percent+"%")},error:function(b,c){a("#"+this.container).find("#"+c.file.id).remove();var d="";switch(c.code){case-600:d=wpuf_frontend_upload.plupload.size_error;break;case-601:d=wpuf_frontend_upload.plupload.type_error;break;default:d="Error #"+c.code+": "+c.message}alert(d),this.count-=1,this.showHide(),this.uploader.refresh()},uploaded:function(b,c,d){try{var e=a.parseJSON(d.response)}catch(a){var f=!0}var g=this;if(a("#"+c.id+" b").html("100%"),a("#"+c.id).remove(),f){this.perFileCount++,this.UploadedFiles++;var h=a("#"+this.container).find(".wpuf-attachment-list");if(h.append(d.response),this.perFileCount>this.max){var i=a(".wpuf-image-wrap:last a.attachment-delete",h).data("attach-id");g.removeExtraAttachment(i),a(".wpuf-image-wrap",h).last().remove(),this.perFileCount--}}else alert(e.data.replace(/(<([^>]+)>)/gi,"")),b.files.pop(),this.count-=1,this.showHide();var j=this.UploadedFiles,k=b.files.length;if(this.count>=this.max&&a("#"+this.container).find(".file-selector").hide(),k===j){if("undefined"!=typeof grecaptcha&&a(".wpuf-form-add #g-recaptcha-response").length&&!grecaptcha.getResponse().length)return;a(".wpuf-submit-button").removeAttr("disabled")}},removeAttachment:function(b){b.preventDefault();var c=this,d=a(b.currentTarget);swal({text:wpuf_frontend_upload.confirmMsg,type:"warning",showCancelButton:!0,confirmButtonColor:"#d54e21",confirmButtonText:wpuf_frontend_upload.delete_it,cancelButtonText:wpuf_frontend_upload.cancel_it,confirmButtonClass:"btn btn-success",cancelButtonClass:"btn btn-danger"}).then(function(){var a={attach_id:d.data("attach-id"),nonce:wpuf_frontend_upload.nonce,action:"wpuf_file_del"};c.removed_files.push(a),jQuery("#del_attach").val(d.data("attach-id")),jQuery.post(wpuf_frontend_upload.ajaxurl,a,function(){c.perFileCount--,d.parent().parent().remove(),c.count-=1,c.showHide(),c.uploader.refresh()})})},removeExtraAttachment:function(a){var b=this,c={attach_id:a,nonce:wpuf_frontend_upload.nonce,action:"wpuf_file_del"};this.removed_files.push(c),jQuery.post(wpuf_frontend_upload.ajaxurl,c,function(){b.count-=1,b.showHide(),b.uploader.refresh()})}}}(jQuery);
1
+ !function(a){window.WPUF_Uploader=function(b,c,d,e,f,g){if(this.removed_files=[],this.container=c,this.browse_button=b,this.max=d||1,this.count=a("#"+c).find(".wpuf-attachment-list > li").length,this.perFileCount=0,this.UploadedFiles=0,a("#"+b).length)return a("ul.wpuf-attachment-list").sortable({placeholder:"highlight"}),a("ul.wpuf-attachment-list").disableSelection(),this.uploader=new plupload.Uploader({runtimes:"html5,html4",browse_button:b,container:c,multipart:!0,multipart_params:{action:"wpuf_upload_file",form_id:a("#"+b).data("form_id")},urlstream_upload:!0,file_data_name:"wpuf_file",max_file_size:g+"kb",url:wpuf_frontend_upload.plupload.url+"&type="+e,flash_swf_url:wpuf_frontend_upload.flash_swf_url,filters:[{title:"Allowed Files",extensions:f}]}),this.uploader.bind("Init",a.proxy(this,"init")),this.uploader.bind("FilesAdded",a.proxy(this,"added")),this.uploader.bind("QueueChanged",a.proxy(this,"upload")),this.uploader.bind("UploadProgress",a.proxy(this,"progress")),this.uploader.bind("Error",a.proxy(this,"error")),this.uploader.bind("FileUploaded",a.proxy(this,"uploaded")),this.uploader.init(),a("#"+c).on("click","a.attachment-delete",a.proxy(this.removeAttachment,this)),this.uploader},WPUF_Uploader.prototype={init:function(b,c){this.showHide(),a("#"+this.container).prepend('<div class="wpuf-file-warning"></div>')},showHide:function(){if(this.count>=this.max)return this.count,this.max,a("#"+this.container+" .wpuf-file-warning").html(wpuf_frontend_upload.warning),void a("#"+this.container).find(".file-selector").hide();a("#"+this.container+" .wpuf-file-warning").html(""),a("#"+this.container).find(".file-selector").show()},added:function(b,c){var d=a("#"+this.container).find(".wpuf-attachment-upload-filelist");this.showHide(),a.each(c,function(b,c){a(".wpuf-submit-button").attr("disabled","disabled"),d.append('<div class="upload-item" id="'+c.id+'"><div class="progress progress-striped active"><div class="bar"></div></div><div class="filename original">'+c.name+" ("+plupload.formatSize(c.size)+") <b></b></div></div>")}),b.refresh(),b.start()},upload:function(a){this.count=a.files.length-this.removed_files.length,this.showHide()},progress:function(b,c){var d=a("#"+c.id);a(".bar",d).css({width:c.percent+"%"}),a(".percent",d).html(c.percent+"%")},error:function(b,c){a("#"+this.container).find("#"+c.file.id).remove();var d="";switch(c.code){case-600:d=wpuf_frontend_upload.plupload.size_error;break;case-601:d=wpuf_frontend_upload.plupload.type_error;break;default:d="Error #"+c.code+": "+c.message}alert(d),this.count-=1,this.showHide(),this.uploader.refresh()},uploaded:function(b,c,d){try{var e=a.parseJSON(d.response)}catch(a){var f=!0}var g=this;if(a("#"+c.id+" b").html("100%"),a("#"+c.id).remove(),f){this.perFileCount++,this.UploadedFiles++;var h=a("#"+this.container).find(".wpuf-attachment-list");if(h.append(d.response),this.perFileCount>this.max){var i=a(".wpuf-image-wrap:last a.attachment-delete",h).data("attach-id");g.removeExtraAttachment(i),a(".wpuf-image-wrap",h).last().remove(),this.perFileCount--}}else alert(e.data.replace(/(<([^>]+)>)/gi,"")),b.files.pop(),this.count-=1,this.showHide();var j=this.UploadedFiles,k=b.files.length;if(this.count>=this.max&&a("#"+this.container).find(".file-selector").hide(),k===j){if("undefined"!=typeof grecaptcha&&a(".wpuf-form-add #g-recaptcha-response").length&&!grecaptcha.getResponse().length)return;a(".wpuf-submit-button").removeAttr("disabled")}},removeAttachment:function(b){b.preventDefault();var c=this,d=a(b.currentTarget);new swal({text:wpuf_frontend_upload.confirmMsg,type:"warning",showCancelButton:!0,confirmButtonColor:"#d54e21",confirmButtonText:wpuf_frontend_upload.delete_it,cancelButtonText:wpuf_frontend_upload.cancel_it,confirmButtonClass:"btn btn-success",cancelButtonClass:"btn btn-danger"}).then(function(){var a={attach_id:d.data("attach-id"),nonce:wpuf_frontend_upload.nonce,action:"wpuf_file_del"};c.removed_files.push(a),jQuery("#del_attach").val(d.data("attach-id")),jQuery.post(wpuf_frontend_upload.ajaxurl,a,function(){c.perFileCount--,d.parent().parent().remove(),c.count-=1,c.showHide(),c.uploader.refresh()})})},removeExtraAttachment:function(a){var b=this,c={attach_id:a,nonce:wpuf_frontend_upload.nonce,action:"wpuf_file_del"};this.removed_files.push(c),jQuery.post(wpuf_frontend_upload.ajaxurl,c,function(){b.count-=1,b.showHide(),b.uploader.refresh()})}}}(jQuery);
assets/js/wpuf-admin.js CHANGED
@@ -44,7 +44,7 @@ jQuery(function($) {
44
  'post_id' : post_id
45
  },
46
  success:function(data) {
47
- swal({
48
  type: 'success',
49
  title: wpuf_admin_script.cleared_schedule_lock,
50
  showConfirmButton: false,
@@ -57,4 +57,48 @@ jQuery(function($) {
57
  });
58
  $(this).closest("p").hide();
59
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  });
44
  'post_id' : post_id
45
  },
46
  success:function(data) {
47
+ new swal({
48
  type: 'success',
49
  title: wpuf_admin_script.cleared_schedule_lock,
50
  showConfirmButton: false,
57
  });
58
  $(this).closest("p").hide();
59
  });
60
+
61
+ // override settings tab preventDefault action on lib/class.settings-api.php for tooltip link
62
+ $('.button-upgrade-to-pro').click(function(e) {
63
+ e.stopPropagation();
64
+ });
65
+
66
+ // show tooltips on crown icons
67
+ $('th span.pro-icon, td label span.pro-icon-title, th label span.pro-icon-title, a span.pro-icon-title').on('mouseover', function() {
68
+ let tooltip = $( '.wpuf-pro-field-tooltip' );
69
+ let windowWidth = $( window ).width();
70
+ let windowHeight = $( window ).height();
71
+ let iconBounding = $( this )[0].getBoundingClientRect();
72
+ let spaceTop = iconBounding.y;
73
+ let iconBoundingRight = iconBounding.right;
74
+ let iconBoundingBottom = iconBounding.bottom;
75
+ let spaceRight = windowWidth - iconBoundingRight;
76
+ let spaceBottom = windowHeight - iconBoundingBottom;
77
+ let tooltipHeight = tooltip.outerHeight();
78
+ let tooltipWidth = tooltip.outerWidth();
79
+
80
+ if ( spaceTop > tooltipHeight ) {
81
+ $( '.wpuf-pro-field-tooltip i' ).css( 'left', '50%' );
82
+ $( '.wpuf-pro-field-tooltip i' ).css( 'top', '100%' );
83
+ $( '.wpuf-pro-field-tooltip i' ).css( 'transform', 'initial' );
84
+ $( '.wpuf-pro-field-tooltip' ).css( 'left', '50%' );
85
+ $( '.wpuf-pro-field-tooltip' ).css( 'top', '0' );
86
+ } else if ( spaceTop < tooltipHeight && spaceRight > tooltipWidth ) {
87
+ $( '.wpuf-pro-field-tooltip i' ).css( 'left', '-5px' );
88
+ $( '.wpuf-pro-field-tooltip i' ).css( 'top', '22px' );
89
+ $( '.wpuf-pro-field-tooltip i' ).css( 'transform', 'rotate(90deg)' );
90
+ $( '.wpuf-pro-field-tooltip' ).css( 'left', '185px' );
91
+ $( '.wpuf-pro-field-tooltip' ).css( 'top', '310px' );
92
+ $( 'a span.pro-icon-title .wpuf-pro-field-tooltip' ).css( 'left', '170px' );
93
+ $( 'a span.pro-icon-title .wpuf-pro-field-tooltip i' ).css( 'top', '15px' );
94
+ } else if ( spaceBottom > tooltipHeight ) {
95
+ $( '.wpuf-pro-field-tooltip' ).css( 'left', '10px' );
96
+ $( '.wpuf-pro-field-tooltip' ).css( 'top', '360px' );
97
+ $( '.wpuf-pro-field-tooltip i' ).css( 'top', '-10px' );
98
+ $( '.wpuf-pro-field-tooltip i' ).css( 'left', '150px' );
99
+ $( '.wpuf-pro-field-tooltip i' ).css( 'transform', 'rotate(180deg)' );
100
+ }
101
+
102
+ tooltip.appendTo( this );
103
+ });
104
  });
assets/js/wpuf-form-builder-components.js CHANGED
@@ -104,7 +104,7 @@ Vue.component('builder-stage', {
104
 
105
  // check if these are already inserted
106
  if ( this.isSingleInstance( field.template ) && this.containsField( field.template ) ) {
107
- swal({
108
  title: "Oops...",
109
  text: "You already have this field in the form"
110
  });
@@ -117,7 +117,7 @@ Vue.component('builder-stage', {
117
  delete_field: function(index) {
118
  var self = this;
119
 
120
- swal({
121
  text: self.i18n.delete_field_warn_msg,
122
  type: 'warning',
123
  showCancelButton: true,
@@ -126,10 +126,10 @@ Vue.component('builder-stage', {
126
  cancelButtonText: self.i18n.no_cancel_it,
127
  confirmButtonClass: 'btn btn-success',
128
  cancelButtonClass: 'btn btn-danger',
129
- }).then(function () {
130
- self.$store.commit('delete_form_field_element', index);
131
- }, function() {
132
-
133
  });
134
  },
135
 
@@ -387,7 +387,7 @@ Vue.component('field-option-data', {
387
  i = 0;
388
 
389
  for (i = 0; i < new_opts.length; i++) {
390
- options[new_opts[i].value] = new_opts[i].label;
391
  }
392
 
393
  this.update_value('options', options);
@@ -945,7 +945,7 @@ Vue.component('form-column_field', {
945
  };
946
 
947
  if (this.isAllowedInClolumnField(data.field_template)) {
948
- swal({
949
  title: "Oops...",
950
  text: "You cannot add this field as inner column field"
951
  });
@@ -954,7 +954,7 @@ Vue.component('form-column_field', {
954
 
955
  // check if these are already inserted
956
  if ( this.isSingleInstance( data.field_template ) && this.containsField( data.field_template ) ) {
957
- swal({
958
  title: "Oops...",
959
  text: "You already have this field in the form"
960
  });
@@ -1022,7 +1022,7 @@ Vue.component('form-column_field', {
1022
 
1023
  // check if the field is allowed to duplicate
1024
  if ( self.isSingleInstance( field.template ) ) {
1025
- swal({
1026
  title: "Oops...",
1027
  text: "You already have this field in the form"
1028
  });
@@ -1040,7 +1040,7 @@ Vue.component('form-column_field', {
1040
  fromColumn: fromColumn
1041
  };
1042
 
1043
- swal({
1044
  text: self.i18n.delete_field_warn_msg,
1045
  type: 'warning',
1046
  showCancelButton: true,
@@ -1049,10 +1049,10 @@ Vue.component('form-column_field', {
1049
  cancelButtonText: self.i18n.no_cancel_it,
1050
  confirmButtonClass: 'btn btn-success',
1051
  cancelButtonClass: 'btn btn-danger',
1052
- }).then(function () {
1053
- self.$store.commit('delete_column_field_element', payload);
1054
- }, function() {
1055
-
1056
  });
1057
  },
1058
 
@@ -1263,7 +1263,7 @@ Vue.component('form-fields', {
1263
  alert_pro_feature: function (field) {
1264
  var title = this.field_settings[field].title;
1265
 
1266
- swal({
1267
  title: '<i class="fa fa-lock"></i> ' + title + ' <br>' + this.i18n.is_a_pro_feature,
1268
  text: this.i18n.pro_feature_msg,
1269
  type: '',
104
 
105
  // check if these are already inserted
106
  if ( this.isSingleInstance( field.template ) && this.containsField( field.template ) ) {
107
+ new swal({
108
  title: "Oops...",
109
  text: "You already have this field in the form"
110
  });
117
  delete_field: function(index) {
118
  var self = this;
119
 
120
+ (new swal({
121
  text: self.i18n.delete_field_warn_msg,
122
  type: 'warning',
123
  showCancelButton: true,
126
  cancelButtonText: self.i18n.no_cancel_it,
127
  confirmButtonClass: 'btn btn-success',
128
  cancelButtonClass: 'btn btn-danger',
129
+ })).then((result) => {
130
+ if (result.isConfirmed) {
131
+ self.$store.commit('delete_form_field_element', index);
132
+ }
133
  });
134
  },
135
 
387
  i = 0;
388
 
389
  for (i = 0; i < new_opts.length; i++) {
390
+ options['' + new_opts[i].value] = new_opts[i].label;
391
  }
392
 
393
  this.update_value('options', options);
945
  };
946
 
947
  if (this.isAllowedInClolumnField(data.field_template)) {
948
+ new swal({
949
  title: "Oops...",
950
  text: "You cannot add this field as inner column field"
951
  });
954
 
955
  // check if these are already inserted
956
  if ( this.isSingleInstance( data.field_template ) && this.containsField( data.field_template ) ) {
957
+ new swal({
958
  title: "Oops...",
959
  text: "You already have this field in the form"
960
  });
1022
 
1023
  // check if the field is allowed to duplicate
1024
  if ( self.isSingleInstance( field.template ) ) {
1025
+ new swal({
1026
  title: "Oops...",
1027
  text: "You already have this field in the form"
1028
  });
1040
  fromColumn: fromColumn
1041
  };
1042
 
1043
+ (new swal({
1044
  text: self.i18n.delete_field_warn_msg,
1045
  type: 'warning',
1046
  showCancelButton: true,
1049
  cancelButtonText: self.i18n.no_cancel_it,
1050
  confirmButtonClass: 'btn btn-success',
1051
  cancelButtonClass: 'btn btn-danger',
1052
+ })).then((result) => {
1053
+ if (result.isConfirmed) {
1054
+ self.$store.commit('delete_form_field_element', index);
1055
+ }
1056
  });
1057
  },
1058
 
1263
  alert_pro_feature: function (field) {
1264
  var title = this.field_settings[field].title;
1265
 
1266
+ new swal({
1267
  title: '<i class="fa fa-lock"></i> ' + title + ' <br>' + this.i18n.is_a_pro_feature,
1268
  text: this.i18n.pro_feature_msg,
1269
  type: '',
assets/js/wpuf-form-builder-mixins.js CHANGED
@@ -1,6 +1,7 @@
1
  ;(function($) {
2
  'use strict';
3
 
 
4
  wpuf_mixins.add_form_field = {
5
  methods: {
6
  add_form_field: function (field_template) {
@@ -19,7 +20,7 @@ wpuf_mixins.add_form_field = {
19
 
20
  // check if these are already inserted
21
  if ( this.isSingleInstance( field_template ) && this.containsField( field_template ) ) {
22
- swal({
23
  title: "Oops...",
24
  text: "You already have this field in the form"
25
  });
@@ -133,7 +134,7 @@ Vue.mixin({
133
  cancelButtonText: this.i18n.cancel,
134
  }, settings);
135
 
136
- swal(settings, callback);
137
  },
138
 
139
  is_failed_to_validate: function (template) {
1
  ;(function($) {
2
  'use strict';
3
 
4
+
5
  wpuf_mixins.add_form_field = {
6
  methods: {
7
  add_form_field: function (field_template) {
20
 
21
  // check if these are already inserted
22
  if ( this.isSingleInstance( field_template ) && this.containsField( field_template ) ) {
23
+ Swal.fire({
24
  title: "Oops...",
25
  text: "You already have this field in the form"
26
  });
134
  cancelButtonText: this.i18n.cancel,
135
  }, settings);
136
 
137
+ new swal(settings, callback);
138
  },
139
 
140
  is_failed_to_validate: function (template) {
assets/js/wpuf-form-builder.js CHANGED
@@ -173,7 +173,7 @@
173
  html += '<img src="' + image_two + '" alt="custom field data">';
174
  html += '</div>';
175
  html += '</div>';
176
- swal({
177
  title: __( 'Do you want to show custom field data inside your post ?', 'wp-user-frontend' ),
178
  html: html,
179
  showCancelButton: true,
173
  html += '<img src="' + image_two + '" alt="custom field data">';
174
  html += '</div>';
175
  html += '</div>';
176
+ new swal({
177
  title: __( 'Do you want to show custom field data inside your post ?', 'wp-user-frontend' ),
178
  html: html,
179
  showCancelButton: true,
assets/less/admin.less CHANGED
@@ -181,8 +181,9 @@ span {
181
 
182
  a.nav-tab {
183
  float: none;
184
- display: block;
185
- margin: 0;
 
186
  border: none;
187
  padding: 14px;
188
  border-bottom: 1px solid #c8d7e1;
@@ -191,7 +192,7 @@ span {
191
  border-right: 1px solid #c8d7e1;
192
  color: #444;
193
  text-decoration: none;
194
- margin-right: -1px;
195
  background-color: #f1f1f1;
196
 
197
  &.nav-tab-active {
@@ -242,13 +243,18 @@ span {
242
  &#user_directory-tab .dashicons {
243
  color: #e74c3c;
244
  }
 
 
 
 
245
  }
246
  }
247
 
248
  .metabox-holder {
249
  flex: 3;
250
- margin-left: 30px;
251
  margin-bottom: 30px;
 
 
252
 
253
  h2 {
254
  border-bottom: 1px solid #c8d7e1;
@@ -831,6 +837,174 @@ ul.wpuf-form{
831
  display: none;
832
  }
833
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
834
  .wpuf-xmp-tag{
835
  display: inline;
836
  }
181
 
182
  a.nav-tab {
183
  float: none;
184
+ display: flex;
185
+ -webkit-align-items: center;
186
+ align-items: center;
187
  border: none;
188
  padding: 14px;
189
  border-bottom: 1px solid #c8d7e1;
192
  border-right: 1px solid #c8d7e1;
193
  color: #444;
194
  text-decoration: none;
195
+ margin: 0 -1px 0 0;
196
  background-color: #f1f1f1;
197
 
198
  &.nav-tab-active {
243
  &#user_directory-tab .dashicons {
244
  color: #e74c3c;
245
  }
246
+
247
+ .pro-icon-title {
248
+ margin-left: auto;
249
+ }
250
  }
251
  }
252
 
253
  .metabox-holder {
254
  flex: 3;
 
255
  margin-bottom: 30px;
256
+ padding-left: 30px;
257
+ position: relative;
258
 
259
  h2 {
260
  border-bottom: 1px solid #c8d7e1;
837
  display: none;
838
  }
839
 
840
+ tr.pro-preview td {
841
+ display: inline-block;
842
+ position: relative;
843
+ }
844
+ .pro-preview-html {
845
+ position: relative;
846
+ }
847
+ tr.pro-preview td:hover .pro-field-overlay,
848
+ .pro-preview-html:hover .pro-field-overlay {
849
+ -webkit-opacity: 1;
850
+ opacity: 1;
851
+ display: block;
852
+ }
853
+ tr.pro-preview .pro-field-overlay,
854
+ .pro-preview-html .pro-field-overlay,
855
+ .metabox-holder .pro-field-overlay {
856
+ position: absolute;
857
+ width: 100%;
858
+ height: 100%;
859
+ background: rgba(0, 0, 0, .4);
860
+ border-radius: 5px;
861
+ top: 0;
862
+ left: 0;
863
+ display: none;
864
+ }
865
+ tr.pro-preview-html th {
866
+ width: 50%;
867
+ }
868
+ .pro-preview-html:hover ~ .pro-field-overlay {
869
+ display: block;
870
+ }
871
+ .pro-field-overlay:hover {
872
+ display: block;
873
+ }
874
+ a.wpuf-button.button-upgrade-to-pro {
875
+ padding: 10px 15px;
876
+ background: #ff9000;
877
+ color: #fff;
878
+ min-height: auto;
879
+ border-radius: 5px;
880
+ text-decoration: none;
881
+ }
882
+ .pro-field-overlay a.wpuf-button.button-upgrade-to-pro {
883
+ position: absolute;
884
+ top: 50%;
885
+ left: 50%;
886
+ -webkit-transform: translate(-50%, -50%);
887
+ transform: translate(-50%, -50%);
888
+ }
889
+ a.wpuf-button.button-upgrade-to-pro:hover {
890
+ background: #d07805;
891
+ }
892
+ span.pro-icon svg {
893
+ height: 1em;
894
+ }
895
+ span.pro-icon.icon-white svg path {
896
+ fill: #fff;
897
+ }
898
+ label span.pro-icon svg path {
899
+ fill: #fB9a28;
900
+ }
901
+ img.profile-header, img.user-listing {
902
+ display: block;
903
+ width: 50%;
904
+ background: #fff;
905
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
906
+ box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
907
+ margin: -25px 0 15px 30px;
908
+ position: relative;
909
+ line-height: 0;
910
+ border: 1px solid #ededed;
911
+ padding: 4px;
912
+ -webkit-filter: grayscale(100%) opacity(.3); /* Safari 6.0 - 9.0 */
913
+ filter: grayscale(100%) opacity(.3);
914
+ }
915
+ img.profile-header:hover, input[type=radio]:checked + img.profile-header, img.profile-header.active,
916
+ img.user-listing:hover, input[type=radio]:checked + img.user-listing, img.user-listing.active {
917
+ -webkit-filter: grayscale(0%) opacity(1) drop-shadow(8px 8px 5px #ccc); /* Safari 6.0 - 9.0 */
918
+ filter: grayscale(0%) opacity(1) drop-shadow(8px 8px 5px #ccc);
919
+ }
920
+ .wpuf-pro-field-tooltip {
921
+ background: #000;
922
+ width: max-content;
923
+ padding: 25px 50px 20px 20px;
924
+ border-radius: 5px;
925
+ color: #fff;
926
+ position: absolute;
927
+ top: 0;
928
+ left: 50%;
929
+ -webkit-transform: translate(-50%, -100%);
930
+ transform: translate(-50%, -100%);
931
+ -webkit-box-sizing: border-box;
932
+ box-sizing: border-box;
933
+ z-index: 99999;
934
+ display: none;
935
+ -webkit-opacity: 0;
936
+ opacity: 0;
937
+ -webkit-transition: opacity 0.8s;
938
+ transition: opacity 0.8s;
939
+ }
940
+ h3.tooltip-header {
941
+ color: #fff;
942
+ }
943
+ .wpuf-pro-field-tooltip ul li span.tooltip-check svg path {
944
+ fill: #139F84;
945
+ }
946
+ .wpuf-pro-field-tooltip ul {
947
+ margin-bottom: 30px;
948
+ }
949
+ .wpuf-pro-field-tooltip ul li {
950
+ font-size: 1.2em;
951
+ line-height: 1.5em;
952
+ font-weight: 400;
953
+ }
954
+ span.tooltip-check {
955
+ margin-right: 10px;
956
+ }
957
+ .wpuf-pro-field-tooltip .pro-link {
958
+ display: flex;
959
+ -webkit-justify-content: center;
960
+ justify-content: center;
961
+ margin-left: 25px;
962
+ }
963
+ .wpuf-pro-field-tooltip i {
964
+ position: absolute;
965
+ top: 100%;
966
+ left: 50%;
967
+ margin-left: -12px;
968
+ width: 24px;
969
+ height: 12px;
970
+ overflow: hidden;
971
+ }
972
+ .wpuf-pro-field-tooltip i::after {
973
+ content: '';
974
+ position: absolute;
975
+ width: 12px;
976
+ height: 12px;
977
+ left: 50%;
978
+ -webkit-transform: translate(-50%, -50%) rotate(45deg);
979
+ transform: translate(-50%, -50%) rotate(45deg);
980
+ background-color: #000;
981
+ }
982
+ tr.pro-preview span.pro-icon,
983
+ tr span.pro-icon-title {
984
+ position: relative;
985
+ padding-top: 10px;
986
+ }
987
+
988
+ a span.pro-icon-title {
989
+ position: relative;
990
+ }
991
+
992
+ a span.pro-icon-title wpuf-pro-field-tooltip {
993
+ left: 185px;
994
+ }
995
+
996
+ span.pro-icon-title:hover .wpuf-pro-field-tooltip {
997
+ display: block;
998
+ -webkit-opacity: 1;
999
+ opacity: 1;
1000
+ }
1001
+
1002
+ span.pro-icon:hover .wpuf-pro-field-tooltip {
1003
+ display: block;
1004
+ -webkit-opacity: 1;
1005
+ opacity: 1;
1006
+ }
1007
+
1008
  .wpuf-xmp-tag{
1009
  display: inline;
1010
  }
assets/less/frontend-forms.less CHANGED
@@ -212,6 +212,11 @@ body {
212
  }
213
  }
214
 
 
 
 
 
 
215
  .wpuf-submit{
216
 
217
  input[type=submit] {
@@ -1041,10 +1046,6 @@ ul.wpuf_packs {
1041
  }
1042
  }
1043
 
1044
- .password[type="text"]{
1045
- display: none;
1046
- }
1047
-
1048
  table.wpuf-table {
1049
  border: 1px solid #E7E7E7;
1050
  margin: 0 0px 10px 0;
@@ -1213,16 +1214,33 @@ table.wpuf-table {
1213
  display: block;
1214
  }
1215
 
1216
- .wpuf-multistep-prev-btn,
1217
- .wpuf-multistep-next-btn {
 
 
 
 
 
 
 
 
 
 
 
1218
  position: absolute;
1219
- bottom: 5px;
 
1220
  }
1221
- .wpuf-multistep-prev-btn {
1222
- left: 10px;
 
 
 
1223
  }
1224
- .wpuf-multistep-next-btn {
1225
- right: 10px;
 
 
1226
  }
1227
  }
1228
 
212
  }
213
  }
214
 
215
+ .wpuf-fields-inline {
216
+ display: flex;
217
+ justify-content: space-between;
218
+ }
219
+
220
  .wpuf-submit{
221
 
222
  input[type=submit] {
1046
  }
1047
  }
1048
 
 
 
 
 
1049
  table.wpuf-table {
1050
  border: 1px solid #E7E7E7;
1051
  margin: 0 0px 10px 0;
1214
  display: block;
1215
  }
1216
 
1217
+ button.wpuf-multistep-next-btn.btn.btn-primary {
1218
+ position: absolute;
1219
+ bottom: 0;
1220
+ right: 0;
1221
+ }
1222
+
1223
+ button.wpuf-multistep-prev-btn.btn.btn-primary {
1224
+ position: absolute;
1225
+ bottom: 0;
1226
+ left: 0;
1227
+ }
1228
+
1229
+ a#wpuf-post-draft {
1230
  position: absolute;
1231
+ bottom: 0;
1232
+ right: ~"calc(50% - 35px)";
1233
  }
1234
+
1235
+ span.wpuf-draft-saved {
1236
+ position: absolute;
1237
+ bottom: 0;
1238
+ right: ~"calc(50% - 150px)";
1239
  }
1240
+ span.wpuf-loading {
1241
+ position: absolute;
1242
+ bottom: 8px;
1243
+ right: ~"calc(50% - 60px)";
1244
  }
1245
  }
1246
 
assets/less/metabox-tabs.less CHANGED
@@ -8,7 +8,7 @@
8
 
9
  nav {
10
  background-color: #f1f1f1;
11
- min-width: 200px;
12
  border-right: 1px solid #e5e5e5;
13
 
14
  ul,
8
 
9
  nav {
10
  background-color: #f1f1f1;
11
+ min-width: max-content;
12
  border-right: 1px solid #e5e5e5;
13
 
14
  ul,
assets/vendor/sweetalert2/dist/sweetalert2.common.js DELETED
@@ -1,1635 +0,0 @@
1
- /*!
2
- * sweetalert2 v6.6.4
3
- * Released under the MIT License.
4
- */
5
- 'use strict';
6
-
7
- var defaultParams = {
8
- title: '',
9
- titleText: '',
10
- text: '',
11
- html: '',
12
- type: null,
13
- customClass: '',
14
- target: 'body',
15
- animation: true,
16
- allowOutsideClick: true,
17
- allowEscapeKey: true,
18
- allowEnterKey: true,
19
- showConfirmButton: true,
20
- showCancelButton: false,
21
- preConfirm: null,
22
- confirmButtonText: 'OK',
23
- confirmButtonColor: '#3085d6',
24
- confirmButtonClass: null,
25
- cancelButtonText: 'Cancel',
26
- cancelButtonColor: '#aaa',
27
- cancelButtonClass: null,
28
- buttonsStyling: true,
29
- reverseButtons: false,
30
- focusCancel: false,
31
- showCloseButton: false,
32
- showLoaderOnConfirm: false,
33
- imageUrl: null,
34
- imageWidth: null,
35
- imageHeight: null,
36
- imageClass: null,
37
- timer: null,
38
- width: 500,
39
- padding: 20,
40
- background: '#fff',
41
- input: null,
42
- inputPlaceholder: '',
43
- inputValue: '',
44
- inputOptions: {},
45
- inputAutoTrim: true,
46
- inputClass: null,
47
- inputAttributes: {},
48
- inputValidator: null,
49
- progressSteps: [],
50
- currentProgressStep: null,
51
- progressStepsDistance: '40px',
52
- onOpen: null,
53
- onClose: null,
54
- useRejections: true
55
- };
56
-
57
- var swalPrefix = 'swal2-';
58
-
59
- var prefix = function prefix(items) {
60
- var result = {};
61
- for (var i in items) {
62
- result[items[i]] = swalPrefix + items[i];
63
- }
64
- return result;
65
- };
66
-
67
- var swalClasses = prefix(['container', 'shown', 'iosfix', 'modal', 'overlay', 'fade', 'show', 'hide', 'noanimation', 'close', 'title', 'content', 'buttonswrapper', 'confirm', 'cancel', 'icon', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea', 'inputerror', 'validationerror', 'progresssteps', 'activeprogressstep', 'progresscircle', 'progressline', 'loading', 'styled']);
68
-
69
- var iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']);
70
-
71
- /*
72
- * Set hover, active and focus-states for buttons (source: http://www.sitepoint.com/javascript-generate-lighter-darker-color)
73
- */
74
- var colorLuminance = function colorLuminance(hex, lum) {
75
- // Validate hex string
76
- hex = String(hex).replace(/[^0-9a-f]/gi, '');
77
- if (hex.length < 6) {
78
- hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
79
- }
80
- lum = lum || 0;
81
-
82
- // Convert to decimal and change luminosity
83
- var rgb = '#';
84
- for (var i = 0; i < 3; i++) {
85
- var c = parseInt(hex.substr(i * 2, 2), 16);
86
- c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);
87
- rgb += ('00' + c).substr(c.length);
88
- }
89
-
90
- return rgb;
91
- };
92
-
93
- var uniqueArray = function uniqueArray(arr) {
94
- var result = [];
95
- for (var i in arr) {
96
- if (result.indexOf(arr[i]) === -1) {
97
- result.push(arr[i]);
98
- }
99
- }
100
- return result;
101
- };
102
-
103
- /* global MouseEvent */
104
-
105
- // Remember state in cases where opening and handling a modal will fiddle with it.
106
- var states = {
107
- previousWindowKeyDown: null,
108
- previousActiveElement: null,
109
- previousBodyPadding: null
110
- };
111
-
112
- /*
113
- * Add modal + overlay to DOM
114
- */
115
- var init = function init(params) {
116
- if (typeof document === 'undefined') {
117
- console.error('SweetAlert2 requires document to initialize');
118
- return;
119
- }
120
-
121
- var container = document.createElement('div');
122
- container.className = swalClasses.container;
123
- container.innerHTML = sweetHTML;
124
-
125
- var targetElement = document.querySelector(params.target);
126
- if (!targetElement) {
127
- console.warn('SweetAlert2: Can\'t find the target "' + params.target + '"');
128
- targetElement = document.body;
129
- }
130
- targetElement.appendChild(container);
131
-
132
- var modal = getModal();
133
- var input = getChildByClass(modal, swalClasses.input);
134
- var file = getChildByClass(modal, swalClasses.file);
135
- var range = modal.querySelector('.' + swalClasses.range + ' input');
136
- var rangeOutput = modal.querySelector('.' + swalClasses.range + ' output');
137
- var select = getChildByClass(modal, swalClasses.select);
138
- var checkbox = modal.querySelector('.' + swalClasses.checkbox + ' input');
139
- var textarea = getChildByClass(modal, swalClasses.textarea);
140
-
141
- input.oninput = function () {
142
- sweetAlert.resetValidationError();
143
- };
144
-
145
- input.onkeydown = function (event) {
146
- setTimeout(function () {
147
- if (event.keyCode === 13 && params.allowEnterKey) {
148
- event.stopPropagation();
149
- sweetAlert.clickConfirm();
150
- }
151
- }, 0);
152
- };
153
-
154
- file.onchange = function () {
155
- sweetAlert.resetValidationError();
156
- };
157
-
158
- range.oninput = function () {
159
- sweetAlert.resetValidationError();
160
- rangeOutput.value = range.value;
161
- };
162
-
163
- range.onchange = function () {
164
- sweetAlert.resetValidationError();
165
- range.previousSibling.value = range.value;
166
- };
167
-
168
- select.onchange = function () {
169
- sweetAlert.resetValidationError();
170
- };
171
-
172
- checkbox.onchange = function () {
173
- sweetAlert.resetValidationError();
174
- };
175
-
176
- textarea.oninput = function () {
177
- sweetAlert.resetValidationError();
178
- };
179
-
180
- return modal;
181
- };
182
-
183
- /*
184
- * Manipulate DOM
185
- */
186
-
187
- var sweetHTML = ('\n <div role="dialog" aria-labelledby="' + swalClasses.title + '" aria-describedby="' + swalClasses.content + '" class="' + swalClasses.modal + '" tabindex="-1">\n <ul class="' + swalClasses.progresssteps + '"></ul>\n <div class="' + swalClasses.icon + ' ' + iconTypes.error + '">\n <span class="swal2-x-mark"><span class="swal2-x-mark-line-left"></span><span class="swal2-x-mark-line-right"></span></span>\n </div>\n <div class="' + swalClasses.icon + ' ' + iconTypes.question + '">?</div>\n <div class="' + swalClasses.icon + ' ' + iconTypes.warning + '">!</div>\n <div class="' + swalClasses.icon + ' ' + iconTypes.info + '">i</div>\n <div class="' + swalClasses.icon + ' ' + iconTypes.success + '">\n <div class="swal2-success-circular-line-left"></div>\n <span class="swal2-success-line-tip"></span> <span class="swal2-success-line-long"></span>\n <div class="swal2-success-ring"></div> <div class="swal2-success-fix"></div>\n <div class="swal2-success-circular-line-right"></div>\n </div>\n <img class="' + swalClasses.image + '">\n <h2 class="' + swalClasses.title + '" id="' + swalClasses.title + '"></h2>\n <div id="' + swalClasses.content + '" class="' + swalClasses.content + '"></div>\n <input class="' + swalClasses.input + '">\n <input type="file" class="' + swalClasses.file + '">\n <div class="' + swalClasses.range + '">\n <output></output>\n <input type="range">\n </div>\n <select class="' + swalClasses.select + '"></select>\n <div class="' + swalClasses.radio + '"></div>\n <label for="' + swalClasses.checkbox + '" class="' + swalClasses.checkbox + '">\n <input type="checkbox">\n </label>\n <textarea class="' + swalClasses.textarea + '"></textarea>\n <div class="' + swalClasses.validationerror + '"></div>\n <div class="' + swalClasses.buttonswrapper + '">\n <button type="button" class="' + swalClasses.confirm + '">OK</button>\n <button type="button" class="' + swalClasses.cancel + '">Cancel</button>\n </div>\n <button type="button" class="' + swalClasses.close + '" aria-label="Close this dialog">&times;</button>\n </div>\n').replace(/(^|\n)\s*/g, '');
188
-
189
- var getContainer = function getContainer() {
190
- return document.body.querySelector('.' + swalClasses.container);
191
- };
192
-
193
- var getModal = function getModal() {
194
- return getContainer() ? getContainer().querySelector('.' + swalClasses.modal) : null;
195
- };
196
-
197
- var getIcons = function getIcons() {
198
- var modal = getModal();
199
- return modal.querySelectorAll('.' + swalClasses.icon);
200
- };
201
-
202
- var elementByClass = function elementByClass(className) {
203
- return getContainer() ? getContainer().querySelector('.' + className) : null;
204
- };
205
-
206
- var getTitle = function getTitle() {
207
- return elementByClass(swalClasses.title);
208
- };
209
-
210
- var getContent = function getContent() {
211
- return elementByClass(swalClasses.content);
212
- };
213
-
214
- var getImage = function getImage() {
215
- return elementByClass(swalClasses.image);
216
- };
217
-
218
- var getButtonsWrapper = function getButtonsWrapper() {
219
- return elementByClass(swalClasses.buttonswrapper);
220
- };
221
-
222
- var getProgressSteps = function getProgressSteps() {
223
- return elementByClass(swalClasses.progresssteps);
224
- };
225
-
226
- var getValidationError = function getValidationError() {
227
- return elementByClass(swalClasses.validationerror);
228
- };
229
-
230
- var getConfirmButton = function getConfirmButton() {
231
- return elementByClass(swalClasses.confirm);
232
- };
233
-
234
- var getCancelButton = function getCancelButton() {
235
- return elementByClass(swalClasses.cancel);
236
- };
237
-
238
- var getCloseButton = function getCloseButton() {
239
- return elementByClass(swalClasses.close);
240
- };
241
-
242
- var getFocusableElements = function getFocusableElements(focusCancel) {
243
- var buttons = [getConfirmButton(), getCancelButton()];
244
- if (focusCancel) {
245
- buttons.reverse();
246
- }
247
- var focusableElements = buttons.concat(Array.prototype.slice.call(getModal().querySelectorAll('button, input:not([type=hidden]), textarea, select, a, *[tabindex]:not([tabindex="-1"])')));
248
- return uniqueArray(focusableElements);
249
- };
250
-
251
- var hasClass = function hasClass(elem, className) {
252
- if (elem.classList) {
253
- return elem.classList.contains(className);
254
- }
255
- return false;
256
- };
257
-
258
- var focusInput = function focusInput(input) {
259
- input.focus();
260
-
261
- // place cursor at end of text in text input
262
- if (input.type !== 'file') {
263
- // http://stackoverflow.com/a/2345915/1331425
264
- var val = input.value;
265
- input.value = '';
266
- input.value = val;
267
- }
268
- };
269
-
270
- var addClass = function addClass(elem, className) {
271
- if (!elem || !className) {
272
- return;
273
- }
274
- var classes = className.split(/\s+/).filter(Boolean);
275
- classes.forEach(function (className) {
276
- elem.classList.add(className);
277
- });
278
- };
279
-
280
- var removeClass = function removeClass(elem, className) {
281
- if (!elem || !className) {
282
- return;
283
- }
284
- var classes = className.split(/\s+/).filter(Boolean);
285
- classes.forEach(function (className) {
286
- elem.classList.remove(className);
287
- });
288
- };
289
-
290
- var getChildByClass = function getChildByClass(elem, className) {
291
- for (var i = 0; i < elem.childNodes.length; i++) {
292
- if (hasClass(elem.childNodes[i], className)) {
293
- return elem.childNodes[i];
294
- }
295
- }
296
- };
297
-
298
- var show = function show(elem, display) {
299
- if (!display) {
300
- display = 'block';
301
- }
302
- elem.style.opacity = '';
303
- elem.style.display = display;
304
- };
305
-
306
- var hide = function hide(elem) {
307
- elem.style.opacity = '';
308
- elem.style.display = 'none';
309
- };
310
-
311
- var empty = function empty(elem) {
312
- while (elem.firstChild) {
313
- elem.removeChild(elem.firstChild);
314
- }
315
- };
316
-
317
- // borrowed from jqeury $(elem).is(':visible') implementation
318
- var isVisible = function isVisible(elem) {
319
- return elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length;
320
- };
321
-
322
- var removeStyleProperty = function removeStyleProperty(elem, property) {
323
- if (elem.style.removeProperty) {
324
- elem.style.removeProperty(property);
325
- } else {
326
- elem.style.removeAttribute(property);
327
- }
328
- };
329
-
330
- var fireClick = function fireClick(node) {
331
- if (!isVisible(node)) {
332
- return false;
333
- }
334
-
335
- // Taken from http://www.nonobtrusive.com/2011/11/29/programatically-fire-crossbrowser-click-event-with-javascript/
336
- // Then fixed for today's Chrome browser.
337
- if (typeof MouseEvent === 'function') {
338
- // Up-to-date approach
339
- var mevt = new MouseEvent('click', {
340
- view: window,
341
- bubbles: false,
342
- cancelable: true
343
- });
344
- node.dispatchEvent(mevt);
345
- } else if (document.createEvent) {
346
- // Fallback
347
- var evt = document.createEvent('MouseEvents');
348
- evt.initEvent('click', false, false);
349
- node.dispatchEvent(evt);
350
- } else if (document.createEventObject) {
351
- node.fireEvent('onclick');
352
- } else if (typeof node.onclick === 'function') {
353
- node.onclick();
354
- }
355
- };
356
-
357
- var animationEndEvent = function () {
358
- var testEl = document.createElement('div');
359
- var transEndEventNames = {
360
- 'WebkitAnimation': 'webkitAnimationEnd',
361
- 'OAnimation': 'oAnimationEnd oanimationend',
362
- 'msAnimation': 'MSAnimationEnd',
363
- 'animation': 'animationend'
364
- };
365
- for (var i in transEndEventNames) {
366
- if (transEndEventNames.hasOwnProperty(i) && testEl.style[i] !== undefined) {
367
- return transEndEventNames[i];
368
- }
369
- }
370
-
371
- return false;
372
- }();
373
-
374
- // Reset previous window keydown handler and focued element
375
- var resetPrevState = function resetPrevState() {
376
- window.onkeydown = states.previousWindowKeyDown;
377
- if (states.previousActiveElement && states.previousActiveElement.focus) {
378
- var x = window.scrollX;
379
- var y = window.scrollY;
380
- states.previousActiveElement.focus();
381
- if (x && y) {
382
- // IE has no scrollX/scrollY support
383
- window.scrollTo(x, y);
384
- }
385
- }
386
- };
387
-
388
- // Measure width of scrollbar
389
- // https://github.com/twbs/bootstrap/blob/master/js/modal.js#L279-L286
390
- var measureScrollbar = function measureScrollbar() {
391
- var supportsTouch = 'ontouchstart' in window || navigator.msMaxTouchPoints;
392
- if (supportsTouch) {
393
- return 0;
394
- }
395
- var scrollDiv = document.createElement('div');
396
- scrollDiv.style.width = '50px';
397
- scrollDiv.style.height = '50px';
398
- scrollDiv.style.overflow = 'scroll';
399
- document.body.appendChild(scrollDiv);
400
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
401
- document.body.removeChild(scrollDiv);
402
- return scrollbarWidth;
403
- };
404
-
405
- // JavaScript Debounce Function
406
- // Simplivied version of https://davidwalsh.name/javascript-debounce-function
407
- var debounce = function debounce(func, wait) {
408
- var timeout = void 0;
409
- return function () {
410
- var later = function later() {
411
- timeout = null;
412
- func();
413
- };
414
- clearTimeout(timeout);
415
- timeout = setTimeout(later, wait);
416
- };
417
- };
418
-
419
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
420
- return typeof obj;
421
- } : function (obj) {
422
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
423
- };
424
-
425
-
426
-
427
-
428
-
429
-
430
-
431
-
432
-
433
-
434
-
435
-
436
-
437
-
438
-
439
-
440
-
441
-
442
-
443
-
444
-
445
- var _extends = Object.assign || function (target) {
446
- for (var i = 1; i < arguments.length; i++) {
447
- var source = arguments[i];
448
-
449
- for (var key in source) {
450
- if (Object.prototype.hasOwnProperty.call(source, key)) {
451
- target[key] = source[key];
452
- }
453
- }
454
- }
455
-
456
- return target;
457
- };
458
-
459
- var modalParams = _extends({}, defaultParams);
460
- var queue = [];
461
- var swal2Observer = void 0;
462
-
463
- /*
464
- * Set type, text and actions on modal
465
- */
466
- var setParameters = function setParameters(params) {
467
- var modal = getModal() || init(params);
468
-
469
- for (var param in params) {
470
- if (!defaultParams.hasOwnProperty(param) && param !== 'extraParams') {
471
- console.warn('SweetAlert2: Unknown parameter "' + param + '"');
472
- }
473
- }
474
-
475
- // Set modal width
476
- modal.style.width = typeof params.width === 'number' ? params.width + 'px' : params.width;
477
-
478
- modal.style.padding = params.padding + 'px';
479
- modal.style.background = params.background;
480
- var successIconParts = modal.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');
481
- for (var i = 0; i < successIconParts.length; i++) {
482
- successIconParts[i].style.background = params.background;
483
- }
484
-
485
- var title = getTitle();
486
- var content = getContent();
487
- var buttonsWrapper = getButtonsWrapper();
488
- var confirmButton = getConfirmButton();
489
- var cancelButton = getCancelButton();
490
- var closeButton = getCloseButton();
491
-
492
- // Title
493
- if (params.titleText) {
494
- title.innerText = params.titleText;
495
- } else {
496
- title.innerHTML = params.title.split('\n').join('<br>');
497
- }
498
-
499
- // Content
500
- if (params.text || params.html) {
501
- if (_typeof(params.html) === 'object') {
502
- content.innerHTML = '';
503
- if (0 in params.html) {
504
- for (var _i = 0; _i in params.html; _i++) {
505
- content.appendChild(params.html[_i].cloneNode(true));
506
- }
507
- } else {
508
- content.appendChild(params.html.cloneNode(true));
509
- }
510
- } else if (params.html) {
511
- content.innerHTML = params.html;
512
- } else if (params.text) {
513
- content.textContent = params.text;
514
- }
515
- show(content);
516
- } else {
517
- hide(content);
518
- }
519
-
520
- // Close button
521
- if (params.showCloseButton) {
522
- show(closeButton);
523
- } else {
524
- hide(closeButton);
525
- }
526
-
527
- // Custom Class
528
- modal.className = swalClasses.modal;
529
- if (params.customClass) {
530
- addClass(modal, params.customClass);
531
- }
532
-
533
- // Progress steps
534
- var progressStepsContainer = getProgressSteps();
535
- var currentProgressStep = parseInt(params.currentProgressStep === null ? sweetAlert.getQueueStep() : params.currentProgressStep, 10);
536
- if (params.progressSteps.length) {
537
- show(progressStepsContainer);
538
- empty(progressStepsContainer);
539
- if (currentProgressStep >= params.progressSteps.length) {
540
- console.warn('SweetAlert2: Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');
541
- }
542
- params.progressSteps.forEach(function (step, index) {
543
- var circle = document.createElement('li');
544
- addClass(circle, swalClasses.progresscircle);
545
- circle.innerHTML = step;
546
- if (index === currentProgressStep) {
547
- addClass(circle, swalClasses.activeprogressstep);
548
- }
549
- progressStepsContainer.appendChild(circle);
550
- if (index !== params.progressSteps.length - 1) {
551
- var line = document.createElement('li');
552
- addClass(line, swalClasses.progressline);
553
- line.style.width = params.progressStepsDistance;
554
- progressStepsContainer.appendChild(line);
555
- }
556
- });
557
- } else {
558
- hide(progressStepsContainer);
559
- }
560
-
561
- // Icon
562
- var icons = getIcons();
563
- for (var _i2 = 0; _i2 < icons.length; _i2++) {
564
- hide(icons[_i2]);
565
- }
566
- if (params.type) {
567
- var validType = false;
568
- for (var iconType in iconTypes) {
569
- if (params.type === iconType) {
570
- validType = true;
571
- break;
572
- }
573
- }
574
- if (!validType) {
575
- console.error('SweetAlert2: Unknown alert type: ' + params.type);
576
- return false;
577
- }
578
- var icon = modal.querySelector('.' + swalClasses.icon + '.' + iconTypes[params.type]);
579
- show(icon);
580
-
581
- // Animate icon
582
- if (params.animation) {
583
- switch (params.type) {
584
- case 'success':
585
- addClass(icon, 'swal2-animate-success-icon');
586
- addClass(icon.querySelector('.swal2-success-line-tip'), 'swal2-animate-success-line-tip');
587
- addClass(icon.querySelector('.swal2-success-line-long'), 'swal2-animate-success-line-long');
588
- break;
589
- case 'error':
590
- addClass(icon, 'swal2-animate-error-icon');
591
- addClass(icon.querySelector('.swal2-x-mark'), 'swal2-animate-x-mark');
592
- break;
593
- default:
594
- break;
595
- }
596
- }
597
- }
598
-
599
- // Custom image
600
- var image = getImage();
601
- if (params.imageUrl) {
602
- image.setAttribute('src', params.imageUrl);
603
- show(image);
604
-
605
- if (params.imageWidth) {
606
- image.setAttribute('width', params.imageWidth);
607
- } else {
608
- image.removeAttribute('width');
609
- }
610
-
611
- if (params.imageHeight) {
612
- image.setAttribute('height', params.imageHeight);
613
- } else {
614
- image.removeAttribute('height');
615
- }
616
-
617
- image.className = swalClasses.image;
618
- if (params.imageClass) {
619
- addClass(image, params.imageClass);
620
- }
621
- } else {
622
- hide(image);
623
- }
624
-
625
- // Cancel button
626
- if (params.showCancelButton) {
627
- cancelButton.style.display = 'inline-block';
628
- } else {
629
- hide(cancelButton);
630
- }
631
-
632
- // Confirm button
633
- if (params.showConfirmButton) {
634
- removeStyleProperty(confirmButton, 'display');
635
- } else {
636
- hide(confirmButton);
637
- }
638
-
639
- // Buttons wrapper
640
- if (!params.showConfirmButton && !params.showCancelButton) {
641
- hide(buttonsWrapper);
642
- } else {
643
- show(buttonsWrapper);
644
- }
645
-
646
- // Edit text on cancel and confirm buttons
647
- confirmButton.innerHTML = params.confirmButtonText;
648
- cancelButton.innerHTML = params.cancelButtonText;
649
-
650
- // Set buttons to selected background colors
651
- if (params.buttonsStyling) {
652
- confirmButton.style.backgroundColor = params.confirmButtonColor;
653
- cancelButton.style.backgroundColor = params.cancelButtonColor;
654
- }
655
-
656
- // Add buttons custom classes
657
- confirmButton.className = swalClasses.confirm;
658
- addClass(confirmButton, params.confirmButtonClass);
659
- cancelButton.className = swalClasses.cancel;
660
- addClass(cancelButton, params.cancelButtonClass);
661
-
662
- // Buttons styling
663
- if (params.buttonsStyling) {
664
- addClass(confirmButton, swalClasses.styled);
665
- addClass(cancelButton, swalClasses.styled);
666
- } else {
667
- removeClass(confirmButton, swalClasses.styled);
668
- removeClass(cancelButton, swalClasses.styled);
669
-
670
- confirmButton.style.backgroundColor = confirmButton.style.borderLeftColor = confirmButton.style.borderRightColor = '';
671
- cancelButton.style.backgroundColor = cancelButton.style.borderLeftColor = cancelButton.style.borderRightColor = '';
672
- }
673
-
674
- // CSS animation
675
- if (params.animation === true) {
676
- removeClass(modal, swalClasses.noanimation);
677
- } else {
678
- addClass(modal, swalClasses.noanimation);
679
- }
680
- };
681
-
682
- /*
683
- * Animations
684
- */
685
- var openModal = function openModal(animation, onComplete) {
686
- var container = getContainer();
687
- var modal = getModal();
688
-
689
- if (animation) {
690
- addClass(modal, swalClasses.show);
691
- addClass(container, swalClasses.fade);
692
- removeClass(modal, swalClasses.hide);
693
- } else {
694
- removeClass(modal, swalClasses.fade);
695
- }
696
- show(modal);
697
-
698
- // scrolling is 'hidden' until animation is done, after that 'auto'
699
- container.style.overflowY = 'hidden';
700
- if (animationEndEvent && !hasClass(modal, swalClasses.noanimation)) {
701
- modal.addEventListener(animationEndEvent, function swalCloseEventFinished() {
702
- modal.removeEventListener(animationEndEvent, swalCloseEventFinished);
703
- container.style.overflowY = 'auto';
704
- });
705
- } else {
706
- container.style.overflowY = 'auto';
707
- }
708
-
709
- addClass(document.documentElement, swalClasses.shown);
710
- addClass(document.body, swalClasses.shown);
711
- addClass(container, swalClasses.shown);
712
- fixScrollbar();
713
- iOSfix();
714
- states.previousActiveElement = document.activeElement;
715
- if (onComplete !== null && typeof onComplete === 'function') {
716
- setTimeout(function () {
717
- onComplete(modal);
718
- });
719
- }
720
- };
721
-
722
- var fixScrollbar = function fixScrollbar() {
723
- // for queues, do not do this more than once
724
- if (states.previousBodyPadding !== null) {
725
- return;
726
- }
727
- // if the body has overflow
728
- if (document.body.scrollHeight > window.innerHeight) {
729
- // add padding so the content doesn't shift after removal of scrollbar
730
- states.previousBodyPadding = document.body.style.paddingRight;
731
- document.body.style.paddingRight = measureScrollbar() + 'px';
732
- }
733
- };
734
-
735
- var undoScrollbar = function undoScrollbar() {
736
- if (states.previousBodyPadding !== null) {
737
- document.body.style.paddingRight = states.previousBodyPadding;
738
- states.previousBodyPadding = null;
739
- }
740
- };
741
-
742
- // Fix iOS scrolling http://stackoverflow.com/q/39626302/1331425
743
- var iOSfix = function iOSfix() {
744
- var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
745
- if (iOS && !hasClass(document.body, swalClasses.iosfix)) {
746
- var offset = document.body.scrollTop;
747
- document.body.style.top = offset * -1 + 'px';
748
- addClass(document.body, swalClasses.iosfix);
749
- }
750
- };
751
-
752
- var undoIOSfix = function undoIOSfix() {
753
- if (hasClass(document.body, swalClasses.iosfix)) {
754
- var offset = parseInt(document.body.style.top, 10);
755
- removeClass(document.body, swalClasses.iosfix);
756
- document.body.style.top = '';
757
- document.body.scrollTop = offset * -1;
758
- }
759
- };
760
-
761
- // SweetAlert entry point
762
- var sweetAlert = function sweetAlert() {
763
- for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
764
- args[_key] = arguments[_key];
765
- }
766
-
767
- if (args[0] === undefined) {
768
- console.error('SweetAlert2 expects at least 1 attribute!');
769
- return false;
770
- }
771
-
772
- var params = _extends({}, modalParams);
773
-
774
- switch (_typeof(args[0])) {
775
- case 'string':
776
- params.title = args[0];
777
- params.html = args[1];
778
- params.type = args[2];
779
-
780
- break;
781
-
782
- case 'object':
783
- _extends(params, args[0]);
784
- params.extraParams = args[0].extraParams;
785
-
786
- if (params.input === 'email' && params.inputValidator === null) {
787
- params.inputValidator = function (email) {
788
- return new Promise(function (resolve, reject) {
789
- var emailRegex = /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;
790
- if (emailRegex.test(email)) {
791
- resolve();
792
- } else {
793
- reject('Invalid email address');
794
- }
795
- });
796
- };
797
- }
798
-
799
- if (params.input === 'url' && params.inputValidator === null) {
800
- params.inputValidator = function (url) {
801
- return new Promise(function (resolve, reject) {
802
- var urlRegex = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/;
803
- if (urlRegex.test(url)) {
804
- resolve();
805
- } else {
806
- reject('Invalid URL');
807
- }
808
- });
809
- };
810
- }
811
- break;
812
-
813
- default:
814
- console.error('SweetAlert2: Unexpected type of argument! Expected "string" or "object", got ' + _typeof(args[0]));
815
- return false;
816
- }
817
-
818
- setParameters(params);
819
-
820
- var container = getContainer();
821
- var modal = getModal();
822
-
823
- return new Promise(function (resolve, reject) {
824
- // Close on timer
825
- if (params.timer) {
826
- modal.timeout = setTimeout(function () {
827
- sweetAlert.closeModal(params.onClose);
828
- if (params.useRejections) {
829
- reject('timer');
830
- } else {
831
- resolve({ dismiss: 'timer' });
832
- }
833
- }, params.timer);
834
- }
835
-
836
- // Get input element by specified type or, if type isn't specified, by params.input
837
- var getInput = function getInput(inputType) {
838
- inputType = inputType || params.input;
839
- if (!inputType) {
840
- return null;
841
- }
842
- switch (inputType) {
843
- case 'select':
844
- case 'textarea':
845
- case 'file':
846
- return getChildByClass(modal, swalClasses[inputType]);
847
- case 'checkbox':
848
- return modal.querySelector('.' + swalClasses.checkbox + ' input');
849
- case 'radio':
850
- return modal.querySelector('.' + swalClasses.radio + ' input:checked') || modal.querySelector('.' + swalClasses.radio + ' input:first-child');
851
- case 'range':
852
- return modal.querySelector('.' + swalClasses.range + ' input');
853
- default:
854
- return getChildByClass(modal, swalClasses.input);
855
- }
856
- };
857
-
858
- // Get the value of the modal input
859
- var getInputValue = function getInputValue() {
860
- var input = getInput();
861
- if (!input) {
862
- return null;
863
- }
864
- switch (params.input) {
865
- case 'checkbox':
866
- return input.checked ? 1 : 0;
867
- case 'radio':
868
- return input.checked ? input.value : null;
869
- case 'file':
870
- return input.files.length ? input.files[0] : null;
871
- default:
872
- return params.inputAutoTrim ? input.value.trim() : input.value;
873
- }
874
- };
875
-
876
- // input autofocus
877
- if (params.input) {
878
- setTimeout(function () {
879
- var input = getInput();
880
- if (input) {
881
- focusInput(input);
882
- }
883
- }, 0);
884
- }
885
-
886
- var confirm = function confirm(value) {
887
- if (params.showLoaderOnConfirm) {
888
- sweetAlert.showLoading();
889
- }
890
-
891
- if (params.preConfirm) {
892
- params.preConfirm(value, params.extraParams).then(function (preConfirmValue) {
893
- sweetAlert.closeModal(params.onClose);
894
- resolve(preConfirmValue || value);
895
- }, function (error) {
896
- sweetAlert.hideLoading();
897
- if (error) {
898
- sweetAlert.showValidationError(error);
899
- }
900
- });
901
- } else {
902
- sweetAlert.closeModal(params.onClose);
903
- if (params.useRejections) {
904
- resolve(value);
905
- } else {
906
- resolve({ value: value });
907
- }
908
- }
909
- };
910
-
911
- // Mouse interactions
912
- var onButtonEvent = function onButtonEvent(event) {
913
- var e = event || window.event;
914
- var target = e.target || e.srcElement;
915
- var confirmButton = getConfirmButton();
916
- var cancelButton = getCancelButton();
917
- var targetedConfirm = confirmButton && (confirmButton === target || confirmButton.contains(target));
918
- var targetedCancel = cancelButton && (cancelButton === target || cancelButton.contains(target));
919
-
920
- switch (e.type) {
921
- case 'mouseover':
922
- case 'mouseup':
923
- if (params.buttonsStyling) {
924
- if (targetedConfirm) {
925
- confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.1);
926
- } else if (targetedCancel) {
927
- cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.1);
928
- }
929
- }
930
- break;
931
- case 'mouseout':
932
- if (params.buttonsStyling) {
933
- if (targetedConfirm) {
934
- confirmButton.style.backgroundColor = params.confirmButtonColor;
935
- } else if (targetedCancel) {
936
- cancelButton.style.backgroundColor = params.cancelButtonColor;
937
- }
938
- }
939
- break;
940
- case 'mousedown':
941
- if (params.buttonsStyling) {
942
- if (targetedConfirm) {
943
- confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.2);
944
- } else if (targetedCancel) {
945
- cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.2);
946
- }
947
- }
948
- break;
949
- case 'click':
950
- // Clicked 'confirm'
951
- if (targetedConfirm && sweetAlert.isVisible()) {
952
- sweetAlert.disableButtons();
953
- if (params.input) {
954
- var inputValue = getInputValue();
955
-
956
- if (params.inputValidator) {
957
- sweetAlert.disableInput();
958
- params.inputValidator(inputValue, params.extraParams).then(function () {
959
- sweetAlert.enableButtons();
960
- sweetAlert.enableInput();
961
- confirm(inputValue);
962
- }, function (error) {
963
- sweetAlert.enableButtons();
964
- sweetAlert.enableInput();
965
- if (error) {
966
- sweetAlert.showValidationError(error);
967
- }
968
- });
969
- } else {
970
- confirm(inputValue);
971
- }
972
- } else {
973
- confirm(true);
974
- }
975
-
976
- // Clicked 'cancel'
977
- } else if (targetedCancel && sweetAlert.isVisible()) {
978
- sweetAlert.disableButtons();
979
- sweetAlert.closeModal(params.onClose);
980
- if (params.useRejections) {
981
- reject('cancel');
982
- } else {
983
- resolve({ dismiss: 'cancel' });
984
- }
985
- }
986
- break;
987
- default:
988
- }
989
- };
990
-
991
- var buttons = modal.querySelectorAll('button');
992
- for (var i = 0; i < buttons.length; i++) {
993
- buttons[i].onclick = onButtonEvent;
994
- buttons[i].onmouseover = onButtonEvent;
995
- buttons[i].onmouseout = onButtonEvent;
996
- buttons[i].onmousedown = onButtonEvent;
997
- }
998
-
999
- // Closing modal by close button
1000
- getCloseButton().onclick = function () {
1001
- sweetAlert.closeModal(params.onClose);
1002
- if (params.useRejections) {
1003
- reject('close');
1004
- } else {
1005
- resolve({ dismiss: 'close' });
1006
- }
1007
- };
1008
-
1009
- // Closing modal by overlay click
1010
- container.onclick = function (e) {
1011
- if (e.target !== container) {
1012
- return;
1013
- }
1014
- if (params.allowOutsideClick) {
1015
- sweetAlert.closeModal(params.onClose);
1016
- if (params.useRejections) {
1017
- reject('overlay');
1018
- } else {
1019
- resolve({ dismiss: 'overlay' });
1020
- }
1021
- }
1022
- };
1023
-
1024
- var buttonsWrapper = getButtonsWrapper();
1025
- var confirmButton = getConfirmButton();
1026
- var cancelButton = getCancelButton();
1027
-
1028
- // Reverse buttons (Confirm on the right side)
1029
- if (params.reverseButtons) {
1030
- confirmButton.parentNode.insertBefore(cancelButton, confirmButton);
1031
- } else {
1032
- confirmButton.parentNode.insertBefore(confirmButton, cancelButton);
1033
- }
1034
-
1035
- // Focus handling
1036
- var setFocus = function setFocus(index, increment) {
1037
- var focusableElements = getFocusableElements(params.focusCancel);
1038
- // search for visible elements and select the next possible match
1039
- for (var _i3 = 0; _i3 < focusableElements.length; _i3++) {
1040
- index = index + increment;
1041
-
1042
- // rollover to first item
1043
- if (index === focusableElements.length) {
1044
- index = 0;
1045
-
1046
- // go to last item
1047
- } else if (index === -1) {
1048
- index = focusableElements.length - 1;
1049
- }
1050
-
1051
- // determine if element is visible
1052
- var el = focusableElements[index];
1053
- if (isVisible(el)) {
1054
- return el.focus();
1055
- }
1056
- }
1057
- };
1058
-
1059
- var handleKeyDown = function handleKeyDown(event) {
1060
- var e = event || window.event;
1061
- var keyCode = e.keyCode || e.which;
1062
-
1063
- if ([9, 13, 32, 27, 37, 38, 39, 40].indexOf(keyCode) === -1) {
1064
- // Don't do work on keys we don't care about.
1065
- return;
1066
- }
1067
-
1068
- var targetElement = e.target || e.srcElement;
1069
-
1070
- var focusableElements = getFocusableElements(params.focusCancel);
1071
- var btnIndex = -1; // Find the button - note, this is a nodelist, not an array.
1072
- for (var _i4 = 0; _i4 < focusableElements.length; _i4++) {
1073
- if (targetElement === focusableElements[_i4]) {
1074
- btnIndex = _i4;
1075
- break;
1076
- }
1077
- }
1078
-
1079
- // TAB
1080
- if (keyCode === 9) {
1081
- if (!e.shiftKey) {
1082
- // Cycle to the next button
1083
- setFocus(btnIndex, 1);
1084
- } else {
1085
- // Cycle to the prev button
1086
- setFocus(btnIndex, -1);
1087
- }
1088
- e.stopPropagation();
1089
- e.preventDefault();
1090
-
1091
- // ARROWS - switch focus between buttons
1092
- } else if (keyCode === 37 || keyCode === 38 || keyCode === 39 || keyCode === 40) {
1093
- // focus Cancel button if Confirm button is currently focused
1094
- if (document.activeElement === confirmButton && isVisible(cancelButton)) {
1095
- cancelButton.focus();
1096
- // and vice versa
1097
- } else if (document.activeElement === cancelButton && isVisible(confirmButton)) {
1098
- confirmButton.focus();
1099
- }
1100
-
1101
- // ENTER/SPACE
1102
- } else if (keyCode === 13 || keyCode === 32) {
1103
- if (btnIndex === -1 && params.allowEnterKey) {
1104
- // ENTER/SPACE clicked outside of a button.
1105
- if (params.focusCancel) {
1106
- fireClick(cancelButton, e);
1107
- } else {
1108
- fireClick(confirmButton, e);
1109
- }
1110
- e.stopPropagation();
1111
- e.preventDefault();
1112
- }
1113
-
1114
- // ESC
1115
- } else if (keyCode === 27 && params.allowEscapeKey === true) {
1116
- sweetAlert.closeModal(params.onClose);
1117
- if (params.useRejections) {
1118
- reject('esc');
1119
- } else {
1120
- resolve({ dismiss: 'esc' });
1121
- }
1122
- }
1123
- };
1124
-
1125
- if (!window.onkeydown || window.onkeydown.toString() !== handleKeyDown.toString()) {
1126
- states.previousWindowKeyDown = window.onkeydown;
1127
- window.onkeydown = handleKeyDown;
1128
- }
1129
-
1130
- // Loading state
1131
- if (params.buttonsStyling) {
1132
- confirmButton.style.borderLeftColor = params.confirmButtonColor;
1133
- confirmButton.style.borderRightColor = params.confirmButtonColor;
1134
- }
1135
-
1136
- /**
1137
- * Show spinner instead of Confirm button and disable Cancel button
1138
- */
1139
- sweetAlert.hideLoading = sweetAlert.disableLoading = function () {
1140
- if (!params.showConfirmButton) {
1141
- hide(confirmButton);
1142
- if (!params.showCancelButton) {
1143
- hide(getButtonsWrapper());
1144
- }
1145
- }
1146
- removeClass(buttonsWrapper, swalClasses.loading);
1147
- removeClass(modal, swalClasses.loading);
1148
- confirmButton.disabled = false;
1149
- cancelButton.disabled = false;
1150
- };
1151
-
1152
- sweetAlert.getTitle = function () {
1153
- return getTitle();
1154
- };
1155
- sweetAlert.getContent = function () {
1156
- return getContent();
1157
- };
1158
- sweetAlert.getInput = function () {
1159
- return getInput();
1160
- };
1161
- sweetAlert.getImage = function () {
1162
- return getImage();
1163
- };
1164
- sweetAlert.getButtonsWrapper = function () {
1165
- return getButtonsWrapper();
1166
- };
1167
- sweetAlert.getConfirmButton = function () {
1168
- return getConfirmButton();
1169
- };
1170
- sweetAlert.getCancelButton = function () {
1171
- return getCancelButton();
1172
- };
1173
-
1174
- sweetAlert.enableButtons = function () {
1175
- confirmButton.disabled = false;
1176
- cancelButton.disabled = false;
1177
- };
1178
-
1179
- sweetAlert.disableButtons = function () {
1180
- confirmButton.disabled = true;
1181
- cancelButton.disabled = true;
1182
- };
1183
-
1184
- sweetAlert.enableConfirmButton = function () {
1185
- confirmButton.disabled = false;
1186
- };
1187
-
1188
- sweetAlert.disableConfirmButton = function () {
1189
- confirmButton.disabled = true;
1190
- };
1191
-
1192
- sweetAlert.enableInput = function () {
1193
- var input = getInput();
1194
- if (!input) {
1195
- return false;
1196
- }
1197
- if (input.type === 'radio') {
1198
- var radiosContainer = input.parentNode.parentNode;
1199
- var radios = radiosContainer.querySelectorAll('input');
1200
- for (var _i5 = 0; _i5 < radios.length; _i5++) {
1201
- radios[_i5].disabled = false;
1202
- }
1203
- } else {
1204
- input.disabled = false;
1205
- }
1206
- };
1207
-
1208
- sweetAlert.disableInput = function () {
1209
- var input = getInput();
1210
- if (!input) {
1211
- return false;
1212
- }
1213
- if (input && input.type === 'radio') {
1214
- var radiosContainer = input.parentNode.parentNode;
1215
- var radios = radiosContainer.querySelectorAll('input');
1216
- for (var _i6 = 0; _i6 < radios.length; _i6++) {
1217
- radios[_i6].disabled = true;
1218
- }
1219
- } else {
1220
- input.disabled = true;
1221
- }
1222
- };
1223
-
1224
- // Set modal min-height to disable scrolling inside the modal
1225
- sweetAlert.recalculateHeight = debounce(function () {
1226
- var modal = getModal();
1227
- if (!modal) {
1228
- return;
1229
- }
1230
- var prevState = modal.style.display;
1231
- modal.style.minHeight = '';
1232
- show(modal);
1233
- modal.style.minHeight = modal.scrollHeight + 1 + 'px';
1234
- modal.style.display = prevState;
1235
- }, 50);
1236
-
1237
- // Show block with validation error
1238
- sweetAlert.showValidationError = function (error) {
1239
- var validationError = getValidationError();
1240
- validationError.innerHTML = error;
1241
- show(validationError);
1242
-
1243
- var input = getInput();
1244
- if (input) {
1245
- focusInput(input);
1246
- addClass(input, swalClasses.inputerror);
1247
- }
1248
- };
1249
-
1250
- // Hide block with validation error
1251
- sweetAlert.resetValidationError = function () {
1252
- var validationError = getValidationError();
1253
- hide(validationError);
1254
- sweetAlert.recalculateHeight();
1255
-
1256
- var input = getInput();
1257
- if (input) {
1258
- removeClass(input, swalClasses.inputerror);
1259
- }
1260
- };
1261
-
1262
- sweetAlert.getProgressSteps = function () {
1263
- return params.progressSteps;
1264
- };
1265
-
1266
- sweetAlert.setProgressSteps = function (progressSteps) {
1267
- params.progressSteps = progressSteps;
1268
- setParameters(params);
1269
- };
1270
-
1271
- sweetAlert.showProgressSteps = function () {
1272
- show(getProgressSteps());
1273
- };
1274
-
1275
- sweetAlert.hideProgressSteps = function () {
1276
- hide(getProgressSteps());
1277
- };
1278
-
1279
- sweetAlert.enableButtons();
1280
- sweetAlert.hideLoading();
1281
- sweetAlert.resetValidationError();
1282
-
1283
- // inputs
1284
- var inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];
1285
- var input = void 0;
1286
- for (var _i7 = 0; _i7 < inputTypes.length; _i7++) {
1287
- var inputClass = swalClasses[inputTypes[_i7]];
1288
- var inputContainer = getChildByClass(modal, inputClass);
1289
- input = getInput(inputTypes[_i7]);
1290
-
1291
- // set attributes
1292
- if (input) {
1293
- for (var j in input.attributes) {
1294
- if (input.attributes.hasOwnProperty(j)) {
1295
- var attrName = input.attributes[j].name;
1296
- if (attrName !== 'type' && attrName !== 'value') {
1297
- input.removeAttribute(attrName);
1298
- }
1299
- }
1300
- }
1301
- for (var attr in params.inputAttributes) {
1302
- input.setAttribute(attr, params.inputAttributes[attr]);
1303
- }
1304
- }
1305
-
1306
- // set class
1307
- inputContainer.className = inputClass;
1308
- if (params.inputClass) {
1309
- addClass(inputContainer, params.inputClass);
1310
- }
1311
-
1312
- hide(inputContainer);
1313
- }
1314
-
1315
- var populateInputOptions = void 0;
1316
- switch (params.input) {
1317
- case 'text':
1318
- case 'email':
1319
- case 'password':
1320
- case 'number':
1321
- case 'tel':
1322
- case 'url':
1323
- input = getChildByClass(modal, swalClasses.input);
1324
- input.value = params.inputValue;
1325
- input.placeholder = params.inputPlaceholder;
1326
- input.type = params.input;
1327
- show(input);
1328
- break;
1329
- case 'file':
1330
- input = getChildByClass(modal, swalClasses.file);
1331
- input.placeholder = params.inputPlaceholder;
1332
- input.type = params.input;
1333
- show(input);
1334
- break;
1335
- case 'range':
1336
- var range = getChildByClass(modal, swalClasses.range);
1337
- var rangeInput = range.querySelector('input');
1338
- var rangeOutput = range.querySelector('output');
1339
- rangeInput.value = params.inputValue;
1340
- rangeInput.type = params.input;
1341
- rangeOutput.value = params.inputValue;
1342
- show(range);
1343
- break;
1344
- case 'select':
1345
- var select = getChildByClass(modal, swalClasses.select);
1346
- select.innerHTML = '';
1347
- if (params.inputPlaceholder) {
1348
- var placeholder = document.createElement('option');
1349
- placeholder.innerHTML = params.inputPlaceholder;
1350
- placeholder.value = '';
1351
- placeholder.disabled = true;
1352
- placeholder.selected = true;
1353
- select.appendChild(placeholder);
1354
- }
1355
- populateInputOptions = function populateInputOptions(inputOptions) {
1356
- for (var optionValue in inputOptions) {
1357
- var option = document.createElement('option');
1358
- option.value = optionValue;
1359
- option.innerHTML = inputOptions[optionValue];
1360
- if (params.inputValue === optionValue) {
1361
- option.selected = true;
1362
- }
1363
- select.appendChild(option);
1364
- }
1365
- show(select);
1366
- select.focus();
1367
- };
1368
- break;
1369
- case 'radio':
1370
- var radio = getChildByClass(modal, swalClasses.radio);
1371
- radio.innerHTML = '';
1372
- populateInputOptions = function populateInputOptions(inputOptions) {
1373
- for (var radioValue in inputOptions) {
1374
- var radioInput = document.createElement('input');
1375
- var radioLabel = document.createElement('label');
1376
- var radioLabelSpan = document.createElement('span');
1377
- radioInput.type = 'radio';
1378
- radioInput.name = swalClasses.radio;
1379
- radioInput.value = radioValue;
1380
- if (params.inputValue === radioValue) {
1381
- radioInput.checked = true;
1382
- }
1383
- radioLabelSpan.innerHTML = inputOptions[radioValue];
1384
- radioLabel.appendChild(radioInput);
1385
- radioLabel.appendChild(radioLabelSpan);
1386
- radioLabel.for = radioInput.id;
1387
- radio.appendChild(radioLabel);
1388
- }
1389
- show(radio);
1390
- var radios = radio.querySelectorAll('input');
1391
- if (radios.length) {
1392
- radios[0].focus();
1393
- }
1394
- };
1395
- break;
1396
- case 'checkbox':
1397
- var checkbox = getChildByClass(modal, swalClasses.checkbox);
1398
- var checkboxInput = getInput('checkbox');
1399
- checkboxInput.type = 'checkbox';
1400
- checkboxInput.value = 1;
1401
- checkboxInput.id = swalClasses.checkbox;
1402
- checkboxInput.checked = Boolean(params.inputValue);
1403
- var label = checkbox.getElementsByTagName('span');
1404
- if (label.length) {
1405
- checkbox.removeChild(label[0]);
1406
- }
1407
- label = document.createElement('span');
1408
- label.innerHTML = params.inputPlaceholder;
1409
- checkbox.appendChild(label);
1410
- show(checkbox);
1411
- break;
1412
- case 'textarea':
1413
- var textarea = getChildByClass(modal, swalClasses.textarea);
1414
- textarea.value = params.inputValue;
1415
- textarea.placeholder = params.inputPlaceholder;
1416
- show(textarea);
1417
- break;
1418
- case null:
1419
- break;
1420
- default:
1421
- console.error('SweetAlert2: Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "' + params.input + '"');
1422
- break;
1423
- }
1424
-
1425
- if (params.input === 'select' || params.input === 'radio') {
1426
- if (params.inputOptions instanceof Promise) {
1427
- sweetAlert.showLoading();
1428
- params.inputOptions.then(function (inputOptions) {
1429
- sweetAlert.hideLoading();
1430
- populateInputOptions(inputOptions);
1431
- });
1432
- } else if (_typeof(params.inputOptions) === 'object') {
1433
- populateInputOptions(params.inputOptions);
1434
- } else {
1435
- console.error('SweetAlert2: Unexpected type of inputOptions! Expected object or Promise, got ' + _typeof(params.inputOptions));
1436
- }
1437
- }
1438
-
1439
- openModal(params.animation, params.onOpen);
1440
-
1441
- // Focus the first element (input or button)
1442
- if (params.allowEnterKey) {
1443
- setFocus(-1, 1);
1444
- } else {
1445
- if (document.activeElement) {
1446
- document.activeElement.blur();
1447
- }
1448
- }
1449
-
1450
- // fix scroll
1451
- getContainer().scrollTop = 0;
1452
-
1453
- // Observe changes inside the modal and adjust height
1454
- if (typeof MutationObserver !== 'undefined' && !swal2Observer) {
1455
- swal2Observer = new MutationObserver(sweetAlert.recalculateHeight);
1456
- swal2Observer.observe(modal, { childList: true, characterData: true, subtree: true });
1457
- }
1458
- });
1459
- };
1460
-
1461
- /*
1462
- * Global function to determine if swal2 modal is shown
1463
- */
1464
- sweetAlert.isVisible = function () {
1465
- return !!getModal();
1466
- };
1467
-
1468
- /*
1469
- * Global function for chaining sweetAlert modals
1470
- */
1471
- sweetAlert.queue = function (steps) {
1472
- queue = steps;
1473
- var resetQueue = function resetQueue() {
1474
- queue = [];
1475
- document.body.removeAttribute('data-swal2-queue-step');
1476
- };
1477
- var queueResult = [];
1478
- return new Promise(function (resolve, reject) {
1479
- (function step(i, callback) {
1480
- if (i < queue.length) {
1481
- document.body.setAttribute('data-swal2-queue-step', i);
1482
-
1483
- sweetAlert(queue[i]).then(function (result) {
1484
- queueResult.push(result);
1485
- step(i + 1, callback);
1486
- }, function (dismiss) {
1487
- resetQueue();
1488
- reject(dismiss);
1489
- });
1490
- } else {
1491
- resetQueue();
1492
- resolve(queueResult);
1493
- }
1494
- })(0);
1495
- });
1496
- };
1497
-
1498
- /*
1499
- * Global function for getting the index of current modal in queue
1500
- */
1501
- sweetAlert.getQueueStep = function () {
1502
- return document.body.getAttribute('data-swal2-queue-step');
1503
- };
1504
-
1505
- /*
1506
- * Global function for inserting a modal to the queue
1507
- */
1508
- sweetAlert.insertQueueStep = function (step, index) {
1509
- if (index && index < queue.length) {
1510
- return queue.splice(index, 0, step);
1511
- }
1512
- return queue.push(step);
1513
- };
1514
-
1515
- /*
1516
- * Global function for deleting a modal from the queue
1517
- */
1518
- sweetAlert.deleteQueueStep = function (index) {
1519
- if (typeof queue[index] !== 'undefined') {
1520
- queue.splice(index, 1);
1521
- }
1522
- };
1523
-
1524
- /*
1525
- * Global function to close sweetAlert
1526
- */
1527
- sweetAlert.close = sweetAlert.closeModal = function (onComplete) {
1528
- var container = getContainer();
1529
- var modal = getModal();
1530
- if (!modal) {
1531
- return;
1532
- }
1533
- removeClass(modal, swalClasses.show);
1534
- addClass(modal, swalClasses.hide);
1535
- clearTimeout(modal.timeout);
1536
-
1537
- resetPrevState();
1538
-
1539
- var removeModalAndResetState = function removeModalAndResetState() {
1540
- if (container.parentNode) {
1541
- container.parentNode.removeChild(container);
1542
- }
1543
- removeClass(document.documentElement, swalClasses.shown);
1544
- removeClass(document.body, swalClasses.shown);
1545
- undoScrollbar();
1546
- undoIOSfix();
1547
- };
1548
-
1549
- // If animation is supported, animate
1550
- if (animationEndEvent && !hasClass(modal, swalClasses.noanimation)) {
1551
- modal.addEventListener(animationEndEvent, function swalCloseEventFinished() {
1552
- modal.removeEventListener(animationEndEvent, swalCloseEventFinished);
1553
- if (hasClass(modal, swalClasses.hide)) {
1554
- removeModalAndResetState();
1555
- }
1556
- });
1557
- } else {
1558
- // Otherwise, remove immediately
1559
- removeModalAndResetState();
1560
- }
1561
- if (onComplete !== null && typeof onComplete === 'function') {
1562
- setTimeout(function () {
1563
- onComplete(modal);
1564
- });
1565
- }
1566
- };
1567
-
1568
- /*
1569
- * Global function to click 'Confirm' button
1570
- */
1571
- sweetAlert.clickConfirm = function () {
1572
- return getConfirmButton().click();
1573
- };
1574
-
1575
- /*
1576
- * Global function to click 'Cancel' button
1577
- */
1578
- sweetAlert.clickCancel = function () {
1579
- return getCancelButton().click();
1580
- };
1581
-
1582
- /**
1583
- * Show spinner instead of Confirm button and disable Cancel button
1584
- */
1585
- sweetAlert.showLoading = sweetAlert.enableLoading = function () {
1586
- var modal = getModal();
1587
- if (!modal) {
1588
- sweetAlert('');
1589
- }
1590
- var buttonsWrapper = getButtonsWrapper();
1591
- var confirmButton = getConfirmButton();
1592
- var cancelButton = getCancelButton();
1593
-
1594
- show(buttonsWrapper);
1595
- show(confirmButton, 'inline-block');
1596
- addClass(buttonsWrapper, swalClasses.loading);
1597
- addClass(modal, swalClasses.loading);
1598
- confirmButton.disabled = true;
1599
- cancelButton.disabled = true;
1600
- };
1601
-
1602
- /**
1603
- * Set default params for each popup
1604
- * @param {Object} userParams
1605
- */
1606
- sweetAlert.setDefaults = function (userParams) {
1607
- if (!userParams || (typeof userParams === 'undefined' ? 'undefined' : _typeof(userParams)) !== 'object') {
1608
- return console.error('SweetAlert2: the argument for setDefaults() is required and has to be a object');
1609
- }
1610
-
1611
- for (var param in userParams) {
1612
- if (!defaultParams.hasOwnProperty(param) && param !== 'extraParams') {
1613
- console.warn('SweetAlert2: Unknown parameter "' + param + '"');
1614
- delete userParams[param];
1615
- }
1616
- }
1617
-
1618
- _extends(modalParams, userParams);
1619
- };
1620
-
1621
- /**
1622
- * Reset default params for each popup
1623
- */
1624
- sweetAlert.resetDefaults = function () {
1625
- modalParams = _extends({}, defaultParams);
1626
- };
1627
-
1628
- sweetAlert.noop = function () {};
1629
-
1630
- sweetAlert.version = '6.6.4';
1631
-
1632
- sweetAlert.default = sweetAlert;
1633
-
1634
- module.exports = sweetAlert;
1635
- if (window.Sweetalert2) window.sweetAlert = window.swal = window.Sweetalert2;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/vendor/sweetalert2/dist/sweetalert2.css CHANGED
@@ -1,717 +1,1448 @@
1
- body.swal2-shown {
2
- overflow-y: hidden; }
3
-
4
- body.swal2-iosfix {
5
- position: fixed;
6
- left: 0;
7
- right: 0; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  .swal2-container {
10
- display: -webkit-box;
11
- display: -ms-flexbox;
12
- display: flex;
13
- -webkit-box-align: center;
14
- -ms-flex-align: center;
15
- align-items: center;
16
- position: fixed;
17
- top: 0;
18
- left: 0;
19
- bottom: 0;
20
- right: 0;
21
- padding: 10px;
22
- background-color: transparent;
23
- z-index: 999; }
24
- .swal2-container.swal2-fade {
25
- -webkit-transition: background-color .1s;
26
- transition: background-color .1s; }
27
- .swal2-container.swal2-shown {
28
- background-color: rgba(0, 0, 0, 0.4); }
29
-
30
- .swal2-modal {
31
- background-color: #fff;
32
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
33
- border-radius: 5px;
34
- -webkit-box-sizing: border-box;
35
- box-sizing: border-box;
36
- text-align: center;
37
- margin: auto;
38
- overflow-x: hidden;
39
- overflow-y: auto;
40
- display: none;
41
- position: relative;
42
- max-width: 100%; }
43
- .swal2-modal:focus {
44
- outline: none; }
45
- .swal2-modal.swal2-loading {
46
- overflow-y: hidden; }
47
- .swal2-modal .swal2-title {
48
- color: #595959;
49
- font-size: 22px;
50
- line-height: 150%;
51
- text-align: center;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  font-weight: 600;
 
53
  text-transform: none;
54
- position: relative;
55
- margin: 0 0 .4em;
 
 
 
 
 
 
 
 
 
 
56
  padding: 0;
57
- display: block;
58
- word-wrap: break-word; }
59
- .swal2-modal .swal2-buttonswrapper {
60
- margin-top: 15px; }
61
- .swal2-modal .swal2-buttonswrapper:not(.swal2-loading) .swal2-styled[disabled] {
62
- opacity: .4;
63
- cursor: no-drop; }
64
- .swal2-modal .swal2-buttonswrapper.swal2-loading .swal2-styled.swal2-confirm {
65
- -webkit-box-sizing: border-box;
66
- box-sizing: border-box;
67
- border: 4px solid transparent;
68
- border-color: transparent;
69
- width: 40px;
70
- height: 40px;
71
- padding: 0;
72
- margin: 7.5px;
73
- vertical-align: top;
74
- background-color: transparent !important;
75
- color: transparent;
76
- cursor: default;
77
- border-radius: 100%;
78
- -webkit-animation: rotate-loading 1.5s linear 0s infinite normal;
79
- animation: rotate-loading 1.5s linear 0s infinite normal;
80
- -webkit-user-select: none;
81
- -moz-user-select: none;
82
- -ms-user-select: none;
83
- user-select: none; }
84
- .swal2-modal .swal2-buttonswrapper.swal2-loading .swal2-styled.swal2-cancel {
85
- margin-left: 30px;
86
- margin-right: 30px; }
87
- .swal2-modal .swal2-buttonswrapper.swal2-loading :not(.swal2-styled).swal2-confirm::after {
88
- display: inline-block;
89
- content: '';
90
- margin-left: 5px 0 15px;
91
- vertical-align: -1px;
92
- height: 15px;
93
- width: 15px;
94
- border: 3px solid #999999;
95
- -webkit-box-shadow: 1px 1px 1px #fff;
96
- box-shadow: 1px 1px 1px #fff;
97
- border-right-color: transparent;
98
- border-radius: 50%;
99
- -webkit-animation: rotate-loading 1.5s linear 0s infinite normal;
100
- animation: rotate-loading 1.5s linear 0s infinite normal; }
101
- .swal2-modal .swal2-styled {
102
  border: 0;
103
- border-radius: 3px;
104
- -webkit-box-shadow: none;
105
- box-shadow: none;
106
  color: #fff;
107
- cursor: pointer;
108
- font-size: 17px;
109
- font-weight: 500;
110
- margin: 15px 5px 0;
111
- padding: 10px 32px; }
112
- .swal2-modal .swal2-image {
113
- margin: 20px auto;
114
- max-width: 100%; }
115
- .swal2-modal .swal2-close {
116
- background: transparent;
117
  border: 0;
118
- margin: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  padding: 0;
120
- width: 38px;
121
- height: 40px;
122
- font-size: 36px;
123
- line-height: 40px;
 
 
124
  font-family: serif;
125
- position: absolute;
126
- top: 5px;
127
- right: 8px;
128
  cursor: pointer;
129
- color: #cccccc;
130
- -webkit-transition: color .1s ease;
131
- transition: color .1s ease; }
132
- .swal2-modal .swal2-close:hover {
133
- color: #d55; }
134
- .swal2-modal > .swal2-input,
135
- .swal2-modal > .swal2-file,
136
- .swal2-modal > .swal2-textarea,
137
- .swal2-modal > .swal2-select,
138
- .swal2-modal > .swal2-radio,
139
- .swal2-modal > .swal2-checkbox {
140
- display: none; }
141
- .swal2-modal .swal2-content {
142
- font-size: 18px;
143
- text-align: center;
144
- font-weight: 300;
145
- position: relative;
146
- float: none;
147
- margin: 0;
148
  padding: 0;
 
 
 
 
149
  line-height: normal;
150
- color: #545454;
151
- word-wrap: break-word; }
152
- .swal2-modal .swal2-input,
153
- .swal2-modal .swal2-file,
154
- .swal2-modal .swal2-textarea,
155
- .swal2-modal .swal2-select,
156
- .swal2-modal .swal2-radio,
157
- .swal2-modal .swal2-checkbox {
158
- margin: 20px auto; }
159
- .swal2-modal .swal2-input,
160
- .swal2-modal .swal2-file,
161
- .swal2-modal .swal2-textarea {
162
- width: 100%;
163
- -webkit-box-sizing: border-box;
164
- box-sizing: border-box;
165
- font-size: 18px;
166
- border-radius: 3px;
 
 
 
167
  border: 1px solid #d9d9d9;
168
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06);
169
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06);
170
- -webkit-transition: border-color box-shadow .3s;
171
- transition: border-color box-shadow .3s; }
172
- .swal2-modal .swal2-input.swal2-inputerror,
173
- .swal2-modal .swal2-file.swal2-inputerror,
174
- .swal2-modal .swal2-textarea.swal2-inputerror {
175
- border-color: #f27474 !important;
176
- -webkit-box-shadow: 0 0 2px #f27474 !important;
177
- box-shadow: 0 0 2px #f27474 !important; }
178
- .swal2-modal .swal2-input:focus,
179
- .swal2-modal .swal2-file:focus,
180
- .swal2-modal .swal2-textarea:focus {
181
- outline: none;
182
- border: 1px solid #b4dbed;
183
- -webkit-box-shadow: 0 0 3px #c4e6f5;
184
- box-shadow: 0 0 3px #c4e6f5; }
185
- .swal2-modal .swal2-input:focus::-webkit-input-placeholder,
186
- .swal2-modal .swal2-file:focus::-webkit-input-placeholder,
187
- .swal2-modal .swal2-textarea:focus::-webkit-input-placeholder {
188
- -webkit-transition: opacity .3s .03s ease;
189
- transition: opacity .3s .03s ease;
190
- opacity: .8; }
191
- .swal2-modal .swal2-input:focus:-ms-input-placeholder,
192
- .swal2-modal .swal2-file:focus:-ms-input-placeholder,
193
- .swal2-modal .swal2-textarea:focus:-ms-input-placeholder {
194
- -webkit-transition: opacity .3s .03s ease;
195
- transition: opacity .3s .03s ease;
196
- opacity: .8; }
197
- .swal2-modal .swal2-input:focus::placeholder,
198
- .swal2-modal .swal2-file:focus::placeholder,
199
- .swal2-modal .swal2-textarea:focus::placeholder {
200
- -webkit-transition: opacity .3s .03s ease;
201
- transition: opacity .3s .03s ease;
202
- opacity: .8; }
203
- .swal2-modal .swal2-input::-webkit-input-placeholder,
204
- .swal2-modal .swal2-file::-webkit-input-placeholder,
205
- .swal2-modal .swal2-textarea::-webkit-input-placeholder {
206
- color: #e6e6e6; }
207
- .swal2-modal .swal2-input:-ms-input-placeholder,
208
- .swal2-modal .swal2-file:-ms-input-placeholder,
209
- .swal2-modal .swal2-textarea:-ms-input-placeholder {
210
- color: #e6e6e6; }
211
- .swal2-modal .swal2-input::placeholder,
212
- .swal2-modal .swal2-file::placeholder,
213
- .swal2-modal .swal2-textarea::placeholder {
214
- color: #e6e6e6; }
215
- .swal2-modal .swal2-range input {
216
- float: left;
217
- width: 80%; }
218
- .swal2-modal .swal2-range output {
219
- float: right;
220
  width: 20%;
221
- font-size: 20px;
222
  font-weight: 600;
223
- text-align: center; }
224
- .swal2-modal .swal2-range input,
225
- .swal2-modal .swal2-range output {
226
- height: 43px;
227
- line-height: 43px;
228
- vertical-align: middle;
229
- margin: 20px auto;
230
- padding: 0; }
231
- .swal2-modal .swal2-input {
232
- height: 43px;
233
- padding: 0 12px; }
234
- .swal2-modal .swal2-input[type='number'] {
235
- max-width: 150px; }
236
- .swal2-modal .swal2-file {
237
- font-size: 20px; }
238
- .swal2-modal .swal2-textarea {
239
- height: 108px;
240
- padding: 12px; }
241
- .swal2-modal .swal2-select {
242
- color: #545454;
243
- font-size: inherit;
244
- padding: 5px 10px;
245
- min-width: 40%;
246
- max-width: 100%; }
247
- .swal2-modal .swal2-radio {
248
- border: 0; }
249
- .swal2-modal .swal2-radio label:not(:first-child) {
250
- margin-left: 20px; }
251
- .swal2-modal .swal2-radio input,
252
- .swal2-modal .swal2-radio span {
253
- vertical-align: middle; }
254
- .swal2-modal .swal2-radio input {
255
- margin: 0 3px 0 0; }
256
- .swal2-modal .swal2-checkbox {
257
- color: #545454; }
258
- .swal2-modal .swal2-checkbox input,
259
- .swal2-modal .swal2-checkbox span {
260
- vertical-align: middle; }
261
- .swal2-modal .swal2-validationerror {
262
- background-color: #f0f0f0;
263
- margin: 0 -20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  overflow: hidden;
265
- padding: 10px;
266
- color: gray;
267
- font-size: 16px;
268
  font-weight: 300;
269
- display: none; }
270
- .swal2-modal .swal2-validationerror::before {
271
- content: '!';
272
- display: inline-block;
273
- width: 24px;
274
- height: 24px;
275
- border-radius: 50%;
276
- background-color: #ea7d7d;
277
- color: #fff;
278
- line-height: 24px;
279
- text-align: center;
280
- margin-right: 10px; }
281
-
282
- @supports (-ms-accelerator: true) {
283
- .swal2-range input {
284
- width: 100% !important; }
285
- .swal2-range output {
286
- display: none; } }
287
-
288
- @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
289
- .swal2-range input {
290
- width: 100% !important; }
291
- .swal2-range output {
292
- display: none; } }
293
 
294
  .swal2-icon {
295
- width: 80px;
296
- height: 80px;
297
- border: 4px solid transparent;
298
- border-radius: 50%;
299
- margin: 20px auto 30px;
300
- padding: 0;
301
- position: relative;
302
- -webkit-box-sizing: content-box;
303
- box-sizing: content-box;
304
- cursor: default;
305
- -webkit-user-select: none;
306
- -moz-user-select: none;
307
- -ms-user-select: none;
308
- user-select: none; }
309
- .swal2-icon.swal2-error {
310
- border-color: #f27474; }
311
- .swal2-icon.swal2-error .swal2-x-mark {
312
- position: relative;
313
- display: block; }
314
- .swal2-icon.swal2-error [class^='swal2-x-mark-line'] {
315
- position: absolute;
316
- height: 5px;
317
- width: 47px;
318
- background-color: #f27474;
319
- display: block;
320
- top: 37px;
321
- border-radius: 2px; }
322
- .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='left'] {
323
- -webkit-transform: rotate(45deg);
324
- transform: rotate(45deg);
325
- left: 17px; }
326
- .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='right'] {
327
- -webkit-transform: rotate(-45deg);
328
- transform: rotate(-45deg);
329
- right: 16px; }
330
- .swal2-icon.swal2-warning {
331
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
332
- color: #f8bb86;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
333
  border-color: #facea8;
334
- font-size: 60px;
335
- line-height: 80px;
336
- text-align: center; }
337
- .swal2-icon.swal2-info {
338
- font-family: 'Open Sans', sans-serif;
339
- color: #3fc3ee;
 
 
 
 
 
340
  border-color: #9de0f6;
341
- font-size: 60px;
342
- line-height: 80px;
343
- text-align: center; }
344
- .swal2-icon.swal2-question {
345
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
346
- color: #87adbd;
 
 
 
 
 
347
  border-color: #c9dae1;
348
- font-size: 60px;
349
- line-height: 80px;
350
- text-align: center; }
351
- .swal2-icon.swal2-success {
352
- border-color: #a5dc86; }
353
- .swal2-icon.swal2-success [class^='swal2-success-circular-line'] {
354
- border-radius: 50%;
355
- position: absolute;
356
- width: 60px;
357
- height: 120px;
358
- -webkit-transform: rotate(45deg);
359
- transform: rotate(45deg); }
360
- .swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='left'] {
361
- border-radius: 120px 0 0 120px;
362
- top: -7px;
363
- left: -33px;
364
- -webkit-transform: rotate(-45deg);
365
- transform: rotate(-45deg);
366
- -webkit-transform-origin: 60px 60px;
367
- transform-origin: 60px 60px; }
368
- .swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='right'] {
369
- border-radius: 0 120px 120px 0;
370
- top: -11px;
371
- left: 30px;
372
- -webkit-transform: rotate(-45deg);
373
- transform: rotate(-45deg);
374
- -webkit-transform-origin: 0 60px;
375
- transform-origin: 0 60px; }
376
- .swal2-icon.swal2-success .swal2-success-ring {
377
- width: 80px;
378
- height: 80px;
379
- border: 4px solid rgba(165, 220, 134, 0.2);
380
- border-radius: 50%;
381
- -webkit-box-sizing: content-box;
382
- box-sizing: content-box;
383
- position: absolute;
384
- left: -4px;
385
- top: -4px;
386
- z-index: 2; }
387
- .swal2-icon.swal2-success .swal2-success-fix {
388
- width: 7px;
389
- height: 90px;
390
- position: absolute;
391
- left: 28px;
392
- top: 8px;
393
- z-index: 1;
394
- -webkit-transform: rotate(-45deg);
395
- transform: rotate(-45deg); }
396
- .swal2-icon.swal2-success [class^='swal2-success-line'] {
397
- height: 5px;
398
- background-color: #a5dc86;
399
- display: block;
400
- border-radius: 2px;
401
- position: absolute;
402
- z-index: 2; }
403
- .swal2-icon.swal2-success [class^='swal2-success-line'][class$='tip'] {
404
- width: 25px;
405
- left: 14px;
406
- top: 46px;
407
- -webkit-transform: rotate(45deg);
408
- transform: rotate(45deg); }
409
- .swal2-icon.swal2-success [class^='swal2-success-line'][class$='long'] {
410
- width: 47px;
411
- right: 8px;
412
- top: 38px;
413
- -webkit-transform: rotate(-45deg);
414
- transform: rotate(-45deg); }
415
-
416
- .swal2-progresssteps {
417
- font-weight: 600;
418
- margin: 0 0 20px;
419
- padding: 0; }
420
- .swal2-progresssteps li {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
421
  display: inline-block;
422
- position: relative; }
423
- .swal2-progresssteps .swal2-progresscircle {
424
- background: #3085d6;
 
 
 
 
425
  border-radius: 2em;
 
426
  color: #fff;
427
- height: 2em;
428
  line-height: 2em;
429
  text-align: center;
430
- width: 2em;
431
- z-index: 20; }
432
- .swal2-progresssteps .swal2-progresscircle:first-child {
433
- margin-left: 0; }
434
- .swal2-progresssteps .swal2-progresscircle:last-child {
435
- margin-right: 0; }
436
- .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep {
437
- background: #3085d6; }
438
- .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep ~ .swal2-progresscircle {
439
- background: #add8e6; }
440
- .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep ~ .swal2-progressline {
441
- background: #add8e6; }
442
- .swal2-progresssteps .swal2-progressline {
443
- background: #3085d6;
444
- height: .4em;
 
445
  margin: 0 -1px;
446
- z-index: 10; }
447
-
448
- [class^='swal2'] {
449
- -webkit-tap-highlight-color: transparent; }
450
-
451
- @-webkit-keyframes showSweetAlert {
452
- 0% {
453
- -webkit-transform: scale(0.7);
454
- transform: scale(0.7); }
455
- 45% {
456
- -webkit-transform: scale(1.05);
457
- transform: scale(1.05); }
458
- 80% {
459
- -webkit-transform: scale(0.95);
460
- transform: scale(0.95); }
461
- 100% {
462
- -webkit-transform: scale(1);
463
- transform: scale(1); } }
464
-
465
- @keyframes showSweetAlert {
466
- 0% {
467
- -webkit-transform: scale(0.7);
468
- transform: scale(0.7); }
469
- 45% {
470
- -webkit-transform: scale(1.05);
471
- transform: scale(1.05); }
472
- 80% {
473
- -webkit-transform: scale(0.95);
474
- transform: scale(0.95); }
475
- 100% {
476
- -webkit-transform: scale(1);
477
- transform: scale(1); } }
478
-
479
- @-webkit-keyframes hideSweetAlert {
480
- 0% {
481
- -webkit-transform: scale(1);
482
- transform: scale(1);
483
- opacity: 1; }
484
- 100% {
485
- -webkit-transform: scale(0.5);
486
- transform: scale(0.5);
487
- opacity: 0; } }
488
-
489
- @keyframes hideSweetAlert {
490
- 0% {
491
- -webkit-transform: scale(1);
492
- transform: scale(1);
493
- opacity: 1; }
494
- 100% {
495
- -webkit-transform: scale(0.5);
496
- transform: scale(0.5);
497
- opacity: 0; } }
498
 
499
  .swal2-show {
500
- -webkit-animation: showSweetAlert 0.3s;
501
- animation: showSweetAlert 0.3s; }
502
- .swal2-show.swal2-noanimation {
503
- -webkit-animation: none;
504
- animation: none; }
505
 
506
  .swal2-hide {
507
- -webkit-animation: hideSweetAlert 0.15s forwards;
508
- animation: hideSweetAlert 0.15s forwards; }
509
- .swal2-hide.swal2-noanimation {
510
- -webkit-animation: none;
511
- animation: none; }
512
-
513
- @-webkit-keyframes animate-success-tip {
514
- 0% {
515
- width: 0;
516
- left: 1px;
517
- top: 19px; }
518
- 54% {
519
- width: 0;
520
- left: 1px;
521
- top: 19px; }
522
- 70% {
523
- width: 50px;
524
- left: -8px;
525
- top: 37px; }
526
- 84% {
527
- width: 17px;
528
- left: 21px;
529
- top: 48px; }
530
- 100% {
531
- width: 25px;
532
- left: 14px;
533
- top: 45px; } }
534
-
535
- @keyframes animate-success-tip {
536
- 0% {
537
- width: 0;
538
- left: 1px;
539
- top: 19px; }
540
- 54% {
541
- width: 0;
542
- left: 1px;
543
- top: 19px; }
544
- 70% {
545
  width: 50px;
546
- left: -8px;
547
- top: 37px; }
548
- 84% {
549
- width: 17px;
550
- left: 21px;
551
- top: 48px; }
552
- 100% {
553
- width: 25px;
554
- left: 14px;
555
- top: 45px; } }
556
-
557
- @-webkit-keyframes animate-success-long {
558
- 0% {
559
- width: 0;
560
- right: 46px;
561
- top: 54px; }
562
- 65% {
563
- width: 0;
564
- right: 46px;
565
- top: 54px; }
566
- 84% {
567
- width: 55px;
568
  right: 0;
569
- top: 35px; }
570
- 100% {
571
- width: 47px;
572
- right: 8px;
573
- top: 38px; } }
574
-
575
- @keyframes animate-success-long {
576
- 0% {
577
- width: 0;
578
- right: 46px;
579
- top: 54px; }
580
- 65% {
581
- width: 0;
582
- right: 46px;
583
- top: 54px; }
584
- 84% {
585
- width: 55px;
586
  right: 0;
587
- top: 35px; }
588
- 100% {
589
- width: 47px;
590
- right: 8px;
591
- top: 38px; } }
592
-
593
- @-webkit-keyframes rotatePlaceholder {
594
- 0% {
595
- -webkit-transform: rotate(-45deg);
596
- transform: rotate(-45deg); }
597
- 5% {
598
- -webkit-transform: rotate(-45deg);
599
- transform: rotate(-45deg); }
600
- 12% {
601
- -webkit-transform: rotate(-405deg);
602
- transform: rotate(-405deg); }
603
- 100% {
604
- -webkit-transform: rotate(-405deg);
605
- transform: rotate(-405deg); } }
606
-
607
- @keyframes rotatePlaceholder {
608
- 0% {
609
- -webkit-transform: rotate(-45deg);
610
- transform: rotate(-45deg); }
611
- 5% {
612
- -webkit-transform: rotate(-45deg);
613
- transform: rotate(-45deg); }
614
- 12% {
615
- -webkit-transform: rotate(-405deg);
616
- transform: rotate(-405deg); }
617
- 100% {
618
- -webkit-transform: rotate(-405deg);
619
- transform: rotate(-405deg); } }
620
-
621
- .swal2-animate-success-line-tip {
622
- -webkit-animation: animate-success-tip 0.75s;
623
- animation: animate-success-tip 0.75s; }
624
-
625
- .swal2-animate-success-line-long {
626
- -webkit-animation: animate-success-long 0.75s;
627
- animation: animate-success-long 0.75s; }
628
-
629
- .swal2-success.swal2-animate-success-icon .swal2-success-circular-line-right {
630
- -webkit-animation: rotatePlaceholder 4.25s ease-in;
631
- animation: rotatePlaceholder 4.25s ease-in; }
632
-
633
- @-webkit-keyframes animate-error-icon {
634
- 0% {
635
- -webkit-transform: rotateX(100deg);
636
- transform: rotateX(100deg);
637
- opacity: 0; }
638
- 100% {
639
- -webkit-transform: rotateX(0deg);
640
- transform: rotateX(0deg);
641
- opacity: 1; } }
642
-
643
- @keyframes animate-error-icon {
644
- 0% {
645
- -webkit-transform: rotateX(100deg);
646
- transform: rotateX(100deg);
647
- opacity: 0; }
648
- 100% {
649
- -webkit-transform: rotateX(0deg);
650
- transform: rotateX(0deg);
651
- opacity: 1; } }
652
-
653
- .swal2-animate-error-icon {
654
- -webkit-animation: animate-error-icon 0.5s;
655
- animation: animate-error-icon 0.5s; }
656
-
657
- @-webkit-keyframes animate-x-mark {
658
- 0% {
659
- -webkit-transform: scale(0.4);
660
- transform: scale(0.4);
661
- margin-top: 26px;
662
- opacity: 0; }
663
- 50% {
664
- -webkit-transform: scale(0.4);
665
- transform: scale(0.4);
666
- margin-top: 26px;
667
- opacity: 0; }
668
- 80% {
669
- -webkit-transform: scale(1.15);
670
- transform: scale(1.15);
671
- margin-top: -6px; }
672
- 100% {
673
- -webkit-transform: scale(1);
674
- transform: scale(1);
675
- margin-top: 0;
676
- opacity: 1; } }
677
-
678
- @keyframes animate-x-mark {
679
- 0% {
680
- -webkit-transform: scale(0.4);
681
- transform: scale(0.4);
682
- margin-top: 26px;
683
- opacity: 0; }
684
- 50% {
685
- -webkit-transform: scale(0.4);
686
- transform: scale(0.4);
687
- margin-top: 26px;
688
- opacity: 0; }
689
- 80% {
690
- -webkit-transform: scale(1.15);
691
- transform: scale(1.15);
692
- margin-top: -6px; }
693
- 100% {
694
- -webkit-transform: scale(1);
695
- transform: scale(1);
696
- margin-top: 0;
697
- opacity: 1; } }
698
-
699
- .swal2-animate-x-mark {
700
- -webkit-animation: animate-x-mark 0.5s;
701
- animation: animate-x-mark 0.5s; }
702
-
703
- @-webkit-keyframes rotate-loading {
704
- 0% {
705
- -webkit-transform: rotate(0deg);
706
- transform: rotate(0deg); }
707
- 100% {
708
- -webkit-transform: rotate(360deg);
709
- transform: rotate(360deg); } }
710
-
711
- @keyframes rotate-loading {
712
- 0% {
713
- -webkit-transform: rotate(0deg);
714
- transform: rotate(0deg); }
715
- 100% {
716
- -webkit-transform: rotate(360deg);
717
- transform: rotate(360deg); } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .swal2-popup.swal2-toast {
2
+ box-sizing: border-box;
3
+ grid-column: 1/4 !important;
4
+ grid-row: 1/4 !important;
5
+ grid-template-columns: 1fr 99fr 1fr;
6
+ padding: 1em;
7
+ overflow-y: hidden;
8
+ background: #fff;
9
+ box-shadow: 0 0 1px hsla(0deg, 0%, 0%, 0.075), 0 1px 2px hsla(0deg, 0%, 0%, 0.075), 1px 2px 4px hsla(0deg, 0%, 0%, 0.075), 1px 3px 8px hsla(0deg, 0%, 0%, 0.075), 2px 4px 16px hsla(0deg, 0%, 0%, 0.075);
10
+ pointer-events: all;
11
+ }
12
+ .swal2-popup.swal2-toast > * {
13
+ grid-column: 2;
14
+ }
15
+ .swal2-popup.swal2-toast .swal2-title {
16
+ margin: 0.5em 1em;
17
+ padding: 0;
18
+ font-size: 1em;
19
+ text-align: initial;
20
+ }
21
+ .swal2-popup.swal2-toast .swal2-loading {
22
+ justify-content: center;
23
+ }
24
+ .swal2-popup.swal2-toast .swal2-input {
25
+ height: 2em;
26
+ margin: 0.5em;
27
+ font-size: 1em;
28
+ }
29
+ .swal2-popup.swal2-toast .swal2-validation-message {
30
+ font-size: 1em;
31
+ }
32
+ .swal2-popup.swal2-toast .swal2-footer {
33
+ margin: 0.5em 0 0;
34
+ padding: 0.5em 0 0;
35
+ font-size: 0.8em;
36
+ }
37
+ .swal2-popup.swal2-toast .swal2-close {
38
+ grid-column: 3/3;
39
+ grid-row: 1/99;
40
+ align-self: center;
41
+ width: 0.8em;
42
+ height: 0.8em;
43
+ margin: 0;
44
+ font-size: 2em;
45
+ }
46
+ .swal2-popup.swal2-toast .swal2-html-container {
47
+ margin: 0.5em 1em;
48
+ padding: 0;
49
+ overflow: initial;
50
+ font-size: 1em;
51
+ text-align: initial;
52
+ }
53
+ .swal2-popup.swal2-toast .swal2-html-container:empty {
54
+ padding: 0;
55
+ }
56
+ .swal2-popup.swal2-toast .swal2-loader {
57
+ grid-column: 1;
58
+ grid-row: 1/99;
59
+ align-self: center;
60
+ width: 2em;
61
+ height: 2em;
62
+ margin: 0.25em;
63
+ }
64
+ .swal2-popup.swal2-toast .swal2-icon {
65
+ grid-column: 1;
66
+ grid-row: 1/99;
67
+ align-self: center;
68
+ width: 2em;
69
+ min-width: 2em;
70
+ height: 2em;
71
+ margin: 0 0.5em 0 0;
72
+ }
73
+ .swal2-popup.swal2-toast .swal2-icon .swal2-icon-content {
74
+ display: flex;
75
+ align-items: center;
76
+ font-size: 1.8em;
77
+ font-weight: bold;
78
+ }
79
+ .swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring {
80
+ width: 2em;
81
+ height: 2em;
82
+ }
83
+ .swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line] {
84
+ top: 0.875em;
85
+ width: 1.375em;
86
+ }
87
+ .swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] {
88
+ left: 0.3125em;
89
+ }
90
+ .swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] {
91
+ right: 0.3125em;
92
+ }
93
+ .swal2-popup.swal2-toast .swal2-actions {
94
+ justify-content: flex-start;
95
+ height: auto;
96
+ margin: 0;
97
+ margin-top: 0.5em;
98
+ padding: 0 0.5em;
99
+ }
100
+ .swal2-popup.swal2-toast .swal2-styled {
101
+ margin: 0.25em 0.5em;
102
+ padding: 0.4em 0.6em;
103
+ font-size: 1em;
104
+ }
105
+ .swal2-popup.swal2-toast .swal2-success {
106
+ border-color: #a5dc86;
107
+ }
108
+ .swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line] {
109
+ position: absolute;
110
+ width: 1.6em;
111
+ height: 3em;
112
+ transform: rotate(45deg);
113
+ border-radius: 50%;
114
+ }
115
+ .swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left] {
116
+ top: -0.8em;
117
+ left: -0.5em;
118
+ transform: rotate(-45deg);
119
+ transform-origin: 2em 2em;
120
+ border-radius: 4em 0 0 4em;
121
+ }
122
+ .swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right] {
123
+ top: -0.25em;
124
+ left: 0.9375em;
125
+ transform-origin: 0 1.5em;
126
+ border-radius: 0 4em 4em 0;
127
+ }
128
+ .swal2-popup.swal2-toast .swal2-success .swal2-success-ring {
129
+ width: 2em;
130
+ height: 2em;
131
+ }
132
+ .swal2-popup.swal2-toast .swal2-success .swal2-success-fix {
133
+ top: 0;
134
+ left: 0.4375em;
135
+ width: 0.4375em;
136
+ height: 2.6875em;
137
+ }
138
+ .swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line] {
139
+ height: 0.3125em;
140
+ }
141
+ .swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip] {
142
+ top: 1.125em;
143
+ left: 0.1875em;
144
+ width: 0.75em;
145
+ }
146
+ .swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long] {
147
+ top: 0.9375em;
148
+ right: 0.1875em;
149
+ width: 1.375em;
150
+ }
151
+ .swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip {
152
+ -webkit-animation: swal2-toast-animate-success-line-tip 0.75s;
153
+ animation: swal2-toast-animate-success-line-tip 0.75s;
154
+ }
155
+ .swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long {
156
+ -webkit-animation: swal2-toast-animate-success-line-long 0.75s;
157
+ animation: swal2-toast-animate-success-line-long 0.75s;
158
+ }
159
+ .swal2-popup.swal2-toast.swal2-show {
160
+ -webkit-animation: swal2-toast-show 0.5s;
161
+ animation: swal2-toast-show 0.5s;
162
+ }
163
+ .swal2-popup.swal2-toast.swal2-hide {
164
+ -webkit-animation: swal2-toast-hide 0.1s forwards;
165
+ animation: swal2-toast-hide 0.1s forwards;
166
+ }
167
 
168
  .swal2-container {
169
+ display: grid;
170
+ position: fixed;
171
+ z-index: 1060;
172
+ top: 0;
173
+ right: 0;
174
+ bottom: 0;
175
+ left: 0;
176
+ box-sizing: border-box;
177
+ grid-template-areas: "top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end";
178
+ grid-template-rows: minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto) minmax(-webkit-min-content, auto);
179
+ grid-template-rows: minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);
180
+ height: 100%;
181
+ padding: 0.625em;
182
+ overflow-x: hidden;
183
+ transition: background-color 0.1s;
184
+ -webkit-overflow-scrolling: touch;
185
+ }
186
+ .swal2-container.swal2-backdrop-show, .swal2-container.swal2-noanimation {
187
+ background: rgba(0, 0, 0, 0.4);
188
+ }
189
+ .swal2-container.swal2-backdrop-hide {
190
+ background: transparent !important;
191
+ }
192
+ .swal2-container.swal2-top-start, .swal2-container.swal2-center-start, .swal2-container.swal2-bottom-start {
193
+ grid-template-columns: minmax(0, 1fr) auto auto;
194
+ }
195
+ .swal2-container.swal2-top, .swal2-container.swal2-center, .swal2-container.swal2-bottom {
196
+ grid-template-columns: auto minmax(0, 1fr) auto;
197
+ }
198
+ .swal2-container.swal2-top-end, .swal2-container.swal2-center-end, .swal2-container.swal2-bottom-end {
199
+ grid-template-columns: auto auto minmax(0, 1fr);
200
+ }
201
+ .swal2-container.swal2-top-start > .swal2-popup {
202
+ align-self: start;
203
+ }
204
+ .swal2-container.swal2-top > .swal2-popup {
205
+ grid-column: 2;
206
+ align-self: start;
207
+ justify-self: center;
208
+ }
209
+ .swal2-container.swal2-top-end > .swal2-popup, .swal2-container.swal2-top-right > .swal2-popup {
210
+ grid-column: 3;
211
+ align-self: start;
212
+ justify-self: end;
213
+ }
214
+ .swal2-container.swal2-center-start > .swal2-popup, .swal2-container.swal2-center-left > .swal2-popup {
215
+ grid-row: 2;
216
+ align-self: center;
217
+ }
218
+ .swal2-container.swal2-center > .swal2-popup {
219
+ grid-column: 2;
220
+ grid-row: 2;
221
+ align-self: center;
222
+ justify-self: center;
223
+ }
224
+ .swal2-container.swal2-center-end > .swal2-popup, .swal2-container.swal2-center-right > .swal2-popup {
225
+ grid-column: 3;
226
+ grid-row: 2;
227
+ align-self: center;
228
+ justify-self: end;
229
+ }
230
+ .swal2-container.swal2-bottom-start > .swal2-popup, .swal2-container.swal2-bottom-left > .swal2-popup {
231
+ grid-column: 1;
232
+ grid-row: 3;
233
+ align-self: end;
234
+ }
235
+ .swal2-container.swal2-bottom > .swal2-popup {
236
+ grid-column: 2;
237
+ grid-row: 3;
238
+ justify-self: center;
239
+ align-self: end;
240
+ }
241
+ .swal2-container.swal2-bottom-end > .swal2-popup, .swal2-container.swal2-bottom-right > .swal2-popup {
242
+ grid-column: 3;
243
+ grid-row: 3;
244
+ align-self: end;
245
+ justify-self: end;
246
+ }
247
+ .swal2-container.swal2-grow-row > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup {
248
+ grid-column: 1/4;
249
+ width: 100%;
250
+ }
251
+ .swal2-container.swal2-grow-column > .swal2-popup, .swal2-container.swal2-grow-fullscreen > .swal2-popup {
252
+ grid-row: 1/4;
253
+ align-self: stretch;
254
+ }
255
+ .swal2-container.swal2-no-transition {
256
+ transition: none !important;
257
+ }
258
+
259
+ .swal2-popup {
260
+ display: none;
261
+ position: relative;
262
+ box-sizing: border-box;
263
+ grid-template-columns: minmax(0, 100%);
264
+ width: 32em;
265
+ max-width: 100%;
266
+ padding: 0 0 1.25em;
267
+ border: none;
268
+ border-radius: 5px;
269
+ background: #fff;
270
+ color: #545454;
271
+ font-family: inherit;
272
+ font-size: 1rem;
273
+ }
274
+ .swal2-popup:focus {
275
+ outline: none;
276
+ }
277
+ .swal2-popup.swal2-loading {
278
+ overflow-y: hidden;
279
+ }
280
+
281
+ .swal2-title {
282
+ position: relative;
283
+ max-width: 100%;
284
+ margin: 0;
285
+ padding: 0.8em 1em 0;
286
+ color: inherit;
287
+ font-size: 1.875em;
288
  font-weight: 600;
289
+ text-align: center;
290
  text-transform: none;
291
+ word-wrap: break-word;
292
+ }
293
+
294
+ .swal2-actions {
295
+ display: flex;
296
+ z-index: 1;
297
+ box-sizing: border-box;
298
+ flex-wrap: wrap;
299
+ align-items: center;
300
+ justify-content: center;
301
+ width: auto;
302
+ margin: 1.25em auto 0;
303
  padding: 0;
304
+ }
305
+ .swal2-actions:not(.swal2-loading) .swal2-styled[disabled] {
306
+ opacity: 0.4;
307
+ }
308
+ .swal2-actions:not(.swal2-loading) .swal2-styled:hover {
309
+ background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1));
310
+ }
311
+ .swal2-actions:not(.swal2-loading) .swal2-styled:active {
312
+ background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2));
313
+ }
314
+
315
+ .swal2-loader {
316
+ display: none;
317
+ align-items: center;
318
+ justify-content: center;
319
+ width: 2.2em;
320
+ height: 2.2em;
321
+ margin: 0 1.875em;
322
+ -webkit-animation: swal2-rotate-loading 1.5s linear 0s infinite normal;
323
+ animation: swal2-rotate-loading 1.5s linear 0s infinite normal;
324
+ border-width: 0.25em;
325
+ border-style: solid;
326
+ border-radius: 100%;
327
+ border-color: #2778c4 transparent #2778c4 transparent;
328
+ }
329
+
330
+ .swal2-styled {
331
+ margin: 0.3125em;
332
+ padding: 0.625em 1.1em;
333
+ transition: box-shadow 0.1s;
334
+ box-shadow: 0 0 0 3px transparent;
335
+ font-weight: 500;
336
+ }
337
+ .swal2-styled:not([disabled]) {
338
+ cursor: pointer;
339
+ }
340
+ .swal2-styled.swal2-confirm {
 
 
 
 
 
 
 
 
341
  border: 0;
342
+ border-radius: 0.25em;
343
+ background: initial;
344
+ background-color: #7066e0;
345
  color: #fff;
346
+ font-size: 1em;
347
+ }
348
+ .swal2-styled.swal2-confirm:focus {
349
+ box-shadow: 0 0 0 3px rgba(112, 102, 224, 0.5);
350
+ }
351
+ .swal2-styled.swal2-deny {
 
 
 
 
352
  border: 0;
353
+ border-radius: 0.25em;
354
+ background: initial;
355
+ background-color: #dc3741;
356
+ color: #fff;
357
+ font-size: 1em;
358
+ }
359
+ .swal2-styled.swal2-deny:focus {
360
+ box-shadow: 0 0 0 3px rgba(220, 55, 65, 0.5);
361
+ }
362
+ .swal2-styled.swal2-cancel {
363
+ border: 0;
364
+ border-radius: 0.25em;
365
+ background: initial;
366
+ background-color: #6e7881;
367
+ color: #fff;
368
+ font-size: 1em;
369
+ }
370
+ .swal2-styled.swal2-cancel:focus {
371
+ box-shadow: 0 0 0 3px rgba(110, 120, 129, 0.5);
372
+ }
373
+ .swal2-styled.swal2-default-outline:focus {
374
+ box-shadow: 0 0 0 3px rgba(100, 150, 200, 0.5);
375
+ }
376
+ .swal2-styled:focus {
377
+ outline: none;
378
+ }
379
+ .swal2-styled::-moz-focus-inner {
380
+ border: 0;
381
+ }
382
+
383
+ .swal2-footer {
384
+ justify-content: center;
385
+ margin: 1em 0 0;
386
+ padding: 1em 1em 0;
387
+ border-top: 1px solid #eee;
388
+ color: inherit;
389
+ font-size: 1em;
390
+ }
391
+
392
+ .swal2-timer-progress-bar-container {
393
+ position: absolute;
394
+ right: 0;
395
+ bottom: 0;
396
+ left: 0;
397
+ grid-column: auto !important;
398
+ overflow: hidden;
399
+ border-bottom-right-radius: 5px;
400
+ border-bottom-left-radius: 5px;
401
+ }
402
+
403
+ .swal2-timer-progress-bar {
404
+ width: 100%;
405
+ height: 0.25em;
406
+ background: rgba(0, 0, 0, 0.2);
407
+ }
408
+
409
+ .swal2-image {
410
+ max-width: 100%;
411
+ margin: 2em auto 1em;
412
+ }
413
+
414
+ .swal2-close {
415
+ z-index: 2;
416
+ align-items: center;
417
+ justify-content: center;
418
+ width: 1.2em;
419
+ height: 1.2em;
420
+ margin-top: 0;
421
+ margin-right: 0;
422
+ margin-bottom: -1.2em;
423
  padding: 0;
424
+ overflow: hidden;
425
+ transition: color 0.1s, box-shadow 0.1s;
426
+ border: none;
427
+ border-radius: 5px;
428
+ background: transparent;
429
+ color: #ccc;
430
  font-family: serif;
431
+ font-family: monospace;
432
+ font-size: 2.5em;
 
433
  cursor: pointer;
434
+ justify-self: end;
435
+ }
436
+ .swal2-close:hover {
437
+ transform: none;
438
+ background: transparent;
439
+ color: #f27474;
440
+ }
441
+ .swal2-close:focus {
442
+ outline: none;
443
+ box-shadow: inset 0 0 0 3px rgba(100, 150, 200, 0.5);
444
+ }
445
+ .swal2-close::-moz-focus-inner {
446
+ border: 0;
447
+ }
448
+
449
+ .swal2-html-container {
450
+ z-index: 1;
451
+ justify-content: center;
452
+ margin: 1em 1.6em 0.3em;
453
  padding: 0;
454
+ overflow: auto;
455
+ color: inherit;
456
+ font-size: 1.125em;
457
+ font-weight: normal;
458
  line-height: normal;
459
+ text-align: center;
460
+ word-wrap: break-word;
461
+ word-break: break-word;
462
+ }
463
+
464
+ .swal2-input,
465
+ .swal2-file,
466
+ .swal2-textarea,
467
+ .swal2-select,
468
+ .swal2-radio,
469
+ .swal2-checkbox {
470
+ margin: 1em 2em 3px;
471
+ }
472
+
473
+ .swal2-input,
474
+ .swal2-file,
475
+ .swal2-textarea {
476
+ box-sizing: border-box;
477
+ width: auto;
478
+ transition: border-color 0.1s, box-shadow 0.1s;
479
  border: 1px solid #d9d9d9;
480
+ border-radius: 0.1875em;
481
+ background: transparent;
482
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;
483
+ color: inherit;
484
+ font-size: 1.125em;
485
+ }
486
+ .swal2-input.swal2-inputerror,
487
+ .swal2-file.swal2-inputerror,
488
+ .swal2-textarea.swal2-inputerror {
489
+ border-color: #f27474 !important;
490
+ box-shadow: 0 0 2px #f27474 !important;
491
+ }
492
+ .swal2-input:focus,
493
+ .swal2-file:focus,
494
+ .swal2-textarea:focus {
495
+ border: 1px solid #b4dbed;
496
+ outline: none;
497
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);
498
+ }
499
+ .swal2-input::-moz-placeholder, .swal2-file::-moz-placeholder, .swal2-textarea::-moz-placeholder {
500
+ color: #ccc;
501
+ }
502
+ .swal2-input::placeholder,
503
+ .swal2-file::placeholder,
504
+ .swal2-textarea::placeholder {
505
+ color: #ccc;
506
+ }
507
+
508
+ .swal2-range {
509
+ margin: 1em 2em 3px;
510
+ background: #fff;
511
+ }
512
+ .swal2-range input {
513
+ width: 80%;
514
+ }
515
+ .swal2-range output {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
516
  width: 20%;
517
+ color: inherit;
518
  font-weight: 600;
519
+ text-align: center;
520
+ }
521
+ .swal2-range input,
522
+ .swal2-range output {
523
+ height: 2.625em;
524
+ padding: 0;
525
+ font-size: 1.125em;
526
+ line-height: 2.625em;
527
+ }
528
+
529
+ .swal2-input {
530
+ height: 2.625em;
531
+ padding: 0 0.75em;
532
+ }
533
+
534
+ .swal2-file {
535
+ width: 75%;
536
+ margin-right: auto;
537
+ margin-left: auto;
538
+ background: transparent;
539
+ font-size: 1.125em;
540
+ }
541
+
542
+ .swal2-textarea {
543
+ height: 6.75em;
544
+ padding: 0.75em;
545
+ }
546
+
547
+ .swal2-select {
548
+ min-width: 50%;
549
+ max-width: 100%;
550
+ padding: 0.375em 0.625em;
551
+ background: transparent;
552
+ color: inherit;
553
+ font-size: 1.125em;
554
+ }
555
+
556
+ .swal2-radio,
557
+ .swal2-checkbox {
558
+ align-items: center;
559
+ justify-content: center;
560
+ background: #fff;
561
+ color: inherit;
562
+ }
563
+ .swal2-radio label,
564
+ .swal2-checkbox label {
565
+ margin: 0 0.6em;
566
+ font-size: 1.125em;
567
+ }
568
+ .swal2-radio input,
569
+ .swal2-checkbox input {
570
+ flex-shrink: 0;
571
+ margin: 0 0.4em;
572
+ }
573
+
574
+ .swal2-input-label {
575
+ display: flex;
576
+ justify-content: center;
577
+ margin: 1em auto 0;
578
+ }
579
+
580
+ .swal2-validation-message {
581
+ align-items: center;
582
+ justify-content: center;
583
+ margin: 1em 0 0;
584
+ padding: 0.625em;
585
  overflow: hidden;
586
+ background: #f0f0f0;
587
+ color: #666666;
588
+ font-size: 1em;
589
  font-weight: 300;
590
+ }
591
+ .swal2-validation-message::before {
592
+ content: "!";
593
+ display: inline-block;
594
+ width: 1.5em;
595
+ min-width: 1.5em;
596
+ height: 1.5em;
597
+ margin: 0 0.625em;
598
+ border-radius: 50%;
599
+ background-color: #f27474;
600
+ color: #fff;
601
+ font-weight: 600;
602
+ line-height: 1.5em;
603
+ text-align: center;
604
+ }
 
 
 
 
 
 
 
 
 
605
 
606
  .swal2-icon {
607
+ position: relative;
608
+ box-sizing: content-box;
609
+ justify-content: center;
610
+ width: 5em;
611
+ height: 5em;
612
+ margin: 2.5em auto 0.6em;
613
+ border: 0.25em solid transparent;
614
+ border-radius: 50%;
615
+ border-color: #000;
616
+ font-family: inherit;
617
+ line-height: 5em;
618
+ cursor: default;
619
+ -webkit-user-select: none;
620
+ -moz-user-select: none;
621
+ user-select: none;
622
+ }
623
+ .swal2-icon .swal2-icon-content {
624
+ display: flex;
625
+ align-items: center;
626
+ font-size: 3.75em;
627
+ }
628
+ .swal2-icon.swal2-error {
629
+ border-color: #f27474;
630
+ color: #f27474;
631
+ }
632
+ .swal2-icon.swal2-error .swal2-x-mark {
633
+ position: relative;
634
+ flex-grow: 1;
635
+ }
636
+ .swal2-icon.swal2-error [class^=swal2-x-mark-line] {
637
+ display: block;
638
+ position: absolute;
639
+ top: 2.3125em;
640
+ width: 2.9375em;
641
+ height: 0.3125em;
642
+ border-radius: 0.125em;
643
+ background-color: #f27474;
644
+ }
645
+ .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] {
646
+ left: 1.0625em;
647
+ transform: rotate(45deg);
648
+ }
649
+ .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] {
650
+ right: 1em;
651
+ transform: rotate(-45deg);
652
+ }
653
+ .swal2-icon.swal2-error.swal2-icon-show {
654
+ -webkit-animation: swal2-animate-error-icon 0.5s;
655
+ animation: swal2-animate-error-icon 0.5s;
656
+ }
657
+ .swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark {
658
+ -webkit-animation: swal2-animate-error-x-mark 0.5s;
659
+ animation: swal2-animate-error-x-mark 0.5s;
660
+ }
661
+ .swal2-icon.swal2-warning {
662
  border-color: #facea8;
663
+ color: #f8bb86;
664
+ }
665
+ .swal2-icon.swal2-warning.swal2-icon-show {
666
+ -webkit-animation: swal2-animate-error-icon 0.5s;
667
+ animation: swal2-animate-error-icon 0.5s;
668
+ }
669
+ .swal2-icon.swal2-warning.swal2-icon-show .swal2-icon-content {
670
+ -webkit-animation: swal2-animate-i-mark 0.5s;
671
+ animation: swal2-animate-i-mark 0.5s;
672
+ }
673
+ .swal2-icon.swal2-info {
674
  border-color: #9de0f6;
675
+ color: #3fc3ee;
676
+ }
677
+ .swal2-icon.swal2-info.swal2-icon-show {
678
+ -webkit-animation: swal2-animate-error-icon 0.5s;
679
+ animation: swal2-animate-error-icon 0.5s;
680
+ }
681
+ .swal2-icon.swal2-info.swal2-icon-show .swal2-icon-content {
682
+ -webkit-animation: swal2-animate-i-mark 0.8s;
683
+ animation: swal2-animate-i-mark 0.8s;
684
+ }
685
+ .swal2-icon.swal2-question {
686
  border-color: #c9dae1;
687
+ color: #87adbd;
688
+ }
689
+ .swal2-icon.swal2-question.swal2-icon-show {
690
+ -webkit-animation: swal2-animate-error-icon 0.5s;
691
+ animation: swal2-animate-error-icon 0.5s;
692
+ }
693
+ .swal2-icon.swal2-question.swal2-icon-show .swal2-icon-content {
694
+ -webkit-animation: swal2-animate-question-mark 0.8s;
695
+ animation: swal2-animate-question-mark 0.8s;
696
+ }
697
+ .swal2-icon.swal2-success {
698
+ border-color: #a5dc86;
699
+ color: #a5dc86;
700
+ }
701
+ .swal2-icon.swal2-success [class^=swal2-success-circular-line] {
702
+ position: absolute;
703
+ width: 3.75em;
704
+ height: 7.5em;
705
+ transform: rotate(45deg);
706
+ border-radius: 50%;
707
+ }
708
+ .swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left] {
709
+ top: -0.4375em;
710
+ left: -2.0635em;
711
+ transform: rotate(-45deg);
712
+ transform-origin: 3.75em 3.75em;
713
+ border-radius: 7.5em 0 0 7.5em;
714
+ }
715
+ .swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right] {
716
+ top: -0.6875em;
717
+ left: 1.875em;
718
+ transform: rotate(-45deg);
719
+ transform-origin: 0 3.75em;
720
+ border-radius: 0 7.5em 7.5em 0;
721
+ }
722
+ .swal2-icon.swal2-success .swal2-success-ring {
723
+ position: absolute;
724
+ z-index: 2;
725
+ top: -0.25em;
726
+ left: -0.25em;
727
+ box-sizing: content-box;
728
+ width: 100%;
729
+ height: 100%;
730
+ border: 0.25em solid rgba(165, 220, 134, 0.3);
731
+ border-radius: 50%;
732
+ }
733
+ .swal2-icon.swal2-success .swal2-success-fix {
734
+ position: absolute;
735
+ z-index: 1;
736
+ top: 0.5em;
737
+ left: 1.625em;
738
+ width: 0.4375em;
739
+ height: 5.625em;
740
+ transform: rotate(-45deg);
741
+ }
742
+ .swal2-icon.swal2-success [class^=swal2-success-line] {
743
+ display: block;
744
+ position: absolute;
745
+ z-index: 2;
746
+ height: 0.3125em;
747
+ border-radius: 0.125em;
748
+ background-color: #a5dc86;
749
+ }
750
+ .swal2-icon.swal2-success [class^=swal2-success-line][class$=tip] {
751
+ top: 2.875em;
752
+ left: 0.8125em;
753
+ width: 1.5625em;
754
+ transform: rotate(45deg);
755
+ }
756
+ .swal2-icon.swal2-success [class^=swal2-success-line][class$=long] {
757
+ top: 2.375em;
758
+ right: 0.5em;
759
+ width: 2.9375em;
760
+ transform: rotate(-45deg);
761
+ }
762
+ .swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip {
763
+ -webkit-animation: swal2-animate-success-line-tip 0.75s;
764
+ animation: swal2-animate-success-line-tip 0.75s;
765
+ }
766
+ .swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long {
767
+ -webkit-animation: swal2-animate-success-line-long 0.75s;
768
+ animation: swal2-animate-success-line-long 0.75s;
769
+ }
770
+ .swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right {
771
+ -webkit-animation: swal2-rotate-success-circular-line 4.25s ease-in;
772
+ animation: swal2-rotate-success-circular-line 4.25s ease-in;
773
+ }
774
+
775
+ .swal2-progress-steps {
776
+ flex-wrap: wrap;
777
+ align-items: center;
778
+ max-width: 100%;
779
+ margin: 1.25em auto;
780
+ padding: 0;
781
+ background: transparent;
782
+ font-weight: 600;
783
+ }
784
+ .swal2-progress-steps li {
785
  display: inline-block;
786
+ position: relative;
787
+ }
788
+ .swal2-progress-steps .swal2-progress-step {
789
+ z-index: 20;
790
+ flex-shrink: 0;
791
+ width: 2em;
792
+ height: 2em;
793
  border-radius: 2em;
794
+ background: #2778c4;
795
  color: #fff;
 
796
  line-height: 2em;
797
  text-align: center;
798
+ }
799
+ .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step {
800
+ background: #2778c4;
801
+ }
802
+ .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step {
803
+ background: #add8e6;
804
+ color: #fff;
805
+ }
806
+ .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line {
807
+ background: #add8e6;
808
+ }
809
+ .swal2-progress-steps .swal2-progress-step-line {
810
+ z-index: 10;
811
+ flex-shrink: 0;
812
+ width: 2.5em;
813
+ height: 0.4em;
814
  margin: 0 -1px;
815
+ background: #2778c4;
816
+ }
817
+
818
+ [class^=swal2] {
819
+ -webkit-tap-highlight-color: transparent;
820
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
821
 
822
  .swal2-show {
823
+ -webkit-animation: swal2-show 0.3s;
824
+ animation: swal2-show 0.3s;
825
+ }
 
 
826
 
827
  .swal2-hide {
828
+ -webkit-animation: swal2-hide 0.15s forwards;
829
+ animation: swal2-hide 0.15s forwards;
830
+ }
831
+
832
+ .swal2-noanimation {
833
+ transition: none;
834
+ }
835
+
836
+ .swal2-scrollbar-measure {
837
+ position: absolute;
838
+ top: -9999px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
839
  width: 50px;
840
+ height: 50px;
841
+ overflow: scroll;
842
+ }
843
+
844
+ .swal2-rtl .swal2-close {
845
+ margin-right: initial;
846
+ margin-left: 0;
847
+ }
848
+ .swal2-rtl .swal2-timer-progress-bar {
 
 
 
 
 
 
 
 
 
 
 
 
 
849
  right: 0;
850
+ left: auto;
851
+ }
852
+
853
+ .leave-russia-now-and-apply-your-skills-to-the-world {
854
+ display: flex;
855
+ position: fixed;
856
+ z-index: 1939;
857
+ top: 0;
 
 
 
 
 
 
 
 
 
858
  right: 0;
859
+ bottom: 0;
860
+ left: 0;
861
+ flex-direction: column;
862
+ align-items: center;
863
+ justify-content: center;
864
+ padding: 25px 0 20px;
865
+ background: #20232a;
866
+ color: #fff;
867
+ text-align: center;
868
+ }
869
+ .leave-russia-now-and-apply-your-skills-to-the-world div {
870
+ max-width: 560px;
871
+ margin: 10px;
872
+ line-height: 146%;
873
+ }
874
+ .leave-russia-now-and-apply-your-skills-to-the-world iframe {
875
+ max-width: 100%;
876
+ max-height: 55.5555555556vmin;
877
+ margin: 16px auto;
878
+ }
879
+ .leave-russia-now-and-apply-your-skills-to-the-world strong {
880
+ border-bottom: 2px dashed white;
881
+ }
882
+ .leave-russia-now-and-apply-your-skills-to-the-world button {
883
+ display: flex;
884
+ position: fixed;
885
+ z-index: 1940;
886
+ top: 0;
887
+ right: 0;
888
+ align-items: center;
889
+ justify-content: center;
890
+ width: 48px;
891
+ height: 48px;
892
+ margin-right: 10px;
893
+ margin-bottom: -10px;
894
+ border: none;
895
+ background: transparent;
896
+ color: #aaa;
897
+ font-size: 48px;
898
+ font-weight: bold;
899
+ cursor: pointer;
900
+ }
901
+ .leave-russia-now-and-apply-your-skills-to-the-world button:hover {
902
+ color: #fff;
903
+ }
904
+
905
+ @-webkit-keyframes swal2-toast-show {
906
+ 0% {
907
+ transform: translateY(-0.625em) rotateZ(2deg);
908
+ }
909
+ 33% {
910
+ transform: translateY(0) rotateZ(-2deg);
911
+ }
912
+ 66% {
913
+ transform: translateY(0.3125em) rotateZ(2deg);
914
+ }
915
+ 100% {
916
+ transform: translateY(0) rotateZ(0deg);
917
+ }
918
+ }
919
+
920
+ @keyframes swal2-toast-show {
921
+ 0% {
922
+ transform: translateY(-0.625em) rotateZ(2deg);
923
+ }
924
+ 33% {
925
+ transform: translateY(0) rotateZ(-2deg);
926
+ }
927
+ 66% {
928
+ transform: translateY(0.3125em) rotateZ(2deg);
929
+ }
930
+ 100% {
931
+ transform: translateY(0) rotateZ(0deg);
932
+ }
933
+ }
934
+ @-webkit-keyframes swal2-toast-hide {
935
+ 100% {
936
+ transform: rotateZ(1deg);
937
+ opacity: 0;
938
+ }
939
+ }
940
+ @keyframes swal2-toast-hide {
941
+ 100% {
942
+ transform: rotateZ(1deg);
943
+ opacity: 0;
944
+ }
945
+ }
946
+ @-webkit-keyframes swal2-toast-animate-success-line-tip {
947
+ 0% {
948
+ top: 0.5625em;
949
+ left: 0.0625em;
950
+ width: 0;
951
+ }
952
+ 54% {
953
+ top: 0.125em;
954
+ left: 0.125em;
955
+ width: 0;
956
+ }
957
+ 70% {
958
+ top: 0.625em;
959
+ left: -0.25em;
960
+ width: 1.625em;
961
+ }
962
+ 84% {
963
+ top: 1.0625em;
964
+ left: 0.75em;
965
+ width: 0.5em;
966
+ }
967
+ 100% {
968
+ top: 1.125em;
969
+ left: 0.1875em;
970
+ width: 0.75em;
971
+ }
972
+ }
973
+ @keyframes swal2-toast-animate-success-line-tip {
974
+ 0% {
975
+ top: 0.5625em;
976
+ left: 0.0625em;
977
+ width: 0;
978
+ }
979
+ 54% {
980
+ top: 0.125em;
981
+ left: 0.125em;
982
+ width: 0;
983
+ }
984
+ 70% {
985
+ top: 0.625em;
986
+ left: -0.25em;
987
+ width: 1.625em;
988
+ }
989
+ 84% {
990
+ top: 1.0625em;
991
+ left: 0.75em;
992
+ width: 0.5em;
993
+ }
994
+ 100% {
995
+ top: 1.125em;
996
+ left: 0.1875em;
997
+ width: 0.75em;
998
+ }
999
+ }
1000
+ @-webkit-keyframes swal2-toast-animate-success-line-long {
1001
+ 0% {
1002
+ top: 1.625em;
1003
+ right: 1.375em;
1004
+ width: 0;
1005
+ }
1006
+ 65% {
1007
+ top: 1.25em;
1008
+ right: 0.9375em;
1009
+ width: 0;
1010
+ }
1011
+ 84% {
1012
+ top: 0.9375em;
1013
+ right: 0;
1014
+ width: 1.125em;
1015
+ }
1016
+ 100% {
1017
+ top: 0.9375em;
1018
+ right: 0.1875em;
1019
+ width: 1.375em;
1020
+ }
1021
+ }
1022
+ @keyframes swal2-toast-animate-success-line-long {
1023
+ 0% {
1024
+ top: 1.625em;
1025
+ right: 1.375em;
1026
+ width: 0;
1027
+ }
1028
+ 65% {
1029
+ top: 1.25em;
1030
+ right: 0.9375em;
1031
+ width: 0;
1032
+ }
1033
+ 84% {
1034
+ top: 0.9375em;
1035
+ right: 0;
1036
+ width: 1.125em;
1037
+ }
1038
+ 100% {
1039
+ top: 0.9375em;
1040
+ right: 0.1875em;
1041
+ width: 1.375em;
1042
+ }
1043
+ }
1044
+ @-webkit-keyframes swal2-show {
1045
+ 0% {
1046
+ transform: scale(0.7);
1047
+ }
1048
+ 45% {
1049
+ transform: scale(1.05);
1050
+ }
1051
+ 80% {
1052
+ transform: scale(0.95);
1053
+ }
1054
+ 100% {
1055
+ transform: scale(1);
1056
+ }
1057
+ }
1058
+ @keyframes swal2-show {
1059
+ 0% {
1060
+ transform: scale(0.7);
1061
+ }
1062
+ 45% {
1063
+ transform: scale(1.05);
1064
+ }
1065
+ 80% {
1066
+ transform: scale(0.95);
1067
+ }
1068
+ 100% {
1069
+ transform: scale(1);
1070
+ }
1071
+ }
1072
+ @-webkit-keyframes swal2-hide {
1073
+ 0% {
1074
+ transform: scale(1);
1075
+ opacity: 1;
1076
+ }
1077
+ 100% {
1078
+ transform: scale(0.5);
1079
+ opacity: 0;
1080
+ }
1081
+ }
1082
+ @keyframes swal2-hide {
1083
+ 0% {
1084
+ transform: scale(1);
1085
+ opacity: 1;
1086
+ }
1087
+ 100% {
1088
+ transform: scale(0.5);
1089
+ opacity: 0;
1090
+ }
1091
+ }
1092
+ @-webkit-keyframes swal2-animate-success-line-tip {
1093
+ 0% {
1094
+ top: 1.1875em;
1095
+ left: 0.0625em;
1096
+ width: 0;
1097
+ }
1098
+ 54% {
1099
+ top: 1.0625em;
1100
+ left: 0.125em;
1101
+ width: 0;
1102
+ }
1103
+ 70% {
1104
+ top: 2.1875em;
1105
+ left: -0.375em;
1106
+ width: 3.125em;
1107
+ }
1108
+ 84% {
1109
+ top: 3em;
1110
+ left: 1.3125em;
1111
+ width: 1.0625em;
1112
+ }
1113
+ 100% {
1114
+ top: 2.8125em;
1115
+ left: 0.8125em;
1116
+ width: 1.5625em;
1117
+ }
1118
+ }
1119
+ @keyframes swal2-animate-success-line-tip {
1120
+ 0% {
1121
+ top: 1.1875em;
1122
+ left: 0.0625em;
1123
+ width: 0;
1124
+ }
1125
+ 54% {
1126
+ top: 1.0625em;
1127
+ left: 0.125em;
1128
+ width: 0;
1129
+ }
1130
+ 70% {
1131
+ top: 2.1875em;
1132
+ left: -0.375em;
1133
+ width: 3.125em;
1134
+ }
1135
+ 84% {
1136
+ top: 3em;
1137
+ left: 1.3125em;
1138
+ width: 1.0625em;
1139
+ }
1140
+ 100% {
1141
+ top: 2.8125em;
1142
+ left: 0.8125em;
1143
+ width: 1.5625em;
1144
+ }
1145
+ }
1146
+ @-webkit-keyframes swal2-animate-success-line-long {
1147
+ 0% {
1148
+ top: 3.375em;
1149
+ right: 2.875em;
1150
+ width: 0;
1151
+ }
1152
+ 65% {
1153
+ top: 3.375em;
1154
+ right: 2.875em;
1155
+ width: 0;
1156
+ }
1157
+ 84% {
1158
+ top: 2.1875em;
1159
+ right: 0;
1160
+ width: 3.4375em;
1161
+ }
1162
+ 100% {
1163
+ top: 2.375em;
1164
+ right: 0.5em;
1165
+ width: 2.9375em;
1166
+ }
1167
+ }
1168
+ @keyframes swal2-animate-success-line-long {
1169
+ 0% {
1170
+ top: 3.375em;
1171
+ right: 2.875em;
1172
+ width: 0;
1173
+ }
1174
+ 65% {
1175
+ top: 3.375em;
1176
+ right: 2.875em;
1177
+ width: 0;
1178
+ }
1179
+ 84% {
1180
+ top: 2.1875em;
1181
+ right: 0;
1182
+ width: 3.4375em;
1183
+ }
1184
+ 100% {
1185
+ top: 2.375em;
1186
+ right: 0.5em;
1187
+ width: 2.9375em;
1188
+ }
1189
+ }
1190
+ @-webkit-keyframes swal2-rotate-success-circular-line {
1191
+ 0% {
1192
+ transform: rotate(-45deg);
1193
+ }
1194
+ 5% {
1195
+ transform: rotate(-45deg);
1196
+ }
1197
+ 12% {
1198
+ transform: rotate(-405deg);
1199
+ }
1200
+ 100% {
1201
+ transform: rotate(-405deg);
1202
+ }
1203
+ }
1204
+ @keyframes swal2-rotate-success-circular-line {
1205
+ 0% {
1206
+ transform: rotate(-45deg);
1207
+ }
1208
+ 5% {
1209
+ transform: rotate(-45deg);
1210
+ }
1211
+ 12% {
1212
+ transform: rotate(-405deg);
1213
+ }
1214
+ 100% {
1215
+ transform: rotate(-405deg);
1216
+ }
1217
+ }
1218
+ @-webkit-keyframes swal2-animate-error-x-mark {
1219
+ 0% {
1220
+ margin-top: 1.625em;
1221
+ transform: scale(0.4);
1222
+ opacity: 0;
1223
+ }
1224
+ 50% {
1225
+ margin-top: 1.625em;
1226
+ transform: scale(0.4);
1227
+ opacity: 0;
1228
+ }
1229
+ 80% {
1230
+ margin-top: -0.375em;
1231
+ transform: scale(1.15);
1232
+ }
1233
+ 100% {
1234
+ margin-top: 0;
1235
+ transform: scale(1);
1236
+ opacity: 1;
1237
+ }
1238
+ }
1239
+ @keyframes swal2-animate-error-x-mark {
1240
+ 0% {
1241
+ margin-top: 1.625em;
1242
+ transform: scale(0.4);
1243
+ opacity: 0;
1244
+ }
1245
+ 50% {
1246
+ margin-top: 1.625em;
1247
+ transform: scale(0.4);
1248
+ opacity: 0;
1249
+ }
1250
+ 80% {
1251
+ margin-top: -0.375em;
1252
+ transform: scale(1.15);
1253
+ }
1254
+ 100% {
1255
+ margin-top: 0;
1256
+ transform: scale(1);
1257
+ opacity: 1;
1258
+ }
1259
+ }
1260
+ @-webkit-keyframes swal2-animate-error-icon {
1261
+ 0% {
1262
+ transform: rotateX(100deg);
1263
+ opacity: 0;
1264
+ }
1265
+ 100% {
1266
+ transform: rotateX(0deg);
1267
+ opacity: 1;
1268
+ }
1269
+ }
1270
+ @keyframes swal2-animate-error-icon {
1271
+ 0% {
1272
+ transform: rotateX(100deg);
1273
+ opacity: 0;
1274
+ }
1275
+ 100% {
1276
+ transform: rotateX(0deg);
1277
+ opacity: 1;
1278
+ }
1279
+ }
1280
+ @-webkit-keyframes swal2-rotate-loading {
1281
+ 0% {
1282
+ transform: rotate(0deg);
1283
+ }
1284
+ 100% {
1285
+ transform: rotate(360deg);
1286
+ }
1287
+ }
1288
+ @keyframes swal2-rotate-loading {
1289
+ 0% {
1290
+ transform: rotate(0deg);
1291
+ }
1292
+ 100% {
1293
+ transform: rotate(360deg);
1294
+ }
1295
+ }
1296
+ @-webkit-keyframes swal2-animate-question-mark {
1297
+ 0% {
1298
+ transform: rotateY(-360deg);
1299
+ }
1300
+ 100% {
1301
+ transform: rotateY(0);
1302
+ }
1303
+ }
1304
+ @keyframes swal2-animate-question-mark {
1305
+ 0% {
1306
+ transform: rotateY(-360deg);
1307
+ }
1308
+ 100% {
1309
+ transform: rotateY(0);
1310
+ }
1311
+ }
1312
+ @-webkit-keyframes swal2-animate-i-mark {
1313
+ 0% {
1314
+ transform: rotateZ(45deg);
1315
+ opacity: 0;
1316
+ }
1317
+ 25% {
1318
+ transform: rotateZ(-25deg);
1319
+ opacity: 0.4;
1320
+ }
1321
+ 50% {
1322
+ transform: rotateZ(15deg);
1323
+ opacity: 0.8;
1324
+ }
1325
+ 75% {
1326
+ transform: rotateZ(-5deg);
1327
+ opacity: 1;
1328
+ }
1329
+ 100% {
1330
+ transform: rotateX(0);
1331
+ opacity: 1;
1332
+ }
1333
+ }
1334
+ @keyframes swal2-animate-i-mark {
1335
+ 0% {
1336
+ transform: rotateZ(45deg);
1337
+ opacity: 0;
1338
+ }
1339
+ 25% {
1340
+ transform: rotateZ(-25deg);
1341
+ opacity: 0.4;
1342
+ }
1343
+ 50% {
1344
+ transform: rotateZ(15deg);
1345
+ opacity: 0.8;
1346
+ }
1347
+ 75% {
1348
+ transform: rotateZ(-5deg);
1349
+ opacity: 1;
1350
+ }
1351
+ 100% {
1352
+ transform: rotateX(0);
1353
+ opacity: 1;
1354
+ }
1355
+ }
1356
+ body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) {
1357
+ overflow: hidden;
1358
+ }
1359
+ body.swal2-height-auto {
1360
+ height: auto !important;
1361
+ }
1362
+ body.swal2-no-backdrop .swal2-container {
1363
+ background-color: transparent !important;
1364
+ pointer-events: none;
1365
+ }
1366
+ body.swal2-no-backdrop .swal2-container .swal2-popup {
1367
+ pointer-events: all;
1368
+ }
1369
+ body.swal2-no-backdrop .swal2-container .swal2-modal {
1370
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
1371
+ }
1372
+ @media print {
1373
+ body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) {
1374
+ overflow-y: scroll !important;
1375
+ }
1376
+ body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) > [aria-hidden=true] {
1377
+ display: none;
1378
+ }
1379
+ body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container {
1380
+ position: static !important;
1381
+ }
1382
+ }
1383
+ body.swal2-toast-shown .swal2-container {
1384
+ box-sizing: border-box;
1385
+ width: 360px;
1386
+ max-width: 100%;
1387
+ background-color: transparent;
1388
+ pointer-events: none;
1389
+ }
1390
+ body.swal2-toast-shown .swal2-container.swal2-top {
1391
+ top: 0;
1392
+ right: auto;
1393
+ bottom: auto;
1394
+ left: 50%;
1395
+ transform: translateX(-50%);
1396
+ }
1397
+ body.swal2-toast-shown .swal2-container.swal2-top-end, body.swal2-toast-shown .swal2-container.swal2-top-right {
1398
+ top: 0;
1399
+ right: 0;
1400
+ bottom: auto;
1401
+ left: auto;
1402
+ }
1403
+ body.swal2-toast-shown .swal2-container.swal2-top-start, body.swal2-toast-shown .swal2-container.swal2-top-left {
1404
+ top: 0;
1405
+ right: auto;
1406
+ bottom: auto;
1407
+ left: 0;
1408
+ }
1409
+ body.swal2-toast-shown .swal2-container.swal2-center-start, body.swal2-toast-shown .swal2-container.swal2-center-left {
1410
+ top: 50%;
1411
+ right: auto;
1412
+ bottom: auto;
1413
+ left: 0;
1414
+ transform: translateY(-50%);
1415
+ }
1416
+ body.swal2-toast-shown .swal2-container.swal2-center {
1417
+ top: 50%;
1418
+ right: auto;
1419
+ bottom: auto;
1420
+ left: 50%;
1421
+ transform: translate(-50%, -50%);
1422
+ }
1423
+ body.swal2-toast-shown .swal2-container.swal2-center-end, body.swal2-toast-shown .swal2-container.swal2-center-right {
1424
+ top: 50%;
1425
+ right: 0;
1426
+ bottom: auto;
1427
+ left: auto;
1428
+ transform: translateY(-50%);
1429
+ }
1430
+ body.swal2-toast-shown .swal2-container.swal2-bottom-start, body.swal2-toast-shown .swal2-container.swal2-bottom-left {
1431
+ top: auto;
1432
+ right: auto;
1433
+ bottom: 0;
1434
+ left: 0;
1435
+ }
1436
+ body.swal2-toast-shown .swal2-container.swal2-bottom {
1437
+ top: auto;
1438
+ right: auto;
1439
+ bottom: 0;
1440
+ left: 50%;
1441
+ transform: translateX(-50%);
1442
+ }
1443
+ body.swal2-toast-shown .swal2-container.swal2-bottom-end, body.swal2-toast-shown .swal2-container.swal2-bottom-right {
1444
+ top: auto;
1445
+ right: 0;
1446
+ bottom: 0;
1447
+ left: auto;
1448
+ }
assets/vendor/sweetalert2/dist/sweetalert2.js CHANGED
@@ -1,1641 +1,4078 @@
1
  /*!
2
- * sweetalert2 v6.6.4
3
- * Released under the MIT License.
4
- */
5
  (function (global, factory) {
6
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
7
- typeof define === 'function' && define.amd ? define(factory) :
8
- (global.Sweetalert2 = factory());
9
- }(this, (function () { 'use strict';
10
-
11
- var defaultParams = {
12
- title: '',
13
- titleText: '',
14
- text: '',
15
- html: '',
16
- type: null,
17
- customClass: '',
18
- target: 'body',
19
- animation: true,
20
- allowOutsideClick: true,
21
- allowEscapeKey: true,
22
- allowEnterKey: true,
23
- showConfirmButton: true,
24
- showCancelButton: false,
25
- preConfirm: null,
26
- confirmButtonText: 'OK',
27
- confirmButtonColor: '#3085d6',
28
- confirmButtonClass: null,
29
- cancelButtonText: 'Cancel',
30
- cancelButtonColor: '#aaa',
31
- cancelButtonClass: null,
32
- buttonsStyling: true,
33
- reverseButtons: false,
34
- focusCancel: false,
35
- showCloseButton: false,
36
- showLoaderOnConfirm: false,
37
- imageUrl: null,
38
- imageWidth: null,
39
- imageHeight: null,
40
- imageClass: null,
41
- timer: null,
42
- width: 500,
43
- padding: 20,
44
- background: '#fff',
45
- input: null,
46
- inputPlaceholder: '',
47
- inputValue: '',
48
- inputOptions: {},
49
- inputAutoTrim: true,
50
- inputClass: null,
51
- inputAttributes: {},
52
- inputValidator: null,
53
- progressSteps: [],
54
- currentProgressStep: null,
55
- progressStepsDistance: '40px',
56
- onOpen: null,
57
- onClose: null,
58
- useRejections: true
59
- };
60
-
61
- var swalPrefix = 'swal2-';
62
-
63
- var prefix = function prefix(items) {
64
- var result = {};
65
- for (var i in items) {
66
- result[items[i]] = swalPrefix + items[i];
67
- }
68
- return result;
69
- };
70
-
71
- var swalClasses = prefix(['container', 'shown', 'iosfix', 'modal', 'overlay', 'fade', 'show', 'hide', 'noanimation', 'close', 'title', 'content', 'buttonswrapper', 'confirm', 'cancel', 'icon', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea', 'inputerror', 'validationerror', 'progresssteps', 'activeprogressstep', 'progresscircle', 'progressline', 'loading', 'styled']);
72
-
73
- var iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']);
74
-
75
- /*
76
- * Set hover, active and focus-states for buttons (source: http://www.sitepoint.com/javascript-generate-lighter-darker-color)
77
- */
78
- var colorLuminance = function colorLuminance(hex, lum) {
79
- // Validate hex string
80
- hex = String(hex).replace(/[^0-9a-f]/gi, '');
81
- if (hex.length < 6) {
82
- hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
83
- }
84
- lum = lum || 0;
85
-
86
- // Convert to decimal and change luminosity
87
- var rgb = '#';
88
- for (var i = 0; i < 3; i++) {
89
- var c = parseInt(hex.substr(i * 2, 2), 16);
90
- c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);
91
- rgb += ('00' + c).substr(c.length);
92
- }
93
-
94
- return rgb;
95
- };
96
-
97
- var uniqueArray = function uniqueArray(arr) {
98
- var result = [];
99
- for (var i in arr) {
100
- if (result.indexOf(arr[i]) === -1) {
101
- result.push(arr[i]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  }
103
- }
104
- return result;
105
- };
106
-
107
- /* global MouseEvent */
108
-
109
- // Remember state in cases where opening and handling a modal will fiddle with it.
110
- var states = {
111
- previousWindowKeyDown: null,
112
- previousActiveElement: null,
113
- previousBodyPadding: null
114
- };
115
-
116
- /*
117
- * Add modal + overlay to DOM
118
- */
119
- var init = function init(params) {
120
- if (typeof document === 'undefined') {
121
- console.error('SweetAlert2 requires document to initialize');
122
- return;
123
- }
124
-
125
- var container = document.createElement('div');
126
- container.className = swalClasses.container;
127
- container.innerHTML = sweetHTML;
128
-
129
- var targetElement = document.querySelector(params.target);
130
- if (!targetElement) {
131
- console.warn('SweetAlert2: Can\'t find the target "' + params.target + '"');
132
- targetElement = document.body;
133
- }
134
- targetElement.appendChild(container);
135
-
136
- var modal = getModal();
137
- var input = getChildByClass(modal, swalClasses.input);
138
- var file = getChildByClass(modal, swalClasses.file);
139
- var range = modal.querySelector('.' + swalClasses.range + ' input');
140
- var rangeOutput = modal.querySelector('.' + swalClasses.range + ' output');
141
- var select = getChildByClass(modal, swalClasses.select);
142
- var checkbox = modal.querySelector('.' + swalClasses.checkbox + ' input');
143
- var textarea = getChildByClass(modal, swalClasses.textarea);
144
-
145
- input.oninput = function () {
146
- sweetAlert.resetValidationError();
147
- };
148
-
149
- input.onkeydown = function (event) {
150
- setTimeout(function () {
151
- if (event.keyCode === 13 && params.allowEnterKey) {
152
- event.stopPropagation();
153
- sweetAlert.clickConfirm();
154
- }
155
- }, 0);
156
- };
157
-
158
- file.onchange = function () {
159
- sweetAlert.resetValidationError();
160
- };
161
-
162
- range.oninput = function () {
163
- sweetAlert.resetValidationError();
164
- rangeOutput.value = range.value;
165
- };
166
-
167
- range.onchange = function () {
168
- sweetAlert.resetValidationError();
169
- range.previousSibling.value = range.value;
170
- };
171
-
172
- select.onchange = function () {
173
- sweetAlert.resetValidationError();
174
- };
175
-
176
- checkbox.onchange = function () {
177
- sweetAlert.resetValidationError();
178
- };
179
-
180
- textarea.oninput = function () {
181
- sweetAlert.resetValidationError();
182
- };
183
-
184
- return modal;
185
- };
186
-
187
- /*
188
- * Manipulate DOM
189
- */
190
-
191
- var sweetHTML = ('\n <div role="dialog" aria-labelledby="' + swalClasses.title + '" aria-describedby="' + swalClasses.content + '" class="' + swalClasses.modal + '" tabindex="-1">\n <ul class="' + swalClasses.progresssteps + '"></ul>\n <div class="' + swalClasses.icon + ' ' + iconTypes.error + '">\n <span class="swal2-x-mark"><span class="swal2-x-mark-line-left"></span><span class="swal2-x-mark-line-right"></span></span>\n </div>\n <div class="' + swalClasses.icon + ' ' + iconTypes.question + '">?</div>\n <div class="' + swalClasses.icon + ' ' + iconTypes.warning + '">!</div>\n <div class="' + swalClasses.icon + ' ' + iconTypes.info + '">i</div>\n <div class="' + swalClasses.icon + ' ' + iconTypes.success + '">\n <div class="swal2-success-circular-line-left"></div>\n <span class="swal2-success-line-tip"></span> <span class="swal2-success-line-long"></span>\n <div class="swal2-success-ring"></div> <div class="swal2-success-fix"></div>\n <div class="swal2-success-circular-line-right"></div>\n </div>\n <img class="' + swalClasses.image + '">\n <h2 class="' + swalClasses.title + '" id="' + swalClasses.title + '"></h2>\n <div id="' + swalClasses.content + '" class="' + swalClasses.content + '"></div>\n <input class="' + swalClasses.input + '">\n <input type="file" class="' + swalClasses.file + '">\n <div class="' + swalClasses.range + '">\n <output></output>\n <input type="range">\n </div>\n <select class="' + swalClasses.select + '"></select>\n <div class="' + swalClasses.radio + '"></div>\n <label for="' + swalClasses.checkbox + '" class="' + swalClasses.checkbox + '">\n <input type="checkbox">\n </label>\n <textarea class="' + swalClasses.textarea + '"></textarea>\n <div class="' + swalClasses.validationerror + '"></div>\n <div class="' + swalClasses.buttonswrapper + '">\n <button type="button" class="' + swalClasses.confirm + '">OK</button>\n <button type="button" class="' + swalClasses.cancel + '">Cancel</button>\n </div>\n <button type="button" class="' + swalClasses.close + '" aria-label="Close this dialog">&times;</button>\n </div>\n').replace(/(^|\n)\s*/g, '');
192
-
193
- var getContainer = function getContainer() {
194
- return document.body.querySelector('.' + swalClasses.container);
195
- };
196
-
197
- var getModal = function getModal() {
198
- return getContainer() ? getContainer().querySelector('.' + swalClasses.modal) : null;
199
- };
200
-
201
- var getIcons = function getIcons() {
202
- var modal = getModal();
203
- return modal.querySelectorAll('.' + swalClasses.icon);
204
- };
205
-
206
- var elementByClass = function elementByClass(className) {
207
- return getContainer() ? getContainer().querySelector('.' + className) : null;
208
- };
209
-
210
- var getTitle = function getTitle() {
211
- return elementByClass(swalClasses.title);
212
- };
213
-
214
- var getContent = function getContent() {
215
- return elementByClass(swalClasses.content);
216
- };
217
-
218
- var getImage = function getImage() {
219
- return elementByClass(swalClasses.image);
220
- };
221
-
222
- var getButtonsWrapper = function getButtonsWrapper() {
223
- return elementByClass(swalClasses.buttonswrapper);
224
- };
225
-
226
- var getProgressSteps = function getProgressSteps() {
227
- return elementByClass(swalClasses.progresssteps);
228
- };
229
-
230
- var getValidationError = function getValidationError() {
231
- return elementByClass(swalClasses.validationerror);
232
- };
233
-
234
- var getConfirmButton = function getConfirmButton() {
235
- return elementByClass(swalClasses.confirm);
236
- };
237
-
238
- var getCancelButton = function getCancelButton() {
239
- return elementByClass(swalClasses.cancel);
240
- };
241
-
242
- var getCloseButton = function getCloseButton() {
243
- return elementByClass(swalClasses.close);
244
- };
245
-
246
- var getFocusableElements = function getFocusableElements(focusCancel) {
247
- var buttons = [getConfirmButton(), getCancelButton()];
248
- if (focusCancel) {
249
- buttons.reverse();
250
- }
251
- var focusableElements = buttons.concat(Array.prototype.slice.call(getModal().querySelectorAll('button, input:not([type=hidden]), textarea, select, a, *[tabindex]:not([tabindex="-1"])')));
252
- return uniqueArray(focusableElements);
253
- };
254
-
255
- var hasClass = function hasClass(elem, className) {
256
- if (elem.classList) {
257
- return elem.classList.contains(className);
258
- }
259
- return false;
260
- };
261
-
262
- var focusInput = function focusInput(input) {
263
- input.focus();
264
-
265
- // place cursor at end of text in text input
266
- if (input.type !== 'file') {
267
- // http://stackoverflow.com/a/2345915/1331425
268
- var val = input.value;
269
- input.value = '';
270
- input.value = val;
271
- }
272
- };
273
-
274
- var addClass = function addClass(elem, className) {
275
- if (!elem || !className) {
276
- return;
277
- }
278
- var classes = className.split(/\s+/).filter(Boolean);
279
- classes.forEach(function (className) {
280
- elem.classList.add(className);
281
- });
282
- };
283
-
284
- var removeClass = function removeClass(elem, className) {
285
- if (!elem || !className) {
286
- return;
287
- }
288
- var classes = className.split(/\s+/).filter(Boolean);
289
- classes.forEach(function (className) {
290
- elem.classList.remove(className);
291
- });
292
- };
293
-
294
- var getChildByClass = function getChildByClass(elem, className) {
295
- for (var i = 0; i < elem.childNodes.length; i++) {
296
- if (hasClass(elem.childNodes[i], className)) {
297
- return elem.childNodes[i];
298
  }
299
- }
300
- };
301
-
302
- var show = function show(elem, display) {
303
- if (!display) {
304
- display = 'block';
305
- }
306
- elem.style.opacity = '';
307
- elem.style.display = display;
308
- };
309
-
310
- var hide = function hide(elem) {
311
- elem.style.opacity = '';
312
- elem.style.display = 'none';
313
- };
314
-
315
- var empty = function empty(elem) {
316
- while (elem.firstChild) {
317
- elem.removeChild(elem.firstChild);
318
- }
319
- };
320
-
321
- // borrowed from jqeury $(elem).is(':visible') implementation
322
- var isVisible = function isVisible(elem) {
323
- return elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length;
324
- };
325
-
326
- var removeStyleProperty = function removeStyleProperty(elem, property) {
327
- if (elem.style.removeProperty) {
328
- elem.style.removeProperty(property);
329
- } else {
330
- elem.style.removeAttribute(property);
331
- }
332
- };
333
-
334
- var fireClick = function fireClick(node) {
335
- if (!isVisible(node)) {
336
- return false;
337
- }
338
-
339
- // Taken from http://www.nonobtrusive.com/2011/11/29/programatically-fire-crossbrowser-click-event-with-javascript/
340
- // Then fixed for today's Chrome browser.
341
- if (typeof MouseEvent === 'function') {
342
- // Up-to-date approach
343
- var mevt = new MouseEvent('click', {
344
- view: window,
345
- bubbles: false,
346
- cancelable: true
347
- });
348
- node.dispatchEvent(mevt);
349
- } else if (document.createEvent) {
350
- // Fallback
351
- var evt = document.createEvent('MouseEvents');
352
- evt.initEvent('click', false, false);
353
- node.dispatchEvent(evt);
354
- } else if (document.createEventObject) {
355
- node.fireEvent('onclick');
356
- } else if (typeof node.onclick === 'function') {
357
- node.onclick();
358
- }
359
- };
360
-
361
- var animationEndEvent = function () {
362
- var testEl = document.createElement('div');
363
- var transEndEventNames = {
364
- 'WebkitAnimation': 'webkitAnimationEnd',
365
- 'OAnimation': 'oAnimationEnd oanimationend',
366
- 'msAnimation': 'MSAnimationEnd',
367
- 'animation': 'animationend'
368
- };
369
- for (var i in transEndEventNames) {
370
- if (transEndEventNames.hasOwnProperty(i) && testEl.style[i] !== undefined) {
371
- return transEndEventNames[i];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
372
  }
373
- }
374
-
375
- return false;
376
- }();
377
-
378
- // Reset previous window keydown handler and focued element
379
- var resetPrevState = function resetPrevState() {
380
- window.onkeydown = states.previousWindowKeyDown;
381
- if (states.previousActiveElement && states.previousActiveElement.focus) {
382
- var x = window.scrollX;
383
- var y = window.scrollY;
384
- states.previousActiveElement.focus();
385
- if (x && y) {
386
- // IE has no scrollX/scrollY support
387
- window.scrollTo(x, y);
388
  }
389
- }
390
- };
 
 
 
 
 
 
 
391
 
392
- // Measure width of scrollbar
393
- // https://github.com/twbs/bootstrap/blob/master/js/modal.js#L279-L286
394
- var measureScrollbar = function measureScrollbar() {
395
- var supportsTouch = 'ontouchstart' in window || navigator.msMaxTouchPoints;
396
- if (supportsTouch) {
397
- return 0;
398
- }
399
- var scrollDiv = document.createElement('div');
400
- scrollDiv.style.width = '50px';
401
- scrollDiv.style.height = '50px';
402
- scrollDiv.style.overflow = 'scroll';
403
- document.body.appendChild(scrollDiv);
404
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
405
- document.body.removeChild(scrollDiv);
406
- return scrollbarWidth;
407
- };
408
 
409
- // JavaScript Debounce Function
410
- // Simplivied version of https://davidwalsh.name/javascript-debounce-function
411
- var debounce = function debounce(func, wait) {
412
- var timeout = void 0;
413
- return function () {
414
- var later = function later() {
415
- timeout = null;
416
- func();
417
- };
418
- clearTimeout(timeout);
419
- timeout = setTimeout(later, wait);
420
- };
421
- };
422
 
423
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
424
- return typeof obj;
425
- } : function (obj) {
426
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
427
- };
428
 
 
 
 
429
 
 
430
 
 
 
 
 
 
 
431
 
 
 
 
 
432
 
 
 
 
433
 
 
 
 
434
 
 
 
 
435
 
 
 
 
 
 
 
 
 
 
 
 
 
436
 
 
 
 
 
 
 
 
 
 
 
 
437
 
 
 
 
438
 
 
 
439
 
 
 
440
 
441
 
 
 
 
 
442
 
 
 
 
443
 
 
 
 
 
 
444
 
 
 
 
445
 
 
446
 
 
 
447
 
 
 
 
 
 
448
 
449
- var _extends = Object.assign || function (target) {
450
- for (var i = 1; i < arguments.length; i++) {
451
- var source = arguments[i];
452
 
453
- for (var key in source) {
454
- if (Object.prototype.hasOwnProperty.call(source, key)) {
455
- target[key] = source[key];
456
- }
457
- }
458
- }
 
 
 
 
 
 
 
 
 
459
 
460
- return target;
461
- };
462
 
463
- var modalParams = _extends({}, defaultParams);
464
- var queue = [];
465
- var swal2Observer = void 0;
 
 
 
466
 
467
- /*
468
- * Set type, text and actions on modal
469
- */
470
- var setParameters = function setParameters(params) {
471
- var modal = getModal() || init(params);
472
 
473
- for (var param in params) {
474
- if (!defaultParams.hasOwnProperty(param) && param !== 'extraParams') {
475
- console.warn('SweetAlert2: Unknown parameter "' + param + '"');
476
- }
477
- }
478
-
479
- // Set modal width
480
- modal.style.width = typeof params.width === 'number' ? params.width + 'px' : params.width;
481
-
482
- modal.style.padding = params.padding + 'px';
483
- modal.style.background = params.background;
484
- var successIconParts = modal.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');
485
- for (var i = 0; i < successIconParts.length; i++) {
486
- successIconParts[i].style.background = params.background;
487
- }
488
-
489
- var title = getTitle();
490
- var content = getContent();
491
- var buttonsWrapper = getButtonsWrapper();
492
- var confirmButton = getConfirmButton();
493
- var cancelButton = getCancelButton();
494
- var closeButton = getCloseButton();
495
-
496
- // Title
497
- if (params.titleText) {
498
- title.innerText = params.titleText;
499
- } else {
500
- title.innerHTML = params.title.split('\n').join('<br>');
501
- }
502
-
503
- // Content
504
- if (params.text || params.html) {
505
- if (_typeof(params.html) === 'object') {
506
- content.innerHTML = '';
507
- if (0 in params.html) {
508
- for (var _i = 0; _i in params.html; _i++) {
509
- content.appendChild(params.html[_i].cloneNode(true));
510
- }
511
- } else {
512
- content.appendChild(params.html.cloneNode(true));
513
- }
514
- } else if (params.html) {
515
- content.innerHTML = params.html;
516
- } else if (params.text) {
517
- content.textContent = params.text;
518
- }
519
- show(content);
520
- } else {
521
- hide(content);
522
- }
523
-
524
- // Close button
525
- if (params.showCloseButton) {
526
- show(closeButton);
527
- } else {
528
- hide(closeButton);
529
- }
530
-
531
- // Custom Class
532
- modal.className = swalClasses.modal;
533
- if (params.customClass) {
534
- addClass(modal, params.customClass);
535
- }
536
-
537
- // Progress steps
538
- var progressStepsContainer = getProgressSteps();
539
- var currentProgressStep = parseInt(params.currentProgressStep === null ? sweetAlert.getQueueStep() : params.currentProgressStep, 10);
540
- if (params.progressSteps.length) {
541
- show(progressStepsContainer);
542
- empty(progressStepsContainer);
543
- if (currentProgressStep >= params.progressSteps.length) {
544
- console.warn('SweetAlert2: Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');
545
- }
546
- params.progressSteps.forEach(function (step, index) {
547
- var circle = document.createElement('li');
548
- addClass(circle, swalClasses.progresscircle);
549
- circle.innerHTML = step;
550
- if (index === currentProgressStep) {
551
- addClass(circle, swalClasses.activeprogressstep);
552
- }
553
- progressStepsContainer.appendChild(circle);
554
- if (index !== params.progressSteps.length - 1) {
555
- var line = document.createElement('li');
556
- addClass(line, swalClasses.progressline);
557
- line.style.width = params.progressStepsDistance;
558
- progressStepsContainer.appendChild(line);
559
- }
560
  });
561
- } else {
562
- hide(progressStepsContainer);
563
- }
564
-
565
- // Icon
566
- var icons = getIcons();
567
- for (var _i2 = 0; _i2 < icons.length; _i2++) {
568
- hide(icons[_i2]);
569
- }
570
- if (params.type) {
571
- var validType = false;
572
- for (var iconType in iconTypes) {
573
- if (params.type === iconType) {
574
- validType = true;
575
- break;
576
- }
577
- }
578
- if (!validType) {
579
- console.error('SweetAlert2: Unknown alert type: ' + params.type);
580
- return false;
581
- }
582
- var icon = modal.querySelector('.' + swalClasses.icon + '.' + iconTypes[params.type]);
583
- show(icon);
584
-
585
- // Animate icon
586
- if (params.animation) {
587
- switch (params.type) {
588
- case 'success':
589
- addClass(icon, 'swal2-animate-success-icon');
590
- addClass(icon.querySelector('.swal2-success-line-tip'), 'swal2-animate-success-line-tip');
591
- addClass(icon.querySelector('.swal2-success-line-long'), 'swal2-animate-success-line-long');
592
- break;
593
- case 'error':
594
- addClass(icon, 'swal2-animate-error-icon');
595
- addClass(icon.querySelector('.swal2-x-mark'), 'swal2-animate-x-mark');
596
- break;
597
- default:
598
- break;
599
- }
600
- }
601
- }
602
-
603
- // Custom image
604
- var image = getImage();
605
- if (params.imageUrl) {
606
- image.setAttribute('src', params.imageUrl);
607
- show(image);
608
-
609
- if (params.imageWidth) {
610
- image.setAttribute('width', params.imageWidth);
611
- } else {
612
- image.removeAttribute('width');
613
- }
614
 
615
- if (params.imageHeight) {
616
- image.setAttribute('height', params.imageHeight);
617
- } else {
618
- image.removeAttribute('height');
619
- }
620
 
621
- image.className = swalClasses.image;
622
- if (params.imageClass) {
623
- addClass(image, params.imageClass);
624
- }
625
- } else {
626
- hide(image);
627
- }
628
-
629
- // Cancel button
630
- if (params.showCancelButton) {
631
- cancelButton.style.display = 'inline-block';
632
- } else {
633
- hide(cancelButton);
634
- }
635
-
636
- // Confirm button
637
- if (params.showConfirmButton) {
638
- removeStyleProperty(confirmButton, 'display');
639
- } else {
640
- hide(confirmButton);
641
- }
642
-
643
- // Buttons wrapper
644
- if (!params.showConfirmButton && !params.showCancelButton) {
645
- hide(buttonsWrapper);
646
- } else {
647
- show(buttonsWrapper);
648
- }
649
-
650
- // Edit text on cancel and confirm buttons
651
- confirmButton.innerHTML = params.confirmButtonText;
652
- cancelButton.innerHTML = params.cancelButtonText;
653
-
654
- // Set buttons to selected background colors
655
- if (params.buttonsStyling) {
656
- confirmButton.style.backgroundColor = params.confirmButtonColor;
657
- cancelButton.style.backgroundColor = params.cancelButtonColor;
658
- }
659
-
660
- // Add buttons custom classes
661
- confirmButton.className = swalClasses.confirm;
662
- addClass(confirmButton, params.confirmButtonClass);
663
- cancelButton.className = swalClasses.cancel;
664
- addClass(cancelButton, params.cancelButtonClass);
665
-
666
- // Buttons styling
667
- if (params.buttonsStyling) {
668
- addClass(confirmButton, swalClasses.styled);
669
- addClass(cancelButton, swalClasses.styled);
670
- } else {
671
- removeClass(confirmButton, swalClasses.styled);
672
- removeClass(cancelButton, swalClasses.styled);
673
-
674
- confirmButton.style.backgroundColor = confirmButton.style.borderLeftColor = confirmButton.style.borderRightColor = '';
675
- cancelButton.style.backgroundColor = cancelButton.style.borderLeftColor = cancelButton.style.borderRightColor = '';
676
- }
677
-
678
- // CSS animation
679
- if (params.animation === true) {
680
- removeClass(modal, swalClasses.noanimation);
681
- } else {
682
- addClass(modal, swalClasses.noanimation);
683
- }
684
- };
685
-
686
- /*
687
- * Animations
688
- */
689
- var openModal = function openModal(animation, onComplete) {
690
- var container = getContainer();
691
- var modal = getModal();
692
-
693
- if (animation) {
694
- addClass(modal, swalClasses.show);
695
- addClass(container, swalClasses.fade);
696
- removeClass(modal, swalClasses.hide);
697
- } else {
698
- removeClass(modal, swalClasses.fade);
699
- }
700
- show(modal);
701
-
702
- // scrolling is 'hidden' until animation is done, after that 'auto'
703
- container.style.overflowY = 'hidden';
704
- if (animationEndEvent && !hasClass(modal, swalClasses.noanimation)) {
705
- modal.addEventListener(animationEndEvent, function swalCloseEventFinished() {
706
- modal.removeEventListener(animationEndEvent, swalCloseEventFinished);
707
- container.style.overflowY = 'auto';
708
- });
709
- } else {
710
- container.style.overflowY = 'auto';
711
- }
712
-
713
- addClass(document.documentElement, swalClasses.shown);
714
- addClass(document.body, swalClasses.shown);
715
- addClass(container, swalClasses.shown);
716
- fixScrollbar();
717
- iOSfix();
718
- states.previousActiveElement = document.activeElement;
719
- if (onComplete !== null && typeof onComplete === 'function') {
720
- setTimeout(function () {
721
- onComplete(modal);
722
- });
723
- }
724
- };
725
-
726
- var fixScrollbar = function fixScrollbar() {
727
- // for queues, do not do this more than once
728
- if (states.previousBodyPadding !== null) {
729
- return;
730
- }
731
- // if the body has overflow
732
- if (document.body.scrollHeight > window.innerHeight) {
733
- // add padding so the content doesn't shift after removal of scrollbar
734
- states.previousBodyPadding = document.body.style.paddingRight;
735
- document.body.style.paddingRight = measureScrollbar() + 'px';
736
- }
737
- };
738
-
739
- var undoScrollbar = function undoScrollbar() {
740
- if (states.previousBodyPadding !== null) {
741
- document.body.style.paddingRight = states.previousBodyPadding;
742
- states.previousBodyPadding = null;
743
- }
744
- };
745
-
746
- // Fix iOS scrolling http://stackoverflow.com/q/39626302/1331425
747
- var iOSfix = function iOSfix() {
748
- var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
749
- if (iOS && !hasClass(document.body, swalClasses.iosfix)) {
750
- var offset = document.body.scrollTop;
751
- document.body.style.top = offset * -1 + 'px';
752
- addClass(document.body, swalClasses.iosfix);
753
- }
754
- };
755
-
756
- var undoIOSfix = function undoIOSfix() {
757
- if (hasClass(document.body, swalClasses.iosfix)) {
758
- var offset = parseInt(document.body.style.top, 10);
759
- removeClass(document.body, swalClasses.iosfix);
760
- document.body.style.top = '';
761
- document.body.scrollTop = offset * -1;
762
- }
763
- };
764
-
765
- // SweetAlert entry point
766
- var sweetAlert = function sweetAlert() {
767
- for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
768
- args[_key] = arguments[_key];
769
- }
770
-
771
- if (args[0] === undefined) {
772
- console.error('SweetAlert2 expects at least 1 attribute!');
773
- return false;
774
- }
775
-
776
- var params = _extends({}, modalParams);
777
-
778
- switch (_typeof(args[0])) {
779
- case 'string':
780
- params.title = args[0];
781
- params.html = args[1];
782
- params.type = args[2];
783
-
784
- break;
785
-
786
- case 'object':
787
- _extends(params, args[0]);
788
- params.extraParams = args[0].extraParams;
789
-
790
- if (params.input === 'email' && params.inputValidator === null) {
791
- params.inputValidator = function (email) {
792
- return new Promise(function (resolve, reject) {
793
- var emailRegex = /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;
794
- if (emailRegex.test(email)) {
795
- resolve();
796
- } else {
797
- reject('Invalid email address');
798
- }
799
- });
800
- };
801
- }
802
-
803
- if (params.input === 'url' && params.inputValidator === null) {
804
- params.inputValidator = function (url) {
805
- return new Promise(function (resolve, reject) {
806
- var urlRegex = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/;
807
- if (urlRegex.test(url)) {
808
- resolve();
809
- } else {
810
- reject('Invalid URL');
811
- }
812
- });
813
- };
814
- }
815
- break;
816
-
817
- default:
818
- console.error('SweetAlert2: Unexpected type of argument! Expected "string" or "object", got ' + _typeof(args[0]));
819
- return false;
820
- }
821
-
822
- setParameters(params);
823
-
824
- var container = getContainer();
825
- var modal = getModal();
826
-
827
- return new Promise(function (resolve, reject) {
828
- // Close on timer
829
- if (params.timer) {
830
- modal.timeout = setTimeout(function () {
831
- sweetAlert.closeModal(params.onClose);
832
- if (params.useRejections) {
833
- reject('timer');
834
  } else {
835
- resolve({ dismiss: 'timer' });
836
  }
837
- }, params.timer);
838
- }
 
 
839
 
840
- // Get input element by specified type or, if type isn't specified, by params.input
841
- var getInput = function getInput(inputType) {
842
- inputType = inputType || params.input;
843
- if (!inputType) {
844
- return null;
845
- }
846
- switch (inputType) {
847
- case 'select':
848
- case 'textarea':
849
- case 'file':
850
- return getChildByClass(modal, swalClasses[inputType]);
851
- case 'checkbox':
852
- return modal.querySelector('.' + swalClasses.checkbox + ' input');
853
- case 'radio':
854
- return modal.querySelector('.' + swalClasses.radio + ' input:checked') || modal.querySelector('.' + swalClasses.radio + ' input:first-child');
855
- case 'range':
856
- return modal.querySelector('.' + swalClasses.range + ' input');
857
- default:
858
- return getChildByClass(modal, swalClasses.input);
859
- }
860
- };
861
-
862
- // Get the value of the modal input
863
- var getInputValue = function getInputValue() {
864
- var input = getInput();
865
- if (!input) {
866
- return null;
867
- }
868
- switch (params.input) {
869
- case 'checkbox':
870
- return input.checked ? 1 : 0;
871
- case 'radio':
872
- return input.checked ? input.value : null;
873
- case 'file':
874
- return input.files.length ? input.files[0] : null;
875
- default:
876
- return params.inputAutoTrim ? input.value.trim() : input.value;
877
- }
878
- };
879
-
880
- // input autofocus
881
- if (params.input) {
882
- setTimeout(function () {
883
- var input = getInput();
884
- if (input) {
885
- focusInput(input);
886
- }
887
- }, 0);
888
- }
889
 
890
- var confirm = function confirm(value) {
891
- if (params.showLoaderOnConfirm) {
892
- sweetAlert.showLoading();
893
- }
894
-
895
- if (params.preConfirm) {
896
- params.preConfirm(value, params.extraParams).then(function (preConfirmValue) {
897
- sweetAlert.closeModal(params.onClose);
898
- resolve(preConfirmValue || value);
899
- }, function (error) {
900
- sweetAlert.hideLoading();
901
- if (error) {
902
- sweetAlert.showValidationError(error);
903
- }
904
- });
905
- } else {
906
- sweetAlert.closeModal(params.onClose);
907
- if (params.useRejections) {
908
- resolve(value);
909
  } else {
910
- resolve({ value: value });
911
- }
912
- }
913
- };
914
-
915
- // Mouse interactions
916
- var onButtonEvent = function onButtonEvent(event) {
917
- var e = event || window.event;
918
- var target = e.target || e.srcElement;
919
- var confirmButton = getConfirmButton();
920
- var cancelButton = getCancelButton();
921
- var targetedConfirm = confirmButton && (confirmButton === target || confirmButton.contains(target));
922
- var targetedCancel = cancelButton && (cancelButton === target || cancelButton.contains(target));
923
-
924
- switch (e.type) {
925
- case 'mouseover':
926
- case 'mouseup':
927
- if (params.buttonsStyling) {
928
- if (targetedConfirm) {
929
- confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.1);
930
- } else if (targetedCancel) {
931
- cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.1);
932
- }
933
- }
934
- break;
935
- case 'mouseout':
936
- if (params.buttonsStyling) {
937
- if (targetedConfirm) {
938
- confirmButton.style.backgroundColor = params.confirmButtonColor;
939
- } else if (targetedCancel) {
940
- cancelButton.style.backgroundColor = params.cancelButtonColor;
941
- }
942
- }
943
- break;
944
- case 'mousedown':
945
- if (params.buttonsStyling) {
946
- if (targetedConfirm) {
947
- confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.2);
948
- } else if (targetedCancel) {
949
- cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.2);
950
- }
951
- }
952
- break;
953
- case 'click':
954
- // Clicked 'confirm'
955
- if (targetedConfirm && sweetAlert.isVisible()) {
956
- sweetAlert.disableButtons();
957
- if (params.input) {
958
- var inputValue = getInputValue();
959
-
960
- if (params.inputValidator) {
961
- sweetAlert.disableInput();
962
- params.inputValidator(inputValue, params.extraParams).then(function () {
963
- sweetAlert.enableButtons();
964
- sweetAlert.enableInput();
965
- confirm(inputValue);
966
- }, function (error) {
967
- sweetAlert.enableButtons();
968
- sweetAlert.enableInput();
969
- if (error) {
970
- sweetAlert.showValidationError(error);
971
- }
972
- });
973
- } else {
974
- confirm(inputValue);
975
- }
976
- } else {
977
- confirm(true);
978
- }
979
 
980
- // Clicked 'cancel'
981
- } else if (targetedCancel && sweetAlert.isVisible()) {
982
- sweetAlert.disableButtons();
983
- sweetAlert.closeModal(params.onClose);
984
- if (params.useRejections) {
985
- reject('cancel');
986
- } else {
987
- resolve({ dismiss: 'cancel' });
988
- }
989
- }
990
- break;
991
- default:
992
- }
993
  };
 
 
 
 
994
 
995
- var buttons = modal.querySelectorAll('button');
996
- for (var i = 0; i < buttons.length; i++) {
997
- buttons[i].onclick = onButtonEvent;
998
- buttons[i].onmouseover = onButtonEvent;
999
- buttons[i].onmouseout = onButtonEvent;
1000
- buttons[i].onmousedown = onButtonEvent;
1001
- }
 
 
1002
 
1003
- // Closing modal by close button
1004
- getCloseButton().onclick = function () {
1005
- sweetAlert.closeModal(params.onClose);
1006
- if (params.useRejections) {
1007
- reject('close');
1008
- } else {
1009
- resolve({ dismiss: 'close' });
1010
- }
1011
- };
1012
-
1013
- // Closing modal by overlay click
1014
- container.onclick = function (e) {
1015
- if (e.target !== container) {
1016
- return;
1017
- }
1018
- if (params.allowOutsideClick) {
1019
- sweetAlert.closeModal(params.onClose);
1020
- if (params.useRejections) {
1021
- reject('overlay');
1022
  } else {
1023
- resolve({ dismiss: 'overlay' });
1024
  }
1025
- }
1026
  };
 
 
 
 
 
1027
 
1028
- var buttonsWrapper = getButtonsWrapper();
1029
- var confirmButton = getConfirmButton();
1030
- var cancelButton = getCancelButton();
1031
 
1032
- // Reverse buttons (Confirm on the right side)
1033
- if (params.reverseButtons) {
1034
- confirmButton.parentNode.insertBefore(cancelButton, confirmButton);
1035
- } else {
1036
- confirmButton.parentNode.insertBefore(confirmButton, cancelButton);
1037
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1038
 
1039
- // Focus handling
1040
- var setFocus = function setFocus(index, increment) {
1041
- var focusableElements = getFocusableElements(params.focusCancel);
1042
- // search for visible elements and select the next possible match
1043
- for (var _i3 = 0; _i3 < focusableElements.length; _i3++) {
1044
- index = index + increment;
1045
 
1046
- // rollover to first item
1047
- if (index === focusableElements.length) {
1048
- index = 0;
1049
 
1050
- // go to last item
1051
- } else if (index === -1) {
1052
- index = focusableElements.length - 1;
1053
  }
1054
 
1055
- // determine if element is visible
1056
- var el = focusableElements[index];
1057
- if (isVisible(el)) {
1058
- return el.focus();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1059
  }
1060
- }
1061
  };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1062
 
1063
- var handleKeyDown = function handleKeyDown(event) {
1064
- var e = event || window.event;
1065
- var keyCode = e.keyCode || e.which;
 
 
 
 
 
 
1066
 
1067
- if ([9, 13, 32, 27, 37, 38, 39, 40].indexOf(keyCode) === -1) {
1068
- // Don't do work on keys we don't care about.
1069
- return;
1070
- }
1071
 
1072
- var targetElement = e.target || e.srcElement;
 
1073
 
1074
- var focusableElements = getFocusableElements(params.focusCancel);
1075
- var btnIndex = -1; // Find the button - note, this is a nodelist, not an array.
1076
- for (var _i4 = 0; _i4 < focusableElements.length; _i4++) {
1077
- if (targetElement === focusableElements[_i4]) {
1078
- btnIndex = _i4;
1079
- break;
1080
  }
1081
- }
1082
 
1083
- // TAB
1084
- if (keyCode === 9) {
1085
- if (!e.shiftKey) {
1086
- // Cycle to the next button
1087
- setFocus(btnIndex, 1);
 
 
 
 
 
 
 
 
1088
  } else {
1089
- // Cycle to the prev button
1090
- setFocus(btnIndex, -1);
1091
  }
1092
- e.stopPropagation();
1093
- e.preventDefault();
 
 
1094
 
1095
- // ARROWS - switch focus between buttons
1096
- } else if (keyCode === 37 || keyCode === 38 || keyCode === 39 || keyCode === 40) {
1097
- // focus Cancel button if Confirm button is currently focused
1098
- if (document.activeElement === confirmButton && isVisible(cancelButton)) {
1099
- cancelButton.focus();
1100
- // and vice versa
1101
- } else if (document.activeElement === cancelButton && isVisible(confirmButton)) {
1102
- confirmButton.focus();
1103
- }
1104
-
1105
- // ENTER/SPACE
1106
- } else if (keyCode === 13 || keyCode === 32) {
1107
- if (btnIndex === -1 && params.allowEnterKey) {
1108
- // ENTER/SPACE clicked outside of a button.
1109
- if (params.focusCancel) {
1110
- fireClick(cancelButton, e);
1111
- } else {
1112
- fireClick(confirmButton, e);
1113
- }
1114
- e.stopPropagation();
1115
- e.preventDefault();
1116
- }
1117
-
1118
- // ESC
1119
- } else if (keyCode === 27 && params.allowEscapeKey === true) {
1120
- sweetAlert.closeModal(params.onClose);
1121
- if (params.useRejections) {
1122
- reject('esc');
1123
  } else {
1124
- resolve({ dismiss: 'esc' });
 
 
 
 
 
1125
  }
1126
- }
1127
  };
1128
 
1129
- if (!window.onkeydown || window.onkeydown.toString() !== handleKeyDown.toString()) {
1130
- states.previousWindowKeyDown = window.onkeydown;
1131
- window.onkeydown = handleKeyDown;
1132
- }
1133
 
1134
- // Loading state
1135
- if (params.buttonsStyling) {
1136
- confirmButton.style.borderLeftColor = params.confirmButtonColor;
1137
- confirmButton.style.borderRightColor = params.confirmButtonColor;
1138
- }
1139
 
 
 
 
1140
  /**
1141
- * Show spinner instead of Confirm button and disable Cancel button
 
1142
  */
1143
- sweetAlert.hideLoading = sweetAlert.disableLoading = function () {
1144
- if (!params.showConfirmButton) {
1145
- hide(confirmButton);
1146
- if (!params.showCancelButton) {
1147
- hide(getButtonsWrapper());
1148
- }
1149
- }
1150
- removeClass(buttonsWrapper, swalClasses.loading);
1151
- removeClass(modal, swalClasses.loading);
1152
- confirmButton.disabled = false;
1153
- cancelButton.disabled = false;
1154
- };
1155
 
1156
- sweetAlert.getTitle = function () {
1157
- return getTitle();
 
1158
  };
1159
- sweetAlert.getContent = function () {
1160
- return getContent();
 
 
 
 
 
 
 
 
 
 
 
 
1161
  };
1162
- sweetAlert.getInput = function () {
1163
- return getInput();
 
 
 
 
 
 
 
 
 
1164
  };
1165
- sweetAlert.getImage = function () {
1166
- return getImage();
 
 
 
 
 
 
 
 
 
 
 
 
1167
  };
1168
- sweetAlert.getButtonsWrapper = function () {
1169
- return getButtonsWrapper();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1170
  };
1171
- sweetAlert.getConfirmButton = function () {
1172
- return getConfirmButton();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1173
  };
1174
- sweetAlert.getCancelButton = function () {
1175
- return getCancelButton();
 
 
 
 
 
 
 
 
1176
  };
 
 
 
 
1177
 
1178
- sweetAlert.enableButtons = function () {
1179
- confirmButton.disabled = false;
1180
- cancelButton.disabled = false;
 
 
 
1181
  };
 
 
 
 
1182
 
1183
- sweetAlert.disableButtons = function () {
1184
- confirmButton.disabled = true;
1185
- cancelButton.disabled = true;
1186
  };
 
 
 
 
1187
 
1188
- sweetAlert.enableConfirmButton = function () {
1189
- confirmButton.disabled = false;
 
 
 
 
1190
  };
 
 
 
 
 
1191
 
1192
- sweetAlert.disableConfirmButton = function () {
1193
- confirmButton.disabled = true;
1194
  };
1195
 
1196
- sweetAlert.enableInput = function () {
1197
- var input = getInput();
1198
- if (!input) {
1199
- return false;
1200
- }
1201
- if (input.type === 'radio') {
1202
- var radiosContainer = input.parentNode.parentNode;
1203
- var radios = radiosContainer.querySelectorAll('input');
1204
- for (var _i5 = 0; _i5 < radios.length; _i5++) {
1205
- radios[_i5].disabled = false;
1206
  }
1207
- } else {
1208
- input.disabled = false;
1209
- }
1210
- };
1211
 
1212
- sweetAlert.disableInput = function () {
1213
- var input = getInput();
1214
- if (!input) {
1215
- return false;
1216
- }
1217
- if (input && input.type === 'radio') {
1218
- var radiosContainer = input.parentNode.parentNode;
1219
- var radios = radiosContainer.querySelectorAll('input');
1220
- for (var _i6 = 0; _i6 < radios.length; _i6++) {
1221
- radios[_i6].disabled = true;
 
 
1222
  }
1223
- } else {
1224
- input.disabled = true;
1225
- }
1226
  };
1227
 
1228
- // Set modal min-height to disable scrolling inside the modal
1229
- sweetAlert.recalculateHeight = debounce(function () {
1230
- var modal = getModal();
1231
- if (!modal) {
1232
- return;
1233
- }
1234
- var prevState = modal.style.display;
1235
- modal.style.minHeight = '';
1236
- show(modal);
1237
- modal.style.minHeight = modal.scrollHeight + 1 + 'px';
1238
- modal.style.display = prevState;
1239
- }, 50);
1240
 
1241
- // Show block with validation error
1242
- sweetAlert.showValidationError = function (error) {
1243
- var validationError = getValidationError();
1244
- validationError.innerHTML = error;
1245
- show(validationError);
1246
 
1247
- var input = getInput();
1248
- if (input) {
1249
- focusInput(input);
1250
- addClass(input, swalClasses.inputerror);
1251
- }
1252
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1253
 
1254
- // Hide block with validation error
1255
- sweetAlert.resetValidationError = function () {
1256
- var validationError = getValidationError();
1257
- hide(validationError);
1258
- sweetAlert.recalculateHeight();
1259
 
1260
- var input = getInput();
1261
- if (input) {
1262
- removeClass(input, swalClasses.inputerror);
1263
- }
1264
- };
 
1265
 
1266
- sweetAlert.getProgressSteps = function () {
1267
- return params.progressSteps;
1268
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1269
 
1270
- sweetAlert.setProgressSteps = function (progressSteps) {
1271
- params.progressSteps = progressSteps;
1272
- setParameters(params);
1273
- };
1274
 
1275
- sweetAlert.showProgressSteps = function () {
1276
- show(getProgressSteps());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1277
  };
1278
 
1279
- sweetAlert.hideProgressSteps = function () {
1280
- hide(getProgressSteps());
 
 
 
 
 
1281
  };
 
 
 
 
1282
 
1283
- sweetAlert.enableButtons();
1284
- sweetAlert.hideLoading();
1285
- sweetAlert.resetValidationError();
1286
 
1287
- // inputs
1288
- var inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];
1289
- var input = void 0;
1290
- for (var _i7 = 0; _i7 < inputTypes.length; _i7++) {
1291
- var inputClass = swalClasses[inputTypes[_i7]];
1292
- var inputContainer = getChildByClass(modal, inputClass);
1293
- input = getInput(inputTypes[_i7]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1294
 
1295
- // set attributes
1296
- if (input) {
1297
- for (var j in input.attributes) {
1298
- if (input.attributes.hasOwnProperty(j)) {
1299
- var attrName = input.attributes[j].name;
1300
- if (attrName !== 'type' && attrName !== 'value') {
1301
- input.removeAttribute(attrName);
 
 
 
 
 
 
 
 
 
 
 
 
1302
  }
1303
- }
1304
  }
1305
- for (var attr in params.inputAttributes) {
1306
- input.setAttribute(attr, params.inputAttributes[attr]);
 
 
 
 
 
 
 
 
 
 
 
 
1307
  }
1308
- }
1309
 
1310
- // set class
1311
- inputContainer.className = inputClass;
1312
- if (params.inputClass) {
1313
- addClass(inputContainer, params.inputClass);
1314
- }
 
 
 
 
1315
 
1316
- hide(inputContainer);
1317
- }
1318
 
1319
- var populateInputOptions = void 0;
1320
- switch (params.input) {
1321
- case 'text':
1322
- case 'email':
1323
- case 'password':
1324
- case 'number':
1325
- case 'tel':
1326
- case 'url':
1327
- input = getChildByClass(modal, swalClasses.input);
1328
- input.value = params.inputValue;
1329
- input.placeholder = params.inputPlaceholder;
1330
- input.type = params.input;
1331
- show(input);
1332
- break;
1333
- case 'file':
1334
- input = getChildByClass(modal, swalClasses.file);
1335
- input.placeholder = params.inputPlaceholder;
1336
- input.type = params.input;
1337
- show(input);
1338
- break;
1339
- case 'range':
1340
- var range = getChildByClass(modal, swalClasses.range);
1341
- var rangeInput = range.querySelector('input');
1342
- var rangeOutput = range.querySelector('output');
1343
- rangeInput.value = params.inputValue;
1344
- rangeInput.type = params.input;
1345
- rangeOutput.value = params.inputValue;
1346
- show(range);
1347
- break;
1348
- case 'select':
1349
- var select = getChildByClass(modal, swalClasses.select);
1350
- select.innerHTML = '';
1351
- if (params.inputPlaceholder) {
1352
- var placeholder = document.createElement('option');
1353
- placeholder.innerHTML = params.inputPlaceholder;
1354
- placeholder.value = '';
1355
- placeholder.disabled = true;
1356
- placeholder.selected = true;
1357
- select.appendChild(placeholder);
1358
- }
1359
- populateInputOptions = function populateInputOptions(inputOptions) {
1360
- for (var optionValue in inputOptions) {
1361
- var option = document.createElement('option');
1362
- option.value = optionValue;
1363
- option.innerHTML = inputOptions[optionValue];
1364
- if (params.inputValue === optionValue) {
1365
- option.selected = true;
1366
- }
1367
- select.appendChild(option);
1368
- }
1369
- show(select);
1370
- select.focus();
1371
- };
1372
- break;
1373
- case 'radio':
1374
- var radio = getChildByClass(modal, swalClasses.radio);
1375
- radio.innerHTML = '';
1376
- populateInputOptions = function populateInputOptions(inputOptions) {
1377
- for (var radioValue in inputOptions) {
1378
- var radioInput = document.createElement('input');
1379
- var radioLabel = document.createElement('label');
1380
- var radioLabelSpan = document.createElement('span');
1381
- radioInput.type = 'radio';
1382
- radioInput.name = swalClasses.radio;
1383
- radioInput.value = radioValue;
1384
- if (params.inputValue === radioValue) {
1385
- radioInput.checked = true;
1386
- }
1387
- radioLabelSpan.innerHTML = inputOptions[radioValue];
1388
- radioLabel.appendChild(radioInput);
1389
- radioLabel.appendChild(radioLabelSpan);
1390
- radioLabel.for = radioInput.id;
1391
- radio.appendChild(radioLabel);
1392
- }
1393
- show(radio);
1394
- var radios = radio.querySelectorAll('input');
1395
- if (radios.length) {
1396
- radios[0].focus();
1397
- }
1398
- };
1399
- break;
1400
- case 'checkbox':
1401
- var checkbox = getChildByClass(modal, swalClasses.checkbox);
1402
- var checkboxInput = getInput('checkbox');
1403
- checkboxInput.type = 'checkbox';
1404
- checkboxInput.value = 1;
1405
- checkboxInput.id = swalClasses.checkbox;
1406
- checkboxInput.checked = Boolean(params.inputValue);
1407
- var label = checkbox.getElementsByTagName('span');
1408
- if (label.length) {
1409
- checkbox.removeChild(label[0]);
1410
- }
1411
- label = document.createElement('span');
1412
- label.innerHTML = params.inputPlaceholder;
1413
- checkbox.appendChild(label);
1414
- show(checkbox);
1415
- break;
1416
- case 'textarea':
1417
- var textarea = getChildByClass(modal, swalClasses.textarea);
1418
- textarea.value = params.inputValue;
1419
- textarea.placeholder = params.inputPlaceholder;
1420
- show(textarea);
1421
- break;
1422
- case null:
1423
- break;
1424
- default:
1425
- console.error('SweetAlert2: Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "' + params.input + '"');
1426
- break;
1427
- }
1428
 
1429
- if (params.input === 'select' || params.input === 'radio') {
1430
- if (params.inputOptions instanceof Promise) {
1431
- sweetAlert.showLoading();
1432
- params.inputOptions.then(function (inputOptions) {
1433
- sweetAlert.hideLoading();
1434
- populateInputOptions(inputOptions);
1435
- });
1436
- } else if (_typeof(params.inputOptions) === 'object') {
1437
- populateInputOptions(params.inputOptions);
1438
- } else {
1439
- console.error('SweetAlert2: Unexpected type of inputOptions! Expected object or Promise, got ' + _typeof(params.inputOptions));
1440
- }
1441
- }
1442
 
1443
- openModal(params.animation, params.onOpen);
 
 
 
1444
 
1445
- // Focus the first element (input or button)
1446
- if (params.allowEnterKey) {
1447
- setFocus(-1, 1);
1448
- } else {
1449
- if (document.activeElement) {
1450
- document.activeElement.blur();
1451
- }
1452
- }
1453
 
1454
- // fix scroll
1455
- getContainer().scrollTop = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1456
 
1457
- // Observe changes inside the modal and adjust height
1458
- if (typeof MutationObserver !== 'undefined' && !swal2Observer) {
1459
- swal2Observer = new MutationObserver(sweetAlert.recalculateHeight);
1460
- swal2Observer.observe(modal, { childList: true, characterData: true, subtree: true });
1461
- }
1462
- });
1463
- };
1464
-
1465
- /*
1466
- * Global function to determine if swal2 modal is shown
1467
- */
1468
- sweetAlert.isVisible = function () {
1469
- return !!getModal();
1470
- };
1471
-
1472
- /*
1473
- * Global function for chaining sweetAlert modals
1474
- */
1475
- sweetAlert.queue = function (steps) {
1476
- queue = steps;
1477
- var resetQueue = function resetQueue() {
1478
- queue = [];
1479
- document.body.removeAttribute('data-swal2-queue-step');
1480
- };
1481
- var queueResult = [];
1482
- return new Promise(function (resolve, reject) {
1483
- (function step(i, callback) {
1484
- if (i < queue.length) {
1485
- document.body.setAttribute('data-swal2-queue-step', i);
1486
-
1487
- sweetAlert(queue[i]).then(function (result) {
1488
- queueResult.push(result);
1489
- step(i + 1, callback);
1490
- }, function (dismiss) {
1491
- resetQueue();
1492
- reject(dismiss);
1493
- });
1494
- } else {
1495
- resetQueue();
1496
- resolve(queueResult);
1497
- }
1498
- })(0);
1499
- });
1500
- };
1501
-
1502
- /*
1503
- * Global function for getting the index of current modal in queue
1504
- */
1505
- sweetAlert.getQueueStep = function () {
1506
- return document.body.getAttribute('data-swal2-queue-step');
1507
- };
1508
-
1509
- /*
1510
- * Global function for inserting a modal to the queue
1511
- */
1512
- sweetAlert.insertQueueStep = function (step, index) {
1513
- if (index && index < queue.length) {
1514
- return queue.splice(index, 0, step);
1515
- }
1516
- return queue.push(step);
1517
- };
1518
-
1519
- /*
1520
- * Global function for deleting a modal from the queue
1521
- */
1522
- sweetAlert.deleteQueueStep = function (index) {
1523
- if (typeof queue[index] !== 'undefined') {
1524
- queue.splice(index, 1);
1525
- }
1526
- };
1527
-
1528
- /*
1529
- * Global function to close sweetAlert
1530
- */
1531
- sweetAlert.close = sweetAlert.closeModal = function (onComplete) {
1532
- var container = getContainer();
1533
- var modal = getModal();
1534
- if (!modal) {
1535
- return;
1536
- }
1537
- removeClass(modal, swalClasses.show);
1538
- addClass(modal, swalClasses.hide);
1539
- clearTimeout(modal.timeout);
1540
-
1541
- resetPrevState();
1542
-
1543
- var removeModalAndResetState = function removeModalAndResetState() {
1544
- if (container.parentNode) {
1545
- container.parentNode.removeChild(container);
1546
- }
1547
- removeClass(document.documentElement, swalClasses.shown);
1548
- removeClass(document.body, swalClasses.shown);
1549
- undoScrollbar();
1550
- undoIOSfix();
1551
- };
1552
-
1553
- // If animation is supported, animate
1554
- if (animationEndEvent && !hasClass(modal, swalClasses.noanimation)) {
1555
- modal.addEventListener(animationEndEvent, function swalCloseEventFinished() {
1556
- modal.removeEventListener(animationEndEvent, swalCloseEventFinished);
1557
- if (hasClass(modal, swalClasses.hide)) {
1558
- removeModalAndResetState();
1559
- }
1560
- });
1561
- } else {
1562
- // Otherwise, remove immediately
1563
- removeModalAndResetState();
1564
- }
1565
- if (onComplete !== null && typeof onComplete === 'function') {
1566
- setTimeout(function () {
1567
- onComplete(modal);
1568
- });
1569
- }
1570
- };
1571
-
1572
- /*
1573
- * Global function to click 'Confirm' button
1574
- */
1575
- sweetAlert.clickConfirm = function () {
1576
- return getConfirmButton().click();
1577
- };
1578
-
1579
- /*
1580
- * Global function to click 'Cancel' button
1581
- */
1582
- sweetAlert.clickCancel = function () {
1583
- return getCancelButton().click();
1584
- };
1585
-
1586
- /**
1587
- * Show spinner instead of Confirm button and disable Cancel button
1588
- */
1589
- sweetAlert.showLoading = sweetAlert.enableLoading = function () {
1590
- var modal = getModal();
1591
- if (!modal) {
1592
- sweetAlert('');
1593
- }
1594
- var buttonsWrapper = getButtonsWrapper();
1595
- var confirmButton = getConfirmButton();
1596
- var cancelButton = getCancelButton();
1597
-
1598
- show(buttonsWrapper);
1599
- show(confirmButton, 'inline-block');
1600
- addClass(buttonsWrapper, swalClasses.loading);
1601
- addClass(modal, swalClasses.loading);
1602
- confirmButton.disabled = true;
1603
- cancelButton.disabled = true;
1604
- };
1605
-
1606
- /**
1607
- * Set default params for each popup
1608
- * @param {Object} userParams
1609
- */
1610
- sweetAlert.setDefaults = function (userParams) {
1611
- if (!userParams || (typeof userParams === 'undefined' ? 'undefined' : _typeof(userParams)) !== 'object') {
1612
- return console.error('SweetAlert2: the argument for setDefaults() is required and has to be a object');
1613
- }
1614
-
1615
- for (var param in userParams) {
1616
- if (!defaultParams.hasOwnProperty(param) && param !== 'extraParams') {
1617
- console.warn('SweetAlert2: Unknown parameter "' + param + '"');
1618
- delete userParams[param];
1619
- }
1620
- }
1621
 
1622
- _extends(modalParams, userParams);
1623
- };
1624
 
1625
- /**
1626
- * Reset default params for each popup
1627
- */
1628
- sweetAlert.resetDefaults = function () {
1629
- modalParams = _extends({}, defaultParams);
1630
- };
1631
 
1632
- sweetAlert.noop = function () {};
 
 
 
 
 
 
 
 
1633
 
1634
- sweetAlert.version = '6.6.4';
1635
 
1636
- sweetAlert.default = sweetAlert;
1637
 
1638
- return sweetAlert;
1639
 
1640
- })));
1641
- if (window.Sweetalert2) window.sweetAlert = window.swal = window.Sweetalert2;
1
  /*!
2
+ * sweetalert2 v11.4.30
3
+ * Released under the MIT License.
4
+ */
5
  (function (global, factory) {
6
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
7
+ typeof define === 'function' && define.amd ? define(factory) :
8
+ (global = global || self, global.Sweetalert2 = factory());
9
+ }(this, function () { 'use strict';
10
+
11
+ const consolePrefix = 'SweetAlert2:';
12
+ /**
13
+ * Filter the unique values into a new array
14
+ *
15
+ * @param {Array} arr
16
+ * @returns {Array}
17
+ */
18
+
19
+ const uniqueArray = arr => {
20
+ const result = [];
21
+
22
+ for (let i = 0; i < arr.length; i++) {
23
+ if (result.indexOf(arr[i]) === -1) {
24
+ result.push(arr[i]);
25
+ }
26
+ }
27
+
28
+ return result;
29
+ };
30
+ /**
31
+ * Capitalize the first letter of a string
32
+ *
33
+ * @param {string} str
34
+ * @returns {string}
35
+ */
36
+
37
+ const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1);
38
+ /**
39
+ * Standardize console warnings
40
+ *
41
+ * @param {string | Array} message
42
+ */
43
+
44
+ const warn = message => {
45
+ console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message));
46
+ };
47
+ /**
48
+ * Standardize console errors
49
+ *
50
+ * @param {string} message
51
+ */
52
+
53
+ const error = message => {
54
+ console.error("".concat(consolePrefix, " ").concat(message));
55
+ };
56
+ /**
57
+ * Private global state for `warnOnce`
58
+ *
59
+ * @type {Array}
60
+ * @private
61
+ */
62
+
63
+ const previousWarnOnceMessages = [];
64
+ /**
65
+ * Show a console warning, but only if it hasn't already been shown
66
+ *
67
+ * @param {string} message
68
+ */
69
+
70
+ const warnOnce = message => {
71
+ if (!previousWarnOnceMessages.includes(message)) {
72
+ previousWarnOnceMessages.push(message);
73
+ warn(message);
74
+ }
75
+ };
76
+ /**
77
+ * Show a one-time console warning about deprecated params/methods
78
+ *
79
+ * @param {string} deprecatedParam
80
+ * @param {string} useInstead
81
+ */
82
+
83
+ const warnAboutDeprecation = (deprecatedParam, useInstead) => {
84
+ warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead."));
85
+ };
86
+ /**
87
+ * If `arg` is a function, call it (with no arguments or context) and return the result.
88
+ * Otherwise, just pass the value through
89
+ *
90
+ * @param {Function | any} arg
91
+ * @returns {any}
92
+ */
93
+
94
+ const callIfFunction = arg => typeof arg === 'function' ? arg() : arg;
95
+ /**
96
+ * @param {any} arg
97
+ * @returns {boolean}
98
+ */
99
+
100
+ const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function';
101
+ /**
102
+ * @param {any} arg
103
+ * @returns {Promise}
104
+ */
105
+
106
+ const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);
107
+ /**
108
+ * @param {any} arg
109
+ * @returns {boolean}
110
+ */
111
+
112
+ const isPromise = arg => arg && Promise.resolve(arg) === arg;
113
+ /**
114
+ * @param {Array} arr
115
+ * @returns {any}
116
+ */
117
+
118
+ const getRandomElement = arr => arr[Math.floor(Math.random() * arr.length)];
119
+
120
+ const defaultParams = {
121
+ title: '',
122
+ titleText: '',
123
+ text: '',
124
+ html: '',
125
+ footer: '',
126
+ icon: undefined,
127
+ iconColor: undefined,
128
+ iconHtml: undefined,
129
+ template: undefined,
130
+ toast: false,
131
+ showClass: {
132
+ popup: 'swal2-show',
133
+ backdrop: 'swal2-backdrop-show',
134
+ icon: 'swal2-icon-show'
135
+ },
136
+ hideClass: {
137
+ popup: 'swal2-hide',
138
+ backdrop: 'swal2-backdrop-hide',
139
+ icon: 'swal2-icon-hide'
140
+ },
141
+ customClass: {},
142
+ target: 'body',
143
+ color: undefined,
144
+ backdrop: true,
145
+ heightAuto: true,
146
+ allowOutsideClick: true,
147
+ allowEscapeKey: true,
148
+ allowEnterKey: true,
149
+ stopKeydownPropagation: true,
150
+ keydownListenerCapture: false,
151
+ showConfirmButton: true,
152
+ showDenyButton: false,
153
+ showCancelButton: false,
154
+ preConfirm: undefined,
155
+ preDeny: undefined,
156
+ confirmButtonText: 'OK',
157
+ confirmButtonAriaLabel: '',
158
+ confirmButtonColor: undefined,
159
+ denyButtonText: 'No',
160
+ denyButtonAriaLabel: '',
161
+ denyButtonColor: undefined,
162
+ cancelButtonText: 'Cancel',
163
+ cancelButtonAriaLabel: '',
164
+ cancelButtonColor: undefined,
165
+ buttonsStyling: true,
166
+ reverseButtons: false,
167
+ focusConfirm: true,
168
+ focusDeny: false,
169
+ focusCancel: false,
170
+ returnFocus: true,
171
+ showCloseButton: false,
172
+ closeButtonHtml: '&times;',
173
+ closeButtonAriaLabel: 'Close this dialog',
174
+ loaderHtml: '',
175
+ showLoaderOnConfirm: false,
176
+ showLoaderOnDeny: false,
177
+ imageUrl: undefined,
178
+ imageWidth: undefined,
179
+ imageHeight: undefined,
180
+ imageAlt: '',
181
+ timer: undefined,
182
+ timerProgressBar: false,
183
+ width: undefined,
184
+ padding: undefined,
185
+ background: undefined,
186
+ input: undefined,
187
+ inputPlaceholder: '',
188
+ inputLabel: '',
189
+ inputValue: '',
190
+ inputOptions: {},
191
+ inputAutoTrim: true,
192
+ inputAttributes: {},
193
+ inputValidator: undefined,
194
+ returnInputValueOnDeny: false,
195
+ validationMessage: undefined,
196
+ grow: false,
197
+ position: 'center',
198
+ progressSteps: [],
199
+ currentProgressStep: undefined,
200
+ progressStepsDistance: undefined,
201
+ willOpen: undefined,
202
+ didOpen: undefined,
203
+ didRender: undefined,
204
+ willClose: undefined,
205
+ didClose: undefined,
206
+ didDestroy: undefined,
207
+ scrollbarPadding: true
208
+ };
209
+ const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose'];
210
+ const deprecatedParams = {};
211
+ const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture'];
212
+ /**
213
+ * Is valid parameter
214
+ *
215
+ * @param {string} paramName
216
+ * @returns {boolean}
217
+ */
218
+
219
+ const isValidParameter = paramName => {
220
+ return Object.prototype.hasOwnProperty.call(defaultParams, paramName);
221
+ };
222
+ /**
223
+ * Is valid parameter for Swal.update() method
224
+ *
225
+ * @param {string} paramName
226
+ * @returns {boolean}
227
+ */
228
+
229
+ const isUpdatableParameter = paramName => {
230
+ return updatableParams.indexOf(paramName) !== -1;
231
+ };
232
+ /**
233
+ * Is deprecated parameter
234
+ *
235
+ * @param {string} paramName
236
+ * @returns {string | undefined}
237
+ */
238
+
239
+ const isDeprecatedParameter = paramName => {
240
+ return deprecatedParams[paramName];
241
+ };
242
+ /**
243
+ * @param {string} param
244
+ */
245
+
246
+ const checkIfParamIsValid = param => {
247
+ if (!isValidParameter(param)) {
248
+ warn("Unknown parameter \"".concat(param, "\""));
249
+ }
250
+ };
251
+ /**
252
+ * @param {string} param
253
+ */
254
+
255
+
256
+ const checkIfToastParamIsValid = param => {
257
+ if (toastIncompatibleParams.includes(param)) {
258
+ warn("The parameter \"".concat(param, "\" is incompatible with toasts"));
259
+ }
260
+ };
261
+ /**
262
+ * @param {string} param
263
+ */
264
+
265
+
266
+ const checkIfParamIsDeprecated = param => {
267
+ if (isDeprecatedParameter(param)) {
268
+ warnAboutDeprecation(param, isDeprecatedParameter(param));
269
+ }
270
+ };
271
+ /**
272
+ * Show relevant warnings for given params
273
+ *
274
+ * @param {SweetAlertOptions} params
275
+ */
276
+
277
+
278
+ const showWarningsForParams = params => {
279
+ if (!params.backdrop && params.allowOutsideClick) {
280
+ warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');
281
+ }
282
+
283
+ for (const param in params) {
284
+ checkIfParamIsValid(param);
285
+
286
+ if (params.toast) {
287
+ checkIfToastParamIsValid(param);
288
+ }
289
+
290
+ checkIfParamIsDeprecated(param);
291
+ }
292
+ };
293
+
294
+ const swalPrefix = 'swal2-';
295
+ /**
296
+ * @param {string[]} items
297
+ * @returns {object}
298
+ */
299
+
300
+ const prefix = items => {
301
+ const result = {};
302
+
303
+ for (const i in items) {
304
+ result[items[i]] = swalPrefix + items[i];
305
+ }
306
+
307
+ return result;
308
+ };
309
+ const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error', 'no-war']);
310
+ const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']);
311
+
312
+ /**
313
+ * Gets the popup container which contains the backdrop and the popup itself.
314
+ *
315
+ * @returns {HTMLElement | null}
316
+ */
317
+
318
+ const getContainer = () => document.body.querySelector(".".concat(swalClasses.container));
319
+ /**
320
+ * @param {string} selectorString
321
+ * @returns {HTMLElement | null}
322
+ */
323
+
324
+ const elementBySelector = selectorString => {
325
+ const container = getContainer();
326
+ return container ? container.querySelector(selectorString) : null;
327
+ };
328
+ /**
329
+ * @param {string} className
330
+ * @returns {HTMLElement | null}
331
+ */
332
+
333
+ const elementByClass = className => {
334
+ return elementBySelector(".".concat(className));
335
+ };
336
+ /**
337
+ * @returns {HTMLElement | null}
338
+ */
339
+
340
+
341
+ const getPopup = () => elementByClass(swalClasses.popup);
342
+ /**
343
+ * @returns {HTMLElement | null}
344
+ */
345
+
346
+ const getIcon = () => elementByClass(swalClasses.icon);
347
+ /**
348
+ * @returns {HTMLElement | null}
349
+ */
350
+
351
+ const getTitle = () => elementByClass(swalClasses.title);
352
+ /**
353
+ * @returns {HTMLElement | null}
354
+ */
355
+
356
+ const getHtmlContainer = () => elementByClass(swalClasses['html-container']);
357
+ /**
358
+ * @returns {HTMLElement | null}
359
+ */
360
+
361
+ const getImage = () => elementByClass(swalClasses.image);
362
+ /**
363
+ * @returns {HTMLElement | null}
364
+ */
365
+
366
+ const getProgressSteps = () => elementByClass(swalClasses['progress-steps']);
367
+ /**
368
+ * @returns {HTMLElement | null}
369
+ */
370
+
371
+ const getValidationMessage = () => elementByClass(swalClasses['validation-message']);
372
+ /**
373
+ * @returns {HTMLElement | null}
374
+ */
375
+
376
+ const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm));
377
+ /**
378
+ * @returns {HTMLElement | null}
379
+ */
380
+
381
+ const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny));
382
+ /**
383
+ * @returns {HTMLElement | null}
384
+ */
385
+
386
+ const getInputLabel = () => elementByClass(swalClasses['input-label']);
387
+ /**
388
+ * @returns {HTMLElement | null}
389
+ */
390
+
391
+ const getLoader = () => elementBySelector(".".concat(swalClasses.loader));
392
+ /**
393
+ * @returns {HTMLElement | null}
394
+ */
395
+
396
+ const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel));
397
+ /**
398
+ * @returns {HTMLElement | null}
399
+ */
400
+
401
+ const getActions = () => elementByClass(swalClasses.actions);
402
+ /**
403
+ * @returns {HTMLElement | null}
404
+ */
405
+
406
+ const getFooter = () => elementByClass(swalClasses.footer);
407
+ /**
408
+ * @returns {HTMLElement | null}
409
+ */
410
+
411
+ const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']);
412
+ /**
413
+ * @returns {HTMLElement | null}
414
+ */
415
+
416
+ const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js
417
+
418
+ const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n";
419
+ /**
420
+ * @returns {HTMLElement[]}
421
+ */
422
+
423
+ const getFocusableElements = () => {
424
+ const focusableElementsWithTabindex = Array.from(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex
425
+ .sort((a, b) => {
426
+ const tabindexA = parseInt(a.getAttribute('tabindex'));
427
+ const tabindexB = parseInt(b.getAttribute('tabindex'));
428
+
429
+ if (tabindexA > tabindexB) {
430
+ return 1;
431
+ } else if (tabindexA < tabindexB) {
432
+ return -1;
433
+ }
434
+
435
+ return 0;
436
+ });
437
+ const otherFocusableElements = Array.from(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1');
438
+ return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el));
439
+ };
440
+ /**
441
+ * @returns {boolean}
442
+ */
443
+
444
+ const isModal = () => {
445
+ return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']);
446
+ };
447
+ /**
448
+ * @returns {boolean}
449
+ */
450
+
451
+ const isToast = () => {
452
+ return getPopup() && hasClass(getPopup(), swalClasses.toast);
453
+ };
454
+ /**
455
+ * @returns {boolean}
456
+ */
457
+
458
+ const isLoading = () => {
459
+ return getPopup().hasAttribute('data-loading');
460
+ };
461
+
462
+ const states = {
463
+ previousBodyPadding: null
464
+ };
465
+ /**
466
+ * Securely set innerHTML of an element
467
+ * https://github.com/sweetalert2/sweetalert2/issues/1926
468
+ *
469
+ * @param {HTMLElement} elem
470
+ * @param {string} html
471
+ */
472
+
473
+ const setInnerHtml = (elem, html) => {
474
+ elem.textContent = '';
475
+
476
+ if (html) {
477
+ const parser = new DOMParser();
478
+ const parsed = parser.parseFromString(html, "text/html");
479
+ Array.from(parsed.querySelector('head').childNodes).forEach(child => {
480
+ elem.appendChild(child);
481
+ });
482
+ Array.from(parsed.querySelector('body').childNodes).forEach(child => {
483
+ elem.appendChild(child);
484
+ });
485
+ }
486
+ };
487
+ /**
488
+ * @param {HTMLElement} elem
489
+ * @param {string} className
490
+ * @returns {boolean}
491
+ */
492
+
493
+ const hasClass = (elem, className) => {
494
+ if (!className) {
495
+ return false;
496
+ }
497
+
498
+ const classList = className.split(/\s+/);
499
+
500
+ for (let i = 0; i < classList.length; i++) {
501
+ if (!elem.classList.contains(classList[i])) {
502
+ return false;
503
+ }
504
+ }
505
+
506
+ return true;
507
+ };
508
+ /**
509
+ * @param {HTMLElement} elem
510
+ * @param {SweetAlertOptions} params
511
+ */
512
+
513
+ const removeCustomClasses = (elem, params) => {
514
+ Array.from(elem.classList).forEach(className => {
515
+ if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) {
516
+ elem.classList.remove(className);
517
+ }
518
+ });
519
+ };
520
+ /**
521
+ * @param {HTMLElement} elem
522
+ * @param {SweetAlertOptions} params
523
+ * @param {string} className
524
+ */
525
+
526
+
527
+ const applyCustomClass = (elem, params, className) => {
528
+ removeCustomClasses(elem, params);
529
+
530
+ if (params.customClass && params.customClass[className]) {
531
+ if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) {
532
+ return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\""));
533
+ }
534
+
535
+ addClass(elem, params.customClass[className]);
536
+ }
537
+ };
538
+ /**
539
+ * @param {HTMLElement} popup
540
+ * @param {import('./renderers/renderInput').InputClass} inputClass
541
+ * @returns {HTMLInputElement | null}
542
+ */
543
+
544
+ const getInput = (popup, inputClass) => {
545
+ if (!inputClass) {
546
+ return null;
547
+ }
548
+
549
+ switch (inputClass) {
550
+ case 'select':
551
+ case 'textarea':
552
+ case 'file':
553
+ return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses[inputClass]));
554
+
555
+ case 'checkbox':
556
+ return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.checkbox, " input"));
557
+
558
+ case 'radio':
559
+ return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.radio, " input:first-child"));
560
+
561
+ case 'range':
562
+ return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.range, " input"));
563
+
564
+ default:
565
+ return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.input));
566
+ }
567
+ };
568
+ /**
569
+ * @param {HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement} input
570
+ */
571
+
572
+ const focusInput = input => {
573
+ input.focus(); // place cursor at end of text in text input
574
+
575
+ if (input.type !== 'file') {
576
+ // http://stackoverflow.com/a/2345915
577
+ const val = input.value;
578
+ input.value = '';
579
+ input.value = val;
580
+ }
581
+ };
582
+ /**
583
+ * @param {HTMLElement | HTMLElement[] | null} target
584
+ * @param {string | string[] | readonly string[]} classList
585
+ * @param {boolean} condition
586
+ */
587
+
588
+ const toggleClass = (target, classList, condition) => {
589
+ if (!target || !classList) {
590
+ return;
591
+ }
592
+
593
+ if (typeof classList === 'string') {
594
+ classList = classList.split(/\s+/).filter(Boolean);
595
+ }
596
+
597
+ classList.forEach(className => {
598
+ if (Array.isArray(target)) {
599
+ target.forEach(elem => {
600
+ condition ? elem.classList.add(className) : elem.classList.remove(className);
601
+ });
602
+ } else {
603
+ condition ? target.classList.add(className) : target.classList.remove(className);
604
+ }
605
+ });
606
+ };
607
+ /**
608
+ * @param {HTMLElement | HTMLElement[] | null} target
609
+ * @param {string | string[] | readonly string[]} classList
610
+ */
611
+
612
+ const addClass = (target, classList) => {
613
+ toggleClass(target, classList, true);
614
+ };
615
+ /**
616
+ * @param {HTMLElement | HTMLElement[] | null} target
617
+ * @param {string | string[] | readonly string[]} classList
618
+ */
619
+
620
+ const removeClass = (target, classList) => {
621
+ toggleClass(target, classList, false);
622
+ };
623
+ /**
624
+ * Get direct child of an element by class name
625
+ *
626
+ * @param {HTMLElement} elem
627
+ * @param {string} className
628
+ * @returns {HTMLElement | null}
629
+ */
630
+
631
+ const getDirectChildByClass = (elem, className) => {
632
+ const children = Array.from(elem.children);
633
+
634
+ for (let i = 0; i < children.length; i++) {
635
+ const child = children[i];
636
+
637
+ if (child instanceof HTMLElement && hasClass(child, className)) {
638
+ return child;
639
+ }
640
+ }
641
+ };
642
+ /**
643
+ * @param {HTMLElement} elem
644
+ * @param {string} property
645
+ * @param {*} value
646
+ */
647
+
648
+ const applyNumericalStyle = (elem, property, value) => {
649
+ if (value === "".concat(parseInt(value))) {
650
+ value = parseInt(value);
651
+ }
652
+
653
+ if (value || parseInt(value) === 0) {
654
+ elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value;
655
+ } else {
656
+ elem.style.removeProperty(property);
657
+ }
658
+ };
659
+ /**
660
+ * @param {HTMLElement} elem
661
+ * @param {string} display
662
+ */
663
+
664
+ const show = function (elem) {
665
+ let display = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'flex';
666
+ elem.style.display = display;
667
+ };
668
+ /**
669
+ * @param {HTMLElement} elem
670
+ */
671
+
672
+ const hide = elem => {
673
+ elem.style.display = 'none';
674
+ };
675
+ /**
676
+ * @param {HTMLElement} parent
677
+ * @param {string} selector
678
+ * @param {string} property
679
+ * @param {string} value
680
+ */
681
+
682
+ const setStyle = (parent, selector, property, value) => {
683
+ /** @type {HTMLElement} */
684
+ const el = parent.querySelector(selector);
685
+
686
+ if (el) {
687
+ el.style[property] = value;
688
+ }
689
+ };
690
+ /**
691
+ * @param {HTMLElement} elem
692
+ * @param {any} condition
693
+ * @param {string} display
694
+ */
695
+
696
+ const toggle = function (elem, condition) {
697
+ let display = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'flex';
698
+ condition ? show(elem, display) : hide(elem);
699
+ };
700
+ /**
701
+ * borrowed from jquery $(elem).is(':visible') implementation
702
+ *
703
+ * @param {HTMLElement} elem
704
+ * @returns {boolean}
705
+ */
706
+
707
+ const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));
708
+ /**
709
+ * @returns {boolean}
710
+ */
711
+
712
+ const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton());
713
+ /**
714
+ * @returns {boolean}
715
+ */
716
+
717
+ const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight);
718
+ /**
719
+ * borrowed from https://stackoverflow.com/a/46352119
720
+ *
721
+ * @param {HTMLElement} elem
722
+ * @returns {boolean}
723
+ */
724
+
725
+ const hasCssAnimation = elem => {
726
+ const style = window.getComputedStyle(elem);
727
+ const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');
728
+ const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');
729
+ return animDuration > 0 || transDuration > 0;
730
+ };
731
+ /**
732
+ * @param {number} timer
733
+ * @param {boolean} reset
734
+ */
735
+
736
+ const animateTimerProgressBar = function (timer) {
737
+ let reset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
738
+ const timerProgressBar = getTimerProgressBar();
739
+
740
+ if (isVisible(timerProgressBar)) {
741
+ if (reset) {
742
+ timerProgressBar.style.transition = 'none';
743
+ timerProgressBar.style.width = '100%';
744
+ }
745
+
746
+ setTimeout(() => {
747
+ timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear");
748
+ timerProgressBar.style.width = '0%';
749
+ }, 10);
750
+ }
751
+ };
752
+ const stopTimerProgressBar = () => {
753
+ const timerProgressBar = getTimerProgressBar();
754
+ const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);
755
+ timerProgressBar.style.removeProperty('transition');
756
+ timerProgressBar.style.width = '100%';
757
+ const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);
758
+ const timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100;
759
+ timerProgressBar.style.removeProperty('transition');
760
+ timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%");
761
+ };
762
+
763
+ /**
764
+ * Detect Node env
765
+ *
766
+ * @returns {boolean}
767
+ */
768
+ const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined';
769
+
770
+ const RESTORE_FOCUS_TIMEOUT = 100;
771
+
772
+ /** @type {GlobalState} */
773
+
774
+ const globalState = {};
775
+
776
+ const focusPreviousActiveElement = () => {
777
+ if (globalState.previousActiveElement instanceof HTMLElement) {
778
+ globalState.previousActiveElement.focus();
779
+ globalState.previousActiveElement = null;
780
+ } else if (document.body) {
781
+ document.body.focus();
782
+ }
783
+ };
784
+ /**
785
+ * Restore previous active (focused) element
786
+ *
787
+ * @param {boolean} returnFocus
788
+ * @returns {Promise}
789
+ */
790
+
791
+
792
+ const restoreActiveElement = returnFocus => {
793
+ return new Promise(resolve => {
794
+ if (!returnFocus) {
795
+ return resolve();
796
+ }
797
+
798
+ const x = window.scrollX;
799
+ const y = window.scrollY;
800
+ globalState.restoreFocusTimeout = setTimeout(() => {
801
+ focusPreviousActiveElement();
802
+ resolve();
803
+ }, RESTORE_FOCUS_TIMEOUT); // issues/900
804
+
805
+ window.scrollTo(x, y);
806
+ });
807
+ };
808
+
809
+ const sweetHTML = "\n <div aria-labelledby=\"".concat(swalClasses.title, "\" aria-describedby=\"").concat(swalClasses['html-container'], "\" class=\"").concat(swalClasses.popup, "\" tabindex=\"-1\">\n <button type=\"button\" class=\"").concat(swalClasses.close, "\"></button>\n <ul class=\"").concat(swalClasses['progress-steps'], "\"></ul>\n <div class=\"").concat(swalClasses.icon, "\"></div>\n <img class=\"").concat(swalClasses.image, "\" />\n <h2 class=\"").concat(swalClasses.title, "\" id=\"").concat(swalClasses.title, "\"></h2>\n <div class=\"").concat(swalClasses['html-container'], "\" id=\"").concat(swalClasses['html-container'], "\"></div>\n <input class=\"").concat(swalClasses.input, "\" />\n <input type=\"file\" class=\"").concat(swalClasses.file, "\" />\n <div class=\"").concat(swalClasses.range, "\">\n <input type=\"range\" />\n <output></output>\n </div>\n <select class=\"").concat(swalClasses.select, "\"></select>\n <div class=\"").concat(swalClasses.radio, "\"></div>\n <label for=\"").concat(swalClasses.checkbox, "\" class=\"").concat(swalClasses.checkbox, "\">\n <input type=\"checkbox\" />\n <span class=\"").concat(swalClasses.label, "\"></span>\n </label>\n <textarea class=\"").concat(swalClasses.textarea, "\"></textarea>\n <div class=\"").concat(swalClasses['validation-message'], "\" id=\"").concat(swalClasses['validation-message'], "\"></div>\n <div class=\"").concat(swalClasses.actions, "\">\n <div class=\"").concat(swalClasses.loader, "\"></div>\n <button type=\"button\" class=\"").concat(swalClasses.confirm, "\"></button>\n <button type=\"button\" class=\"").concat(swalClasses.deny, "\"></button>\n <button type=\"button\" class=\"").concat(swalClasses.cancel, "\"></button>\n </div>\n <div class=\"").concat(swalClasses.footer, "\"></div>\n <div class=\"").concat(swalClasses['timer-progress-bar-container'], "\">\n <div class=\"").concat(swalClasses['timer-progress-bar'], "\"></div>\n </div>\n </div>\n").replace(/(^|\n)\s*/g, '');
810
+ /**
811
+ * @returns {boolean}
812
+ */
813
+
814
+ const resetOldContainer = () => {
815
+ const oldContainer = getContainer();
816
+
817
+ if (!oldContainer) {
818
+ return false;
819
+ }
820
+
821
+ oldContainer.remove();
822
+ removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);
823
+ return true;
824
+ };
825
+
826
+ const resetValidationMessage = () => {
827
+ globalState.currentInstance.resetValidationMessage();
828
+ };
829
+
830
+ const addInputChangeListeners = () => {
831
+ const popup = getPopup();
832
+ const input = getDirectChildByClass(popup, swalClasses.input);
833
+ const file = getDirectChildByClass(popup, swalClasses.file);
834
+ /** @type {HTMLInputElement} */
835
+
836
+ const range = popup.querySelector(".".concat(swalClasses.range, " input"));
837
+ /** @type {HTMLOutputElement} */
838
+
839
+ const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output"));
840
+ const select = getDirectChildByClass(popup, swalClasses.select);
841
+ /** @type {HTMLInputElement} */
842
+
843
+ const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input"));
844
+ const textarea = getDirectChildByClass(popup, swalClasses.textarea);
845
+ input.oninput = resetValidationMessage;
846
+ file.onchange = resetValidationMessage;
847
+ select.onchange = resetValidationMessage;
848
+ checkbox.onchange = resetValidationMessage;
849
+ textarea.oninput = resetValidationMessage;
850
+
851
+ range.oninput = () => {
852
+ resetValidationMessage();
853
+ rangeOutput.value = range.value;
854
+ };
855
+
856
+ range.onchange = () => {
857
+ resetValidationMessage();
858
+ rangeOutput.value = range.value;
859
+ };
860
+ };
861
+ /**
862
+ * @param {string | HTMLElement} target
863
+ * @returns {HTMLElement}
864
+ */
865
+
866
+
867
+ const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target;
868
+ /**
869
+ * @param {SweetAlertOptions} params
870
+ */
871
+
872
+
873
+ const setupAccessibility = params => {
874
+ const popup = getPopup();
875
+ popup.setAttribute('role', params.toast ? 'alert' : 'dialog');
876
+ popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');
877
+
878
+ if (!params.toast) {
879
+ popup.setAttribute('aria-modal', 'true');
880
+ }
881
+ };
882
+ /**
883
+ * @param {HTMLElement} targetElement
884
+ */
885
+
886
+
887
+ const setupRTL = targetElement => {
888
+ if (window.getComputedStyle(targetElement).direction === 'rtl') {
889
+ addClass(getContainer(), swalClasses.rtl);
890
+ }
891
+ };
892
+ /**
893
+ * Add modal + backdrop + no-war message for Russians to DOM
894
+ *
895
+ * @param {SweetAlertOptions} params
896
+ */
897
+
898
+
899
+ const init = params => {
900
+ // Clean up the old popup container if it exists
901
+ const oldContainerExisted = resetOldContainer();
902
+ /* istanbul ignore if */
903
+
904
+ if (isNodeEnv()) {
905
+ error('SweetAlert2 requires document to initialize');
906
+ return;
907
+ }
908
+
909
+ const container = document.createElement('div');
910
+ container.className = swalClasses.container;
911
+
912
+ if (oldContainerExisted) {
913
+ addClass(container, swalClasses['no-transition']);
914
+ }
915
+
916
+ setInnerHtml(container, sweetHTML);
917
+ const targetElement = getTarget(params.target);
918
+ targetElement.appendChild(container);
919
+ setupAccessibility(params);
920
+ setupRTL(targetElement);
921
+ addInputChangeListeners();
922
+ };
923
+
924
+ /**
925
+ * @param {HTMLElement | object | string} param
926
+ * @param {HTMLElement} target
927
+ */
928
+
929
+ const parseHtmlToContainer = (param, target) => {
930
+ // DOM element
931
+ if (param instanceof HTMLElement) {
932
+ target.appendChild(param);
933
+ } // Object
934
+ else if (typeof param === 'object') {
935
+ handleObject(param, target);
936
+ } // Plain string
937
+ else if (param) {
938
+ setInnerHtml(target, param);
939
+ }
940
+ };
941
+ /**
942
+ * @param {object} param
943
+ * @param {HTMLElement} target
944
+ */
945
+
946
+ const handleObject = (param, target) => {
947
+ // JQuery element(s)
948
+ if (param.jquery) {
949
+ handleJqueryElem(target, param);
950
+ } // For other objects use their string representation
951
+ else {
952
+ setInnerHtml(target, param.toString());
953
+ }
954
+ };
955
+ /**
956
+ * @param {HTMLElement} target
957
+ * @param {HTMLElement} elem
958
+ */
959
+
960
+
961
+ const handleJqueryElem = (target, elem) => {
962
+ target.textContent = '';
963
+
964
+ if (0 in elem) {
965
+ for (let i = 0; (i in elem); i++) {
966
+ target.appendChild(elem[i].cloneNode(true));
967
+ }
968
+ } else {
969
+ target.appendChild(elem.cloneNode(true));
970
+ }
971
+ };
972
+
973
+ /**
974
+ * @returns {'webkitAnimationEnd' | 'animationend' | false}
975
+ */
976
+
977
+ const animationEndEvent = (() => {
978
+ // Prevent run in Node env
979
+
980
+ /* istanbul ignore if */
981
+ if (isNodeEnv()) {
982
+ return false;
983
+ }
984
+
985
+ const testEl = document.createElement('div');
986
+ const transEndEventNames = {
987
+ WebkitAnimation: 'webkitAnimationEnd',
988
+ // Chrome, Safari and Opera
989
+ animation: 'animationend' // Standard syntax
990
+
991
+ };
992
+
993
+ for (const i in transEndEventNames) {
994
+ if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') {
995
+ return transEndEventNames[i];
996
+ }
997
+ }
998
+
999
+ return false;
1000
+ })();
1001
+
1002
+ /**
1003
+ * Measure scrollbar width for padding body during modal show/hide
1004
+ * https://github.com/twbs/bootstrap/blob/master/js/src/modal.js
1005
+ *
1006
+ * @returns {number}
1007
+ */
1008
+
1009
+ const measureScrollbar = () => {
1010
+ const scrollDiv = document.createElement('div');
1011
+ scrollDiv.className = swalClasses['scrollbar-measure'];
1012
+ document.body.appendChild(scrollDiv);
1013
+ const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
1014
+ document.body.removeChild(scrollDiv);
1015
+ return scrollbarWidth;
1016
+ };
1017
+
1018
+ /**
1019
+ * @param {SweetAlert2} instance
1020
+ * @param {SweetAlertOptions} params
1021
+ */
1022
+
1023
+ const renderActions = (instance, params) => {
1024
+ const actions = getActions();
1025
+ const loader = getLoader(); // Actions (buttons) wrapper
1026
+
1027
+ if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {
1028
+ hide(actions);
1029
+ } else {
1030
+ show(actions);
1031
+ } // Custom class
1032
+
1033
+
1034
+ applyCustomClass(actions, params, 'actions'); // Render all the buttons
1035
+
1036
+ renderButtons(actions, loader, params); // Loader
1037
+
1038
+ setInnerHtml(loader, params.loaderHtml);
1039
+ applyCustomClass(loader, params, 'loader');
1040
+ };
1041
+ /**
1042
+ * @param {HTMLElement} actions
1043
+ * @param {HTMLElement} loader
1044
+ * @param {SweetAlertOptions} params
1045
+ */
1046
+
1047
+ function renderButtons(actions, loader, params) {
1048
+ const confirmButton = getConfirmButton();
1049
+ const denyButton = getDenyButton();
1050
+ const cancelButton = getCancelButton(); // Render buttons
1051
+
1052
+ renderButton(confirmButton, 'confirm', params);
1053
+ renderButton(denyButton, 'deny', params);
1054
+ renderButton(cancelButton, 'cancel', params);
1055
+ handleButtonsStyling(confirmButton, denyButton, cancelButton, params);
1056
+
1057
+ if (params.reverseButtons) {
1058
+ if (params.toast) {
1059
+ actions.insertBefore(cancelButton, confirmButton);
1060
+ actions.insertBefore(denyButton, confirmButton);
1061
+ } else {
1062
+ actions.insertBefore(cancelButton, loader);
1063
+ actions.insertBefore(denyButton, loader);
1064
+ actions.insertBefore(confirmButton, loader);
1065
+ }
1066
+ }
1067
+ }
1068
+ /**
1069
+ * @param {HTMLElement} confirmButton
1070
+ * @param {HTMLElement} denyButton
1071
+ * @param {HTMLElement} cancelButton
1072
+ * @param {SweetAlertOptions} params
1073
+ */
1074
+
1075
+
1076
+ function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {
1077
+ if (!params.buttonsStyling) {
1078
+ return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);
1079
+ }
1080
+
1081
+ addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors
1082
+
1083
+ if (params.confirmButtonColor) {
1084
+ confirmButton.style.backgroundColor = params.confirmButtonColor;
1085
+ addClass(confirmButton, swalClasses['default-outline']);
1086
+ }
1087
+
1088
+ if (params.denyButtonColor) {
1089
+ denyButton.style.backgroundColor = params.denyButtonColor;
1090
+ addClass(denyButton, swalClasses['default-outline']);
1091
+ }
1092
+
1093
+ if (params.cancelButtonColor) {
1094
+ cancelButton.style.backgroundColor = params.cancelButtonColor;
1095
+ addClass(cancelButton, swalClasses['default-outline']);
1096
+ }
1097
+ }
1098
+ /**
1099
+ * @param {HTMLElement} button
1100
+ * @param {'confirm' | 'deny' | 'cancel'} buttonType
1101
+ * @param {SweetAlertOptions} params
1102
+ */
1103
+
1104
+
1105
+ function renderButton(button, buttonType, params) {
1106
+ toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block');
1107
+ setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text
1108
+
1109
+ button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label
1110
+ // Add buttons custom classes
1111
+
1112
+ button.className = swalClasses[buttonType];
1113
+ applyCustomClass(button, params, "".concat(buttonType, "Button"));
1114
+ addClass(button, params["".concat(buttonType, "ButtonClass")]);
1115
+ }
1116
+
1117
+ /**
1118
+ * @param {SweetAlert2} instance
1119
+ * @param {SweetAlertOptions} params
1120
+ */
1121
+
1122
+ const renderContainer = (instance, params) => {
1123
+ const container = getContainer();
1124
+
1125
+ if (!container) {
1126
+ return;
1127
+ }
1128
+
1129
+ handleBackdropParam(container, params.backdrop);
1130
+ handlePositionParam(container, params.position);
1131
+ handleGrowParam(container, params.grow); // Custom class
1132
+
1133
+ applyCustomClass(container, params, 'container');
1134
+ };
1135
+ /**
1136
+ * @param {HTMLElement} container
1137
+ * @param {SweetAlertOptions['backdrop']} backdrop
1138
+ */
1139
+
1140
+ function handleBackdropParam(container, backdrop) {
1141
+ if (typeof backdrop === 'string') {
1142
+ container.style.background = backdrop;
1143
+ } else if (!backdrop) {
1144
+ addClass([document.documentElement, document.body], swalClasses['no-backdrop']);
1145
+ }
1146
+ }
1147
+ /**
1148
+ * @param {HTMLElement} container
1149
+ * @param {SweetAlertOptions['position']} position
1150
+ */
1151
+
1152
+
1153
+ function handlePositionParam(container, position) {
1154
+ if (position in swalClasses) {
1155
+ addClass(container, swalClasses[position]);
1156
+ } else {
1157
+ warn('The "position" parameter is not valid, defaulting to "center"');
1158
+ addClass(container, swalClasses.center);
1159
+ }
1160
+ }
1161
+ /**
1162
+ * @param {HTMLElement} container
1163
+ * @param {SweetAlertOptions['grow']} grow
1164
+ */
1165
+
1166
+
1167
+ function handleGrowParam(container, grow) {
1168
+ if (grow && typeof grow === 'string') {
1169
+ const growClass = "grow-".concat(grow);
1170
+
1171
+ if (growClass in swalClasses) {
1172
+ addClass(container, swalClasses[growClass]);
1173
+ }
1174
+ }
1175
+ }
1176
+
1177
+ /**
1178
+ * This module contains `WeakMap`s for each effectively-"private property" that a `Swal` has.
1179
+ * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')`
1180
+ * This is the approach that Babel will probably take to implement private methods/fields
1181
+ * https://github.com/tc39/proposal-private-methods
1182
+ * https://github.com/babel/babel/pull/7555
1183
+ * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*
1184
+ * then we can use that language feature.
1185
+ */
1186
+ var privateProps = {
1187
+ awaitingPromise: new WeakMap(),
1188
+ promise: new WeakMap(),
1189
+ innerParams: new WeakMap(),
1190
+ domCache: new WeakMap()
1191
+ };
1192
+
1193
+ /// <reference path="../../../../sweetalert2.d.ts"/>
1194
+ /** @type {InputClass[]} */
1195
+
1196
+ const inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];
1197
+ /**
1198
+ * @param {SweetAlert2} instance
1199
+ * @param {SweetAlertOptions} params
1200
+ */
1201
+
1202
+ const renderInput = (instance, params) => {
1203
+ const popup = getPopup();
1204
+ const innerParams = privateProps.innerParams.get(instance);
1205
+ const rerender = !innerParams || params.input !== innerParams.input;
1206
+ inputClasses.forEach(inputClass => {
1207
+ const inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]); // set attributes
1208
+
1209
+ setAttributes(inputClass, params.inputAttributes); // set class
1210
+
1211
+ inputContainer.className = swalClasses[inputClass];
1212
+
1213
+ if (rerender) {
1214
+ hide(inputContainer);
1215
+ }
1216
+ });
1217
+
1218
+ if (params.input) {
1219
+ if (rerender) {
1220
+ showInput(params);
1221
+ } // set custom class
1222
+
1223
+
1224
+ setCustomClass(params);
1225
+ }
1226
+ };
1227
+ /**
1228
+ * @param {SweetAlertOptions} params
1229
+ */
1230
+
1231
+ const showInput = params => {
1232
+ if (!renderInputType[params.input]) {
1233
+ return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\""));
1234
+ }
1235
+
1236
+ const inputContainer = getInputContainer(params.input);
1237
+ const input = renderInputType[params.input](inputContainer, params);
1238
+ show(inputContainer); // input autofocus
1239
+
1240
+ setTimeout(() => {
1241
+ focusInput(input);
1242
+ });
1243
+ };
1244
+ /**
1245
+ * @param {HTMLInputElement} input
1246
+ */
1247
+
1248
+
1249
+ const removeAttributes = input => {
1250
+ for (let i = 0; i < input.attributes.length; i++) {
1251
+ const attrName = input.attributes[i].name;
1252
+
1253
+ if (!['type', 'value', 'style'].includes(attrName)) {
1254
+ input.removeAttribute(attrName);
1255
+ }
1256
+ }
1257
+ };
1258
+ /**
1259
+ * @param {InputClass} inputClass
1260
+ * @param {SweetAlertOptions['inputAttributes']} inputAttributes
1261
+ */
1262
+
1263
+
1264
+ const setAttributes = (inputClass, inputAttributes) => {
1265
+ const input = getInput(getPopup(), inputClass);
1266
+
1267
+ if (!input) {
1268
+ return;
1269
+ }
1270
+
1271
+ removeAttributes(input);
1272
+
1273
+ for (const attr in inputAttributes) {
1274
+ input.setAttribute(attr, inputAttributes[attr]);
1275
+ }
1276
+ };
1277
+ /**
1278
+ * @param {SweetAlertOptions} params
1279
+ */
1280
+
1281
+
1282
+ const setCustomClass = params => {
1283
+ const inputContainer = getInputContainer(params.input);
1284
+
1285
+ if (typeof params.customClass === 'object') {
1286
+ addClass(inputContainer, params.customClass.input);
1287
+ }
1288
+ };
1289
+ /**
1290
+ * @param {HTMLInputElement | HTMLTextAreaElement} input
1291
+ * @param {SweetAlertOptions} params
1292
+ */
1293
+
1294
+
1295
+ const setInputPlaceholder = (input, params) => {
1296
+ if (!input.placeholder || params.inputPlaceholder) {
1297
+ input.placeholder = params.inputPlaceholder;
1298
+ }
1299
+ };
1300
+ /**
1301
+ * @param {Input} input
1302
+ * @param {Input} prependTo
1303
+ * @param {SweetAlertOptions} params
1304
+ */
1305
+
1306
+
1307
+ const setInputLabel = (input, prependTo, params) => {
1308
+ if (params.inputLabel) {
1309
+ input.id = swalClasses.input;
1310
+ const label = document.createElement('label');
1311
+ const labelClass = swalClasses['input-label'];
1312
+ label.setAttribute('for', input.id);
1313
+ label.className = labelClass;
1314
+
1315
+ if (typeof params.customClass === 'object') {
1316
+ addClass(label, params.customClass.inputLabel);
1317
+ }
1318
+
1319
+ label.innerText = params.inputLabel;
1320
+ prependTo.insertAdjacentElement('beforebegin', label);
1321
+ }
1322
+ };
1323
+ /**
1324
+ * @param {SweetAlertOptions['input']} inputType
1325
+ * @returns {HTMLElement}
1326
+ */
1327
+
1328
+
1329
+ const getInputContainer = inputType => {
1330
+ return getDirectChildByClass(getPopup(), swalClasses[inputType] || swalClasses.input);
1331
+ };
1332
+ /**
1333
+ * @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input
1334
+ * @param {SweetAlertOptions['inputValue']} inputValue
1335
+ */
1336
+
1337
+
1338
+ const checkAndSetInputValue = (input, inputValue) => {
1339
+ if (['string', 'number'].includes(typeof inputValue)) {
1340
+ input.value = "".concat(inputValue);
1341
+ } else if (!isPromise(inputValue)) {
1342
+ warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof inputValue, "\""));
1343
+ }
1344
+ };
1345
+ /** @type Record<string, (input: Input | HTMLElement, params: SweetAlertOptions) => Input> */
1346
+
1347
+
1348
+ const renderInputType = {};
1349
+ /**
1350
+ * @param {HTMLInputElement} input
1351
+ * @param {SweetAlertOptions} params
1352
+ * @returns {HTMLInputElement}
1353
+ */
1354
+
1355
+ renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => {
1356
+ checkAndSetInputValue(input, params.inputValue);
1357
+ setInputLabel(input, input, params);
1358
+ setInputPlaceholder(input, params);
1359
+ input.type = params.input;
1360
+ return input;
1361
+ };
1362
+ /**
1363
+ * @param {HTMLInputElement} input
1364
+ * @param {SweetAlertOptions} params
1365
+ * @returns {HTMLInputElement}
1366
+ */
1367
+
1368
+
1369
+ renderInputType.file = (input, params) => {
1370
+ setInputLabel(input, input, params);
1371
+ setInputPlaceholder(input, params);
1372
+ return input;
1373
+ };
1374
+ /**
1375
+ * @param {HTMLInputElement} range
1376
+ * @param {SweetAlertOptions} params
1377
+ * @returns {HTMLInputElement}
1378
+ */
1379
+
1380
+
1381
+ renderInputType.range = (range, params) => {
1382
+ const rangeInput = range.querySelector('input');
1383
+ const rangeOutput = range.querySelector('output');
1384
+ checkAndSetInputValue(rangeInput, params.inputValue);
1385
+ rangeInput.type = params.input;
1386
+ checkAndSetInputValue(rangeOutput, params.inputValue);
1387
+ setInputLabel(rangeInput, range, params);
1388
+ return range;
1389
+ };
1390
+ /**
1391
+ * @param {HTMLSelectElement} select
1392
+ * @param {SweetAlertOptions} params
1393
+ * @returns {HTMLSelectElement}
1394
+ */
1395
+
1396
+
1397
+ renderInputType.select = (select, params) => {
1398
+ select.textContent = '';
1399
+
1400
+ if (params.inputPlaceholder) {
1401
+ const placeholder = document.createElement('option');
1402
+ setInnerHtml(placeholder, params.inputPlaceholder);
1403
+ placeholder.value = '';
1404
+ placeholder.disabled = true;
1405
+ placeholder.selected = true;
1406
+ select.appendChild(placeholder);
1407
+ }
1408
+
1409
+ setInputLabel(select, select, params);
1410
+ return select;
1411
+ };
1412
+ /**
1413
+ * @param {HTMLInputElement} radio
1414
+ * @returns {HTMLInputElement}
1415
+ */
1416
+
1417
+
1418
+ renderInputType.radio = radio => {
1419
+ radio.textContent = '';
1420
+ return radio;
1421
+ };
1422
+ /**
1423
+ * @param {HTMLLabelElement} checkboxContainer
1424
+ * @param {SweetAlertOptions} params
1425
+ * @returns {HTMLInputElement}
1426
+ */
1427
+
1428
+
1429
+ renderInputType.checkbox = (checkboxContainer, params) => {
1430
+ const checkbox = getInput(getPopup(), 'checkbox');
1431
+ checkbox.value = '1';
1432
+ checkbox.id = swalClasses.checkbox;
1433
+ checkbox.checked = Boolean(params.inputValue);
1434
+ const label = checkboxContainer.querySelector('span');
1435
+ setInnerHtml(label, params.inputPlaceholder);
1436
+ return checkbox;
1437
+ };
1438
+ /**
1439
+ * @param {HTMLTextAreaElement} textarea
1440
+ * @param {SweetAlertOptions} params
1441
+ * @returns {HTMLTextAreaElement}
1442
+ */
1443
+
1444
+
1445
+ renderInputType.textarea = (textarea, params) => {
1446
+ checkAndSetInputValue(textarea, params.inputValue);
1447
+ setInputPlaceholder(textarea, params);
1448
+ setInputLabel(textarea, textarea, params);
1449
+ /**
1450
+ * @param {HTMLElement} el
1451
+ * @returns {number}
1452
+ */
1453
+
1454
+ const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); // https://github.com/sweetalert2/sweetalert2/issues/2291
1455
+
1456
+
1457
+ setTimeout(() => {
1458
+ // https://github.com/sweetalert2/sweetalert2/issues/1699
1459
+ if ('MutationObserver' in window) {
1460
+ const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);
1461
+
1462
+ const textareaResizeHandler = () => {
1463
+ const textareaWidth = textarea.offsetWidth + getMargin(textarea);
1464
+
1465
+ if (textareaWidth > initialPopupWidth) {
1466
+ getPopup().style.width = "".concat(textareaWidth, "px");
1467
+ } else {
1468
+ getPopup().style.width = null;
1469
+ }
1470
+ };
1471
+
1472
+ new MutationObserver(textareaResizeHandler).observe(textarea, {
1473
+ attributes: true,
1474
+ attributeFilter: ['style']
1475
+ });
1476
+ }
1477
+ });
1478
+ return textarea;
1479
+ };
1480
+
1481
+ /**
1482
+ * @param {SweetAlert2} instance
1483
+ * @param {SweetAlertOptions} params
1484
+ */
1485
+
1486
+ const renderContent = (instance, params) => {
1487
+ const htmlContainer = getHtmlContainer();
1488
+ applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML
1489
+
1490
+ if (params.html) {
1491
+ parseHtmlToContainer(params.html, htmlContainer);
1492
+ show(htmlContainer, 'block');
1493
+ } // Content as plain text
1494
+ else if (params.text) {
1495
+ htmlContainer.textContent = params.text;
1496
+ show(htmlContainer, 'block');
1497
+ } // No content
1498
+ else {
1499
+ hide(htmlContainer);
1500
+ }
1501
+
1502
+ renderInput(instance, params);
1503
+ };
1504
+
1505
+ /**
1506
+ * @param {SweetAlert2} instance
1507
+ * @param {SweetAlertOptions} params
1508
+ */
1509
+
1510
+ const renderFooter = (instance, params) => {
1511
+ const footer = getFooter();
1512
+ toggle(footer, params.footer);
1513
+
1514
+ if (params.footer) {
1515
+ parseHtmlToContainer(params.footer, footer);
1516
+ } // Custom class
1517
+
1518
+
1519
+ applyCustomClass(footer, params, 'footer');
1520
+ };
1521
+
1522
+ /**
1523
+ * @param {SweetAlert2} instance
1524
+ * @param {SweetAlertOptions} params
1525
+ */
1526
+
1527
+ const renderCloseButton = (instance, params) => {
1528
+ const closeButton = getCloseButton();
1529
+ setInnerHtml(closeButton, params.closeButtonHtml); // Custom class
1530
+
1531
+ applyCustomClass(closeButton, params, 'closeButton');
1532
+ toggle(closeButton, params.showCloseButton);
1533
+ closeButton.setAttribute('aria-label', params.closeButtonAriaLabel);
1534
+ };
1535
+
1536
+ /**
1537
+ * @param {SweetAlert2} instance
1538
+ * @param {SweetAlertOptions} params
1539
+ */
1540
+
1541
+ const renderIcon = (instance, params) => {
1542
+ const innerParams = privateProps.innerParams.get(instance);
1543
+ const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon
1544
+
1545
+ if (innerParams && params.icon === innerParams.icon) {
1546
+ // Custom or default content
1547
+ setContent(icon, params);
1548
+ applyStyles(icon, params);
1549
+ return;
1550
+ }
1551
+
1552
+ if (!params.icon && !params.iconHtml) {
1553
+ hide(icon);
1554
+ return;
1555
+ }
1556
+
1557
+ if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {
1558
+ error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\""));
1559
+ hide(icon);
1560
+ return;
1561
+ }
1562
+
1563
+ show(icon); // Custom or default content
1564
+
1565
+ setContent(icon, params);
1566
+ applyStyles(icon, params); // Animate icon
1567
+
1568
+ addClass(icon, params.showClass.icon);
1569
+ };
1570
+ /**
1571
+ * @param {HTMLElement} icon
1572
+ * @param {SweetAlertOptions} params
1573
+ */
1574
+
1575
+ const applyStyles = (icon, params) => {
1576
+ for (const iconType in iconTypes) {
1577
+ if (params.icon !== iconType) {
1578
+ removeClass(icon, iconTypes[iconType]);
1579
+ }
1580
+ }
1581
+
1582
+ addClass(icon, iconTypes[params.icon]); // Icon color
1583
+
1584
+ setColor(icon, params); // Success icon background color
1585
+
1586
+ adjustSuccessIconBackgroundColor(); // Custom class
1587
+
1588
+ applyCustomClass(icon, params, 'icon');
1589
+ }; // Adjust success icon background color to match the popup background color
1590
+
1591
+
1592
+ const adjustSuccessIconBackgroundColor = () => {
1593
+ const popup = getPopup();
1594
+ const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');
1595
+ /** @type {NodeListOf<HTMLElement>} */
1596
+
1597
+ const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');
1598
+
1599
+ for (let i = 0; i < successIconParts.length; i++) {
1600
+ successIconParts[i].style.backgroundColor = popupBackgroundColor;
1601
+ }
1602
+ };
1603
+
1604
+ const successIconHtml = "\n <div class=\"swal2-success-circular-line-left\"></div>\n <span class=\"swal2-success-line-tip\"></span> <span class=\"swal2-success-line-long\"></span>\n <div class=\"swal2-success-ring\"></div> <div class=\"swal2-success-fix\"></div>\n <div class=\"swal2-success-circular-line-right\"></div>\n";
1605
+ const errorIconHtml = "\n <span class=\"swal2-x-mark\">\n <span class=\"swal2-x-mark-line-left\"></span>\n <span class=\"swal2-x-mark-line-right\"></span>\n </span>\n";
1606
+ /**
1607
+ * @param {HTMLElement} icon
1608
+ * @param {SweetAlertOptions} params
1609
+ */
1610
+
1611
+ const setContent = (icon, params) => {
1612
+ let oldContent = icon.innerHTML;
1613
+ let newContent;
1614
+
1615
+ if (params.iconHtml) {
1616
+ newContent = iconContent(params.iconHtml);
1617
+ } else if (params.icon === 'success') {
1618
+ newContent = successIconHtml;
1619
+ oldContent = oldContent.replace(/ style=".*?"/g, ''); // undo adjustSuccessIconBackgroundColor()
1620
+ } else if (params.icon === 'error') {
1621
+ newContent = errorIconHtml;
1622
+ } else {
1623
+ const defaultIconHtml = {
1624
+ question: '?',
1625
+ warning: '!',
1626
+ info: 'i'
1627
+ };
1628
+ newContent = iconContent(defaultIconHtml[params.icon]);
1629
+ }
1630
+
1631
+ if (oldContent.trim() !== newContent.trim()) {
1632
+ setInnerHtml(icon, newContent);
1633
+ }
1634
+ };
1635
+ /**
1636
+ * @param {HTMLElement} icon
1637
+ * @param {SweetAlertOptions} params
1638
+ */
1639
+
1640
+
1641
+ const setColor = (icon, params) => {
1642
+ if (!params.iconColor) {
1643
+ return;
1644
+ }
1645
+
1646
+ icon.style.color = params.iconColor;
1647
+ icon.style.borderColor = params.iconColor;
1648
+
1649
+ for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) {
1650
+ setStyle(icon, sel, 'backgroundColor', params.iconColor);
1651
+ }
1652
+
1653
+ setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor);
1654
+ };
1655
+ /**
1656
+ * @param {string} content
1657
+ * @returns {string}
1658
+ */
1659
+
1660
+
1661
+ const iconContent = content => "<div class=\"".concat(swalClasses['icon-content'], "\">").concat(content, "</div>");
1662
+
1663
+ /**
1664
+ * @param {SweetAlert2} instance
1665
+ * @param {SweetAlertOptions} params
1666
+ */
1667
+
1668
+ const renderImage = (instance, params) => {
1669
+ const image = getImage();
1670
+
1671
+ if (!params.imageUrl) {
1672
+ return hide(image);
1673
+ }
1674
+
1675
+ show(image, ''); // Src, alt
1676
+
1677
+ image.setAttribute('src', params.imageUrl);
1678
+ image.setAttribute('alt', params.imageAlt); // Width, height
1679
+
1680
+ applyNumericalStyle(image, 'width', params.imageWidth);
1681
+ applyNumericalStyle(image, 'height', params.imageHeight); // Class
1682
+
1683
+ image.className = swalClasses.image;
1684
+ applyCustomClass(image, params, 'image');
1685
+ };
1686
+
1687
+ /**
1688
+ * @param {SweetAlert2} instance
1689
+ * @param {SweetAlertOptions} params
1690
+ */
1691
+
1692
+ const renderProgressSteps = (instance, params) => {
1693
+ const progressStepsContainer = getProgressSteps();
1694
+
1695
+ if (!params.progressSteps || params.progressSteps.length === 0) {
1696
+ return hide(progressStepsContainer);
1697
+ }
1698
+
1699
+ show(progressStepsContainer);
1700
+ progressStepsContainer.textContent = '';
1701
+
1702
+ if (params.currentProgressStep >= params.progressSteps.length) {
1703
+ warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');
1704
+ }
1705
+
1706
+ params.progressSteps.forEach((step, index) => {
1707
+ const stepEl = createStepElement(step);
1708
+ progressStepsContainer.appendChild(stepEl);
1709
+
1710
+ if (index === params.currentProgressStep) {
1711
+ addClass(stepEl, swalClasses['active-progress-step']);
1712
+ }
1713
+
1714
+ if (index !== params.progressSteps.length - 1) {
1715
+ const lineEl = createLineElement(params);
1716
+ progressStepsContainer.appendChild(lineEl);
1717
+ }
1718
+ });
1719
+ };
1720
+ /**
1721
+ * @param {string} step
1722
+ * @returns {HTMLLIElement}
1723
+ */
1724
+
1725
+ const createStepElement = step => {
1726
+ const stepEl = document.createElement('li');
1727
+ addClass(stepEl, swalClasses['progress-step']);
1728
+ setInnerHtml(stepEl, step);
1729
+ return stepEl;
1730
+ };
1731
+ /**
1732
+ * @param {SweetAlertOptions} params
1733
+ * @returns {HTMLLIElement}
1734
+ */
1735
+
1736
+
1737
+ const createLineElement = params => {
1738
+ const lineEl = document.createElement('li');
1739
+ addClass(lineEl, swalClasses['progress-step-line']);
1740
+
1741
+ if (params.progressStepsDistance) {
1742
+ applyNumericalStyle(lineEl, 'width', params.progressStepsDistance);
1743
+ }
1744
+
1745
+ return lineEl;
1746
+ };
1747
+
1748
+ /**
1749
+ * @param {SweetAlert2} instance
1750
+ * @param {SweetAlertOptions} params
1751
+ */
1752
+
1753
+ const renderTitle = (instance, params) => {
1754
+ const title = getTitle();
1755
+ toggle(title, params.title || params.titleText, 'block');
1756
+
1757
+ if (params.title) {
1758
+ parseHtmlToContainer(params.title, title);
1759
+ }
1760
+
1761
+ if (params.titleText) {
1762
+ title.innerText = params.titleText;
1763
+ } // Custom class
1764
+
1765
+
1766
+ applyCustomClass(title, params, 'title');
1767
+ };
1768
+
1769
+ /**
1770
+ * @param {SweetAlert2} instance
1771
+ * @param {SweetAlertOptions} params
1772
+ */
1773
+
1774
+ const renderPopup = (instance, params) => {
1775
+ const container = getContainer();
1776
+ const popup = getPopup(); // Width
1777
+ // https://github.com/sweetalert2/sweetalert2/issues/2170
1778
+
1779
+ if (params.toast) {
1780
+ applyNumericalStyle(container, 'width', params.width);
1781
+ popup.style.width = '100%';
1782
+ popup.insertBefore(getLoader(), getIcon());
1783
+ } else {
1784
+ applyNumericalStyle(popup, 'width', params.width);
1785
+ } // Padding
1786
+
1787
+
1788
+ applyNumericalStyle(popup, 'padding', params.padding); // Color
1789
+
1790
+ if (params.color) {
1791
+ popup.style.color = params.color;
1792
+ } // Background
1793
+
1794
+
1795
+ if (params.background) {
1796
+ popup.style.background = params.background;
1797
+ }
1798
+
1799
+ hide(getValidationMessage()); // Classes
1800
+
1801
+ addClasses(popup, params);
1802
+ };
1803
+ /**
1804
+ * @param {HTMLElement} popup
1805
+ * @param {SweetAlertOptions} params
1806
+ */
1807
+
1808
+ const addClasses = (popup, params) => {
1809
+ // Default Class + showClass when updating Swal.update({})
1810
+ popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : '');
1811
+
1812
+ if (params.toast) {
1813
+ addClass([document.documentElement, document.body], swalClasses['toast-shown']);
1814
+ addClass(popup, swalClasses.toast);
1815
+ } else {
1816
+ addClass(popup, swalClasses.modal);
1817
+ } // Custom class
1818
+
1819
+
1820
+ applyCustomClass(popup, params, 'popup');
1821
+
1822
+ if (typeof params.customClass === 'string') {
1823
+ addClass(popup, params.customClass);
1824
+ } // Icon class (#1842)
1825
+
1826
+
1827
+ if (params.icon) {
1828
+ addClass(popup, swalClasses["icon-".concat(params.icon)]);
1829
+ }
1830
+ };
1831
+
1832
+ /**
1833
+ * @param {SweetAlert2} instance
1834
+ * @param {SweetAlertOptions} params
1835
+ */
1836
+
1837
+ const render = (instance, params) => {
1838
+ renderPopup(instance, params);
1839
+ renderContainer(instance, params);
1840
+ renderProgressSteps(instance, params);
1841
+ renderIcon(instance, params);
1842
+ renderImage(instance, params);
1843
+ renderTitle(instance, params);
1844
+ renderCloseButton(instance, params);
1845
+ renderContent(instance, params);
1846
+ renderActions(instance, params);
1847
+ renderFooter(instance, params);
1848
+
1849
+ if (typeof params.didRender === 'function') {
1850
+ params.didRender(getPopup());
1851
+ }
1852
+ };
1853
+
1854
+ const DismissReason = Object.freeze({
1855
+ cancel: 'cancel',
1856
+ backdrop: 'backdrop',
1857
+ close: 'close',
1858
+ esc: 'esc',
1859
+ timer: 'timer'
1860
+ });
1861
+
1862
+ // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that
1863
+ // elements not within the active modal dialog will not be surfaced if a user opens a screen
1864
+ // reader’s list of elements (headings, form controls, landmarks, etc.) in the document.
1865
+
1866
+ const setAriaHidden = () => {
1867
+ const bodyChildren = Array.from(document.body.children);
1868
+ bodyChildren.forEach(el => {
1869
+ if (el === getContainer() || el.contains(getContainer())) {
1870
+ return;
1871
+ }
1872
+
1873
+ if (el.hasAttribute('aria-hidden')) {
1874
+ el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden'));
1875
+ }
1876
+
1877
+ el.setAttribute('aria-hidden', 'true');
1878
+ });
1879
+ };
1880
+ const unsetAriaHidden = () => {
1881
+ const bodyChildren = Array.from(document.body.children);
1882
+ bodyChildren.forEach(el => {
1883
+ if (el.hasAttribute('data-previous-aria-hidden')) {
1884
+ el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden'));
1885
+ el.removeAttribute('data-previous-aria-hidden');
1886
+ } else {
1887
+ el.removeAttribute('aria-hidden');
1888
+ }
1889
+ });
1890
+ };
1891
+
1892
+ const swalStringParams = ['swal-title', 'swal-html', 'swal-footer'];
1893
+ const getTemplateParams = params => {
1894
+ const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template;
1895
+
1896
+ if (!template) {
1897
+ return {};
1898
+ }
1899
+ /** @type {DocumentFragment} */
1900
+
1901
+
1902
+ const templateContent = template.content;
1903
+ showWarningsForElements(templateContent);
1904
+ const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams));
1905
+ return result;
1906
+ };
1907
+ /**
1908
+ * @param {DocumentFragment} templateContent
1909
+ */
1910
+
1911
+ const getSwalParams = templateContent => {
1912
+ const result = {};
1913
+ /** @type {HTMLElement[]} */
1914
+
1915
+ const swalParams = Array.from(templateContent.querySelectorAll('swal-param'));
1916
+ swalParams.forEach(param => {
1917
+ showWarningsForAttributes(param, ['name', 'value']);
1918
+ const paramName = param.getAttribute('name');
1919
+ const value = param.getAttribute('value');
1920
+
1921
+ if (typeof defaultParams[paramName] === 'boolean' && value === 'false') {
1922
+ result[paramName] = false;
1923
+ }
1924
+
1925
+ if (typeof defaultParams[paramName] === 'object') {
1926
+ result[paramName] = JSON.parse(value);
1927
+ }
1928
+ });
1929
+ return result;
1930
+ };
1931
+ /**
1932
+ * @param {DocumentFragment} templateContent
1933
+ */
1934
+
1935
+
1936
+ const getSwalButtons = templateContent => {
1937
+ const result = {};
1938
+ /** @type {HTMLElement[]} */
1939
+
1940
+ const swalButtons = Array.from(templateContent.querySelectorAll('swal-button'));
1941
+ swalButtons.forEach(button => {
1942
+ showWarningsForAttributes(button, ['type', 'color', 'aria-label']);
1943
+ const type = button.getAttribute('type');
1944
+ result["".concat(type, "ButtonText")] = button.innerHTML;
1945
+ result["show".concat(capitalizeFirstLetter(type), "Button")] = true;
1946
+
1947
+ if (button.hasAttribute('color')) {
1948
+ result["".concat(type, "ButtonColor")] = button.getAttribute('color');
1949
+ }
1950
+
1951
+ if (button.hasAttribute('aria-label')) {
1952
+ result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label');
1953
+ }
1954
+ });
1955
+ return result;
1956
+ };
1957
+ /**
1958
+ * @param {DocumentFragment} templateContent
1959
+ */
1960
+
1961
+
1962
+ const getSwalImage = templateContent => {
1963
+ const result = {};
1964
+ /** @type {HTMLElement} */
1965
+
1966
+ const image = templateContent.querySelector('swal-image');
1967
+
1968
+ if (image) {
1969
+ showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']);
1970
+
1971
+ if (image.hasAttribute('src')) {
1972
+ result.imageUrl = image.getAttribute('src');
1973
+ }
1974
+
1975
+ if (image.hasAttribute('width')) {
1976
+ result.imageWidth = image.getAttribute('width');
1977
+ }
1978
+
1979
+ if (image.hasAttribute('height')) {
1980
+ result.imageHeight = image.getAttribute('height');
1981
+ }
1982
+
1983
+ if (image.hasAttribute('alt')) {
1984
+ result.imageAlt = image.getAttribute('alt');
1985
+ }
1986
+ }
1987
+
1988
+ return result;
1989
+ };
1990
+ /**
1991
+ * @param {DocumentFragment} templateContent
1992
+ */
1993
+
1994
+
1995
+ const getSwalIcon = templateContent => {
1996
+ const result = {};
1997
+ /** @type {HTMLElement} */
1998
+
1999
+ const icon = templateContent.querySelector('swal-icon');
2000
+
2001
+ if (icon) {
2002
+ showWarningsForAttributes(icon, ['type', 'color']);
2003
+
2004
+ if (icon.hasAttribute('type')) {
2005
+ result.icon = icon.getAttribute('type');
2006
+ }
2007
+
2008
+ if (icon.hasAttribute('color')) {
2009
+ result.iconColor = icon.getAttribute('color');
2010
+ }
2011
+
2012
+ result.iconHtml = icon.innerHTML;
2013
+ }
2014
+
2015
+ return result;
2016
+ };
2017
+ /**
2018
+ * @param {DocumentFragment} templateContent
2019
+ */
2020
+
2021
+
2022
+ const getSwalInput = templateContent => {
2023
+ const result = {};
2024
+ /** @type {HTMLElement} */
2025
+
2026
+ const input = templateContent.querySelector('swal-input');
2027
+
2028
+ if (input) {
2029
+ showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']);
2030
+ result.input = input.getAttribute('type') || 'text';
2031
+
2032
+ if (input.hasAttribute('label')) {
2033
+ result.inputLabel = input.getAttribute('label');
2034
+ }
2035
+
2036
+ if (input.hasAttribute('placeholder')) {
2037
+ result.inputPlaceholder = input.getAttribute('placeholder');
2038
+ }
2039
+
2040
+ if (input.hasAttribute('value')) {
2041
+ result.inputValue = input.getAttribute('value');
2042
+ }
2043
+ }
2044
+ /** @type {HTMLElement[]} */
2045
+
2046
+
2047
+ const inputOptions = Array.from(templateContent.querySelectorAll('swal-input-option'));
2048
+
2049
+ if (inputOptions.length) {
2050
+ result.inputOptions = {};
2051
+ inputOptions.forEach(option => {
2052
+ showWarningsForAttributes(option, ['value']);
2053
+ const optionValue = option.getAttribute('value');
2054
+ const optionName = option.innerHTML;
2055
+ result.inputOptions[optionValue] = optionName;
2056
+ });
2057
+ }
2058
+
2059
+ return result;
2060
+ };
2061
+ /**
2062
+ * @param {DocumentFragment} templateContent
2063
+ * @param {string[]} paramNames
2064
+ */
2065
+
2066
+
2067
+ const getSwalStringParams = (templateContent, paramNames) => {
2068
+ const result = {};
2069
+
2070
+ for (const i in paramNames) {
2071
+ const paramName = paramNames[i];
2072
+ /** @type {HTMLElement} */
2073
+
2074
+ const tag = templateContent.querySelector(paramName);
2075
+
2076
+ if (tag) {
2077
+ showWarningsForAttributes(tag, []);
2078
+ result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim();
2079
+ }
2080
+ }
2081
+
2082
+ return result;
2083
+ };
2084
+ /**
2085
+ * @param {DocumentFragment} templateContent
2086
+ */
2087
+
2088
+
2089
+ const showWarningsForElements = templateContent => {
2090
+ const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']);
2091
+ Array.from(templateContent.children).forEach(el => {
2092
+ const tagName = el.tagName.toLowerCase();
2093
+
2094
+ if (allowedElements.indexOf(tagName) === -1) {
2095
+ warn("Unrecognized element <".concat(tagName, ">"));
2096
+ }
2097
+ });
2098
+ };
2099
+ /**
2100
+ * @param {HTMLElement} el
2101
+ * @param {string[]} allowedAttributes
2102
+ */
2103
+
2104
+
2105
+ const showWarningsForAttributes = (el, allowedAttributes) => {
2106
+ Array.from(el.attributes).forEach(attribute => {
2107
+ if (allowedAttributes.indexOf(attribute.name) === -1) {
2108
+ warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]);
2109
+ }
2110
+ });
2111
+ };
2112
+
2113
+ var defaultInputValidators = {
2114
+ /**
2115
+ * @param {string} string
2116
+ * @param {string} validationMessage
2117
+ * @returns {Promise<void | string>}
2118
+ */
2119
+ email: (string, validationMessage) => {
2120
+ return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address');
2121
+ },
2122
+
2123
+ /**
2124
+ * @param {string} string
2125
+ * @param {string} validationMessage
2126
+ * @returns {Promise<void | string>}
2127
+ */
2128
+ url: (string, validationMessage) => {
2129
+ // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013
2130
+ return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL');
2131
+ }
2132
+ };
2133
+
2134
+ /**
2135
+ * @param {SweetAlertOptions} params
2136
+ */
2137
+
2138
+ function setDefaultInputValidators(params) {
2139
+ // Use default `inputValidator` for supported input types if not provided
2140
+ if (!params.inputValidator) {
2141
+ Object.keys(defaultInputValidators).forEach(key => {
2142
+ if (params.input === key) {
2143
+ params.inputValidator = defaultInputValidators[key];
2144
+ }
2145
+ });
2146
+ }
2147
+ }
2148
+ /**
2149
+ * @param {SweetAlertOptions} params
2150
+ */
2151
+
2152
+
2153
+ function validateCustomTargetElement(params) {
2154
+ // Determine if the custom target element is valid
2155
+ if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) {
2156
+ warn('Target parameter is not valid, defaulting to "body"');
2157
+ params.target = 'body';
2158
+ }
2159
+ }
2160
+ /**
2161
+ * Set type, text and actions on popup
2162
+ *
2163
+ * @param {SweetAlertOptions} params
2164
+ */
2165
+
2166
+
2167
+ function setParameters(params) {
2168
+ setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm
2169
+
2170
+ if (params.showLoaderOnConfirm && !params.preConfirm) {
2171
+ warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request');
2172
+ }
2173
+
2174
+ validateCustomTargetElement(params); // Replace newlines with <br> in title
2175
+
2176
+ if (typeof params.title === 'string') {
2177
+ params.title = params.title.split('\n').join('<br />');
2178
+ }
2179
+
2180
+ init(params);
2181
+ }
2182
+
2183
+ class Timer {
2184
+ /**
2185
+ * @param {Function} callback
2186
+ * @param {number} delay
2187
+ */
2188
+ constructor(callback, delay) {
2189
+ this.callback = callback;
2190
+ this.remaining = delay;
2191
+ this.running = false;
2192
+ this.start();
2193
+ }
2194
+
2195
+ start() {
2196
+ if (!this.running) {
2197
+ this.running = true;
2198
+ this.started = new Date();
2199
+ this.id = setTimeout(this.callback, this.remaining);
2200
+ }
2201
+
2202
+ return this.remaining;
2203
+ }
2204
+
2205
+ stop() {
2206
+ if (this.running) {
2207
+ this.running = false;
2208
+ clearTimeout(this.id);
2209
+ this.remaining -= new Date().getTime() - this.started.getTime();
2210
+ }
2211
+
2212
+ return this.remaining;
2213
+ }
2214
+
2215
+ increase(n) {
2216
+ const running = this.running;
2217
+
2218
+ if (running) {
2219
+ this.stop();
2220
+ }
2221
+
2222
+ this.remaining += n;
2223
+
2224
+ if (running) {
2225
+ this.start();
2226
+ }
2227
+
2228
+ return this.remaining;
2229
+ }
2230
+
2231
+ getTimerLeft() {
2232
+ if (this.running) {
2233
+ this.stop();
2234
+ this.start();
2235
+ }
2236
+
2237
+ return this.remaining;
2238
+ }
2239
+
2240
+ isRunning() {
2241
+ return this.running;
2242
+ }
2243
+
2244
+ }
2245
+
2246
+ const fixScrollbar = () => {
2247
+ // for queues, do not do this more than once
2248
+ if (states.previousBodyPadding !== null) {
2249
+ return;
2250
+ } // if the body has overflow
2251
+
2252
+
2253
+ if (document.body.scrollHeight > window.innerHeight) {
2254
+ // add padding so the content doesn't shift after removal of scrollbar
2255
+ states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));
2256
+ document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px");
2257
+ }
2258
+ };
2259
+ const undoScrollbar = () => {
2260
+ if (states.previousBodyPadding !== null) {
2261
+ document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px");
2262
+ states.previousBodyPadding = null;
2263
+ }
2264
+ };
2265
+
2266
+ /* istanbul ignore file */
2267
+
2268
+ const iOSfix = () => {
2269
+ const iOS = // @ts-ignore
2270
+ /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;
2271
+
2272
+ if (iOS && !hasClass(document.body, swalClasses.iosfix)) {
2273
+ const offset = document.body.scrollTop;
2274
+ document.body.style.top = "".concat(offset * -1, "px");
2275
+ addClass(document.body, swalClasses.iosfix);
2276
+ lockBodyScroll();
2277
+ addBottomPaddingForTallPopups();
2278
+ }
2279
+ };
2280
+ /**
2281
+ * https://github.com/sweetalert2/sweetalert2/issues/1948
2282
+ */
2283
+
2284
+ const addBottomPaddingForTallPopups = () => {
2285
+ const ua = navigator.userAgent;
2286
+ const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);
2287
+ const webkit = !!ua.match(/WebKit/i);
2288
+ const iOSSafari = iOS && webkit && !ua.match(/CriOS/i);
2289
+
2290
+ if (iOSSafari) {
2291
+ const bottomPanelHeight = 44;
2292
+
2293
+ if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) {
2294
+ getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px");
2295
+ }
2296
+ }
2297
+ };
2298
+ /**
2299
+ * https://github.com/sweetalert2/sweetalert2/issues/1246
2300
+ */
2301
+
2302
+
2303
+ const lockBodyScroll = () => {
2304
+ const container = getContainer();
2305
+ let preventTouchMove;
2306
+ /**
2307
+ * @param {TouchEvent} e
2308
+ */
2309
+
2310
+ container.ontouchstart = e => {
2311
+ preventTouchMove = shouldPreventTouchMove(e);
2312
+ };
2313
+ /**
2314
+ * @param {TouchEvent} e
2315
+ */
2316
+
2317
+
2318
+ container.ontouchmove = e => {
2319
+ if (preventTouchMove) {
2320
+ e.preventDefault();
2321
+ e.stopPropagation();
2322
+ }
2323
+ };
2324
+ };
2325
+ /**
2326
+ * @param {TouchEvent} event
2327
+ * @returns {boolean}
2328
+ */
2329
+
2330
+
2331
+ const shouldPreventTouchMove = event => {
2332
+ const target = event.target;
2333
+ const container = getContainer();
2334
+
2335
+ if (isStylus(event) || isZoom(event)) {
2336
+ return false;
2337
+ }
2338
+
2339
+ if (target === container) {
2340
+ return true;
2341
+ }
2342
+
2343
+ if (!isScrollable(container) && target instanceof HTMLElement && target.tagName !== 'INPUT' && // #1603
2344
+ target.tagName !== 'TEXTAREA' && // #2266
2345
+ !(isScrollable(getHtmlContainer()) && // #1944
2346
+ getHtmlContainer().contains(target))) {
2347
+ return true;
2348
+ }
2349
+
2350
+ return false;
2351
+ };
2352
+ /**
2353
+ * https://github.com/sweetalert2/sweetalert2/issues/1786
2354
+ *
2355
+ * @param {*} event
2356
+ * @returns {boolean}
2357
+ */
2358
+
2359
+
2360
+ const isStylus = event => {
2361
+ return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';
2362
+ };
2363
+ /**
2364
+ * https://github.com/sweetalert2/sweetalert2/issues/1891
2365
+ *
2366
+ * @param {TouchEvent} event
2367
+ * @returns {boolean}
2368
+ */
2369
+
2370
+
2371
+ const isZoom = event => {
2372
+ return event.touches && event.touches.length > 1;
2373
+ };
2374
+
2375
+ const undoIOSfix = () => {
2376
+ if (hasClass(document.body, swalClasses.iosfix)) {
2377
+ const offset = parseInt(document.body.style.top, 10);
2378
+ removeClass(document.body, swalClasses.iosfix);
2379
+ document.body.style.top = '';
2380
+ document.body.scrollTop = offset * -1;
2381
+ }
2382
+ };
2383
+
2384
+ const SHOW_CLASS_TIMEOUT = 10;
2385
+ /**
2386
+ * Open popup, add necessary classes and styles, fix scrollbar
2387
+ *
2388
+ * @param {SweetAlertOptions} params
2389
+ */
2390
+
2391
+ const openPopup = params => {
2392
+ const container = getContainer();
2393
+ const popup = getPopup();
2394
+
2395
+ if (typeof params.willOpen === 'function') {
2396
+ params.willOpen(popup);
2397
+ }
2398
+
2399
+ const bodyStyles = window.getComputedStyle(document.body);
2400
+ const initialBodyOverflow = bodyStyles.overflowY;
2401
+ addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto'
2402
+
2403
+ setTimeout(() => {
2404
+ setScrollingVisibility(container, popup);
2405
+ }, SHOW_CLASS_TIMEOUT);
2406
+
2407
+ if (isModal()) {
2408
+ fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow);
2409
+ setAriaHidden();
2410
+ }
2411
+
2412
+ if (!isToast() && !globalState.previousActiveElement) {
2413
+ globalState.previousActiveElement = document.activeElement;
2414
+ }
2415
+
2416
+ if (typeof params.didOpen === 'function') {
2417
+ setTimeout(() => params.didOpen(popup));
2418
+ }
2419
+
2420
+ removeClass(container, swalClasses['no-transition']);
2421
+ };
2422
+ /**
2423
+ * @param {AnimationEvent} event
2424
+ */
2425
+
2426
+ const swalOpenAnimationFinished = event => {
2427
+ const popup = getPopup();
2428
+
2429
+ if (event.target !== popup) {
2430
+ return;
2431
+ }
2432
+
2433
+ const container = getContainer();
2434
+ popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished);
2435
+ container.style.overflowY = 'auto';
2436
+ };
2437
+ /**
2438
+ * @param {HTMLElement} container
2439
+ * @param {HTMLElement} popup
2440
+ */
2441
+
2442
+
2443
+ const setScrollingVisibility = (container, popup) => {
2444
+ if (animationEndEvent && hasCssAnimation(popup)) {
2445
+ container.style.overflowY = 'hidden';
2446
+ popup.addEventListener(animationEndEvent, swalOpenAnimationFinished);
2447
+ } else {
2448
+ container.style.overflowY = 'auto';
2449
+ }
2450
+ };
2451
+ /**
2452
+ * @param {HTMLElement} container
2453
+ * @param {boolean} scrollbarPadding
2454
+ * @param {string} initialBodyOverflow
2455
+ */
2456
+
2457
+
2458
+ const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => {
2459
+ iOSfix();
2460
+
2461
+ if (scrollbarPadding && initialBodyOverflow !== 'hidden') {
2462
+ fixScrollbar();
2463
+ } // sweetalert2/issues/1247
2464
+
2465
+
2466
+ setTimeout(() => {
2467
+ container.scrollTop = 0;
2468
+ });
2469
+ };
2470
+ /**
2471
+ * @param {HTMLElement} container
2472
+ * @param {HTMLElement} popup
2473
+ * @param {SweetAlertOptions} params
2474
+ */
2475
+
2476
+
2477
+ const addClasses$1 = (container, popup, params) => {
2478
+ addClass(container, params.showClass.backdrop); // this workaround with opacity is needed for https://github.com/sweetalert2/sweetalert2/issues/2059
2479
+
2480
+ popup.style.setProperty('opacity', '0', 'important');
2481
+ show(popup, 'grid');
2482
+ setTimeout(() => {
2483
+ // Animate popup right after showing it
2484
+ addClass(popup, params.showClass.popup); // and remove the opacity workaround
2485
+
2486
+ popup.style.removeProperty('opacity');
2487
+ }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062
2488
+
2489
+ addClass([document.documentElement, document.body], swalClasses.shown);
2490
+
2491
+ if (params.heightAuto && params.backdrop && !params.toast) {
2492
+ addClass([document.documentElement, document.body], swalClasses['height-auto']);
2493
+ }
2494
+ };
2495
+
2496
+ /**
2497
+ * Shows loader (spinner), this is useful with AJAX requests.
2498
+ * By default the loader be shown instead of the "Confirm" button.
2499
+ */
2500
+
2501
+ const showLoading = buttonToReplace => {
2502
+ let popup = getPopup();
2503
+
2504
+ if (!popup) {
2505
+ new Swal(); // eslint-disable-line no-new
2506
+ }
2507
+
2508
+ popup = getPopup();
2509
+ const loader = getLoader();
2510
+
2511
+ if (isToast()) {
2512
+ hide(getIcon());
2513
+ } else {
2514
+ replaceButton(popup, buttonToReplace);
2515
+ }
2516
+
2517
+ show(loader);
2518
+ popup.setAttribute('data-loading', 'true');
2519
+ popup.setAttribute('aria-busy', 'true');
2520
+ popup.focus();
2521
+ };
2522
+
2523
+ const replaceButton = (popup, buttonToReplace) => {
2524
+ const actions = getActions();
2525
+ const loader = getLoader();
2526
+
2527
+ if (!buttonToReplace && isVisible(getConfirmButton())) {
2528
+ buttonToReplace = getConfirmButton();
2529
+ }
2530
+
2531
+ show(actions);
2532
+
2533
+ if (buttonToReplace) {
2534
+ hide(buttonToReplace);
2535
+ loader.setAttribute('data-button-to-replace', buttonToReplace.className);
2536
+ }
2537
+
2538
+ loader.parentNode.insertBefore(loader, buttonToReplace);
2539
+ addClass([popup, actions], swalClasses.loading);
2540
+ };
2541
+
2542
+ const handleInputOptionsAndValue = (instance, params) => {
2543
+ if (params.input === 'select' || params.input === 'radio') {
2544
+ handleInputOptions(instance, params);
2545
+ } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {
2546
+ showLoading(getConfirmButton());
2547
+ handleInputValue(instance, params);
2548
+ }
2549
+ };
2550
+ const getInputValue = (instance, innerParams) => {
2551
+ const input = instance.getInput();
2552
+
2553
+ if (!input) {
2554
+ return null;
2555
+ }
2556
+
2557
+ switch (innerParams.input) {
2558
+ case 'checkbox':
2559
+ return getCheckboxValue(input);
2560
+
2561
+ case 'radio':
2562
+ return getRadioValue(input);
2563
+
2564
+ case 'file':
2565
+ return getFileValue(input);
2566
+
2567
+ default:
2568
+ return innerParams.inputAutoTrim ? input.value.trim() : input.value;
2569
+ }
2570
+ };
2571
+
2572
+ const getCheckboxValue = input => input.checked ? 1 : 0;
2573
+
2574
+ const getRadioValue = input => input.checked ? input.value : null;
2575
+
2576
+ const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;
2577
+
2578
+ const handleInputOptions = (instance, params) => {
2579
+ const popup = getPopup();
2580
+
2581
+ const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params);
2582
+
2583
+ if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {
2584
+ showLoading(getConfirmButton());
2585
+ asPromise(params.inputOptions).then(inputOptions => {
2586
+ instance.hideLoading();
2587
+ processInputOptions(inputOptions);
2588
+ });
2589
+ } else if (typeof params.inputOptions === 'object') {
2590
+ processInputOptions(params.inputOptions);
2591
+ } else {
2592
+ error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions));
2593
+ }
2594
+ };
2595
+
2596
+ const handleInputValue = (instance, params) => {
2597
+ const input = instance.getInput();
2598
+ hide(input);
2599
+ asPromise(params.inputValue).then(inputValue => {
2600
+ input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue);
2601
+ show(input);
2602
+ input.focus();
2603
+ instance.hideLoading();
2604
+ }).catch(err => {
2605
+ error("Error in inputValue promise: ".concat(err));
2606
+ input.value = '';
2607
+ show(input);
2608
+ input.focus();
2609
+ instance.hideLoading();
2610
+ });
2611
+ };
2612
+
2613
+ const populateInputOptions = {
2614
+ select: (popup, inputOptions, params) => {
2615
+ const select = getDirectChildByClass(popup, swalClasses.select);
2616
+
2617
+ const renderOption = (parent, optionLabel, optionValue) => {
2618
+ const option = document.createElement('option');
2619
+ option.value = optionValue;
2620
+ setInnerHtml(option, optionLabel);
2621
+ option.selected = isSelected(optionValue, params.inputValue);
2622
+ parent.appendChild(option);
2623
+ };
2624
+
2625
+ inputOptions.forEach(inputOption => {
2626
+ const optionValue = inputOption[0];
2627
+ const optionLabel = inputOption[1]; // <optgroup> spec:
2628
+ // https://www.w3.org/TR/html401/interact/forms.html#h-17.6
2629
+ // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..."
2630
+ // check whether this is a <optgroup>
2631
+
2632
+ if (Array.isArray(optionLabel)) {
2633
+ // if it is an array, then it is an <optgroup>
2634
+ const optgroup = document.createElement('optgroup');
2635
+ optgroup.label = optionValue;
2636
+ optgroup.disabled = false; // not configurable for now
2637
+
2638
+ select.appendChild(optgroup);
2639
+ optionLabel.forEach(o => renderOption(optgroup, o[1], o[0]));
2640
+ } else {
2641
+ // case of <option>
2642
+ renderOption(select, optionLabel, optionValue);
2643
+ }
2644
+ });
2645
+ select.focus();
2646
+ },
2647
+ radio: (popup, inputOptions, params) => {
2648
+ const radio = getDirectChildByClass(popup, swalClasses.radio);
2649
+ inputOptions.forEach(inputOption => {
2650
+ const radioValue = inputOption[0];
2651
+ const radioLabel = inputOption[1];
2652
+ const radioInput = document.createElement('input');
2653
+ const radioLabelElement = document.createElement('label');
2654
+ radioInput.type = 'radio';
2655
+ radioInput.name = swalClasses.radio;
2656
+ radioInput.value = radioValue;
2657
+
2658
+ if (isSelected(radioValue, params.inputValue)) {
2659
+ radioInput.checked = true;
2660
+ }
2661
+
2662
+ const label = document.createElement('span');
2663
+ setInnerHtml(label, radioLabel);
2664
+ label.className = swalClasses.label;
2665
+ radioLabelElement.appendChild(radioInput);
2666
+ radioLabelElement.appendChild(label);
2667
+ radio.appendChild(radioLabelElement);
2668
+ });
2669
+ const radios = radio.querySelectorAll('input');
2670
+
2671
+ if (radios.length) {
2672
+ radios[0].focus();
2673
+ }
2674
+ }
2675
+ };
2676
+ /**
2677
+ * Converts `inputOptions` into an array of `[value, label]`s
2678
+ * @param inputOptions
2679
+ */
2680
+
2681
+ const formatInputOptions = inputOptions => {
2682
+ const result = [];
2683
+
2684
+ if (typeof Map !== 'undefined' && inputOptions instanceof Map) {
2685
+ inputOptions.forEach((value, key) => {
2686
+ let valueFormatted = value;
2687
+
2688
+ if (typeof valueFormatted === 'object') {
2689
+ // case of <optgroup>
2690
+ valueFormatted = formatInputOptions(valueFormatted);
2691
+ }
2692
+
2693
+ result.push([key, valueFormatted]);
2694
+ });
2695
+ } else {
2696
+ Object.keys(inputOptions).forEach(key => {
2697
+ let valueFormatted = inputOptions[key];
2698
+
2699
+ if (typeof valueFormatted === 'object') {
2700
+ // case of <optgroup>
2701
+ valueFormatted = formatInputOptions(valueFormatted);
2702
+ }
2703
+
2704
+ result.push([key, valueFormatted]);
2705
+ });
2706
+ }
2707
+
2708
+ return result;
2709
+ };
2710
+
2711
+ const isSelected = (optionValue, inputValue) => {
2712
+ return inputValue && inputValue.toString() === optionValue.toString();
2713
+ };
2714
+
2715
+ /**
2716
+ * Hides loader and shows back the button which was hidden by .showLoading()
2717
+ */
2718
+
2719
+ function hideLoading() {
2720
+ // do nothing if popup is closed
2721
+ const innerParams = privateProps.innerParams.get(this);
2722
+
2723
+ if (!innerParams) {
2724
+ return;
2725
+ }
2726
+
2727
+ const domCache = privateProps.domCache.get(this);
2728
+ hide(domCache.loader);
2729
+
2730
+ if (isToast()) {
2731
+ if (innerParams.icon) {
2732
+ show(getIcon());
2733
+ }
2734
+ } else {
2735
+ showRelatedButton(domCache);
2736
+ }
2737
+
2738
+ removeClass([domCache.popup, domCache.actions], swalClasses.loading);
2739
+ domCache.popup.removeAttribute('aria-busy');
2740
+ domCache.popup.removeAttribute('data-loading');
2741
+ domCache.confirmButton.disabled = false;
2742
+ domCache.denyButton.disabled = false;
2743
+ domCache.cancelButton.disabled = false;
2744
  }
2745
+
2746
+ const showRelatedButton = domCache => {
2747
+ const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace'));
2748
+
2749
+ if (buttonToReplace.length) {
2750
+ show(buttonToReplace[0], 'inline-block');
2751
+ } else if (allButtonsAreHidden()) {
2752
+ hide(domCache.actions);
2753
+ }
2754
+ };
2755
+
2756
+ /**
2757
+ * Gets the input DOM node, this method works with input parameter.
2758
+ * @returns {HTMLElement | null}
2759
+ */
2760
+
2761
+ function getInput$1(instance) {
2762
+ const innerParams = privateProps.innerParams.get(instance || this);
2763
+ const domCache = privateProps.domCache.get(instance || this);
2764
+
2765
+ if (!domCache) {
2766
+ return null;
2767
+ }
2768
+
2769
+ return getInput(domCache.popup, innerParams.input);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2770
  }
2771
+
2772
+ /**
2773
+ * This module contains `WeakMap`s for each effectively-"private property" that a `Swal` has.
2774
+ * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')`
2775
+ * This is the approach that Babel will probably take to implement private methods/fields
2776
+ * https://github.com/tc39/proposal-private-methods
2777
+ * https://github.com/babel/babel/pull/7555
2778
+ * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*
2779
+ * then we can use that language feature.
2780
+ */
2781
+ var privateMethods = {
2782
+ swalPromiseResolve: new WeakMap(),
2783
+ swalPromiseReject: new WeakMap()
2784
+ };
2785
+
2786
+ /*
2787
+ * Global function to determine if SweetAlert2 popup is shown
2788
+ */
2789
+
2790
+ const isVisible$1 = () => {
2791
+ return isVisible(getPopup());
2792
+ };
2793
+ /*
2794
+ * Global function to click 'Confirm' button
2795
+ */
2796
+
2797
+ const clickConfirm = () => getConfirmButton() && getConfirmButton().click();
2798
+ /*
2799
+ * Global function to click 'Deny' button
2800
+ */
2801
+
2802
+ const clickDeny = () => getDenyButton() && getDenyButton().click();
2803
+ /*
2804
+ * Global function to click 'Cancel' button
2805
+ */
2806
+
2807
+ const clickCancel = () => getCancelButton() && getCancelButton().click();
2808
+
2809
+ /**
2810
+ * @param {GlobalState} globalState
2811
+ */
2812
+
2813
+ const removeKeydownHandler = globalState => {
2814
+ if (globalState.keydownTarget && globalState.keydownHandlerAdded) {
2815
+ globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {
2816
+ capture: globalState.keydownListenerCapture
2817
+ });
2818
+ globalState.keydownHandlerAdded = false;
2819
+ }
2820
+ };
2821
+ /**
2822
+ * @param {SweetAlert2} instance
2823
+ * @param {GlobalState} globalState
2824
+ * @param {SweetAlertOptions} innerParams
2825
+ * @param {*} dismissWith
2826
+ */
2827
+
2828
+ const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => {
2829
+ removeKeydownHandler(globalState);
2830
+
2831
+ if (!innerParams.toast) {
2832
+ globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith);
2833
+
2834
+ globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();
2835
+ globalState.keydownListenerCapture = innerParams.keydownListenerCapture;
2836
+ globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {
2837
+ capture: globalState.keydownListenerCapture
2838
+ });
2839
+ globalState.keydownHandlerAdded = true;
2840
+ }
2841
+ };
2842
+ /**
2843
+ * @param {SweetAlertOptions} innerParams
2844
+ * @param {number} index
2845
+ * @param {number} increment
2846
+ */
2847
+
2848
+ const setFocus = (innerParams, index, increment) => {
2849
+ const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match
2850
+
2851
+ if (focusableElements.length) {
2852
+ index = index + increment; // rollover to first item
2853
+
2854
+ if (index === focusableElements.length) {
2855
+ index = 0; // go to last item
2856
+ } else if (index === -1) {
2857
+ index = focusableElements.length - 1;
2858
+ }
2859
+
2860
+ return focusableElements[index].focus();
2861
+ } // no visible focusable elements, focus the popup
2862
+
2863
+
2864
+ getPopup().focus();
2865
+ };
2866
+ const arrowKeysNextButton = ['ArrowRight', 'ArrowDown'];
2867
+ const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp'];
2868
+ /**
2869
+ * @param {SweetAlert2} instance
2870
+ * @param {KeyboardEvent} e
2871
+ * @param {function} dismissWith
2872
+ */
2873
+
2874
+ const keydownHandler = (instance, e, dismissWith) => {
2875
+ const innerParams = privateProps.innerParams.get(instance);
2876
+
2877
+ if (!innerParams) {
2878
+ return; // This instance has already been destroyed
2879
+ } // Ignore keydown during IME composition
2880
+ // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition
2881
+ // https://github.com/sweetalert2/sweetalert2/issues/720
2882
+ // https://github.com/sweetalert2/sweetalert2/issues/2406
2883
+
2884
+
2885
+ if (e.isComposing || e.keyCode === 229) {
2886
+ return;
2887
+ }
2888
+
2889
+ if (innerParams.stopKeydownPropagation) {
2890
+ e.stopPropagation();
2891
+ } // ENTER
2892
+
2893
+
2894
+ if (e.key === 'Enter') {
2895
+ handleEnter(instance, e, innerParams);
2896
+ } // TAB
2897
+ else if (e.key === 'Tab') {
2898
+ handleTab(e, innerParams);
2899
+ } // ARROWS - switch focus between buttons
2900
+ else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) {
2901
+ handleArrows(e.key);
2902
+ } // ESC
2903
+ else if (e.key === 'Escape') {
2904
+ handleEsc(e, innerParams, dismissWith);
2905
+ }
2906
+ };
2907
+ /**
2908
+ * @param {SweetAlert2} instance
2909
+ * @param {KeyboardEvent} e
2910
+ * @param {SweetAlertOptions} innerParams
2911
+ */
2912
+
2913
+
2914
+ const handleEnter = (instance, e, innerParams) => {
2915
+ // https://github.com/sweetalert2/sweetalert2/issues/2386
2916
+ if (!callIfFunction(innerParams.allowEnterKey)) {
2917
+ return;
2918
+ }
2919
+
2920
+ if (e.target && instance.getInput() && e.target instanceof HTMLElement && e.target.outerHTML === instance.getInput().outerHTML) {
2921
+ if (['textarea', 'file'].includes(innerParams.input)) {
2922
+ return; // do not submit
2923
+ }
2924
+
2925
+ clickConfirm();
2926
+ e.preventDefault();
2927
+ }
2928
+ };
2929
+ /**
2930
+ * @param {KeyboardEvent} e
2931
+ * @param {SweetAlertOptions} innerParams
2932
+ */
2933
+
2934
+
2935
+ const handleTab = (e, innerParams) => {
2936
+ const targetElement = e.target;
2937
+ const focusableElements = getFocusableElements();
2938
+ let btnIndex = -1;
2939
+
2940
+ for (let i = 0; i < focusableElements.length; i++) {
2941
+ if (targetElement === focusableElements[i]) {
2942
+ btnIndex = i;
2943
+ break;
2944
+ }
2945
+ } // Cycle to the next button
2946
+
2947
+
2948
+ if (!e.shiftKey) {
2949
+ setFocus(innerParams, btnIndex, 1);
2950
+ } // Cycle to the prev button
2951
+ else {
2952
+ setFocus(innerParams, btnIndex, -1);
2953
+ }
2954
+
2955
+ e.stopPropagation();
2956
+ e.preventDefault();
2957
+ };
2958
+ /**
2959
+ * @param {string} key
2960
+ */
2961
+
2962
+
2963
+ const handleArrows = key => {
2964
+ const confirmButton = getConfirmButton();
2965
+ const denyButton = getDenyButton();
2966
+ const cancelButton = getCancelButton();
2967
+
2968
+ if (document.activeElement instanceof HTMLElement && ![confirmButton, denyButton, cancelButton].includes(document.activeElement)) {
2969
+ return;
2970
+ }
2971
+
2972
+ const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling';
2973
+ let buttonToFocus = document.activeElement;
2974
+
2975
+ for (let i = 0; i < getActions().children.length; i++) {
2976
+ buttonToFocus = buttonToFocus[sibling];
2977
+
2978
+ if (!buttonToFocus) {
2979
+ return;
2980
+ }
2981
+
2982
+ if (buttonToFocus instanceof HTMLButtonElement && isVisible(buttonToFocus)) {
2983
+ break;
2984
+ }
2985
+ }
2986
+
2987
+ if (buttonToFocus instanceof HTMLButtonElement) {
2988
+ buttonToFocus.focus();
2989
+ }
2990
+ };
2991
+ /**
2992
+ * @param {KeyboardEvent} e
2993
+ * @param {SweetAlertOptions} innerParams
2994
+ * @param {function} dismissWith
2995
+ */
2996
+
2997
+
2998
+ const handleEsc = (e, innerParams, dismissWith) => {
2999
+ if (callIfFunction(innerParams.allowEscapeKey)) {
3000
+ e.preventDefault();
3001
+ dismissWith(DismissReason.esc);
3002
+ }
3003
+ };
3004
+
3005
+ /*
3006
+ * Instance method to close sweetAlert
3007
+ */
3008
+
3009
+ function removePopupAndResetState(instance, container, returnFocus, didClose) {
3010
+ if (isToast()) {
3011
+ triggerDidCloseAndDispose(instance, didClose);
3012
+ } else {
3013
+ restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose));
3014
+ removeKeydownHandler(globalState);
3015
+ }
3016
+
3017
+ const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088
3018
+ // for some reason removing the container in Safari will scroll the document to bottom
3019
+
3020
+ if (isSafari) {
3021
+ container.setAttribute('style', 'display:none !important');
3022
+ container.removeAttribute('class');
3023
+ container.innerHTML = '';
3024
+ } else {
3025
+ container.remove();
3026
+ }
3027
+
3028
+ if (isModal()) {
3029
+ undoScrollbar();
3030
+ undoIOSfix();
3031
+ unsetAriaHidden();
3032
+ }
3033
+
3034
+ removeBodyClasses();
3035
+ }
3036
+
3037
+ function removeBodyClasses() {
3038
+ removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);
3039
+ }
3040
+
3041
+ function close(resolveValue) {
3042
+ resolveValue = prepareResolveValue(resolveValue);
3043
+ const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);
3044
+ const didClose = triggerClosePopup(this);
3045
+
3046
+ if (this.isAwaitingPromise()) {
3047
+ // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335
3048
+ if (!resolveValue.isDismissed) {
3049
+ handleAwaitingPromise(this);
3050
+ swalPromiseResolve(resolveValue);
3051
+ }
3052
+ } else if (didClose) {
3053
+ // Resolve Swal promise
3054
+ swalPromiseResolve(resolveValue);
3055
+ }
3056
+ }
3057
+ function isAwaitingPromise() {
3058
+ return !!privateProps.awaitingPromise.get(this);
3059
+ }
3060
+
3061
+ const triggerClosePopup = instance => {
3062
+ const popup = getPopup();
3063
+
3064
+ if (!popup) {
3065
+ return false;
3066
+ }
3067
+
3068
+ const innerParams = privateProps.innerParams.get(instance);
3069
+
3070
+ if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {
3071
+ return false;
3072
+ }
3073
+
3074
+ removeClass(popup, innerParams.showClass.popup);
3075
+ addClass(popup, innerParams.hideClass.popup);
3076
+ const backdrop = getContainer();
3077
+ removeClass(backdrop, innerParams.showClass.backdrop);
3078
+ addClass(backdrop, innerParams.hideClass.backdrop);
3079
+ handlePopupAnimation(instance, popup, innerParams);
3080
+ return true;
3081
+ };
3082
+
3083
+ function rejectPromise(error) {
3084
+ const rejectPromise = privateMethods.swalPromiseReject.get(this);
3085
+ handleAwaitingPromise(this);
3086
+
3087
+ if (rejectPromise) {
3088
+ // Reject Swal promise
3089
+ rejectPromise(error);
3090
+ }
3091
+ }
3092
+ const handleAwaitingPromise = instance => {
3093
+ if (instance.isAwaitingPromise()) {
3094
+ privateProps.awaitingPromise.delete(instance); // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335
3095
+
3096
+ if (!privateProps.innerParams.get(instance)) {
3097
+ instance._destroy();
3098
+ }
3099
+ }
3100
+ };
3101
+
3102
+ const prepareResolveValue = resolveValue => {
3103
+ // When user calls Swal.close()
3104
+ if (typeof resolveValue === 'undefined') {
3105
+ return {
3106
+ isConfirmed: false,
3107
+ isDenied: false,
3108
+ isDismissed: true
3109
+ };
3110
+ }
3111
+
3112
+ return Object.assign({
3113
+ isConfirmed: false,
3114
+ isDenied: false,
3115
+ isDismissed: false
3116
+ }, resolveValue);
3117
+ };
3118
+
3119
+ const handlePopupAnimation = (instance, popup, innerParams) => {
3120
+ const container = getContainer(); // If animation is supported, animate
3121
+
3122
+ const animationIsSupported = animationEndEvent && hasCssAnimation(popup);
3123
+
3124
+ if (typeof innerParams.willClose === 'function') {
3125
+ innerParams.willClose(popup);
3126
+ }
3127
+
3128
+ if (animationIsSupported) {
3129
+ animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose);
3130
+ } else {
3131
+ // Otherwise, remove immediately
3132
+ removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose);
3133
+ }
3134
+ };
3135
+
3136
+ const animatePopup = (instance, popup, container, returnFocus, didClose) => {
3137
+ globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);
3138
+ popup.addEventListener(animationEndEvent, function (e) {
3139
+ if (e.target === popup) {
3140
+ globalState.swalCloseEventFinishedCallback();
3141
+ delete globalState.swalCloseEventFinishedCallback;
3142
+ }
3143
+ });
3144
+ };
3145
+
3146
+ const triggerDidCloseAndDispose = (instance, didClose) => {
3147
+ setTimeout(() => {
3148
+ if (typeof didClose === 'function') {
3149
+ didClose.bind(instance.params)();
3150
+ }
3151
+
3152
+ instance._destroy();
3153
+ });
3154
+ };
3155
+
3156
+ function setButtonsDisabled(instance, buttons, disabled) {
3157
+ const domCache = privateProps.domCache.get(instance);
3158
+ buttons.forEach(button => {
3159
+ domCache[button].disabled = disabled;
3160
+ });
3161
+ }
3162
+
3163
+ function setInputDisabled(input, disabled) {
3164
+ if (!input) {
3165
+ return false;
3166
+ }
3167
+
3168
+ if (input.type === 'radio') {
3169
+ const radiosContainer = input.parentNode.parentNode;
3170
+ const radios = radiosContainer.querySelectorAll('input');
3171
+
3172
+ for (let i = 0; i < radios.length; i++) {
3173
+ radios[i].disabled = disabled;
3174
+ }
3175
+ } else {
3176
+ input.disabled = disabled;
3177
+ }
3178
+ }
3179
+
3180
+ function enableButtons() {
3181
+ setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false);
3182
+ }
3183
+ function disableButtons() {
3184
+ setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true);
3185
  }
3186
+ function enableInput() {
3187
+ return setInputDisabled(this.getInput(), false);
 
 
 
 
 
 
 
 
 
 
 
 
 
3188
  }
3189
+ function disableInput() {
3190
+ return setInputDisabled(this.getInput(), true);
3191
+ }
3192
+
3193
+ function showValidationMessage(error) {
3194
+ const domCache = privateProps.domCache.get(this);
3195
+ const params = privateProps.innerParams.get(this);
3196
+ setInnerHtml(domCache.validationMessage, error);
3197
+ domCache.validationMessage.className = swalClasses['validation-message'];
3198
 
3199
+ if (params.customClass && params.customClass.validationMessage) {
3200
+ addClass(domCache.validationMessage, params.customClass.validationMessage);
3201
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
3202
 
3203
+ show(domCache.validationMessage);
3204
+ const input = this.getInput();
3205
+
3206
+ if (input) {
3207
+ input.setAttribute('aria-invalid', true);
3208
+ input.setAttribute('aria-describedby', swalClasses['validation-message']);
3209
+ focusInput(input);
3210
+ addClass(input, swalClasses.inputerror);
3211
+ }
3212
+ } // Hide block with validation message
 
 
 
3213
 
3214
+ function resetValidationMessage$1() {
3215
+ const domCache = privateProps.domCache.get(this);
 
 
 
3216
 
3217
+ if (domCache.validationMessage) {
3218
+ hide(domCache.validationMessage);
3219
+ }
3220
 
3221
+ const input = this.getInput();
3222
 
3223
+ if (input) {
3224
+ input.removeAttribute('aria-invalid');
3225
+ input.removeAttribute('aria-describedby');
3226
+ removeClass(input, swalClasses.inputerror);
3227
+ }
3228
+ }
3229
 
3230
+ function getProgressSteps$1() {
3231
+ const domCache = privateProps.domCache.get(this);
3232
+ return domCache.progressSteps;
3233
+ }
3234
 
3235
+ /**
3236
+ * Updates popup parameters.
3237
+ */
3238
 
3239
+ function update(params) {
3240
+ const popup = getPopup();
3241
+ const innerParams = privateProps.innerParams.get(this);
3242
 
3243
+ if (!popup || hasClass(popup, innerParams.hideClass.popup)) {
3244
+ return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");
3245
+ }
3246
 
3247
+ const validUpdatableParams = filterValidParams(params);
3248
+ const updatedParams = Object.assign({}, innerParams, validUpdatableParams);
3249
+ render(this, updatedParams);
3250
+ privateProps.innerParams.set(this, updatedParams);
3251
+ Object.defineProperties(this, {
3252
+ params: {
3253
+ value: Object.assign({}, this.params, params),
3254
+ writable: false,
3255
+ enumerable: true
3256
+ }
3257
+ });
3258
+ }
3259
 
3260
+ const filterValidParams = params => {
3261
+ const validUpdatableParams = {};
3262
+ Object.keys(params).forEach(param => {
3263
+ if (isUpdatableParameter(param)) {
3264
+ validUpdatableParams[param] = params[param];
3265
+ } else {
3266
+ warn("Invalid parameter to update: ".concat(param));
3267
+ }
3268
+ });
3269
+ return validUpdatableParams;
3270
+ };
3271
 
3272
+ function _destroy() {
3273
+ const domCache = privateProps.domCache.get(this);
3274
+ const innerParams = privateProps.innerParams.get(this);
3275
 
3276
+ if (!innerParams) {
3277
+ disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335
3278
 
3279
+ return; // This instance has already been destroyed
3280
+ } // Check if there is another Swal closing
3281
 
3282
 
3283
+ if (domCache.popup && globalState.swalCloseEventFinishedCallback) {
3284
+ globalState.swalCloseEventFinishedCallback();
3285
+ delete globalState.swalCloseEventFinishedCallback;
3286
+ }
3287
 
3288
+ if (typeof innerParams.didDestroy === 'function') {
3289
+ innerParams.didDestroy();
3290
+ }
3291
 
3292
+ disposeSwal(this);
3293
+ }
3294
+ /**
3295
+ * @param {SweetAlert2} instance
3296
+ */
3297
 
3298
+ const disposeSwal = instance => {
3299
+ disposeWeakMaps(instance); // Unset this.params so GC will dispose it (#1569)
3300
+ // @ts-ignore
3301
 
3302
+ delete instance.params; // Unset globalState props so GC will dispose globalState (#1569)
3303
 
3304
+ delete globalState.keydownHandler;
3305
+ delete globalState.keydownTarget; // Unset currentInstance
3306
 
3307
+ delete globalState.currentInstance;
3308
+ };
3309
+ /**
3310
+ * @param {SweetAlert2} instance
3311
+ */
3312
 
 
 
 
3313
 
3314
+ const disposeWeakMaps = instance => {
3315
+ // If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335
3316
+ // @ts-ignore
3317
+ if (instance.isAwaitingPromise()) {
3318
+ unsetWeakMaps(privateProps, instance);
3319
+ privateProps.awaitingPromise.set(instance, true);
3320
+ } else {
3321
+ unsetWeakMaps(privateMethods, instance);
3322
+ unsetWeakMaps(privateProps, instance);
3323
+ }
3324
+ };
3325
+ /**
3326
+ * @param {object} obj
3327
+ * @param {SweetAlert2} instance
3328
+ */
3329
 
 
 
3330
 
3331
+ const unsetWeakMaps = (obj, instance) => {
3332
+ for (const i in obj) {
3333
+ obj[i].delete(instance);
3334
+ }
3335
+ };
3336
+
3337
 
 
 
 
 
 
3338
 
3339
+ var instanceMethods = /*#__PURE__*/Object.freeze({
3340
+ hideLoading: hideLoading,
3341
+ disableLoading: hideLoading,
3342
+ getInput: getInput$1,
3343
+ close: close,
3344
+ isAwaitingPromise: isAwaitingPromise,
3345
+ rejectPromise: rejectPromise,
3346
+ handleAwaitingPromise: handleAwaitingPromise,
3347
+ closePopup: close,
3348
+ closeModal: close,
3349
+ closeToast: close,
3350
+ enableButtons: enableButtons,
3351
+ disableButtons: disableButtons,
3352
+ enableInput: enableInput,
3353
+ disableInput: disableInput,
3354
+ showValidationMessage: showValidationMessage,
3355
+ resetValidationMessage: resetValidationMessage$1,
3356
+ getProgressSteps: getProgressSteps$1,
3357
+ update: update,
3358
+ _destroy: _destroy
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3359
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3360
 
3361
+ /**
3362
+ * @param {SweetAlert2} instance
3363
+ */
 
 
3364
 
3365
+ const handleConfirmButtonClick = instance => {
3366
+ const innerParams = privateProps.innerParams.get(instance);
3367
+ instance.disableButtons();
3368
+
3369
+ if (innerParams.input) {
3370
+ handleConfirmOrDenyWithInput(instance, 'confirm');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3371
  } else {
3372
+ confirm(instance, true);
3373
  }
3374
+ };
3375
+ /**
3376
+ * @param {SweetAlert2} instance
3377
+ */
3378
 
3379
+ const handleDenyButtonClick = instance => {
3380
+ const innerParams = privateProps.innerParams.get(instance);
3381
+ instance.disableButtons();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3382
 
3383
+ if (innerParams.returnInputValueOnDeny) {
3384
+ handleConfirmOrDenyWithInput(instance, 'deny');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3385
  } else {
3386
+ deny(instance, false);
3387
+ }
3388
+ };
3389
+ /**
3390
+ * @param {SweetAlert2} instance
3391
+ * @param {Function} dismissWith
3392
+ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3393
 
3394
+ const handleCancelButtonClick = (instance, dismissWith) => {
3395
+ instance.disableButtons();
3396
+ dismissWith(DismissReason.cancel);
 
 
 
 
 
 
 
 
 
 
3397
  };
3398
+ /**
3399
+ * @param {SweetAlert2} instance
3400
+ * @param {'confirm' | 'deny'} type
3401
+ */
3402
 
3403
+ const handleConfirmOrDenyWithInput = (instance, type) => {
3404
+ const innerParams = privateProps.innerParams.get(instance);
3405
+
3406
+ if (!innerParams.input) {
3407
+ error("The \"input\" parameter is needed to be set when using returnInputValueOn".concat(capitalizeFirstLetter(type)));
3408
+ return;
3409
+ }
3410
+
3411
+ const inputValue = getInputValue(instance, innerParams);
3412
 
3413
+ if (innerParams.inputValidator) {
3414
+ handleInputValidator(instance, inputValue, type);
3415
+ } else if (!instance.getInput().checkValidity()) {
3416
+ instance.enableButtons();
3417
+ instance.showValidationMessage(innerParams.validationMessage);
3418
+ } else if (type === 'deny') {
3419
+ deny(instance, inputValue);
 
 
 
 
 
 
 
 
 
 
 
 
3420
  } else {
3421
+ confirm(instance, inputValue);
3422
  }
 
3423
  };
3424
+ /**
3425
+ * @param {SweetAlert2} instance
3426
+ * @param {string} inputValue
3427
+ * @param {'confirm' | 'deny'} type
3428
+ */
3429
 
 
 
 
3430
 
3431
+ const handleInputValidator = (instance, inputValue, type) => {
3432
+ const innerParams = privateProps.innerParams.get(instance);
3433
+ instance.disableInput();
3434
+ const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage)));
3435
+ validationPromise.then(validationMessage => {
3436
+ instance.enableButtons();
3437
+ instance.enableInput();
3438
+
3439
+ if (validationMessage) {
3440
+ instance.showValidationMessage(validationMessage);
3441
+ } else if (type === 'deny') {
3442
+ deny(instance, inputValue);
3443
+ } else {
3444
+ confirm(instance, inputValue);
3445
+ }
3446
+ });
3447
+ };
3448
+ /**
3449
+ * @param {SweetAlert2} instance
3450
+ * @param {any} value
3451
+ */
3452
 
 
 
 
 
 
 
3453
 
3454
+ const deny = (instance, value) => {
3455
+ const innerParams = privateProps.innerParams.get(instance || undefined);
 
3456
 
3457
+ if (innerParams.showLoaderOnDeny) {
3458
+ showLoading(getDenyButton());
 
3459
  }
3460
 
3461
+ if (innerParams.preDeny) {
3462
+ privateProps.awaitingPromise.set(instance || undefined, true); // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preDeny's promise is received
3463
+
3464
+ const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage)));
3465
+ preDenyPromise.then(preDenyValue => {
3466
+ if (preDenyValue === false) {
3467
+ instance.hideLoading();
3468
+ handleAwaitingPromise(instance);
3469
+ } else {
3470
+ instance.close({
3471
+ isDenied: true,
3472
+ value: typeof preDenyValue === 'undefined' ? value : preDenyValue
3473
+ });
3474
+ }
3475
+ }).catch(error$$1 => rejectWith(instance || undefined, error$$1));
3476
+ } else {
3477
+ instance.close({
3478
+ isDenied: true,
3479
+ value
3480
+ });
3481
  }
 
3482
  };
3483
+ /**
3484
+ * @param {SweetAlert2} instance
3485
+ * @param {any} value
3486
+ */
3487
+
3488
+
3489
+ const succeedWith = (instance, value) => {
3490
+ instance.close({
3491
+ isConfirmed: true,
3492
+ value
3493
+ });
3494
+ };
3495
+ /**
3496
+ *
3497
+ * @param {SweetAlert2} instance
3498
+ * @param {string} error
3499
+ */
3500
+
3501
 
3502
+ const rejectWith = (instance, error$$1) => {
3503
+ // @ts-ignore
3504
+ instance.rejectPromise(error$$1);
3505
+ };
3506
+ /**
3507
+ *
3508
+ * @param {SweetAlert2} instance
3509
+ * @param {any} value
3510
+ */
3511
 
 
 
 
 
3512
 
3513
+ const confirm = (instance, value) => {
3514
+ const innerParams = privateProps.innerParams.get(instance || undefined);
3515
 
3516
+ if (innerParams.showLoaderOnConfirm) {
3517
+ showLoading();
 
 
 
 
3518
  }
 
3519
 
3520
+ if (innerParams.preConfirm) {
3521
+ instance.resetValidationMessage();
3522
+ privateProps.awaitingPromise.set(instance || undefined, true); // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preConfirm's promise is received
3523
+
3524
+ const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage)));
3525
+ preConfirmPromise.then(preConfirmValue => {
3526
+ if (isVisible(getValidationMessage()) || preConfirmValue === false) {
3527
+ instance.hideLoading();
3528
+ handleAwaitingPromise(instance);
3529
+ } else {
3530
+ succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue);
3531
+ }
3532
+ }).catch(error$$1 => rejectWith(instance || undefined, error$$1));
3533
  } else {
3534
+ succeedWith(instance, value);
 
3535
  }
3536
+ };
3537
+
3538
+ const handlePopupClick = (instance, domCache, dismissWith) => {
3539
+ const innerParams = privateProps.innerParams.get(instance);
3540
 
3541
+ if (innerParams.toast) {
3542
+ handleToastClick(instance, domCache, dismissWith);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3543
  } else {
3544
+ // Ignore click events that had mousedown on the popup but mouseup on the container
3545
+ // This can happen when the user drags a slider
3546
+ handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup
3547
+
3548
+ handleContainerMousedown(domCache);
3549
+ handleModalClick(instance, domCache, dismissWith);
3550
  }
 
3551
  };
3552
 
3553
+ const handleToastClick = (instance, domCache, dismissWith) => {
3554
+ // Closing toast by internal click
3555
+ domCache.popup.onclick = () => {
3556
+ const innerParams = privateProps.innerParams.get(instance);
3557
 
3558
+ if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) {
3559
+ return;
3560
+ }
 
 
3561
 
3562
+ dismissWith(DismissReason.close);
3563
+ };
3564
+ };
3565
  /**
3566
+ * @param {*} innerParams
3567
+ * @returns {boolean}
3568
  */
 
 
 
 
 
 
 
 
 
 
 
 
3569
 
3570
+
3571
+ const isAnyButtonShown = innerParams => {
3572
+ return innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton;
3573
  };
3574
+
3575
+ let ignoreOutsideClick = false;
3576
+
3577
+ const handleModalMousedown = domCache => {
3578
+ domCache.popup.onmousedown = () => {
3579
+ domCache.container.onmouseup = function (e) {
3580
+ domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't
3581
+ // have any other direct children aside of the popup
3582
+
3583
+ if (e.target === domCache.container) {
3584
+ ignoreOutsideClick = true;
3585
+ }
3586
+ };
3587
+ };
3588
  };
3589
+
3590
+ const handleContainerMousedown = domCache => {
3591
+ domCache.container.onmousedown = () => {
3592
+ domCache.popup.onmouseup = function (e) {
3593
+ domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup
3594
+
3595
+ if (e.target === domCache.popup || domCache.popup.contains(e.target)) {
3596
+ ignoreOutsideClick = true;
3597
+ }
3598
+ };
3599
+ };
3600
  };
3601
+
3602
+ const handleModalClick = (instance, domCache, dismissWith) => {
3603
+ domCache.container.onclick = e => {
3604
+ const innerParams = privateProps.innerParams.get(instance);
3605
+
3606
+ if (ignoreOutsideClick) {
3607
+ ignoreOutsideClick = false;
3608
+ return;
3609
+ }
3610
+
3611
+ if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {
3612
+ dismissWith(DismissReason.backdrop);
3613
+ }
3614
+ };
3615
  };
3616
+
3617
+ const isJqueryElement = elem => typeof elem === 'object' && elem.jquery;
3618
+
3619
+ const isElement = elem => elem instanceof Element || isJqueryElement(elem);
3620
+
3621
+ const argsToParams = args => {
3622
+ const params = {};
3623
+
3624
+ if (typeof args[0] === 'object' && !isElement(args[0])) {
3625
+ Object.assign(params, args[0]);
3626
+ } else {
3627
+ ['title', 'html', 'icon'].forEach((name, index) => {
3628
+ const arg = args[index];
3629
+
3630
+ if (typeof arg === 'string' || isElement(arg)) {
3631
+ params[name] = arg;
3632
+ } else if (arg !== undefined) {
3633
+ error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg));
3634
+ }
3635
+ });
3636
+ }
3637
+
3638
+ return params;
3639
  };
3640
+
3641
+ function fire() {
3642
+ const Swal = this; // eslint-disable-line @typescript-eslint/no-this-alias
3643
+
3644
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
3645
+ args[_key] = arguments[_key];
3646
+ }
3647
+
3648
+ return new Swal(...args);
3649
+ }
3650
+
3651
+ /**
3652
+ * Returns an extended version of `Swal` containing `params` as defaults.
3653
+ * Useful for reusing Swal configuration.
3654
+ *
3655
+ * For example:
3656
+ *
3657
+ * Before:
3658
+ * const textPromptOptions = { input: 'text', showCancelButton: true }
3659
+ * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' })
3660
+ * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' })
3661
+ *
3662
+ * After:
3663
+ * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true })
3664
+ * const {value: firstName} = await TextPrompt('What is your first name?')
3665
+ * const {value: lastName} = await TextPrompt('What is your last name?')
3666
+ *
3667
+ * @param mixinParams
3668
+ */
3669
+ function mixin(mixinParams) {
3670
+ class MixinSwal extends this {
3671
+ _main(params, priorityMixinParams) {
3672
+ return super._main(params, Object.assign({}, mixinParams, priorityMixinParams));
3673
+ }
3674
+
3675
+ }
3676
+
3677
+ return MixinSwal;
3678
+ }
3679
+
3680
+ /**
3681
+ * If `timer` parameter is set, returns number of milliseconds of timer remained.
3682
+ * Otherwise, returns undefined.
3683
+ */
3684
+
3685
+ const getTimerLeft = () => {
3686
+ return globalState.timeout && globalState.timeout.getTimerLeft();
3687
  };
3688
+ /**
3689
+ * Stop timer. Returns number of milliseconds of timer remained.
3690
+ * If `timer` parameter isn't set, returns undefined.
3691
+ */
3692
+
3693
+ const stopTimer = () => {
3694
+ if (globalState.timeout) {
3695
+ stopTimerProgressBar();
3696
+ return globalState.timeout.stop();
3697
+ }
3698
  };
3699
+ /**
3700
+ * Resume timer. Returns number of milliseconds of timer remained.
3701
+ * If `timer` parameter isn't set, returns undefined.
3702
+ */
3703
 
3704
+ const resumeTimer = () => {
3705
+ if (globalState.timeout) {
3706
+ const remaining = globalState.timeout.start();
3707
+ animateTimerProgressBar(remaining);
3708
+ return remaining;
3709
+ }
3710
  };
3711
+ /**
3712
+ * Resume timer. Returns number of milliseconds of timer remained.
3713
+ * If `timer` parameter isn't set, returns undefined.
3714
+ */
3715
 
3716
+ const toggleTimer = () => {
3717
+ const timer = globalState.timeout;
3718
+ return timer && (timer.running ? stopTimer() : resumeTimer());
3719
  };
3720
+ /**
3721
+ * Increase timer. Returns number of milliseconds of an updated timer.
3722
+ * If `timer` parameter isn't set, returns undefined.
3723
+ */
3724
 
3725
+ const increaseTimer = n => {
3726
+ if (globalState.timeout) {
3727
+ const remaining = globalState.timeout.increase(n);
3728
+ animateTimerProgressBar(remaining, true);
3729
+ return remaining;
3730
+ }
3731
  };
3732
+ /**
3733
+ * Check if timer is running. Returns true if timer is running
3734
+ * or false if timer is paused or stopped.
3735
+ * If `timer` parameter isn't set, returns undefined
3736
+ */
3737
 
3738
+ const isTimerRunning = () => {
3739
+ return globalState.timeout && globalState.timeout.isRunning();
3740
  };
3741
 
3742
+ let bodyClickListenerAdded = false;
3743
+ const clickHandlers = {};
3744
+ function bindClickHandler() {
3745
+ let attr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'data-swal-template';
3746
+ clickHandlers[attr] = this;
3747
+
3748
+ if (!bodyClickListenerAdded) {
3749
+ document.body.addEventListener('click', bodyClickListener);
3750
+ bodyClickListenerAdded = true;
 
3751
  }
3752
+ }
 
 
 
3753
 
3754
+ const bodyClickListener = event => {
3755
+ for (let el = event.target; el && el !== document; el = el.parentNode) {
3756
+ for (const attr in clickHandlers) {
3757
+ const template = el.getAttribute(attr);
3758
+
3759
+ if (template) {
3760
+ clickHandlers[attr].fire({
3761
+ template
3762
+ });
3763
+ return;
3764
+ }
3765
+ }
3766
  }
 
 
 
3767
  };
3768
 
 
 
 
 
 
 
 
 
 
 
 
 
3769
 
 
 
 
 
 
3770
 
3771
+ var staticMethods = /*#__PURE__*/Object.freeze({
3772
+ isValidParameter: isValidParameter,
3773
+ isUpdatableParameter: isUpdatableParameter,
3774
+ isDeprecatedParameter: isDeprecatedParameter,
3775
+ argsToParams: argsToParams,
3776
+ isVisible: isVisible$1,
3777
+ clickConfirm: clickConfirm,
3778
+ clickDeny: clickDeny,
3779
+ clickCancel: clickCancel,
3780
+ getContainer: getContainer,
3781
+ getPopup: getPopup,
3782
+ getTitle: getTitle,
3783
+ getHtmlContainer: getHtmlContainer,
3784
+ getImage: getImage,
3785
+ getIcon: getIcon,
3786
+ getInputLabel: getInputLabel,
3787
+ getCloseButton: getCloseButton,
3788
+ getActions: getActions,
3789
+ getConfirmButton: getConfirmButton,
3790
+ getDenyButton: getDenyButton,
3791
+ getCancelButton: getCancelButton,
3792
+ getLoader: getLoader,
3793
+ getFooter: getFooter,
3794
+ getTimerProgressBar: getTimerProgressBar,
3795
+ getFocusableElements: getFocusableElements,
3796
+ getValidationMessage: getValidationMessage,
3797
+ isLoading: isLoading,
3798
+ fire: fire,
3799
+ mixin: mixin,
3800
+ showLoading: showLoading,
3801
+ enableLoading: showLoading,
3802
+ getTimerLeft: getTimerLeft,
3803
+ stopTimer: stopTimer,
3804
+ resumeTimer: resumeTimer,
3805
+ toggleTimer: toggleTimer,
3806
+ increaseTimer: increaseTimer,
3807
+ isTimerRunning: isTimerRunning,
3808
+ bindClickHandler: bindClickHandler
3809
+ });
3810
 
3811
+ let currentInstance;
 
 
 
 
3812
 
3813
+ class SweetAlert {
3814
+ constructor() {
3815
+ // Prevent run in Node env
3816
+ if (typeof window === 'undefined') {
3817
+ return;
3818
+ }
3819
 
3820
+ currentInstance = this; // @ts-ignore
3821
+
3822
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
3823
+ args[_key] = arguments[_key];
3824
+ }
3825
+
3826
+ const outerParams = Object.freeze(this.constructor.argsToParams(args));
3827
+ Object.defineProperties(this, {
3828
+ params: {
3829
+ value: outerParams,
3830
+ writable: false,
3831
+ enumerable: true,
3832
+ configurable: true
3833
+ }
3834
+ }); // @ts-ignore
3835
+
3836
+ const promise = currentInstance._main(currentInstance.params);
3837
+
3838
+ privateProps.promise.set(this, promise);
3839
+ }
3840
+
3841
+ _main(userParams) {
3842
+ let mixinParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3843
+ showWarningsForParams(Object.assign({}, mixinParams, userParams));
3844
+
3845
+ if (globalState.currentInstance) {
3846
+ // @ts-ignore
3847
+ globalState.currentInstance._destroy();
3848
+
3849
+ if (isModal()) {
3850
+ unsetAriaHidden();
3851
+ }
3852
+ }
3853
+
3854
+ globalState.currentInstance = currentInstance;
3855
+ const innerParams = prepareParams(userParams, mixinParams);
3856
+ setParameters(innerParams);
3857
+ Object.freeze(innerParams); // clear the previous timer
3858
+
3859
+ if (globalState.timeout) {
3860
+ globalState.timeout.stop();
3861
+ delete globalState.timeout;
3862
+ } // clear the restore focus timeout
3863
 
 
 
 
 
3864
 
3865
+ clearTimeout(globalState.restoreFocusTimeout);
3866
+ const domCache = populateDomCache(currentInstance);
3867
+ render(currentInstance, innerParams);
3868
+ privateProps.innerParams.set(currentInstance, innerParams);
3869
+ return swalPromise(currentInstance, domCache, innerParams);
3870
+ } // `catch` cannot be the name of a module export, so we define our thenable methods here instead
3871
+
3872
+
3873
+ then(onFulfilled) {
3874
+ const promise = privateProps.promise.get(this);
3875
+ return promise.then(onFulfilled);
3876
+ }
3877
+
3878
+ finally(onFinally) {
3879
+ const promise = privateProps.promise.get(this);
3880
+ return promise.finally(onFinally);
3881
+ }
3882
+
3883
+ }
3884
+
3885
+ const swalPromise = (instance, domCache, innerParams) => {
3886
+ return new Promise((resolve, reject) => {
3887
+ // functions to handle all closings/dismissals
3888
+ const dismissWith = dismiss => {
3889
+ instance.closePopup({
3890
+ isDismissed: true,
3891
+ dismiss
3892
+ });
3893
+ };
3894
+
3895
+ privateMethods.swalPromiseResolve.set(instance, resolve);
3896
+ privateMethods.swalPromiseReject.set(instance, reject);
3897
+
3898
+ domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance);
3899
+
3900
+ domCache.denyButton.onclick = () => handleDenyButtonClick(instance);
3901
+
3902
+ domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith);
3903
+
3904
+ domCache.closeButton.onclick = () => dismissWith(DismissReason.close);
3905
+
3906
+ handlePopupClick(instance, domCache, dismissWith);
3907
+ addKeydownHandler(instance, globalState, innerParams, dismissWith);
3908
+ handleInputOptionsAndValue(instance, innerParams);
3909
+ openPopup(innerParams);
3910
+ setupTimer(globalState, innerParams, dismissWith);
3911
+ initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946)
3912
+
3913
+ setTimeout(() => {
3914
+ domCache.container.scrollTop = 0;
3915
+ });
3916
+ });
3917
  };
3918
 
3919
+ const prepareParams = (userParams, mixinParams) => {
3920
+ const templateParams = getTemplateParams(userParams);
3921
+ const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131
3922
+
3923
+ params.showClass = Object.assign({}, defaultParams.showClass, params.showClass);
3924
+ params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass);
3925
+ return params;
3926
  };
3927
+ /**
3928
+ * @param {SweetAlert2} instance
3929
+ * @returns {DomCache}
3930
+ */
3931
 
 
 
 
3932
 
3933
+ const populateDomCache = instance => {
3934
+ const domCache = {
3935
+ popup: getPopup(),
3936
+ container: getContainer(),
3937
+ actions: getActions(),
3938
+ confirmButton: getConfirmButton(),
3939
+ denyButton: getDenyButton(),
3940
+ cancelButton: getCancelButton(),
3941
+ loader: getLoader(),
3942
+ closeButton: getCloseButton(),
3943
+ validationMessage: getValidationMessage(),
3944
+ progressSteps: getProgressSteps()
3945
+ };
3946
+ privateProps.domCache.set(instance, domCache);
3947
+ return domCache;
3948
+ };
3949
+ /**
3950
+ * @param {GlobalState} globalState
3951
+ * @param {SweetAlertOptions} innerParams
3952
+ * @param {function} dismissWith
3953
+ */
3954
+
3955
 
3956
+ const setupTimer = (globalState$$1, innerParams, dismissWith) => {
3957
+ const timerProgressBar = getTimerProgressBar();
3958
+ hide(timerProgressBar);
3959
+
3960
+ if (innerParams.timer) {
3961
+ globalState$$1.timeout = new Timer(() => {
3962
+ dismissWith('timer');
3963
+ delete globalState$$1.timeout;
3964
+ }, innerParams.timer);
3965
+
3966
+ if (innerParams.timerProgressBar) {
3967
+ show(timerProgressBar);
3968
+ applyCustomClass(timerProgressBar, innerParams, 'timerProgressBar');
3969
+ setTimeout(() => {
3970
+ if (globalState$$1.timeout && globalState$$1.timeout.running) {
3971
+ // timer can be already stopped or unset at this point
3972
+ animateTimerProgressBar(innerParams.timer);
3973
+ }
3974
+ });
3975
  }
 
3976
  }
3977
+ };
3978
+ /**
3979
+ * @param {DomCache} domCache
3980
+ * @param {SweetAlertOptions} innerParams
3981
+ */
3982
+
3983
+
3984
+ const initFocus = (domCache, innerParams) => {
3985
+ if (innerParams.toast) {
3986
+ return;
3987
+ }
3988
+
3989
+ if (!callIfFunction(innerParams.allowEnterKey)) {
3990
+ return blurActiveElement();
3991
  }
 
3992
 
3993
+ if (!focusButton(domCache, innerParams)) {
3994
+ setFocus(innerParams, -1, 1);
3995
+ }
3996
+ };
3997
+ /**
3998
+ * @param {DomCache} domCache
3999
+ * @param {SweetAlertOptions} innerParams
4000
+ * @returns {boolean}
4001
+ */
4002
 
 
 
4003
 
4004
+ const focusButton = (domCache, innerParams) => {
4005
+ if (innerParams.focusDeny && isVisible(domCache.denyButton)) {
4006
+ domCache.denyButton.focus();
4007
+ return true;
4008
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4009
 
4010
+ if (innerParams.focusCancel && isVisible(domCache.cancelButton)) {
4011
+ domCache.cancelButton.focus();
4012
+ return true;
4013
+ }
 
 
 
 
 
 
 
 
 
4014
 
4015
+ if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) {
4016
+ domCache.confirmButton.focus();
4017
+ return true;
4018
+ }
4019
 
4020
+ return false;
4021
+ };
 
 
 
 
 
 
4022
 
4023
+ const blurActiveElement = () => {
4024
+ if (document.activeElement instanceof HTMLElement && typeof document.activeElement.blur === 'function') {
4025
+ document.activeElement.blur();
4026
+ }
4027
+ }; // This anti-war message will only be shown to Russian users visiting Russian sites
4028
+
4029
+
4030
+ if (typeof window !== 'undefined' && /^ru\b/.test(navigator.language) && location.host.match(/\.(ru|su|xn--p1ai)$/)) {
4031
+ if (Math.random() < 0.1) {
4032
+ const noWar = document.createElement('div');
4033
+ noWar.className = 'leave-russia-now-and-apply-your-skills-to-the-world';
4034
+ const video = getRandomElement([{
4035
+ text: "\u0412 \u043D\u0438\u0436\u0435\u043F\u0440\u0438\u0432\u0435\u0434\u0451\u043D\u043D\u043E\u043C \u0432\u0438\u0434\u0435\u043E \u043E\u0431\u044A\u044F\u0441\u043D\u044F\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u043A\u0430\u0436\u0434\u044B\u0439 \u0438\u0437 \u043D\u0430\u0441 \u043C\u043E\u0436\u0435\u0442 \u043F\u043E\u043C\u043E\u0447\u044C \u0432 \u0442\u043E\u043C,\n <strong>\u0447\u0442\u043E\u0431\u044B \u044D\u0442\u0430 \u0431\u0435\u0441\u0441\u043C\u044B\u0441\u043B\u0435\u043D\u043D\u0430\u044F \u0438 \u0431\u0435\u0441\u0447\u0435\u043B\u043E\u0432\u0435\u0447\u043D\u0430\u044F \u0432\u043E\u0439\u043D\u0430 \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u043B\u0430\u0441\u044C</strong>:",
4036
+ id: '4CfDhaRkw7I'
4037
+ }, {
4038
+ text: 'Эмпатия - главное <strong>человеческое</strong> чувство. Способность сопереживать. <strong>Способность поставить себя на место другого.</strong>',
4039
+ id: 's-GLAIY4DXA'
4040
+ }]);
4041
+ setInnerHtml(noWar, "\n <div>\n \u0415\u0441\u043B\u0438 \u043C\u044B \u043D\u0435 \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u043C \u0432\u043E\u0439\u043D\u0443, \u043E\u043D\u0430 \u043F\u0440\u0438\u0434\u0435\u0442 \u0432 \u0434\u043E\u043C <strong>\u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0438\u0437 \u043D\u0430\u0441</strong> \u0438 \u0435\u0451 \u043F\u043E\u0441\u043B\u0435\u0434\u0441\u0442\u0432\u0438\u044F \u0431\u0443\u0434\u0443\u0442 <strong>\u0443\u0436\u0430\u0441\u0430\u044E\u0449\u0438\u043C\u0438</strong>.\n </div>\n <div>\n \u041F\u0443\u0442\u0438\u043D\u0441\u043A\u0438\u0439 \u0440\u0435\u0436\u0438\u043C \u0437\u0430 20 \u0441 \u043B\u0438\u0448\u043D\u0438\u043C \u043B\u0435\u0442 \u0441\u0432\u043E\u0435\u0433\u043E \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043E\u0432\u0430\u043D\u0438\u044F \u0432\u0434\u043E\u043B\u0431\u0438\u043B \u043D\u0430\u043C, \u0447\u0442\u043E \u043C\u044B \u0431\u0435\u0441\u0441\u0438\u043B\u044C\u043D\u044B \u0438 \u043E\u0434\u0438\u043D \u0447\u0435\u043B\u043E\u0432\u0435\u043A \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u043D\u0438\u0447\u0435\u0433\u043E \u0441\u0434\u0435\u043B\u0430\u0442\u044C. <strong>\u042D\u0442\u043E \u043D\u0435 \u0442\u0430\u043A!</strong>\n </div>\n <div>\n ".concat(video.text, "\n </div>\n <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/").concat(video.id, "\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n <div>\n \u041D\u0435\u0442 \u0432\u043E\u0439\u043D\u0435!\n </div>\n "));
4042
+ const closeButton = document.createElement('button');
4043
+ closeButton.innerHTML = '&times;';
4044
+
4045
+ closeButton.onclick = () => noWar.remove();
4046
+
4047
+ noWar.appendChild(closeButton);
4048
+ window.addEventListener('load', () => {
4049
+ setTimeout(() => {
4050
+ document.body.appendChild(noWar);
4051
+ }, 1000);
4052
+ });
4053
+ }
4054
+ } // Assign instance methods from src/instanceMethods/*.js to prototype
4055
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4056
 
4057
+ Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor
 
4058
 
4059
+ Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility
 
 
 
 
 
4060
 
4061
+ Object.keys(instanceMethods).forEach(key => {
4062
+ SweetAlert[key] = function () {
4063
+ if (currentInstance) {
4064
+ return currentInstance[key](...arguments);
4065
+ }
4066
+ };
4067
+ });
4068
+ SweetAlert.DismissReason = DismissReason;
4069
+ SweetAlert.version = '11.4.30';
4070
 
4071
+ const Swal = SweetAlert; // @ts-ignore
4072
 
4073
+ Swal.default = Swal;
4074
 
4075
+ return Swal;
4076
 
4077
+ }));
4078
+ if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2}
assets/vendor/sweetalert2/dist/sweetalert2.min.css CHANGED
@@ -1 +1 @@
1
- body.swal2-shown{overflow-y:hidden}body.swal2-iosfix{position:fixed;left:0;right:0}.swal2-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;top:0;left:0;bottom:0;right:0;padding:10px;background-color:transparent;z-index:1060}.swal2-container.swal2-fade{-webkit-transition:background-color .1s;transition:background-color .1s}.swal2-container.swal2-shown{background-color:rgba(0,0,0,.4)}.swal2-modal{background-color:#fff;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;border-radius:5px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;margin:auto;overflow-x:hidden;overflow-y:auto;display:none;position:relative;max-width:100%}.swal2-modal:focus{outline:0}.swal2-modal.swal2-loading{overflow-y:hidden}.swal2-modal .swal2-title{color:#595959;font-size:30px;text-align:center;font-weight:600;text-transform:none;position:relative;margin:0 0 .4em;padding:0;display:block;word-wrap:break-word}.swal2-modal .swal2-buttonswrapper{margin-top:15px}.swal2-modal .swal2-buttonswrapper:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4;cursor:no-drop}.swal2-modal .swal2-buttonswrapper.swal2-loading .swal2-styled.swal2-confirm{-webkit-box-sizing:border-box;box-sizing:border-box;border:4px solid transparent;border-color:transparent;width:40px;height:40px;padding:0;margin:7.5px;vertical-align:top;background-color:transparent!important;color:transparent;cursor:default;border-radius:100%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-modal .swal2-buttonswrapper.swal2-loading .swal2-styled.swal2-cancel{margin-left:30px;margin-right:30px}.swal2-modal .swal2-buttonswrapper.swal2-loading :not(.swal2-styled).swal2-confirm::after{display:inline-block;content:'';margin-left:5px 0 15px;vertical-align:-1px;height:15px;width:15px;border:3px solid #999;-webkit-box-shadow:1px 1px 1px #fff;box-shadow:1px 1px 1px #fff;border-right-color:transparent;border-radius:50%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-modal .swal2-styled{border:0;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;color:#fff;cursor:pointer;font-size:17px;font-weight:500;margin:15px 5px 0;padding:10px 32px}.swal2-modal .swal2-image{margin:20px auto;max-width:100%}.swal2-modal .swal2-close{background:0 0;border:0;margin:0;padding:0;width:38px;height:40px;font-size:36px;line-height:40px;font-family:serif;position:absolute;top:5px;right:8px;cursor:pointer;color:#ccc;-webkit-transition:color .1s ease;transition:color .1s ease}.swal2-modal .swal2-close:hover{color:#d55}.swal2-modal>.swal2-checkbox,.swal2-modal>.swal2-file,.swal2-modal>.swal2-input,.swal2-modal>.swal2-radio,.swal2-modal>.swal2-select,.swal2-modal>.swal2-textarea{display:none}.swal2-modal .swal2-content{font-size:18px;text-align:center;font-weight:300;position:relative;float:none;margin:0;padding:0;line-height:normal;color:#545454;word-wrap:break-word}.swal2-modal .swal2-checkbox,.swal2-modal .swal2-file,.swal2-modal .swal2-input,.swal2-modal .swal2-radio,.swal2-modal .swal2-select,.swal2-modal .swal2-textarea{margin:20px auto}.swal2-modal .swal2-file,.swal2-modal .swal2-input,.swal2-modal .swal2-textarea{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:18px;border-radius:3px;border:1px solid #d9d9d9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.06);box-shadow:inset 0 1px 1px rgba(0,0,0,.06);-webkit-transition:border-color box-shadow .3s;transition:border-color box-shadow .3s}.swal2-modal .swal2-file.swal2-inputerror,.swal2-modal .swal2-input.swal2-inputerror,.swal2-modal .swal2-textarea.swal2-inputerror{border-color:#f27474!important;-webkit-box-shadow:0 0 2px #f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-modal .swal2-file:focus,.swal2-modal .swal2-input:focus,.swal2-modal .swal2-textarea:focus{outline:0;border:1px solid #b4dbed;-webkit-box-shadow:0 0 3px #c4e6f5;box-shadow:0 0 3px #c4e6f5}.swal2-modal .swal2-file:focus::-webkit-input-placeholder,.swal2-modal .swal2-input:focus::-webkit-input-placeholder,.swal2-modal .swal2-textarea:focus::-webkit-input-placeholder{-webkit-transition:opacity .3s .03s ease;transition:opacity .3s .03s ease;opacity:.8}.swal2-modal .swal2-file:focus:-ms-input-placeholder,.swal2-modal .swal2-input:focus:-ms-input-placeholder,.swal2-modal .swal2-textarea:focus:-ms-input-placeholder{-webkit-transition:opacity .3s .03s ease;transition:opacity .3s .03s ease;opacity:.8}.swal2-modal .swal2-file:focus::placeholder,.swal2-modal .swal2-input:focus::placeholder,.swal2-modal .swal2-textarea:focus::placeholder{-webkit-transition:opacity .3s .03s ease;transition:opacity .3s .03s ease;opacity:.8}.swal2-modal .swal2-file::-webkit-input-placeholder,.swal2-modal .swal2-input::-webkit-input-placeholder,.swal2-modal .swal2-textarea::-webkit-input-placeholder{color:#e6e6e6}.swal2-modal .swal2-file:-ms-input-placeholder,.swal2-modal .swal2-input:-ms-input-placeholder,.swal2-modal .swal2-textarea:-ms-input-placeholder{color:#e6e6e6}.swal2-modal .swal2-file::placeholder,.swal2-modal .swal2-input::placeholder,.swal2-modal .swal2-textarea::placeholder{color:#e6e6e6}.swal2-modal .swal2-range input{float:left;width:80%}.swal2-modal .swal2-range output{float:right;width:20%;font-size:20px;font-weight:600;text-align:center}.swal2-modal .swal2-range input,.swal2-modal .swal2-range output{height:43px;line-height:43px;vertical-align:middle;margin:20px auto;padding:0}.swal2-modal .swal2-input{height:43px;padding:0 12px}.swal2-modal .swal2-input[type=number]{max-width:150px}.swal2-modal .swal2-file{font-size:20px}.swal2-modal .swal2-textarea{height:108px;padding:12px}.swal2-modal .swal2-select{color:#545454;font-size:inherit;padding:5px 10px;min-width:40%;max-width:100%}.swal2-modal .swal2-radio{border:0}.swal2-modal .swal2-radio label:not(:first-child){margin-left:20px}.swal2-modal .swal2-radio input,.swal2-modal .swal2-radio span{vertical-align:middle}.swal2-modal .swal2-radio input{margin:0 3px 0 0}.swal2-modal .swal2-checkbox{color:#545454}.swal2-modal .swal2-checkbox input,.swal2-modal .swal2-checkbox span{vertical-align:middle}.swal2-modal .swal2-validationerror{background-color:#f0f0f0;margin:0 -20px;overflow:hidden;padding:10px;color:gray;font-size:16px;font-weight:300;display:none}.swal2-modal .swal2-validationerror::before{content:'!';display:inline-block;width:24px;height:24px;border-radius:50%;background-color:#ea7d7d;color:#fff;line-height:24px;text-align:center;margin-right:10px}@supports (-ms-accelerator:true){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-range input{width:100%!important}.swal2-range output{display:none}}.swal2-icon{width:80px;height:80px;border:4px solid transparent;border-radius:50%;margin:20px auto 30px;padding:0;position:relative;-webkit-box-sizing:content-box;box-sizing:content-box;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;display:block}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}.swal2-icon.swal2-warning{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#f8bb86;border-color:#facea8;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-info{font-family:'Open Sans',sans-serif;color:#3fc3ee;border-color:#9de0f6;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-question{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#87adbd;border-color:#c9dae1;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{border-radius:50%;position:absolute;width:60px;height:120px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px}.swal2-icon.swal2-success .swal2-success-ring{width:80px;height:80px;border:4px solid rgba(165,220,134,.2);border-radius:50%;-webkit-box-sizing:content-box;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.swal2-icon.swal2-success .swal2-success-fix{width:7px;height:90px;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-progresssteps{font-weight:600;margin:0 0 20px;padding:0}.swal2-progresssteps li{display:inline-block;position:relative}.swal2-progresssteps .swal2-progresscircle{background:#3085d6;border-radius:2em;color:#fff;height:2em;line-height:2em;text-align:center;width:2em;z-index:20}.swal2-progresssteps .swal2-progresscircle:first-child{margin-left:0}.swal2-progresssteps .swal2-progresscircle:last-child{margin-right:0}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep{background:#3085d6}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progresscircle{background:#add8e6}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progressline{background:#add8e6}.swal2-progresssteps .swal2-progressline{background:#3085d6;height:.4em;margin:0 -1px;z-index:10}[class^=swal2]{-webkit-tap-highlight-color:transparent}@-webkit-keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}@keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}.swal2-show{-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s}.swal2-show.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-hide{-webkit-animation:hideSweetAlert .15s forwards;animation:hideSweetAlert .15s forwards}.swal2-hide.swal2-noanimation{-webkit-animation:none;animation:none}@-webkit-keyframes animate-success-tip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@keyframes animate-success-tip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@-webkit-keyframes animate-success-long{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@keyframes animate-success-long{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@-webkit-keyframes rotatePlaceholder{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}100%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}100%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}.swal2-animate-success-line-tip{-webkit-animation:animate-success-tip .75s;animation:animate-success-tip .75s}.swal2-animate-success-line-long{-webkit-animation:animate-success-long .75s;animation:animate-success-long .75s}.swal2-success.swal2-animate-success-icon .swal2-success-circular-line-right{-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}@-webkit-keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}@keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}.swal2-animate-error-icon{-webkit-animation:animate-error-icon .5s;animation:animate-error-icon .5s}@-webkit-keyframes animate-x-mark{0%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}@keyframes animate-x-mark{0%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}.swal2-animate-x-mark{-webkit-animation:animate-x-mark .5s;animation:animate-x-mark .5s}@-webkit-keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}
1
+ .swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 1px hsla(0deg,0%,0%,.075),0 1px 2px hsla(0deg,0%,0%,.075),1px 2px 4px hsla(0deg,0%,0%,.075),1px 3px 8px hsla(0deg,0%,0%,.075),2px 4px 16px hsla(0deg,0%,0%,.075);pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:"top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7066e0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(112,102,224,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#dc3741;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(220,55,65,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7881;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,120,129,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:inherit;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:inherit;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 3px}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:0 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 3px;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:0 0;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:0 0;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-warning.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-warning.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-i-mark .5s;animation:swal2-animate-i-mark .5s}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-info.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-info.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-i-mark .8s;animation:swal2-animate-i-mark .8s}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-question.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-question.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-question-mark .8s;animation:swal2-animate-question-mark .8s}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:0 0;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.leave-russia-now-and-apply-your-skills-to-the-world{display:flex;position:fixed;z-index:1939;top:0;right:0;bottom:0;left:0;flex-direction:column;align-items:center;justify-content:center;padding:25px 0 20px;background:#20232a;color:#fff;text-align:center}.leave-russia-now-and-apply-your-skills-to-the-world div{max-width:560px;margin:10px;line-height:146%}.leave-russia-now-and-apply-your-skills-to-the-world iframe{max-width:100%;max-height:55.5555555556vmin;margin:16px auto}.leave-russia-now-and-apply-your-skills-to-the-world strong{border-bottom:2px dashed #fff}.leave-russia-now-and-apply-your-skills-to-the-world button{display:flex;position:fixed;z-index:1940;top:0;right:0;align-items:center;justify-content:center;width:48px;height:48px;margin-right:10px;margin-bottom:-10px;border:none;background:0 0;color:#aaa;font-size:48px;font-weight:700;cursor:pointer}.leave-russia-now-and-apply-your-skills-to-the-world button:hover{color:#fff}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@-webkit-keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@-webkit-keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}
assets/vendor/sweetalert2/dist/sweetalert2.min.js CHANGED
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Sweetalert2=t()}(this,function(){"use strict";var e={title:"",titleText:"",text:"",html:"",type:null,customClass:"",target:"body",animation:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,showConfirmButton:!0,showCancelButton:!1,preConfirm:null,confirmButtonText:"OK",confirmButtonColor:"#3085d6",confirmButtonClass:null,cancelButtonText:"Cancel",cancelButtonColor:"#aaa",cancelButtonClass:null,buttonsStyling:!0,reverseButtons:!1,focusCancel:!1,showCloseButton:!1,showLoaderOnConfirm:!1,imageUrl:null,imageWidth:null,imageHeight:null,imageClass:null,timer:null,width:500,padding:20,background:"#fff",input:null,inputPlaceholder:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputClass:null,inputAttributes:{},inputValidator:null,progressSteps:[],currentProgressStep:null,progressStepsDistance:"40px",onOpen:null,onClose:null,useRejections:!0},t=function(e){var t={};for(var n in e)t[e[n]]="swal2-"+e[n];return t},n=t(["container","shown","iosfix","modal","overlay","fade","show","hide","noanimation","close","title","content","buttonswrapper","confirm","cancel","icon","image","input","file","range","select","radio","checkbox","textarea","inputerror","validationerror","progresssteps","activeprogressstep","progresscircle","progressline","loading","styled"]),o=t(["success","warning","info","question","error"]),r=function(e,t){(e=String(e).replace(/[^0-9a-f]/gi,"")).length<6&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),t=t||0;for(var n="#",o=0;o<3;o++){var r=parseInt(e.substr(2*o,2),16);n+=("00"+(r=Math.round(Math.min(Math.max(0,r+r*t),255)).toString(16))).substr(r.length)}return n},i=function(e){var t=[];for(var n in e)-1===t.indexOf(e[n])&&t.push(e[n]);return t},a={previousWindowKeyDown:null,previousActiveElement:null,previousBodyPadding:null},l=function(e){if("undefined"==typeof document)return void console.error("SweetAlert2 requires document to initialize");var t=document.createElement("div");t.className=n.container,t.innerHTML=s;var o=document.querySelector(e.target);o||(console.warn("SweetAlert2: Can't find the target \""+e.target+'"'),o=document.body),o.appendChild(t);var r=c(),i=A(r,n.input),a=A(r,n.file),l=r.querySelector("."+n.range+" input"),u=r.querySelector("."+n.range+" output"),d=A(r,n.select),p=r.querySelector("."+n.checkbox+" input"),f=A(r,n.textarea);return i.oninput=function(){J.resetValidationError()},i.onkeydown=function(t){setTimeout(function(){13===t.keyCode&&e.allowEnterKey&&(t.stopPropagation(),J.clickConfirm())},0)},a.onchange=function(){J.resetValidationError()},l.oninput=function(){J.resetValidationError(),u.value=l.value},l.onchange=function(){J.resetValidationError(),l.previousSibling.value=l.value},d.onchange=function(){J.resetValidationError()},p.onchange=function(){J.resetValidationError()},f.oninput=function(){J.resetValidationError()},r},s=('\n <div role="dialog" aria-labelledby="'+n.title+'" aria-describedby="'+n.content+'" class="'+n.modal+'" tabindex="-1">\n <ul class="'+n.progresssteps+'"></ul>\n <div class="'+n.icon+" "+o.error+'">\n <span class="swal2-x-mark"><span class="swal2-x-mark-line-left"></span><span class="swal2-x-mark-line-right"></span></span>\n </div>\n <div class="'+n.icon+" "+o.question+'">?</div>\n <div class="'+n.icon+" "+o.warning+'">!</div>\n <div class="'+n.icon+" "+o.info+'">i</div>\n <div class="'+n.icon+" "+o.success+'">\n <div class="swal2-success-circular-line-left"></div>\n <span class="swal2-success-line-tip"></span> <span class="swal2-success-line-long"></span>\n <div class="swal2-success-ring"></div> <div class="swal2-success-fix"></div>\n <div class="swal2-success-circular-line-right"></div>\n </div>\n <img class="'+n.image+'">\n <h2 class="'+n.title+'" id="'+n.title+'"></h2>\n <div id="'+n.content+'" class="'+n.content+'"></div>\n <input class="'+n.input+'">\n <input type="file" class="'+n.file+'">\n <div class="'+n.range+'">\n <output></output>\n <input type="range">\n </div>\n <select class="'+n.select+'"></select>\n <div class="'+n.radio+'"></div>\n <label for="'+n.checkbox+'" class="'+n.checkbox+'">\n <input type="checkbox">\n </label>\n <textarea class="'+n.textarea+'"></textarea>\n <div class="'+n.validationerror+'"></div>\n <div class="'+n.buttonswrapper+'">\n <button type="button" class="'+n.confirm+'">OK</button>\n <button type="button" class="'+n.cancel+'">Cancel</button>\n </div>\n <button type="button" class="'+n.close+'" aria-label="Close this dialog">&times;</button>\n </div>\n').replace(/(^|\n)\s*/g,""),u=function(){return document.body.querySelector("."+n.container)},c=function(){return u()?u().querySelector("."+n.modal):null},d=function(){return c().querySelectorAll("."+n.icon)},p=function(e){return u()?u().querySelector("."+e):null},f=function(){return p(n.title)},m=function(){return p(n.content)},v=function(){return p(n.image)},h=function(){return p(n.buttonswrapper)},g=function(){return p(n.progresssteps)},y=function(){return p(n.validationerror)},b=function(){return p(n.confirm)},w=function(){return p(n.cancel)},C=function(){return p(n.close)},k=function(e){var t=[b(),w()];e&&t.reverse();var n=t.concat(Array.prototype.slice.call(c().querySelectorAll('button, input:not([type=hidden]), textarea, select, a, *[tabindex]:not([tabindex="-1"])')));return i(n)},x=function(e,t){return!!e.classList&&e.classList.contains(t)},S=function(e){if(e.focus(),"file"!==e.type){var t=e.value;e.value="",e.value=t}},E=function(e,t){e&&t&&t.split(/\s+/).filter(Boolean).forEach(function(t){e.classList.add(t)})},B=function(e,t){e&&t&&t.split(/\s+/).filter(Boolean).forEach(function(t){e.classList.remove(t)})},A=function(e,t){for(var n=0;n<e.childNodes.length;n++)if(x(e.childNodes[n],t))return e.childNodes[n]},P=function(e,t){t||(t="block"),e.style.opacity="",e.style.display=t},T=function(e){e.style.opacity="",e.style.display="none"},L=function(e){for(;e.firstChild;)e.removeChild(e.firstChild)},M=function(e){return e.offsetWidth||e.offsetHeight||e.getClientRects().length},q=function(e,t){e.style.removeProperty?e.style.removeProperty(t):e.style.removeAttribute(t)},V=function(e){if(!M(e))return!1;if("function"==typeof MouseEvent){var t=new MouseEvent("click",{view:window,bubbles:!1,cancelable:!0});e.dispatchEvent(t)}else if(document.createEvent){var n=document.createEvent("MouseEvents");n.initEvent("click",!1,!1),e.dispatchEvent(n)}else document.createEventObject?e.fireEvent("onclick"):"function"==typeof e.onclick&&e.onclick()},O=function(){var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",msAnimation:"MSAnimationEnd",animation:"animationend"};for(var n in t)if(t.hasOwnProperty(n)&&void 0!==e.style[n])return t[n];return!1}(),H=function(){if(window.onkeydown=a.previousWindowKeyDown,a.previousActiveElement&&a.previousActiveElement.focus){var e=window.scrollX,t=window.scrollY;a.previousActiveElement.focus(),e&&t&&window.scrollTo(e,t)}},N=function(){if("ontouchstart"in window||navigator.msMaxTouchPoints)return 0;var e=document.createElement("div");e.style.width="50px",e.style.height="50px",e.style.overflow="scroll",document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),t},j=function(e,t){var n=void 0;return function(){var o=function(){n=null,e()};clearTimeout(n),n=setTimeout(o,t)}},R="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},I=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},K=I({},e),D=[],W=void 0,U=function(t){var r=c()||l(t);for(var i in t)e.hasOwnProperty(i)||"extraParams"===i||console.warn('SweetAlert2: Unknown parameter "'+i+'"');r.style.width="number"==typeof t.width?t.width+"px":t.width,r.style.padding=t.padding+"px",r.style.background=t.background;for(var a=r.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix"),s=0;s<a.length;s++)a[s].style.background=t.background;var u=f(),p=m(),y=h(),k=b(),x=w(),S=C();if(t.titleText?u.innerText=t.titleText:u.innerHTML=t.title.split("\n").join("<br>"),t.text||t.html){if("object"===R(t.html))if(p.innerHTML="",0 in t.html)for(var A=0;A in t.html;A++)p.appendChild(t.html[A].cloneNode(!0));else p.appendChild(t.html.cloneNode(!0));else t.html?p.innerHTML=t.html:t.text&&(p.textContent=t.text);P(p)}else T(p);t.showCloseButton?P(S):T(S),r.className=n.modal,t.customClass&&E(r,t.customClass);var M=g(),V=parseInt(null===t.currentProgressStep?J.getQueueStep():t.currentProgressStep,10);t.progressSteps.length?(P(M),L(M),V>=t.progressSteps.length&&console.warn("SweetAlert2: Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),t.progressSteps.forEach(function(e,o){var r=document.createElement("li");if(E(r,n.progresscircle),r.innerHTML=e,o===V&&E(r,n.activeprogressstep),M.appendChild(r),o!==t.progressSteps.length-1){var i=document.createElement("li");E(i,n.progressline),i.style.width=t.progressStepsDistance,M.appendChild(i)}})):T(M);for(var O=d(),H=0;H<O.length;H++)T(O[H]);if(t.type){var N=!1;for(var j in o)if(t.type===j){N=!0;break}if(!N)return console.error("SweetAlert2: Unknown alert type: "+t.type),!1;var I=r.querySelector("."+n.icon+"."+o[t.type]);if(P(I),t.animation)switch(t.type){case"success":E(I,"swal2-animate-success-icon"),E(I.querySelector(".swal2-success-line-tip"),"swal2-animate-success-line-tip"),E(I.querySelector(".swal2-success-line-long"),"swal2-animate-success-line-long");break;case"error":E(I,"swal2-animate-error-icon"),E(I.querySelector(".swal2-x-mark"),"swal2-animate-x-mark")}}var K=v();t.imageUrl?(K.setAttribute("src",t.imageUrl),P(K),t.imageWidth?K.setAttribute("width",t.imageWidth):K.removeAttribute("width"),t.imageHeight?K.setAttribute("height",t.imageHeight):K.removeAttribute("height"),K.className=n.image,t.imageClass&&E(K,t.imageClass)):T(K),t.showCancelButton?x.style.display="inline-block":T(x),t.showConfirmButton?q(k,"display"):T(k),t.showConfirmButton||t.showCancelButton?P(y):T(y),k.innerHTML=t.confirmButtonText,x.innerHTML=t.cancelButtonText,t.buttonsStyling&&(k.style.backgroundColor=t.confirmButtonColor,x.style.backgroundColor=t.cancelButtonColor),k.className=n.confirm,E(k,t.confirmButtonClass),x.className=n.cancel,E(x,t.cancelButtonClass),t.buttonsStyling?(E(k,n.styled),E(x,n.styled)):(B(k,n.styled),B(x,n.styled),k.style.backgroundColor=k.style.borderLeftColor=k.style.borderRightColor="",x.style.backgroundColor=x.style.borderLeftColor=x.style.borderRightColor=""),!0===t.animation?B(r,n.noanimation):E(r,n.noanimation)},z=function(e,t){var o=u(),r=c();e?(E(r,n.show),E(o,n.fade),B(r,n.hide)):B(r,n.fade),P(r),o.style.overflowY="hidden",O&&!x(r,n.noanimation)?r.addEventListener(O,function e(){r.removeEventListener(O,e),o.style.overflowY="auto"}):o.style.overflowY="auto",E(document.documentElement,n.shown),E(document.body,n.shown),E(o,n.shown),Q(),Z(),a.previousActiveElement=document.activeElement,null!==t&&"function"==typeof t&&setTimeout(function(){t(r)})},Q=function(){null===a.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(a.previousBodyPadding=document.body.style.paddingRight,document.body.style.paddingRight=N()+"px")},Y=function(){null!==a.previousBodyPadding&&(document.body.style.paddingRight=a.previousBodyPadding,a.previousBodyPadding=null)},Z=function(){if(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream&&!x(document.body,n.iosfix)){var e=document.body.scrollTop;document.body.style.top=-1*e+"px",E(document.body,n.iosfix)}},$=function(){if(x(document.body,n.iosfix)){var e=parseInt(document.body.style.top,10);B(document.body,n.iosfix),document.body.style.top="",document.body.scrollTop=-1*e}},J=function e(){for(var t=arguments.length,o=Array(t),i=0;i<t;i++)o[i]=arguments[i];if(void 0===o[0])return console.error("SweetAlert2 expects at least 1 attribute!"),!1;var l=I({},K);switch(R(o[0])){case"string":l.title=o[0],l.html=o[1],l.type=o[2];break;case"object":I(l,o[0]),l.extraParams=o[0].extraParams,"email"===l.input&&null===l.inputValidator&&(l.inputValidator=function(e){return new Promise(function(t,n){/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/.test(e)?t():n("Invalid email address")})}),"url"===l.input&&null===l.inputValidator&&(l.inputValidator=function(e){return new Promise(function(t,n){/^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/.test(e)?t():n("Invalid URL")})});break;default:return console.error('SweetAlert2: Unexpected type of argument! Expected "string" or "object", got '+R(o[0])),!1}U(l);var s=u(),d=c();return new Promise(function(t,o){l.timer&&(d.timeout=setTimeout(function(){e.closeModal(l.onClose),l.useRejections?o("timer"):t({dismiss:"timer"})},l.timer));var i=function(e){if(!(e=e||l.input))return null;switch(e){case"select":case"textarea":case"file":return A(d,n[e]);case"checkbox":return d.querySelector("."+n.checkbox+" input");case"radio":return d.querySelector("."+n.radio+" input:checked")||d.querySelector("."+n.radio+" input:first-child");case"range":return d.querySelector("."+n.range+" input");default:return A(d,n.input)}},p=function(){var e=i();if(!e)return null;switch(l.input){case"checkbox":return e.checked?1:0;case"radio":return e.checked?e.value:null;case"file":return e.files.length?e.files[0]:null;default:return l.inputAutoTrim?e.value.trim():e.value}};l.input&&setTimeout(function(){var e=i();e&&S(e)},0);for(var x=function(n){l.showLoaderOnConfirm&&e.showLoading(),l.preConfirm?l.preConfirm(n,l.extraParams).then(function(o){e.closeModal(l.onClose),t(o||n)},function(t){e.hideLoading(),t&&e.showValidationError(t)}):(e.closeModal(l.onClose),t(l.useRejections?n:{value:n}))},L=function(n){var i=n||window.event,a=i.target||i.srcElement,s=b(),u=w(),c=s&&(s===a||s.contains(a)),d=u&&(u===a||u.contains(a));switch(i.type){case"mouseover":case"mouseup":l.buttonsStyling&&(c?s.style.backgroundColor=r(l.confirmButtonColor,-.1):d&&(u.style.backgroundColor=r(l.cancelButtonColor,-.1)));break;case"mouseout":l.buttonsStyling&&(c?s.style.backgroundColor=l.confirmButtonColor:d&&(u.style.backgroundColor=l.cancelButtonColor));break;case"mousedown":l.buttonsStyling&&(c?s.style.backgroundColor=r(l.confirmButtonColor,-.2):d&&(u.style.backgroundColor=r(l.cancelButtonColor,-.2)));break;case"click":if(c&&e.isVisible())if(e.disableButtons(),l.input){var f=p();l.inputValidator?(e.disableInput(),l.inputValidator(f,l.extraParams).then(function(){e.enableButtons(),e.enableInput(),x(f)},function(t){e.enableButtons(),e.enableInput(),t&&e.showValidationError(t)})):x(f)}else x(!0);else d&&e.isVisible()&&(e.disableButtons(),e.closeModal(l.onClose),l.useRejections?o("cancel"):t({dismiss:"cancel"}))}},q=d.querySelectorAll("button"),O=0;O<q.length;O++)q[O].onclick=L,q[O].onmouseover=L,q[O].onmouseout=L,q[O].onmousedown=L;C().onclick=function(){e.closeModal(l.onClose),l.useRejections?o("close"):t({dismiss:"close"})},s.onclick=function(n){n.target===s&&l.allowOutsideClick&&(e.closeModal(l.onClose),l.useRejections?o("overlay"):t({dismiss:"overlay"}))};var H=h(),N=b(),I=w();l.reverseButtons?N.parentNode.insertBefore(I,N):N.parentNode.insertBefore(N,I);var K=function(e,t){for(var n=k(l.focusCancel),o=0;o<n.length;o++){(e+=t)===n.length?e=0:-1===e&&(e=n.length-1);var r=n[e];if(M(r))return r.focus()}},D=function(n){var r=n||window.event,i=r.keyCode||r.which;if(-1!==[9,13,32,27,37,38,39,40].indexOf(i)){for(var a=r.target||r.srcElement,s=k(l.focusCancel),u=-1,c=0;c<s.length;c++)if(a===s[c]){u=c;break}9===i?(r.shiftKey?K(u,-1):K(u,1),r.stopPropagation(),r.preventDefault()):37===i||38===i||39===i||40===i?document.activeElement===N&&M(I)?I.focus():document.activeElement===I&&M(N)&&N.focus():13===i||32===i?-1===u&&l.allowEnterKey&&(V(l.focusCancel?I:N),r.stopPropagation(),r.preventDefault()):27===i&&!0===l.allowEscapeKey&&(e.closeModal(l.onClose),l.useRejections?o("esc"):t({dismiss:"esc"}))}};window.onkeydown&&window.onkeydown.toString()===D.toString()||(a.previousWindowKeyDown=window.onkeydown,window.onkeydown=D),l.buttonsStyling&&(N.style.borderLeftColor=l.confirmButtonColor,N.style.borderRightColor=l.confirmButtonColor),e.hideLoading=e.disableLoading=function(){l.showConfirmButton||(T(N),l.showCancelButton||T(h())),B(H,n.loading),B(d,n.loading),N.disabled=!1,I.disabled=!1},e.getTitle=function(){return f()},e.getContent=function(){return m()},e.getInput=function(){return i()},e.getImage=function(){return v()},e.getButtonsWrapper=function(){return h()},e.getConfirmButton=function(){return b()},e.getCancelButton=function(){return w()},e.enableButtons=function(){N.disabled=!1,I.disabled=!1},e.disableButtons=function(){N.disabled=!0,I.disabled=!0},e.enableConfirmButton=function(){N.disabled=!1},e.disableConfirmButton=function(){N.disabled=!0},e.enableInput=function(){var e=i();if(!e)return!1;if("radio"===e.type)for(var t=e.parentNode.parentNode.querySelectorAll("input"),n=0;n<t.length;n++)t[n].disabled=!1;else e.disabled=!1},e.disableInput=function(){var e=i();if(!e)return!1;if(e&&"radio"===e.type)for(var t=e.parentNode.parentNode.querySelectorAll("input"),n=0;n<t.length;n++)t[n].disabled=!0;else e.disabled=!0},e.recalculateHeight=j(function(){var e=c();if(e){var t=e.style.display;e.style.minHeight="",P(e),e.style.minHeight=e.scrollHeight+1+"px",e.style.display=t}},50),e.showValidationError=function(e){var t=y();t.innerHTML=e,P(t);var o=i();o&&(S(o),E(o,n.inputerror))},e.resetValidationError=function(){var t=y();T(t),e.recalculateHeight();var o=i();o&&B(o,n.inputerror)},e.getProgressSteps=function(){return l.progressSteps},e.setProgressSteps=function(e){l.progressSteps=e,U(l)},e.showProgressSteps=function(){P(g())},e.hideProgressSteps=function(){T(g())},e.enableButtons(),e.hideLoading(),e.resetValidationError();for(var Q=["input","file","range","select","radio","checkbox","textarea"],Y=void 0,Z=0;Z<Q.length;Z++){var $=n[Q[Z]],J=A(d,$);if(Y=i(Q[Z])){for(var X in Y.attributes)if(Y.attributes.hasOwnProperty(X)){var _=Y.attributes[X].name;"type"!==_&&"value"!==_&&Y.removeAttribute(_)}for(var F in l.inputAttributes)Y.setAttribute(F,l.inputAttributes[F])}J.className=$,l.inputClass&&E(J,l.inputClass),T(J)}var G=void 0;switch(l.input){case"text":case"email":case"password":case"number":case"tel":case"url":(Y=A(d,n.input)).value=l.inputValue,Y.placeholder=l.inputPlaceholder,Y.type=l.input,P(Y);break;case"file":(Y=A(d,n.file)).placeholder=l.inputPlaceholder,Y.type=l.input,P(Y);break;case"range":var ee=A(d,n.range),te=ee.querySelector("input"),ne=ee.querySelector("output");te.value=l.inputValue,te.type=l.input,ne.value=l.inputValue,P(ee);break;case"select":var oe=A(d,n.select);if(oe.innerHTML="",l.inputPlaceholder){var re=document.createElement("option");re.innerHTML=l.inputPlaceholder,re.value="",re.disabled=!0,re.selected=!0,oe.appendChild(re)}G=function(e){for(var t in e){var n=document.createElement("option");n.value=t,n.innerHTML=e[t],l.inputValue===t&&(n.selected=!0),oe.appendChild(n)}P(oe),oe.focus()};break;case"radio":var ie=A(d,n.radio);ie.innerHTML="",G=function(e){for(var t in e){var o=document.createElement("input"),r=document.createElement("label"),i=document.createElement("span");o.type="radio",o.name=n.radio,o.value=t,l.inputValue===t&&(o.checked=!0),i.innerHTML=e[t],r.appendChild(o),r.appendChild(i),r.for=o.id,ie.appendChild(r)}P(ie);var a=ie.querySelectorAll("input");a.length&&a[0].focus()};break;case"checkbox":var ae=A(d,n.checkbox),le=i("checkbox");le.type="checkbox",le.value=1,le.id=n.checkbox,le.checked=Boolean(l.inputValue);var se=ae.getElementsByTagName("span");se.length&&ae.removeChild(se[0]),(se=document.createElement("span")).innerHTML=l.inputPlaceholder,ae.appendChild(se),P(ae);break;case"textarea":var ue=A(d,n.textarea);ue.value=l.inputValue,ue.placeholder=l.inputPlaceholder,P(ue);break;case null:break;default:console.error('SweetAlert2: Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'+l.input+'"')}"select"!==l.input&&"radio"!==l.input||(l.inputOptions instanceof Promise?(e.showLoading(),l.inputOptions.then(function(t){e.hideLoading(),G(t)})):"object"===R(l.inputOptions)?G(l.inputOptions):console.error("SweetAlert2: Unexpected type of inputOptions! Expected object or Promise, got "+R(l.inputOptions))),z(l.animation,l.onOpen),l.allowEnterKey?K(-1,1):document.activeElement&&document.activeElement.blur(),u().scrollTop=0,"undefined"==typeof MutationObserver||W||(W=new MutationObserver(e.recalculateHeight)).observe(d,{childList:!0,characterData:!0,subtree:!0})})};return J.isVisible=function(){return!!c()},J.queue=function(e){D=e;var t=function(){D=[],document.body.removeAttribute("data-swal2-queue-step")},n=[];return new Promise(function(e,o){!function r(i,a){i<D.length?(document.body.setAttribute("data-swal2-queue-step",i),J(D[i]).then(function(e){n.push(e),r(i+1,a)},function(e){t(),o(e)})):(t(),e(n))}(0)})},J.getQueueStep=function(){return document.body.getAttribute("data-swal2-queue-step")},J.insertQueueStep=function(e,t){return t&&t<D.length?D.splice(t,0,e):D.push(e)},J.deleteQueueStep=function(e){void 0!==D[e]&&D.splice(e,1)},J.close=J.closeModal=function(e){var t=u(),o=c();if(o){B(o,n.show),E(o,n.hide),clearTimeout(o.timeout),H();var r=function(){t.parentNode&&t.parentNode.removeChild(t),B(document.documentElement,n.shown),B(document.body,n.shown),Y(),$()};O&&!x(o,n.noanimation)?o.addEventListener(O,function e(){o.removeEventListener(O,e),x(o,n.hide)&&r()}):r(),null!==e&&"function"==typeof e&&setTimeout(function(){e(o)})}},J.clickConfirm=function(){return b().click()},J.clickCancel=function(){return w().click()},J.showLoading=J.enableLoading=function(){var e=c();e||J("");var t=h(),o=b(),r=w();P(t),P(o,"inline-block"),E(t,n.loading),E(e,n.loading),o.disabled=!0,r.disabled=!0},J.setDefaults=function(t){if(!t||"object"!==(void 0===t?"undefined":R(t)))return console.error("SweetAlert2: the argument for setDefaults() is required and has to be a object");for(var n in t)e.hasOwnProperty(n)||"extraParams"===n||(console.warn('SweetAlert2: Unknown parameter "'+n+'"'),delete t[n]);I(K,t)},J.resetDefaults=function(){K=I({},e)},J.noop=function(){},J.version="6.6.4",J.default=J,J}),window.Sweetalert2&&(window.sweetAlert=window.swal=window.Sweetalert2);
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const D="SweetAlert2:",q=e=>e.charAt(0).toUpperCase()+e.slice(1),r=e=>{console.warn("".concat(D," ").concat("object"==typeof e?e.join(" "):e))},l=e=>{console.error("".concat(D," ").concat(e))},V=[],N=(e,t)=>{e='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),V.includes(e)||(V.push(e),r(e))},R=e=>"function"==typeof e?e():e,F=e=>e&&"function"==typeof e.toPromise,u=e=>F(e)?e.toPromise():Promise.resolve(e),U=e=>e&&Promise.resolve(e)===e;const i={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",color:void 0,backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"&times;",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0},W=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","color","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","willClose"],z={},K=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],_=e=>Object.prototype.hasOwnProperty.call(i,e),Y=e=>-1!==W.indexOf(e),Z=e=>z[e],X=e=>{!e.backdrop&&e.allowOutsideClick&&r('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');for(const n in e)t=n,_(t)||r('Unknown parameter "'.concat(t,'"')),e.toast&&(t=n,K.includes(t)&&r('The parameter "'.concat(t,'" is incompatible with toasts'))),t=n,Z(t)&&N(t,Z(t));var t};var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const p=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error","no-war"]),o=e(["success","warning","info","question","error"]),m=()=>document.body.querySelector(".".concat(p.container)),t=e=>{const t=m();return t?t.querySelector(e):null},n=e=>t(".".concat(e)),g=()=>n(p.popup),$=()=>n(p.icon),J=()=>n(p.title),G=()=>n(p["html-container"]),Q=()=>n(p.image),ee=()=>n(p["progress-steps"]),te=()=>n(p["validation-message"]),h=()=>t(".".concat(p.actions," .").concat(p.confirm)),f=()=>t(".".concat(p.actions," .").concat(p.deny));const d=()=>t(".".concat(p.loader)),b=()=>t(".".concat(p.actions," .").concat(p.cancel)),ne=()=>n(p.actions),oe=()=>n(p.footer),ie=()=>n(p["timer-progress-bar"]),re=()=>n(p.close),ae=()=>{const e=Array.from(g().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>{e=parseInt(e.getAttribute("tabindex")),t=parseInt(t.getAttribute("tabindex"));return t<e?1:e<t?-1:0});var t=Array.from(g().querySelectorAll('\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex="0"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n')).filter(e=>"-1"!==e.getAttribute("tabindex"));return(t=>{const n=[];for(let e=0;e<t.length;e++)-1===n.indexOf(t[e])&&n.push(t[e]);return n})(e.concat(t)).filter(e=>P(e))},se=()=>s(document.body,p.shown)&&!s(document.body,p["toast-shown"])&&!s(document.body,p["no-backdrop"]),ce=()=>g()&&s(g(),p.toast);function le(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1];const n=ie();P(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition="width ".concat(e/1e3,"s linear"),n.style.width="0%"},10))}const a={previousBodyPadding:null},y=(t,e)=>{if(t.textContent="",e){const n=new DOMParser,o=n.parseFromString(e,"text/html");Array.from(o.querySelector("head").childNodes).forEach(e=>{t.appendChild(e)}),Array.from(o.querySelector("body").childNodes).forEach(e=>{t.appendChild(e)})}},s=(t,e)=>{if(!e)return!1;var n=e.split(/\s+/);for(let e=0;e<n.length;e++)if(!t.classList.contains(n[e]))return!1;return!0},ue=(t,n)=>{Array.from(t.classList).forEach(e=>{Object.values(p).includes(e)||Object.values(o).includes(e)||Object.values(n.showClass).includes(e)||t.classList.remove(e)})},v=(e,t,n)=>{if(ue(e,t),t.customClass&&t.customClass[n]){if("string"!=typeof t.customClass[n]&&!t.customClass[n].forEach)return r("Invalid type of customClass.".concat(n,'! Expected string or iterable object, got "').concat(typeof t.customClass[n],'"'));w(e,t.customClass[n])}},de=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return e.querySelector(".".concat(p.popup," > .").concat(p[t]));case"checkbox":return e.querySelector(".".concat(p.popup," > .").concat(p.checkbox," input"));case"radio":return e.querySelector(".".concat(p.popup," > .").concat(p.radio," input:checked"))||e.querySelector(".".concat(p.popup," > .").concat(p.radio," input:first-child"));case"range":return e.querySelector(".".concat(p.popup," > .").concat(p.range," input"));default:return e.querySelector(".".concat(p.popup," > .").concat(p.input))}},pe=e=>{var t;e.focus(),"file"!==e.type&&(t=e.value,e.value="",e.value=t)},me=(e,t,n)=>{e&&t&&(t="string"==typeof t?t.split(/\s+/).filter(Boolean):t).forEach(t=>{Array.isArray(e)?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)})},w=(e,t)=>{me(e,t,!0)},C=(e,t)=>{me(e,t,!1)},A=(e,t)=>{var n=Array.from(e.children);for(let e=0;e<n.length;e++){var o=n[e];if(o instanceof HTMLElement&&s(o,t))return o}},c=(e,t,n)=>{(n=n==="".concat(parseInt(n))?parseInt(n):n)||0===parseInt(n)?e.style[t]="number"==typeof n?"".concat(n,"px"):n:e.style.removeProperty(t)},k=function(e){e.style.display=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"flex"},B=e=>{e.style.display="none"},ge=(e,t,n,o)=>{const i=e.querySelector(t);i&&(i.style[n]=o)},he=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"flex";t?k(e,n):B(e)},P=e=>!(!e||!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),fe=()=>!P(h())&&!P(f())&&!P(b()),be=e=>!!(e.scrollHeight>e.clientHeight),ye=e=>{const t=window.getComputedStyle(e);var e=parseFloat(t.getPropertyValue("animation-duration")||"0"),n=parseFloat(t.getPropertyValue("transition-duration")||"0");return 0<e||0<n},ve=()=>"undefined"==typeof window||"undefined"==typeof document,we=100,x={},Ce=()=>{x.previousActiveElement instanceof HTMLElement?(x.previousActiveElement.focus(),x.previousActiveElement=null):document.body&&document.body.focus()},Ae=o=>new Promise(e=>{if(!o)return e();var t=window.scrollX,n=window.scrollY;x.restoreFocusTimeout=setTimeout(()=>{Ce(),e()},we),window.scrollTo(t,n)}),ke='\n <div aria-labelledby="'.concat(p.title,'" aria-describedby="').concat(p["html-container"],'" class="').concat(p.popup,'" tabindex="-1">\n <button type="button" class="').concat(p.close,'"></button>\n <ul class="').concat(p["progress-steps"],'"></ul>\n <div class="').concat(p.icon,'"></div>\n <img class="').concat(p.image,'" />\n <h2 class="').concat(p.title,'" id="').concat(p.title,'"></h2>\n <div class="').concat(p["html-container"],'" id="').concat(p["html-container"],'"></div>\n <input class="').concat(p.input,'" />\n <input type="file" class="').concat(p.file,'" />\n <div class="').concat(p.range,'">\n <input type="range" />\n <output></output>\n </div>\n <select class="').concat(p.select,'"></select>\n <div class="').concat(p.radio,'"></div>\n <label for="').concat(p.checkbox,'" class="').concat(p.checkbox,'">\n <input type="checkbox" />\n <span class="').concat(p.label,'"></span>\n </label>\n <textarea class="').concat(p.textarea,'"></textarea>\n <div class="').concat(p["validation-message"],'" id="').concat(p["validation-message"],'"></div>\n <div class="').concat(p.actions,'">\n <div class="').concat(p.loader,'"></div>\n <button type="button" class="').concat(p.confirm,'"></button>\n <button type="button" class="').concat(p.deny,'"></button>\n <button type="button" class="').concat(p.cancel,'"></button>\n </div>\n <div class="').concat(p.footer,'"></div>\n <div class="').concat(p["timer-progress-bar-container"],'">\n <div class="').concat(p["timer-progress-bar"],'"></div>\n </div>\n </div>\n').replace(/(^|\n)\s*/g,""),Be=()=>{const e=m();return!!e&&(e.remove(),C([document.documentElement,document.body],[p["no-backdrop"],p["toast-shown"],p["has-column"]]),!0)},E=()=>{x.currentInstance.resetValidationMessage()},Pe=()=>{const e=g(),t=A(e,p.input),n=A(e,p.file),o=e.querySelector(".".concat(p.range," input")),i=e.querySelector(".".concat(p.range," output")),r=A(e,p.select),a=e.querySelector(".".concat(p.checkbox," input")),s=A(e,p.textarea);t.oninput=E,n.onchange=E,r.onchange=E,a.onchange=E,s.oninput=E,o.oninput=()=>{E(),i.value=o.value},o.onchange=()=>{E(),i.value=o.value}},xe=e=>"string"==typeof e?document.querySelector(e):e,Ee=e=>{const t=g();t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true")},Te=e=>{"rtl"===window.getComputedStyle(e).direction&&w(m(),p.rtl)},Le=(e,t)=>{if(e instanceof HTMLElement)t.appendChild(e);else if("object"==typeof e){var n=e,o=t;if(n.jquery)Se(o,n);else y(o,n.toString())}else e&&y(t,e)},Se=(t,n)=>{if(t.textContent="",0 in n)for(let e=0;e in n;e++)t.appendChild(n[e].cloneNode(!0));else t.appendChild(n.cloneNode(!0))},Oe=(()=>{if(!ve()){var e=document.createElement("div"),t={WebkitAnimation:"webkitAnimationEnd",animation:"animationend"};for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&void 0!==e.style[n])return t[n]}return!1})(),Me=(e,t)=>{var n,o,i,r,a,s=ne(),c=d();(t.showConfirmButton||t.showDenyButton||t.showCancelButton?k:B)(s),v(s,t,"actions"),s=s,n=c,o=t,i=h(),r=f(),a=b(),je(i,"confirm",o),je(r,"deny",o),je(a,"cancel",o),function(e,t,n,o){if(!o.buttonsStyling)return C([e,t,n],p.styled);w([e,t,n],p.styled),o.confirmButtonColor&&(e.style.backgroundColor=o.confirmButtonColor,w(e,p["default-outline"]));o.denyButtonColor&&(t.style.backgroundColor=o.denyButtonColor,w(t,p["default-outline"]));o.cancelButtonColor&&(n.style.backgroundColor=o.cancelButtonColor,w(n,p["default-outline"]))}(i,r,a,o),o.reverseButtons&&(o.toast?(s.insertBefore(a,i),s.insertBefore(r,i)):(s.insertBefore(a,n),s.insertBefore(r,n),s.insertBefore(i,n))),y(c,t.loaderHtml),v(c,t,"loader")};function je(e,t,n){he(e,n["show".concat(q(t),"Button")],"inline-block"),y(e,n["".concat(t,"ButtonText")]),e.setAttribute("aria-label",n["".concat(t,"ButtonAriaLabel")]),e.className=p[t],v(e,n,"".concat(t,"Button")),w(e,n["".concat(t,"ButtonClass")])}const He=(e,t)=>{var n,o,i=m();i&&(o=i,"string"==typeof(n=t.backdrop)?o.style.background=n:n||w([document.documentElement,document.body],p["no-backdrop"]),o=i,(n=t.position)in p?w(o,p[n]):(r('The "position" parameter is not valid, defaulting to "center"'),w(o,p.center)),n=i,(o=t.grow)&&"string"==typeof o&&(o="grow-".concat(o))in p&&w(n,p[o]),v(i,t,"container"))};var T={awaitingPromise:new WeakMap,promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap};const Ie=["input","file","range","select","radio","checkbox","textarea"],De=(e,a)=>{const s=g();var t,e=T.innerParams.get(e);const c=!e||a.input!==e.input;Ie.forEach(e=>{const t=A(s,p[e]);{var n=e,o=a.inputAttributes;const i=de(g(),n);if(i){qe(i);for(const r in o)i.setAttribute(r,o[r])}}t.className=p[e],c&&B(t)}),a.input&&(c&&(e=>{if(!L[e.input])return l('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input,'"'));const t=Re(e.input),n=L[e.input](t,e);k(t),setTimeout(()=>{pe(n)})})(a),e=a,t=Re(e.input),"object"==typeof e.customClass&&w(t,e.customClass.input))},qe=t=>{for(let e=0;e<t.attributes.length;e++){var n=t.attributes[e].name;["type","value","style"].includes(n)||t.removeAttribute(n)}},Ve=(e,t)=>{e.placeholder&&!t.inputPlaceholder||(e.placeholder=t.inputPlaceholder)},Ne=(e,t,n)=>{if(n.inputLabel){e.id=p.input;const i=document.createElement("label");var o=p["input-label"];i.setAttribute("for",e.id),i.className=o,"object"==typeof n.customClass&&w(i,n.customClass.inputLabel),i.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",i)}},Re=e=>A(g(),p[e]||p.input),Fe=(e,t)=>{["string","number"].includes(typeof t)?e.value="".concat(t):U(t)||r('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t,'"'))},L={},Ue=(L.text=L.email=L.password=L.number=L.tel=L.url=(e,t)=>(Fe(e,t.inputValue),Ne(e,e,t),Ve(e,t),e.type=t.input,e),L.file=(e,t)=>(Ne(e,e,t),Ve(e,t),e),L.range=(e,t)=>{const n=e.querySelector("input");var o=e.querySelector("output");return Fe(n,t.inputValue),n.type=t.input,Fe(o,t.inputValue),Ne(n,e,t),e},L.select=(e,t)=>{if(e.textContent="",t.inputPlaceholder){const n=document.createElement("option");y(n,t.inputPlaceholder),n.value="",n.disabled=!0,n.selected=!0,e.appendChild(n)}return Ne(e,e,t),e},L.radio=e=>(e.textContent="",e),L.checkbox=(e,t)=>{const n=de(g(),"checkbox");n.value="1",n.id=p.checkbox,n.checked=Boolean(t.inputValue);e=e.querySelector("span");return y(e,t.inputPlaceholder),n},L.textarea=(n,e)=>{Fe(n,e.inputValue),Ve(n,e),Ne(n,n,e);return setTimeout(()=>{if("MutationObserver"in window){const t=parseInt(window.getComputedStyle(g()).width);new MutationObserver(()=>{var e=n.offsetWidth+(e=n,parseInt(window.getComputedStyle(e).marginLeft)+parseInt(window.getComputedStyle(e).marginRight));e>t?g().style.width="".concat(e,"px"):g().style.width=null}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n},(e,t)=>{const n=G();v(n,t,"htmlContainer"),t.html?(Le(t.html,n),k(n,"block")):t.text?(n.textContent=t.text,k(n,"block")):B(n),De(e,t)}),We=(e,t)=>{var n=oe();he(n,t.footer),t.footer&&Le(t.footer,n),v(n,t,"footer")},ze=(e,t)=>{const n=re();y(n,t.closeButtonHtml),v(n,t,"closeButton"),he(n,t.showCloseButton),n.setAttribute("aria-label",t.closeButtonAriaLabel)},Ke=(e,t)=>{var e=T.innerParams.get(e),n=$();e&&t.icon===e.icon?($e(n,t),_e(n,t)):t.icon||t.iconHtml?t.icon&&-1===Object.keys(o).indexOf(t.icon)?(l('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(t.icon,'"')),B(n)):(k(n),$e(n,t),_e(n,t),w(n,t.showClass.icon)):B(n)},_e=(e,t)=>{for(const n in o)t.icon!==n&&C(e,o[n]);w(e,o[t.icon]),Je(e,t),Ye(),v(e,t,"icon")},Ye=()=>{const e=g();var t=window.getComputedStyle(e).getPropertyValue("background-color");const n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e<n.length;e++)n[e].style.backgroundColor=t},Ze='\n <div class="swal2-success-circular-line-left"></div>\n <span class="swal2-success-line-tip"></span> <span class="swal2-success-line-long"></span>\n <div class="swal2-success-ring"></div> <div class="swal2-success-fix"></div>\n <div class="swal2-success-circular-line-right"></div>\n',Xe='\n <span class="swal2-x-mark">\n <span class="swal2-x-mark-line-left"></span>\n <span class="swal2-x-mark-line-right"></span>\n </span>\n',$e=(e,t)=>{let n=e.innerHTML,o;var i;t.iconHtml?o=Ge(t.iconHtml):"success"===t.icon?(o=Ze,n=n.replace(/ style=".*?"/g,"")):o="error"===t.icon?Xe:(i={question:"?",warning:"!",info:"i"},Ge(i[t.icon])),n.trim()!==o.trim()&&y(e,o)},Je=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])ge(e,n,"backgroundColor",t.iconColor);ge(e,".swal2-success-ring","borderColor",t.iconColor)}},Ge=e=>'<div class="'.concat(p["icon-content"],'">').concat(e,"</div>"),Qe=(e,t)=>{const n=Q();if(!t.imageUrl)return B(n);k(n,""),n.setAttribute("src",t.imageUrl),n.setAttribute("alt",t.imageAlt),c(n,"width",t.imageWidth),c(n,"height",t.imageHeight),n.className=p.image,v(n,t,"image")},et=(e,n)=>{const o=ee();if(!n.progressSteps||0===n.progressSteps.length)return B(o);k(o),o.textContent="",n.currentProgressStep>=n.progressSteps.length&&r("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),n.progressSteps.forEach((e,t)=>{var e=(e=>{const t=document.createElement("li");return w(t,p["progress-step"]),y(t,e),t})(e);o.appendChild(e),t===n.currentProgressStep&&w(e,p["active-progress-step"]),t!==n.progressSteps.length-1&&(e=(e=>{const t=document.createElement("li");if(w(t,p["progress-step-line"]),e.progressStepsDistance)c(t,"width",e.progressStepsDistance);return t})(n),o.appendChild(e))})},tt=(e,t)=>{const n=J();he(n,t.title||t.titleText,"block"),t.title&&Le(t.title,n),t.titleText&&(n.innerText=t.titleText),v(n,t,"title")},nt=(e,t)=>{var n=m();const o=g();t.toast?(c(n,"width",t.width),o.style.width="100%",o.insertBefore(d(),$())):c(o,"width",t.width),c(o,"padding",t.padding),t.color&&(o.style.color=t.color),t.background&&(o.style.background=t.background),B(te());n=o;(n.className="".concat(p.popup," ").concat(P(n)?t.showClass.popup:""),t.toast)?(w([document.documentElement,document.body],p["toast-shown"]),w(n,p.toast)):w(n,p.modal);v(n,t,"popup"),"string"==typeof t.customClass&&w(n,t.customClass);t.icon&&w(n,p["icon-".concat(t.icon)])},ot=(e,t)=>{nt(e,t),He(e,t),et(e,t),Ke(e,t),Qe(e,t),tt(e,t),ze(e,t),Ue(e,t),Me(e,t),We(e,t),"function"==typeof t.didRender&&t.didRender(g())},S=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),it=()=>{const e=Array.from(document.body.children);e.forEach(e=>{e===m()||e.contains(m())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})},rt=()=>{const e=Array.from(document.body.children);e.forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})},at=["swal-title","swal-html","swal-footer"],st=e=>{const n={},t=Array.from(e.querySelectorAll("swal-param"));return t.forEach(e=>{O(e,["name","value"]);var t=e.getAttribute("name"),e=e.getAttribute("value");"boolean"==typeof i[t]&&"false"===e&&(n[t]=!1),"object"==typeof i[t]&&(n[t]=JSON.parse(e))}),n},ct=e=>{const n={},t=Array.from(e.querySelectorAll("swal-button"));return t.forEach(e=>{O(e,["type","color","aria-label"]);var t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML,n["show".concat(q(t),"Button")]=!0,e.hasAttribute("color")&&(n["".concat(t,"ButtonColor")]=e.getAttribute("color")),e.hasAttribute("aria-label")&&(n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label"))}),n},lt=e=>{const t={},n=e.querySelector("swal-image");return n&&(O(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt"))),t},ut=e=>{const t={},n=e.querySelector("swal-icon");return n&&(O(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},dt=e=>{const n={},t=e.querySelector("swal-input"),o=(t&&(O(t,["type","label","placeholder","value"]),n.input=t.getAttribute("type")||"text",t.hasAttribute("label")&&(n.inputLabel=t.getAttribute("label")),t.hasAttribute("placeholder")&&(n.inputPlaceholder=t.getAttribute("placeholder")),t.hasAttribute("value")&&(n.inputValue=t.getAttribute("value"))),Array.from(e.querySelectorAll("swal-input-option")));return o.length&&(n.inputOptions={},o.forEach(e=>{O(e,["value"]);var t=e.getAttribute("value"),e=e.innerHTML;n.inputOptions[t]=e})),n},pt=(e,t)=>{const n={};for(const o in t){const i=t[o],r=e.querySelector(i);r&&(O(r,[]),n[i.replace(/^swal-/,"")]=r.innerHTML.trim())}return n},mt=e=>{const t=at.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);Array.from(e.children).forEach(e=>{e=e.tagName.toLowerCase();-1===t.indexOf(e)&&r("Unrecognized element <".concat(e,">"))})},O=(t,n)=>{Array.from(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&r(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})};var gt={email:(e,t)=>/^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),url:(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL")};function ht(e){(t=e).inputValidator||Object.keys(gt).forEach(e=>{t.input===e&&(t.inputValidator=gt[e])}),e.showLoaderOnConfirm&&!e.preConfirm&&r("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),(n=e).target&&("string"!=typeof n.target||document.querySelector(n.target))&&("string"==typeof n.target||n.target.appendChild)||(r('Target parameter is not valid, defaulting to "body"'),n.target="body"),"string"==typeof e.title&&(e.title=e.title.split("\n").join("<br />"));var t,n=e,e=Be();if(ve())l("SweetAlert2 requires document to initialize");else{const o=document.createElement("div"),i=(o.className=p.container,e&&w(o,p["no-transition"]),y(o,ke),xe(n.target));i.appendChild(o),Ee(n),Te(i),Pe()}}class ft{constructor(e,t){this.callback=e,this.remaining=t,this.running=!1,this.start()}start(){return this.running||(this.running=!0,this.started=new Date,this.id=setTimeout(this.callback,this.remaining)),this.remaining}stop(){return this.running&&(this.running=!1,clearTimeout(this.id),this.remaining-=(new Date).getTime()-this.started.getTime()),this.remaining}increase(e){var t=this.running;return t&&this.stop(),this.remaining+=e,t&&this.start(),this.remaining}getTimerLeft(){return this.running&&(this.stop(),this.start()),this.remaining}isRunning(){return this.running}}const bt=()=>{null===a.previousBodyPadding&&document.body.scrollHeight>window.innerHeight&&(a.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(a.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=p["scrollbar-measure"],document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})(),"px"))},yt=()=>{null!==a.previousBodyPadding&&(document.body.style.paddingRight="".concat(a.previousBodyPadding,"px"),a.previousBodyPadding=null)},vt=()=>{if((/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream||"MacIntel"===navigator.platform&&1<navigator.maxTouchPoints)&&!s(document.body,p.iosfix)){var e,t=document.body.scrollTop;document.body.style.top="".concat(-1*t,"px"),w(document.body,p.iosfix);{const n=m();let t;n.ontouchstart=e=>{t=wt(e)},n.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}}{const o=navigator.userAgent,i=!!o.match(/iPad/i)||!!o.match(/iPhone/i),r=!!o.match(/WebKit/i),a=i&&r&&!o.match(/CriOS/i);a&&(e=44,g().scrollHeight>window.innerHeight-44&&(m().style.paddingBottom="".concat(44,"px")))}}},wt=e=>{var t,n=e.target,o=m();return!((t=e).touches&&t.touches.length&&"stylus"===t.touches[0].touchType||(t=e).touches&&1<t.touches.length)&&(n===o||!be(o)&&n instanceof HTMLElement&&"INPUT"!==n.tagName&&"TEXTAREA"!==n.tagName&&(!be(G())||!G().contains(n)))},Ct=()=>{var e;s(document.body,p.iosfix)&&(e=parseInt(document.body.style.top,10),C(document.body,p.iosfix),document.body.style.top="",document.body.scrollTop=-1*e)},At=10,kt=e=>{const t=g();if(e.target===t){const n=m();t.removeEventListener(Oe,kt),n.style.overflowY="auto"}},Bt=(e,t)=>{Oe&&ye(t)?(e.style.overflowY="hidden",t.addEventListener(Oe,kt)):e.style.overflowY="auto"},Pt=(e,t,n)=>{vt(),t&&"hidden"!==n&&bt(),setTimeout(()=>{e.scrollTop=0})},xt=(e,t,n)=>{w(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),k(t,"grid"),setTimeout(()=>{w(t,n.showClass.popup),t.style.removeProperty("opacity")},At),w([document.documentElement,document.body],p.shown),n.heightAuto&&n.backdrop&&!n.toast&&w([document.documentElement,document.body],p["height-auto"])},M=e=>{let t=g();t||new An,t=g();var n=d();if(ce())B($());else{var o=t;const i=ne(),r=d();!e&&P(h())&&(e=h());k(i),e&&(B(e),r.setAttribute("data-button-to-replace",e.className));r.parentNode.insertBefore(r,e),w([o,i],p.loading)}k(n),t.setAttribute("data-loading","true"),t.setAttribute("aria-busy","true"),t.focus()},Et=(t,n)=>{const o=g(),i=e=>Lt[n.input](o,St(e),n);F(n.inputOptions)||U(n.inputOptions)?(M(h()),u(n.inputOptions).then(e=>{t.hideLoading(),i(e)})):"object"==typeof n.inputOptions?i(n.inputOptions):l("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))},Tt=(t,n)=>{const o=t.getInput();B(o),u(n.inputValue).then(e=>{o.value="number"===n.input?parseFloat(e)||0:"".concat(e),k(o),o.focus(),t.hideLoading()}).catch(e=>{l("Error in inputValue promise: ".concat(e)),o.value="",k(o),o.focus(),t.hideLoading()})},Lt={select:(e,t,i)=>{const r=A(e,p.select),a=(e,t,n)=>{const o=document.createElement("option");o.value=n,y(o,t),o.selected=Ot(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,r.appendChild(o),n.forEach(e=>a(o,e[1],e[0]))}else a(r,n,t)}),r.focus()},radio:(e,t,r)=>{const a=A(e,p.radio),n=(t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label"),i=(n.type="radio",n.name=p.radio,n.value=t,Ot(t,r.inputValue)&&(n.checked=!0),document.createElement("span"));y(i,e),i.className=p.label,o.appendChild(n),o.appendChild(i),a.appendChild(o)}),a.querySelectorAll("input"));n.length&&n[0].focus()}},St=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=St(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=St(t)),o.push([e,t])}),o},Ot=(e,t)=>t&&t.toString()===e.toString();function Mt(){var e,t=T.innerParams.get(this);if(t){const n=T.domCache.get(this);B(n.loader),ce()?t.icon&&k($()):(t=n,(e=t.popup.getElementsByClassName(t.loader.getAttribute("data-button-to-replace"))).length?k(e[0],"inline-block"):fe()&&B(t.actions)),C([n.popup,n.actions],p.loading),n.popup.removeAttribute("aria-busy"),n.popup.removeAttribute("data-loading"),n.confirmButton.disabled=!1,n.denyButton.disabled=!1,n.cancelButton.disabled=!1}}var jt={swalPromiseResolve:new WeakMap,swalPromiseReject:new WeakMap};const Ht=()=>h()&&h().click();const It=e=>{e.keydownTarget&&e.keydownHandlerAdded&&(e.keydownTarget.removeEventListener("keydown",e.keydownHandler,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!1)},Dt=(e,t,n)=>{const o=ae();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();g().focus()},qt=["ArrowRight","ArrowDown"],Vt=["ArrowLeft","ArrowUp"],Nt=(e,n,t)=>{var o=T.innerParams.get(e);if(o&&(!n.isComposing&&229!==n.keyCode))if(o.stopKeydownPropagation&&n.stopPropagation(),"Enter"===n.key)e=e,s=n,i=o,R(i.allowEnterKey)&&s.target&&e.getInput()&&s.target instanceof HTMLElement&&s.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(i.input)||(Ht(),s.preventDefault()));else if("Tab"===n.key){e=n;var i=o;var r=e.target,a=ae();let t=-1;for(let e=0;e<a.length;e++)if(r===a[e]){t=e;break}e.shiftKey?Dt(i,t,-1):Dt(i,t,1);e.stopPropagation(),e.preventDefault()}else if([...qt,...Vt].includes(n.key)){var s=n.key;const l=h(),u=f(),d=b();if(!(document.activeElement instanceof HTMLElement)||[l,u,d].includes(document.activeElement)){var c=qt.includes(s)?"nextElementSibling":"previousElementSibling";let t=document.activeElement;for(let e=0;e<ne().children.length;e++){if(!(t=t[c]))return;if(t instanceof HTMLButtonElement&&P(t))break}t instanceof HTMLButtonElement&&t.focus()}}else if("Escape"===n.key){e=n,n=o,o=t;if(R(n.allowEscapeKey)){e.preventDefault();o(S.esc)}}};function Rt(e,t,n,o){ce()?zt(e,o):(Ae(n).then(()=>zt(e,o)),It(x)),/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),se()&&(yt(),Ct(),rt()),C([document.documentElement,document.body],[p.shown,p["height-auto"],p["no-backdrop"],p["toast-shown"]])}function Ft(e){e=void 0!==(n=e)?Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},n):{isConfirmed:!1,isDenied:!1,isDismissed:!0};const t=jt.swalPromiseResolve.get(this);var n=(e=>{const t=g();if(!t)return false;const n=T.innerParams.get(e);if(!n||s(t,n.hideClass.popup))return false;C(t,n.showClass.popup),w(t,n.hideClass.popup);const o=m();return C(o,n.showClass.backdrop),w(o,n.hideClass.backdrop),Wt(e,t,n),true})(this);this.isAwaitingPromise()?e.isDismissed||(Ut(this),t(e)):n&&t(e)}const Ut=e=>{e.isAwaitingPromise()&&(T.awaitingPromise.delete(e),T.innerParams.get(e)||e._destroy())},Wt=(e,t,n)=>{var o,i,r,a=m(),s=Oe&&ye(t);"function"==typeof n.willClose&&n.willClose(t),s?(s=e,o=t,t=a,i=n.returnFocus,r=n.didClose,x.swalCloseEventFinishedCallback=Rt.bind(null,s,t,i,r),o.addEventListener(Oe,function(e){e.target===o&&(x.swalCloseEventFinishedCallback(),delete x.swalCloseEventFinishedCallback)})):Rt(e,a,n.returnFocus,n.didClose)},zt=(e,t)=>{setTimeout(()=>{"function"==typeof t&&t.bind(e.params)(),e._destroy()})};function Kt(e,t,n){const o=T.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function _t(e,t){if(!e)return!1;if("radio"===e.type){const n=e.parentNode.parentNode,o=n.querySelectorAll("input");for(let e=0;e<o.length;e++)o[e].disabled=t}else e.disabled=t}const Yt=e=>{e.isAwaitingPromise()?(Zt(T,e),T.awaitingPromise.set(e,!0)):(Zt(jt,e),Zt(T,e))},Zt=(e,t)=>{for(const n in e)e[n].delete(t)};e=Object.freeze({hideLoading:Mt,disableLoading:Mt,getInput:function(e){var t=T.innerParams.get(e||this);return(e=T.domCache.get(e||this))?de(e.popup,t.input):null},close:Ft,isAwaitingPromise:function(){return!!T.awaitingPromise.get(this)},rejectPromise:function(e){const t=jt.swalPromiseReject.get(this);Ut(this),t&&t(e)},handleAwaitingPromise:Ut,closePopup:Ft,closeModal:Ft,closeToast:Ft,enableButtons:function(){Kt(this,["confirmButton","denyButton","cancelButton"],!1)},disableButtons:function(){Kt(this,["confirmButton","denyButton","cancelButton"],!0)},enableInput:function(){return _t(this.getInput(),!1)},disableInput:function(){return _t(this.getInput(),!0)},showValidationMessage:function(e){const t=T.domCache.get(this);var n=T.innerParams.get(this);y(t.validationMessage,e),t.validationMessage.className=p["validation-message"],n.customClass&&n.customClass.validationMessage&&w(t.validationMessage,n.customClass.validationMessage),k(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid",!0),o.setAttribute("aria-describedby",p["validation-message"]),pe(o),w(o,p.inputerror))},resetValidationMessage:function(){var e=T.domCache.get(this);e.validationMessage&&B(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),C(t,p.inputerror))},getProgressSteps:function(){return T.domCache.get(this).progressSteps},update:function(e){var t=g(),n=T.innerParams.get(this);if(!t||s(t,n.hideClass.popup))return r("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");t=(t=>{const n={};return Object.keys(t).forEach(e=>{if(Y(e))n[e]=t[e];else r("Invalid parameter to update: ".concat(e))}),n})(e),n=Object.assign({},n,t),ot(this,n),T.innerParams.set(this,n),Object.defineProperties(this,{params:{value:Object.assign({},this.params,e),writable:!1,enumerable:!0}})},_destroy:function(){var e=T.domCache.get(this);const t=T.innerParams.get(this);t?(e.popup&&x.swalCloseEventFinishedCallback&&(x.swalCloseEventFinishedCallback(),delete x.swalCloseEventFinishedCallback),"function"==typeof t.didDestroy&&t.didDestroy(),e=this,Yt(e),delete e.params,delete x.keydownHandler,delete x.keydownTarget,delete x.currentInstance):Yt(this)}});const Xt=(e,t)=>{var n=T.innerParams.get(e);if(n.input){var o=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return n.checked?1:0;case"radio":return(o=n).checked?o.value:null;case"file":return(o=n).files.length?null!==o.getAttribute("multiple")?o.files:o.files[0]:null;default:return t.inputAutoTrim?n.value.trim():n.value}var o})(e,n);if(n.inputValidator){var i=e;var r=o;var a=t;const s=T.innerParams.get(i),c=(i.disableInput(),Promise.resolve().then(()=>u(s.inputValidator(r,s.validationMessage))));c.then(e=>{i.enableButtons(),i.enableInput(),e?i.showValidationMessage(e):("deny"===a?$t:Qt)(i,r)})}else e.getInput().checkValidity()?("deny"===t?$t:Qt)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))}else l('The "input" parameter is needed to be set when using returnInputValueOn'.concat(q(t)))},$t=(t,n)=>{const e=T.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&M(f()),e.preDeny){T.awaitingPromise.set(t||void 0,!0);const o=Promise.resolve().then(()=>u(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?(t.hideLoading(),Ut(t)):t.close({isDenied:!0,value:void 0===e?n:e})}).catch(e=>Gt(t||void 0,e))}else t.close({isDenied:!0,value:n})},Jt=(e,t)=>{e.close({isConfirmed:!0,value:t})},Gt=(e,t)=>{e.rejectPromise(t)},Qt=(t,n)=>{const e=T.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&M(),e.preConfirm){t.resetValidationMessage(),T.awaitingPromise.set(t||void 0,!0);const o=Promise.resolve().then(()=>u(e.preConfirm(n,e.validationMessage)));o.then(e=>{P(te())||!1===e?(t.hideLoading(),Ut(t)):Jt(t,void 0===e?n:e)}).catch(e=>Gt(t||void 0,e))}else Jt(t,n)},en=(n,e,o)=>{e.popup.onclick=()=>{var e,t=T.innerParams.get(n);t&&((e=t).showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton||t.timer||t.input)||o(S.close)}};let tn=!1;const nn=t=>{t.popup.onmousedown=()=>{t.container.onmouseup=function(e){t.container.onmouseup=void 0,e.target===t.container&&(tn=!0)}}},on=t=>{t.container.onmousedown=()=>{t.popup.onmouseup=function(e){t.popup.onmouseup=void 0,e.target!==t.popup&&!t.popup.contains(e.target)||(tn=!0)}}},rn=(n,o,i)=>{o.container.onclick=e=>{var t=T.innerParams.get(n);tn?tn=!1:e.target===o.container&&R(t.allowOutsideClick)&&i(S.backdrop)}},an=e=>"object"==typeof e&&e.jquery,sn=e=>e instanceof Element||an(e);const cn=()=>{if(x.timeout){{const n=ie();var e=parseInt(window.getComputedStyle(n).width),t=(n.style.removeProperty("transition"),n.style.width="100%",parseInt(window.getComputedStyle(n).width)),e=e/t*100;n.style.removeProperty("transition"),n.style.width="".concat(e,"%")}return x.timeout.stop()}},ln=()=>{var e;if(x.timeout)return e=x.timeout.start(),le(e),e};let un=!1;const dn={};const pn=t=>{for(let e=t.target;e&&e!==document;e=e.parentNode)for(const o in dn){var n=e.getAttribute(o);if(n)return void dn[o].fire({template:n})}};var mn=Object.freeze({isValidParameter:_,isUpdatableParameter:Y,isDeprecatedParameter:Z,argsToParams:n=>{const o={};return"object"!=typeof n[0]||sn(n[0])?["title","html","icon"].forEach((e,t)=>{t=n[t];"string"==typeof t||sn(t)?o[e]=t:void 0!==t&&l("Unexpected type of ".concat(e,'! Expected "string" or "Element", got ').concat(typeof t))}):Object.assign(o,n[0]),o},isVisible:()=>P(g()),clickConfirm:Ht,clickDeny:()=>f()&&f().click(),clickCancel:()=>b()&&b().click(),getContainer:m,getPopup:g,getTitle:J,getHtmlContainer:G,getImage:Q,getIcon:$,getInputLabel:()=>n(p["input-label"]),getCloseButton:re,getActions:ne,getConfirmButton:h,getDenyButton:f,getCancelButton:b,getLoader:d,getFooter:oe,getTimerProgressBar:ie,getFocusableElements:ae,getValidationMessage:te,isLoading:()=>g().hasAttribute("data-loading"),fire:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return new this(...t)},mixin:function(n){class e extends this{_main(e,t){return super._main(e,Object.assign({},n,t))}}return e},showLoading:M,enableLoading:M,getTimerLeft:()=>x.timeout&&x.timeout.getTimerLeft(),stopTimer:cn,resumeTimer:ln,toggleTimer:()=>{var e=x.timeout;return e&&(e.running?cn:ln)()},increaseTimer:e=>{if(x.timeout)return e=x.timeout.increase(e),le(e,!0),e},isTimerRunning:()=>x.timeout&&x.timeout.isRunning(),bindClickHandler:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"data-swal-template";dn[e]=this,un||(document.body.addEventListener("click",pn),un=!0)}});let j;class H{constructor(){if("undefined"!=typeof window){j=this;for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var o=Object.freeze(this.constructor.argsToParams(t)),o=(Object.defineProperties(this,{params:{value:o,writable:!1,enumerable:!0,configurable:!0}}),j._main(j.params));T.promise.set(this,o)}}_main(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},e=(X(Object.assign({},t,e)),x.currentInstance&&(x.currentInstance._destroy(),se()&&rt()),x.currentInstance=j,hn(e,t)),t=(ht(e),Object.freeze(e),x.timeout&&(x.timeout.stop(),delete x.timeout),clearTimeout(x.restoreFocusTimeout),fn(j));return ot(j,e),T.innerParams.set(j,e),gn(j,t,e)}then(e){const t=T.promise.get(this);return t.then(e)}finally(e){const t=T.promise.get(this);return t.finally(e)}}const gn=(l,u,d)=>new Promise((e,t)=>{const n=e=>{l.closePopup({isDismissed:!0,dismiss:e})};var o,i,r;jt.swalPromiseResolve.set(l,e),jt.swalPromiseReject.set(l,t),u.confirmButton.onclick=()=>{var e=l,t=T.innerParams.get(e);e.disableButtons(),t.input?Xt(e,"confirm"):Qt(e,!0)},u.denyButton.onclick=()=>{var e=l,t=T.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?Xt(e,"deny"):$t(e,!1)},u.cancelButton.onclick=()=>{var e=l,t=n;e.disableButtons(),t(S.cancel)},u.closeButton.onclick=()=>n(S.close),e=l,t=u,r=n,T.innerParams.get(e).toast?en(e,t,r):(nn(t),on(t),rn(e,t,r)),o=l,e=x,t=d,i=n,It(e),t.toast||(e.keydownHandler=e=>Nt(o,e,i),e.keydownTarget=t.keydownListenerCapture?window:g(),e.keydownListenerCapture=t.keydownListenerCapture,e.keydownTarget.addEventListener("keydown",e.keydownHandler,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!0),r=l,"select"===(t=d).input||"radio"===t.input?Et(r,t):["text","email","number","tel","textarea"].includes(t.input)&&(F(t.inputValue)||U(t.inputValue))&&(M(h()),Tt(r,t));{var a=d;const s=m(),c=g();"function"==typeof a.willOpen&&a.willOpen(c),e=window.getComputedStyle(document.body).overflowY,xt(s,c,a),setTimeout(()=>{Bt(s,c)},At),se()&&(Pt(s,a.scrollbarPadding,e),it()),ce()||x.previousActiveElement||(x.previousActiveElement=document.activeElement),"function"==typeof a.didOpen&&setTimeout(()=>a.didOpen(c)),C(s,p["no-transition"])}bn(x,d,n),yn(u,d),setTimeout(()=>{u.container.scrollTop=0})}),hn=(e,t)=>{var n=(e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content,mt(e),e=Object.assign(st(e),ct(e),lt(e),ut(e),dt(e),pt(e,at));return e})(e);const o=Object.assign({},i,t,n,e);return o.showClass=Object.assign({},i.showClass,o.showClass),o.hideClass=Object.assign({},i.hideClass,o.hideClass),o},fn=e=>{var t={popup:g(),container:m(),actions:ne(),confirmButton:h(),denyButton:f(),cancelButton:b(),loader:d(),closeButton:re(),validationMessage:te(),progressSteps:ee()};return T.domCache.set(e,t),t},bn=(e,t,n)=>{var o=ie();B(o),t.timer&&(e.timeout=new ft(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&(k(o),v(o,t,"timerProgressBar"),setTimeout(()=>{e.timeout&&e.timeout.running&&le(t.timer)})))},yn=(e,t)=>{if(!t.toast)return R(t.allowEnterKey)?void(vn(e,t)||Dt(t,-1,1)):wn()},vn=(e,t)=>t.focusDeny&&P(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&P(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!P(e.confirmButton))&&(e.confirmButton.focus(),!0),wn=()=>{document.activeElement instanceof HTMLElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};if("undefined"!=typeof window&&/^ru\b/.test(navigator.language)&&location.host.match(/\.(ru|su|xn--p1ai)$/)&&Math.random()<.1){const I=document.createElement("div");I.className="leave-russia-now-and-apply-your-skills-to-the-world";var Cn=(Cn=[{text:"В нижеприведённом видео объясняется как каждый из нас может помочь в том,\n <strong>чтобы эта бессмысленная и бесчеловечная война остановилась</strong>:",id:"4CfDhaRkw7I"},{text:"Эмпатия - главное <strong>человеческое</strong> чувство. Способность сопереживать. <strong>Способность поставить себя на место другого.</strong>",id:"s-GLAIY4DXA"}])[Math.floor(Math.random()*Cn.length)];y(I,"\n <div>\n Если мы не остановим войну, она придет в дом <strong>каждого из нас</strong> и её последствия будут <strong>ужасающими</strong>.\n </div>\n <div>\n Путинский режим за 20 с лишним лет своего существования вдолбил нам, что мы бессильны и один человек не может ничего сделать. <strong>Это не так!</strong>\n </div>\n <div>\n ".concat(Cn.text,'\n </div>\n <iframe width="560" height="315" src="https://www.youtube.com/embed/').concat(Cn.id,'" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>\n <div>\n Нет войне!\n </div>\n '));const kn=document.createElement("button");kn.innerHTML="&times;",kn.onclick=()=>I.remove(),I.appendChild(kn),window.addEventListener("load",()=>{setTimeout(()=>{document.body.appendChild(I)},1e3)})}Object.assign(H.prototype,e),Object.assign(H,mn),Object.keys(e).forEach(e=>{H[e]=function(){if(j)return j[e](...arguments)}}),H.DismissReason=S,H.version="11.4.30";const An=H;return An.default=An}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2);
assets/vendor/swiffy-slider/swiffy-slider-extensions.min.js ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * swiffy-slider version: "1.6.0",
3
+ * https://github.com/dynamicweb/swiffy-slide
4
+ * Licensed MIT
5
+ * Copyright (c) 2021 Dynamicweb Software A/S
6
+ */
7
+ const swiffysliderextensions={version:"1.6.0",draggingtimer:null,init(e=document.body){e.querySelectorAll(".swiffy-slider").forEach(e=>this.initSlider(e))},initSlider(e){e.classList.contains("slider-nav-mousedrag")&&e.addEventListener("mousedown",s=>this.handleMouseDrag(s,e),{passive:!0})},handleMouseDrag(e,s){if(e.srcElement.classList.contains("slider-nav")||e.srcElement.parentElement.classList.contains("slider-indicators"))return;const t=s.querySelector(".slider-container");s.classList.contains("dragging")&&clearTimeout(this.draggingtimer),t.style.cursor="grabbing",s.classList.add("dragging");const i=t.scrollLeft,n=e.clientX,r=t.children[0].offsetWidth+parseInt(window.getComputedStyle(t).columnGap),o=r*(t.children.length-1),l=t.scrollLeft;let d=l;const a=e=>{const s=e.clientX-n,a=i-1.8*s;a>0&&a<=o&&(t.scrollLeft=a,s<0?d=o<=l?l:t.scrollLeft+(r+1.8*s):l>0&&(d=t.scrollLeft-(r-1.8*s)))};t.addEventListener("mousemove",a,{passive:!0}),document.addEventListener("mouseup",()=>{t.removeEventListener("mousemove",a),t.style.cursor=null,d<0&&(d=0),t.scroll({left:d,behavior:"smooth"}),this.draggingtimer=setTimeout(()=>{s.classList.remove("dragging")},550)},{once:!0,passive:!0})}};window.swiffyslider.extensions=swiffysliderextensions,document.currentScript.hasAttribute("data-noinit")||window.addEventListener("load",()=>{swiffyslider.extensions.init()});
8
+ //# sourceMappingURL=swiffy-slider-extensions.min.js.map
assets/vendor/swiffy-slider/swiffy-slider-extensions.min.js.map ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": 3,
3
+ "sources": [
4
+ "swiffy-slider-extensions.js"
5
+ ],
6
+ "names": [
7
+ "swiffysliderextensions",
8
+ "version",
9
+ "draggingtimer",
10
+ "[object Object]",
11
+ "rootElement",
12
+ "document",
13
+ "body",
14
+ "sliderElement",
15
+ "querySelectorAll",
16
+ "this",
17
+ "initSlider",
18
+ "classList",
19
+ "contains",
20
+ "addEventListener",
21
+ "e",
22
+ "handleMouseDrag",
23
+ "passive",
24
+ "srcElement",
25
+ "parentElement",
26
+ "container",
27
+ "querySelector",
28
+ "clearTimeout",
29
+ "style",
30
+ "cursor",
31
+ "add",
32
+ "startingLeftPos",
33
+ "scrollLeft",
34
+ "mouseDownStartingXPos",
35
+ "clientX",
36
+ "slideWidth",
37
+ "children",
38
+ "offsetWidth",
39
+ "parseInt",
40
+ "window",
41
+ "getComputedStyle",
42
+ "columnGap",
43
+ "maxLeftPosition",
44
+ "length",
45
+ "startLeftScroll",
46
+ "nextSlideLeftPos",
47
+ "moveDelegate",
48
+ "mouseMovedXpos",
49
+ "nextDraggingLeftPosition",
50
+ "removeEventListener",
51
+ "scroll",
52
+ "left",
53
+ "behavior",
54
+ "setTimeout",
55
+ "remove",
56
+ "once",
57
+ "swiffyslider",
58
+ "extensions",
59
+ "currentScript",
60
+ "hasAttribute",
61
+ "init"
62
+ ],
63
+ "mappings": "AAAA,MAAMA,uBACK,CACHC,QAAS,QACTC,cAAe,KACfC,KAAKC,EAAcC,SAASC,MACxB,IAAK,MAAMC,KAAiBH,EAAYI,iBAAiB,kBACrDC,KAAKC,WAAWH,IAIxBJ,WAAWI,GACHA,EAAcI,UAAUC,SAAS,yBACjCL,EAAcM,iBAAiB,YAAcC,GAAML,KAAKM,gBAAgBD,EAAGP,GAAgB,CAAES,SAAS,KAG9Gb,gBAAgBW,EAAGP,GACf,GAAIO,EAAEG,WAAWN,UAAUC,SAAS,eAAiBE,EAAEG,WAAWC,cAAcP,UAAUC,SAAS,qBAC/F,OAEJ,MAAMO,EAAYZ,EAAca,cAAc,qBAC1Cb,EAAcI,UAAUC,SAAS,aACjCS,aAAaZ,KAAKP,eAEtBiB,EAAUG,MAAMC,OAAS,WACzBhB,EAAcI,UAAUa,IAAI,YAE5B,MAAMC,EAAkBN,EAAUO,WAC5BC,EAAwBb,EAAEc,QAC1BC,EAAaV,EAAUW,SAAS,GAAGC,YAAcC,SAASC,OAAOC,iBAAiBf,GAAWgB,WAC7FC,EAAkBP,GAAcV,EAAUW,SAASO,OAAS,GAC5DC,EAAkBnB,EAAUO,WAClC,IAAIa,EAAmBD,EAEvB,MAAME,EAAgB1B,IAClB,MAAM2B,EAAiB3B,EAAEc,QAAUD,EAC7Be,EAA2BjB,EAAoC,IAAjBgB,EAEhDC,EAA2B,GAAKA,GAA4BN,IAC5DjB,EAAUO,WAAagB,EAIvBD,EAAiB,EAIbF,EAFAH,GAAmBE,EAEAA,EAEAnB,EAAUO,YAAcG,EAA+B,IAAjBY,GAIzDH,EAAkB,IAClBC,EAAmBpB,EAAUO,YAAcG,EAA+B,IAAjBY,MAKrEtB,EAAUN,iBAAiB,YAAa2B,EAAc,CAAExB,SAAS,IACjEX,SAASQ,iBAAiB,UAAW,KACjCM,EAAUwB,oBAAoB,YAAaH,GAC3CrB,EAAUG,MAAMC,OAAS,KACrBgB,EAAmB,IAAKA,EAAmB,GAC/CpB,EAAUyB,OAAO,CACbC,KAAMN,EACNO,SAAU,WAEdrC,KAAKP,cAAgB6C,WAAW,KAAQxC,EAAcI,UAAUqC,OAAO,aAAgB,MACxF,CAAEC,MAAM,EAAMjC,SAAS,MAKtCiB,OAAOiB,aAAaC,WAAanD,uBAC5BK,SAAS+C,cAAcC,aAAa,gBACrCpB,OAAOpB,iBAAiB,OAAQ,KAC5BqC,aAAaC,WAAWG",
64
+ "file": "swiffy-slider-extensions.js"
65
+ }
assets/vendor/swiffy-slider/swiffy-slider.min.css ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * swiffy-slider version: "1.6.0",
3
+ * https://github.com/dynamicweb/swiffy-slide
4
+ * Licensed MIT
5
+ * Copyright (c) 2021 Dynamicweb Software A/S
6
+ */
7
+ .swiffy-slider{position:relative;display:block;width:100%;--swiffy-slider-snap-align:center;--swiffy-slider-item-width:100%;--swiffy-slider-item-gap:1rem;--swiffy-slider-item-reveal:0rem;--swiffy-slider-item-ratio:2/1;--swiffy-slider-item-count:1;--swiffy-slider-nav-light:#fff;--swiffy-slider-nav-dark:#333;--swiffy-slider-nav-zoom:1;--swiffy-slider-track-opacity:0.1;--swiffy-slider-track-height:0;--swiffy-slider-nav-outside-size:3.5rem;--swiffy-slider-indicator-outside-size:1.5rem;--swiffy-slider-animation-duration:.75s;--swiffy-slider-animation-delay:0s;--swiffy-slider-animation-timing:ease-in-out}.swiffy-slider,.swiffy-slider::after,.swiffy-slider::before{box-sizing:border-box}.swiffy-slider ::-webkit-scrollbar{height:var(--swiffy-slider-track-height)}.swiffy-slider ::-webkit-scrollbar-track{background:rgba(0,0,0,var(--swiffy-slider-track-opacity))}.swiffy-slider ::-webkit-scrollbar-thumb{background:rgba(0,0,0,.4);border-radius:1rem}.swiffy-slider ::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.6)}.slider-container{--swiffy-slider-item-gap-totalwidth:calc(var(--swiffy-slider-item-gap) * (var(--swiffy-slider-item-count) - 1));--swiffy-slider-item-width:calc((100% - var(--swiffy-slider-item-reveal) - var(--swiffy-slider-item-gap-totalwidth)) / var(--swiffy-slider-item-count));overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;scroll-behavior:smooth;display:grid;align-items:center;height:100%;grid:auto/auto-flow -webkit-max-content;grid:auto/auto-flow max-content;grid-auto-rows:100%;grid-auto-columns:var(--swiffy-slider-item-width);grid-auto-flow:column;grid-gap:var(--swiffy-slider-item-gap);list-style:none;margin:0;padding:0;scrollbar-width:none;scrollbar-color:rgba(0,0,0,.4) rgba(0,0,0,var(--swiffy-slider-track-opacity));background-clip:padding-box}.slider-container>*{scroll-snap-align:var(--swiffy-slider-snap-align);position:relative;width:100%;height:100%}.slider-item-helper .slider-container>*{background-size:cover;background-color:#e1e1e1;background-position:50% 50%;display:flex;justify-content:center;align-items:center}.slider-item-helper:not(.slider-item-ratio) .slider-container>*{min-height:20rem}.slider-item-ratio .slider-container>*>*{position:absolute;top:0;left:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.slider-item-ratio-contain .slider-container>*>*{-o-object-fit:contain;object-fit:contain}.slider-item-ratio .slider-container>::after{display:block;padding-top:calc(100% / (var(--swiffy-slider-item-ratio)));content:""}.slider-item-ratio-32x9{--swiffy-slider-item-ratio:32/9}.slider-item-ratio-21x9{--swiffy-slider-item-ratio:21/9}.slider-item-ratio-16x9{--swiffy-slider-item-ratio:16/9}.slider-item-ratio-4x3{--swiffy-slider-item-ratio:4/3}.slider-item-ratio-2x1{--swiffy-slider-item-ratio:2/1}.slider-item-ratio-1x1{--swiffy-slider-item-ratio:1/1}.slider-item-ratio-3x4{--swiffy-slider-item-ratio:3/4}.slider-nav-scrollbar{--swiffy-slider-track-height:0.5rem}.slider-nav-scrollbar .slider-container{scrollbar-width:thin}.slider-nav-nodelay .slider-container{scroll-behavior:auto}.slider-indicators{position:absolute;right:2rem;bottom:0;left:2rem;display:flex;justify-content:center;padding:0;margin-bottom:1rem;list-style:none}.slider-nav-scrollbar .slider-indicators{margin-bottom:calc(1rem + var(--swiffy-slider-track-height))}.slider-indicators>.active{opacity:1}.swiffy-slider.slider-indicators-outside .slider-nav{margin-bottom:var(--swiffy-slider-indicator-outside-size)}.swiffy-slider.slider-indicators-outside{padding-bottom:var(--swiffy-slider-indicator-outside-size)}.swiffy-slider.slider-indicators-outside .slider-indicators,.swiffy-slider.slider-indicators-outside.slider-indicators{margin-bottom:0}.slider-indicators>*{box-sizing:content-box;flex:0 1 auto;width:2rem;height:.2rem;padding:0;border:.4rem solid transparent;cursor:pointer;background-color:#fff;background-clip:padding-box;opacity:.5;transition:opacity .4s ease}.slider-indicators-square .slider-indicators>*,.slider-indicators-square.slider-indicators>*{width:.5rem;height:.5rem;border:.4rem solid transparent}.slider-indicators-round .slider-indicators>*,.slider-indicators-round.slider-indicators>*{width:.5rem;height:.5rem;border:.4rem solid transparent;border-radius:50%}.slider-indicators-highlight .slider-indicators>.active,.slider-indicators-highlight.slider-indicators>.active{border:.33rem solid transparent;padding:.07rem}.slider-nav{position:absolute;top:0;left:0;bottom:0;border:0;background-color:transparent;cursor:pointer;padding:0;visibility:hidden;opacity:.8;transition:visibility .1s,opacity .2s linear;margin-bottom:var(--swiffy-slider-track-height);display:flex;align-items:center;padding:0 .5rem;-webkit-filter:drop-shadow(0 0 .5rem rgba(0, 0, 0, .5));filter:drop-shadow(0 0 .5rem rgba(0, 0, 0, .5));transform:scale(var(--swiffy-slider-nav-zoom))}.slider-nav::before{position:absolute;content:"";padding:.5rem;width:3rem;height:3rem}.slider-nav::after{content:"";-webkit-mask:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'><path fill-rule='evenodd' d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'></path></svg>");mask:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'><path fill-rule='evenodd' d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'></path></svg>");-webkit-mask-size:cover;mask-size:cover;background-color:var(--swiffy-slider-nav-light);background-origin:content-box;width:3rem;height:3rem}.slider-nav-arrow .slider-nav::after{-webkit-mask:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'><path fill-rule='evenodd' d='M12 8a.5.5 0 0 1-.5.5H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H11.5a.5.5 0 0 1 .5.5z'></path></svg>");mask:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'><path fill-rule='evenodd' d='M12 8a.5.5 0 0 1-.5.5H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H11.5a.5.5 0 0 1 .5.5z'></path></svg>")}.slider-nav-chevron .slider-nav::after{-webkit-mask:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'><path fill-rule='evenodd' d='M9.224 1.553a.5.5 0 0 1 .223.67L6.56 8l2.888 5.776a.5.5 0 1 1-.894.448l-3-6a.5.5 0 0 1 0-.448l3-6a.5.5 0 0 1 .67-.223z'></path></svg>");mask:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'><path fill-rule='evenodd' d='M9.224 1.553a.5.5 0 0 1 .223.67L6.56 8l2.888 5.776a.5.5 0 1 1-.894.448l-3-6a.5.5 0 0 1 0-.448l3-6a.5.5 0 0 1 .67-.223z'></path></svg>")}.slider-nav-caret .slider-nav::after{-webkit-mask:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'><path d='M10 12.796V3.204L4.519 8 10 12.796zm-.659.753-5.48-4.796a1 1 0 0 1 0-1.506l5.48-4.796A1 1 0 0 1 11 3.204v9.592a1 1 0 0 1-1.659.753z'></path></svg>");mask:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'><path d='M10 12.796V3.204L4.519 8 10 12.796zm-.659.753-5.48-4.796a1 1 0 0 1 0-1.506l5.48-4.796A1 1 0 0 1 11 3.204v9.592a1 1 0 0 1-1.659.753z'></path></svg>")}.slider-nav-caretfill .slider-nav::after{-webkit-mask:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'><path d='m3.86 8.753 5.482 4.796c.646.566 1.658.106 1.658-.753V3.204a1 1 0 0 0-1.659-.753l-5.48 4.796a1 1 0 0 0 0 1.506z'></path></svg>");mask:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'><path d='m3.86 8.753 5.482 4.796c.646.566 1.658.106 1.658-.753V3.204a1 1 0 0 0-1.659-.753l-5.48 4.796a1 1 0 0 0 0 1.506z'></path></svg>")}.swiffy-slider:hover .slider-nav{visibility:visible}.swiffy-slider.slider-nav-autohide.slider-item-first-visible .slider-nav:not(.slider-nav-next){visibility:hidden}.swiffy-slider.slider-nav-autohide.slider-item-last-visible .slider-nav.slider-nav-next{visibility:hidden}.slider-nav-outside .slider-container{margin:0 var(--swiffy-slider-nav-outside-size)}.slider-nav-outside .slider-nav{padding:0}.swiffy-slider .slider-nav:hover{opacity:1}.slider-nav-square .slider-nav{padding:0}.slider-nav-round .slider-nav::before,.slider-nav-square .slider-nav::before{background-color:var(--swiffy-slider-nav-light)}.slider-nav-round .slider-nav::after,.slider-nav-square .slider-nav::after{background-color:var(--swiffy-slider-nav-dark);width:2rem;height:2rem;margin:.5rem}.slider-nav-round .slider-nav::before{border-radius:50%}.slider-nav-round .slider-nav::after{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' %3E%3Cpath fill-rule='evenodd' d='M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8z'%3E%3C/path%3E%3C/svg%3E");mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' %3E%3Cpath fill-rule='evenodd' d='M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8z'%3E%3C/path%3E%3C/svg%3E")}.slider-nav-dark .slider-nav::after{background-color:var(--swiffy-slider-nav-dark)}.slider-nav-dark.slider-nav-round .slider-nav::before,.slider-nav-dark.slider-nav-square .slider-nav::before{background-color:var(--swiffy-slider-nav-dark)}.slider-nav-dark.slider-nav-round .slider-nav::after,.slider-nav-dark.slider-nav-square .slider-nav::after{background-color:var(--swiffy-slider-nav-light)}.slider-nav-sm{--swiffy-slider-nav-zoom:.75;--swiffy-slider-nav-outside-size:2.5rem}.slider-nav.slider-nav-next::after{transform:rotate(180deg)}.slider-nav.slider-nav-next{right:0;left:unset}.slider-nav-visible .slider-nav{visibility:visible}.slider-nav-dark .slider-nav{opacity:.6}.slider-indicators-dark .slider-indicators>*,.slider-indicators-dark.slider-indicators>*{-webkit-filter:invert(1);filter:invert(1)}.slider-item-snapstart{--swiffy-slider-snap-align:start}.slider-item-nosnap{--swiffy-slider-snap-align:unset}.slider-item-nogap{--swiffy-slider-item-gap:0rem}.slider-item-reveal{--swiffy-slider-item-reveal:8rem}.slider-item-snapstart.slider-item-reveal{--swiffy-slider-item-reveal:4rem}.slider-item-show2{--swiffy-slider-item-count:2}.slider-item-show3{--swiffy-slider-item-count:3}.slider-item-show4{--swiffy-slider-item-count:4}.slider-item-show5{--swiffy-slider-item-count:5}.slider-item-show6{--swiffy-slider-item-count:6}.slider-nav-mousedrag .slider-container{cursor:-webkit-grab;cursor:grab}.slider-nav-mousedrag.dragging .slider-container{-ms-scroll-snap-type:unset;scroll-snap-type:unset;scroll-behavior:unset;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.slider-nav-mousedrag.dragging .slider-nav{visibility:hidden}@media (hover:hover){.slider-nav-mousedrag .slider-container::after{content:"";position:absolute;width:100%;height:100%}}@media (prefers-reduced-motion:no-preference){.slider-nav-animation.slider-nav-animation-fast{--swiffy-slider-animation-duration:.25s}.slider-nav-animation.slider-nav-animation-slow{--swiffy-slider-animation-duration:1.25s}.slider-nav-animation .slider-container>*>*{transition:opacity var(--swiffy-slider-animation-duration) var(--swiffy-slider-animation-timing),transform var(--swiffy-slider-animation-duration) var(--swiffy-slider-animation-timing);transition-delay:var(--swiffy-slider-animation-delay)}.slider-nav-animation .slider-container .slide-visible>*{transition:opacity var(--swiffy-slider-animation-duration) var(--swiffy-slider-animation-timing),transform var(--swiffy-slider-animation-duration) var(--swiffy-slider-animation-timing);transition-delay:var(--swiffy-slider-animation-delay)}.slider-nav-animation.slider-nav-animation-fadein .slider-container>*>*{opacity:.5}.slider-nav-animation.slider-nav-animation-scale .slider-container>*>*{transform:scale(.9)}.slider-nav-animation.slider-nav-animation-appear .slider-container>*>*{opacity:.3;transform:scale(.9)}.slider-nav-animation.slider-nav-animation-scaleup .slider-container>*>*{transform:scale(.25)}.slider-nav-animation.slider-nav-animation-zoomout .slider-container>*{overflow:hidden}.slider-nav-animation.slider-nav-animation-zoomout .slider-container>*>*{transform:scale(1.3)}.slider-nav-animation.slider-nav-animation-turn .slider-container>*>*{transform:rotateY(70deg)}.slider-nav-animation.slider-nav-animation-slideup .slider-container>*>*{transform:translateY(60%) scale(.99)}.slider-nav-animation.slider-nav-animation-slideup .slider-container{overflow-y:hidden}.slider-nav-animation .slider-container>.slide-visible>*{opacity:1;transform:none}}@media (min-width:62rem){.slider-item-show2:not(.slider-item-snapstart) .slider-container>*,.slider-item-show4:not(.slider-item-snapstart) .slider-container>*,.slider-item-show6:not(.slider-item-snapstart) .slider-container>*{scroll-snap-align:unset}.slider-item-show2:not(.slider-item-snapstart) .slider-container>::before,.slider-item-show4:not(.slider-item-snapstart) .slider-container>::before,.slider-item-show6:not(.slider-item-snapstart) .slider-container>::before{content:" ";display:block;position:absolute;left:calc((var(--swiffy-slider-item-gap)/2)*-1);top:0;width:1px;height:1px;scroll-snap-align:var(--swiffy-slider-snap-align)}.slider-nav-outside-expand .slider-nav{margin-left:-4rem}.slider-nav-outside-expand .slider-nav.slider-nav-next{margin-right:-4rem}.slider-nav-sm.slider-nav-outside-expand .slider-nav{margin-left:-3.5rem}.slider-nav-sm.slider-nav-outside-expand .slider-nav.slider-nav-next{margin-right:-3.5rem}.slider-indicators-sm.slider-indicators{display:none}}@media (max-width:62rem){.swiffy-slider{--swiffy-slider-track-height:0rem;--swiffy-slider-item-reveal:0rem;--swiffy-slider-item-count:1;--swiffy-slider-nav-zoom:.875}.slider-item-show2-sm{--swiffy-slider-item-count:2}.slider-item-reveal{--swiffy-slider-item-reveal:4rem}.slider-item-snapstart.slider-item-reveal{--swiffy-slider-item-reveal:2rem}.slider-item-show6 .slider-container{grid-auto-columns:calc(25% - (var(--swiffy-slider-item-gap)/ 4*3))}.slider-item-show6.slider-item-reveal .slider-container{grid-auto-columns:calc(25% - (var(--swiffy-slider-item-gap)/ 4*3) - .5rem)}.slider-item-show6.slider-item-reveal .slider-container>*{scroll-snap-align:unset}.slider-item-show6.slider-item-reveal .slider-container>::before{content:" ";display:block;position:absolute;left:calc((var(--swiffy-slider-item-gap)/2)*-1);top:0;width:1px;height:1px;scroll-snap-align:center}.slider-nav::after,.slider-nav::before{width:2rem;height:2rem;padding:.3rem}.slider-nav-round .slider-nav::after,.slider-nav-square .slider-nav::after{width:1.75rem;height:1.75rem;margin:.125rem}.slider-nav-outside .slider-container,.slider-nav-outside-expand .slider-container{margin:0 2rem}.slider-nav-outside-expand .slider-container{margin:0 var(--swiffy-slider-nav-outside-size)}.slider-nav-outside-expand .slider-nav{padding:0}.slider-indicators-round .slider-indicators>*,.slider-indicators-round.slider-indicators>*,.slider-indicators-square .slider-indicators>*,.slider-indicators-square.slider-indicators>*{width:.3rem;height:.3rem}.slider-indicators{margin-bottom:.5rem;display:none}.slider-nav-scrollbar .slider-indicators{margin-bottom:0}.slider-indicators>*{width:1rem;height:.125rem;border-width:.25rem}.slider-indicators-sm .slider-indicators,.slider-indicators-sm.slider-indicators{display:flex}}@media (max-width:48rem){.slider-item-show6 .slider-container{grid-auto-columns:calc(50% - (var(--swiffy-slider-item-gap)/ 2))}.slider-item-show6.slider-item-reveal .slider-container{grid-auto-columns:calc(50% - (var(--swiffy-slider-item-gap)/ 2) - 1.5rem)}}@media (hover:none){.swiffy-slider.slider-nav-touch .slider-nav{visibility:visible}.swiffy-slider:not(.slider-nav-touch).slider-nav-outside .slider-container,.swiffy-slider:not(.slider-nav-touch).slider-nav-outside-expand .slider-container{margin:0 0}.slider-item-nosnap-touch{--swiffy-slider-snap-align:unset}}
8
+ /*# sourceMappingURL=swiffy-slider.min.css.map */
assets/vendor/swiffy-slider/swiffy-slider.min.css.map ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": 3,
3
+ "sources": [
4
+ "swiffy-slider.css"
5
+ ],
6
+ "names": [],
7
+ "mappings": "AAAA,eACI,SAAU,SACV,QAAS,MACT,MAAO,KACP,2BAA4B,OAC5B,2BAA4B,KAC5B,yBAA0B,KAC1B,4BAA6B,KAC7B,2BAA4B,CAAC,CAAC,EAC9B,2BAA4B,EAC5B,0BAA2B,KAC3B,yBAA0B,KAC1B,yBAA0B,EAC1B,8BAA+B,IAC/B,6BAA8B,EAC9B,iCAAkC,OAClC,uCAAwC,OACxC,mCAAoC,KACpC,gCAAiC,GACjC,iCAAkC,YAGtC,eACA,sBACA,uBACI,WAAY,WAGhB,mCACI,OAAQ,kCAGZ,yCACI,WAAY,+CAGhB,yCACI,WAAY,eACZ,cAAe,KAGnB,+CACI,WAAY,eAGhB,kBACI,oCAAqC,4EACrC,2BAA4B,6HAC5B,WAAY,KACZ,2BAA4B,MAC5B,qBAAsB,EAAE,UACpB,iBAAkB,EAAE,UACxB,gBAAiB,OACjB,QAAS,KACT,YAAa,OACb,OAAQ,KACR,KAAM,IAAK,CAAE,UAAU,oBACvB,KAAM,IAAK,CAAE,UAAU,YACvB,eAAgB,KAChB,kBAAmB,gCACnB,eAAgB,OAChB,SAAU,8BACV,WAAY,KACZ,OAAQ,EACR,QAAS,EACT,gBAAiB,KACjB,gBAAiB,eAAmB,+CACpC,gBAAiB,YAGrB,oBAEI,kBAAmB,gCACnB,SAAU,SACV,MAAO,KACP,OAAQ,KAGZ,wCACI,gBAAiB,MACjB,iBAAkB,QAClB,oBAAqB,IAAI,IACzB,QAAS,KACT,gBAAiB,OACjB,YAAa,OAGjB,gEACI,WAAY,MAGhB,yCACI,SAAU,SACV,IAAK,EACL,KAAM,EACN,MAAO,KACP,OAAQ,KACR,cAAe,MACZ,WAAY,MAGnB,iDACI,cAAe,QACZ,WAAY,QAGnB,6CACI,QAAS,MACT,YAAa,+CACb,QAAS,GAGb,wBACI,2BAA4B,EAAE,CAAC,EAGnC,wBACI,2BAA4B,EAAE,CAAC,EAGnC,wBACI,2BAA4B,EAAE,CAAC,EAGnC,uBACI,2BAA4B,CAAC,CAAC,EAGlC,uBACI,2BAA4B,CAAC,CAAC,EAGlC,uBACI,2BAA4B,CAAC,CAAC,EAGlC,uBACI,2BAA4B,CAAC,CAAC,EAGlC,sBACI,6BAA8B,OAGlC,wCACI,gBAAiB,KAGrB,sCACI,gBAAiB,KAGrB,mBACI,SAAU,SACV,MAAO,KACP,OAAQ,EACR,KAAM,KACN,QAAS,KACT,gBAAiB,OACjB,QAAS,EACT,cAAe,KACf,WAAY,KAGhB,yCACI,cAAe,+CAGnB,2BACI,QAAS,EAGb,qDACI,cAAe,4CAGnB,yCACI,eAAgB,4CAIpB,4DADA,2DAEI,cAAe,EAGnB,qBACI,WAAY,YACZ,KAAM,EAAE,EAAE,KACV,MAAO,KACP,OAAQ,MACR,QAAS,EACT,OAAQ,MAAM,MAAM,YACpB,OAAQ,QACR,iBAAkB,KAClB,gBAAiB,YACjB,QAAS,GACT,WAAY,QAAQ,IAAI,KAI5B,+CADA,8CAEI,MAAO,MACP,OAAQ,MACR,OAAQ,MAAM,MAAM,YAIxB,8CADA,6CAEI,MAAO,MACP,OAAQ,MACR,OAAQ,MAAM,MAAM,YACpB,cAAe,IAInB,wDADA,uDAEI,OAAQ,OAAO,MAAM,YACrB,QAAS,OAGb,YACI,SAAU,SACV,IAAK,EACL,KAAM,EACN,OAAQ,EACR,OAAQ,EACR,iBAAkB,YAClB,OAAQ,QACR,QAAS,EACT,WAAY,OACZ,QAAS,GACT,WAAY,WAAW,GAAI,CAAE,QAAQ,IAAK,OAC1C,cAAe,kCACf,QAAS,KACT,YAAa,OACb,QAAS,EAAE,MACX,eAAgB,yCACR,OAAQ,yCAChB,UAAW,qCAGf,oBACI,SAAU,SACV,QAAS,GACT,QAAS,MACT,MAAO,KACP,OAAQ,KAGZ,mBACI,QAAS,GACT,aAAc,sQACN,KAAM,sQACd,kBAAmB,MACX,UAAW,MACnB,iBAAkB,+BAClB,kBAAmB,YACnB,MAAO,KACP,OAAQ,KAGZ,qCACI,aAAc,2RACN,KAAM,2RAGlB,uCACI,aAAc,uQACN,KAAM,uQAGlB,qCACI,aAAc,gQACN,KAAM,gQAGlB,yCACI,aAAc,4OACN,KAAM,4OAGlB,iCACI,WAAY,QAGhB,+FACI,WAAY,OAGhB,wFACI,WAAY,OAGhB,sCACI,OAAQ,EAAE,sCAGd,gCACI,QAAS,EAGb,iCACI,QAAS,EAGb,+BACI,QAAS,EAGb,sCACA,uCACI,iBAAkB,+BAGtB,qCACA,sCACI,iBAAkB,8BAClB,MAAO,KACP,OAAQ,KACR,OAAQ,MAGZ,sCACI,cAAe,IAGnB,qCACI,aAAc,iSACN,KAAM,iSAGlB,oCACI,iBAAkB,8BAGtB,sDACA,uDACI,iBAAkB,8BAGtB,qDACA,sDACI,iBAAkB,+BAGtB,eACI,yBAA0B,IAC1B,iCAAkC,OAGtC,mCACI,UAAW,eAGf,4BACI,MAAO,EACP,KAAM,MAGV,gCACI,WAAY,QAGhB,6BACI,QAAS,GAIb,6CADA,4CAEI,eAAgB,UACR,OAAQ,UAGpB,uBACI,2BAA4B,MAGhC,oBACI,2BAA4B,MAGhC,mBACI,yBAA0B,KAG9B,oBACI,4BAA6B,KAGjC,0CACI,4BAA6B,KAGjC,mBACI,2BAA4B,EAGhC,mBACI,2BAA4B,EAGhC,mBACI,2BAA4B,EAGhC,mBACI,2BAA4B,EAGhC,mBACI,2BAA4B,EAGhC,wCACI,OAAQ,aACR,OAAQ,KAGZ,iDACI,qBAAsB,MAClB,iBAAkB,MACtB,gBAAiB,MACjB,oBAAqB,KAClB,iBAAkB,KACjB,gBAAiB,KACb,YAAa,KAGzB,2CACI,WAAY,OAGhB,qBACI,+CACI,QAAS,GACT,SAAU,SACV,MAAO,KACP,OAAQ,MAIhB,8CACI,gDACI,mCAAoC,KAExC,gDACI,mCAAoC,MAExC,4CACI,WAAY,QAAQ,wCAAwC,qCAAqC,CAAE,UAAU,wCAAwC,sCACrJ,iBAAkB,qCAEtB,yDACI,WAAY,QAAQ,wCAAwC,qCAAqC,CAAE,UAAU,wCAAwC,sCACrJ,iBAAkB,qCAEtB,wEACI,QAAS,GAEb,uEACI,UAAW,UAEf,wEACI,QAAS,GACT,UAAW,UAEf,yEACI,UAAW,WAEf,uEACI,SAAU,OAEd,yEACI,UAAW,WAEf,sEACI,UAAW,eAEf,yEACI,UAAW,gBAAgB,WAE/B,qEACI,WAAY,OAEhB,yDACI,QAAS,EACT,UAAW,MAInB,yBAGI,mEADA,mEADA,mEAGI,kBAAmB,MAIvB,0EADA,0EADA,0EAGI,QAAS,IACT,QAAS,MACT,SAAU,SACV,KAAM,2CACN,IAAK,EAEL,MAAO,IACP,OAAQ,IACR,kBAAmB,gCAEvB,uCACI,YAAa,MAEjB,uDACI,aAAc,MAElB,qDACI,YAAa,QAEjB,qEACI,aAAc,QAElB,wCACI,QAAS,MAIjB,yBACI,eACI,6BAA8B,KAC9B,4BAA6B,KAC7B,2BAA4B,EAC5B,yBAA0B,KAE9B,qCACI,2BAA4B,EAEhC,oBACI,4BAA6B,KAEjC,0CACI,4BAA6B,KAEjC,qCACI,kBAAmB,iDAEvB,wDACI,kBAAmB,yDAEvB,0DACI,kBAAmB,MAEvB,iEACI,QAAS,IACT,QAAS,MACT,SAAU,SACV,KAAM,2CACN,IAAK,EAEL,MAAO,IACP,OAAQ,IACR,kBAAmB,OAGvB,mBADA,oBAEI,MAAO,KACP,OAAQ,KACR,QAAS,MAEb,qCACA,sCACI,MAAO,QACP,OAAQ,QACR,OAAQ,QAGZ,sCADA,6CAEI,OAAQ,EAAE,KAEd,6CACI,OAAQ,EAAE,sCAEd,uCACI,QAAS,EAKb,8CADA,6CADA,+CADA,8CAII,MAAO,MACP,OAAQ,MAEZ,mBACI,cAAe,MACf,QAAS,KAEb,yCACI,cAAe,EAEnB,qBACI,MAAO,KACP,OAAQ,QACR,aAAc,OAElB,yCACA,wCACI,QAAS,MAIjB,yBACI,qCACI,kBAAmB,+CAEvB,wDACI,kBAAmB,yDAI3B,oBACI,4CACI,WAAY,QAGhB,2EADA,kFAEI,OAAQ,EAAE,EAEd,0BACI,2BAA4B"
8
+ }
assets/vendor/swiffy-slider/swiffy-slider.min.js ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * swiffy-slider version: "1.6.0",
3
+ * https://github.com/dynamicweb/swiffy-slide
4
+ * Licensed MIT
5
+ * Copyright (c) 2021 Dynamicweb Software A/S
6
+ */
7
+ const swiffyslider={version:"1.6.0",init(e=document.body){e.querySelectorAll(".swiffy-slider").forEach(e=>this.initSlider(e))},initSlider(e){if(e.querySelectorAll(".slider-nav").forEach(t=>t.addEventListener("click",()=>this.slide(e,t.classList.contains("slider-nav-next")),{passive:!0})),e.querySelectorAll(".slider-indicators").forEach(t=>{t.addEventListener("click",()=>this.slideToByIndicator()),this.onSlideEnd(e,()=>this.handleIndicators(e),60)}),e.classList.contains("slider-nav-autoplay")){const t=e.getAttribute("data-slider-nav-autoplay-interval")?e.getAttribute("data-slider-nav-autoplay-interval"):2500;this.autoPlay(e,t,e.classList.contains("slider-nav-autopause"))}if(["slider-nav-autohide","slider-nav-animation"].some(t=>e.classList.contains(t))){const t=e.getAttribute("data-slider-nav-animation-threshold")?e.getAttribute("data-slider-nav-animation-threshold"):.3;this.setVisibleSlides(e,t)}},setVisibleSlides(e,t=.3){let i=new IntersectionObserver(t=>{t.forEach(e=>{e.isIntersecting?e.target.classList.add("slide-visible"):e.target.classList.remove("slide-visible")}),e.querySelector(".slider-container>*:first-child").classList.contains("slide-visible")?e.classList.add("slider-item-first-visible"):e.classList.remove("slider-item-first-visible"),e.querySelector(".slider-container>*:last-child").classList.contains("slide-visible")?e.classList.add("slider-item-last-visible"):e.classList.remove("slider-item-last-visible")},{root:e.querySelector(".slider-container"),threshold:t});e.querySelectorAll(".slider-container>*").forEach(e=>i.observe(e))},slide(e,t=!0){const i=e.querySelector(".slider-container"),s=e.classList.contains("slider-nav-page"),l=e.classList.contains("slider-nav-noloop"),r=e.classList.contains("slider-nav-nodelay"),a=i.children,o=parseInt(window.getComputedStyle(i).columnGap),n=a[0].offsetWidth+o;let d=t?i.scrollLeft+n:i.scrollLeft-n;s&&(d=t?i.scrollLeft+i.offsetWidth:i.scrollLeft-i.offsetWidth),i.scrollLeft<1&&!t&&!l&&(d=i.scrollWidth-i.offsetWidth),i.scrollLeft>=i.scrollWidth-i.offsetWidth&&t&&!l&&(d=0),i.scroll({left:d,behavior:r?"auto":"smooth"})},slideToByIndicator(){const e=window.event.target,t=Array.from(e.parentElement.children).indexOf(e),i=e.parentElement.children.length,s=e.closest(".swiffy-slider"),l=s.querySelector(".slider-container").children.length/i*t;this.slideTo(s,l)},slideTo(e,t){const i=e.querySelector(".slider-container"),s=parseInt(window.getComputedStyle(i).columnGap),l=i.children[0].offsetWidth+s,r=e.classList.contains("slider-nav-nodelay");i.scroll({left:l*t,behavior:r?"auto":"smooth"})},onSlideEnd(e,t,i=125){let s;e.querySelector(".slider-container").addEventListener("scroll",()=>{window.clearTimeout(s),s=setTimeout(t,i)},{capture:!1,passive:!0})},autoPlay(e,t,i){t=t<750?750:t;let s=setInterval(()=>this.slide(e),t);const l=()=>this.autoPlay(e,t,i);return i&&(["mouseover","touchstart"].forEach(t=>{e.addEventListener(t,()=>{window.clearTimeout(s)},{once:!0,passive:!0})}),["mouseout","touchend"].forEach(t=>{e.addEventListener(t,()=>{l()},{once:!0,passive:!0})})),s},handleIndicators(e){if(!e)return;const t=e.querySelector(".slider-container"),i=t.scrollWidth-t.offsetWidth,s=t.scrollLeft/i;e.querySelectorAll(".slider-indicators").forEach(e=>{let t=e.children,i=Math.abs(Math.round((t.length-1)*s));for(let e of t)e.classList.remove("active");t[i].classList.add("active")})}};window.swiffyslider=swiffyslider,document.currentScript.hasAttribute("data-noinit")||(document.currentScript.hasAttribute("defer")?swiffyslider.init():document.onreadystatechange=()=>{"interactive"===document.readyState&&swiffyslider.init()});
8
+ //# sourceMappingURL=swiffy-slider.min.js.map
assets/vendor/swiffy-slider/swiffy-slider.min.js.map ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": 3,
3
+ "sources": [
4
+ "swiffy-slider.js"
5
+ ],
6
+ "names": [
7
+ "swiffyslider",
8
+ "version",
9
+ "[object Object]",
10
+ "rootElement",
11
+ "document",
12
+ "body",
13
+ "sliderElement",
14
+ "querySelectorAll",
15
+ "this",
16
+ "initSlider",
17
+ "navElement",
18
+ "next",
19
+ "classList",
20
+ "contains",
21
+ "addEventListener",
22
+ "slide",
23
+ "passive",
24
+ "indicatorElement",
25
+ "slideToByIndicator",
26
+ "onSlideEnd",
27
+ "handleIndicators",
28
+ "timeout",
29
+ "getAttribute",
30
+ "autoPlay",
31
+ "some",
32
+ "className",
33
+ "threshold",
34
+ "setVisibleSlides",
35
+ "observer",
36
+ "IntersectionObserver",
37
+ "slides",
38
+ "forEach",
39
+ "isIntersecting",
40
+ "target",
41
+ "add",
42
+ "remove",
43
+ "querySelector",
44
+ "root",
45
+ "observe",
46
+ "container",
47
+ "fullpage",
48
+ "noloop",
49
+ "nodelay",
50
+ "children",
51
+ "gapWidth",
52
+ "parseInt",
53
+ "window",
54
+ "getComputedStyle",
55
+ "columnGap",
56
+ "scrollStep",
57
+ "offsetWidth",
58
+ "scrollLeftPosition",
59
+ "scrollLeft",
60
+ "scrollWidth",
61
+ "scroll",
62
+ "left",
63
+ "behavior",
64
+ "indicator",
65
+ "event",
66
+ "indicatorIndex",
67
+ "Array",
68
+ "from",
69
+ "parentElement",
70
+ "indexOf",
71
+ "indicatorCount",
72
+ "length",
73
+ "closest",
74
+ "relativeSlideIndex",
75
+ "slideTo",
76
+ "slideIndex",
77
+ "delegate",
78
+ "isScrolling",
79
+ "clearTimeout",
80
+ "setTimeout",
81
+ "capture",
82
+ "autopause",
83
+ "autoplayTimer",
84
+ "setInterval",
85
+ "autoplayer",
86
+ "once",
87
+ "slidingAreaWidth",
88
+ "percentSlide",
89
+ "scrollIndicatorContainers",
90
+ "scrollIndicators",
91
+ "activeIndicator",
92
+ "Math",
93
+ "abs",
94
+ "round",
95
+ "element",
96
+ "currentScript",
97
+ "hasAttribute",
98
+ "init",
99
+ "onreadystatechange",
100
+ "readyState"
101
+ ],
102
+ "mappings": "AAAA,MAAMA,aACK,CACHC,QAAS,QACTC,KAAKC,EAAcC,SAASC,MACxB,IAAK,IAAIC,KAAiBH,EAAYI,iBAAiB,kBACnDC,KAAKC,WAAWH,IAIxBJ,WAAWI,GACP,IAAK,IAAII,KAAcJ,EAAcC,iBAAiB,eAAgB,CAClE,IAAII,EAAOD,EAAWE,UAAUC,SAAS,mBACzCH,EAAWI,iBAAiB,QAAS,IAAMN,KAAKO,MAAMT,EAAeK,GAAO,CAAEK,SAAS,IAE3F,IAAK,IAAIC,KAAoBX,EAAcC,iBAAiB,sBACxDU,EAAiBH,iBAAiB,QAAS,IAAMN,KAAKU,sBACtDV,KAAKW,WAAWb,EAAe,IAAME,KAAKY,iBAAiBd,GAAgB,IAE/E,GAAIA,EAAcM,UAAUC,SAAS,uBAAwB,CACzD,MAAMQ,EAAUf,EAAcgB,aAAa,qCAAuChB,EAAcgB,aAAa,qCAAuC,KACpJd,KAAKe,SAASjB,EAAee,EAASf,EAAcM,UAAUC,SAAS,yBAE3E,GAAI,CAAC,sBAAuB,wBAAwBW,KAAKC,GAAanB,EAAcM,UAAUC,SAASY,IAAa,CAChH,MAAMC,EAAYpB,EAAcgB,aAAa,uCAAyChB,EAAcgB,aAAa,uCAAyC,GAC1Jd,KAAKmB,iBAAiBrB,EAAeoB,KAI7CxB,iBAAiBI,EAAeoB,EAAY,IACxC,IAAIE,EAAW,IAAIC,qBAAqBC,IACpCA,EAAOC,QAAQhB,IACXA,EAAMiB,eAAiBjB,EAAMkB,OAAOrB,UAAUsB,IAAI,iBAAmBnB,EAAMkB,OAAOrB,UAAUuB,OAAO,mBAEvG7B,EAAc8B,cAAc,mCAAmCxB,UAAUC,SAAS,iBAAmBP,EAAcM,UAAUsB,IAAI,6BAA+B5B,EAAcM,UAAUuB,OAAO,6BAC/L7B,EAAc8B,cAAc,kCAAkCxB,UAAUC,SAAS,iBAAmBP,EAAcM,UAAUsB,IAAI,4BAA8B5B,EAAcM,UAAUuB,OAAO,6BAC9L,CACCE,KAAM/B,EAAc8B,cAAc,qBAClCV,UAAWA,IAEf,IAAK,IAAIX,KAAST,EAAcC,iBAAiB,uBAC7CqB,EAASU,QAAQvB,IAGzBb,MAAMI,EAAeK,GAAO,GACxB,MAAM4B,EAAYjC,EAAc8B,cAAc,qBACxCI,EAAWlC,EAAcM,UAAUC,SAAS,mBAC5C4B,EAASnC,EAAcM,UAAUC,SAAS,qBAC1C6B,EAAUpC,EAAcM,UAAUC,SAAS,sBAC3CiB,EAASS,EAAUI,SACnBC,EAAWC,SAASC,OAAOC,iBAAiBR,GAAWS,WACvDC,EAAanB,EAAO,GAAGoB,YAAcN,EAC3C,IAAIO,EAAqBxC,EACrB4B,EAAUa,WAAaH,EACvBV,EAAUa,WAAaH,EACvBT,IACAW,EAAqBxC,EACjB4B,EAAUa,WAAab,EAAUW,YACjCX,EAAUa,WAAab,EAAUW,aAErCX,EAAUa,WAAa,IAAMzC,IAAS8B,IACtCU,EAAsBZ,EAAUc,YAAcd,EAAUW,aAExDX,EAAUa,YAAeb,EAAUc,YAAcd,EAAUW,aAAgBvC,IAAS8B,IACpFU,EAAqB,GAEzBZ,EAAUe,OAAO,CACbC,KAAMJ,EACNK,SAAUd,EAAU,OAAS,YAIrCxC,qBACI,MAAMuD,EAAYX,OAAOY,MAAMzB,OACzB0B,EAAiBC,MAAMC,KAAKJ,EAAUK,cAAcnB,UAAUoB,QAAQN,GACtEO,EAAiBP,EAAUK,cAAcnB,SAASsB,OAClD3D,EAAgBmD,EAAUS,QAAQ,kBAElCC,EADa7D,EAAc8B,cAAc,qBAAqBO,SAASsB,OACpCD,EAAkBL,EAC3DnD,KAAK4D,QAAQ9D,EAAe6D,IAGhCjE,QAAQI,EAAe+D,GACnB,MAAM9B,EAAYjC,EAAc8B,cAAc,qBACxCQ,EAAWC,SAASC,OAAOC,iBAAiBR,GAAWS,WACvDC,EAAaV,EAAUI,SAAS,GAAGO,YAAcN,EACjDF,EAAUpC,EAAcM,UAAUC,SAAS,sBACjD0B,EAAUe,OAAO,CACbC,KAAON,EAAaoB,EACpBb,SAAUd,EAAU,OAAS,YAIrCxC,WAAWI,EAAegE,EAAUjD,EAAU,KAC1C,IAAIkD,EACJjE,EAAc8B,cAAc,qBAAqBtB,iBAAiB,UAAU,WACxEgC,OAAO0B,aAAaD,GACpBA,EAAcE,WAAWH,EAAUjD,KACpC,CAAEqD,SAAS,EAAO1D,SAAS,KAGlCd,SAASI,EAAee,EAASsD,GAC7BtD,EAAUA,EAAU,IAAM,IAAMA,EAChC,IAAIuD,EAAgBC,YAAY,IAAMrE,KAAKO,MAAMT,GAAgBe,GACjE,MAAMyD,EAAa,IAAMtE,KAAKe,SAASjB,EAAee,EAASsD,GAa/D,OAZIA,IACA,CAAC,YAAa,cAAc5C,SAAQ,SAAS2B,GACzCpD,EAAcQ,iBAAiB4C,GAAO,WAClCZ,OAAO0B,aAAaI,KACrB,CAAEG,MAAM,EAAM/D,SAAS,OAE9B,CAAC,WAAY,YAAYe,SAAQ,SAAS2B,GACtCpD,EAAcQ,iBAAiB4C,GAAO,WAClCoB,MACD,CAAEC,MAAM,EAAM/D,SAAS,QAG3B4D,GAGX1E,iBAAiBI,GACb,IAAKA,EAAe,OACpB,MAAMiC,EAAYjC,EAAc8B,cAAc,qBACxC4C,EAAmBzC,EAAUc,YAAcd,EAAUW,YACrD+B,EAAgB1C,EAAUa,WAAa4B,EAC7C,IAAK,IAAIE,KAA6B5E,EAAcC,iBAAiB,sBAAuB,CACxF,IAAI4E,EAAmBD,EAA0BvC,SAC7CyC,EAAkBC,KAAKC,IAAID,KAAKE,OAAOJ,EAAiBlB,OAAS,GAAKgB,IAC1E,IAAK,IAAIO,KAAWL,EAChBK,EAAQ5E,UAAUuB,OAAO,UAC7BgD,EAAiBC,GAAiBxE,UAAUsB,IAAI,aAMhEY,OAAO9C,aAAeA,aACjBI,SAASqF,cAAcC,aAAa,iBACjCtF,SAASqF,cAAcC,aAAa,SACpC1F,aAAa2F,OAEbvF,SAASwF,mBAAqB,KACE,gBAAxBxF,SAASyF,YACT7F,aAAa2F",
103
+ "file": "swiffy-slider.js"
104
+ }
changelog.txt CHANGED
@@ -1,3 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
  v3.5.29 (15 Sep, 2022) =
2
 
3
  * Enhancement - Short-code encryption updated for registration page
1
+ = v3.6.0 (23 Nov, 2022) =
2
+
3
+ * Enhancement - Admin dashboard news and update meta-box added
4
+ * Enhancement - Upgrade prompts design
5
+
6
+ * Fix - Email style handled
7
+ * Fix - text-area type selection(Normal, Rich text-area, Teeny Rich text-area) bug in field options
8
+ * Fix - Frontend form validation
9
+ * Fix - Default value not saving for radio, dropdown, checkbox
10
+
11
+ * Update - sweetalert2 version
12
+
13
  v3.5.29 (15 Sep, 2022) =
14
 
15
  * Enhancement - Short-code encryption updated for registration page
class/admin-asset-loader.php CHANGED
@@ -21,7 +21,7 @@ class WPUF_Admin_Assets {
21
 
22
  wp_register_script( 'wpuf-vue', WPUF_ASSET_URI . '/vendor/vue/vue' . $prefix . '.js', [], WPUF_VERSION, true );
23
  wp_register_script( 'wpuf-vuex', WPUF_ASSET_URI . '/vendor/vuex/vuex' . $prefix . '.js', [ 'wpuf-vue' ], WPUF_VERSION, true );
24
- wp_register_script( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.js', [], WPUF_VERSION, true );
25
  wp_register_script( 'wpuf-jquery-scrollTo', WPUF_ASSET_URI . '/vendor/jquery.scrollTo/jquery.scrollTo' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
26
  wp_register_script( 'wpuf-selectize', WPUF_ASSET_URI . '/vendor/selectize/js/standalone/selectize' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
27
  wp_register_script( 'wpuf-toastr', WPUF_ASSET_URI . '/vendor/toastr/toastr' . $prefix . '.js', [], WPUF_VERSION, true );
@@ -78,7 +78,7 @@ class WPUF_Admin_Assets {
78
  public function register_admin_styles() {
79
  wp_register_style( 'wpuf-css', WPUF_ASSET_URI . '/css/frontend-forms.css' );
80
  wp_register_style( 'wpuf-font-awesome', WPUF_ASSET_URI . '/vendor/font-awesome/css/font-awesome.min.css', [], WPUF_VERSION );
81
- wp_register_style( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.css', [], WPUF_VERSION );
82
  wp_register_style( 'wpuf-selectize', WPUF_ASSET_URI . '/vendor/selectize/css/selectize.default.css', [], WPUF_VERSION );
83
  wp_register_style( 'wpuf-toastr', WPUF_ASSET_URI . '/vendor/toastr/toastr.min.css', [], WPUF_VERSION );
84
  wp_register_style( 'wpuf-tooltip', WPUF_ASSET_URI . '/vendor/tooltip/tooltip.css', [], WPUF_VERSION );
21
 
22
  wp_register_script( 'wpuf-vue', WPUF_ASSET_URI . '/vendor/vue/vue' . $prefix . '.js', [], WPUF_VERSION, true );
23
  wp_register_script( 'wpuf-vuex', WPUF_ASSET_URI . '/vendor/vuex/vuex' . $prefix . '.js', [ 'wpuf-vue' ], WPUF_VERSION, true );
24
+ wp_register_script( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.js', [], '11.4.30', true );
25
  wp_register_script( 'wpuf-jquery-scrollTo', WPUF_ASSET_URI . '/vendor/jquery.scrollTo/jquery.scrollTo' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
26
  wp_register_script( 'wpuf-selectize', WPUF_ASSET_URI . '/vendor/selectize/js/standalone/selectize' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
27
  wp_register_script( 'wpuf-toastr', WPUF_ASSET_URI . '/vendor/toastr/toastr' . $prefix . '.js', [], WPUF_VERSION, true );
78
  public function register_admin_styles() {
79
  wp_register_style( 'wpuf-css', WPUF_ASSET_URI . '/css/frontend-forms.css' );
80
  wp_register_style( 'wpuf-font-awesome', WPUF_ASSET_URI . '/vendor/font-awesome/css/font-awesome.min.css', [], WPUF_VERSION );
81
+ wp_register_style( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.css', [], '11.4.30' );
82
  wp_register_style( 'wpuf-selectize', WPUF_ASSET_URI . '/vendor/selectize/css/selectize.default.css', [], WPUF_VERSION );
83
  wp_register_style( 'wpuf-toastr', WPUF_ASSET_URI . '/vendor/toastr/toastr.min.css', [], WPUF_VERSION );
84
  wp_register_style( 'wpuf-tooltip', WPUF_ASSET_URI . '/vendor/tooltip/tooltip.css', [], WPUF_VERSION );
class/asset-loader.php CHANGED
@@ -71,7 +71,7 @@ class WPUF_Assets {
71
 
72
  wp_register_script( 'wpuf-vue', WPUF_ASSET_URI . '/vendor/vue/vue' . $prefix . '.js', [], WPUF_VERSION, true );
73
  wp_register_script( 'wpuf-vuex', WPUF_ASSET_URI . '/vendor/vuex/vuex' . $prefix . '.js', [ 'wpuf-vue' ], WPUF_VERSION, true );
74
- wp_register_script( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.js', [], WPUF_VERSION, true );
75
  wp_register_script( 'wpuf-jquery-scrollTo', WPUF_ASSET_URI . '/vendor/jquery.scrollTo/jquery.scrollTo' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
76
  wp_register_script( 'wpuf-selectize', WPUF_ASSET_URI . '/vendor/selectize/js/standalone/selectize' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
77
  wp_register_script( 'wpuf-toastr', WPUF_ASSET_URI . '/vendor/toastr/toastr' . $prefix . '.js', [], WPUF_VERSION, true );
@@ -87,5 +87,6 @@ class WPUF_Assets {
87
  public function register_styles() {
88
  wp_register_style( 'wpuf-css', WPUF_ASSET_URI . '/css/frontend-forms.css' );
89
  wp_register_style( 'jquery-ui', WPUF_ASSET_URI . '/css/jquery-ui-1.9.1.custom.css' );
 
90
  }
91
  }
71
 
72
  wp_register_script( 'wpuf-vue', WPUF_ASSET_URI . '/vendor/vue/vue' . $prefix . '.js', [], WPUF_VERSION, true );
73
  wp_register_script( 'wpuf-vuex', WPUF_ASSET_URI . '/vendor/vuex/vuex' . $prefix . '.js', [ 'wpuf-vue' ], WPUF_VERSION, true );
74
+ wp_register_script( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.js', [], '11.4.30', true );
75
  wp_register_script( 'wpuf-jquery-scrollTo', WPUF_ASSET_URI . '/vendor/jquery.scrollTo/jquery.scrollTo' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
76
  wp_register_script( 'wpuf-selectize', WPUF_ASSET_URI . '/vendor/selectize/js/standalone/selectize' . $prefix . '.js', [ 'jquery' ], WPUF_VERSION, true );
77
  wp_register_script( 'wpuf-toastr', WPUF_ASSET_URI . '/vendor/toastr/toastr' . $prefix . '.js', [], WPUF_VERSION, true );
87
  public function register_styles() {
88
  wp_register_style( 'wpuf-css', WPUF_ASSET_URI . '/css/frontend-forms.css' );
89
  wp_register_style( 'jquery-ui', WPUF_ASSET_URI . '/css/jquery-ui-1.9.1.custom.css' );
90
+ wp_register_style( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.css', [], '11.4.30' );
91
  }
92
  }
class/post-form-templates/post.php CHANGED
@@ -51,23 +51,24 @@ class WPUF_Post_Form_Template_Post extends WPUF_Post_Form_Template {
51
  'wpuf_visibility' => $this->get_default_visibility_prop(),
52
  ],
53
  [
54
- 'input_type' => 'textarea',
55
- 'template' => 'post_content',
56
- 'required' => 'yes',
57
- 'label' => __( 'Post description', 'wp-user-frontend' ),
58
- 'name' => 'post_content',
59
- 'is_meta' => 'no',
60
- 'help' => __( 'Write the full description of your Post', 'wp-user-frontend' ),
61
- 'css' => '',
62
- 'rows' => '5',
63
- 'cols' => '25',
64
- 'placeholder' => '',
65
- 'default' => '',
66
- 'rich' => 'yes',
67
- 'insert_image' => 'yes',
68
- 'wpuf_cond' => $this->conditionals,
69
- 'wpuf_visibility' => $this->get_default_visibility_prop(),
70
- 'restriction_type' => 'character'
 
71
  ],
72
  [
73
  'input_type' => 'image_upload',
@@ -85,22 +86,24 @@ class WPUF_Post_Form_Template_Post extends WPUF_Post_Form_Template {
85
  'wpuf_visibility' => $this->get_default_visibility_prop(),
86
  ],
87
  [
88
- 'input_type' => 'textarea',
89
- 'template' => 'post_excerpt',
90
- 'required' => 'no',
91
- 'label' => __( 'Excerpt', 'wp-user-frontend' ),
92
- 'name' => 'post_excerpt',
93
- 'is_meta' => 'no',
94
- 'help' => __( 'Provide a short description of this post (optional)', 'wp-user-frontend' ),
95
- 'css' => '',
96
- 'rows' => '5',
97
- 'cols' => '25',
98
- 'placeholder' => '',
99
- 'default' => '',
100
- 'rich' => 'no',
101
- 'wpuf_cond' => $this->conditionals,
102
- 'wpuf_visibility' => $this->get_default_visibility_prop(),
103
- 'restriction_type' => 'character'
 
 
104
  ],
105
  [
106
  'input_type' => 'text',
51
  'wpuf_visibility' => $this->get_default_visibility_prop(),
52
  ],
53
  [
54
+ 'input_type' => 'textarea',
55
+ 'template' => 'post_content',
56
+ 'required' => 'yes',
57
+ 'label' => __( 'Post description', 'wp-user-frontend' ),
58
+ 'name' => 'post_content',
59
+ 'is_meta' => 'no',
60
+ 'help' => __( 'Write the full description of your Post', 'wp-user-frontend' ),
61
+ 'css' => '',
62
+ 'rows' => '5',
63
+ 'cols' => '25',
64
+ 'placeholder' => '',
65
+ 'default' => '',
66
+ 'rich' => 'yes',
67
+ 'insert_image' => 'yes',
68
+ 'wpuf_cond' => $this->conditionals,
69
+ 'wpuf_visibility' => $this->get_default_visibility_prop(),
70
+ 'restriction_type' => 'character',
71
+ 'text_editor_control' => [],
72
  ],
73
  [
74
  'input_type' => 'image_upload',
86
  'wpuf_visibility' => $this->get_default_visibility_prop(),
87
  ],
88
  [
89
+ 'input_type' => 'textarea',
90
+ 'template' => 'post_excerpt',
91
+ 'required' => 'no',
92
+ 'label' => __( 'Excerpt', 'wp-user-frontend' ),
93
+ 'name' => 'post_excerpt',
94
+ 'is_meta' => 'no',
95
+ 'help' => __( 'Provide a short description of this post (optional)',
96
+ 'wp-user-frontend' ),
97
+ 'css' => '',
98
+ 'rows' => '5',
99
+ 'cols' => '25',
100
+ 'placeholder' => '',
101
+ 'default' => '',
102
+ 'rich' => 'no',
103
+ 'wpuf_cond' => $this->conditionals,
104
+ 'wpuf_visibility' => $this->get_default_visibility_prop(),
105
+ 'restriction_type' => 'character',
106
+ 'text_editor_control' => [],
107
  ],
108
  [
109
  'input_type' => 'text',
includes/class-upgrades.php CHANGED
@@ -20,8 +20,21 @@ class WPUF_Upgrades {
20
  '2.8.2' => 'upgrades/upgrade-2.8.2.php',
21
  '2.8.5' => 'upgrades/upgrade-2.8.5.php',
22
  '2.9.2' => 'upgrades/upgrade-2.9.2.php',
 
23
  ];
24
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  /**
26
  * Get the plugin version
27
  *
@@ -56,6 +69,14 @@ class WPUF_Upgrades {
56
  * @return void
57
  */
58
  public function perform_updates() {
 
 
 
 
 
 
 
 
59
  $installed_version = $this->get_version();
60
  $path = trailingslashit( __DIR__ );
61
 
@@ -68,4 +89,33 @@ class WPUF_Upgrades {
68
 
69
  update_option( 'wpuf_version', WPUF_VERSION );
70
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  }
20
  '2.8.2' => 'upgrades/upgrade-2.8.2.php',
21
  '2.8.5' => 'upgrades/upgrade-2.8.5.php',
22
  '2.9.2' => 'upgrades/upgrade-2.9.2.php',
23
+ '3.6.0' => 'upgrades/upgrade-3.6.0.php',
24
  ];
25
 
26
+ /**
27
+ * The class constructor
28
+ *
29
+ * @since 3.6.0
30
+ *
31
+ * @return void
32
+ */
33
+ public function __construct() {
34
+ add_action( 'admin_notices', [ $this, 'show_upgrade_notice' ] );
35
+ add_action( 'admin_init', [ $this, 'perform_updates' ] );
36
+ }
37
+
38
  /**
39
  * Get the plugin version
40
  *
69
  * @return void
70
  */
71
  public function perform_updates() {
72
+ if ( empty( $_GET['wpuf_do_update'] ) ) {
73
+ return;
74
+ }
75
+
76
+ if ( ! sanitize_text_field( wp_unslash( $_GET['wpuf_do_update'] ) ) ) {
77
+ return;
78
+ }
79
+
80
  $installed_version = $this->get_version();
81
  $path = trailingslashit( __DIR__ );
82
 
89
 
90
  update_option( 'wpuf_version', WPUF_VERSION );
91
  }
92
+
93
+ /**
94
+ * Show upgrade notice.
95
+ *
96
+ * @since 3.6.0
97
+ *
98
+ * @return void
99
+ */
100
+ public function show_upgrade_notice() {
101
+ if ( ! current_user_can( 'update_plugins' ) || ! $this->needs_update() ) {
102
+ return;
103
+ }
104
+
105
+ if ( $this->needs_update() ) {
106
+ $url = ! empty( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';
107
+ ?>
108
+ <div id="message" class="updated">
109
+ <p><?php printf( '<strong>%s</strong>', esc_attr__( 'WPUF Data Update Required', 'wp-user-frontend' ) ); ?></p>
110
+ <p class="submit"><a href="<?php echo esc_url( add_query_arg( [ 'wpuf_do_update' => true ], $url ) ); ?>" class="wpuf-update-btn button-primary"><?php esc_attr_e( 'Run the updater', 'wp-user-frontend' ); ?></a></p>
111
+ </div>
112
+
113
+ <script type="text/javascript">
114
+ jQuery('.wpuf-update-btn').click('click', function() {
115
+ return confirm( '<?php esc_attr_e( 'It is strongly recommended that you backup your database before proceeding. Are you sure you wish to run the updater now?', 'wp-user-frontend' ); ?>' );
116
+ });
117
+ </script>
118
+ <?php
119
+ }
120
+ }
121
  }
includes/fields/class-abstract-fields.php CHANGED
@@ -712,7 +712,7 @@ abstract class WPUF_Field_Contract {
712
  */
713
  public function field_print_label( $field, $form_id = 0 ) {
714
  if ( is_admin() ) { ?>
715
- <tr> <th><strong> <?php echo wp_kses_post( $field['label'] . $this->required_mark( $field ) ); ?> </strong></th> <td>
716
  <?php } else { ?>
717
 
718
  <li <?php $this->print_list_attributes( $field ); ?>>
712
  */
713
  public function field_print_label( $field, $form_id = 0 ) {
714
  if ( is_admin() ) { ?>
715
+ <tr <?php $this->print_list_attributes( $field ); ?>> <th><strong> <?php echo wp_kses_post( $field['label'] . $this->required_mark( $field ) ); ?> </strong></th> <td>
716
  <?php } else { ?>
717
 
718
  <li <?php $this->print_list_attributes( $field ); ?>>
includes/fields/class-field-checkbox.php CHANGED
@@ -34,14 +34,21 @@ class WPUF_Form_Field_Checkbox extends WPUF_Field_Contract {
34
  }
35
  $this->field_print_label( $field_settings, $form_id ); ?>
36
 
37
- <div class="wpuf-fields" data-required="<?php echo esc_attr( $field_settings['required'] ); ?>" data-type="radio">
38
 
39
  <?php
40
  if ( $field_settings['options'] && count( $field_settings['options'] ) > 0 ) {
41
  foreach ( $field_settings['options'] as $value => $option ) {
42
  ?>
43
  <label <?php echo esc_attr( $field_settings['inline'] ) == 'yes' ? 'class="wpuf-checkbox-inline"' : 'class="wpuf-checkbox-block"'; ?>>
44
- <input type="checkbox" class="<?php echo 'wpuf_' . esc_attr( $field_settings['name'] ) . '_' . esc_attr( $form_id ); ?>" name="<?php echo esc_attr( $field_settings['name'] ); ?>[]" value="<?php echo esc_attr( $value ); ?>"<?php echo in_array( $value, $selected ) ? ' checked="checked"' : ''; ?> />
 
 
 
 
 
 
 
45
  <?php echo $option; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
46
  </label>
47
  <?php
34
  }
35
  $this->field_print_label( $field_settings, $form_id ); ?>
36
 
37
+ <div class="wpuf-fields">
38
 
39
  <?php
40
  if ( $field_settings['options'] && count( $field_settings['options'] ) > 0 ) {
41
  foreach ( $field_settings['options'] as $value => $option ) {
42
  ?>
43
  <label <?php echo esc_attr( $field_settings['inline'] ) == 'yes' ? 'class="wpuf-checkbox-inline"' : 'class="wpuf-checkbox-block"'; ?>>
44
+ <input
45
+ type="checkbox"
46
+ class="<?php echo esc_attr( sprintf( 'wpuf_%s_%d', $field_settings['name'], $form_id ) ); ?>"
47
+ name="<?php echo esc_attr( $field_settings['name'] ); ?>[]"
48
+ value="<?php echo esc_attr( $value ); ?>"<?php echo in_array( $value, $selected ) ? ' checked="checked"' : ''; ?>
49
+ data-required="<?php echo esc_attr( $field_settings['required'] ); ?>"
50
+ data-type="checkbox"
51
+ />
52
  <?php echo $option; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
53
  </label>
54
  <?php
includes/fields/class-field-post-content.php CHANGED
@@ -134,7 +134,7 @@ class WPUF_Form_Field_Post_Content extends WPUF_Field_Contract {
134
  * @return array
135
  */
136
  public function get_options_settings() {
137
- $default_options = $this->get_default_option_settings( false, [ 'dynamic' ] );
138
  $default_text_options = $this->get_default_textarea_option_settings();
139
 
140
  $settings = [
@@ -161,16 +161,17 @@ class WPUF_Form_Field_Post_Content extends WPUF_Field_Contract {
161
  $defaults = $this->default_attributes();
162
 
163
  $props = [
164
- 'input_type' => 'textarea',
165
- 'is_meta' => 'no',
166
- 'name' => 'post_content',
167
- 'rows' => 5,
168
- 'cols' => 25,
169
- 'rich' => 'yes',
170
- 'id' => 0,
171
- 'is_new' => true,
172
- 'restriction_type' => 'character',
173
- 'restriction_to' => 'max',
 
174
  ];
175
 
176
  return array_merge( $defaults, $props );
134
  * @return array
135
  */
136
  public function get_options_settings() {
137
+ $default_options = $this->get_default_option_settings( false );
138
  $default_text_options = $this->get_default_textarea_option_settings();
139
 
140
  $settings = [
161
  $defaults = $this->default_attributes();
162
 
163
  $props = [
164
+ 'input_type' => 'textarea',
165
+ 'is_meta' => 'no',
166
+ 'name' => 'post_content',
167
+ 'rows' => 5,
168
+ 'cols' => 25,
169
+ 'rich' => 'yes',
170
+ 'id' => 0,
171
+ 'is_new' => true,
172
+ 'restriction_type' => 'character',
173
+ 'restriction_to' => 'max',
174
+ 'text_editor_control' => [],
175
  ];
176
 
177
  return array_merge( $defaults, $props );
includes/fields/class-field-post-excerpt.php CHANGED
@@ -122,16 +122,17 @@ class WPUF_Form_Field_Post_Excerpt extends WPUF_Field_Contract {
122
  $defaults = $this->default_attributes();
123
 
124
  $props = [
125
- 'input_type' => 'textarea',
126
- 'is_meta' => 'no',
127
- 'name' => 'post_excerpt',
128
- 'rows' => 5,
129
- 'cols' => 25,
130
- 'rich' => 'no',
131
- 'id' => 0,
132
- 'is_new' => true,
133
- 'restriction_type' => 'character',
134
- 'restriction_to' => 'max',
 
135
  ];
136
 
137
  return array_merge( $defaults, $props );
122
  $defaults = $this->default_attributes();
123
 
124
  $props = [
125
+ 'input_type' => 'textarea',
126
+ 'is_meta' => 'no',
127
+ 'name' => 'post_excerpt',
128
+ 'rows' => 5,
129
+ 'cols' => 25,
130
+ 'rich' => 'no',
131
+ 'id' => 0,
132
+ 'is_new' => true,
133
+ 'restriction_type' => 'character',
134
+ 'restriction_to' => 'max',
135
+ 'text_editor_control' => [],
136
  ];
137
 
138
  return array_merge( $defaults, $props );
includes/fields/class-field-radio.php CHANGED
@@ -38,7 +38,7 @@ class WPUF_Form_Field_Radio extends WPUF_Form_Field_Checkbox {
38
 
39
  do_action( 'WPUF_radio_field_after_label', $field_settings ); ?>
40
 
41
- <div class="wpuf-fields" data-required="<?php echo esc_attr( $field_settings['required'] ); ?>" data-type="radio">
42
 
43
  <?php
44
  if ( $field_settings['options'] && count( $field_settings['options'] ) > 0 ) {
@@ -50,6 +50,8 @@ class WPUF_Form_Field_Radio extends WPUF_Form_Field_Checkbox {
50
  name="<?php echo esc_attr( $field_settings['name'] ); ?>"
51
  class="<?php echo esc_attr( 'wpuf_' . $field_settings['name'] . '_' . $form_id ); ?>"
52
  type="radio"
 
 
53
  value="<?php echo esc_attr( $value ); ?>"<?php checked( $selected, $value ); ?>
54
  ondblclick="WP_User_Frontend.doUncheckRadioBtn(this)"
55
  />
38
 
39
  do_action( 'WPUF_radio_field_after_label', $field_settings ); ?>
40
 
41
+ <div class="wpuf-fields">
42
 
43
  <?php
44
  if ( $field_settings['options'] && count( $field_settings['options'] ) > 0 ) {
50
  name="<?php echo esc_attr( $field_settings['name'] ); ?>"
51
  class="<?php echo esc_attr( 'wpuf_' . $field_settings['name'] . '_' . $form_id ); ?>"
52
  type="radio"
53
+ data-type="radio"
54
+ data-required="<?php echo esc_attr( $field_settings['required'] ); ?>"
55
  value="<?php echo esc_attr( $value ); ?>"<?php checked( $selected, $value ); ?>
56
  ondblclick="WP_User_Frontend.doUncheckRadioBtn(this)"
57
  />
includes/fields/class-field-textarea.php CHANGED
@@ -71,6 +71,7 @@ class WPUF_Form_Field_Textarea extends WPUF_Field_Contract {
71
  name="<?php echo esc_attr( $field_settings['name'] ); ?>"
72
  data-required="<?php echo esc_attr( $field_settings['required'] ); ?>"
73
  data-type="textarea"
 
74
  placeholder="<?php echo esc_attr( $field_settings['placeholder'] ); ?>"
75
  rows="<?php echo esc_attr( $field_settings['rows'] ); ?>"
76
  cols="<?php echo esc_attr( $field_settings['cols'] ); ?>"
71
  name="<?php echo esc_attr( $field_settings['name'] ); ?>"
72
  data-required="<?php echo esc_attr( $field_settings['required'] ); ?>"
73
  data-type="textarea"
74
+ data-id="<?php echo esc_attr( $field_settings['name'] . '_' . $form_id ); ?>"
75
  placeholder="<?php echo esc_attr( $field_settings['placeholder'] ); ?>"
76
  rows="<?php echo esc_attr( $field_settings['rows'] ); ?>"
77
  cols="<?php echo esc_attr( $field_settings['cols'] ); ?>"
includes/fields/class-field-url.php CHANGED
@@ -36,7 +36,7 @@ class WPUF_Form_Field_URL extends WPUF_Form_Field_Text {
36
  id="<?php echo esc_attr( $field_settings['name'] . '_' . $form_id ); ?>"
37
  type="url" pattern="^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,20}(:[0-9]{1,20})?(\/.*)?$" class="url <?php echo esc_attr( ' wpuf_' . $field_settings['name'] . '_' . $form_id ); ?>"
38
  data-required="<?php echo esc_attr( $field_settings['required'] ); ?>"
39
- data-type="text"
40
  name="<?php echo esc_attr( $field_settings['name'] ); ?>"
41
  placeholder="<?php echo esc_attr( $field_settings['placeholder'] ); ?>"
42
  value="<?php echo esc_attr( $value ); ?>" size="<?php echo esc_attr( $field_settings['size'] ); ?>"
36
  id="<?php echo esc_attr( $field_settings['name'] . '_' . $form_id ); ?>"
37
  type="url" pattern="^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,20}(:[0-9]{1,20})?(\/.*)?$" class="url <?php echo esc_attr( ' wpuf_' . $field_settings['name'] . '_' . $form_id ); ?>"
38
  data-required="<?php echo esc_attr( $field_settings['required'] ); ?>"
39
+ data-type="url"
40
  name="<?php echo esc_attr( $field_settings['name'] ); ?>"
41
  placeholder="<?php echo esc_attr( $field_settings['placeholder'] ); ?>"
42
  value="<?php echo esc_attr( $value ); ?>" size="<?php echo esc_attr( $field_settings['size'] ); ?>"
includes/free/loader.php CHANGED
@@ -36,10 +36,18 @@ class WPUF_Free_Loader extends WPUF_Pro_Prompt {
36
 
37
  // plugin settings
38
  add_action( 'admin_footer', [$this, 'remove_login_from_settings'] );
39
- add_filter( 'wpuf_settings_fields', [$this, 'settings_login_prompt'] );
40
-
41
  // post form templates
42
  add_action( 'wpuf_get_post_form_templates', [$this, 'post_form_templates'] );
 
 
 
 
 
 
 
 
43
  }
44
 
45
  public function includes() {
@@ -74,8 +82,12 @@ class WPUF_Free_Loader extends WPUF_Pro_Prompt {
74
 
75
  public function admin_menu_top() {
76
  $capability = wpuf_admin_role();
 
77
 
78
- add_submenu_page( 'wp-user-frontend', __( 'Registration Forms', 'wp-user-frontend' ), __( 'Registration Forms', 'wp-user-frontend' ), $capability, 'wpuf-profile-forms', [$this, 'admin_reg_forms_page'] );
 
 
 
79
  }
80
 
81
  public function admin_menu() {
@@ -86,7 +98,7 @@ class WPUF_Free_Loader extends WPUF_Pro_Prompt {
86
  }
87
 
88
  public function admin_reg_forms_page() {
89
- ?>
90
  <div class="wpuf-registration-form-notice">
91
  <div class="wpuf-notice wpuf-registration-shortcode-notice" style="padding: 20px;background: #fff;border: 1px solid #ddd;max-width: 360px;">
92
  <h3 style="margin: 0;"><?php esc_html_e( 'Registration Form', 'wp-user-frontend' ); ?></h3>
@@ -190,6 +202,667 @@ class WPUF_Free_Loader extends WPUF_Pro_Prompt {
190
  return $fields;
191
  }
192
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  /**
194
  * Add meta boxes to post form builder
195
  *
@@ -277,4 +950,488 @@ class WPUF_Free_Loader extends WPUF_Pro_Prompt {
277
 
278
  return $integrations;
279
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  }
36
 
37
  // plugin settings
38
  add_action( 'admin_footer', [$this, 'remove_login_from_settings'] );
39
+ add_filter( 'wpuf_settings_sections', [ $this, 'pro_sections' ] );
40
+ add_filter( 'wpuf_settings_fields', [ $this, 'pro_settings' ] );
41
  // post form templates
42
  add_action( 'wpuf_get_post_form_templates', [$this, 'post_form_templates'] );
43
+ add_filter( 'wpuf_get_pro_form_previews', [$this, 'pro_form_previews'] );
44
+
45
+ // payment gateway added for previewing
46
+ add_filter( 'wpuf_payment_gateways', [ $this, 'wpuf_payment_gateways' ] );
47
+
48
+ // navigation tabs added for previewing in Subscription > Add/Edit Subscription
49
+ add_action( 'wpuf_admin_subs_nav_tab', [ $this, 'subscription_tabs' ] );
50
+ add_action( 'wpuf_admin_subs_nav_content', [ $this, 'subscription_tab_contents' ]);
51
  }
52
 
53
  public function includes() {
82
 
83
  public function admin_menu_top() {
84
  $capability = wpuf_admin_role();
85
+ $parent_slug = 'wp-user-frontend';
86
 
87
+ add_submenu_page( $parent_slug, __( 'Registration Forms', 'wp-user-frontend' ), __( 'Registration Forms', 'wp-user-frontend' ), $capability, 'wpuf-profile-forms', [$this, 'admin_reg_forms_page'] );
88
+ $modules = add_submenu_page( $parent_slug, __( 'Modules', 'wp-user-frontend' ), __( 'Modules', 'wp-user-frontend' ), $capability, 'wpuf-modules', [ $this, 'modules_preview_page' ] );
89
+ add_action( 'wpuf_modules_page_contents', [ $this, 'load_modules_scripts' ] );
90
+ add_action( 'wpuf_modules_page_contents', [ $this, 'modules_page_contents' ] );
91
  }
92
 
93
  public function admin_menu() {
98
  }
99
 
100
  public function admin_reg_forms_page() {
101
+ ?>
102
  <div class="wpuf-registration-form-notice">
103
  <div class="wpuf-notice wpuf-registration-shortcode-notice" style="padding: 20px;background: #fff;border: 1px solid #ddd;max-width: 360px;">
104
  <h3 style="margin: 0;"><?php esc_html_e( 'Registration Form', 'wp-user-frontend' ); ?></h3>
202
  return $fields;
203
  }
204
 
205
+ /**
206
+ * The pro settings preview on the free version
207
+ *
208
+ * @since 3.6.0
209
+ *
210
+ * @param $settings_fields
211
+ *
212
+ * @return array
213
+ */
214
+ public function pro_sections( $sections ) {
215
+ $crown_icon_path = WPUF_ROOT . '/assets/images/crown.svg';
216
+ $new_sections = [
217
+ [
218
+ 'id' => 'wpuf_sms',
219
+ 'title' => __( 'SMS', 'wp-user-frontend' ) . '<span class="pro-icon-title"> ' . file_get_contents( $crown_icon_path ) . '</span>',
220
+ 'icon' => 'dashicons-format-status',
221
+ 'class' => 'pro-preview-html',
222
+ 'is_pro_preview' => true,
223
+ ],
224
+ [
225
+ 'id' => 'wpuf_social_api',
226
+ 'title' => __( 'Social Login', 'wp-user-frontend' ) . '<span class="pro-icon-title"> ' . file_get_contents( $crown_icon_path ) . '</span>',
227
+ 'icon' => 'dashicons-share',
228
+ 'class' => 'pro-preview-html',
229
+ 'is_pro_preview' => true,
230
+ ],
231
+ [
232
+ 'id' => 'user_directory',
233
+ 'title' => __( 'User Directory', 'wp-user-frontend' ) . '<span class="pro-icon-title"> ' . file_get_contents( $crown_icon_path ) . '</span>',
234
+ 'icon' => 'dashicons-list-view',
235
+ 'class' => 'pro-preview-html',
236
+ 'is_pro_preview' => true,
237
+ ],
238
+ [
239
+ 'id' => 'wpuf_payment_invoices',
240
+ 'title' => __( 'Invoices', 'wp-user-frontend' ) . '<span class="pro-icon-title"> ' . file_get_contents( $crown_icon_path ) . '</span>',
241
+ 'icon' => 'dashicons-media-spreadsheet',
242
+ 'class' => 'pro-preview-html',
243
+ 'is_pro_preview' => true,
244
+ ],
245
+ [
246
+ 'id' => 'wpuf_payment_tax',
247
+ 'title' => __( 'Tax', 'wp-user-frontend' ) . '<span class="pro-icon-title"> ' . file_get_contents( $crown_icon_path ) . '</span>',
248
+ 'icon' => 'dashicons-media-text',
249
+ 'class' => 'pro-preview-html',
250
+ 'is_pro_preview' => true,
251
+ ],
252
+ [
253
+ 'id' => 'wpuf_content_restriction',
254
+ 'title' => __( 'Content Filtering', 'wp-user-frontend' ) . '<span class="pro-icon-title"> ' . file_get_contents( $crown_icon_path ) . '</span>',
255
+ 'icon' => 'dashicons-admin-network',
256
+ 'class' => 'pro-preview-html',
257
+ 'is_pro_preview' => true,
258
+ ]
259
+ ];
260
+
261
+ return array_merge( $sections, $new_sections );
262
+ }
263
+
264
+ /**
265
+ * The pro settings preview on the free version
266
+ *
267
+ * @since 3.6.0
268
+ *
269
+ * @param $settings_fields
270
+ *
271
+ * @return array
272
+ */
273
+ public function pro_settings( $settings_fields ) {
274
+ $crown_icon_path = WPUF_ROOT . '/assets/images/crown.svg';
275
+ $settings_fields['wpuf_general'][] = [
276
+ 'name' => 'comments_per_page',
277
+ 'label' => __( 'Comments Per Page',
278
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
279
+ 'desc' => __( 'Show how many comments per page in comments add-on', 'wp-user-frontend' ),
280
+ 'type' => 'number',
281
+ 'default' => '20',
282
+ 'class' => 'pro-preview',
283
+ 'is_pro_preview' => true,
284
+ ];
285
+ $settings_fields['wpuf_general'][] = [
286
+ 'name' => 'ipstack_key',
287
+ 'label' => __( 'Ipstack API Key',
288
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
289
+ 'desc' => __( '<a target="_blank" href="https://ipstack.com/dashboard">Register here</a> to get your free ipstack api key',
290
+ 'wp-user-frontend' ),
291
+ 'class' => 'pro-preview',
292
+ 'is_pro_preview' => true,
293
+ ];
294
+ $settings_fields['wpuf_general'][] = [
295
+ 'name' => 'gmap_api_key',
296
+ 'label' => __( 'Google Map API',
297
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
298
+ 'desc' => __( '<a target="_blank" href="https://developers.google.com/maps/documentation/javascript">API</a> key is needed to render Google Maps',
299
+ 'wp-user-frontend' ),
300
+ 'class' => 'pro-preview',
301
+ 'is_pro_preview' => true,
302
+ ];
303
+ $settings_fields['wpuf_my_account'][] = [
304
+ 'name' => 'show_edit_profile_menu',
305
+ 'label' => __( 'Edit Profile',
306
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
307
+ 'desc' => __( 'Allow user to update their profile information from the account page',
308
+ 'wp-user-frontend' ),
309
+ 'type' => 'checkbox',
310
+ 'default' => 'on',
311
+ 'class' => 'pro-preview',
312
+ 'is_pro_preview' => true,
313
+ ];
314
+ $settings_fields['wpuf_my_account'][] = [
315
+ 'name' => 'edit_profile_form',
316
+ 'label' => __( 'Profile Form',
317
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
318
+ 'desc' => __( 'User will use this form to update their information from the account page,',
319
+ 'wp-user-frontend' ),
320
+ 'type' => 'select',
321
+ 'options' => [ 'Default Form' ],
322
+ 'class' => 'pro-preview',
323
+ 'is_pro_preview' => true,
324
+ ];
325
+ $settings_fields['wpuf_profile'][] = [
326
+ 'name' => 'avatar_size',
327
+ 'label' => __( 'Avatar Size',
328
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
329
+ 'desc' => __( 'Avatar size to crop when upload using the registration/profile form.(e.g:100x100)',
330
+ 'wpuf' ),
331
+ 'type' => 'text',
332
+ 'default' => '100x100',
333
+ 'class' => 'pro-preview',
334
+ 'is_pro_preview' => true,
335
+ ];
336
+ $settings_fields['wpuf_profile'][] = [
337
+ 'name' => 'pending_user_message',
338
+ 'label' => __( 'Pending User Message',
339
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
340
+ 'desc' => __( 'Pending user will see this message when try to log in.', 'wp-user-frontend' ),
341
+ 'default' => __( '<strong>ERROR:</strong> Your account has to be approved by an administrator before you can login.',
342
+ 'wp-user-frontend' ),
343
+ 'type' => 'textarea',
344
+ 'class' => 'pro-preview',
345
+ 'is_pro_preview' => true,
346
+ ];
347
+ $settings_fields['wpuf_profile'][] = [
348
+ 'name' => 'denied_user_message',
349
+ 'label' => __( 'Denied User Message',
350
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
351
+ 'desc' => __( 'Denied user will see this message when try to log in.', 'wp-user-frontend' ),
352
+ 'default' => __( '<strong>ERROR:</strong> Your account has been denied by an administrator, please contact admin to approve your account.',
353
+ 'wp-user-frontend' ),
354
+ 'type' => 'textarea',
355
+ 'class' => 'pro-preview',
356
+ 'is_pro_preview' => true,
357
+ ];
358
+ $settings_fields['wpuf_mails'][] = [
359
+ 'name' => 'subscription_setting',
360
+ 'label' => __( '<span class="dashicons dashicons-money"></span> Subscription',
361
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
362
+ 'type' => 'html',
363
+ 'class' => 'subscription-setting pro-preview-html',
364
+ 'is_pro_preview' => true,
365
+ ];
366
+ $settings_fields['wpuf_mails'][] = [
367
+ 'name' => 'email_setting',
368
+ 'label' => __( '<span class="dashicons dashicons-admin-generic"></span> Template Settings',
369
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
370
+ 'type' => 'html',
371
+ 'class' => 'email-setting pro-preview-html',
372
+ 'is_pro_preview' => true,
373
+ ];
374
+ $settings_fields['wpuf_mails'][] = [
375
+ 'name' => 'reset_email_setting',
376
+ 'label' => __( '<span class="dashicons dashicons-unlock"></span> Reset Email',
377
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
378
+ 'type' => 'html',
379
+ 'class' => 'reset-email-setting pro-preview-html',
380
+ 'is_pro_preview' => true,
381
+ ];
382
+ $settings_fields['wpuf_mails'][] = [
383
+ 'name' => 'confirmation_email_setting',
384
+ 'label' => __( '<span class="dashicons dashicons-email-alt"></span> Resend Confirmation Email',
385
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
386
+ 'type' => 'html',
387
+ 'class' => 'confirmation-email-setting pro-preview-html',
388
+ 'is_pro_preview' => true,
389
+ ];
390
+ $settings_fields['wpuf_mails'][] = [
391
+ 'name' => 'pending_user_email',
392
+ 'label' => __( '<span class="dashicons dashicons-groups"></span> Pending User Email',
393
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
394
+ 'type' => 'html',
395
+ 'class' => 'pending-user-email pro-preview-html',
396
+ 'is_pro_preview' => true,
397
+ ];
398
+ $settings_fields['wpuf_mails'][] = [
399
+ 'name' => 'denied_user_email',
400
+ 'label' => __( '<span class="dashicons dashicons-dismiss"></span> Denied User Email',
401
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
402
+ 'type' => 'html',
403
+ 'class' => 'denied-user-email pro-preview-html',
404
+ 'is_pro_preview' => true,
405
+ ];
406
+ $settings_fields['wpuf_mails'][] = [
407
+ 'name' => 'approved_user_email',
408
+ 'label' => __( '<span class="dashicons dashicons-smiley"></span> Approved User Email',
409
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
410
+ 'type' => 'html',
411
+ 'class' => 'approved-user-email pro-preview-html',
412
+ 'is_pro_preview' => true,
413
+ ];
414
+ $settings_fields['wpuf_mails'][] = [
415
+ 'name' => 'account_activated_user_email',
416
+ 'label' => __( '<span class="dashicons dashicons-smiley"></span> Account Activated Email',
417
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
418
+ 'type' => 'html',
419
+ 'class' => 'account-activated-user-email pro-preview-html',
420
+ 'is_pro_preview' => true,
421
+ ];
422
+ $settings_fields['wpuf_mails'][] = [
423
+ 'name' => 'approved_post_email',
424
+ 'label' => __( '<span class="dashicons dashicons-saved"></span> Approved Post Email',
425
+ 'wp-user-frontend' ) . '<span class="pro-icon"> ' . file_get_contents( $crown_icon_path ) . '</span>',
426
+ 'type' => 'html',
427
+ 'class' => 'approved-post-email pro-preview-html',
428
+ 'is_pro_preview' => true,
429
+ ];
430
+ $settings_fields['wpuf_sms'] = [
431
+ [
432
+ 'name' => 'clickatell_name',
433
+ 'label' => __( 'Clickatell name', 'wp-user-frontend' ),
434
+ 'desc' => __( 'Clickatell name', 'wp-user-frontend' ),
435
+ 'type' => 'text',
436
+ 'is_pro_preview' => true,
437
+ ],
438
+ [
439
+ 'name' => 'clickatell_password',
440
+ 'label' => __( 'Clickatell Password', 'wp-user-frontend' ),
441
+ 'desc' => __( 'Clickatell Password', 'wp-user-frontend' ),
442
+ 'type' => 'text',
443
+ 'is_pro_preview' => true,
444
+ ],
445
+ [
446
+ 'name' => 'clickatell_api',
447
+ 'label' => __( 'Clickatell api', 'wp-user-frontend' ),
448
+ 'desc' => __( 'Clickatell api', 'wp-user-frontend' ),
449
+ 'type' => 'text',
450
+ 'is_pro_preview' => true,
451
+ ],
452
+ [
453
+ 'name' => 'smsglobal_name',
454
+ 'label' => __( 'SMSGlobal Name', 'wp-user-frontend' ),
455
+ 'desc' => __( 'SMSGlobal Name', 'wp-user-frontend' ),
456
+ 'type' => 'text',
457
+ 'is_pro_preview' => true,
458
+ ],
459
+ [
460
+ 'name' => 'smsglobal_password',
461
+ 'label' => __( 'SMSGlobal Passord', 'wp-user-frontend' ),
462
+ 'desc' => __( 'SMSGlobal Passord', 'wp-user-frontend' ),
463
+ 'type' => 'text',
464
+ 'is_pro_preview' => true,
465
+ ],
466
+ [
467
+ 'name' => 'nexmo_api',
468
+ 'label' => __( 'Nexmo API', 'wp-user-frontend' ),
469
+ 'desc' => __( 'Nexmo API', 'wp-user-frontend' ),
470
+ 'type' => 'text',
471
+ 'is_pro_preview' => true,
472
+ ],
473
+ [
474
+ 'name' => 'nexmo_api_Secret',
475
+ 'label' => __( 'Nexmo API Secret', 'wp-user-frontend' ),
476
+ 'desc' => __( 'Nexmo API Secret', 'wp-user-frontend' ),
477
+ 'type' => 'text',
478
+ 'is_pro_preview' => true,
479
+ ],
480
+ [
481
+ 'name' => 'twillo_number',
482
+ 'label' => __( 'Twillo From Number', 'wp-user-frontend' ),
483
+ 'desc' => __( 'Twillo From Number', 'wp-user-frontend' ),
484
+ 'type' => 'text',
485
+ 'is_pro_preview' => true,
486
+ ],
487
+ [
488
+ 'name' => 'twillo_sid',
489
+ 'label' => __( 'Twillo Account SID', 'wp-user-frontend' ),
490
+ 'desc' => __( 'Twillo Account SID', 'wp-user-frontend' ),
491
+ 'type' => 'text',
492
+ 'is_pro_preview' => true,
493
+ ],
494
+ [
495
+ 'name' => 'twillo_token',
496
+ 'label' => __( 'Twillo Authro Token', 'wp-user-frontend' ),
497
+ 'desc' => __( 'Twillo Authro Token', 'wp-user-frontend' ),
498
+ 'type' => 'text',
499
+ 'is_pro_preview' => true,
500
+ ],
501
+ ];
502
+ $settings_fields['wpuf_social_api'] = [
503
+ 'enabled' => [
504
+ 'name' => 'enabled',
505
+ 'label' => __( 'Enable Social Login', 'wp-user-frontend' ),
506
+ 'type' => 'checkbox',
507
+ 'desc' => __( 'Enabling this will add Social Icons under registration form to allow users to login or register using Social Profiles',
508
+ 'wp-user-frontend' ),
509
+ 'is_pro_preview' => true,
510
+ ],
511
+ 'facebook_app_label' => [
512
+ 'name' => 'fb_app_label',
513
+ 'label' => __( 'Facebook App Settings', 'wp-user-frontend' ),
514
+ 'type' => 'html',
515
+ 'desc' => '<a target="_blank" href="https://developers.facebook.com/apps/">' . __( 'Create an App',
516
+ 'wp-user-frontend' ) . '</a>' . __( ' if you don\'t have one and fill App ID and App Secret below. ',
517
+ 'wp-user-frontend' ),
518
+ ],
519
+ 'facebook_app_url' => [
520
+ 'name' => 'fb_app_url',
521
+ 'label' => __( 'Redirect URI', 'wp-user-frontend' ),
522
+ 'type' => 'html',
523
+ 'desc' => "<input class='regular-text' type='text' disabled value=''>",
524
+ 'is_pro_preview' => true,
525
+ ],
526
+ 'facebook_app_id' => [
527
+ 'name' => 'fb_app_id',
528
+ 'label' => __( 'App Id', 'wp-user-frontend' ),
529
+ 'type' => 'text',
530
+ 'is_pro_preview' => true,
531
+ ],
532
+ 'facebook_app_secret' => [
533
+ 'name' => 'fb_app_secret',
534
+ 'label' => __( 'App Secret', 'wp-user-frontend' ),
535
+ 'type' => 'text',
536
+ 'is_pro_preview' => true,
537
+ ],
538
+ 'twitter_app_label' => [
539
+ 'name' => 'twitter_app_label',
540
+ 'label' => __( 'Twitter App Settings', 'wp-user-frontend' ),
541
+ 'type' => 'html',
542
+ 'desc' => '<a target="_blank" href="https://apps.twitter.com/">' . __( 'Create an App',
543
+ 'wp-user-frontend' ) . '</a>' . __( ' if you don\'t have one and fill Consumer key and Consumer Secret below.',
544
+ 'wp-user-frontend' ),
545
+ 'is_pro_preview' => true,
546
+ ],
547
+ 'twitter_app_url' => [
548
+ 'name' => 'twitter_app_url',
549
+ 'label' => __( 'Callback URL', 'wp-user-frontend' ),
550
+ 'type' => 'html',
551
+ 'desc' => "<input class='regular-text' type='text' disabled value=''>",
552
+ 'is_pro_preview' => true,
553
+ ],
554
+ 'twitter_app_id' => [
555
+ 'name' => 'twitter_app_id',
556
+ 'label' => __( 'Consumer Key', 'wp-user-frontend' ),
557
+ 'type' => 'text',
558
+ 'is_pro_preview' => true,
559
+ ],
560
+ 'twitter_app_secret' => [
561
+ 'name' => 'twitter_app_secret',
562
+ 'label' => __( 'Consumer Secret', 'wp-user-frontend' ),
563
+ 'type' => 'text',
564
+ 'is_pro_preview' => true,
565
+ ],
566
+ 'google_app_label' => [
567
+ 'name' => 'google_app_label',
568
+ 'label' => __( 'Google App Settings', 'wp-user-frontend' ),
569
+ 'type' => 'html',
570
+ 'desc' => '<a target="_blank" href="https://console.developers.google.com/project">' . __( 'Create an App',
571
+ 'wp-user-frontend' ) . '</a>' . __( ' if you don\'t have one and fill Client ID and Client Secret below.',
572
+ 'wp-user-frontend' ),
573
+ 'is_pro_preview' => true,
574
+ ],
575
+ 'google_app_url' => [
576
+ 'name' => 'google_app_url',
577
+ 'label' => __( 'Redirect URI', 'wp-user-frontend' ),
578
+ 'type' => 'html',
579
+ 'desc' => "<input class='regular-text' type='text' disabled value=''>",
580
+ 'is_pro_preview' => true,
581
+ ],
582
+ 'google_app_id' => [
583
+ 'name' => 'google_app_id',
584
+ 'label' => __( 'Client ID', 'wp-user-frontend' ),
585
+ 'type' => 'text',
586
+ 'is_pro_preview' => true,
587
+ ],
588
+ 'google_app_secret' => [
589
+ 'name' => 'google_app_secret',
590
+ 'label' => __( 'Client secret', 'wp-user-frontend' ),
591
+ 'type' => 'text',
592
+ 'is_pro_preview' => true,
593
+ ],
594
+ 'linkedin_app_label' => [
595
+ 'name' => 'linkedin_app_label',
596
+ 'label' => __( 'Linkedin App Settings', 'wp-user-frontend' ),
597
+ 'type' => 'html',
598
+ 'desc' => '<a target="_blank" href="https://www.linkedin.com/developer/apps">' . __( 'Create an App',
599
+ 'wp-user-frontend' ) . '</a>' . __( ' if you don\'t have one and fill Client ID and Client Secret below.',
600
+ 'wp-user-frontend' ),
601
+ 'is_pro_preview' => true,
602
+ ],
603
+ 'linkedin_app_url' => [
604
+ 'name' => 'linkedin_app_url',
605
+ 'label' => __( 'Redirect URL', 'wp-user-frontend' ),
606
+ 'type' => 'html',
607
+ 'desc' => "<input class='regular-text' type='text' disabled value=''>",
608
+ 'is_pro_preview' => true,
609
+ ],
610
+ 'linkedin_app_id' => [
611
+ 'name' => 'linkedin_app_id',
612
+ 'label' => __( 'Client ID', 'wp-user-frontend' ),
613
+ 'type' => 'text',
614
+ 'is_pro_preview' => true,
615
+ ],
616
+ 'linkedin_app_secret' => [
617
+ 'name' => 'linkedin_app_secret',
618
+ 'label' => __( 'Client Secret', 'wp-user-frontend' ),
619
+ 'type' => 'text',
620
+ 'is_pro_preview' => true,
621
+ ],
622
+ 'instagram_app_label' => [
623
+ 'name' => 'instagram_app_label',
624
+ 'label' => __( 'Instagram App Settings', 'wp-user-frontend' ),
625
+ 'type' => 'html',
626
+ 'desc' => '<a target="_blank" href="https://www.instagram.com/developer/">' . __( 'Create an App',
627
+ 'wp-user-frontend' ) . '</a>' . __( ' if you don\'t have one and fill Client ID and Client Secret below.',
628
+ 'wp-user-frontend' ),
629
+ 'is_pro_preview' => true,
630
+ ],
631
+ 'instagram_app_url' => [
632
+ 'name' => 'instagram_app_url',
633
+ 'label' => __( 'Redirect URI', 'wp-user-frontend' ),
634
+ 'type' => 'html',
635
+ 'desc' => "<input class='regular-text' type='text' disabled value=''>",
636
+ 'is_pro_preview' => true,
637
+ ],
638
+ 'instagram_app_id' => [
639
+ 'name' => 'instagram_app_id',
640
+ 'label' => __( 'Client ID', 'wp-user-frontend' ),
641
+ 'type' => 'text',
642
+ 'is_pro_preview' => true,
643
+ ],
644
+ 'instagram_app_secret' => [
645
+ 'name' => 'instagram_app_secret',
646
+ 'label' => __( 'Client Secret', 'wp-user-frontend' ),
647
+ 'type' => 'text',
648
+ 'is_pro_preview' => true,
649
+ ],
650
+ ];
651
+ $settings_fields['user_directory'] = [
652
+ [
653
+ 'name' => 'pro_img_size',
654
+ 'label' => __( 'Profile Gallery Image Size ', 'wp-user-frontend' ),
655
+ 'desc' => __( 'Set the image size of picture gallery in frontend', 'wp-user-frontend' ),
656
+ 'type' => 'select',
657
+ 'options' => wpuf_get_image_sizes(),
658
+ 'is_pro_preview' => true,
659
+ ],
660
+ [
661
+ 'name' => 'avatar_size',
662
+ 'label' => __( 'Avatar Size ', 'wp-user-frontend' ),
663
+ 'desc' => __( 'Set the image size of profile picture in frontend', 'wp-user-frontend' ),
664
+ 'type' => 'select',
665
+ 'options' => [ '32' => '32 x 32', ],
666
+ 'is_pro_preview' => true,
667
+ ],
668
+ [
669
+ 'name' => 'profile_header_template',
670
+ 'label' => __( 'Profile Header Template', 'wp-user-frontend' ),
671
+ 'type' => 'radio',
672
+ 'default' => 'layout',
673
+ 'options' => [
674
+ 'layout' => '<img class="profile-header" src="' . WPUF_ASSET_URI . '/images/profile-header-template-1.jpg' . '" />',
675
+ 'layout1' => '<img class="profile-header" src="' . WPUF_ASSET_URI . '/images/profile-header-template-2.jpg' . '" />',
676
+ 'layout2' => '<img class="profile-header" src="' . WPUF_ASSET_URI . '/images/profile-header-template-3.jpg' . '" />',
677
+ ],
678
+ 'is_pro_preview' => true,
679
+ ],
680
+ [
681
+ 'name' => 'user_listing_template',
682
+ 'label' => __( 'User Listing Template', 'wp-user-frontend' ),
683
+ 'type' => 'radio',
684
+ 'default' => 'list',
685
+ 'options' => [
686
+ 'list' => '<img class="user-listing" src="' . WPUF_ASSET_URI . '/images/user-listing-template-1.jpg' . '" />',
687
+ 'list1' => '<img class="user-listing" src="' . WPUF_ASSET_URI . '/images/user-listing-template-2.jpg' . '" />',
688
+ 'list2' => '<img class="user-listing" src="' . WPUF_ASSET_URI . '/images/user-listing-template-3.jpg' . '" />',
689
+ 'list3' => '<img class="user-listing" src="' . WPUF_ASSET_URI . '/images/user-listing-template-4.jpg' . '" />',
690
+ 'list4' => '<img class="user-listing" src="' . WPUF_ASSET_URI . '/images/user-listing-template-5.jpg' . '" />',
691
+ 'list5' => '<img class="user-listing" src="' . WPUF_ASSET_URI . '/images/user-listing-template-6.jpg' . '" />',
692
+ ],
693
+ 'is_pro_preview' => true,
694
+ ],
695
+ ];
696
+ $settings_fields['wpuf_payment_invoices'] = [
697
+ [
698
+ 'name' => 'enable_invoices',
699
+ 'label' => __( 'Enable Invoices', 'wp-user-frontend' ),
700
+ 'desc' => __( 'Enable sending invoices for completed payments', 'wp-user-frontend' ),
701
+ 'type' => 'checkbox',
702
+ 'default' => 'on',
703
+ 'is_pro_preview' => true,
704
+ ],
705
+ [
706
+ 'name' => 'show_invoices',
707
+ 'label' => __( 'Show Invoices', 'wp-user-frontend' ),
708
+ 'desc' => __( 'Show Invoices option where <code>[wpuf_account]</code> is located',
709
+ 'wp-user-frontend' ),
710
+ 'type' => 'checkbox',
711
+ 'default' => 'on',
712
+ 'is_pro_preview' => true,
713
+ ],
714
+ [
715
+ 'name' => 'set_logo',
716
+ 'label' => __( 'Set Invoice Logo', 'wp-user-frontend' ),
717
+ 'desc' => __( 'This sets the company Logo to be used in Invoice', 'wp-user-frontend' ),
718
+ 'type' => 'file',
719
+ 'default' => false,
720
+ 'is_pro_preview' => true,
721
+ ],
722
+ [
723
+ 'name' => 'set_color',
724
+ 'label' => __( 'Set Invoice Color', 'wp-user-frontend' ),
725
+ 'desc' => __( 'Set color code to be used in invoice', 'wp-user-frontend' ),
726
+ 'type' => 'text',
727
+ 'default' => '#e435226',
728
+ 'is_pro_preview' => true,
729
+ ],
730
+ [
731
+ 'name' => 'set_from_address',
732
+ 'label' => __( 'From Address', 'wp-user-frontend' ),
733
+ 'desc' => __( 'This sets the provider information of the Invoice. Note: use the <xmp class="wpuf-xmp-tag"><br></xmp> tag to enter line breaks.',
734
+ 'wp-user-frontend' ),
735
+ 'type' => 'textarea',
736
+ 'is_pro_preview' => true,
737
+ ],
738
+ [
739
+ 'name' => 'set_title',
740
+ 'label' => __( 'Invoice Title', 'wp-user-frontend' ),
741
+ 'desc' => __( 'This sets the payment information title of the Invoice', 'wp-user-frontend' ),
742
+ 'type' => 'text',
743
+ 'is_pro_preview' => true,
744
+ ],
745
+ [
746
+ 'name' => 'set_paragraph',
747
+ 'label' => __( 'Invoice Paragraph', 'wp-user-frontend' ),
748
+ 'desc' => __( 'This sets the payment information paragraph of the Invoice',
749
+ 'wp-user-frontend' ),
750
+ 'type' => 'textarea',
751
+ 'is_pro_preview' => true,
752
+ ],
753
+ [
754
+ 'name' => 'set_footernote',
755
+ 'label' => __( 'Invoice Footer', 'wp-user-frontend' ),
756
+ 'desc' => __( 'This sets the footer of the Invoice', 'wp-user-frontend' ),
757
+ 'type' => 'text',
758
+ 'is_pro_preview' => true,
759
+ ],
760
+ [
761
+ 'name' => 'set_filename',
762
+ 'label' => __( 'Invoice Filename Prefix', 'wp-user-frontend' ),
763
+ 'desc' => __( 'This sets the filename prefix of the Invoice', 'wp-user-frontend' ),
764
+ 'type' => 'text',
765
+ 'is_pro_preview' => true,
766
+ ],
767
+ [
768
+ 'name' => 'set_mail_sub',
769
+ 'label' => __( 'Set Invoice Mail Subject', 'wp-user-frontend' ),
770
+ 'desc' => __( 'This sets the mail subject of the Invoice', 'wp-user-frontend' ),
771
+ 'type' => 'text',
772
+ 'is_pro_preview' => true,
773
+ ],
774
+ [
775
+ 'name' => 'set_mail_body',
776
+ 'label' => __( 'Set Invoice Mail Body', 'wp-user-frontend' ),
777
+ 'desc' => __( 'This sets the mail body of the Invoice', 'wp-user-frontend' ),
778
+ 'type' => 'textarea',
779
+ 'is_pro_preview' => true,
780
+ ],
781
+ ];
782
+ $settings_fields['wpuf_payment_tax'] = [
783
+ [
784
+ 'name' => 'tax_help',
785
+ 'label' => __( 'Need help?', 'wp-user-frontend' ),
786
+ 'desc' => sprintf( __( 'Visit the <a href="%s" target="_blank">Tax setup documentation</a> for guidance on how to setup tax.', 'wp-user-frontend' ), 'https://wedevs.com/docs/wp-user-frontend-pro/settings/tax/' ),
787
+ 'callback' => 'wpuf_descriptive_text',
788
+ ],
789
+ [
790
+ 'name' => 'enable_tax',
791
+ 'label' => __( 'Enable Tax', 'wp-user-frontend' ),
792
+ 'desc' => __( 'Enable tax on payments', 'wp-user-frontend' ),
793
+ 'type' => 'checkbox',
794
+ 'default' => 'on',
795
+ 'is_pro_preview' => true,
796
+ ],
797
+ [
798
+ 'name' => 'wpuf_base_country_state',
799
+ 'label' => '<strong>' . __( 'Base Country and State', 'wp-user-frontend' ) . '</strong>',
800
+ 'desc' => __( 'Select your base country and state', 'wp-user-frontend' ),
801
+ 'is_pro_preview' => true,
802
+ ],
803
+ [
804
+ 'name' => 'wpuf_tax_rates',
805
+ 'label' => '<strong>' . __( 'Tax Rates', 'wp-user-frontend' ) . '</strong>',
806
+ 'desc' => __( 'Add tax rates for specific regions. Enter a percentage, such as 5 for 5%',
807
+ 'wp-user-frontend' ),
808
+ 'is_pro_preview' => true,
809
+ ],
810
+ [
811
+ 'name' => 'fallback_tax_rate',
812
+ 'label' => '<strong>' . __( 'Fallback Tax Rate', 'wp-user-frontend' ) . '</strong>',
813
+ 'desc' => __( 'Customers not in a specific rate will be charged this tax rate. Enter a percentage, such as 5 for 5%',
814
+ 'wp-user-frontend' ),
815
+ 'type' => 'number',
816
+ 'default' => 0,
817
+ 'is_pro_preview' => true,
818
+ ],
819
+ [
820
+ 'name' => 'prices_include_tax',
821
+ 'label' => __( 'Show prices with tax', 'wp-user-frontend' ),
822
+ 'desc' => __( 'If frontend prices will include tax or not', 'wp-user-frontend' ),
823
+ 'type' => 'radio',
824
+ 'default' => 'yes',
825
+ 'options' => array(
826
+ 'yes' => __( 'Show prices with tax', 'wp-user-frontend' ),
827
+ 'no' => __( 'Show prices without tax', 'wp-user-frontend' ),
828
+ ),
829
+ 'is_pro_preview' => true,
830
+ ],
831
+ ];
832
+ $settings_fields['wpuf_content_restriction'] = [
833
+ [
834
+ 'name' => 'enable_content_filtering',
835
+ 'label' => __( 'Enable Content Filtering', 'wp-user-frontend' ),
836
+ 'desc' => __( 'Enable Content Filtering in frontend', 'wp-user-frontend' ),
837
+ 'type' => 'checkbox',
838
+ 'default' => 'off',
839
+ 'is_pro_preview' => true,
840
+ ],
841
+ [
842
+ 'name' => 'keyword_dictionary',
843
+ 'label' => __( 'Keyword Dictionary', 'wp-user-frontend' ),
844
+ 'desc' => __( 'Enter Keywords to Remove. Separate keywords with commas.',
845
+ 'wp-user-frontend' ),
846
+ 'type' => 'textarea',
847
+ 'is_pro_preview' => true,
848
+ ],
849
+ [
850
+ 'name' => 'filter_contents',
851
+ 'label' => __( 'Filter main content', 'wp-user-frontend' ),
852
+ 'desc' => __( 'Choose which content to filter.', 'wp-user-frontend' ),
853
+ 'type' => 'multicheck',
854
+ 'options' => array(
855
+ 'post_title' => __( 'Post Titles', 'wp-user-frontend' ),
856
+ 'post_content' => __( 'Post Content', 'wp-user-frontend' ),
857
+ ),
858
+ 'default' => array( 'post_content', 'post_title' ),
859
+ 'is_pro_preview' => true,
860
+ ],
861
+ ];
862
+
863
+ return $settings_fields;
864
+ }
865
+
866
  /**
867
  * Add meta boxes to post form builder
868
  *
950
 
951
  return $integrations;
952
  }
953
+
954
+ /**
955
+ * Pro form templates for previewing
956
+ *
957
+ * @since 3.6.0
958
+ *
959
+ * @param array $integrations
960
+ *
961
+ * @return array
962
+ */
963
+ public function pro_form_previews( $integrations ) {
964
+ include_once __DIR__ . '/post-form-templates/easy_digital_download.php';
965
+
966
+ $integrations['WPUF_Pro_Form_Preview_EDD'] = new WPUF_Pro_Form_Preview_EDD();
967
+
968
+ return $integrations;
969
+ }
970
+
971
+ /**
972
+ * A preview page to show the Pro Modules of WPUF
973
+ *
974
+ * @since 3.6.0
975
+ *
976
+ * @return void
977
+ */
978
+ public function modules_preview_page() {
979
+ $modules = $this->pro_modules_info();
980
+ do_action( 'wpuf_modules_page_contents', $modules );
981
+ }
982
+
983
+ /**
984
+ * Load required style and js for Modules page
985
+ *
986
+ * @since 3.6.0
987
+ *
988
+ * @return void
989
+ */
990
+ public function load_modules_scripts() {
991
+ wp_enqueue_style( 'wpuf-pro-modules', WPUF_ASSET_URI . '/css/admin/wpuf-module.css', false, WPUF_VERSION );
992
+ wp_enqueue_script( 'wpuf_pro_admin', WPUF_ASSET_URI . '/js/admin/wpuf-module.js', [ 'jquery' ], WPUF_VERSION, true );
993
+ }
994
+
995
+ /**
996
+ * Get the info of the pro modules as an array
997
+ *
998
+ * @since 3.6.0
999
+ *
1000
+ * @return string[]
1001
+ */
1002
+ public function pro_modules_info() {
1003
+ return [
1004
+ 'campaign-monitor/campaign-monitor.php' => [
1005
+ 'name' => 'Campaign Monitor',
1006
+ 'description' => 'Subscribe a contact to Campaign Monitor when a form is submited',
1007
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/campaign-monitor/',
1008
+ 'thumbnail' => 'campaign_monitor.png',
1009
+ ],
1010
+ 'social-login/wpuf-social-login.php' => [
1011
+ 'name' => 'Social Login & Registration',
1012
+ 'description' => 'Add Social Login and registration feature in WP User Frontend',
1013
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/social-login-registration/',
1014
+ 'thumbnail' => 'Social-Media-Login.png',
1015
+ ],
1016
+ 'bp-profile/wpuf-bp.php' => [
1017
+ 'name' => 'BuddyPress Profile',
1018
+ 'description' => 'Register and upgrade user profiles and sync data with BuddyPress',
1019
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/buddypress-profile-integration/',
1020
+ 'thumbnail' => 'wpuf-buddypress.png',
1021
+ ],
1022
+ 'comments/comments.php' => [
1023
+ 'name' => 'Comments Manager',
1024
+ 'description' => 'Handle comments in frontend',
1025
+ 'plugin_uri' => 'https://wedevs.com/wp-user-frontend-pro/modules/comments-manager/',
1026
+ 'thumbnail' => 'wpuf-comment.png',
1027
+ ],
1028
+ 'mailpoet/wpuf-mailpoet.php' => [
1029
+ 'name' => 'Mailpoet',
1030
+ 'description' => 'Add subscribers to mailpoet mailing list when they registers via WP User Frontend Pro',
1031
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/mailpoet/',
1032
+ 'thumbnail' => 'wpuf-mailpoet.png',
1033
+ ],
1034
+ 'pmpro/wpuf-pmpro.php' => [
1035
+ 'name' => 'Paid Membership Pro Integration',
1036
+ 'description' => 'Membership Integration of WP User Frontend PRO with Paid Membership Pro',
1037
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/install-and-configure-pmpro-add-on-for-wpuf/',
1038
+ 'thumbnail' => 'wpuf-pmpro.png',
1039
+ ],
1040
+ 'sms-notification/wpuf-sms.php' => [
1041
+ 'name' => 'SMS Notification',
1042
+ 'description' => 'SMS notification for post',
1043
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/sms-notification/',
1044
+ 'thumbnail' => 'wpuf-sms.png',
1045
+ ],
1046
+ 'email-templates/email-templates.php' => [
1047
+ 'name' => 'HTML Email Templates',
1048
+ 'description' => 'Send Email Notifications with HTML Template',
1049
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/html-email-templates/',
1050
+ 'thumbnail' => 'email-templates.png',
1051
+ ],
1052
+ 'getresponse/getresponse.php' => [
1053
+ 'name' => 'GetResponse',
1054
+ 'description' => 'Subscribe a contact to GetResponse when a form is submited',
1055
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/get-response/',
1056
+ 'thumbnail' => 'getresponse.png',
1057
+ ],
1058
+ 'zapier/zapier.php' => [
1059
+ 'name' => 'Zapier',
1060
+ 'description' => 'Subscribe a contact to Zapier when a form is submited',
1061
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/zapier/',
1062
+ 'thumbnail' => 'zapier.png',
1063
+ ],
1064
+ 'convertkit/convertkit.php' => [
1065
+ 'name' => 'ConvertKit',
1066
+ 'description' => 'Subscribe a contact to ConvertKit when a form is submited',
1067
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/convertkit/',
1068
+ 'thumbnail' => 'convertkit.png',
1069
+ ],
1070
+ 'private-message/private-message.php' => [
1071
+ 'name' => 'Private Message',
1072
+ 'description' => 'User to user message from Frontend',
1073
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/private-messaging/',
1074
+ 'thumbnail' => 'message.gif',
1075
+ ],
1076
+ 'user-analytics/wpuf-user-analytics.php' => [
1077
+ 'name' => 'User Analytics',
1078
+ 'description' => 'Show user tracking info during post and registration from Frontend',
1079
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/user-analytics/',
1080
+ 'thumbnail' => 'wpuf-ua.png',
1081
+ ],
1082
+ 'mailchimp/wpuf-mailchimp.php' => [
1083
+ 'name' => 'Mailchimp',
1084
+ 'description' => 'Add subscribers to Mailchimp mailing list when they registers via WP User Frontend Pro',
1085
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/add-users-to-mailchimp-subscribers-list-upon-registration-from-frontend/',
1086
+ 'thumbnail' => 'wpuf-mailchimp.png',
1087
+ ],
1088
+ 'user-activity/user_activity.php' => [
1089
+ 'name' => 'User Activity',
1090
+ 'description' => 'Handle user activity in frontend',
1091
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/user-activity/',
1092
+ 'thumbnail' => 'wpuf-activity.png',
1093
+ ],
1094
+ 'report/wpuf-report.php' => [
1095
+ 'name' => 'Reports',
1096
+ 'description' => 'Show various reports in WP User Frontend menu',
1097
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/reports/',
1098
+ 'thumbnail' => 'reports.png',
1099
+ ],
1100
+ 'qr-code-field/wpuf-qr-code.php' => [
1101
+ 'name' => 'QR Code',
1102
+ 'description' => 'Post Qr code generator plugin',
1103
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/qr-code/',
1104
+ 'thumbnail' => 'wpuf-qr.png',
1105
+ ],
1106
+ 'mailpoet3/wpuf-mailpoet-3.php' => [
1107
+ 'name' => 'Mailpoet 3',
1108
+ 'description' => 'Add subscribers to mailpoet mailing list when they registers via WP User Frontend Pro',
1109
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/mailpoet3/',
1110
+ 'thumbnail' => 'mailpoet3.png',
1111
+ ],
1112
+ 'user-directory/userlisting.php' => [
1113
+ 'name' => 'User Directory',
1114
+ 'description' => 'Handle user listing and user profile in frontend',
1115
+ 'plugin_uri' => 'https://wedevs.com/products/plugins/wp-user-frontend-pro/user-listing-profile/',
1116
+ 'thumbnail' => 'wpuf-ul.png',
1117
+ ],
1118
+ 'stripe/wpuf-stripe.php' => [
1119
+ 'name' => 'Stripe Payment',
1120
+ 'description' => 'Stripe payment gateway for WP User Frontend',
1121
+ 'plugin_uri' => 'https://wedevs.com/docs/wp-user-frontend-pro/modules/stripe/',
1122
+ 'thumbnail' => 'wpuf-stripe.png',
1123
+ ],
1124
+ ];
1125
+ }
1126
+
1127
+ /**
1128
+ * The content of the module page
1129
+ *
1130
+ * @since 3.6.0
1131
+ *
1132
+ * @param array $modules
1133
+ *
1134
+ * @return void
1135
+ */
1136
+ public function modules_page_contents( $modules ) {
1137
+ $diamond_icon = file_exists( WPUF_ROOT . '/assets/images/diamond.svg' ) ? file_get_contents( WPUF_ROOT . '/assets/images/diamond.svg' ) : '';
1138
+ $check_icon = file_exists( WPUF_ROOT . '/assets/images/check.svg' ) ? file_get_contents( WPUF_ROOT . '/assets/images/check.svg' ) : '';
1139
+ $crown_icon = file_exists( WPUF_ROOT . '/assets/images/crown.svg' ) ? file_get_contents( WPUF_ROOT . '/assets/images/crown.svg' ) : '';
1140
+ $close_icon = file_exists( WPUF_ROOT . '/assets/images/x.svg' ) ? file_get_contents( WPUF_ROOT . '/assets/images/x.svg' ) : '';
1141
+ $suffix = '.min';
1142
+
1143
+ wp_enqueue_style( 'swiffy-slider', WPUF_ASSET_URI . '/vendor/swiffy-slider/swiffy-slider' . $suffix . '.css', false, '1.6.0' );
1144
+ wp_enqueue_script( 'swiffy-slider', WPUF_ASSET_URI . '/vendor/swiffy-slider/swiffy-slider' . $suffix . '.js', [ 'jquery' ], '1.6.0', true );
1145
+ wp_enqueue_script( 'swiffy-slider-extention', WPUF_ASSET_URI . '/vendor/swiffy-slider/swiffy-slider-extensions' . $suffix . '.js', [ 'jquery' ], '1.6.0', true );
1146
+ ?>
1147
+ <div id="wpuf-upgrade-popup" class="wpuf-popup-window">
1148
+ <div class="modal-window">
1149
+ <div class="modal-window-inner">
1150
+ <div class="content-area">
1151
+ <div class="popup-close-button">
1152
+ <?php echo $close_icon; ?>
1153
+ </div>
1154
+ <div class="popup-diamond">
1155
+ <?php echo $diamond_icon; ?>
1156
+ </div>
1157
+ <div class="wpuf-popup-header">
1158
+ <h2 class="font-orange header-one">Upgrade to</h2>
1159
+ <h2 class="header-two">WP User Frontend <span class="font-bold">Pro</span></h2>
1160
+ <h2 class="header-three font-gray">to experience even more powerful<br>features 🎉</h2>
1161
+ </div>
1162
+ <div class="wpuf-popup-list-area">
1163
+ <div class="single-checklist">
1164
+ <div class="check-icon">
1165
+ <?php echo $check_icon; ?>
1166
+ </div>
1167
+ <div class="check-list">
1168
+ <p>Get custom <span class="bold font-black">Post Type</span> and <span class="bold font-black">Taxonomy</span> support with
1169
+ <br> subscription-based <span class="bold font-black">restrictions</span> for post <br> submission.</p>
1170
+ </div>
1171
+ </div>
1172
+ <div class="single-checklist">
1173
+ <div class="check-icon">
1174
+ <?php echo $check_icon; ?>
1175
+ </div>
1176
+ <div class="check-list">
1177
+ <p>Enable <span class="bold font-black">conditional logic</span> and <span class="bold font-black">multi-step</span><br> functionalities on your forms.</p>
1178
+ </div>
1179
+ </div>
1180
+ <div class="single-checklist">
1181
+ <div class="check-icon">
1182
+ <?php echo $check_icon; ?>
1183
+ </div>
1184
+ <div class="check-list">
1185
+ <p>Show or hide <span class="bold font-black">menus, pages,</span> and <span class="bold font-black">content</span> based on<br> user roles or login status of a user.</p>
1186
+ </div>
1187
+ </div>
1188
+ <div class="single-checklist">
1189
+ <div class="check-icon">
1190
+ <?php echo $check_icon; ?>
1191
+ </div>
1192
+ <div class="check-list">
1193
+ <p><span class="bold font-black">20+ Premium Modules</span> (Social Login, User<br> Directory, User Activity, Stripe, MailChimp, Private<br> Messaging, Zapier, & more)</p>
1194
+ </div>
1195
+ </div>
1196
+ </div>
1197
+ <a href="<?php echo self::get_upgrade_to_pro_popup_url(); ?>"
1198
+ target="_blank"
1199
+ class="wpuf-button button-upgrade-to-pro">
1200
+ <?php esc_html_e( 'Upgrade to PRO', 'wp-user-frontend' ); ?>
1201
+ <?php printf( '<span class="pro-icon"> %s</span>', $crown_icon ); ?>
1202
+ </a>
1203
+ </div>
1204
+ <div class="slider-area">
1205
+ <div class="wpuf-slider slider-indicators-outside slider-indicators-round slider-nav-mousedrag slider-nav-autoplay slider-nav-autopause"" id="wpuf-slider">
1206
+ <div class="swiffy-slider">
1207
+ <ul class="slider-container">
1208
+ <li><img src="<?php echo WPUF_ASSET_URI . '/images/woocommerce-form-template.png'; ?>"></li>
1209
+ <li><img src="<?php echo WPUF_ASSET_URI . '/images/conditional-form.png'; ?>"></li>
1210
+ <li><img src="<?php echo WPUF_ASSET_URI . '/images/content-restriction.png'; ?>"></li>
1211
+ <li><img src="<?php echo WPUF_ASSET_URI . '/images/modules.png'; ?>"></li>
1212
+ </ul>
1213
+
1214
+ <div class="slider-indicators">
1215
+ <button class="active"></button>
1216
+ <button></button>
1217
+ <button></button>
1218
+ <button></button>
1219
+ </div>
1220
+ </div>
1221
+ </div>
1222
+ </div>
1223
+ </div>
1224
+ <div class="modal-footer">
1225
+ <div class="footer-feature">
1226
+ <p>
1227
+ <?php echo $check_icon; ?> Industry leading 24x7 support
1228
+ </p>
1229
+ <p>
1230
+ <?php echo $check_icon; ?> 14 days no questions asked refund policy
1231
+ </p>
1232
+ <p>
1233
+ <?php echo $check_icon; ?> Secured payment
1234
+ </p>
1235
+
1236
+ </div>
1237
+ </div>
1238
+ </div>
1239
+ </div>
1240
+ <div class="wrap wpuf-modules">
1241
+ <h1><?php esc_attr_e( 'Modules', 'wp-user-frontend' ); ?></h1>
1242
+ <div class="wp-list-table widefat wpuf-modules">
1243
+ <?php if ( $modules ) {
1244
+ foreach ( $modules as $slug => $module ) {
1245
+ ?>
1246
+ <div class="plugin-card">
1247
+ <div class="plugin-card-top">
1248
+ <div class="name column-name">
1249
+ <h3>
1250
+ <span class="plugin-name"><a href="<?php echo $module['plugin_uri']; ?>" target="_blank"><?php echo $module['name']; ?></a></span>
1251
+ <a href="<?php echo $module['plugin_uri']; ?>" target="_blank"><img class="plugin-icon" src="<?php echo WPUF_ASSET_URI . '/images/modules/' . $module['thumbnail']; ?>" alt="" /></a>
1252
+ </h3>
1253
+ </div>
1254
+
1255
+ <div class="action-links">
1256
+ <ul class="plugin-action-buttons">
1257
+ <li data-module="<?php echo $slug; ?>">
1258
+ <label class="wpuf-toggle-switch">
1259
+ <input type="checkbox" name="module_toggle" class="wpuf-toggle-module" disabled>
1260
+ <span class="slider round"></span>
1261
+ </label>
1262
+ </li>
1263
+ </ul>
1264
+ <div class="wpuf-doc-link" ><a href="<?php echo $module['plugin_uri']; ?>" target="_blank">Documentation</a></div>
1265
+ </div>
1266
+
1267
+ <div class="desc column-description">
1268
+ <p>
1269
+ <?php echo $module['description']; ?>
1270
+ </p>
1271
+ </div>
1272
+ </div>
1273
+ </div>
1274
+ <?php
1275
+ }
1276
+ }
1277
+ ?>
1278
+ </div>
1279
+ <div class="form-create-overlay">
1280
+ <a href="#wpuf-upgrade-popup"
1281
+ class="wpuf-button button-upgrade-to-pro">
1282
+ <?php esc_html_e( 'Upgrade to PRO', 'wp-user-frontend' ); ?>
1283
+ <?php printf( '<span class="pro-icon"> %s</span>', $crown_icon ); ?>
1284
+ </a>
1285
+ </div>
1286
+ </div>
1287
+ <?php
1288
+ }
1289
+
1290
+ /**
1291
+ * payment gateways for previewing in the free version
1292
+ *
1293
+ * @since 3.6.0
1294
+ *
1295
+ * @param $gateways
1296
+ *
1297
+ * @return void
1298
+ */
1299
+ public function wpuf_payment_gateways( $gateways ) {
1300
+ $crown_icon = WPUF_ROOT . '/assets/images/crown.svg';
1301
+ $crown = '';
1302
+
1303
+ if ( file_exists( $crown_icon ) ) {
1304
+ $crown = sprintf( '<span class="pro-icon-title"> %s</span>', file_get_contents( $crown_icon ) );
1305
+ }
1306
+
1307
+ $gateways['stripe'] = [
1308
+ 'admin_label' => __( 'Credit Card ' . $crown, 'wp-user-frontend' ),
1309
+ 'checkout_label' => __( 'Credit Card', 'wp-user-frontend' ),
1310
+ 'label_class' => 'pro-preview',
1311
+ ];
1312
+
1313
+ return $gateways;
1314
+ }
1315
+
1316
+ /**
1317
+ * The subscription tabs from User Frontend > Subscription > Add/Edit Subscription
1318
+ *
1319
+ * @since 3.6.0
1320
+ *
1321
+ * @return void
1322
+ */
1323
+ public function subscription_tabs() {
1324
+ $crown_icon = WPUF_ROOT . '/assets/images/crown.svg';
1325
+ $crown = '';
1326
+
1327
+ if ( file_exists( $crown_icon ) ) {
1328
+ $crown = sprintf( '<span class="pro-icon-title"> %s</span>', file_get_contents( $crown_icon ) );
1329
+ }
1330
+
1331
+ echo '<li><a href="#taxonomy-restriction"><span class="dashicons dashicons-image-filter"></span> ' . __( 'Taxonomy Restriction ', 'wp-user-frontend' ) . $crown . '</a></li>';
1332
+ }
1333
+
1334
+ /**
1335
+ * The subscription tab contents from User Frontend > Subscription > Add/Edit Subscription
1336
+ *
1337
+ * @since 3.6.0
1338
+ *
1339
+ * @return void
1340
+ */
1341
+ public function subscription_tab_contents() {
1342
+ $allowed_tax_id_arr = get_post_meta( get_the_ID() , '_sub_allowed_term_ids', true );
1343
+ if ( ! $allowed_tax_id_arr ) {
1344
+ $allowed_tax_id_arr = array();
1345
+ }
1346
+ ?>
1347
+ <section id="taxonomy-restriction" class="pro-preview-html">
1348
+ <table class='form-table' method='post'>
1349
+ <tr><?php _e( 'Choose the taxonomy terms you want to enable for this pack:', 'wpuf' ); ?></tr>
1350
+ <tr>
1351
+ <td>
1352
+ <?php
1353
+ $cts = get_taxonomies(array('_builtin'=>true), 'objects'); ?>
1354
+ <?php foreach ($cts as $ct) {
1355
+ if ( is_taxonomy_hierarchical( $ct->name ) ) { ?>
1356
+ <div class="metabox-holder" style="float:left; padding:5px;">
1357
+ <div class="postbox">
1358
+ <h3 class="handle"><span><?php echo $ct->label; ?></span></h3>
1359
+ <div class="inside" style="padding:0 10px;">
1360
+ <div class="taxonomydiv">
1361
+ <div class="tabs-panel" style="height: 200px; overflow-y:auto">
1362
+ <?php
1363
+ $tax_terms = get_terms ( array(
1364
+ 'taxonomy' => $ct->name,
1365
+ 'hide_empty' => false,
1366
+ ) );
1367
+ foreach ($tax_terms as $tax_term) {
1368
+ $selected[] = $tax_term;
1369
+ ?>
1370
+ <ul class="categorychecklist form-no-clear">
1371
+ <input type="checkbox" class="tax-term-class" name="allowed-term[]" value="<?php echo $tax_term->term_id; ?>" <?php echo in_array( $tax_term->term_id, $allowed_tax_id_arr ) ? ' checked="checked"' : ''; ?> name="<?php echo $tax_term->name; ?>" disabled> <?php echo $tax_term->name; ?>
1372
+ </ul>
1373
+ <?php } ?>
1374
+ </div>
1375
+ </div>
1376
+ <p style="padding-left:10px;">
1377
+ <strong><?php echo count( $selected ); ?></strong> <?php echo ( count( $selected ) > 1 || count( $selected ) == 0 ) ? 'categories' : 'category'; ?> total
1378
+ <span class="list-controls" style="float:right; margin-top: 0;">
1379
+ <input type="checkbox" class="select-all" disabled> Select All
1380
+ </span>
1381
+ </p>
1382
+ </div>
1383
+ </div>
1384
+ </div>
1385
+ <?php }
1386
+ } ?>
1387
+ </td>
1388
+
1389
+ <?php
1390
+ $cts = get_taxonomies(array('_builtin'=>false), 'objects'); ?>
1391
+ <?php foreach ($cts as $ct) {
1392
+ if ( is_taxonomy_hierarchical( $ct->name ) ) {
1393
+ $selected = array();
1394
+ ?>
1395
+ <td>
1396
+ <div class="metabox-holder" style="float:left; padding:5px;">
1397
+ <div class="postbox">
1398
+ <h3 class="handle"><span><?php echo $ct->label; ?></span></h3>
1399
+ <div class="inside" style="padding:0 10px;">
1400
+ <div class="taxonomydiv">
1401
+ <div class="tabs-panel" style="height: 200px; overflow-y:auto">
1402
+ <?php
1403
+ $tax_terms = get_terms ( array(
1404
+ 'taxonomy' => $ct->name,
1405
+ 'hide_empty' => false,
1406
+ ) );
1407
+ foreach ($tax_terms as $tax_term) {
1408
+ $selected[] = $tax_term;
1409
+ ?>
1410
+ <ul class="categorychecklist form-no-clear">
1411
+ <input type="checkbox" class="tax-term-class" name="allowed-term[]" value="<?php echo $tax_term->term_id; ?>" <?php echo in_array( $tax_term->term_id, $allowed_tax_id_arr ) ? ' checked="checked"' : ''; ?> name="<?php echo $tax_term->name; ?>" disabled> <?php echo $tax_term->name; ?>
1412
+ </ul>
1413
+ <?php } ?>
1414
+ </div>
1415
+ </div>
1416
+ <p style="padding-left:10px;">
1417
+ <strong><?php echo count( $selected ); ?></strong> <?php echo ( count( $selected ) > 1 || count( $selected ) == 0 ) ? 'categories' : 'category'; ?> total
1418
+ <span class="list-controls" style="float:right; margin-top: 0;">
1419
+ <input type="checkbox" class="select-all" disabled> Select All
1420
+ </span>
1421
+ </p>
1422
+ </div>
1423
+ </div>
1424
+ </div>
1425
+ </td>
1426
+ <?php }
1427
+ } ?>
1428
+ </tr>
1429
+ </table>
1430
+ <?php
1431
+ echo wpuf_get_pro_preview_html();
1432
+ ?>
1433
+ </section>
1434
+
1435
+ <?php
1436
+ }
1437
  }
includes/free/post-form-templates/easy_digital_download.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Easy Digital Downloads post form template preview
4
+ */
5
+ class WPUF_Pro_Form_Preview_EDD {
6
+ /**
7
+ * Template title
8
+ *
9
+ * @var string
10
+ */
11
+ public $title;
12
+
13
+ /**
14
+ * Form Template Image
15
+ *
16
+ * @var string
17
+ */
18
+ public $image;
19
+
20
+ public function __construct() {
21
+ $this->title = __( 'EDD Download', 'wp-user-frontend' );
22
+ $this->image = WPUF_ASSET_URI . '/images/templates/edd.png';
23
+ $this->pro_icon = WPUF_ASSET_URI . '/images/templates/crown.svg';
24
+ }
25
+
26
+ /**
27
+ * Get the template title
28
+ *
29
+ * @return string
30
+ */
31
+ public function get_title() {
32
+ return $this->title ? $this->title : '';
33
+ }
34
+
35
+ /**
36
+ * Get the template image
37
+ *
38
+ * @return string
39
+ */
40
+ public function get_image() {
41
+ return $this->image ? $this->image : '';
42
+ }
43
+
44
+ /**
45
+ * Get the pro icon
46
+ *
47
+ * @return string
48
+ */
49
+ public function get_pro_icon() {
50
+ return $this->pro_icon ? $this->pro_icon : '';
51
+ }
52
+ }
includes/free/post-form-templates/the_events_calendar.php CHANGED
@@ -29,22 +29,23 @@ class WPUF_Post_Form_Template_Events_Calendar extends WPUF_Post_Form_Template {
29
  'wpuf_cond' => $this->conditionals,
30
  ],
31
  [
32
- 'input_type' => 'textarea',
33
- 'template' => 'post_content',
34
- 'required' => 'yes',
35
- 'label' => __( 'Event details', 'wp-user-frontend' ),
36
- 'name' => 'post_content',
37
- 'is_meta' => 'no',
38
- 'help' => __( 'Write the full description of your event', 'wp-user-frontend' ),
39
- 'css' => '',
40
- 'rows' => '5',
41
- 'cols' => '25',
42
- 'placeholder' => '',
43
- 'default' => '',
44
- 'rich' => 'yes',
45
- 'insert_image' => 'yes',
46
- 'word_restriction' => '',
47
- 'wpuf_cond' => $this->conditionals,
 
48
  ],
49
  [
50
  'input_type' => 'date',
@@ -132,20 +133,22 @@ class WPUF_Post_Form_Template_Events_Calendar extends WPUF_Post_Form_Template {
132
  'wpuf_cond' => $this->conditionals,
133
  ],
134
  [
135
- 'input_type' => 'textarea',
136
- 'template' => 'post_excerpt',
137
- 'required' => 'no',
138
- 'label' => __( 'Excerpt', 'wp-user-frontend' ),
139
- 'name' => 'post_excerpt',
140
- 'is_meta' => 'no',
141
- 'help' => __( 'Provide a short description of this event (optional)', 'wp-user-frontend' ),
142
- 'css' => '',
143
- 'rows' => '5',
144
- 'cols' => '25',
145
- 'placeholder' => '',
146
- 'default' => '',
147
- 'rich' => 'no',
148
- 'wpuf_cond' => $this->conditionals,
 
 
149
  ],
150
  [
151
  'input_type' => 'text',
29
  'wpuf_cond' => $this->conditionals,
30
  ],
31
  [
32
+ 'input_type' => 'textarea',
33
+ 'template' => 'post_content',
34
+ 'required' => 'yes',
35
+ 'label' => __( 'Event details', 'wp-user-frontend' ),
36
+ 'name' => 'post_content',
37
+ 'is_meta' => 'no',
38
+ 'help' => __( 'Write the full description of your event', 'wp-user-frontend' ),
39
+ 'css' => '',
40
+ 'rows' => '5',
41
+ 'cols' => '25',
42
+ 'placeholder' => '',
43
+ 'default' => '',
44
+ 'rich' => 'yes',
45
+ 'insert_image' => 'yes',
46
+ 'word_restriction' => '',
47
+ 'wpuf_cond' => $this->conditionals,
48
+ 'text_editor_control' => [],
49
  ],
50
  [
51
  'input_type' => 'date',
133
  'wpuf_cond' => $this->conditionals,
134
  ],
135
  [
136
+ 'input_type' => 'textarea',
137
+ 'template' => 'post_excerpt',
138
+ 'required' => 'no',
139
+ 'label' => __( 'Excerpt', 'wp-user-frontend' ),
140
+ 'name' => 'post_excerpt',
141
+ 'is_meta' => 'no',
142
+ 'help' => __( 'Provide a short description of this event (optional)',
143
+ 'wp-user-frontend' ),
144
+ 'css' => '',
145
+ 'rows' => '5',
146
+ 'cols' => '25',
147
+ 'placeholder' => '',
148
+ 'default' => '',
149
+ 'rich' => 'no',
150
+ 'wpuf_cond' => $this->conditionals,
151
+ 'text_editor_control' => [],
152
  ],
153
  [
154
  'input_type' => 'text',
includes/free/post-form-templates/woocommerce.php CHANGED
@@ -28,38 +28,40 @@ class WPUF_Post_Form_Template_WooCommerce extends WPUF_Post_Form_Template {
28
  'wpuf_cond' => $this->conditionals,
29
  ],
30
  [
31
- 'input_type' => 'textarea',
32
- 'template' => 'post_content',
33
- 'required' => 'yes',
34
- 'label' => 'Product description',
35
- 'name' => 'post_content',
36
- 'is_meta' => 'no',
37
- 'help' => 'Write the full description of your product',
38
- 'css' => '',
39
- 'rows' => '5',
40
- 'cols' => '25',
41
- 'placeholder' => '',
42
- 'default' => '',
43
- 'rich' => 'yes',
44
- 'insert_image' => 'yes',
45
- 'word_restriction' => '',
46
- 'wpuf_cond' => $this->conditionals,
 
47
  ],
48
  [
49
- 'input_type' => 'textarea',
50
- 'template' => 'post_excerpt',
51
- 'required' => 'no',
52
- 'label' => 'Product Short Description',
53
- 'name' => 'post_excerpt',
54
- 'is_meta' => 'no',
55
- 'help' => 'Provide a short description of your product',
56
- 'css' => '',
57
- 'rows' => '5',
58
- 'cols' => '25',
59
- 'placeholder' => '',
60
- 'default' => '',
61
- 'rich' => 'no',
62
- 'wpuf_cond' => $this->conditionals,
 
63
  ],
64
  [
65
  'input_type' => 'text',
@@ -142,21 +144,22 @@ class WPUF_Post_Form_Template_WooCommerce extends WPUF_Post_Form_Template {
142
  'wpuf_cond' => $this->conditionals,
143
  ],
144
  [
145
- 'input_type' => 'textarea',
146
- 'template' => 'textarea_field',
147
- 'required' => 'no',
148
- 'label' => 'Purchase note',
149
- 'name' => '_purchase_note',
150
- 'is_meta' => 'yes',
151
- 'help' => 'Enter an optional note to send to the customer after purchase',
152
- 'css' => '',
153
- 'rows' => '5',
154
- 'cols' => '25',
155
- 'placeholder' => '',
156
- 'default' => '',
157
- 'rich' => 'no',
158
- 'word_restriction' => '',
159
- 'wpuf_cond' => $this->conditionals,
 
160
  ],
161
  [
162
  'input_type' => 'checkbox',
28
  'wpuf_cond' => $this->conditionals,
29
  ],
30
  [
31
+ 'input_type' => 'textarea',
32
+ 'template' => 'post_content',
33
+ 'required' => 'yes',
34
+ 'label' => 'Product description',
35
+ 'name' => 'post_content',
36
+ 'is_meta' => 'no',
37
+ 'help' => 'Write the full description of your product',
38
+ 'css' => '',
39
+ 'rows' => '5',
40
+ 'cols' => '25',
41
+ 'placeholder' => '',
42
+ 'default' => '',
43
+ 'rich' => 'yes',
44
+ 'insert_image' => 'yes',
45
+ 'word_restriction' => '',
46
+ 'wpuf_cond' => $this->conditionals,
47
+ 'text_editor_control' => [],
48
  ],
49
  [
50
+ 'input_type' => 'textarea',
51
+ 'template' => 'post_excerpt',
52
+ 'required' => 'no',
53
+ 'label' => 'Product Short Description',
54
+ 'name' => 'post_excerpt',
55
+ 'is_meta' => 'no',
56
+ 'help' => 'Provide a short description of your product',
57
+ 'css' => '',
58
+ 'rows' => '5',
59
+ 'cols' => '25',
60
+ 'placeholder' => '',
61
+ 'default' => '',
62
+ 'rich' => 'no',
63
+ 'wpuf_cond' => $this->conditionals,
64
+ 'text_editor_control' => [],
65
  ],
66
  [
67
  'input_type' => 'text',
144
  'wpuf_cond' => $this->conditionals,
145
  ],
146
  [
147
+ 'input_type' => 'textarea',
148
+ 'template' => 'textarea_field',
149
+ 'required' => 'no',
150
+ 'label' => 'Purchase note',
151
+ 'name' => '_purchase_note',
152
+ 'is_meta' => 'yes',
153
+ 'help' => 'Enter an optional note to send to the customer after purchase',
154
+ 'css' => '',
155
+ 'rows' => '5',
156
+ 'cols' => '25',
157
+ 'placeholder' => '',
158
+ 'default' => '',
159
+ 'rich' => 'no',
160
+ 'word_restriction' => '',
161
+ 'wpuf_cond' => $this->conditionals,
162
+ 'text_editor_control' => [],
163
  ],
164
  [
165
  'input_type' => 'checkbox',
includes/free/prompt.php CHANGED
@@ -16,4 +16,15 @@ class WPUF_Pro_Prompt {
16
  public static function get_pro_prompt_text() {
17
  return sprintf( 'Available in <a href="%s" target="_blank">Pro Version</a>', self::get_pro_url() );
18
  }
 
 
 
 
 
 
 
 
 
 
 
19
  }
16
  public static function get_pro_prompt_text() {
17
  return sprintf( 'Available in <a href="%s" target="_blank">Pro Version</a>', self::get_pro_url() );
18
  }
19
+
20
+ /**
21
+ * Get the upgrade to pro url from the PRO Prompts
22
+ *
23
+ * @since 3.6.0
24
+ *
25
+ * @return string
26
+ */
27
+ public static function get_upgrade_to_pro_popup_url() {
28
+ return esc_url( 'https://wedevs.com/wp-user-frontend-pro/pricing/?utm_source=wpdashboard&utm_medium=popup' );
29
+ }
30
  }
includes/free/subscription.php CHANGED
@@ -3,9 +3,15 @@
3
  class WPUF_Subscription_Element extends WPUF_Pro_Prompt {
4
 
5
  public static function add_subscription_element( $sub_meta, $hidden_recurring_class, $hidden_trial_class, $obj ) {
 
 
 
 
 
 
6
  ?>
7
- <tr valign="top">
8
- <th><label><?php esc_html_e( 'Recurring', 'wp-user-frontend' ); ?></label></th>
9
  <td>
10
  <label for="wpuf-recuring-pay">
11
  <input type="checkbox" disabled checked size="20" style="" id="wpuf-recuring-pay" value="yes" name="" />
@@ -16,5 +22,6 @@ class WPUF_Subscription_Element extends WPUF_Pro_Prompt {
16
  </td>
17
  </tr>
18
  <?php
 
19
  }
20
  }
3
  class WPUF_Subscription_Element extends WPUF_Pro_Prompt {
4
 
5
  public static function add_subscription_element( $sub_meta, $hidden_recurring_class, $hidden_trial_class, $obj ) {
6
+ $crown_icon = WPUF_ROOT . '/assets/images/crown.svg';
7
+ $crown = '';
8
+
9
+ if ( file_exists( $crown_icon ) ) {
10
+ $crown = sprintf( '<span class="pro-icon-title"> %s</span>', file_get_contents( $crown_icon ) );
11
+ }
12
  ?>
13
+ <tr>
14
+ <th><label><?php esc_html_e( 'Recurring ', 'wp-user-frontend' ); echo $crown; ?></label></th>
15
  <td>
16
  <label for="wpuf-recuring-pay">
17
  <input type="checkbox" disabled checked size="20" style="" id="wpuf-recuring-pay" value="yes" name="" />
22
  </td>
23
  </tr>
24
  <?php
25
+ echo wpuf_get_pro_preview_tooltip();
26
  }
27
  }
includes/upgrades/upgrade-3.6.0.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ function wpuf_upgrade_3_6_0_migration() {
4
+ $args = [
5
+ 'post_type' => 'wpuf_input',
6
+ 'numberposts' => -1,
7
+ ];
8
+
9
+ $input_fields = get_posts( $args );
10
+
11
+ if ( empty( $input_fields ) ) {
12
+ return;
13
+ }
14
+
15
+ foreach ( $input_fields as $field ) {
16
+ if ( empty( $field->post_content ) ) {
17
+ continue;
18
+ }
19
+
20
+ $content = maybe_unserialize( $field->post_content );
21
+
22
+ if ( ! empty( $content['input_type'] ) && 'textarea' === $content['input_type'] && ! isset( $content['text_editor_control'] ) ) {
23
+ $content['text_editor_control'] = [];
24
+
25
+ $field->post_content = maybe_serialize( $content );
26
+
27
+ wp_update_post( $field );
28
+ }
29
+ }
30
+ }
31
+
32
+ wpuf_upgrade_3_6_0_migration();
languages/wp-user-frontend.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the GPL2 or later.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WP User Frontend 3.5.29\n"
6
  "Report-Msgid-Bugs-To: https://wedevs.com/contact/\n"
7
- "POT-Creation-Date: 2022-09-15 12:06:37+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -152,7 +152,6 @@ msgid "Amount"
152
  msgstr ""
153
 
154
  #: admin/class-admin-subscription.php:205 includes/class-privacy.php:478
155
- #: includes/free/subscription.php:8
156
  msgid "Recurring"
157
  msgstr ""
158
 
@@ -176,9 +175,9 @@ msgstr ""
176
  #: includes/fields/class-abstract-fields.php:390
177
  #: includes/fields/class-abstract-fields.php:404
178
  #: includes/fields/class-abstract-fields.php:468
179
- #: includes/fields/class-field-checkbox.php:74
180
- #: includes/fields/class-field-radio.php:83 includes/free/form-element.php:499
181
- #: wpuf.php:717
182
  msgid "Yes"
183
  msgstr ""
184
 
@@ -191,9 +190,9 @@ msgstr ""
191
  #: includes/fields/class-abstract-fields.php:391
192
  #: includes/fields/class-abstract-fields.php:405
193
  #: includes/fields/class-abstract-fields.php:469
194
- #: includes/fields/class-field-checkbox.php:75
195
- #: includes/fields/class-field-radio.php:84 includes/free/form-element.php:500
196
- #: wpuf.php:718
197
  msgid "No"
198
  msgstr ""
199
 
@@ -244,7 +243,7 @@ msgid "Enable Post Expiration"
244
  msgstr ""
245
 
246
  #: admin/class-admin-subscription.php:452
247
- #: admin/class-admin-subscription.php:724 includes/free/form-element.php:67
248
  msgid "Post Expiration Time"
249
  msgstr ""
250
 
@@ -322,29 +321,29 @@ msgstr ""
322
  msgid "Remaining Posting Count"
323
  msgstr ""
324
 
325
- #: admin/class-admin-subscription.php:691
326
  msgid "Subscription Expiration Info"
327
  msgstr ""
328
 
329
- #: admin/class-admin-subscription.php:700
330
  #: includes/class-user-subscription.php:364
331
  #: templates/dashboard/subscription.php:50
332
  msgid "Expire date:"
333
  msgstr ""
334
 
335
- #: admin/class-admin-subscription.php:713
336
  msgid "Post Expiration Enabled"
337
  msgstr ""
338
 
339
- #: admin/class-admin-subscription.php:750
340
  msgid "Allowed Taxonomy Terms"
341
  msgstr ""
342
 
343
- #: admin/class-admin-subscription.php:820
344
  msgid "Assign Package"
345
  msgstr ""
346
 
347
- #: admin/class-admin-subscription.php:821
348
  #: admin/form-builder/class-wpuf-admin-form-builder.php:286
349
  #: class/payment.php:225 class/subscription.php:836
350
  #: includes/class-list-table-subscribers.php:138 lib/appsero/Insights.php:764
@@ -352,24 +351,24 @@ msgstr ""
352
  msgid "Cancel"
353
  msgstr ""
354
 
355
- #: admin/class-admin-subscription.php:827
356
  msgid "Select Package:"
357
  msgstr ""
358
 
359
- #: admin/class-admin-subscription.php:830 admin/settings-options.php:587
360
- #: wpuf-functions.php:210 wpuf-functions.php:1809 wpuf-functions.php:2057
361
  msgid "&mdash; Select &mdash;"
362
  msgstr ""
363
 
364
- #: admin/class-admin-subscription.php:834
365
  msgid "Only non-recurring pack can be assigned"
366
  msgstr ""
367
 
368
- #: admin/class-admin-subscription.php:845
369
  msgid "Delete Package"
370
  msgstr ""
371
 
372
- #: admin/class-admin-subscription.php:899
373
  msgid "Learn more about <a href=\"%s\" target=\"_blank\">Subscription</a>"
374
  msgstr ""
375
 
@@ -383,7 +382,7 @@ msgstr ""
383
 
384
  #: admin/class-tools.php:43 admin/class-tools.php:106
385
  #: admin/post-forms-list-table.php:43 class/transactions-list-table.php:95
386
- #: includes/class-list-table-subscribers.php:136 wpuf-functions.php:3471
387
  msgid "All"
388
  msgstr ""
389
 
@@ -496,6 +495,10 @@ msgstr ""
496
  msgid "Delete Transactions"
497
  msgstr ""
498
 
 
 
 
 
499
  #: admin/form-builder/assets/js/components/builder-stage/template.php:3
500
  msgid "Add fields by dragging the fields from the right sidebar to this area."
501
  msgstr ""
@@ -610,12 +613,12 @@ msgid "Are you sure you want to delete this field?"
610
  msgstr ""
611
 
612
  #: admin/form-builder/class-wpuf-admin-form-builder.php:283
613
- #: admin/posting.php:73 class/asset-loader.php:56 wpuf.php:738
614
  msgid "Yes, delete it"
615
  msgstr ""
616
 
617
  #: admin/form-builder/class-wpuf-admin-form-builder.php:284
618
- #: admin/posting.php:74 class/asset-loader.php:57 wpuf.php:739
619
  msgid "No, cancel it"
620
  msgstr ""
621
 
@@ -633,10 +636,10 @@ msgid "This field must contain at least one choice"
633
  msgstr ""
634
 
635
  #: admin/form-builder/class-wpuf-admin-form-builder.php:289
636
- #: includes/fields/class-field-checkbox.php:101
637
  #: includes/fields/class-field-dropdown.php:105
638
  #: includes/fields/class-field-multidropdown.php:82
639
- #: includes/fields/class-field-radio.php:109
640
  msgid "Option"
641
  msgstr ""
642
 
@@ -739,19 +742,19 @@ msgstr[1] ""
739
  msgid "Form duplicated successfully. <a href=\"%s\">View form.</a>"
740
  msgstr ""
741
 
742
- #: admin/form-template.php:63
743
  msgid "Want a new integration? <a href=\"%s\" target=\"_blank\">Let us know</a>."
744
  msgstr ""
745
 
746
- #: admin/form-template.php:168
747
  msgid "Form Template"
748
  msgstr ""
749
 
750
- #: admin/form-template.php:171
751
  msgid "&mdash; No Template &mdash;"
752
  msgstr ""
753
 
754
- #: admin/form-template.php:179
755
  msgid ""
756
  "If selected a form template, it will try to execute that integration "
757
  "options when new post created and updated."
@@ -811,7 +814,7 @@ msgstr ""
811
  msgid "Registraton Forms"
812
  msgstr ""
813
 
814
- #: admin/form.php:111 includes/free/loader.php:78
815
  msgid "Registration Forms"
816
  msgstr ""
817
 
@@ -1052,7 +1055,7 @@ msgstr ""
1052
  msgid "After how many hours user will be locked from editing the submitted post."
1053
  msgstr ""
1054
 
1055
- #: admin/html/form-settings-post.php:7 class/post-form-templates/post.php:127
1056
  msgid "This page is restricted. Please %login% / %register% to view this page."
1057
  msgstr ""
1058
 
@@ -1305,6 +1308,11 @@ msgstr ""
1305
  msgid "This integration is not installed."
1306
  msgstr ""
1307
 
 
 
 
 
 
1308
  #: admin/html/support.php:187
1309
  msgid "Related Articles:"
1310
  msgstr ""
@@ -1437,929 +1445,959 @@ msgid "Contact Support"
1437
  msgstr ""
1438
 
1439
  #: admin/html/whats-new.php:8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1440
  msgid "Short-code encryption updated for registration page"
1441
  msgstr ""
1442
 
1443
- #: admin/html/whats-new.php:18
1444
  msgid "Updated compatibility with the latest version of WordPress 6.0"
1445
  msgstr ""
1446
 
1447
- #: admin/html/whats-new.php:22
1448
  msgid "Improved some backend implementations"
1449
  msgstr ""
1450
 
1451
- #: admin/html/whats-new.php:32
1452
  msgid "Email template enhanced for after activation"
1453
  msgstr ""
1454
 
1455
- #: admin/html/whats-new.php:36
1456
  msgid "Read only option for custom field"
1457
  msgstr ""
1458
 
1459
- #: admin/html/whats-new.php:40
1460
  msgid "Editor toolbar exclude option enhanced"
1461
  msgstr ""
1462
 
1463
- #: admin/html/whats-new.php:44
1464
  msgid "Preview option enhanced for user profile"
1465
  msgstr ""
1466
 
1467
- #: admin/html/whats-new.php:48
1468
  msgid "Meta key enhanced for user email notification"
1469
  msgstr ""
1470
 
1471
- #: admin/html/whats-new.php:52
1472
  msgid "Global option for disable post edit on account"
1473
  msgstr ""
1474
 
1475
- #: admin/html/whats-new.php:56
1476
  msgid "Filter for conditional logic for fields added"
1477
  msgstr ""
1478
 
1479
- #: admin/html/whats-new.php:60
1480
  msgid "PHP 8 compatibility handled"
1481
  msgstr ""
1482
 
1483
- #: admin/html/whats-new.php:64
1484
  msgid "Address / Billing address inconsistency handled"
1485
  msgstr ""
1486
 
1487
- #: admin/html/whats-new.php:68
1488
  msgid "Content restriction several issue fixed"
1489
  msgstr ""
1490
 
1491
- #: admin/html/whats-new.php:72
1492
  msgid "Tax calculation properly handled for all areas"
1493
  msgstr ""
1494
 
1495
- #: admin/html/whats-new.php:76
1496
  msgid "Validation added for invalid email and URL formats"
1497
  msgstr ""
1498
 
1499
- #: admin/html/whats-new.php:80
1500
  msgid "Special character password handled for login"
1501
  msgstr ""
1502
 
1503
- #: admin/html/whats-new.php:84
1504
  msgid "Reset password handled for sidebar widget"
1505
  msgstr ""
1506
 
1507
- #: admin/html/whats-new.php:88
1508
  msgid "Required google map issues handled"
1509
  msgstr ""
1510
 
1511
- #: admin/html/whats-new.php:92
1512
  msgid "Translation related issue handled for admin menu"
1513
  msgstr ""
1514
 
1515
- #: admin/html/whats-new.php:96
1516
  msgid "Label & query enhanced for transaction table"
1517
  msgstr ""
1518
 
1519
- #: admin/html/whats-new.php:100
1520
  msgid "Template override for child theme fixed"
1521
  msgstr ""
1522
 
1523
- #: admin/html/whats-new.php:104
1524
  msgid "Custom field modal handled for registration form"
1525
  msgstr ""
1526
 
1527
- #: admin/html/whats-new.php:108
1528
  msgid "Redundant CSS issues handled"
1529
  msgstr ""
1530
 
1531
- #: admin/html/whats-new.php:112
1532
  msgid "Address field inconsistency fixed"
1533
  msgstr ""
1534
 
1535
- #: admin/html/whats-new.php:116
1536
  msgid "Plugin page spin loading issue handled"
1537
  msgstr ""
1538
 
1539
- #: admin/html/whats-new.php:120
1540
  msgid "Warning on exit for draft post fixed"
1541
  msgstr ""
1542
 
1543
- #: admin/html/whats-new.php:124
1544
  msgid "Unlimited expire on admin user profile handled"
1545
  msgstr ""
1546
 
1547
- #: admin/html/whats-new.php:128
1548
  msgid "No value checkbox issue handled"
1549
  msgstr ""
1550
 
1551
- #: admin/html/whats-new.php:132
1552
  msgid "Tag search security Vulnerability handled"
1553
  msgstr ""
1554
 
1555
- #: admin/html/whats-new.php:136
1556
  msgid "Multi dropdown field error handled"
1557
  msgstr ""
1558
 
1559
- #: admin/html/whats-new.php:147
1560
  msgid "Promotion notice enhanced through api"
1561
  msgstr ""
1562
 
1563
- #: admin/html/whats-new.php:158
1564
  msgid "Security Vulnerability fixed"
1565
  msgstr ""
1566
 
1567
- #: admin/html/whats-new.php:169
1568
  msgid "Featured item for subscriber"
1569
  msgstr ""
1570
 
1571
- #: admin/html/whats-new.php:173
1572
  msgid "Warning added for unsaved form data on frontend"
1573
  msgstr ""
1574
 
1575
- #: admin/html/whats-new.php:177
1576
  msgid "Settings page search implemented"
1577
  msgstr ""
1578
 
1579
- #: admin/html/whats-new.php:181
1580
  msgid "Editor added for registration form email template"
1581
  msgstr ""
1582
 
1583
- #: admin/html/whats-new.php:185
1584
  msgid "Fallback pay per post not working with when draft enabled"
1585
  msgstr ""
1586
 
1587
- #: admin/html/whats-new.php:189
1588
  msgid "User Dashboard responsive issues fixed"
1589
  msgstr ""
1590
 
1591
- #: admin/html/whats-new.php:193
1592
  msgid "Showing wrong license expire message handled"
1593
  msgstr ""
1594
 
1595
- #: admin/html/whats-new.php:197
1596
  msgid "Remove expire cron handled for once daily"
1597
  msgstr ""
1598
 
1599
- #: admin/html/whats-new.php:201
1600
  msgid "Billing address validation handled"
1601
  msgstr ""
1602
 
1603
- #: admin/html/whats-new.php:205
1604
  msgid "Promotion notice restricted for WPUF menu"
1605
  msgstr ""
1606
 
1607
- #: admin/html/whats-new.php:216
1608
  msgid "reCaptcha issue with other plugin handled"
1609
  msgstr ""
1610
 
1611
- #: admin/html/whats-new.php:220
1612
  msgid "Multiple post type for wpuf dashboard not working fixed"
1613
  msgstr ""
1614
 
1615
- #: admin/html/whats-new.php:224
1616
  msgid "Billing address ajax request issue handled"
1617
  msgstr ""
1618
 
1619
- #: admin/html/whats-new.php:228
1620
  msgid "Halloween promotion notice added"
1621
  msgstr ""
1622
 
1623
- #: admin/html/whats-new.php:239
1624
  msgid "Content restriction for minimum, maximum value enhanced"
1625
  msgstr ""
1626
 
1627
- #: admin/html/whats-new.php:243
1628
  msgid "New option for redirection after pay per post payment in form setting"
1629
  msgstr ""
1630
 
1631
- #: admin/html/whats-new.php:247
1632
  msgid "Controller added for various email notification"
1633
  msgstr ""
1634
 
1635
- #: admin/html/whats-new.php:251
1636
  msgid "Placeholder added for unauth message option"
1637
  msgstr ""
1638
 
1639
- #: admin/html/whats-new.php:255
1640
  msgid "Subscription Post expiration option change to input field"
1641
  msgstr ""
1642
 
1643
- #: admin/html/whats-new.php:259
1644
  msgid "Content restriction message translatable"
1645
  msgstr ""
1646
 
1647
- #: admin/html/whats-new.php:263
1648
  msgid "ACF integration inconsistency handled"
1649
  msgstr ""
1650
 
1651
- #: admin/html/whats-new.php:267
1652
  msgid "Enable payment checkbox handled for child option"
1653
  msgstr ""
1654
 
1655
- #: admin/html/whats-new.php:271
1656
  msgid "Broken asset link handled for custom field popup"
1657
  msgstr ""
1658
 
1659
- #: admin/html/whats-new.php:275
1660
  msgid "Rollback inconsistency for CPT handled"
1661
  msgstr ""
1662
 
1663
- #: admin/html/whats-new.php:279
1664
  msgid "Login form loaded after resetting password"
1665
  msgstr ""
1666
 
1667
- #: admin/html/whats-new.php:283
1668
  msgid "Billing address inconsistency handled"
1669
  msgstr ""
1670
 
1671
- #: admin/html/whats-new.php:287
1672
  msgid "Form duplication on creation handled"
1673
  msgstr ""
1674
 
1675
- #: admin/html/whats-new.php:291
1676
  msgid "Field Dragging inconsistency fixed"
1677
  msgstr ""
1678
 
1679
- #: admin/html/whats-new.php:302
1680
  msgid "Google Map field enhanced along with acf google map"
1681
  msgstr ""
1682
 
1683
- #: admin/html/whats-new.php:306
1684
  msgid "Filter added for dashboard account menu"
1685
  msgstr ""
1686
 
1687
- #: admin/html/whats-new.php:310
1688
  msgid "Fallback Pay Per Post inconsistency handled"
1689
  msgstr ""
1690
 
1691
- #: admin/html/whats-new.php:314
1692
  msgid "Google map search field not showing"
1693
  msgstr ""
1694
 
1695
- #: admin/html/whats-new.php:318
1696
  msgid "Form preview page inconsistency with builder"
1697
  msgstr ""
1698
 
1699
- #: admin/html/whats-new.php:322
1700
  msgid "Category not showing as hierarchy"
1701
  msgstr ""
1702
 
1703
- #: admin/html/whats-new.php:326
1704
  msgid "TOC field randering issue with registration form"
1705
  msgstr ""
1706
 
1707
- #: admin/html/whats-new.php:330
1708
  msgid "Custom plupload filter inconsistency with file upload handled"
1709
  msgstr ""
1710
 
1711
- #: admin/html/whats-new.php:334
1712
  msgid "Guest Pay Per Post inconsistency handled"
1713
  msgstr ""
1714
 
1715
- #: admin/html/whats-new.php:338
1716
  msgid "Responsive and font issue handled"
1717
  msgstr ""
1718
 
1719
- #: admin/html/whats-new.php:349
1720
  msgid "Preview page added for post form and registration form"
1721
  msgstr ""
1722
 
1723
- #: admin/html/whats-new.php:353
1724
  msgid "Post types menu on account page added"
1725
  msgstr ""
1726
 
1727
- #: admin/html/whats-new.php:357
1728
  msgid "Dashboard shortcode attributes enhanced"
1729
  msgstr ""
1730
 
1731
- #: admin/html/whats-new.php:361
1732
  msgid "Account page post type list new design"
1733
  msgstr ""
1734
 
1735
- #: admin/html/whats-new.php:365
1736
  msgid "Payment page restricted from direct unauthenticated access"
1737
  msgstr ""
1738
 
1739
- #: admin/html/whats-new.php:369
1740
  msgid "Timepicker conflict with dokan handled"
1741
  msgstr ""
1742
 
1743
- #: admin/html/whats-new.php:373
1744
  msgid "Trial inconsistency with paypal fixed"
1745
  msgstr ""
1746
 
1747
- #: admin/html/whats-new.php:377
1748
  msgid "Subscription does not cancel with paypal due to profile missing id"
1749
  msgstr ""
1750
 
1751
- #: admin/html/whats-new.php:381
1752
  msgid "Subscription email notification inconsistency fixed"
1753
  msgstr ""
1754
 
1755
- #: admin/html/whats-new.php:385
1756
  msgid "Various issues on payment page for non-logged in user handled"
1757
  msgstr ""
1758
 
1759
- #: admin/html/whats-new.php:389
1760
  msgid "Column inner field cloning inconsistency fixed"
1761
  msgstr ""
1762
 
1763
- #: admin/html/whats-new.php:393
1764
  msgid "Popup z-index changed due to other plugin z-index"
1765
  msgstr ""
1766
 
1767
- #: admin/html/whats-new.php:405
1768
  msgid "Added Mauritian Rupee for currency"
1769
  msgstr ""
1770
 
1771
- #: admin/html/whats-new.php:409
1772
  msgid "Added eid promotional offer notice"
1773
  msgstr ""
1774
 
1775
- #: admin/html/whats-new.php:413
1776
  msgid "Multiple google map validation for same form"
1777
  msgstr ""
1778
 
1779
- #: admin/html/whats-new.php:417
1780
  msgid "Various issues on verification, autologin payments & address field"
1781
  msgstr ""
1782
 
1783
- #: admin/html/whats-new.php:421
1784
  msgid "Docs update for file & attachments feature which is pro only"
1785
  msgstr ""
1786
 
1787
- #: admin/html/whats-new.php:432
1788
  msgid "Overflow footer on form builder page"
1789
  msgstr ""
1790
 
1791
- #: admin/html/whats-new.php:436
1792
  msgid "WordPress 5.7 compatibility"
1793
  msgstr ""
1794
 
1795
- #: admin/html/whats-new.php:440
1796
  msgid "Limited time promotion for weDevs birthday"
1797
  msgstr ""
1798
 
1799
- #: admin/html/whats-new.php:451
1800
  msgid "Meta key will not change if label update"
1801
  msgstr ""
1802
 
1803
- #: admin/html/whats-new.php:455
1804
  msgid "Login redirect empty previous url"
1805
  msgstr ""
1806
 
1807
- #: admin/html/whats-new.php:459
1808
  msgid "Email doesnt set as username"
1809
  msgstr ""
1810
 
1811
- #: admin/html/whats-new.php:463
1812
  msgid "Post redirection to payment doesn't work"
1813
  msgstr ""
1814
 
1815
- #: admin/html/whats-new.php:467
1816
  msgid "Address field not working when used with conditional logic"
1817
  msgstr ""
1818
 
1819
- #: admin/html/whats-new.php:471
1820
  msgid "Ajax type category child of not working"
1821
  msgstr ""
1822
 
1823
- #: admin/html/whats-new.php:475
1824
  msgid "Non recurring subscription did not work"
1825
  msgstr ""
1826
 
1827
- #: admin/html/whats-new.php:486
1828
  msgid "Menu position has chenged due to dokan has same menu position"
1829
  msgstr ""
1830
 
1831
- #: admin/html/whats-new.php:490
1832
  msgid "Drag and drop not working properly for new field"
1833
  msgstr ""
1834
 
1835
- #: admin/html/whats-new.php:501
1836
  msgid "QR and math captcha added to pro feature list"
1837
  msgstr ""
1838
 
1839
- #: admin/html/whats-new.php:505
1840
  msgid "Tooltip for category navigate"
1841
  msgstr ""
1842
 
1843
- #: admin/html/whats-new.php:509
1844
  msgid "Understandable guest payment notice"
1845
  msgstr ""
1846
 
1847
- #: admin/html/whats-new.php:513
1848
  msgid "Paypal non recurring pack id does not set"
1849
  msgstr ""
1850
 
1851
- #: admin/html/whats-new.php:524
1852
  msgid "Once trial subscription is used, it couldn't reset"
1853
  msgstr ""
1854
 
1855
- #: admin/html/whats-new.php:528
1856
  msgid "Subscription cancel doesn't work"
1857
  msgstr ""
1858
 
1859
- #: admin/html/whats-new.php:532
1860
  msgid "The tax rate was not calculated with the total amount"
1861
  msgstr ""
1862
 
1863
- #: admin/html/whats-new.php:536
1864
  msgid "The width of the column field was breaking"
1865
  msgstr ""
1866
 
1867
- #: admin/html/whats-new.php:540
1868
  msgid "Paypal recurring payment"
1869
  msgstr ""
1870
 
1871
- #: admin/html/whats-new.php:551
1872
  msgid "Updated codebase to fix timezone mismatch"
1873
  msgstr ""
1874
 
1875
- #: admin/html/whats-new.php:562
1876
  msgid "Custom html content field's width"
1877
  msgstr ""
1878
 
1879
- #: admin/html/whats-new.php:566
1880
  msgid "All states of New Zealand are added"
1881
  msgstr ""
1882
 
1883
- #: admin/html/whats-new.php:577
1884
  msgid "Get appropriate user id when role based conditions are present"
1885
  msgstr ""
1886
 
1887
- #: admin/html/whats-new.php:581
1888
  msgid "Show Invalid subscription message if wrong pack id passed"
1889
  msgstr ""
1890
 
1891
- #: admin/html/whats-new.php:585
1892
  msgid "URL field new window not working"
1893
  msgstr ""
1894
 
1895
- #: admin/html/whats-new.php:589
1896
  msgid "Option label not working when & use"
1897
  msgstr ""
1898
 
1899
- #: admin/html/whats-new.php:593
1900
  msgid "Ajax type category not showing on edit"
1901
  msgstr ""
1902
 
1903
- #: admin/html/whats-new.php:597
1904
  msgid "Multiple file image can't select"
1905
  msgstr ""
1906
 
1907
- #: admin/html/whats-new.php:601
1908
  msgid "Subscription pack PayPal Checkout gets \"Error: Access Denied\""
1909
  msgstr ""
1910
 
1911
- #: admin/html/whats-new.php:605
1912
  msgid "Conflict image field with acf image field"
1913
  msgstr ""
1914
 
1915
- #: admin/html/whats-new.php:609
1916
  msgid "Missing Auckland State for New Zealand country"
1917
  msgstr ""
1918
 
1919
- #: admin/html/whats-new.php:613
1920
  msgid "Added support for WooCommerce product category value replacemen"
1921
  msgstr ""
1922
 
1923
- #: admin/html/whats-new.php:623
1924
  msgid "Add character restriction feature"
1925
  msgstr ""
1926
 
1927
- #: admin/html/whats-new.php:627
1928
  msgid "Make sure post author edit link works only in frontend"
1929
  msgstr ""
1930
 
1931
- #: admin/html/whats-new.php:631
1932
  msgid "Inconsistency in lost password reset email message"
1933
  msgstr ""
1934
 
1935
- #: admin/html/whats-new.php:635
1936
  msgid "Saving custom taxonomy terms when input type is text"
1937
  msgstr ""
1938
 
1939
- #: admin/html/whats-new.php:639
1940
  msgid "Taxonomy field JS error in builder"
1941
  msgstr ""
1942
 
1943
- #: admin/html/whats-new.php:643
1944
  msgid "Showing WPUF edit link for WP default roles"
1945
  msgstr ""
1946
 
1947
- #: admin/html/whats-new.php:647
1948
  msgid "Upload button unresponsive issue in iOS"
1949
  msgstr ""
1950
 
1951
- #: admin/html/whats-new.php:657
1952
  msgid "Add post edit link for post authors in single or archive pages"
1953
  msgstr ""
1954
 
1955
- #: admin/html/whats-new.php:661
1956
  msgid "Enhance post delete message"
1957
  msgstr ""
1958
 
1959
- #: admin/html/whats-new.php:665
1960
  msgid "Refactor control buttons visibility in form builder"
1961
  msgstr ""
1962
 
1963
- #: admin/html/whats-new.php:669
1964
  msgid "Add missing colons after field label"
1965
  msgstr ""
1966
 
1967
- #: admin/html/whats-new.php:673
1968
  msgid "Post edit map capability condition"
1969
  msgstr ""
1970
 
1971
- #: admin/html/whats-new.php:677
1972
  msgid "Role based permission for accessing a post form"
1973
  msgstr ""
1974
 
1975
- #: admin/html/whats-new.php:681
1976
  msgid "Section-break field alignment"
1977
  msgstr ""
1978
 
1979
- #: admin/html/whats-new.php:685
1980
  msgid "Pay per post doesn't work if subscription pack is activated"
1981
  msgstr ""
1982
 
1983
- #: admin/html/whats-new.php:689
1984
  msgid "Mime type for uploading JSON files"
1985
  msgstr ""
1986
 
1987
- #: admin/html/whats-new.php:693
1988
  msgid "File upload with same file name"
1989
  msgstr ""
1990
 
1991
- #: admin/html/whats-new.php:697
1992
  msgid "Post preview missing fields"
1993
  msgstr ""
1994
 
1995
- #: admin/html/whats-new.php:701
1996
  msgid "Illigal variable declartion"
1997
  msgstr ""
1998
 
1999
- #: admin/html/whats-new.php:705
2000
  msgid "Featured image updating issue"
2001
  msgstr ""
2002
 
2003
- #: admin/html/whats-new.php:709
2004
  msgid "Conflict with Phlox theme"
2005
  msgstr ""
2006
 
2007
- #: admin/html/whats-new.php:713
2008
  msgid "Textarea custom field data sanitization"
2009
  msgstr ""
2010
 
2011
- #: admin/html/whats-new.php:717
2012
  msgid "exclude_type warning in wpuf_category_checklist"
2013
  msgstr ""
2014
 
2015
- #: admin/html/whats-new.php:721
2016
  msgid "Category field not showing all child categories for selection type child of"
2017
  msgstr ""
2018
 
2019
- #: admin/html/whats-new.php:725
2020
  msgid "Conflict between image and file upload custom fields"
2021
  msgstr ""
2022
 
2023
- #: admin/html/whats-new.php:729
2024
  msgid "Login url when login page is not set"
2025
  msgstr ""
2026
 
2027
- #: admin/html/whats-new.php:739
2028
  msgid ""
2029
  "Use common names for Ivory Coast, North Korea and Sourth Korea instead of "
2030
  "their official names"
2031
  msgstr ""
2032
 
2033
- #: admin/html/whats-new.php:743
2034
  msgid "Fix condition to use default avatar"
2035
  msgstr ""
2036
 
2037
- #: admin/html/whats-new.php:747
2038
  msgid "Make Email and URL fields clickable"
2039
  msgstr ""
2040
 
2041
- #: admin/html/whats-new.php:751
2042
  msgid "Fix redirect after user login"
2043
  msgstr ""
2044
 
2045
- #: admin/html/whats-new.php:755
2046
  msgid "Sanitize textarea field data"
2047
  msgstr ""
2048
 
2049
- #: admin/html/whats-new.php:759
2050
  msgid ""
2051
  "Fix missing colon to email, URL, text and textarea labels when renders "
2052
  "their data"
2053
  msgstr ""
2054
 
2055
- #: admin/html/whats-new.php:763
2056
  msgid "Prevent showing empty labels for fields that have render_field_data method"
2057
  msgstr ""
2058
 
2059
- #: admin/html/whats-new.php:773
2060
  msgid "Add Namibian Dollar in currency list"
2061
  msgstr ""
2062
 
2063
- #: admin/html/whats-new.php:777
2064
  msgid "Add sync values option for option data fields"
2065
  msgstr ""
2066
 
2067
- #: admin/html/whats-new.php:781
2068
  msgid "Allow uploading image that having filesize meets php ini settings"
2069
  msgstr ""
2070
 
2071
- #: admin/html/whats-new.php:785
2072
  msgid "Limit the selection of one image at a time"
2073
  msgstr ""
2074
 
2075
- #: admin/html/whats-new.php:789
2076
  msgid "Use file name and size to generate hash to prevent duplicant image upload"
2077
  msgstr ""
2078
 
2079
- #: admin/html/whats-new.php:793
2080
  msgid "Sanitize text and textarea field data"
2081
  msgstr ""
2082
 
2083
- #: admin/html/whats-new.php:797
2084
  msgid ""
2085
  "Show label instead of values for radio, checkbox, dropdown and multiselect "
2086
  "data"
2087
  msgstr ""
2088
 
2089
- #: admin/html/whats-new.php:801
2090
  msgid "Saving custom taxonomies for type text input"
2091
  msgstr ""
2092
 
2093
- #: admin/html/whats-new.php:805
2094
  msgid "Admin settings link for recaptcha helper text"
2095
  msgstr ""
2096
 
2097
- #: admin/html/whats-new.php:809
2098
  msgid "Undefined name property for Custom HTML fields"
2099
  msgstr ""
2100
 
2101
- #: admin/html/whats-new.php:813
2102
  msgid "Delete attachment process"
2103
  msgstr ""
2104
 
2105
- #: admin/html/whats-new.php:817
2106
  msgid "Missing billing address in invoice PDF"
2107
  msgstr ""
2108
 
2109
- #: admin/html/whats-new.php:821
2110
  msgid "Showing country field value in frontend post content"
2111
  msgstr ""
2112
 
2113
- #: admin/html/whats-new.php:825
2114
  msgid "Avatar size display not complying with admin settings size"
2115
  msgstr ""
2116
 
2117
- #: admin/html/whats-new.php:829
2118
  msgid "Display default avatars on admin settings discussion page"
2119
  msgstr ""
2120
 
2121
- #: admin/html/whats-new.php:833
2122
  msgid "Redirect to subscription page at registration"
2123
  msgstr ""
2124
 
2125
- #: admin/html/whats-new.php:837
2126
  msgid "Error notice regarding registration page redirect"
2127
  msgstr ""
2128
 
2129
- #: admin/html/whats-new.php:841
2130
  msgid "Escaping html in registration errors"
2131
  msgstr ""
2132
 
2133
- #: admin/html/whats-new.php:845
2134
  msgid "Default login redirect link"
2135
  msgstr ""
2136
 
2137
- #: admin/html/whats-new.php:849
2138
  msgid "Implementing default WP login page override option"
2139
  msgstr ""
2140
 
2141
- #: admin/html/whats-new.php:853
2142
  msgid "Transparent background of autosuggestion dropdown"
2143
  msgstr ""
2144
 
2145
- #: admin/html/whats-new.php:863
2146
  msgid "Import forms system"
2147
  msgstr ""
2148
 
2149
- #: admin/html/whats-new.php:867
2150
  msgid "Password reset system"
2151
  msgstr ""
2152
 
2153
- #: admin/html/whats-new.php:871
2154
  msgid "Updated url validation regex to support modern tlds"
2155
  msgstr ""
2156
 
2157
- #: admin/html/whats-new.php:875
2158
  msgid "Export WPUF forms individually from admin tools page"
2159
  msgstr ""
2160
 
2161
- #: admin/html/whats-new.php:879
2162
  msgid "Subscription cycle label translation issue"
2163
  msgstr ""
2164
 
2165
- #: admin/html/whats-new.php:883
2166
  msgid "ACF integration for checkbox fields"
2167
  msgstr ""
2168
 
2169
- #: admin/html/whats-new.php:887
2170
  msgid "Illegal string offset warning while updating settings"
2171
  msgstr ""
2172
 
2173
- #: admin/html/whats-new.php:891
2174
  msgid "Conditional logic for Section Break field"
2175
  msgstr ""
2176
 
2177
- #: admin/html/whats-new.php:895
2178
  msgid "Subscriptions cannot be deleted from backend"
2179
  msgstr ""
2180
 
2181
- #: admin/html/whats-new.php:899
2182
  msgid "A regression regarding saving checkbox data"
2183
  msgstr ""
2184
 
2185
- #: admin/html/whats-new.php:903
2186
  msgid "Default value of multi-select fields is not showing"
2187
  msgstr ""
2188
 
2189
- #: admin/html/whats-new.php:913
2190
  msgid "Hide post edit option when subscription is expired"
2191
  msgstr ""
2192
 
2193
- #: admin/html/whats-new.php:915
2194
  msgid "Hide post edit option from users whose subscription pack is expired."
2195
  msgstr ""
2196
 
2197
- #: admin/html/whats-new.php:918
2198
  msgid "Check files to prevent duplicity in media upload"
2199
  msgstr ""
2200
 
2201
- #: admin/html/whats-new.php:920
2202
  msgid ""
2203
  "A simple measure has been taken to prevent maliciously flooding the site by "
2204
  "uploading same file multiple times. Though this won't work with already "
2205
  "uploaded medias."
2206
  msgstr ""
2207
 
2208
- #: admin/html/whats-new.php:923
2209
  msgid "Refactor address fields in Account section"
2210
  msgstr ""
2211
 
2212
- #: admin/html/whats-new.php:925
2213
  msgid "Address edit section from Account section has been rewritten to improve UX."
2214
  msgstr ""
2215
 
2216
- #: admin/html/whats-new.php:928
2217
  msgid "Update Paypal payment gateway"
2218
  msgstr ""
2219
 
2220
- #: admin/html/whats-new.php:930
2221
  msgid "Paypal payment gateway has seen some improvements."
2222
  msgstr ""
2223
 
2224
- #: admin/html/whats-new.php:933
2225
  msgid "Default Category selection improvements"
2226
  msgstr ""
2227
 
2228
- #: admin/html/whats-new.php:935
2229
  msgid ""
2230
  "An intuitive way of selecting default category of a selected post type has "
2231
  "been introduced."
2232
  msgstr ""
2233
 
2234
- #: admin/html/whats-new.php:938
2235
  msgid "Compatibility issue with ACF date time field"
2236
  msgstr ""
2237
 
2238
- #: admin/html/whats-new.php:940
2239
  msgid "A Compatibility issue with ACF date time field has been addressed."
2240
  msgstr ""
2241
 
2242
- #: admin/html/whats-new.php:943
2243
  msgid "Media title, caption & description not saving"
2244
  msgstr ""
2245
 
2246
- #: admin/html/whats-new.php:945
2247
  msgid ""
2248
  "Media title, caption & description were not saving from frontend. They will "
2249
  "now."
2250
  msgstr ""
2251
 
2252
- #: admin/html/whats-new.php:948
2253
  msgid ""
2254
  "The Events Calendar venue and organizer fields issue in WPUF Custom Fields "
2255
  "metabox"
2256
  msgstr ""
2257
 
2258
- #: admin/html/whats-new.php:950
2259
  msgid ""
2260
  "A workaround has been introduced to save The Events Calendar Venue and "
2261
  "Organizer fields properly from WPUF Custom Fields metabox."
2262
  msgstr ""
2263
 
2264
- #: admin/html/whats-new.php:953
2265
  msgid "Checkbox data not saving from WPUF Custom Fields metabox"
2266
  msgstr ""
2267
 
2268
- #: admin/html/whats-new.php:955
2269
  msgid ""
2270
  "Checkboxe data from WPUF Custom Fields metabox were not saving. It has been "
2271
  "fixed."
2272
  msgstr ""
2273
 
2274
- #: admin/html/whats-new.php:958
2275
  msgid "Multi-column Repeater field data saving issue"
2276
  msgstr ""
2277
 
2278
- #: admin/html/whats-new.php:960
2279
  msgid ""
2280
  "Multi-column Repeater field data from a form was not saving. It has been "
2281
  "fixed."
2282
  msgstr ""
2283
 
2284
- #: admin/html/whats-new.php:963
2285
  msgid "Multistep form conflict with Elementor"
2286
  msgstr ""
2287
 
2288
- #: admin/html/whats-new.php:965
2289
  msgid "Multistep form had a conflict with Elementor. It has been fixed."
2290
  msgstr ""
2291
 
2292
- #: admin/html/whats-new.php:968
2293
  msgid "Multiple images showing issue in frontend"
2294
  msgstr ""
2295
 
2296
- #: admin/html/whats-new.php:970
2297
  msgid "Multiple images in a post were not showing in frontend. Now they will."
2298
  msgstr ""
2299
 
2300
- #: admin/html/whats-new.php:979
2301
  msgid "Nonce not verify on login"
2302
  msgstr ""
2303
 
2304
- #: admin/html/whats-new.php:981
2305
  msgid "Return of function wp_verify_nonce() was ignored."
2306
  msgstr ""
2307
 
2308
- #: admin/html/whats-new.php:990
2309
  msgid "Option to set which tab shows as active on the account page"
2310
  msgstr ""
2311
 
2312
- #: admin/html/whats-new.php:992
2313
  msgid ""
2314
  "Option to set which tab shows as active on the account page. To configure "
2315
  "this setting navigate to wp-admin->User Frontend->Settings->My "
2316
  "Account->Active Tab "
2317
  msgstr ""
2318
 
2319
- #: admin/html/whats-new.php:995
2320
  msgid "Unlock option was unavailable after the post being locked"
2321
  msgstr ""
2322
 
2323
- #: admin/html/whats-new.php:997
2324
  msgid "Unlock option was unavailable after the post being locked."
2325
  msgstr ""
2326
 
2327
- #: admin/html/whats-new.php:1000
2328
  msgid "Gutenberg block of WPUF didn't work on bedrock installation"
2329
  msgstr ""
2330
 
2331
- #: admin/html/whats-new.php:1002
2332
  msgid "Gutenberg block of WPUF didn't work on bedrock installation."
2333
  msgstr ""
2334
 
2335
- #: admin/html/whats-new.php:1005
2336
  msgid "Sending admin payment received email twice"
2337
  msgstr ""
2338
 
2339
- #: admin/html/whats-new.php:1007
2340
  msgid ""
2341
  "After processing payment admin & user was receiving payment received email "
2342
  "twice."
2343
  msgstr ""
2344
 
2345
- #: admin/html/whats-new.php:1010
2346
  msgid ""
2347
  "Add shortcode support to display post information in the Post Expiration "
2348
  "Message"
2349
  msgstr ""
2350
 
2351
- #: admin/html/whats-new.php:1012
2352
  msgid ""
2353
  "Add shortcode support to display post information in the Post Expiration "
2354
  "Message. You can use: <strong>{post_author} {post_url} {blogname} "
2355
  "{post_title} {post_status}</strong>"
2356
  msgstr ""
2357
 
2358
- #: admin/html/whats-new.php:1015
2359
  msgid "Add optin on the setup wizard"
2360
  msgstr ""
2361
 
2362
- #: admin/html/whats-new.php:1017
2363
  msgid ""
2364
  "Added optin on the setup wizard, admin can choose whether he/she wants to "
2365
  "share server environment details (php, mysql, server, WordPress versions), "
@@ -2367,126 +2405,126 @@ msgid ""
2367
  "name and url, admin name and email address. No sensitive data is tracked"
2368
  msgstr ""
2369
 
2370
- #: admin/html/whats-new.php:1026
2371
  msgid "Post Owner problem"
2372
  msgstr ""
2373
 
2374
- #: admin/html/whats-new.php:1028
2375
  msgid ""
2376
  "Posts were not assigned to the selected default post owner, this issue has "
2377
  "been fixed."
2378
  msgstr ""
2379
 
2380
- #: admin/html/whats-new.php:1031
2381
  msgid "Google reCaptcha was not working"
2382
  msgstr ""
2383
 
2384
- #: admin/html/whats-new.php:1033
2385
  msgid ""
2386
  "Google reCaptcha was not working, users could submit the form without "
2387
  "reCaptcha validation."
2388
  msgstr ""
2389
 
2390
- #: admin/html/whats-new.php:1042
2391
  msgid "Added column field"
2392
  msgstr ""
2393
 
2394
- #: admin/html/whats-new.php:1047
2395
  msgid "Unable to render the events on the front-end dashboard"
2396
  msgstr ""
2397
 
2398
- #: admin/html/whats-new.php:1049
2399
  msgid ""
2400
  "On the frontend dashboard, the submitted events were not showing, you will "
2401
  "get it fixed in this version."
2402
  msgstr ""
2403
 
2404
- #: admin/html/whats-new.php:1052
2405
  msgid "Page order getting 0(zero) after editing from the frontend"
2406
  msgstr ""
2407
 
2408
- #: admin/html/whats-new.php:1054
2409
  msgid ""
2410
  "Page order was not saving while editing a post using WPUF form, it has been "
2411
  "fixed."
2412
  msgstr ""
2413
 
2414
- #: admin/html/whats-new.php:1057
2415
  msgid "Text input field for taxonomies not working"
2416
  msgstr ""
2417
 
2418
- #: admin/html/whats-new.php:1059
2419
  msgid ""
2420
  "When taxonomy field type is set to `Text Input` then a fatal error was "
2421
  "showing on the frontend, no error with taxonomy field in the latest version."
2422
  msgstr ""
2423
 
2424
- #: admin/html/whats-new.php:1062
2425
  msgid ""
2426
  "In radio and checkbox field use conditional logic that value does not save "
2427
  "in database"
2428
  msgstr ""
2429
 
2430
- #: admin/html/whats-new.php:1064
2431
  msgid ""
2432
  "The selected value of radio and checkbox field were not showing while "
2433
  "editing posts from the backend or frontend, you can see the selected value "
2434
  "in this version."
2435
  msgstr ""
2436
 
2437
- #: admin/html/whats-new.php:1067
2438
  msgid "The args param not working with get_avatar filter"
2439
  msgstr ""
2440
 
2441
- #: admin/html/whats-new.php:1069
2442
  msgid "The args parameter did not exist with get_avatar filter, which now exists."
2443
  msgstr ""
2444
 
2445
- #: admin/html/whats-new.php:1072
2446
  msgid "The item in ajax taxonomy field was not selected"
2447
  msgstr ""
2448
 
2449
- #: admin/html/whats-new.php:1074
2450
  msgid ""
2451
  "When the taxonomy field type is set to Ajax, the submitted terms were not "
2452
  "showing in the backend and frontend which have been fixed."
2453
  msgstr ""
2454
 
2455
- #: admin/html/whats-new.php:1083
2456
  msgid "Unable to send new user registration email"
2457
  msgstr ""
2458
 
2459
- #: admin/html/whats-new.php:1085
2460
  msgid ""
2461
  "WP User Frontend default registration form `[wpuf-registration]` was unable "
2462
  "to send the new user registration email."
2463
  msgstr ""
2464
 
2465
- #: admin/html/whats-new.php:1088
2466
  msgid "WPUF forms block compatibility issue with the latest WP version"
2467
  msgstr ""
2468
 
2469
- #: admin/html/whats-new.php:1090
2470
  msgid ""
2471
  "With the latest version of WordPress the gutenberg block of WP User "
2472
  "Frontend were not working. In this version, you will get it fixed."
2473
  msgstr ""
2474
 
2475
- #: admin/html/whats-new.php:1093
2476
  msgid "Page not update where `[wpuf_dashboard]` shortcode exist"
2477
  msgstr ""
2478
 
2479
- #: admin/html/whats-new.php:1095
2480
  msgid ""
2481
  "While using Gutenberg, the page were not being updated with WPUF shortcode "
2482
  "[wpuf dashboard]"
2483
  msgstr ""
2484
 
2485
- #: admin/html/whats-new.php:1098
2486
  msgid "Retain default when determining whether to display the admin bar"
2487
  msgstr ""
2488
 
2489
- #: admin/html/whats-new.php:1100
2490
  msgid ""
2491
  "From the User Frontend Settings, set that Administrator, Editor, Vendor can "
2492
  "see the admin bar. Now, the super admin want, one specific user ( who has "
@@ -2496,11 +2534,11 @@ msgid ""
2496
  "frontend."
2497
  msgstr ""
2498
 
2499
- #: admin/html/whats-new.php:1103
2500
  msgid "Fatal error when use PHP lower version (5.4 or lower)"
2501
  msgstr ""
2502
 
2503
- #: admin/html/whats-new.php:1105
2504
  msgid ""
2505
  "It was unable to install WP User Frontend with PHP 5.4 or lower version. "
2506
  "Here is the error details: <br><br><strong>Fatal error: Can't use method "
@@ -2508,42 +2546,42 @@ msgid ""
2508
  "/wp-user-frontend/class/frontend-form-post.php on line 194</strong>"
2509
  msgstr ""
2510
 
2511
- #: admin/html/whats-new.php:1108
2512
  msgid "Product form was unable to show the single gallery image"
2513
  msgstr ""
2514
 
2515
- #: admin/html/whats-new.php:1110
2516
  msgid ""
2517
  "When user upload single image for product gallery using WPUF WooCommerce "
2518
  "product form, that image were not showing on the frontend."
2519
  msgstr ""
2520
 
2521
- #: admin/html/whats-new.php:1119
2522
  msgid "WooCommerce gallery images not getting saved"
2523
  msgstr ""
2524
 
2525
- #: admin/html/whats-new.php:1121
2526
  msgid ""
2527
  "After releasing version 2.9.3, WooCommerce gallery image field stopped "
2528
  "working. You will get it fixed in this version."
2529
  msgstr ""
2530
 
2531
- #: admin/html/whats-new.php:1130
2532
  msgid "The Events Calendar Integration Form"
2533
  msgstr ""
2534
 
2535
- #: admin/html/whats-new.php:1132
2536
  msgid ""
2537
  "Now admin can allow users to create event from the frontend. Currently WPUF "
2538
  "has a one click pre-build event form that has been integrated with The "
2539
  "Events Calendar plugin"
2540
  msgstr ""
2541
 
2542
- #: admin/html/whats-new.php:1135
2543
  msgid "Post Submission Facility From Account Page"
2544
  msgstr ""
2545
 
2546
- #: admin/html/whats-new.php:1137
2547
  msgid ""
2548
  "On the frontend account page, added a new menu item named <b>Submit "
2549
  "Post</b>. Now admin can allow users to submit post from their default "
@@ -2552,504 +2590,504 @@ msgid ""
2552
  "you can assign any post form that will use to submit posts."
2553
  msgstr ""
2554
 
2555
- #: admin/html/whats-new.php:1140
2556
  msgid "Login/Lost Password Link Under Registration Form"
2557
  msgstr ""
2558
 
2559
- #: admin/html/whats-new.php:1142
2560
  msgid "Added Login/Lost Password link under registration form"
2561
  msgstr ""
2562
 
2563
- #: admin/html/whats-new.php:1151
2564
  msgid "Added drag and drop image ordering on image upload"
2565
  msgstr ""
2566
 
2567
- #: admin/html/whats-new.php:1153
2568
  msgid ""
2569
  "Now frontend users can drag & drop the images/files to change the order "
2570
  "while uploading."
2571
  msgstr ""
2572
 
2573
- #: admin/html/whats-new.php:1156
2574
  msgid "Added reCAPTCHA field in login form"
2575
  msgstr ""
2576
 
2577
- #: admin/html/whats-new.php:1158
2578
  msgid ""
2579
  "Admin has the option to show reCAPTCHA field in login form. Check the "
2580
  "related settings from <strong>User Frontend > Settings > "
2581
  "Login/Registration</strong>"
2582
  msgstr ""
2583
 
2584
- #: admin/html/whats-new.php:1161
2585
  msgid "Added preview option in forms"
2586
  msgstr ""
2587
 
2588
- #: admin/html/whats-new.php:1163
2589
  msgid ""
2590
  "You can see a nice <strong>Preview</strong> button with <strong>Save "
2591
  "Form</strong> button, admin can take a quick look of the form without using "
2592
  "shortcode"
2593
  msgstr ""
2594
 
2595
- #: admin/html/whats-new.php:1166
2596
  msgid "Fixed hiding “Select Image” button while uploading multiple images."
2597
  msgstr ""
2598
 
2599
- #: admin/html/whats-new.php:1168
2600
  msgid ""
2601
  "The upload button will not be hidden until the user selects max number of "
2602
  "files "
2603
  msgstr ""
2604
 
2605
- #: admin/html/whats-new.php:1171
2606
  msgid "Added form limit notice before form submission"
2607
  msgstr ""
2608
 
2609
- #: admin/html/whats-new.php:1173
2610
  msgid ""
2611
  "Limit notice message was showing after submission, now it is showing when "
2612
  "rendering the form"
2613
  msgstr ""
2614
 
2615
- #: admin/html/whats-new.php:1176
2616
  msgid "Fixed: default post category not saving"
2617
  msgstr ""
2618
 
2619
- #: admin/html/whats-new.php:1178
2620
  msgid ""
2621
  "From the form <strong>Settings > Post Settings</strong>, default post "
2622
  "category options were not saving. Now, it's fixed."
2623
  msgstr ""
2624
 
2625
- #: admin/html/whats-new.php:1181
2626
  msgid ""
2627
  "WPUF dashboard shortcode with form_id attribute was not showing posts "
2628
  "properly"
2629
  msgstr ""
2630
 
2631
- #: admin/html/whats-new.php:1183
2632
  msgid ""
2633
  "Now you can list posts on the frontend by using <strong>form_id<strong/> "
2634
  "attribute with <strong>[wpuf_dashboard]</strong> shortcode"
2635
  msgstr ""
2636
 
2637
- #: admin/html/whats-new.php:1192
2638
  msgid "Changed text domain to `wp-user-frontend` from `wpuf` "
2639
  msgstr ""
2640
 
2641
- #: admin/html/whats-new.php:1194
2642
  msgid ""
2643
  "If you are using other language than English. Please <b>rename</b> your "
2644
  "<i>.po and .mo </i> files to `wp-user-frontend_` from `wpuf_` <br> This "
2645
  "change was made to support translations from translate.wordpress.org"
2646
  msgstr ""
2647
 
2648
- #: admin/html/whats-new.php:1197
2649
  msgid "Added WP User Frontend Data export and erase functionality."
2650
  msgstr ""
2651
 
2652
- #: admin/html/whats-new.php:1199
2653
  msgid "Added functionality to export WP User Frontend Data to comply with GDPR."
2654
  msgstr ""
2655
 
2656
- #: admin/html/whats-new.php:1202
2657
  msgid "Added billing address customizer."
2658
  msgstr ""
2659
 
2660
- #: admin/html/whats-new.php:1204
2661
  msgid "Added customizer options for billing address in payment page."
2662
  msgstr ""
2663
 
2664
- #: admin/html/whats-new.php:1207
2665
  msgid "Make the payment page responsive."
2666
  msgstr ""
2667
 
2668
- #: admin/html/whats-new.php:1209
2669
  msgid "Some css adjustments are made in payment page to make it responsive."
2670
  msgstr ""
2671
 
2672
- #: admin/html/whats-new.php:1212
2673
  msgid "Fixed image upload issue in Safari."
2674
  msgstr ""
2675
 
2676
- #: admin/html/whats-new.php:1214
2677
  msgid "Images were not showing after upload in safari, it is fixed now."
2678
  msgstr ""
2679
 
2680
- #: admin/html/whats-new.php:1217
2681
  msgid "Post update issue after updating or removing post images."
2682
  msgstr ""
2683
 
2684
- #: admin/html/whats-new.php:1219
2685
  msgid ""
2686
  "Posts cannot be updated after updating or removing post images, it is fixed "
2687
  "now."
2688
  msgstr ""
2689
 
2690
- #: admin/html/whats-new.php:1228
2691
  msgid "Allow overriding form input styles using theme styling."
2692
  msgstr ""
2693
 
2694
- #: admin/html/whats-new.php:1230
2695
  msgid "Overriding form input styles using theme style is now possible."
2696
  msgstr ""
2697
 
2698
- #: admin/html/whats-new.php:1233
2699
  msgid "Fixed Auto Login after registration."
2700
  msgstr ""
2701
 
2702
- #: admin/html/whats-new.php:1235
2703
  msgid "Auto Login after registration was not working is fixed now."
2704
  msgstr ""
2705
 
2706
- #: admin/html/whats-new.php:1238
2707
  msgid "Fixed fallback cost calculation"
2708
  msgstr ""
2709
 
2710
- #: admin/html/whats-new.php:1240
2711
  msgid "Fallback cost calculation was inaccurate for some cases, it is fixed now."
2712
  msgstr ""
2713
 
2714
- #: admin/html/whats-new.php:1243
2715
  msgid "Removal of subscription from User Profile gets reverted if updated"
2716
  msgstr ""
2717
 
2718
- #: admin/html/whats-new.php:1245
2719
  msgid "User subscription deletion gets reverted if updated is fixed."
2720
  msgstr ""
2721
 
2722
- #: admin/html/whats-new.php:1248
2723
  msgid "Show Free pack users in subscribers list."
2724
  msgstr ""
2725
 
2726
- #: admin/html/whats-new.php:1250
2727
  msgid "Free pack users were not showing in subscribers list, now they will."
2728
  msgstr ""
2729
 
2730
- #: admin/html/whats-new.php:1259
2731
  msgid "WP User Frontend Guten Block is added"
2732
  msgstr ""
2733
 
2734
- #: admin/html/whats-new.php:1261
2735
  msgid ""
2736
  "WPUF Form Block is now available to be used within gutenberg editor with "
2737
  "preview of the form. "
2738
  msgstr ""
2739
 
2740
- #: admin/html/whats-new.php:1264
2741
  msgid "Advanced Custom Fields plugin compatibility"
2742
  msgstr ""
2743
 
2744
- #: admin/html/whats-new.php:1266
2745
  msgid "Now all your ACF fields can be used within WPUF Post forms. "
2746
  msgstr ""
2747
 
2748
- #: admin/html/whats-new.php:1269
2749
  msgid "Taxonomy Terms not showing for custom post types"
2750
  msgstr ""
2751
 
2752
- #: admin/html/whats-new.php:1271
2753
  msgid ""
2754
  "Fixed an issue with taxonomy terms not appearing for Custom Post types "
2755
  "within Form Settings and Dashboard Post Listing"
2756
  msgstr ""
2757
 
2758
- #: admin/html/whats-new.php:1274
2759
  msgid "Various other code optimizations"
2760
  msgstr ""
2761
 
2762
- #: admin/html/whats-new.php:1276 admin/html/whats-new.php:1333
2763
  msgid "Code structure organization and optimization for better performance"
2764
  msgstr ""
2765
 
2766
- #: admin/html/whats-new.php:1285
2767
  msgid "WoooCommerce billing address Sync"
2768
  msgstr ""
2769
 
2770
- #: admin/html/whats-new.php:1287
2771
  msgid ""
2772
  "If an existing customer has previously set his billing address, that will "
2773
  "be imported into WPUF Billing address "
2774
  msgstr ""
2775
 
2776
- #: admin/html/whats-new.php:1290
2777
  msgid "Trial subscription message not showing properly"
2778
  msgstr ""
2779
 
2780
- #: admin/html/whats-new.php:1292
2781
  msgid "Subscriptions with Trial now shows trial notices"
2782
  msgstr ""
2783
 
2784
- #: admin/html/whats-new.php:1295
2785
  msgid "Reset email Key not working"
2786
  msgstr ""
2787
 
2788
- #: admin/html/whats-new.php:1297
2789
  msgid "Reset Email key was not working in some cases"
2790
  msgstr ""
2791
 
2792
- #: admin/html/whats-new.php:1300
2793
  msgid "Post count not showing on the frontend dashboard"
2794
  msgstr ""
2795
 
2796
- #: admin/html/whats-new.php:1302
2797
  msgid ""
2798
  "Dashboard with multiple post type was not showing post counts properly, is "
2799
  "now fixed and shows count for each post type"
2800
  msgstr ""
2801
 
2802
- #: admin/html/whats-new.php:1305
2803
  msgid "Login Redirect showing blank page is fixed"
2804
  msgstr ""
2805
 
2806
- #: admin/html/whats-new.php:1307
2807
  msgid ""
2808
  "If \"Previous Page\" was set for redirection, login redirect was "
2809
  "redirecting to blank page for users who hit login page directly"
2810
  msgstr ""
2811
 
2812
- #: admin/html/whats-new.php:1316
2813
  msgid "Enhanced Login Redirect to redirect users to previous page"
2814
  msgstr ""
2815
 
2816
- #: admin/html/whats-new.php:1318
2817
  msgid ""
2818
  "You can choose Previous Page as Login Redirect page settings now to "
2819
  "redirect users to the page from which they went for Login. "
2820
  msgstr ""
2821
 
2822
- #: admin/html/whats-new.php:1321
2823
  msgid "Email HTML links not Rendreing properly issue is fixed"
2824
  msgstr ""
2825
 
2826
- #: admin/html/whats-new.php:1323
2827
  msgid ""
2828
  "For some clients emails were not rendering the HTML links properly, this is "
2829
  "now fixed"
2830
  msgstr ""
2831
 
2832
- #: admin/html/whats-new.php:1326
2833
  msgid "Form Builder : Form Field's Help text styles not showing properly"
2834
  msgstr ""
2835
 
2836
- #: admin/html/whats-new.php:1328
2837
  msgid "Help texts styling is now fixed and much easier to read and understand"
2838
  msgstr ""
2839
 
2840
- #: admin/html/whats-new.php:1331
2841
  msgid "Various other code improvements"
2842
  msgstr ""
2843
 
2844
- #: admin/html/whats-new.php:1342
2845
  msgid "Dashboard Post Listing now supports multiple post types"
2846
  msgstr ""
2847
 
2848
- #: admin/html/whats-new.php:1344
2849
  msgid ""
2850
  "Now you can show multiple post type in user dashboard using shortcode like "
2851
  "this : <br><b>[wpuf_dashboard post_type=\"post,page,custom_type\"]</b> "
2852
  msgstr ""
2853
 
2854
- #: admin/html/whats-new.php:1347
2855
  msgid "Added Login Redirect Settings"
2856
  msgstr ""
2857
 
2858
- #: admin/html/whats-new.php:1349
2859
  msgid ""
2860
  "You can now set a page from <i>WPUF Settings > Login/Registration > "
2861
  "Redirect after Login</i>. When login redirection is active the user will be "
2862
  "redirected to this page after login."
2863
  msgstr ""
2864
 
2865
- #: admin/html/whats-new.php:1352
2866
  msgid "Image Upload field button text can be changed"
2867
  msgstr ""
2868
 
2869
- #: admin/html/whats-new.php:1354
2870
  msgid ""
2871
  "The upload button text can now be changed for image upload fields which "
2872
  "defaults to \"Select Image\" if not set. "
2873
  msgstr ""
2874
 
2875
- #: admin/html/whats-new.php:1357
2876
  msgid "Multi Step Form styles made compatible with more themes"
2877
  msgstr ""
2878
 
2879
- #: admin/html/whats-new.php:1359
2880
  msgid "Multi Step form can now be styled more easily with other themes "
2881
  msgstr ""
2882
 
2883
- #: admin/html/whats-new.php:1362
2884
  msgid "Required field condition for google map not working is fixed"
2885
  msgstr ""
2886
 
2887
- #: admin/html/whats-new.php:1364
2888
  msgid ""
2889
  "If Google Map field was set as required users were able to submit form "
2890
  "without changing the default value."
2891
  msgstr ""
2892
 
2893
- #: admin/html/whats-new.php:1373
2894
  msgid "Admin form builder is now fully responsive."
2895
  msgstr ""
2896
 
2897
- #: admin/html/whats-new.php:1375
2898
  msgid ""
2899
  "Now you can edit forms from your mobile devices directly. Our improved "
2900
  "responsive layouts of form builder makes it easy for you to build forms on "
2901
  "the go."
2902
  msgstr ""
2903
 
2904
- #: admin/html/whats-new.php:1378
2905
  msgid "Added color schemes for creating attractive form layouts."
2906
  msgstr ""
2907
 
2908
- #: admin/html/whats-new.php:1380
2909
  msgid ""
2910
  "We have added 3 new color schemes for the form layouts which you can choose "
2911
  "from each form's new display settings."
2912
  msgstr ""
2913
 
2914
- #: admin/html/whats-new.php:1383
2915
  msgid "Restrict Free subscription pack to be enabled multiple times "
2916
  msgstr ""
2917
 
2918
- #: admin/html/whats-new.php:1385
2919
  msgid ""
2920
  "Free subscription packs now can only be purchased once and the limit "
2921
  "applies properly"
2922
  msgstr ""
2923
 
2924
- #: admin/html/whats-new.php:1388
2925
  msgid "Various other bug fixes and improvements were made "
2926
  msgstr ""
2927
 
2928
- #: admin/html/whats-new.php:1390
2929
  msgid "Please see the change log to see full details."
2930
  msgstr ""
2931
 
2932
- #: admin/html/whats-new.php:1399
2933
  msgid "Added upgrade function for default category"
2934
  msgstr ""
2935
 
2936
- #: admin/html/whats-new.php:1401
2937
  msgid "Upgrader added to upgrade previously set default post category."
2938
  msgstr ""
2939
 
2940
- #: admin/html/whats-new.php:1404
2941
  msgid "Subscription pack cannot be canceled"
2942
  msgstr ""
2943
 
2944
- #: admin/html/whats-new.php:1406
2945
  msgid ""
2946
  "Fixed recurring subscription pack cannot be canceled from my account page "
2947
  "in subscription details section."
2948
  msgstr ""
2949
 
2950
- #: admin/html/whats-new.php:1409
2951
  msgid "page installer admin notice logic issue"
2952
  msgstr ""
2953
 
2954
- #: admin/html/whats-new.php:1411
2955
  msgid ""
2956
  "Fixed page installer admin notice logic problem due to new payment settings "
2957
  "default value not set."
2958
  msgstr ""
2959
 
2960
- #: admin/html/whats-new.php:1421
2961
  msgid "Setup Wizard"
2962
  msgstr ""
2963
 
2964
- #: admin/html/whats-new.php:1423
2965
  msgid "Setup Wizard added to turn off payment options and install pages."
2966
  msgstr ""
2967
 
2968
- #: admin/html/whats-new.php:1427
2969
  msgid "Multi-select Category"
2970
  msgstr ""
2971
 
2972
- #: admin/html/whats-new.php:1429
2973
  msgid "Add multi-select to default category in post form settings."
2974
  msgstr ""
2975
 
2976
- #: admin/html/whats-new.php:1433
2977
  msgid "Select Text option for Taxonomy"
2978
  msgstr ""
2979
 
2980
- #: admin/html/whats-new.php:1435
2981
  msgid ""
2982
  "Add Select Text option for taxonomy fields. Now you can add default text "
2983
  "with empty value as first option for Taxonomy dropdown."
2984
  msgstr ""
2985
 
2986
- #: admin/html/whats-new.php:1438
2987
  msgid "Taxonomy Checkbox Inline"
2988
  msgstr ""
2989
 
2990
- #: admin/html/whats-new.php:1440
2991
  msgid ""
2992
  "Added checkbox inline option to taxonomy checkbox. You can now display "
2993
  "Taxonomy checkbox fields inline."
2994
  msgstr ""
2995
 
2996
- #: admin/html/whats-new.php:1450
2997
  msgid "Manage schedule for form submission"
2998
  msgstr ""
2999
 
3000
- #: admin/html/whats-new.php:1452
3001
  msgid ""
3002
  "Do not accept form submission if the current date is not between the date "
3003
  "range of the schedule."
3004
  msgstr ""
3005
 
3006
- #: admin/html/whats-new.php:1456
3007
  msgid "Restrict form submission based on the user roles"
3008
  msgstr ""
3009
 
3010
- #: admin/html/whats-new.php:1458
3011
  msgid ""
3012
  "Restrict form submission based on the user roles. Now you can manage user "
3013
  "role base permission on form submission."
3014
  msgstr ""
3015
 
3016
- #: admin/html/whats-new.php:1462
3017
  msgid "Limit how many entries a form will accept"
3018
  msgstr ""
3019
 
3020
- #: admin/html/whats-new.php:1464
3021
  msgid ""
3022
  "Limit how many entries a form will accept and display a custom message when "
3023
  "that limit is reached."
3024
  msgstr ""
3025
 
3026
- #: admin/html/whats-new.php:1468
3027
  msgid "Show/hide Admin Bar"
3028
  msgstr ""
3029
 
3030
- #: admin/html/whats-new.php:1470
3031
  msgid "Control the admin bar visibility based on user roles."
3032
  msgstr ""
3033
 
3034
- #: admin/html/whats-new.php:1474
3035
  msgid "Ajax Login widget"
3036
  msgstr ""
3037
 
3038
- #: admin/html/whats-new.php:1476
3039
  msgid ""
3040
  "Login user is more simple now with Ajax Login Widget. The simple ajax login "
3041
  "form do not required page loading for login."
3042
  msgstr ""
3043
 
3044
- #: admin/html/whats-new.php:1480
3045
  msgid "Form submission with Captcha field"
3046
  msgstr ""
3047
 
3048
- #: admin/html/whats-new.php:1482
3049
  msgid "Form field validation process updated if form submits with captcha field."
3050
  msgstr ""
3051
 
3052
- #: admin/html/whats-new.php:1496
3053
  msgid "What's New in WPUF?"
3054
  msgstr ""
3055
 
@@ -3072,7 +3110,7 @@ msgid "Congratulations!"
3072
  msgstr ""
3073
 
3074
  #: admin/installer.php:84 admin/settings-options.php:24
3075
- #: includes/free/admin/shortcode-button.php:79 wpuf-functions.php:2040
3076
  msgid "Dashboard"
3077
  msgstr ""
3078
 
@@ -3087,7 +3125,7 @@ msgstr ""
3087
 
3088
  #: admin/installer.php:95 class/subscription.php:410 class/subscription.php:430
3089
  #: class/subscription.php:431 class/subscription.php:432
3090
- #: includes/free/admin/shortcode-button.php:99 wpuf-functions.php:2023
3091
  msgid "Subscription"
3092
  msgstr ""
3093
 
@@ -3183,23 +3221,23 @@ msgid "Draft"
3183
  msgstr ""
3184
 
3185
  #: admin/posting.php:72 class/asset-loader.php:55 class/render-form.php:1682
3186
- #: wpuf.php:737
3187
  msgid "Are you sure?"
3188
  msgstr ""
3189
 
3190
- #: admin/posting.php:80 class/asset-loader.php:63 wpuf.php:748
3191
  msgid "Allowed Files"
3192
  msgstr ""
3193
 
3194
- #: admin/posting.php:83 class/asset-loader.php:66 wpuf.php:754
3195
  msgid "Maximum number of files reached!"
3196
  msgstr ""
3197
 
3198
- #: admin/posting.php:84 class/asset-loader.php:67 wpuf.php:755
3199
  msgid "The file you have uploaded exceeds the file size limit. Please try again."
3200
  msgstr ""
3201
 
3202
- #: admin/posting.php:85 class/asset-loader.php:68 wpuf.php:756
3203
  msgid "You have uploaded an incorrect file type. Please try again."
3204
  msgstr ""
3205
 
@@ -3239,7 +3277,7 @@ msgstr ""
3239
  msgid "WPUF Custom Fields"
3240
  msgstr ""
3241
 
3242
- #: admin/posting.php:341
3243
  msgid "No custom fields found."
3244
  msgstr ""
3245
 
@@ -3253,7 +3291,7 @@ msgid ""
3253
  "features."
3254
  msgstr ""
3255
 
3256
- #: admin/premium.php:10 includes/free/loader.php:104
3257
  msgid "Pro Features"
3258
  msgstr ""
3259
 
@@ -3264,7 +3302,7 @@ msgid ""
3264
  "mind."
3265
  msgstr ""
3266
 
3267
- #: admin/premium.php:18 admin/premium.php:21 includes/free/loader.php:113
3268
  msgid "Registration Form Builder"
3269
  msgstr ""
3270
 
@@ -3367,7 +3405,8 @@ msgid ""
3367
  "Long and lengthy forms are uninviting, why build one?"
3368
  msgstr ""
3369
 
3370
- #: admin/premium.php:93
 
3371
  msgid "Modules"
3372
  msgstr ""
3373
 
@@ -3379,7 +3418,7 @@ msgstr ""
3379
  msgid "BuddyPress Profile"
3380
  msgstr ""
3381
 
3382
- #: admin/premium.php:104
3383
  msgid "Social Login"
3384
  msgstr ""
3385
 
@@ -3389,7 +3428,7 @@ msgid ""
3389
  "Facebook, Twitter and LinkedIn."
3390
  msgstr ""
3391
 
3392
- #: admin/premium.php:111 admin/premium.php:114
3393
  msgid "User Directory"
3394
  msgstr ""
3395
 
@@ -4026,7 +4065,7 @@ msgstr ""
4026
  msgid "Select the post types you will allow users to export."
4027
  msgstr ""
4028
 
4029
- #: admin/settings-options.php:576
4030
  msgid ""
4031
  "Select profile/registration forms for user roles. These forms will be used "
4032
  "to populate extra edit profile fields in backend."
@@ -4291,7 +4330,7 @@ msgstr ""
4291
 
4292
  #: admin/template.php:185 includes/fields/class-abstract-fields.php:681
4293
  #: includes/fields/class-field-textarea.php:9
4294
- #: includes/fields/class-field-textarea.php:122
4295
  msgid "Textarea"
4296
  msgstr ""
4297
 
@@ -4335,7 +4374,7 @@ msgstr ""
4335
  #: class/upload.php:275 includes/fields/class-field-recaptcha.php:147
4336
  #: includes/fields/class-field-sectionbreak.php:55
4337
  #: templates/dashboard/list.php:10 templates/dashboard/posts.php:100
4338
- #: wpuf-functions.php:1024
4339
  msgid "Title"
4340
  msgstr ""
4341
 
@@ -4352,7 +4391,7 @@ msgid "Enter the meta value"
4352
  msgstr ""
4353
 
4354
  #: admin/template.php:583 class/upload.php:277
4355
- #: includes/fields/class-field-sectionbreak.php:63 wpuf-functions.php:1032
4356
  msgid "Description"
4357
  msgstr ""
4358
 
@@ -4386,27 +4425,27 @@ msgstr ""
4386
  msgid "Import"
4387
  msgstr ""
4388
 
4389
- #: class/asset-loader.php:32 wpuf.php:634
4390
  msgid "is required"
4391
  msgstr ""
4392
 
4393
- #: class/asset-loader.php:33 wpuf.php:635
4394
  msgid "does not match"
4395
  msgstr ""
4396
 
4397
- #: class/asset-loader.php:34 wpuf.php:636
4398
  msgid "is not valid"
4399
  msgstr ""
4400
 
4401
- #: class/asset-loader.php:46 wpuf.php:714
4402
  msgid "Please fix the errors to proceed"
4403
  msgstr ""
4404
 
4405
- #: class/asset-loader.php:48 wpuf.php:721
4406
  msgid "Word limit reached"
4407
  msgstr ""
4408
 
4409
- #: class/asset-loader.php:49 wpuf.php:716
4410
  msgid "Are you sure you want to cancel your current subscription ?"
4411
  msgstr ""
4412
 
@@ -4543,7 +4582,7 @@ msgid "You already have activated a free package previously."
4543
  msgstr ""
4544
 
4545
  #: class/payment.php:154 includes/class-customizer.php:56
4546
- #: wpuf-functions.php:2024
4547
  msgid "Billing Address"
4548
  msgstr ""
4549
 
@@ -4643,49 +4682,49 @@ msgstr ""
4643
  msgid "Write the full description of your Post"
4644
  msgstr ""
4645
 
4646
- #: class/post-form-templates/post.php:77 class/post-form-templates/post.php:78
4647
  #: includes/fields/class-field-featured-image.php:9
4648
  #: includes/fields/class-field-featured-image.php:142
4649
- #: includes/free/post-form-templates/the_events_calendar.php:125
4650
  #: includes/free/post-form-templates/the_events_calendar.php:126
 
4651
  #: templates/dashboard/list.php:7 templates/dashboard/posts.php:97
4652
  msgid "Featured Image"
4653
  msgstr ""
4654
 
4655
- #: class/post-form-templates/post.php:81
4656
  msgid "Upload the main image of your post"
4657
  msgstr ""
4658
 
4659
- #: class/post-form-templates/post.php:91
4660
- #: includes/free/post-form-templates/the_events_calendar.php:138
4661
  msgid "Excerpt"
4662
  msgstr ""
4663
 
4664
- #: class/post-form-templates/post.php:94
4665
  msgid "Provide a short description of this post (optional)"
4666
  msgstr ""
4667
 
4668
- #: class/post-form-templates/post.php:109
4669
  #: includes/fields/class-field-post-tags.php:6
4670
  msgid "Tags"
4671
  msgstr ""
4672
 
4673
- #: class/post-form-templates/post.php:112
4674
- #: includes/free/post-form-templates/the_events_calendar.php:157
4675
  msgid "Separate tags with commas."
4676
  msgstr ""
4677
 
4678
- #: class/post-form-templates/post.php:130
4679
  msgid "Create Post"
4680
  msgstr ""
4681
 
4682
- #: class/post-form-templates/post.php:144
4683
  msgid ""
4684
  "Post has been updated successfully. <a target=\"_blank\" "
4685
  "href=\"%link%\">View post</a>"
4686
  msgstr ""
4687
 
4688
- #: class/post-form-templates/post.php:146
4689
  msgid "Update Post"
4690
  msgstr ""
4691
 
@@ -4895,11 +4934,12 @@ msgid "Subtotal"
4895
  msgstr ""
4896
 
4897
  #: class/transactions-list-table.php:47
4898
- #: includes/free/post-form-templates/the_events_calendar.php:115
4899
  msgid "Cost"
4900
  msgstr ""
4901
 
4902
  #: class/transactions-list-table.php:48 includes/class-privacy.php:334
 
4903
  msgid "Tax"
4904
  msgstr ""
4905
 
@@ -4952,7 +4992,7 @@ msgstr ""
4952
  msgid "No transactions found."
4953
  msgstr ""
4954
 
4955
- #: class/upload.php:276 wpuf-functions.php:1028
4956
  msgid "Caption"
4957
  msgstr ""
4958
 
@@ -5750,6 +5790,20 @@ msgstr ""
5750
  msgid "Expiry"
5751
  msgstr ""
5752
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5753
  #: includes/class-user-subscription.php:57
5754
  msgid "You must <a href=\"%s\">purchase a subscription package</a> before posting"
5755
  msgstr ""
@@ -5926,14 +5980,14 @@ msgid "Select Yes if you want to hide the field label in single post."
5926
  msgstr ""
5927
 
5928
  #: includes/fields/class-abstract-fields.php:465
5929
- #: includes/fields/class-field-checkbox.php:71
5930
- #: includes/fields/class-field-radio.php:80
5931
  msgid "Show in inline list"
5932
  msgstr ""
5933
 
5934
  #: includes/fields/class-abstract-fields.php:475
5935
- #: includes/fields/class-field-checkbox.php:81
5936
- #: includes/fields/class-field-radio.php:90
5937
  msgid "Show this option in an inline list"
5938
  msgstr ""
5939
 
@@ -6029,7 +6083,7 @@ msgstr ""
6029
  msgid "Numeric Field"
6030
  msgstr ""
6031
 
6032
- #: includes/fields/class-field-post-content.php:9
6033
  msgid "Post Content"
6034
  msgstr ""
6035
 
@@ -6174,7 +6228,7 @@ msgstr ""
6174
  msgid "Select a form to insert"
6175
  msgstr ""
6176
 
6177
- #: includes/free/admin/shortcode-builder.php:9 includes/free/loader.php:92
6178
  msgid "Registration Form"
6179
  msgstr ""
6180
 
@@ -6674,56 +6728,534 @@ msgstr ""
6674
  msgid "Update Button text"
6675
  msgstr ""
6676
 
6677
- #: includes/free/loader.php:84 includes/free/loader.php:145
6678
  msgid "Coupons"
6679
  msgstr ""
6680
 
6681
- #: includes/free/loader.php:94
6682
  msgid "Use the shortcode %s for a simple and default WordPress registration form."
6683
  msgstr ""
6684
 
6685
- #: includes/free/loader.php:99
6686
  msgid "Learn How to Setup"
6687
  msgstr ""
6688
 
6689
- #: includes/free/loader.php:107
6690
  msgid ""
6691
  "Registration form builder is a two way form which can be used both for "
6692
  "<strong>user registration</strong> and <strong>profile editing</strong>."
6693
  msgstr ""
6694
 
6695
- #: includes/free/loader.php:117
6696
  msgid "Profile Form Builder"
6697
  msgstr ""
6698
 
6699
- #: includes/free/loader.php:121
6700
  msgid "Register by Subscription Package Purchase"
6701
  msgstr ""
6702
 
6703
- #: includes/free/loader.php:126 includes/free/loader.php:157
6704
  msgid "Upgrade to Pro Version"
6705
  msgstr ""
6706
 
6707
- #: includes/free/loader.php:127
6708
  msgid "Learn More"
6709
  msgstr ""
6710
 
6711
- #: includes/free/loader.php:149
6712
  msgid "Use Coupon codes for subscription for discounts."
6713
  msgstr ""
6714
 
6715
- #: includes/free/loader.php:153
6716
  msgid "This feature is only available in the Pro Version."
6717
  msgstr ""
6718
 
6719
- #: includes/free/loader.php:158
6720
  msgid "Learn more about Coupons"
6721
  msgstr ""
6722
 
6723
- #: includes/free/loader.php:199
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6724
  msgid "Upgrade to Pro"
6725
  msgstr ""
6726
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6727
  #: includes/free/post-form-templates/the_events_calendar.php:13
6728
  msgid "The Events Calendar"
6729
  msgstr ""
@@ -6748,53 +7280,53 @@ msgstr ""
6748
  msgid "Write the full description of your event"
6749
  msgstr ""
6750
 
6751
- #: includes/free/post-form-templates/the_events_calendar.php:53
6752
  msgid "Event Start"
6753
  msgstr ""
6754
 
6755
- #: includes/free/post-form-templates/the_events_calendar.php:66
6756
  msgid "Event End"
6757
  msgstr ""
6758
 
6759
- #: includes/free/post-form-templates/the_events_calendar.php:79
6760
  msgid "All Day Event"
6761
  msgstr ""
6762
 
6763
- #: includes/free/post-form-templates/the_events_calendar.php:94
6764
  msgid "Event Website"
6765
  msgstr ""
6766
 
6767
- #: includes/free/post-form-templates/the_events_calendar.php:105
6768
  msgid "Currency Symbol"
6769
  msgstr ""
6770
 
6771
- #: includes/free/post-form-templates/the_events_calendar.php:129
6772
  msgid "Upload the main image of your event"
6773
  msgstr ""
6774
 
6775
- #: includes/free/post-form-templates/the_events_calendar.php:141
6776
  msgid "Provide a short description of this event (optional)"
6777
  msgstr ""
6778
 
6779
- #: includes/free/post-form-templates/the_events_calendar.php:154
6780
  msgid "Event Tags"
6781
  msgstr ""
6782
 
6783
- #: includes/free/post-form-templates/the_events_calendar.php:171
6784
  msgid "This page is restricted. Please Log in / Register to view this page."
6785
  msgstr ""
6786
 
6787
- #: includes/free/post-form-templates/the_events_calendar.php:174
6788
  msgid "Create Event"
6789
  msgstr ""
6790
 
6791
- #: includes/free/post-form-templates/the_events_calendar.php:177
6792
  msgid ""
6793
  "Event has been updated successfully. <a target=\"_blank\" "
6794
  "href=\"%link%\">View event</a>"
6795
  msgstr ""
6796
 
6797
- #: includes/free/post-form-templates/the_events_calendar.php:179
6798
  msgid "Update Event"
6799
  msgstr ""
6800
 
@@ -6806,7 +7338,11 @@ msgstr ""
6806
  msgid "Create a simple product form for WooCommerce."
6807
  msgstr ""
6808
 
6809
- #: includes/free/subscription.php:12
 
 
 
 
6810
  msgid "Enable Recurring Payment"
6811
  msgstr ""
6812
 
@@ -6918,7 +7454,7 @@ msgstr ""
6918
  msgid "Submit & Deactivate"
6919
  msgstr ""
6920
 
6921
- #: lib/class.settings-api.php:369
6922
  msgid "Choose File"
6923
  msgstr ""
6924
 
@@ -7229,235 +7765,231 @@ msgstr ""
7229
  msgid "CSV"
7230
  msgstr ""
7231
 
7232
- #: wpuf-functions.php:1051
7233
  msgid "Directions »"
7234
  msgstr ""
7235
 
7236
- #: wpuf-functions.php:2022
7237
- msgid "Edit Profile"
7238
- msgstr ""
7239
-
7240
- #: wpuf-functions.php:2269
7241
  msgid "United Arab Emirates Dirham"
7242
  msgstr ""
7243
 
7244
- #: wpuf-functions.php:2274
7245
  msgid "Australian Dollars"
7246
  msgstr ""
7247
 
7248
- #: wpuf-functions.php:2279
7249
  msgid "Argentine Peso"
7250
  msgstr ""
7251
 
7252
- #: wpuf-functions.php:2284
7253
  msgid "Bangladeshi Taka"
7254
  msgstr ""
7255
 
7256
- #: wpuf-functions.php:2289
7257
  msgid "Brazilian Real"
7258
  msgstr ""
7259
 
7260
- #: wpuf-functions.php:2294
7261
  msgid "Bulgarian Lev"
7262
  msgstr ""
7263
 
7264
- #: wpuf-functions.php:2299
7265
  msgid "Canadian Dollars"
7266
  msgstr ""
7267
 
7268
- #: wpuf-functions.php:2304
7269
  msgid "Chilean Peso"
7270
  msgstr ""
7271
 
7272
- #: wpuf-functions.php:2309
7273
  msgid "Chinese Yuan"
7274
  msgstr ""
7275
 
7276
- #: wpuf-functions.php:2314
7277
  msgid "Colombian Peso"
7278
  msgstr ""
7279
 
7280
- #: wpuf-functions.php:2319
7281
  msgid "Czech Koruna"
7282
  msgstr ""
7283
 
7284
- #: wpuf-functions.php:2324
7285
  msgid "Danish Krone"
7286
  msgstr ""
7287
 
7288
- #: wpuf-functions.php:2329
7289
  msgid "Dominican Peso"
7290
  msgstr ""
7291
 
7292
- #: wpuf-functions.php:2334
7293
  msgid "Algerian Dinar"
7294
  msgstr ""
7295
 
7296
- #: wpuf-functions.php:2339
7297
  msgid "Euros"
7298
  msgstr ""
7299
 
7300
- #: wpuf-functions.php:2344
7301
  msgid "Hong Kong Dollar"
7302
  msgstr ""
7303
 
7304
- #: wpuf-functions.php:2349
7305
  msgid "Croatia kuna"
7306
  msgstr ""
7307
 
7308
- #: wpuf-functions.php:2354
7309
  msgid "Hungarian Forint"
7310
  msgstr ""
7311
 
7312
- #: wpuf-functions.php:2359
7313
  msgid "Icelandic krona"
7314
  msgstr ""
7315
 
7316
- #: wpuf-functions.php:2364
7317
  msgid "Indonesia Rupiah"
7318
  msgstr ""
7319
 
7320
- #: wpuf-functions.php:2369
7321
  msgid "Indian Rupee"
7322
  msgstr ""
7323
 
7324
- #: wpuf-functions.php:2374
7325
  msgid "Mauritian Rupee"
7326
  msgstr ""
7327
 
7328
- #: wpuf-functions.php:2379
7329
  msgid "Nepali Rupee"
7330
  msgstr ""
7331
 
7332
- #: wpuf-functions.php:2384
7333
  msgid "Israeli Shekel"
7334
  msgstr ""
7335
 
7336
- #: wpuf-functions.php:2389
7337
  msgid "Japanese Yen"
7338
  msgstr ""
7339
 
7340
- #: wpuf-functions.php:2394
7341
  msgid "Lao Kip"
7342
  msgstr ""
7343
 
7344
- #: wpuf-functions.php:2399
7345
  msgid "South Korean Won"
7346
  msgstr ""
7347
 
7348
- #: wpuf-functions.php:2404
7349
  msgid "Malaysian Ringgits"
7350
  msgstr ""
7351
 
7352
- #: wpuf-functions.php:2409
7353
  msgid "Mexican Peso"
7354
  msgstr ""
7355
 
7356
- #: wpuf-functions.php:2414
7357
  msgid "Nigerian Naira"
7358
  msgstr ""
7359
 
7360
- #: wpuf-functions.php:2419
7361
  msgid "Norwegian Krone"
7362
  msgstr ""
7363
 
7364
- #: wpuf-functions.php:2424
7365
  msgid "New Zealand Dollar"
7366
  msgstr ""
7367
 
7368
- #: wpuf-functions.php:2429
7369
  msgid "Namibian dollar"
7370
  msgstr ""
7371
 
7372
- #: wpuf-functions.php:2434
7373
  msgid "Omani Rial"
7374
  msgstr ""
7375
 
7376
- #: wpuf-functions.php:2439
7377
  msgid "Iranian Rial"
7378
  msgstr ""
7379
 
7380
- #: wpuf-functions.php:2444
7381
  msgid "Pakistani Rupee"
7382
  msgstr ""
7383
 
7384
- #: wpuf-functions.php:2449
7385
  msgid "Paraguayan Guaraní"
7386
  msgstr ""
7387
 
7388
- #: wpuf-functions.php:2454
7389
  msgid "Philippine Pesos"
7390
  msgstr ""
7391
 
7392
- #: wpuf-functions.php:2459
7393
  msgid "Polish Zloty"
7394
  msgstr ""
7395
 
7396
- #: wpuf-functions.php:2464
7397
  msgid "Pounds Sterling"
7398
  msgstr ""
7399
 
7400
- #: wpuf-functions.php:2469
7401
  msgid "Romanian Leu"
7402
  msgstr ""
7403
 
7404
- #: wpuf-functions.php:2474
7405
  msgid "Russian Ruble"
7406
  msgstr ""
7407
 
7408
- #: wpuf-functions.php:2479
7409
  msgid "Saudi Riyal"
7410
  msgstr ""
7411
 
7412
- #: wpuf-functions.php:2484
7413
  msgid "Singapore Dollar"
7414
  msgstr ""
7415
 
7416
- #: wpuf-functions.php:2489
7417
  msgid "South African rand"
7418
  msgstr ""
7419
 
7420
- #: wpuf-functions.php:2494
7421
  msgid "Swedish Krona"
7422
  msgstr ""
7423
 
7424
- #: wpuf-functions.php:2499
7425
  msgid "Swiss Franc"
7426
  msgstr ""
7427
 
7428
- #: wpuf-functions.php:2504
7429
  msgid "Taiwan New Dollars"
7430
  msgstr ""
7431
 
7432
- #: wpuf-functions.php:2509
7433
  msgid "Thai Baht"
7434
  msgstr ""
7435
 
7436
- #: wpuf-functions.php:2514
7437
  msgid "Turkish Lira"
7438
  msgstr ""
7439
 
7440
- #: wpuf-functions.php:2519
7441
  msgid "Trinidad and Tobago Dollar"
7442
  msgstr ""
7443
 
7444
- #: wpuf-functions.php:2524
7445
  msgid "US Dollar"
7446
  msgstr ""
7447
 
7448
- #: wpuf-functions.php:2529
7449
  msgid "Vietnamese Dong"
7450
  msgstr ""
7451
 
7452
- #: wpuf-functions.php:2534
7453
  msgid "Egyptian Pound"
7454
  msgstr ""
7455
 
7456
- #: wpuf-functions.php:2539
7457
  msgid "Jordanian dinar"
7458
  msgstr ""
7459
 
7460
- #: wpuf-functions.php:3472
7461
  msgid "None"
7462
  msgstr ""
7463
 
@@ -7477,7 +8009,7 @@ msgstr ""
7477
  msgid "Your Post Has Been Expired"
7478
  msgstr ""
7479
 
7480
- #: wpuf.php:455
7481
  msgid ""
7482
  "<p style=\"font-size: 13px\">\n"
7483
  " <strong class=\"highlight-text\" "
@@ -7490,31 +8022,31 @@ msgid ""
7490
  " </p>"
7491
  msgstr ""
7492
 
7493
- #: wpuf.php:472
7494
  msgid "Update WP User Frontend Pro Now"
7495
  msgstr ""
7496
 
7497
- #: wpuf.php:476
7498
  msgid "Update WP User Frontend Pro NOW"
7499
  msgstr ""
7500
 
7501
- #: wpuf.php:719
7502
  msgid "Character limit reached"
7503
  msgstr ""
7504
 
7505
- #: wpuf.php:720
7506
  msgid "Minimum character required "
7507
  msgstr ""
7508
 
7509
- #: wpuf.php:722
7510
  msgid "Minimum word required "
7511
  msgstr ""
7512
 
7513
- #: wpuf.php:730
7514
  msgid "Please Cancel Your Currently Active Pack first!"
7515
  msgstr ""
7516
 
7517
- #: wpuf.php:901
7518
  msgid "Error: Nonce verification failed"
7519
  msgstr ""
7520
 
@@ -7596,7 +8128,7 @@ msgctxt "enhanced select"
7596
  msgid "Searching&hellip;"
7597
  msgstr ""
7598
 
7599
- #: wpuf-functions.php:1520
7600
  msgctxt "tag delimiter"
7601
  msgid ","
7602
  msgstr ""
2
  # This file is distributed under the GPL2 or later.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WP User Frontend 3.6.0\n"
6
  "Report-Msgid-Bugs-To: https://wedevs.com/contact/\n"
7
+ "POT-Creation-Date: 2022-11-23 12:11:01+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
152
  msgstr ""
153
 
154
  #: admin/class-admin-subscription.php:205 includes/class-privacy.php:478
 
155
  msgid "Recurring"
156
  msgstr ""
157
 
175
  #: includes/fields/class-abstract-fields.php:390
176
  #: includes/fields/class-abstract-fields.php:404
177
  #: includes/fields/class-abstract-fields.php:468
178
+ #: includes/fields/class-field-checkbox.php:81
179
+ #: includes/fields/class-field-radio.php:85 includes/free/form-element.php:499
180
+ #: wpuf.php:715
181
  msgid "Yes"
182
  msgstr ""
183
 
190
  #: includes/fields/class-abstract-fields.php:391
191
  #: includes/fields/class-abstract-fields.php:405
192
  #: includes/fields/class-abstract-fields.php:469
193
+ #: includes/fields/class-field-checkbox.php:82
194
+ #: includes/fields/class-field-radio.php:86 includes/free/form-element.php:500
195
+ #: wpuf.php:716
196
  msgid "No"
197
  msgstr ""
198
 
243
  msgstr ""
244
 
245
  #: admin/class-admin-subscription.php:452
246
+ #: admin/class-admin-subscription.php:726 includes/free/form-element.php:67
247
  msgid "Post Expiration Time"
248
  msgstr ""
249
 
321
  msgid "Remaining Posting Count"
322
  msgstr ""
323
 
324
+ #: admin/class-admin-subscription.php:693
325
  msgid "Subscription Expiration Info"
326
  msgstr ""
327
 
328
+ #: admin/class-admin-subscription.php:702
329
  #: includes/class-user-subscription.php:364
330
  #: templates/dashboard/subscription.php:50
331
  msgid "Expire date:"
332
  msgstr ""
333
 
334
+ #: admin/class-admin-subscription.php:715
335
  msgid "Post Expiration Enabled"
336
  msgstr ""
337
 
338
+ #: admin/class-admin-subscription.php:752
339
  msgid "Allowed Taxonomy Terms"
340
  msgstr ""
341
 
342
+ #: admin/class-admin-subscription.php:822
343
  msgid "Assign Package"
344
  msgstr ""
345
 
346
+ #: admin/class-admin-subscription.php:823
347
  #: admin/form-builder/class-wpuf-admin-form-builder.php:286
348
  #: class/payment.php:225 class/subscription.php:836
349
  #: includes/class-list-table-subscribers.php:138 lib/appsero/Insights.php:764
351
  msgid "Cancel"
352
  msgstr ""
353
 
354
+ #: admin/class-admin-subscription.php:829
355
  msgid "Select Package:"
356
  msgstr ""
357
 
358
+ #: admin/class-admin-subscription.php:832 admin/settings-options.php:594
359
+ #: wpuf-functions.php:210 wpuf-functions.php:1810 wpuf-functions.php:2078
360
  msgid "&mdash; Select &mdash;"
361
  msgstr ""
362
 
363
+ #: admin/class-admin-subscription.php:836
364
  msgid "Only non-recurring pack can be assigned"
365
  msgstr ""
366
 
367
+ #: admin/class-admin-subscription.php:847
368
  msgid "Delete Package"
369
  msgstr ""
370
 
371
+ #: admin/class-admin-subscription.php:901
372
  msgid "Learn more about <a href=\"%s\" target=\"_blank\">Subscription</a>"
373
  msgstr ""
374
 
382
 
383
  #: admin/class-tools.php:43 admin/class-tools.php:106
384
  #: admin/post-forms-list-table.php:43 class/transactions-list-table.php:95
385
+ #: includes/class-list-table-subscribers.php:136 wpuf-functions.php:3492
386
  msgid "All"
387
  msgstr ""
388
 
495
  msgid "Delete Transactions"
496
  msgstr ""
497
 
498
+ #: admin/dashboard-metabox.php:14
499
+ msgid "WP User Frontend News & Updates"
500
+ msgstr ""
501
+
502
  #: admin/form-builder/assets/js/components/builder-stage/template.php:3
503
  msgid "Add fields by dragging the fields from the right sidebar to this area."
504
  msgstr ""
613
  msgstr ""
614
 
615
  #: admin/form-builder/class-wpuf-admin-form-builder.php:283
616
+ #: admin/posting.php:73 class/asset-loader.php:56 wpuf.php:736
617
  msgid "Yes, delete it"
618
  msgstr ""
619
 
620
  #: admin/form-builder/class-wpuf-admin-form-builder.php:284
621
+ #: admin/posting.php:74 class/asset-loader.php:57 wpuf.php:737
622
  msgid "No, cancel it"
623
  msgstr ""
624
 
636
  msgstr ""
637
 
638
  #: admin/form-builder/class-wpuf-admin-form-builder.php:289
639
+ #: includes/fields/class-field-checkbox.php:108
640
  #: includes/fields/class-field-dropdown.php:105
641
  #: includes/fields/class-field-multidropdown.php:82
642
+ #: includes/fields/class-field-radio.php:111
643
  msgid "Option"
644
  msgstr ""
645
 
742
  msgid "Form duplicated successfully. <a href=\"%s\">View form.</a>"
743
  msgstr ""
744
 
745
+ #: admin/form-template.php:64
746
  msgid "Want a new integration? <a href=\"%s\" target=\"_blank\">Let us know</a>."
747
  msgstr ""
748
 
749
+ #: admin/form-template.php:169
750
  msgid "Form Template"
751
  msgstr ""
752
 
753
+ #: admin/form-template.php:172
754
  msgid "&mdash; No Template &mdash;"
755
  msgstr ""
756
 
757
+ #: admin/form-template.php:180
758
  msgid ""
759
  "If selected a form template, it will try to execute that integration "
760
  "options when new post created and updated."
814
  msgid "Registraton Forms"
815
  msgstr ""
816
 
817
+ #: admin/form.php:111 includes/free/loader.php:87
818
  msgid "Registration Forms"
819
  msgstr ""
820
 
1055
  msgid "After how many hours user will be locked from editing the submitted post."
1056
  msgstr ""
1057
 
1058
+ #: admin/html/form-settings-post.php:7 class/post-form-templates/post.php:130
1059
  msgid "This page is restricted. Please %login% / %register% to view this page."
1060
  msgstr ""
1061
 
1308
  msgid "This integration is not installed."
1309
  msgstr ""
1310
 
1311
+ #: admin/html/modal.php:104 includes/free/loader.php:1200
1312
+ #: includes/free/loader.php:1282
1313
+ msgid "Upgrade to PRO"
1314
+ msgstr ""
1315
+
1316
  #: admin/html/support.php:187
1317
  msgid "Related Articles:"
1318
  msgstr ""
1445
  msgstr ""
1446
 
1447
  #: admin/html/whats-new.php:8
1448
+ msgid "Admin dashboard news and update meta-box added"
1449
+ msgstr ""
1450
+
1451
+ #: admin/html/whats-new.php:12
1452
+ msgid "Upgrade prompts design"
1453
+ msgstr ""
1454
+
1455
+ #: admin/html/whats-new.php:16
1456
+ msgid "Email style handled"
1457
+ msgstr ""
1458
+
1459
+ #: admin/html/whats-new.php:20
1460
+ msgid ""
1461
+ "text-area type selection(Normal, Rich text-area, Teeny Rich text-area) bug "
1462
+ "in field options"
1463
+ msgstr ""
1464
+
1465
+ #: admin/html/whats-new.php:24
1466
+ msgid "Frontend form validation"
1467
+ msgstr ""
1468
+
1469
+ #: admin/html/whats-new.php:28
1470
+ msgid "Default value not saving for radio, dropdown, checkbox"
1471
+ msgstr ""
1472
+
1473
+ #: admin/html/whats-new.php:32
1474
+ msgid "sweetalert2 version"
1475
+ msgstr ""
1476
+
1477
+ #: admin/html/whats-new.php:42
1478
  msgid "Short-code encryption updated for registration page"
1479
  msgstr ""
1480
 
1481
+ #: admin/html/whats-new.php:52
1482
  msgid "Updated compatibility with the latest version of WordPress 6.0"
1483
  msgstr ""
1484
 
1485
+ #: admin/html/whats-new.php:56
1486
  msgid "Improved some backend implementations"
1487
  msgstr ""
1488
 
1489
+ #: admin/html/whats-new.php:66
1490
  msgid "Email template enhanced for after activation"
1491
  msgstr ""
1492
 
1493
+ #: admin/html/whats-new.php:70
1494
  msgid "Read only option for custom field"
1495
  msgstr ""
1496
 
1497
+ #: admin/html/whats-new.php:74
1498
  msgid "Editor toolbar exclude option enhanced"
1499
  msgstr ""
1500
 
1501
+ #: admin/html/whats-new.php:78
1502
  msgid "Preview option enhanced for user profile"
1503
  msgstr ""
1504
 
1505
+ #: admin/html/whats-new.php:82
1506
  msgid "Meta key enhanced for user email notification"
1507
  msgstr ""
1508
 
1509
+ #: admin/html/whats-new.php:86
1510
  msgid "Global option for disable post edit on account"
1511
  msgstr ""
1512
 
1513
+ #: admin/html/whats-new.php:90
1514
  msgid "Filter for conditional logic for fields added"
1515
  msgstr ""
1516
 
1517
+ #: admin/html/whats-new.php:94
1518
  msgid "PHP 8 compatibility handled"
1519
  msgstr ""
1520
 
1521
+ #: admin/html/whats-new.php:98
1522
  msgid "Address / Billing address inconsistency handled"
1523
  msgstr ""
1524
 
1525
+ #: admin/html/whats-new.php:102
1526
  msgid "Content restriction several issue fixed"
1527
  msgstr ""
1528
 
1529
+ #: admin/html/whats-new.php:106
1530
  msgid "Tax calculation properly handled for all areas"
1531
  msgstr ""
1532
 
1533
+ #: admin/html/whats-new.php:110
1534
  msgid "Validation added for invalid email and URL formats"
1535
  msgstr ""
1536
 
1537
+ #: admin/html/whats-new.php:114
1538
  msgid "Special character password handled for login"
1539
  msgstr ""
1540
 
1541
+ #: admin/html/whats-new.php:118
1542
  msgid "Reset password handled for sidebar widget"
1543
  msgstr ""
1544
 
1545
+ #: admin/html/whats-new.php:122
1546
  msgid "Required google map issues handled"
1547
  msgstr ""
1548
 
1549
+ #: admin/html/whats-new.php:126
1550
  msgid "Translation related issue handled for admin menu"
1551
  msgstr ""
1552
 
1553
+ #: admin/html/whats-new.php:130
1554
  msgid "Label & query enhanced for transaction table"
1555
  msgstr ""
1556
 
1557
+ #: admin/html/whats-new.php:134
1558
  msgid "Template override for child theme fixed"
1559
  msgstr ""
1560
 
1561
+ #: admin/html/whats-new.php:138
1562
  msgid "Custom field modal handled for registration form"
1563
  msgstr ""
1564
 
1565
+ #: admin/html/whats-new.php:142
1566
  msgid "Redundant CSS issues handled"
1567
  msgstr ""
1568
 
1569
+ #: admin/html/whats-new.php:146
1570
  msgid "Address field inconsistency fixed"
1571
  msgstr ""
1572
 
1573
+ #: admin/html/whats-new.php:150
1574
  msgid "Plugin page spin loading issue handled"
1575
  msgstr ""
1576
 
1577
+ #: admin/html/whats-new.php:154
1578
  msgid "Warning on exit for draft post fixed"
1579
  msgstr ""
1580
 
1581
+ #: admin/html/whats-new.php:158
1582
  msgid "Unlimited expire on admin user profile handled"
1583
  msgstr ""
1584
 
1585
+ #: admin/html/whats-new.php:162
1586
  msgid "No value checkbox issue handled"
1587
  msgstr ""
1588
 
1589
+ #: admin/html/whats-new.php:166
1590
  msgid "Tag search security Vulnerability handled"
1591
  msgstr ""
1592
 
1593
+ #: admin/html/whats-new.php:170
1594
  msgid "Multi dropdown field error handled"
1595
  msgstr ""
1596
 
1597
+ #: admin/html/whats-new.php:181
1598
  msgid "Promotion notice enhanced through api"
1599
  msgstr ""
1600
 
1601
+ #: admin/html/whats-new.php:192
1602
  msgid "Security Vulnerability fixed"
1603
  msgstr ""
1604
 
1605
+ #: admin/html/whats-new.php:203
1606
  msgid "Featured item for subscriber"
1607
  msgstr ""
1608
 
1609
+ #: admin/html/whats-new.php:207
1610
  msgid "Warning added for unsaved form data on frontend"
1611
  msgstr ""
1612
 
1613
+ #: admin/html/whats-new.php:211
1614
  msgid "Settings page search implemented"
1615
  msgstr ""
1616
 
1617
+ #: admin/html/whats-new.php:215
1618
  msgid "Editor added for registration form email template"
1619
  msgstr ""
1620
 
1621
+ #: admin/html/whats-new.php:219
1622
  msgid "Fallback pay per post not working with when draft enabled"
1623
  msgstr ""
1624
 
1625
+ #: admin/html/whats-new.php:223
1626
  msgid "User Dashboard responsive issues fixed"
1627
  msgstr ""
1628
 
1629
+ #: admin/html/whats-new.php:227
1630
  msgid "Showing wrong license expire message handled"
1631
  msgstr ""
1632
 
1633
+ #: admin/html/whats-new.php:231
1634
  msgid "Remove expire cron handled for once daily"
1635
  msgstr ""
1636
 
1637
+ #: admin/html/whats-new.php:235
1638
  msgid "Billing address validation handled"
1639
  msgstr ""
1640
 
1641
+ #: admin/html/whats-new.php:239
1642
  msgid "Promotion notice restricted for WPUF menu"
1643
  msgstr ""
1644
 
1645
+ #: admin/html/whats-new.php:250
1646
  msgid "reCaptcha issue with other plugin handled"
1647
  msgstr ""
1648
 
1649
+ #: admin/html/whats-new.php:254
1650
  msgid "Multiple post type for wpuf dashboard not working fixed"
1651
  msgstr ""
1652
 
1653
+ #: admin/html/whats-new.php:258
1654
  msgid "Billing address ajax request issue handled"
1655
  msgstr ""
1656
 
1657
+ #: admin/html/whats-new.php:262
1658
  msgid "Halloween promotion notice added"
1659
  msgstr ""
1660
 
1661
+ #: admin/html/whats-new.php:273
1662
  msgid "Content restriction for minimum, maximum value enhanced"
1663
  msgstr ""
1664
 
1665
+ #: admin/html/whats-new.php:277
1666
  msgid "New option for redirection after pay per post payment in form setting"
1667
  msgstr ""
1668
 
1669
+ #: admin/html/whats-new.php:281
1670
  msgid "Controller added for various email notification"
1671
  msgstr ""
1672
 
1673
+ #: admin/html/whats-new.php:285
1674
  msgid "Placeholder added for unauth message option"
1675
  msgstr ""
1676
 
1677
+ #: admin/html/whats-new.php:289
1678
  msgid "Subscription Post expiration option change to input field"
1679
  msgstr ""
1680
 
1681
+ #: admin/html/whats-new.php:293
1682
  msgid "Content restriction message translatable"
1683
  msgstr ""
1684
 
1685
+ #: admin/html/whats-new.php:297
1686
  msgid "ACF integration inconsistency handled"
1687
  msgstr ""
1688
 
1689
+ #: admin/html/whats-new.php:301
1690
  msgid "Enable payment checkbox handled for child option"
1691
  msgstr ""
1692
 
1693
+ #: admin/html/whats-new.php:305
1694
  msgid "Broken asset link handled for custom field popup"
1695
  msgstr ""
1696
 
1697
+ #: admin/html/whats-new.php:309
1698
  msgid "Rollback inconsistency for CPT handled"
1699
  msgstr ""
1700
 
1701
+ #: admin/html/whats-new.php:313
1702
  msgid "Login form loaded after resetting password"
1703
  msgstr ""
1704
 
1705
+ #: admin/html/whats-new.php:317
1706
  msgid "Billing address inconsistency handled"
1707
  msgstr ""
1708
 
1709
+ #: admin/html/whats-new.php:321
1710
  msgid "Form duplication on creation handled"
1711
  msgstr ""
1712
 
1713
+ #: admin/html/whats-new.php:325
1714
  msgid "Field Dragging inconsistency fixed"
1715
  msgstr ""
1716
 
1717
+ #: admin/html/whats-new.php:336
1718
  msgid "Google Map field enhanced along with acf google map"
1719
  msgstr ""
1720
 
1721
+ #: admin/html/whats-new.php:340
1722
  msgid "Filter added for dashboard account menu"
1723
  msgstr ""
1724
 
1725
+ #: admin/html/whats-new.php:344
1726
  msgid "Fallback Pay Per Post inconsistency handled"
1727
  msgstr ""
1728
 
1729
+ #: admin/html/whats-new.php:348
1730
  msgid "Google map search field not showing"
1731
  msgstr ""
1732
 
1733
+ #: admin/html/whats-new.php:352
1734
  msgid "Form preview page inconsistency with builder"
1735
  msgstr ""
1736
 
1737
+ #: admin/html/whats-new.php:356
1738
  msgid "Category not showing as hierarchy"
1739
  msgstr ""
1740
 
1741
+ #: admin/html/whats-new.php:360
1742
  msgid "TOC field randering issue with registration form"
1743
  msgstr ""
1744
 
1745
+ #: admin/html/whats-new.php:364
1746
  msgid "Custom plupload filter inconsistency with file upload handled"
1747
  msgstr ""
1748
 
1749
+ #: admin/html/whats-new.php:368
1750
  msgid "Guest Pay Per Post inconsistency handled"
1751
  msgstr ""
1752
 
1753
+ #: admin/html/whats-new.php:372
1754
  msgid "Responsive and font issue handled"
1755
  msgstr ""
1756
 
1757
+ #: admin/html/whats-new.php:383
1758
  msgid "Preview page added for post form and registration form"
1759
  msgstr ""
1760
 
1761
+ #: admin/html/whats-new.php:387
1762
  msgid "Post types menu on account page added"
1763
  msgstr ""
1764
 
1765
+ #: admin/html/whats-new.php:391
1766
  msgid "Dashboard shortcode attributes enhanced"
1767
  msgstr ""
1768
 
1769
+ #: admin/html/whats-new.php:395
1770
  msgid "Account page post type list new design"
1771
  msgstr ""
1772
 
1773
+ #: admin/html/whats-new.php:399
1774
  msgid "Payment page restricted from direct unauthenticated access"
1775
  msgstr ""
1776
 
1777
+ #: admin/html/whats-new.php:403
1778
  msgid "Timepicker conflict with dokan handled"
1779
  msgstr ""
1780
 
1781
+ #: admin/html/whats-new.php:407
1782
  msgid "Trial inconsistency with paypal fixed"
1783
  msgstr ""
1784
 
1785
+ #: admin/html/whats-new.php:411
1786
  msgid "Subscription does not cancel with paypal due to profile missing id"
1787
  msgstr ""
1788
 
1789
+ #: admin/html/whats-new.php:415
1790
  msgid "Subscription email notification inconsistency fixed"
1791
  msgstr ""
1792
 
1793
+ #: admin/html/whats-new.php:419
1794
  msgid "Various issues on payment page for non-logged in user handled"
1795
  msgstr ""
1796
 
1797
+ #: admin/html/whats-new.php:423
1798
  msgid "Column inner field cloning inconsistency fixed"
1799
  msgstr ""
1800
 
1801
+ #: admin/html/whats-new.php:427
1802
  msgid "Popup z-index changed due to other plugin z-index"
1803
  msgstr ""
1804
 
1805
+ #: admin/html/whats-new.php:439
1806
  msgid "Added Mauritian Rupee for currency"
1807
  msgstr ""
1808
 
1809
+ #: admin/html/whats-new.php:443
1810
  msgid "Added eid promotional offer notice"
1811
  msgstr ""
1812
 
1813
+ #: admin/html/whats-new.php:447
1814
  msgid "Multiple google map validation for same form"
1815
  msgstr ""
1816
 
1817
+ #: admin/html/whats-new.php:451
1818
  msgid "Various issues on verification, autologin payments & address field"
1819
  msgstr ""
1820
 
1821
+ #: admin/html/whats-new.php:455
1822
  msgid "Docs update for file & attachments feature which is pro only"
1823
  msgstr ""
1824
 
1825
+ #: admin/html/whats-new.php:466
1826
  msgid "Overflow footer on form builder page"
1827
  msgstr ""
1828
 
1829
+ #: admin/html/whats-new.php:470
1830
  msgid "WordPress 5.7 compatibility"
1831
  msgstr ""
1832
 
1833
+ #: admin/html/whats-new.php:474
1834
  msgid "Limited time promotion for weDevs birthday"
1835
  msgstr ""
1836
 
1837
+ #: admin/html/whats-new.php:485
1838
  msgid "Meta key will not change if label update"
1839
  msgstr ""
1840
 
1841
+ #: admin/html/whats-new.php:489
1842
  msgid "Login redirect empty previous url"
1843
  msgstr ""
1844
 
1845
+ #: admin/html/whats-new.php:493
1846
  msgid "Email doesnt set as username"
1847
  msgstr ""
1848
 
1849
+ #: admin/html/whats-new.php:497
1850
  msgid "Post redirection to payment doesn't work"
1851
  msgstr ""
1852
 
1853
+ #: admin/html/whats-new.php:501
1854
  msgid "Address field not working when used with conditional logic"
1855
  msgstr ""
1856
 
1857
+ #: admin/html/whats-new.php:505
1858
  msgid "Ajax type category child of not working"
1859
  msgstr ""
1860
 
1861
+ #: admin/html/whats-new.php:509
1862
  msgid "Non recurring subscription did not work"
1863
  msgstr ""
1864
 
1865
+ #: admin/html/whats-new.php:520
1866
  msgid "Menu position has chenged due to dokan has same menu position"
1867
  msgstr ""
1868
 
1869
+ #: admin/html/whats-new.php:524
1870
  msgid "Drag and drop not working properly for new field"
1871
  msgstr ""
1872
 
1873
+ #: admin/html/whats-new.php:535
1874
  msgid "QR and math captcha added to pro feature list"
1875
  msgstr ""
1876
 
1877
+ #: admin/html/whats-new.php:539
1878
  msgid "Tooltip for category navigate"
1879
  msgstr ""
1880
 
1881
+ #: admin/html/whats-new.php:543
1882
  msgid "Understandable guest payment notice"
1883
  msgstr ""
1884
 
1885
+ #: admin/html/whats-new.php:547
1886
  msgid "Paypal non recurring pack id does not set"
1887
  msgstr ""
1888
 
1889
+ #: admin/html/whats-new.php:558
1890
  msgid "Once trial subscription is used, it couldn't reset"
1891
  msgstr ""
1892
 
1893
+ #: admin/html/whats-new.php:562
1894
  msgid "Subscription cancel doesn't work"
1895
  msgstr ""
1896
 
1897
+ #: admin/html/whats-new.php:566
1898
  msgid "The tax rate was not calculated with the total amount"
1899
  msgstr ""
1900
 
1901
+ #: admin/html/whats-new.php:570
1902
  msgid "The width of the column field was breaking"
1903
  msgstr ""
1904
 
1905
+ #: admin/html/whats-new.php:574
1906
  msgid "Paypal recurring payment"
1907
  msgstr ""
1908
 
1909
+ #: admin/html/whats-new.php:585
1910
  msgid "Updated codebase to fix timezone mismatch"
1911
  msgstr ""
1912
 
1913
+ #: admin/html/whats-new.php:596
1914
  msgid "Custom html content field's width"
1915
  msgstr ""
1916
 
1917
+ #: admin/html/whats-new.php:600
1918
  msgid "All states of New Zealand are added"
1919
  msgstr ""
1920
 
1921
+ #: admin/html/whats-new.php:611
1922
  msgid "Get appropriate user id when role based conditions are present"
1923
  msgstr ""
1924
 
1925
+ #: admin/html/whats-new.php:615
1926
  msgid "Show Invalid subscription message if wrong pack id passed"
1927
  msgstr ""
1928
 
1929
+ #: admin/html/whats-new.php:619
1930
  msgid "URL field new window not working"
1931
  msgstr ""
1932
 
1933
+ #: admin/html/whats-new.php:623
1934
  msgid "Option label not working when & use"
1935
  msgstr ""
1936
 
1937
+ #: admin/html/whats-new.php:627
1938
  msgid "Ajax type category not showing on edit"
1939
  msgstr ""
1940
 
1941
+ #: admin/html/whats-new.php:631
1942
  msgid "Multiple file image can't select"
1943
  msgstr ""
1944
 
1945
+ #: admin/html/whats-new.php:635
1946
  msgid "Subscription pack PayPal Checkout gets \"Error: Access Denied\""
1947
  msgstr ""
1948
 
1949
+ #: admin/html/whats-new.php:639
1950
  msgid "Conflict image field with acf image field"
1951
  msgstr ""
1952
 
1953
+ #: admin/html/whats-new.php:643
1954
  msgid "Missing Auckland State for New Zealand country"
1955
  msgstr ""
1956
 
1957
+ #: admin/html/whats-new.php:647
1958
  msgid "Added support for WooCommerce product category value replacemen"
1959
  msgstr ""
1960
 
1961
+ #: admin/html/whats-new.php:657
1962
  msgid "Add character restriction feature"
1963
  msgstr ""
1964
 
1965
+ #: admin/html/whats-new.php:661
1966
  msgid "Make sure post author edit link works only in frontend"
1967
  msgstr ""
1968
 
1969
+ #: admin/html/whats-new.php:665
1970
  msgid "Inconsistency in lost password reset email message"
1971
  msgstr ""
1972
 
1973
+ #: admin/html/whats-new.php:669
1974
  msgid "Saving custom taxonomy terms when input type is text"
1975
  msgstr ""
1976
 
1977
+ #: admin/html/whats-new.php:673
1978
  msgid "Taxonomy field JS error in builder"
1979
  msgstr ""
1980
 
1981
+ #: admin/html/whats-new.php:677
1982
  msgid "Showing WPUF edit link for WP default roles"
1983
  msgstr ""
1984
 
1985
+ #: admin/html/whats-new.php:681
1986
  msgid "Upload button unresponsive issue in iOS"
1987
  msgstr ""
1988
 
1989
+ #: admin/html/whats-new.php:691
1990
  msgid "Add post edit link for post authors in single or archive pages"
1991
  msgstr ""
1992
 
1993
+ #: admin/html/whats-new.php:695
1994
  msgid "Enhance post delete message"
1995
  msgstr ""
1996
 
1997
+ #: admin/html/whats-new.php:699
1998
  msgid "Refactor control buttons visibility in form builder"
1999
  msgstr ""
2000
 
2001
+ #: admin/html/whats-new.php:703
2002
  msgid "Add missing colons after field label"
2003
  msgstr ""
2004
 
2005
+ #: admin/html/whats-new.php:707
2006
  msgid "Post edit map capability condition"
2007
  msgstr ""
2008
 
2009
+ #: admin/html/whats-new.php:711
2010
  msgid "Role based permission for accessing a post form"
2011
  msgstr ""
2012
 
2013
+ #: admin/html/whats-new.php:715
2014
  msgid "Section-break field alignment"
2015
  msgstr ""
2016
 
2017
+ #: admin/html/whats-new.php:719
2018
  msgid "Pay per post doesn't work if subscription pack is activated"
2019
  msgstr ""
2020
 
2021
+ #: admin/html/whats-new.php:723
2022
  msgid "Mime type for uploading JSON files"
2023
  msgstr ""
2024
 
2025
+ #: admin/html/whats-new.php:727
2026
  msgid "File upload with same file name"
2027
  msgstr ""
2028
 
2029
+ #: admin/html/whats-new.php:731
2030
  msgid "Post preview missing fields"
2031
  msgstr ""
2032
 
2033
+ #: admin/html/whats-new.php:735
2034
  msgid "Illigal variable declartion"
2035
  msgstr ""
2036
 
2037
+ #: admin/html/whats-new.php:739
2038
  msgid "Featured image updating issue"
2039
  msgstr ""
2040
 
2041
+ #: admin/html/whats-new.php:743
2042
  msgid "Conflict with Phlox theme"
2043
  msgstr ""
2044
 
2045
+ #: admin/html/whats-new.php:747
2046
  msgid "Textarea custom field data sanitization"
2047
  msgstr ""
2048
 
2049
+ #: admin/html/whats-new.php:751
2050
  msgid "exclude_type warning in wpuf_category_checklist"
2051
  msgstr ""
2052
 
2053
+ #: admin/html/whats-new.php:755
2054
  msgid "Category field not showing all child categories for selection type child of"
2055
  msgstr ""
2056
 
2057
+ #: admin/html/whats-new.php:759
2058
  msgid "Conflict between image and file upload custom fields"
2059
  msgstr ""
2060
 
2061
+ #: admin/html/whats-new.php:763
2062
  msgid "Login url when login page is not set"
2063
  msgstr ""
2064
 
2065
+ #: admin/html/whats-new.php:773
2066
  msgid ""
2067
  "Use common names for Ivory Coast, North Korea and Sourth Korea instead of "
2068
  "their official names"
2069
  msgstr ""
2070
 
2071
+ #: admin/html/whats-new.php:777
2072
  msgid "Fix condition to use default avatar"
2073
  msgstr ""
2074
 
2075
+ #: admin/html/whats-new.php:781
2076
  msgid "Make Email and URL fields clickable"
2077
  msgstr ""
2078
 
2079
+ #: admin/html/whats-new.php:785
2080
  msgid "Fix redirect after user login"
2081
  msgstr ""
2082
 
2083
+ #: admin/html/whats-new.php:789
2084
  msgid "Sanitize textarea field data"
2085
  msgstr ""
2086
 
2087
+ #: admin/html/whats-new.php:793
2088
  msgid ""
2089
  "Fix missing colon to email, URL, text and textarea labels when renders "
2090
  "their data"
2091
  msgstr ""
2092
 
2093
+ #: admin/html/whats-new.php:797
2094
  msgid "Prevent showing empty labels for fields that have render_field_data method"
2095
  msgstr ""
2096
 
2097
+ #: admin/html/whats-new.php:807
2098
  msgid "Add Namibian Dollar in currency list"
2099
  msgstr ""
2100
 
2101
+ #: admin/html/whats-new.php:811
2102
  msgid "Add sync values option for option data fields"
2103
  msgstr ""
2104
 
2105
+ #: admin/html/whats-new.php:815
2106
  msgid "Allow uploading image that having filesize meets php ini settings"
2107
  msgstr ""
2108
 
2109
+ #: admin/html/whats-new.php:819
2110
  msgid "Limit the selection of one image at a time"
2111
  msgstr ""
2112
 
2113
+ #: admin/html/whats-new.php:823
2114
  msgid "Use file name and size to generate hash to prevent duplicant image upload"
2115
  msgstr ""
2116
 
2117
+ #: admin/html/whats-new.php:827
2118
  msgid "Sanitize text and textarea field data"
2119
  msgstr ""
2120
 
2121
+ #: admin/html/whats-new.php:831
2122
  msgid ""
2123
  "Show label instead of values for radio, checkbox, dropdown and multiselect "
2124
  "data"
2125
  msgstr ""
2126
 
2127
+ #: admin/html/whats-new.php:835
2128
  msgid "Saving custom taxonomies for type text input"
2129
  msgstr ""
2130
 
2131
+ #: admin/html/whats-new.php:839
2132
  msgid "Admin settings link for recaptcha helper text"
2133
  msgstr ""
2134
 
2135
+ #: admin/html/whats-new.php:843
2136
  msgid "Undefined name property for Custom HTML fields"
2137
  msgstr ""
2138
 
2139
+ #: admin/html/whats-new.php:847
2140
  msgid "Delete attachment process"
2141
  msgstr ""
2142
 
2143
+ #: admin/html/whats-new.php:851
2144
  msgid "Missing billing address in invoice PDF"
2145
  msgstr ""
2146
 
2147
+ #: admin/html/whats-new.php:855
2148
  msgid "Showing country field value in frontend post content"
2149
  msgstr ""
2150
 
2151
+ #: admin/html/whats-new.php:859
2152
  msgid "Avatar size display not complying with admin settings size"
2153
  msgstr ""
2154
 
2155
+ #: admin/html/whats-new.php:863
2156
  msgid "Display default avatars on admin settings discussion page"
2157
  msgstr ""
2158
 
2159
+ #: admin/html/whats-new.php:867
2160
  msgid "Redirect to subscription page at registration"
2161
  msgstr ""
2162
 
2163
+ #: admin/html/whats-new.php:871
2164
  msgid "Error notice regarding registration page redirect"
2165
  msgstr ""
2166
 
2167
+ #: admin/html/whats-new.php:875
2168
  msgid "Escaping html in registration errors"
2169
  msgstr ""
2170
 
2171
+ #: admin/html/whats-new.php:879
2172
  msgid "Default login redirect link"
2173
  msgstr ""
2174
 
2175
+ #: admin/html/whats-new.php:883
2176
  msgid "Implementing default WP login page override option"
2177
  msgstr ""
2178
 
2179
+ #: admin/html/whats-new.php:887
2180
  msgid "Transparent background of autosuggestion dropdown"
2181
  msgstr ""
2182
 
2183
+ #: admin/html/whats-new.php:897
2184
  msgid "Import forms system"
2185
  msgstr ""
2186
 
2187
+ #: admin/html/whats-new.php:901
2188
  msgid "Password reset system"
2189
  msgstr ""
2190
 
2191
+ #: admin/html/whats-new.php:905
2192
  msgid "Updated url validation regex to support modern tlds"
2193
  msgstr ""
2194
 
2195
+ #: admin/html/whats-new.php:909
2196
  msgid "Export WPUF forms individually from admin tools page"
2197
  msgstr ""
2198
 
2199
+ #: admin/html/whats-new.php:913
2200
  msgid "Subscription cycle label translation issue"
2201
  msgstr ""
2202
 
2203
+ #: admin/html/whats-new.php:917
2204
  msgid "ACF integration for checkbox fields"
2205
  msgstr ""
2206
 
2207
+ #: admin/html/whats-new.php:921
2208
  msgid "Illegal string offset warning while updating settings"
2209
  msgstr ""
2210
 
2211
+ #: admin/html/whats-new.php:925
2212
  msgid "Conditional logic for Section Break field"
2213
  msgstr ""
2214
 
2215
+ #: admin/html/whats-new.php:929
2216
  msgid "Subscriptions cannot be deleted from backend"
2217
  msgstr ""
2218
 
2219
+ #: admin/html/whats-new.php:933
2220
  msgid "A regression regarding saving checkbox data"
2221
  msgstr ""
2222
 
2223
+ #: admin/html/whats-new.php:937
2224
  msgid "Default value of multi-select fields is not showing"
2225
  msgstr ""
2226
 
2227
+ #: admin/html/whats-new.php:947
2228
  msgid "Hide post edit option when subscription is expired"
2229
  msgstr ""
2230
 
2231
+ #: admin/html/whats-new.php:949
2232
  msgid "Hide post edit option from users whose subscription pack is expired."
2233
  msgstr ""
2234
 
2235
+ #: admin/html/whats-new.php:952
2236
  msgid "Check files to prevent duplicity in media upload"
2237
  msgstr ""
2238
 
2239
+ #: admin/html/whats-new.php:954
2240
  msgid ""
2241
  "A simple measure has been taken to prevent maliciously flooding the site by "
2242
  "uploading same file multiple times. Though this won't work with already "
2243
  "uploaded medias."
2244
  msgstr ""
2245
 
2246
+ #: admin/html/whats-new.php:957
2247
  msgid "Refactor address fields in Account section"
2248
  msgstr ""
2249
 
2250
+ #: admin/html/whats-new.php:959
2251
  msgid "Address edit section from Account section has been rewritten to improve UX."
2252
  msgstr ""
2253
 
2254
+ #: admin/html/whats-new.php:962
2255
  msgid "Update Paypal payment gateway"
2256
  msgstr ""
2257
 
2258
+ #: admin/html/whats-new.php:964
2259
  msgid "Paypal payment gateway has seen some improvements."
2260
  msgstr ""
2261
 
2262
+ #: admin/html/whats-new.php:967
2263
  msgid "Default Category selection improvements"
2264
  msgstr ""
2265
 
2266
+ #: admin/html/whats-new.php:969
2267
  msgid ""
2268
  "An intuitive way of selecting default category of a selected post type has "
2269
  "been introduced."
2270
  msgstr ""
2271
 
2272
+ #: admin/html/whats-new.php:972
2273
  msgid "Compatibility issue with ACF date time field"
2274
  msgstr ""
2275
 
2276
+ #: admin/html/whats-new.php:974
2277
  msgid "A Compatibility issue with ACF date time field has been addressed."
2278
  msgstr ""
2279
 
2280
+ #: admin/html/whats-new.php:977
2281
  msgid "Media title, caption & description not saving"
2282
  msgstr ""
2283
 
2284
+ #: admin/html/whats-new.php:979
2285
  msgid ""
2286
  "Media title, caption & description were not saving from frontend. They will "
2287
  "now."
2288
  msgstr ""
2289
 
2290
+ #: admin/html/whats-new.php:982
2291
  msgid ""
2292
  "The Events Calendar venue and organizer fields issue in WPUF Custom Fields "
2293
  "metabox"
2294
  msgstr ""
2295
 
2296
+ #: admin/html/whats-new.php:984
2297
  msgid ""
2298
  "A workaround has been introduced to save The Events Calendar Venue and "
2299
  "Organizer fields properly from WPUF Custom Fields metabox."
2300
  msgstr ""
2301
 
2302
+ #: admin/html/whats-new.php:987
2303
  msgid "Checkbox data not saving from WPUF Custom Fields metabox"
2304
  msgstr ""
2305
 
2306
+ #: admin/html/whats-new.php:989
2307
  msgid ""
2308
  "Checkboxe data from WPUF Custom Fields metabox were not saving. It has been "
2309
  "fixed."
2310
  msgstr ""
2311
 
2312
+ #: admin/html/whats-new.php:992
2313
  msgid "Multi-column Repeater field data saving issue"
2314
  msgstr ""
2315
 
2316
+ #: admin/html/whats-new.php:994
2317
  msgid ""
2318
  "Multi-column Repeater field data from a form was not saving. It has been "
2319
  "fixed."
2320
  msgstr ""
2321
 
2322
+ #: admin/html/whats-new.php:997
2323
  msgid "Multistep form conflict with Elementor"
2324
  msgstr ""
2325
 
2326
+ #: admin/html/whats-new.php:999
2327
  msgid "Multistep form had a conflict with Elementor. It has been fixed."
2328
  msgstr ""
2329
 
2330
+ #: admin/html/whats-new.php:1002
2331
  msgid "Multiple images showing issue in frontend"
2332
  msgstr ""
2333
 
2334
+ #: admin/html/whats-new.php:1004
2335
  msgid "Multiple images in a post were not showing in frontend. Now they will."
2336
  msgstr ""
2337
 
2338
+ #: admin/html/whats-new.php:1013
2339
  msgid "Nonce not verify on login"
2340
  msgstr ""
2341
 
2342
+ #: admin/html/whats-new.php:1015
2343
  msgid "Return of function wp_verify_nonce() was ignored."
2344
  msgstr ""
2345
 
2346
+ #: admin/html/whats-new.php:1024
2347
  msgid "Option to set which tab shows as active on the account page"
2348
  msgstr ""
2349
 
2350
+ #: admin/html/whats-new.php:1026
2351
  msgid ""
2352
  "Option to set which tab shows as active on the account page. To configure "
2353
  "this setting navigate to wp-admin->User Frontend->Settings->My "
2354
  "Account->Active Tab "
2355
  msgstr ""
2356
 
2357
+ #: admin/html/whats-new.php:1029
2358
  msgid "Unlock option was unavailable after the post being locked"
2359
  msgstr ""
2360
 
2361
+ #: admin/html/whats-new.php:1031
2362
  msgid "Unlock option was unavailable after the post being locked."
2363
  msgstr ""
2364
 
2365
+ #: admin/html/whats-new.php:1034
2366
  msgid "Gutenberg block of WPUF didn't work on bedrock installation"
2367
  msgstr ""
2368
 
2369
+ #: admin/html/whats-new.php:1036
2370
  msgid "Gutenberg block of WPUF didn't work on bedrock installation."
2371
  msgstr ""
2372
 
2373
+ #: admin/html/whats-new.php:1039
2374
  msgid "Sending admin payment received email twice"
2375
  msgstr ""
2376
 
2377
+ #: admin/html/whats-new.php:1041
2378
  msgid ""
2379
  "After processing payment admin & user was receiving payment received email "
2380
  "twice."
2381
  msgstr ""
2382
 
2383
+ #: admin/html/whats-new.php:1044
2384
  msgid ""
2385
  "Add shortcode support to display post information in the Post Expiration "
2386
  "Message"
2387
  msgstr ""
2388
 
2389
+ #: admin/html/whats-new.php:1046
2390
  msgid ""
2391
  "Add shortcode support to display post information in the Post Expiration "
2392
  "Message. You can use: <strong>{post_author} {post_url} {blogname} "
2393
  "{post_title} {post_status}</strong>"
2394
  msgstr ""
2395
 
2396
+ #: admin/html/whats-new.php:1049
2397
  msgid "Add optin on the setup wizard"
2398
  msgstr ""
2399
 
2400
+ #: admin/html/whats-new.php:1051
2401
  msgid ""
2402
  "Added optin on the setup wizard, admin can choose whether he/she wants to "
2403
  "share server environment details (php, mysql, server, WordPress versions), "
2405
  "name and url, admin name and email address. No sensitive data is tracked"
2406
  msgstr ""
2407
 
2408
+ #: admin/html/whats-new.php:1060
2409
  msgid "Post Owner problem"
2410
  msgstr ""
2411
 
2412
+ #: admin/html/whats-new.php:1062
2413
  msgid ""
2414
  "Posts were not assigned to the selected default post owner, this issue has "
2415
  "been fixed."
2416
  msgstr ""
2417
 
2418
+ #: admin/html/whats-new.php:1065
2419
  msgid "Google reCaptcha was not working"
2420
  msgstr ""
2421
 
2422
+ #: admin/html/whats-new.php:1067
2423
  msgid ""
2424
  "Google reCaptcha was not working, users could submit the form without "
2425
  "reCaptcha validation."
2426
  msgstr ""
2427
 
2428
+ #: admin/html/whats-new.php:1076
2429
  msgid "Added column field"
2430
  msgstr ""
2431
 
2432
+ #: admin/html/whats-new.php:1081
2433
  msgid "Unable to render the events on the front-end dashboard"
2434
  msgstr ""
2435
 
2436
+ #: admin/html/whats-new.php:1083
2437
  msgid ""
2438
  "On the frontend dashboard, the submitted events were not showing, you will "
2439
  "get it fixed in this version."
2440
  msgstr ""
2441
 
2442
+ #: admin/html/whats-new.php:1086
2443
  msgid "Page order getting 0(zero) after editing from the frontend"
2444
  msgstr ""
2445
 
2446
+ #: admin/html/whats-new.php:1088
2447
  msgid ""
2448
  "Page order was not saving while editing a post using WPUF form, it has been "
2449
  "fixed."
2450
  msgstr ""
2451
 
2452
+ #: admin/html/whats-new.php:1091
2453
  msgid "Text input field for taxonomies not working"
2454
  msgstr ""
2455
 
2456
+ #: admin/html/whats-new.php:1093
2457
  msgid ""
2458
  "When taxonomy field type is set to `Text Input` then a fatal error was "
2459
  "showing on the frontend, no error with taxonomy field in the latest version."
2460
  msgstr ""
2461
 
2462
+ #: admin/html/whats-new.php:1096
2463
  msgid ""
2464
  "In radio and checkbox field use conditional logic that value does not save "
2465
  "in database"
2466
  msgstr ""
2467
 
2468
+ #: admin/html/whats-new.php:1098
2469
  msgid ""
2470
  "The selected value of radio and checkbox field were not showing while "
2471
  "editing posts from the backend or frontend, you can see the selected value "
2472
  "in this version."
2473
  msgstr ""
2474
 
2475
+ #: admin/html/whats-new.php:1101
2476
  msgid "The args param not working with get_avatar filter"
2477
  msgstr ""
2478
 
2479
+ #: admin/html/whats-new.php:1103
2480
  msgid "The args parameter did not exist with get_avatar filter, which now exists."
2481
  msgstr ""
2482
 
2483
+ #: admin/html/whats-new.php:1106
2484
  msgid "The item in ajax taxonomy field was not selected"
2485
  msgstr ""
2486
 
2487
+ #: admin/html/whats-new.php:1108
2488
  msgid ""
2489
  "When the taxonomy field type is set to Ajax, the submitted terms were not "
2490
  "showing in the backend and frontend which have been fixed."
2491
  msgstr ""
2492
 
2493
+ #: admin/html/whats-new.php:1117
2494
  msgid "Unable to send new user registration email"
2495
  msgstr ""
2496
 
2497
+ #: admin/html/whats-new.php:1119
2498
  msgid ""
2499
  "WP User Frontend default registration form `[wpuf-registration]` was unable "
2500
  "to send the new user registration email."
2501
  msgstr ""
2502
 
2503
+ #: admin/html/whats-new.php:1122
2504
  msgid "WPUF forms block compatibility issue with the latest WP version"
2505
  msgstr ""
2506
 
2507
+ #: admin/html/whats-new.php:1124
2508
  msgid ""
2509
  "With the latest version of WordPress the gutenberg block of WP User "
2510
  "Frontend were not working. In this version, you will get it fixed."
2511
  msgstr ""
2512
 
2513
+ #: admin/html/whats-new.php:1127
2514
  msgid "Page not update where `[wpuf_dashboard]` shortcode exist"
2515
  msgstr ""
2516
 
2517
+ #: admin/html/whats-new.php:1129
2518
  msgid ""
2519
  "While using Gutenberg, the page were not being updated with WPUF shortcode "
2520
  "[wpuf dashboard]"
2521
  msgstr ""
2522
 
2523
+ #: admin/html/whats-new.php:1132
2524
  msgid "Retain default when determining whether to display the admin bar"
2525
  msgstr ""
2526
 
2527
+ #: admin/html/whats-new.php:1134
2528
  msgid ""
2529
  "From the User Frontend Settings, set that Administrator, Editor, Vendor can "
2530
  "see the admin bar. Now, the super admin want, one specific user ( who has "
2534
  "frontend."
2535
  msgstr ""
2536
 
2537
+ #: admin/html/whats-new.php:1137
2538
  msgid "Fatal error when use PHP lower version (5.4 or lower)"
2539
  msgstr ""
2540
 
2541
+ #: admin/html/whats-new.php:1139
2542
  msgid ""
2543
  "It was unable to install WP User Frontend with PHP 5.4 or lower version. "
2544
  "Here is the error details: <br><br><strong>Fatal error: Can't use method "
2546
  "/wp-user-frontend/class/frontend-form-post.php on line 194</strong>"
2547
  msgstr ""
2548
 
2549
+ #: admin/html/whats-new.php:1142
2550
  msgid "Product form was unable to show the single gallery image"
2551
  msgstr ""
2552
 
2553
+ #: admin/html/whats-new.php:1144
2554
  msgid ""
2555
  "When user upload single image for product gallery using WPUF WooCommerce "
2556
  "product form, that image were not showing on the frontend."
2557
  msgstr ""
2558
 
2559
+ #: admin/html/whats-new.php:1153
2560
  msgid "WooCommerce gallery images not getting saved"
2561
  msgstr ""
2562
 
2563
+ #: admin/html/whats-new.php:1155
2564
  msgid ""
2565
  "After releasing version 2.9.3, WooCommerce gallery image field stopped "
2566
  "working. You will get it fixed in this version."
2567
  msgstr ""
2568
 
2569
+ #: admin/html/whats-new.php:1164
2570
  msgid "The Events Calendar Integration Form"
2571
  msgstr ""
2572
 
2573
+ #: admin/html/whats-new.php:1166
2574
  msgid ""
2575
  "Now admin can allow users to create event from the frontend. Currently WPUF "
2576
  "has a one click pre-build event form that has been integrated with The "
2577
  "Events Calendar plugin"
2578
  msgstr ""
2579
 
2580
+ #: admin/html/whats-new.php:1169
2581
  msgid "Post Submission Facility From Account Page"
2582
  msgstr ""
2583
 
2584
+ #: admin/html/whats-new.php:1171
2585
  msgid ""
2586
  "On the frontend account page, added a new menu item named <b>Submit "
2587
  "Post</b>. Now admin can allow users to submit post from their default "
2590
  "you can assign any post form that will use to submit posts."
2591
  msgstr ""
2592
 
2593
+ #: admin/html/whats-new.php:1174
2594
  msgid "Login/Lost Password Link Under Registration Form"
2595
  msgstr ""
2596
 
2597
+ #: admin/html/whats-new.php:1176
2598
  msgid "Added Login/Lost Password link under registration form"
2599
  msgstr ""
2600
 
2601
+ #: admin/html/whats-new.php:1185
2602
  msgid "Added drag and drop image ordering on image upload"
2603
  msgstr ""
2604
 
2605
+ #: admin/html/whats-new.php:1187
2606
  msgid ""
2607
  "Now frontend users can drag & drop the images/files to change the order "
2608
  "while uploading."
2609
  msgstr ""
2610
 
2611
+ #: admin/html/whats-new.php:1190
2612
  msgid "Added reCAPTCHA field in login form"
2613
  msgstr ""
2614
 
2615
+ #: admin/html/whats-new.php:1192
2616
  msgid ""
2617
  "Admin has the option to show reCAPTCHA field in login form. Check the "
2618
  "related settings from <strong>User Frontend > Settings > "
2619
  "Login/Registration</strong>"
2620
  msgstr ""
2621
 
2622
+ #: admin/html/whats-new.php:1195
2623
  msgid "Added preview option in forms"
2624
  msgstr ""
2625
 
2626
+ #: admin/html/whats-new.php:1197
2627
  msgid ""
2628
  "You can see a nice <strong>Preview</strong> button with <strong>Save "
2629
  "Form</strong> button, admin can take a quick look of the form without using "
2630
  "shortcode"
2631
  msgstr ""
2632
 
2633
+ #: admin/html/whats-new.php:1200
2634
  msgid "Fixed hiding “Select Image” button while uploading multiple images."
2635
  msgstr ""
2636
 
2637
+ #: admin/html/whats-new.php:1202
2638
  msgid ""
2639
  "The upload button will not be hidden until the user selects max number of "
2640
  "files "
2641
  msgstr ""
2642
 
2643
+ #: admin/html/whats-new.php:1205
2644
  msgid "Added form limit notice before form submission"
2645
  msgstr ""
2646
 
2647
+ #: admin/html/whats-new.php:1207
2648
  msgid ""
2649
  "Limit notice message was showing after submission, now it is showing when "
2650
  "rendering the form"
2651
  msgstr ""
2652
 
2653
+ #: admin/html/whats-new.php:1210
2654
  msgid "Fixed: default post category not saving"
2655
  msgstr ""
2656
 
2657
+ #: admin/html/whats-new.php:1212
2658
  msgid ""
2659
  "From the form <strong>Settings > Post Settings</strong>, default post "
2660
  "category options were not saving. Now, it's fixed."
2661
  msgstr ""
2662
 
2663
+ #: admin/html/whats-new.php:1215
2664
  msgid ""
2665
  "WPUF dashboard shortcode with form_id attribute was not showing posts "
2666
  "properly"
2667
  msgstr ""
2668
 
2669
+ #: admin/html/whats-new.php:1217
2670
  msgid ""
2671
  "Now you can list posts on the frontend by using <strong>form_id<strong/> "
2672
  "attribute with <strong>[wpuf_dashboard]</strong> shortcode"
2673
  msgstr ""
2674
 
2675
+ #: admin/html/whats-new.php:1226
2676
  msgid "Changed text domain to `wp-user-frontend` from `wpuf` "
2677
  msgstr ""
2678
 
2679
+ #: admin/html/whats-new.php:1228
2680
  msgid ""
2681
  "If you are using other language than English. Please <b>rename</b> your "
2682
  "<i>.po and .mo </i> files to `wp-user-frontend_` from `wpuf_` <br> This "
2683
  "change was made to support translations from translate.wordpress.org"
2684
  msgstr ""
2685
 
2686
+ #: admin/html/whats-new.php:1231
2687
  msgid "Added WP User Frontend Data export and erase functionality."
2688
  msgstr ""
2689
 
2690
+ #: admin/html/whats-new.php:1233
2691
  msgid "Added functionality to export WP User Frontend Data to comply with GDPR."
2692
  msgstr ""
2693
 
2694
+ #: admin/html/whats-new.php:1236
2695
  msgid "Added billing address customizer."
2696
  msgstr ""
2697
 
2698
+ #: admin/html/whats-new.php:1238
2699
  msgid "Added customizer options for billing address in payment page."
2700
  msgstr ""
2701
 
2702
+ #: admin/html/whats-new.php:1241
2703
  msgid "Make the payment page responsive."
2704
  msgstr ""
2705
 
2706
+ #: admin/html/whats-new.php:1243
2707
  msgid "Some css adjustments are made in payment page to make it responsive."
2708
  msgstr ""
2709
 
2710
+ #: admin/html/whats-new.php:1246
2711
  msgid "Fixed image upload issue in Safari."
2712
  msgstr ""
2713
 
2714
+ #: admin/html/whats-new.php:1248
2715
  msgid "Images were not showing after upload in safari, it is fixed now."
2716
  msgstr ""
2717
 
2718
+ #: admin/html/whats-new.php:1251
2719
  msgid "Post update issue after updating or removing post images."
2720
  msgstr ""
2721
 
2722
+ #: admin/html/whats-new.php:1253
2723
  msgid ""
2724
  "Posts cannot be updated after updating or removing post images, it is fixed "
2725
  "now."
2726
  msgstr ""
2727
 
2728
+ #: admin/html/whats-new.php:1262
2729
  msgid "Allow overriding form input styles using theme styling."
2730
  msgstr ""
2731
 
2732
+ #: admin/html/whats-new.php:1264
2733
  msgid "Overriding form input styles using theme style is now possible."
2734
  msgstr ""
2735
 
2736
+ #: admin/html/whats-new.php:1267
2737
  msgid "Fixed Auto Login after registration."
2738
  msgstr ""
2739
 
2740
+ #: admin/html/whats-new.php:1269
2741
  msgid "Auto Login after registration was not working is fixed now."
2742
  msgstr ""
2743
 
2744
+ #: admin/html/whats-new.php:1272
2745
  msgid "Fixed fallback cost calculation"
2746
  msgstr ""
2747
 
2748
+ #: admin/html/whats-new.php:1274
2749
  msgid "Fallback cost calculation was inaccurate for some cases, it is fixed now."
2750
  msgstr ""
2751
 
2752
+ #: admin/html/whats-new.php:1277
2753
  msgid "Removal of subscription from User Profile gets reverted if updated"
2754
  msgstr ""
2755
 
2756
+ #: admin/html/whats-new.php:1279
2757
  msgid "User subscription deletion gets reverted if updated is fixed."
2758
  msgstr ""
2759
 
2760
+ #: admin/html/whats-new.php:1282
2761
  msgid "Show Free pack users in subscribers list."
2762
  msgstr ""
2763
 
2764
+ #: admin/html/whats-new.php:1284
2765
  msgid "Free pack users were not showing in subscribers list, now they will."
2766
  msgstr ""
2767
 
2768
+ #: admin/html/whats-new.php:1293
2769
  msgid "WP User Frontend Guten Block is added"
2770
  msgstr ""
2771
 
2772
+ #: admin/html/whats-new.php:1295
2773
  msgid ""
2774
  "WPUF Form Block is now available to be used within gutenberg editor with "
2775
  "preview of the form. "
2776
  msgstr ""
2777
 
2778
+ #: admin/html/whats-new.php:1298
2779
  msgid "Advanced Custom Fields plugin compatibility"
2780
  msgstr ""
2781
 
2782
+ #: admin/html/whats-new.php:1300
2783
  msgid "Now all your ACF fields can be used within WPUF Post forms. "
2784
  msgstr ""
2785
 
2786
+ #: admin/html/whats-new.php:1303
2787
  msgid "Taxonomy Terms not showing for custom post types"
2788
  msgstr ""
2789
 
2790
+ #: admin/html/whats-new.php:1305
2791
  msgid ""
2792
  "Fixed an issue with taxonomy terms not appearing for Custom Post types "
2793
  "within Form Settings and Dashboard Post Listing"
2794
  msgstr ""
2795
 
2796
+ #: admin/html/whats-new.php:1308
2797
  msgid "Various other code optimizations"
2798
  msgstr ""
2799
 
2800
+ #: admin/html/whats-new.php:1310 admin/html/whats-new.php:1367
2801
  msgid "Code structure organization and optimization for better performance"
2802
  msgstr ""
2803
 
2804
+ #: admin/html/whats-new.php:1319
2805
  msgid "WoooCommerce billing address Sync"
2806
  msgstr ""
2807
 
2808
+ #: admin/html/whats-new.php:1321
2809
  msgid ""
2810
  "If an existing customer has previously set his billing address, that will "
2811
  "be imported into WPUF Billing address "
2812
  msgstr ""
2813
 
2814
+ #: admin/html/whats-new.php:1324
2815
  msgid "Trial subscription message not showing properly"
2816
  msgstr ""
2817
 
2818
+ #: admin/html/whats-new.php:1326
2819
  msgid "Subscriptions with Trial now shows trial notices"
2820
  msgstr ""
2821
 
2822
+ #: admin/html/whats-new.php:1329
2823
  msgid "Reset email Key not working"
2824
  msgstr ""
2825
 
2826
+ #: admin/html/whats-new.php:1331
2827
  msgid "Reset Email key was not working in some cases"
2828
  msgstr ""
2829
 
2830
+ #: admin/html/whats-new.php:1334
2831
  msgid "Post count not showing on the frontend dashboard"
2832
  msgstr ""
2833
 
2834
+ #: admin/html/whats-new.php:1336
2835
  msgid ""
2836
  "Dashboard with multiple post type was not showing post counts properly, is "
2837
  "now fixed and shows count for each post type"
2838
  msgstr ""
2839
 
2840
+ #: admin/html/whats-new.php:1339
2841
  msgid "Login Redirect showing blank page is fixed"
2842
  msgstr ""
2843
 
2844
+ #: admin/html/whats-new.php:1341
2845
  msgid ""
2846
  "If \"Previous Page\" was set for redirection, login redirect was "
2847
  "redirecting to blank page for users who hit login page directly"
2848
  msgstr ""
2849
 
2850
+ #: admin/html/whats-new.php:1350
2851
  msgid "Enhanced Login Redirect to redirect users to previous page"
2852
  msgstr ""
2853
 
2854
+ #: admin/html/whats-new.php:1352
2855
  msgid ""
2856
  "You can choose Previous Page as Login Redirect page settings now to "
2857
  "redirect users to the page from which they went for Login. "
2858
  msgstr ""
2859
 
2860
+ #: admin/html/whats-new.php:1355
2861
  msgid "Email HTML links not Rendreing properly issue is fixed"
2862
  msgstr ""
2863
 
2864
+ #: admin/html/whats-new.php:1357
2865
  msgid ""
2866
  "For some clients emails were not rendering the HTML links properly, this is "
2867
  "now fixed"
2868
  msgstr ""
2869
 
2870
+ #: admin/html/whats-new.php:1360
2871
  msgid "Form Builder : Form Field's Help text styles not showing properly"
2872
  msgstr ""
2873
 
2874
+ #: admin/html/whats-new.php:1362
2875
  msgid "Help texts styling is now fixed and much easier to read and understand"
2876
  msgstr ""
2877
 
2878
+ #: admin/html/whats-new.php:1365
2879
  msgid "Various other code improvements"
2880
  msgstr ""
2881
 
2882
+ #: admin/html/whats-new.php:1376
2883
  msgid "Dashboard Post Listing now supports multiple post types"
2884
  msgstr ""
2885
 
2886
+ #: admin/html/whats-new.php:1378
2887
  msgid ""
2888
  "Now you can show multiple post type in user dashboard using shortcode like "
2889
  "this : <br><b>[wpuf_dashboard post_type=\"post,page,custom_type\"]</b> "
2890
  msgstr ""
2891
 
2892
+ #: admin/html/whats-new.php:1381
2893
  msgid "Added Login Redirect Settings"
2894
  msgstr ""
2895
 
2896
+ #: admin/html/whats-new.php:1383
2897
  msgid ""
2898
  "You can now set a page from <i>WPUF Settings > Login/Registration > "
2899
  "Redirect after Login</i>. When login redirection is active the user will be "
2900
  "redirected to this page after login."
2901
  msgstr ""
2902
 
2903
+ #: admin/html/whats-new.php:1386
2904
  msgid "Image Upload field button text can be changed"
2905
  msgstr ""
2906
 
2907
+ #: admin/html/whats-new.php:1388
2908
  msgid ""
2909
  "The upload button text can now be changed for image upload fields which "
2910
  "defaults to \"Select Image\" if not set. "
2911
  msgstr ""
2912
 
2913
+ #: admin/html/whats-new.php:1391
2914
  msgid "Multi Step Form styles made compatible with more themes"
2915
  msgstr ""
2916
 
2917
+ #: admin/html/whats-new.php:1393
2918
  msgid "Multi Step form can now be styled more easily with other themes "
2919
  msgstr ""
2920
 
2921
+ #: admin/html/whats-new.php:1396
2922
  msgid "Required field condition for google map not working is fixed"
2923
  msgstr ""
2924
 
2925
+ #: admin/html/whats-new.php:1398
2926
  msgid ""
2927
  "If Google Map field was set as required users were able to submit form "
2928
  "without changing the default value."
2929
  msgstr ""
2930
 
2931
+ #: admin/html/whats-new.php:1407
2932
  msgid "Admin form builder is now fully responsive."
2933
  msgstr ""
2934
 
2935
+ #: admin/html/whats-new.php:1409
2936
  msgid ""
2937
  "Now you can edit forms from your mobile devices directly. Our improved "
2938
  "responsive layouts of form builder makes it easy for you to build forms on "
2939
  "the go."
2940
  msgstr ""
2941
 
2942
+ #: admin/html/whats-new.php:1412
2943
  msgid "Added color schemes for creating attractive form layouts."
2944
  msgstr ""
2945
 
2946
+ #: admin/html/whats-new.php:1414
2947
  msgid ""
2948
  "We have added 3 new color schemes for the form layouts which you can choose "
2949
  "from each form's new display settings."
2950
  msgstr ""
2951
 
2952
+ #: admin/html/whats-new.php:1417
2953
  msgid "Restrict Free subscription pack to be enabled multiple times "
2954
  msgstr ""
2955
 
2956
+ #: admin/html/whats-new.php:1419
2957
  msgid ""
2958
  "Free subscription packs now can only be purchased once and the limit "
2959
  "applies properly"
2960
  msgstr ""
2961
 
2962
+ #: admin/html/whats-new.php:1422
2963
  msgid "Various other bug fixes and improvements were made "
2964
  msgstr ""
2965
 
2966
+ #: admin/html/whats-new.php:1424
2967
  msgid "Please see the change log to see full details."
2968
  msgstr ""
2969
 
2970
+ #: admin/html/whats-new.php:1433
2971
  msgid "Added upgrade function for default category"
2972
  msgstr ""
2973
 
2974
+ #: admin/html/whats-new.php:1435
2975
  msgid "Upgrader added to upgrade previously set default post category."
2976
  msgstr ""
2977
 
2978
+ #: admin/html/whats-new.php:1438
2979
  msgid "Subscription pack cannot be canceled"
2980
  msgstr ""
2981
 
2982
+ #: admin/html/whats-new.php:1440
2983
  msgid ""
2984
  "Fixed recurring subscription pack cannot be canceled from my account page "
2985
  "in subscription details section."
2986
  msgstr ""
2987
 
2988
+ #: admin/html/whats-new.php:1443
2989
  msgid "page installer admin notice logic issue"
2990
  msgstr ""
2991
 
2992
+ #: admin/html/whats-new.php:1445
2993
  msgid ""
2994
  "Fixed page installer admin notice logic problem due to new payment settings "
2995
  "default value not set."
2996
  msgstr ""
2997
 
2998
+ #: admin/html/whats-new.php:1455
2999
  msgid "Setup Wizard"
3000
  msgstr ""
3001
 
3002
+ #: admin/html/whats-new.php:1457
3003
  msgid "Setup Wizard added to turn off payment options and install pages."
3004
  msgstr ""
3005
 
3006
+ #: admin/html/whats-new.php:1461
3007
  msgid "Multi-select Category"
3008
  msgstr ""
3009
 
3010
+ #: admin/html/whats-new.php:1463
3011
  msgid "Add multi-select to default category in post form settings."
3012
  msgstr ""
3013
 
3014
+ #: admin/html/whats-new.php:1467
3015
  msgid "Select Text option for Taxonomy"
3016
  msgstr ""
3017
 
3018
+ #: admin/html/whats-new.php:1469
3019
  msgid ""
3020
  "Add Select Text option for taxonomy fields. Now you can add default text "
3021
  "with empty value as first option for Taxonomy dropdown."
3022
  msgstr ""
3023
 
3024
+ #: admin/html/whats-new.php:1472
3025
  msgid "Taxonomy Checkbox Inline"
3026
  msgstr ""
3027
 
3028
+ #: admin/html/whats-new.php:1474
3029
  msgid ""
3030
  "Added checkbox inline option to taxonomy checkbox. You can now display "
3031
  "Taxonomy checkbox fields inline."
3032
  msgstr ""
3033
 
3034
+ #: admin/html/whats-new.php:1484
3035
  msgid "Manage schedule for form submission"
3036
  msgstr ""
3037
 
3038
+ #: admin/html/whats-new.php:1486
3039
  msgid ""
3040
  "Do not accept form submission if the current date is not between the date "
3041
  "range of the schedule."
3042
  msgstr ""
3043
 
3044
+ #: admin/html/whats-new.php:1490
3045
  msgid "Restrict form submission based on the user roles"
3046
  msgstr ""
3047
 
3048
+ #: admin/html/whats-new.php:1492
3049
  msgid ""
3050
  "Restrict form submission based on the user roles. Now you can manage user "
3051
  "role base permission on form submission."
3052
  msgstr ""
3053
 
3054
+ #: admin/html/whats-new.php:1496
3055
  msgid "Limit how many entries a form will accept"
3056
  msgstr ""
3057
 
3058
+ #: admin/html/whats-new.php:1498
3059
  msgid ""
3060
  "Limit how many entries a form will accept and display a custom message when "
3061
  "that limit is reached."
3062
  msgstr ""
3063
 
3064
+ #: admin/html/whats-new.php:1502
3065
  msgid "Show/hide Admin Bar"
3066
  msgstr ""
3067
 
3068
+ #: admin/html/whats-new.php:1504
3069
  msgid "Control the admin bar visibility based on user roles."
3070
  msgstr ""
3071
 
3072
+ #: admin/html/whats-new.php:1508
3073
  msgid "Ajax Login widget"
3074
  msgstr ""
3075
 
3076
+ #: admin/html/whats-new.php:1510
3077
  msgid ""
3078
  "Login user is more simple now with Ajax Login Widget. The simple ajax login "
3079
  "form do not required page loading for login."
3080
  msgstr ""
3081
 
3082
+ #: admin/html/whats-new.php:1514
3083
  msgid "Form submission with Captcha field"
3084
  msgstr ""
3085
 
3086
+ #: admin/html/whats-new.php:1516
3087
  msgid "Form field validation process updated if form submits with captcha field."
3088
  msgstr ""
3089
 
3090
+ #: admin/html/whats-new.php:1530
3091
  msgid "What's New in WPUF?"
3092
  msgstr ""
3093
 
3110
  msgstr ""
3111
 
3112
  #: admin/installer.php:84 admin/settings-options.php:24
3113
+ #: includes/free/admin/shortcode-button.php:79 wpuf-functions.php:2061
3114
  msgid "Dashboard"
3115
  msgstr ""
3116
 
3125
 
3126
  #: admin/installer.php:95 class/subscription.php:410 class/subscription.php:430
3127
  #: class/subscription.php:431 class/subscription.php:432
3128
+ #: includes/free/admin/shortcode-button.php:99 wpuf-functions.php:2044
3129
  msgid "Subscription"
3130
  msgstr ""
3131
 
3221
  msgstr ""
3222
 
3223
  #: admin/posting.php:72 class/asset-loader.php:55 class/render-form.php:1682
3224
+ #: wpuf.php:735
3225
  msgid "Are you sure?"
3226
  msgstr ""
3227
 
3228
+ #: admin/posting.php:80 class/asset-loader.php:63 wpuf.php:746
3229
  msgid "Allowed Files"
3230
  msgstr ""
3231
 
3232
+ #: admin/posting.php:83 class/asset-loader.php:66 wpuf.php:752
3233
  msgid "Maximum number of files reached!"
3234
  msgstr ""
3235
 
3236
+ #: admin/posting.php:84 class/asset-loader.php:67 wpuf.php:753
3237
  msgid "The file you have uploaded exceeds the file size limit. Please try again."
3238
  msgstr ""
3239
 
3240
+ #: admin/posting.php:85 class/asset-loader.php:68 wpuf.php:754
3241
  msgid "You have uploaded an incorrect file type. Please try again."
3242
  msgstr ""
3243
 
3277
  msgid "WPUF Custom Fields"
3278
  msgstr ""
3279
 
3280
+ #: admin/posting.php:346
3281
  msgid "No custom fields found."
3282
  msgstr ""
3283
 
3291
  "features."
3292
  msgstr ""
3293
 
3294
+ #: admin/premium.php:10 includes/free/loader.php:116
3295
  msgid "Pro Features"
3296
  msgstr ""
3297
 
3302
  "mind."
3303
  msgstr ""
3304
 
3305
+ #: admin/premium.php:18 admin/premium.php:21 includes/free/loader.php:125
3306
  msgid "Registration Form Builder"
3307
  msgstr ""
3308
 
3405
  "Long and lengthy forms are uninviting, why build one?"
3406
  msgstr ""
3407
 
3408
+ #: admin/premium.php:93 includes/free/loader.php:88
3409
+ #: includes/free/loader.php:1241
3410
  msgid "Modules"
3411
  msgstr ""
3412
 
3418
  msgid "BuddyPress Profile"
3419
  msgstr ""
3420
 
3421
+ #: admin/premium.php:104 includes/free/loader.php:226
3422
  msgid "Social Login"
3423
  msgstr ""
3424
 
3428
  "Facebook, Twitter and LinkedIn."
3429
  msgstr ""
3430
 
3431
+ #: admin/premium.php:111 admin/premium.php:114 includes/free/loader.php:233
3432
  msgid "User Directory"
3433
  msgstr ""
3434
 
4065
  msgid "Select the post types you will allow users to export."
4066
  msgstr ""
4067
 
4068
+ #: admin/settings-options.php:583
4069
  msgid ""
4070
  "Select profile/registration forms for user roles. These forms will be used "
4071
  "to populate extra edit profile fields in backend."
4330
 
4331
  #: admin/template.php:185 includes/fields/class-abstract-fields.php:681
4332
  #: includes/fields/class-field-textarea.php:9
4333
+ #: includes/fields/class-field-textarea.php:123
4334
  msgid "Textarea"
4335
  msgstr ""
4336
 
4374
  #: class/upload.php:275 includes/fields/class-field-recaptcha.php:147
4375
  #: includes/fields/class-field-sectionbreak.php:55
4376
  #: templates/dashboard/list.php:10 templates/dashboard/posts.php:100
4377
+ #: wpuf-functions.php:1025
4378
  msgid "Title"
4379
  msgstr ""
4380
 
4391
  msgstr ""
4392
 
4393
  #: admin/template.php:583 class/upload.php:277
4394
+ #: includes/fields/class-field-sectionbreak.php:63 wpuf-functions.php:1033
4395
  msgid "Description"
4396
  msgstr ""
4397
 
4425
  msgid "Import"
4426
  msgstr ""
4427
 
4428
+ #: class/asset-loader.php:32 wpuf.php:632
4429
  msgid "is required"
4430
  msgstr ""
4431
 
4432
+ #: class/asset-loader.php:33 wpuf.php:633
4433
  msgid "does not match"
4434
  msgstr ""
4435
 
4436
+ #: class/asset-loader.php:34 wpuf.php:634
4437
  msgid "is not valid"
4438
  msgstr ""
4439
 
4440
+ #: class/asset-loader.php:46 wpuf.php:712
4441
  msgid "Please fix the errors to proceed"
4442
  msgstr ""
4443
 
4444
+ #: class/asset-loader.php:48 wpuf.php:719
4445
  msgid "Word limit reached"
4446
  msgstr ""
4447
 
4448
+ #: class/asset-loader.php:49 wpuf.php:714
4449
  msgid "Are you sure you want to cancel your current subscription ?"
4450
  msgstr ""
4451
 
4582
  msgstr ""
4583
 
4584
  #: class/payment.php:154 includes/class-customizer.php:56
4585
+ #: wpuf-functions.php:2045
4586
  msgid "Billing Address"
4587
  msgstr ""
4588
 
4682
  msgid "Write the full description of your Post"
4683
  msgstr ""
4684
 
4685
+ #: class/post-form-templates/post.php:78 class/post-form-templates/post.php:79
4686
  #: includes/fields/class-field-featured-image.php:9
4687
  #: includes/fields/class-field-featured-image.php:142
 
4688
  #: includes/free/post-form-templates/the_events_calendar.php:126
4689
+ #: includes/free/post-form-templates/the_events_calendar.php:127
4690
  #: templates/dashboard/list.php:7 templates/dashboard/posts.php:97
4691
  msgid "Featured Image"
4692
  msgstr ""
4693
 
4694
+ #: class/post-form-templates/post.php:82
4695
  msgid "Upload the main image of your post"
4696
  msgstr ""
4697
 
4698
+ #: class/post-form-templates/post.php:92
4699
+ #: includes/free/post-form-templates/the_events_calendar.php:139
4700
  msgid "Excerpt"
4701
  msgstr ""
4702
 
4703
+ #: class/post-form-templates/post.php:95
4704
  msgid "Provide a short description of this post (optional)"
4705
  msgstr ""
4706
 
4707
+ #: class/post-form-templates/post.php:112
4708
  #: includes/fields/class-field-post-tags.php:6
4709
  msgid "Tags"
4710
  msgstr ""
4711
 
4712
+ #: class/post-form-templates/post.php:115
4713
+ #: includes/free/post-form-templates/the_events_calendar.php:160
4714
  msgid "Separate tags with commas."
4715
  msgstr ""
4716
 
4717
+ #: class/post-form-templates/post.php:133
4718
  msgid "Create Post"
4719
  msgstr ""
4720
 
4721
+ #: class/post-form-templates/post.php:147
4722
  msgid ""
4723
  "Post has been updated successfully. <a target=\"_blank\" "
4724
  "href=\"%link%\">View post</a>"
4725
  msgstr ""
4726
 
4727
+ #: class/post-form-templates/post.php:149
4728
  msgid "Update Post"
4729
  msgstr ""
4730
 
4934
  msgstr ""
4935
 
4936
  #: class/transactions-list-table.php:47
4937
+ #: includes/free/post-form-templates/the_events_calendar.php:116
4938
  msgid "Cost"
4939
  msgstr ""
4940
 
4941
  #: class/transactions-list-table.php:48 includes/class-privacy.php:334
4942
+ #: includes/free/loader.php:247
4943
  msgid "Tax"
4944
  msgstr ""
4945
 
4992
  msgid "No transactions found."
4993
  msgstr ""
4994
 
4995
+ #: class/upload.php:276 wpuf-functions.php:1029
4996
  msgid "Caption"
4997
  msgstr ""
4998
 
5790
  msgid "Expiry"
5791
  msgstr ""
5792
 
5793
+ #: includes/class-upgrades.php:109
5794
+ msgid "WPUF Data Update Required"
5795
+ msgstr ""
5796
+
5797
+ #: includes/class-upgrades.php:110
5798
+ msgid "Run the updater"
5799
+ msgstr ""
5800
+
5801
+ #: includes/class-upgrades.php:115
5802
+ msgid ""
5803
+ "It is strongly recommended that you backup your database before proceeding. "
5804
+ "Are you sure you wish to run the updater now?"
5805
+ msgstr ""
5806
+
5807
  #: includes/class-user-subscription.php:57
5808
  msgid "You must <a href=\"%s\">purchase a subscription package</a> before posting"
5809
  msgstr ""
5980
  msgstr ""
5981
 
5982
  #: includes/fields/class-abstract-fields.php:465
5983
+ #: includes/fields/class-field-checkbox.php:78
5984
+ #: includes/fields/class-field-radio.php:82
5985
  msgid "Show in inline list"
5986
  msgstr ""
5987
 
5988
  #: includes/fields/class-abstract-fields.php:475
5989
+ #: includes/fields/class-field-checkbox.php:88
5990
+ #: includes/fields/class-field-radio.php:92
5991
  msgid "Show this option in an inline list"
5992
  msgstr ""
5993
 
6083
  msgid "Numeric Field"
6084
  msgstr ""
6085
 
6086
+ #: includes/fields/class-field-post-content.php:9 includes/free/loader.php:856
6087
  msgid "Post Content"
6088
  msgstr ""
6089
 
6228
  msgid "Select a form to insert"
6229
  msgstr ""
6230
 
6231
+ #: includes/free/admin/shortcode-builder.php:9 includes/free/loader.php:104
6232
  msgid "Registration Form"
6233
  msgstr ""
6234
 
6728
  msgid "Update Button text"
6729
  msgstr ""
6730
 
6731
+ #: includes/free/loader.php:96 includes/free/loader.php:157
6732
  msgid "Coupons"
6733
  msgstr ""
6734
 
6735
+ #: includes/free/loader.php:106
6736
  msgid "Use the shortcode %s for a simple and default WordPress registration form."
6737
  msgstr ""
6738
 
6739
+ #: includes/free/loader.php:111
6740
  msgid "Learn How to Setup"
6741
  msgstr ""
6742
 
6743
+ #: includes/free/loader.php:119
6744
  msgid ""
6745
  "Registration form builder is a two way form which can be used both for "
6746
  "<strong>user registration</strong> and <strong>profile editing</strong>."
6747
  msgstr ""
6748
 
6749
+ #: includes/free/loader.php:129
6750
  msgid "Profile Form Builder"
6751
  msgstr ""
6752
 
6753
+ #: includes/free/loader.php:133
6754
  msgid "Register by Subscription Package Purchase"
6755
  msgstr ""
6756
 
6757
+ #: includes/free/loader.php:138 includes/free/loader.php:169
6758
  msgid "Upgrade to Pro Version"
6759
  msgstr ""
6760
 
6761
+ #: includes/free/loader.php:139
6762
  msgid "Learn More"
6763
  msgstr ""
6764
 
6765
+ #: includes/free/loader.php:161
6766
  msgid "Use Coupon codes for subscription for discounts."
6767
  msgstr ""
6768
 
6769
+ #: includes/free/loader.php:165
6770
  msgid "This feature is only available in the Pro Version."
6771
  msgstr ""
6772
 
6773
+ #: includes/free/loader.php:170
6774
  msgid "Learn more about Coupons"
6775
  msgstr ""
6776
 
6777
+ #: includes/free/loader.php:219
6778
+ msgid "SMS"
6779
+ msgstr ""
6780
+
6781
+ #: includes/free/loader.php:240
6782
+ msgid "Invoices"
6783
+ msgstr ""
6784
+
6785
+ #: includes/free/loader.php:254
6786
+ msgid "Content Filtering"
6787
+ msgstr ""
6788
+
6789
+ #: includes/free/loader.php:277
6790
+ msgid "Comments Per Page"
6791
+ msgstr ""
6792
+
6793
+ #: includes/free/loader.php:279
6794
+ msgid "Show how many comments per page in comments add-on"
6795
+ msgstr ""
6796
+
6797
+ #: includes/free/loader.php:287
6798
+ msgid "Ipstack API Key"
6799
+ msgstr ""
6800
+
6801
+ #: includes/free/loader.php:289
6802
+ msgid ""
6803
+ "<a target=\"_blank\" href=\"https://ipstack.com/dashboard\">Register "
6804
+ "here</a> to get your free ipstack api key"
6805
+ msgstr ""
6806
+
6807
+ #: includes/free/loader.php:296
6808
+ msgid "Google Map API"
6809
+ msgstr ""
6810
+
6811
+ #: includes/free/loader.php:298
6812
+ msgid ""
6813
+ "<a target=\"_blank\" "
6814
+ "href=\"https://developers.google.com/maps/documentation/javascript\">API</"
6815
+ "a> key is needed to render Google Maps"
6816
+ msgstr ""
6817
+
6818
+ #: includes/free/loader.php:305 wpuf-functions.php:2043
6819
+ msgid "Edit Profile"
6820
+ msgstr ""
6821
+
6822
+ #: includes/free/loader.php:307
6823
+ msgid "Allow user to update their profile information from the account page"
6824
+ msgstr ""
6825
+
6826
+ #: includes/free/loader.php:316
6827
+ msgid "Profile Form"
6828
+ msgstr ""
6829
+
6830
+ #: includes/free/loader.php:318
6831
+ msgid "User will use this form to update their information from the account page,"
6832
+ msgstr ""
6833
+
6834
+ #: includes/free/loader.php:327
6835
+ msgid "Avatar Size"
6836
+ msgstr ""
6837
+
6838
+ #: includes/free/loader.php:329
6839
+ msgid ""
6840
+ "Avatar size to crop when upload using the registration/profile "
6841
+ "form.(e.g:100x100)"
6842
+ msgstr ""
6843
+
6844
+ #: includes/free/loader.php:338
6845
+ msgid "Pending User Message"
6846
+ msgstr ""
6847
+
6848
+ #: includes/free/loader.php:340
6849
+ msgid "Pending user will see this message when try to log in."
6850
+ msgstr ""
6851
+
6852
+ #: includes/free/loader.php:341
6853
+ msgid ""
6854
+ "<strong>ERROR:</strong> Your account has to be approved by an administrator "
6855
+ "before you can login."
6856
+ msgstr ""
6857
+
6858
+ #: includes/free/loader.php:349
6859
+ msgid "Denied User Message"
6860
+ msgstr ""
6861
+
6862
+ #: includes/free/loader.php:351
6863
+ msgid "Denied user will see this message when try to log in."
6864
+ msgstr ""
6865
+
6866
+ #: includes/free/loader.php:352
6867
+ msgid ""
6868
+ "<strong>ERROR:</strong> Your account has been denied by an administrator, "
6869
+ "please contact admin to approve your account."
6870
+ msgstr ""
6871
+
6872
+ #: includes/free/loader.php:360
6873
+ msgid "<span class=\"dashicons dashicons-money\"></span> Subscription"
6874
+ msgstr ""
6875
+
6876
+ #: includes/free/loader.php:368
6877
+ msgid "<span class=\"dashicons dashicons-admin-generic\"></span> Template Settings"
6878
+ msgstr ""
6879
+
6880
+ #: includes/free/loader.php:376
6881
+ msgid "<span class=\"dashicons dashicons-unlock\"></span> Reset Email"
6882
+ msgstr ""
6883
+
6884
+ #: includes/free/loader.php:384
6885
+ msgid ""
6886
+ "<span class=\"dashicons dashicons-email-alt\"></span> Resend Confirmation "
6887
+ "Email"
6888
+ msgstr ""
6889
+
6890
+ #: includes/free/loader.php:392
6891
+ msgid "<span class=\"dashicons dashicons-groups\"></span> Pending User Email"
6892
+ msgstr ""
6893
+
6894
+ #: includes/free/loader.php:400
6895
+ msgid "<span class=\"dashicons dashicons-dismiss\"></span> Denied User Email"
6896
+ msgstr ""
6897
+
6898
+ #: includes/free/loader.php:408
6899
+ msgid "<span class=\"dashicons dashicons-smiley\"></span> Approved User Email"
6900
+ msgstr ""
6901
+
6902
+ #: includes/free/loader.php:416
6903
+ msgid "<span class=\"dashicons dashicons-smiley\"></span> Account Activated Email"
6904
+ msgstr ""
6905
+
6906
+ #: includes/free/loader.php:424
6907
+ msgid "<span class=\"dashicons dashicons-saved\"></span> Approved Post Email"
6908
+ msgstr ""
6909
+
6910
+ #: includes/free/loader.php:433 includes/free/loader.php:434
6911
+ msgid "Clickatell name"
6912
+ msgstr ""
6913
+
6914
+ #: includes/free/loader.php:440 includes/free/loader.php:441
6915
+ msgid "Clickatell Password"
6916
+ msgstr ""
6917
+
6918
+ #: includes/free/loader.php:447 includes/free/loader.php:448
6919
+ msgid "Clickatell api"
6920
+ msgstr ""
6921
+
6922
+ #: includes/free/loader.php:454 includes/free/loader.php:455
6923
+ msgid "SMSGlobal Name"
6924
+ msgstr ""
6925
+
6926
+ #: includes/free/loader.php:461 includes/free/loader.php:462
6927
+ msgid "SMSGlobal Passord"
6928
+ msgstr ""
6929
+
6930
+ #: includes/free/loader.php:468 includes/free/loader.php:469
6931
+ msgid "Nexmo API"
6932
+ msgstr ""
6933
+
6934
+ #: includes/free/loader.php:475 includes/free/loader.php:476
6935
+ msgid "Nexmo API Secret"
6936
+ msgstr ""
6937
+
6938
+ #: includes/free/loader.php:482 includes/free/loader.php:483
6939
+ msgid "Twillo From Number"
6940
+ msgstr ""
6941
+
6942
+ #: includes/free/loader.php:489 includes/free/loader.php:490
6943
+ msgid "Twillo Account SID"
6944
+ msgstr ""
6945
+
6946
+ #: includes/free/loader.php:496 includes/free/loader.php:497
6947
+ msgid "Twillo Authro Token"
6948
+ msgstr ""
6949
+
6950
+ #: includes/free/loader.php:505
6951
+ msgid "Enable Social Login"
6952
+ msgstr ""
6953
+
6954
+ #: includes/free/loader.php:507
6955
+ msgid ""
6956
+ "Enabling this will add Social Icons under registration form to allow users "
6957
+ "to login or register using Social Profiles"
6958
+ msgstr ""
6959
+
6960
+ #: includes/free/loader.php:513
6961
+ msgid "Facebook App Settings"
6962
+ msgstr ""
6963
+
6964
+ #: includes/free/loader.php:515 includes/free/loader.php:542
6965
+ #: includes/free/loader.php:570 includes/free/loader.php:598
6966
+ #: includes/free/loader.php:626
6967
+ msgid "Create an App"
6968
+ msgstr ""
6969
+
6970
+ #: includes/free/loader.php:516
6971
+ msgid " if you don't have one and fill App ID and App Secret below. "
6972
+ msgstr ""
6973
+
6974
+ #: includes/free/loader.php:521 includes/free/loader.php:577
6975
+ #: includes/free/loader.php:633
6976
+ msgid "Redirect URI"
6977
+ msgstr ""
6978
+
6979
+ #: includes/free/loader.php:528
6980
+ msgid "App Id"
6981
+ msgstr ""
6982
+
6983
+ #: includes/free/loader.php:534
6984
+ msgid "App Secret"
6985
+ msgstr ""
6986
+
6987
+ #: includes/free/loader.php:540
6988
+ msgid "Twitter App Settings"
6989
+ msgstr ""
6990
+
6991
+ #: includes/free/loader.php:543
6992
+ msgid " if you don't have one and fill Consumer key and Consumer Secret below."
6993
+ msgstr ""
6994
+
6995
+ #: includes/free/loader.php:549
6996
+ msgid "Callback URL"
6997
+ msgstr ""
6998
+
6999
+ #: includes/free/loader.php:556
7000
+ msgid "Consumer Key"
7001
+ msgstr ""
7002
+
7003
+ #: includes/free/loader.php:562
7004
+ msgid "Consumer Secret"
7005
+ msgstr ""
7006
+
7007
+ #: includes/free/loader.php:568
7008
+ msgid "Google App Settings"
7009
+ msgstr ""
7010
+
7011
+ #: includes/free/loader.php:571 includes/free/loader.php:599
7012
+ #: includes/free/loader.php:627
7013
+ msgid " if you don't have one and fill Client ID and Client Secret below."
7014
+ msgstr ""
7015
+
7016
+ #: includes/free/loader.php:584 includes/free/loader.php:612
7017
+ #: includes/free/loader.php:640
7018
+ msgid "Client ID"
7019
+ msgstr ""
7020
+
7021
+ #: includes/free/loader.php:590
7022
+ msgid "Client secret"
7023
+ msgstr ""
7024
+
7025
+ #: includes/free/loader.php:596
7026
+ msgid "Linkedin App Settings"
7027
+ msgstr ""
7028
+
7029
+ #: includes/free/loader.php:605
7030
+ msgid "Redirect URL"
7031
+ msgstr ""
7032
+
7033
+ #: includes/free/loader.php:618 includes/free/loader.php:646
7034
+ msgid "Client Secret"
7035
+ msgstr ""
7036
+
7037
+ #: includes/free/loader.php:624
7038
+ msgid "Instagram App Settings"
7039
+ msgstr ""
7040
+
7041
+ #: includes/free/loader.php:654
7042
+ msgid "Profile Gallery Image Size "
7043
+ msgstr ""
7044
+
7045
+ #: includes/free/loader.php:655
7046
+ msgid "Set the image size of picture gallery in frontend"
7047
+ msgstr ""
7048
+
7049
+ #: includes/free/loader.php:662
7050
+ msgid "Avatar Size "
7051
+ msgstr ""
7052
+
7053
+ #: includes/free/loader.php:663
7054
+ msgid "Set the image size of profile picture in frontend"
7055
+ msgstr ""
7056
+
7057
+ #: includes/free/loader.php:670
7058
+ msgid "Profile Header Template"
7059
+ msgstr ""
7060
+
7061
+ #: includes/free/loader.php:682
7062
+ msgid "User Listing Template"
7063
+ msgstr ""
7064
+
7065
+ #: includes/free/loader.php:699
7066
+ msgid "Enable Invoices"
7067
+ msgstr ""
7068
+
7069
+ #: includes/free/loader.php:700
7070
+ msgid "Enable sending invoices for completed payments"
7071
+ msgstr ""
7072
+
7073
+ #: includes/free/loader.php:707
7074
+ msgid "Show Invoices"
7075
+ msgstr ""
7076
+
7077
+ #: includes/free/loader.php:708
7078
+ msgid "Show Invoices option where <code>[wpuf_account]</code> is located"
7079
+ msgstr ""
7080
+
7081
+ #: includes/free/loader.php:716
7082
+ msgid "Set Invoice Logo"
7083
+ msgstr ""
7084
+
7085
+ #: includes/free/loader.php:717
7086
+ msgid "This sets the company Logo to be used in Invoice"
7087
+ msgstr ""
7088
+
7089
+ #: includes/free/loader.php:724
7090
+ msgid "Set Invoice Color"
7091
+ msgstr ""
7092
+
7093
+ #: includes/free/loader.php:725
7094
+ msgid "Set color code to be used in invoice"
7095
+ msgstr ""
7096
+
7097
+ #: includes/free/loader.php:732
7098
+ msgid "From Address"
7099
+ msgstr ""
7100
+
7101
+ #: includes/free/loader.php:733
7102
+ msgid ""
7103
+ "This sets the provider information of the Invoice. Note: use the <xmp "
7104
+ "class=\"wpuf-xmp-tag\"><br></xmp> tag to enter line breaks."
7105
+ msgstr ""
7106
+
7107
+ #: includes/free/loader.php:740
7108
+ msgid "Invoice Title"
7109
+ msgstr ""
7110
+
7111
+ #: includes/free/loader.php:741
7112
+ msgid "This sets the payment information title of the Invoice"
7113
+ msgstr ""
7114
+
7115
+ #: includes/free/loader.php:747
7116
+ msgid "Invoice Paragraph"
7117
+ msgstr ""
7118
+
7119
+ #: includes/free/loader.php:748
7120
+ msgid "This sets the payment information paragraph of the Invoice"
7121
+ msgstr ""
7122
+
7123
+ #: includes/free/loader.php:755
7124
+ msgid "Invoice Footer"
7125
+ msgstr ""
7126
+
7127
+ #: includes/free/loader.php:756
7128
+ msgid "This sets the footer of the Invoice"
7129
+ msgstr ""
7130
+
7131
+ #: includes/free/loader.php:762
7132
+ msgid "Invoice Filename Prefix"
7133
+ msgstr ""
7134
+
7135
+ #: includes/free/loader.php:763
7136
+ msgid "This sets the filename prefix of the Invoice"
7137
+ msgstr ""
7138
+
7139
+ #: includes/free/loader.php:769
7140
+ msgid "Set Invoice Mail Subject"
7141
+ msgstr ""
7142
+
7143
+ #: includes/free/loader.php:770
7144
+ msgid "This sets the mail subject of the Invoice"
7145
+ msgstr ""
7146
+
7147
+ #: includes/free/loader.php:776
7148
+ msgid "Set Invoice Mail Body"
7149
+ msgstr ""
7150
+
7151
+ #: includes/free/loader.php:777
7152
+ msgid "This sets the mail body of the Invoice"
7153
+ msgstr ""
7154
+
7155
+ #: includes/free/loader.php:785
7156
+ msgid "Need help?"
7157
+ msgstr ""
7158
+
7159
+ #: includes/free/loader.php:786
7160
+ msgid ""
7161
+ "Visit the <a href=\"%s\" target=\"_blank\">Tax setup documentation</a> for "
7162
+ "guidance on how to setup tax."
7163
+ msgstr ""
7164
+
7165
+ #: includes/free/loader.php:791
7166
+ msgid "Enable Tax"
7167
+ msgstr ""
7168
+
7169
+ #: includes/free/loader.php:792
7170
+ msgid "Enable tax on payments"
7171
+ msgstr ""
7172
+
7173
+ #: includes/free/loader.php:799
7174
+ msgid "Base Country and State"
7175
+ msgstr ""
7176
+
7177
+ #: includes/free/loader.php:800
7178
+ msgid "Select your base country and state"
7179
+ msgstr ""
7180
+
7181
+ #: includes/free/loader.php:805
7182
+ msgid "Tax Rates"
7183
+ msgstr ""
7184
+
7185
+ #: includes/free/loader.php:806
7186
+ msgid "Add tax rates for specific regions. Enter a percentage, such as 5 for 5%"
7187
+ msgstr ""
7188
+
7189
+ #: includes/free/loader.php:812
7190
+ msgid "Fallback Tax Rate"
7191
+ msgstr ""
7192
+
7193
+ #: includes/free/loader.php:813
7194
+ msgid ""
7195
+ "Customers not in a specific rate will be charged this tax rate. Enter a "
7196
+ "percentage, such as 5 for 5%"
7197
+ msgstr ""
7198
+
7199
+ #: includes/free/loader.php:821 includes/free/loader.php:826
7200
+ msgid "Show prices with tax"
7201
+ msgstr ""
7202
+
7203
+ #: includes/free/loader.php:822
7204
+ msgid "If frontend prices will include tax or not"
7205
+ msgstr ""
7206
+
7207
+ #: includes/free/loader.php:827
7208
+ msgid "Show prices without tax"
7209
+ msgstr ""
7210
+
7211
+ #: includes/free/loader.php:835
7212
+ msgid "Enable Content Filtering"
7213
+ msgstr ""
7214
+
7215
+ #: includes/free/loader.php:836
7216
+ msgid "Enable Content Filtering in frontend"
7217
+ msgstr ""
7218
+
7219
+ #: includes/free/loader.php:843
7220
+ msgid "Keyword Dictionary"
7221
+ msgstr ""
7222
+
7223
+ #: includes/free/loader.php:844
7224
+ msgid "Enter Keywords to Remove. Separate keywords with commas."
7225
+ msgstr ""
7226
+
7227
+ #: includes/free/loader.php:851
7228
+ msgid "Filter main content"
7229
+ msgstr ""
7230
+
7231
+ #: includes/free/loader.php:852
7232
+ msgid "Choose which content to filter."
7233
+ msgstr ""
7234
+
7235
+ #: includes/free/loader.php:855
7236
+ msgid "Post Titles"
7237
+ msgstr ""
7238
+
7239
+ #: includes/free/loader.php:872
7240
  msgid "Upgrade to Pro"
7241
  msgstr ""
7242
 
7243
+ #: includes/free/loader.php:1309
7244
+ msgid "Credit Card"
7245
+ msgstr ""
7246
+
7247
+ #: includes/free/loader.php:1331
7248
+ msgid "Taxonomy Restriction "
7249
+ msgstr ""
7250
+
7251
+ #: includes/free/loader.php:1349
7252
+ msgid "Choose the taxonomy terms you want to enable for this pack:"
7253
+ msgstr ""
7254
+
7255
+ #: includes/free/post-form-templates/easy_digital_download.php:21
7256
+ msgid "EDD Download"
7257
+ msgstr ""
7258
+
7259
  #: includes/free/post-form-templates/the_events_calendar.php:13
7260
  msgid "The Events Calendar"
7261
  msgstr ""
7280
  msgid "Write the full description of your event"
7281
  msgstr ""
7282
 
7283
+ #: includes/free/post-form-templates/the_events_calendar.php:54
7284
  msgid "Event Start"
7285
  msgstr ""
7286
 
7287
+ #: includes/free/post-form-templates/the_events_calendar.php:67
7288
  msgid "Event End"
7289
  msgstr ""
7290
 
7291
+ #: includes/free/post-form-templates/the_events_calendar.php:80
7292
  msgid "All Day Event"
7293
  msgstr ""
7294
 
7295
+ #: includes/free/post-form-templates/the_events_calendar.php:95
7296
  msgid "Event Website"
7297
  msgstr ""
7298
 
7299
+ #: includes/free/post-form-templates/the_events_calendar.php:106
7300
  msgid "Currency Symbol"
7301
  msgstr ""
7302
 
7303
+ #: includes/free/post-form-templates/the_events_calendar.php:130
7304
  msgid "Upload the main image of your event"
7305
  msgstr ""
7306
 
7307
+ #: includes/free/post-form-templates/the_events_calendar.php:142
7308
  msgid "Provide a short description of this event (optional)"
7309
  msgstr ""
7310
 
7311
+ #: includes/free/post-form-templates/the_events_calendar.php:157
7312
  msgid "Event Tags"
7313
  msgstr ""
7314
 
7315
+ #: includes/free/post-form-templates/the_events_calendar.php:174
7316
  msgid "This page is restricted. Please Log in / Register to view this page."
7317
  msgstr ""
7318
 
7319
+ #: includes/free/post-form-templates/the_events_calendar.php:177
7320
  msgid "Create Event"
7321
  msgstr ""
7322
 
7323
+ #: includes/free/post-form-templates/the_events_calendar.php:180
7324
  msgid ""
7325
  "Event has been updated successfully. <a target=\"_blank\" "
7326
  "href=\"%link%\">View event</a>"
7327
  msgstr ""
7328
 
7329
+ #: includes/free/post-form-templates/the_events_calendar.php:182
7330
  msgid "Update Event"
7331
  msgstr ""
7332
 
7338
  msgid "Create a simple product form for WooCommerce."
7339
  msgstr ""
7340
 
7341
+ #: includes/free/subscription.php:14
7342
+ msgid "Recurring "
7343
+ msgstr ""
7344
+
7345
+ #: includes/free/subscription.php:18
7346
  msgid "Enable Recurring Payment"
7347
  msgstr ""
7348
 
7454
  msgid "Submit & Deactivate"
7455
  msgstr ""
7456
 
7457
+ #: lib/class.settings-api.php:409
7458
  msgid "Choose File"
7459
  msgstr ""
7460
 
7765
  msgid "CSV"
7766
  msgstr ""
7767
 
7768
+ #: wpuf-functions.php:1052
7769
  msgid "Directions »"
7770
  msgstr ""
7771
 
7772
+ #: wpuf-functions.php:2290
 
 
 
 
7773
  msgid "United Arab Emirates Dirham"
7774
  msgstr ""
7775
 
7776
+ #: wpuf-functions.php:2295
7777
  msgid "Australian Dollars"
7778
  msgstr ""
7779
 
7780
+ #: wpuf-functions.php:2300
7781
  msgid "Argentine Peso"
7782
  msgstr ""
7783
 
7784
+ #: wpuf-functions.php:2305
7785
  msgid "Bangladeshi Taka"
7786
  msgstr ""
7787
 
7788
+ #: wpuf-functions.php:2310
7789
  msgid "Brazilian Real"
7790
  msgstr ""
7791
 
7792
+ #: wpuf-functions.php:2315
7793
  msgid "Bulgarian Lev"
7794
  msgstr ""
7795
 
7796
+ #: wpuf-functions.php:2320
7797
  msgid "Canadian Dollars"
7798
  msgstr ""
7799
 
7800
+ #: wpuf-functions.php:2325
7801
  msgid "Chilean Peso"
7802
  msgstr ""
7803
 
7804
+ #: wpuf-functions.php:2330
7805
  msgid "Chinese Yuan"
7806
  msgstr ""
7807
 
7808
+ #: wpuf-functions.php:2335
7809
  msgid "Colombian Peso"
7810
  msgstr ""
7811
 
7812
+ #: wpuf-functions.php:2340
7813
  msgid "Czech Koruna"
7814
  msgstr ""
7815
 
7816
+ #: wpuf-functions.php:2345
7817
  msgid "Danish Krone"
7818
  msgstr ""
7819
 
7820
+ #: wpuf-functions.php:2350
7821
  msgid "Dominican Peso"
7822
  msgstr ""
7823
 
7824
+ #: wpuf-functions.php:2355
7825
  msgid "Algerian Dinar"
7826
  msgstr ""
7827
 
7828
+ #: wpuf-functions.php:2360
7829
  msgid "Euros"
7830
  msgstr ""
7831
 
7832
+ #: wpuf-functions.php:2365
7833
  msgid "Hong Kong Dollar"
7834
  msgstr ""
7835
 
7836
+ #: wpuf-functions.php:2370
7837
  msgid "Croatia kuna"
7838
  msgstr ""
7839
 
7840
+ #: wpuf-functions.php:2375
7841
  msgid "Hungarian Forint"
7842
  msgstr ""
7843
 
7844
+ #: wpuf-functions.php:2380
7845
  msgid "Icelandic krona"
7846
  msgstr ""
7847
 
7848
+ #: wpuf-functions.php:2385
7849
  msgid "Indonesia Rupiah"
7850
  msgstr ""
7851
 
7852
+ #: wpuf-functions.php:2390
7853
  msgid "Indian Rupee"
7854
  msgstr ""
7855
 
7856
+ #: wpuf-functions.php:2395
7857
  msgid "Mauritian Rupee"
7858
  msgstr ""
7859
 
7860
+ #: wpuf-functions.php:2400
7861
  msgid "Nepali Rupee"
7862
  msgstr ""
7863
 
7864
+ #: wpuf-functions.php:2405
7865
  msgid "Israeli Shekel"
7866
  msgstr ""
7867
 
7868
+ #: wpuf-functions.php:2410
7869
  msgid "Japanese Yen"
7870
  msgstr ""
7871
 
7872
+ #: wpuf-functions.php:2415
7873
  msgid "Lao Kip"
7874
  msgstr ""
7875
 
7876
+ #: wpuf-functions.php:2420
7877
  msgid "South Korean Won"
7878
  msgstr ""
7879
 
7880
+ #: wpuf-functions.php:2425
7881
  msgid "Malaysian Ringgits"
7882
  msgstr ""
7883
 
7884
+ #: wpuf-functions.php:2430
7885
  msgid "Mexican Peso"
7886
  msgstr ""
7887
 
7888
+ #: wpuf-functions.php:2435
7889
  msgid "Nigerian Naira"
7890
  msgstr ""
7891
 
7892
+ #: wpuf-functions.php:2440
7893
  msgid "Norwegian Krone"
7894
  msgstr ""
7895
 
7896
+ #: wpuf-functions.php:2445
7897
  msgid "New Zealand Dollar"
7898
  msgstr ""
7899
 
7900
+ #: wpuf-functions.php:2450
7901
  msgid "Namibian dollar"
7902
  msgstr ""
7903
 
7904
+ #: wpuf-functions.php:2455
7905
  msgid "Omani Rial"
7906
  msgstr ""
7907
 
7908
+ #: wpuf-functions.php:2460
7909
  msgid "Iranian Rial"
7910
  msgstr ""
7911
 
7912
+ #: wpuf-functions.php:2465
7913
  msgid "Pakistani Rupee"
7914
  msgstr ""
7915
 
7916
+ #: wpuf-functions.php:2470
7917
  msgid "Paraguayan Guaraní"
7918
  msgstr ""
7919
 
7920
+ #: wpuf-functions.php:2475
7921
  msgid "Philippine Pesos"
7922
  msgstr ""
7923
 
7924
+ #: wpuf-functions.php:2480
7925
  msgid "Polish Zloty"
7926
  msgstr ""
7927
 
7928
+ #: wpuf-functions.php:2485
7929
  msgid "Pounds Sterling"
7930
  msgstr ""
7931
 
7932
+ #: wpuf-functions.php:2490
7933
  msgid "Romanian Leu"
7934
  msgstr ""
7935
 
7936
+ #: wpuf-functions.php:2495
7937
  msgid "Russian Ruble"
7938
  msgstr ""
7939
 
7940
+ #: wpuf-functions.php:2500
7941
  msgid "Saudi Riyal"
7942
  msgstr ""
7943
 
7944
+ #: wpuf-functions.php:2505
7945
  msgid "Singapore Dollar"
7946
  msgstr ""
7947
 
7948
+ #: wpuf-functions.php:2510
7949
  msgid "South African rand"
7950
  msgstr ""
7951
 
7952
+ #: wpuf-functions.php:2515
7953
  msgid "Swedish Krona"
7954
  msgstr ""
7955
 
7956
+ #: wpuf-functions.php:2520
7957
  msgid "Swiss Franc"
7958
  msgstr ""
7959
 
7960
+ #: wpuf-functions.php:2525
7961
  msgid "Taiwan New Dollars"
7962
  msgstr ""
7963
 
7964
+ #: wpuf-functions.php:2530
7965
  msgid "Thai Baht"
7966
  msgstr ""
7967
 
7968
+ #: wpuf-functions.php:2535
7969
  msgid "Turkish Lira"
7970
  msgstr ""
7971
 
7972
+ #: wpuf-functions.php:2540
7973
  msgid "Trinidad and Tobago Dollar"
7974
  msgstr ""
7975
 
7976
+ #: wpuf-functions.php:2545
7977
  msgid "US Dollar"
7978
  msgstr ""
7979
 
7980
+ #: wpuf-functions.php:2550
7981
  msgid "Vietnamese Dong"
7982
  msgstr ""
7983
 
7984
+ #: wpuf-functions.php:2555
7985
  msgid "Egyptian Pound"
7986
  msgstr ""
7987
 
7988
+ #: wpuf-functions.php:2560
7989
  msgid "Jordanian dinar"
7990
  msgstr ""
7991
 
7992
+ #: wpuf-functions.php:3493
7993
  msgid "None"
7994
  msgstr ""
7995
 
8009
  msgid "Your Post Has Been Expired"
8010
  msgstr ""
8011
 
8012
+ #: wpuf.php:453
8013
  msgid ""
8014
  "<p style=\"font-size: 13px\">\n"
8015
  " <strong class=\"highlight-text\" "
8022
  " </p>"
8023
  msgstr ""
8024
 
8025
+ #: wpuf.php:470
8026
  msgid "Update WP User Frontend Pro Now"
8027
  msgstr ""
8028
 
8029
+ #: wpuf.php:474
8030
  msgid "Update WP User Frontend Pro NOW"
8031
  msgstr ""
8032
 
8033
+ #: wpuf.php:717
8034
  msgid "Character limit reached"
8035
  msgstr ""
8036
 
8037
+ #: wpuf.php:718
8038
  msgid "Minimum character required "
8039
  msgstr ""
8040
 
8041
+ #: wpuf.php:720
8042
  msgid "Minimum word required "
8043
  msgstr ""
8044
 
8045
+ #: wpuf.php:728
8046
  msgid "Please Cancel Your Currently Active Pack first!"
8047
  msgstr ""
8048
 
8049
+ #: wpuf.php:899
8050
  msgid "Error: Nonce verification failed"
8051
  msgstr ""
8052
 
8128
  msgid "Searching&hellip;"
8129
  msgstr ""
8130
 
8131
+ #: wpuf-functions.php:1521
8132
  msgctxt "tag delimiter"
8133
  msgid ","
8134
  msgstr ""
lib/class.settings-api.php CHANGED
@@ -139,6 +139,7 @@ class WeDevs_Settings_API {
139
  'min' => isset( $option['min'] ) ? $option['min'] : '',
140
  'max' => isset( $option['max'] ) ? $option['max'] : '',
141
  'step' => isset( $option['step'] ) ? $option['step'] : '',
 
142
  );
143
 
144
  add_settings_field( $section . '[' . $option['name'] . ']', $option['label'], (isset($option['callback']) ? $option['callback'] : array($this, 'callback_' . $type )), $section, $section, $args );
@@ -177,10 +178,15 @@ class WeDevs_Settings_API {
177
  $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
178
  $type = isset( $args['type'] ) ? $args['type'] : 'text';
179
  $placeholder = empty( $args['placeholder'] ) ? '' : ' placeholder="' . $args['placeholder'] . '"';
 
180
 
181
- $html = sprintf( '<input type="%1$s" class="%2$s-text" id="%3$s[%4$s]" name="%3$s[%4$s]" value="%5$s"%6$s/>', $type, $size, $args['section'], $args['id'], $value, $placeholder );
182
  $html .= $this->get_field_description( $args );
183
 
 
 
 
 
184
  echo $html;
185
  }
186
 
@@ -206,10 +212,15 @@ class WeDevs_Settings_API {
206
  $min = empty( $args['min'] ) ? '' : ' min="' . $args['min'] . '"';
207
  $max = empty( $args['max'] ) ? '' : ' max="' . $args['max'] . '"';
208
  $step = empty( $args['max'] ) ? '' : ' step="' . $args['step'] . '"';
 
209
 
210
- $html = sprintf( '<input type="%1$s" class="%2$s-number" id="%3$s[%4$s]" name="%3$s[%4$s]" value="%5$s"%6$s%7$s%8$s%9$s/>', $type, $size, $args['section'], $args['id'], $value, $placeholder, $min, $max, $step );
211
  $html .= $this->get_field_description( $args );
212
 
 
 
 
 
213
  echo $html;
214
  }
215
 
@@ -219,16 +230,20 @@ class WeDevs_Settings_API {
219
  * @param array $args settings field args
220
  */
221
  function callback_checkbox( $args ) {
222
-
223
- $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
224
 
225
  $html = '<fieldset>';
226
  $html .= sprintf( '<label for="wpuf-%1$s[%2$s]">', $args['section'], $args['id'] );
227
  $html .= sprintf( '<input type="hidden" name="%1$s[%2$s]" value="off" />', $args['section'], $args['id'] );
228
- $html .= sprintf( '<input type="checkbox" class="checkbox" id="wpuf-%1$s[%2$s]" name="%1$s[%2$s]" value="on" %3$s />', $args['section'], $args['id'], checked( $value, 'on', false ) );
229
  $html .= sprintf( '%1$s</label>', $args['desc'] );
230
  $html .= '</fieldset>';
231
 
 
 
 
 
232
  echo $html;
233
  }
234
 
@@ -238,11 +253,12 @@ class WeDevs_Settings_API {
238
  * @param array $args settings field args
239
  */
240
  function callback_multicheck( $args ) {
 
 
 
241
 
242
- $value = $this->get_option( $args['id'], $args['section'], $args['std'] );
243
- $value = $value ? $value : array();
244
  $html = '<fieldset>';
245
- $html .= sprintf( '<input type="hidden" name="%1$s[%2$s]" value="" />', $args['section'], $args['id'] );
246
  foreach ( $args['options'] as $key => $label ) {
247
  $checked = in_array($key, $value) ? $key : '0';
248
  $html .= sprintf( '<label for="wpuf-%1$s[%2$s][%3$s]">', $args['section'], $args['id'], $key );
@@ -253,6 +269,10 @@ class WeDevs_Settings_API {
253
  $html .= $this->get_field_description( $args );
254
  $html .= '</fieldset>';
255
 
 
 
 
 
256
  echo $html;
257
  }
258
 
@@ -262,19 +282,23 @@ class WeDevs_Settings_API {
262
  * @param array $args settings field args
263
  */
264
  function callback_radio( $args ) {
265
-
266
- $value = $this->get_option( $args['id'], $args['section'], $args['std'] );
267
- $html = '<fieldset>';
268
 
269
  foreach ( $args['options'] as $key => $label ) {
270
  $html .= sprintf( '<label for="wpuf-%1$s[%2$s][%3$s]">', $args['section'], $args['id'], $key );
271
- $html .= sprintf( '<input type="radio" class="radio" id="wpuf-%1$s[%2$s][%3$s]" name="%1$s[%2$s]" value="%3$s" %4$s />', $args['section'], $args['id'], $key, checked( $value, $key, false ) );
272
  $html .= sprintf( '%1$s</label><br>', $label );
273
  }
274
 
275
  $html .= $this->get_field_description( $args );
276
  $html .= '</fieldset>';
277
 
 
 
 
 
278
  echo $html;
279
  }
280
 
@@ -284,10 +308,11 @@ class WeDevs_Settings_API {
284
  * @param array $args settings field args
285
  */
286
  function callback_select( $args ) {
 
 
 
287
 
288
- $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
289
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
290
- $html = sprintf( '<select class="%1$s" name="%2$s[%3$s]" id="%2$s[%3$s]">', $size, $args['section'], $args['id'] );
291
 
292
  foreach ( $args['options'] as $key => $label ) {
293
  $html .= sprintf( '<option value="%s"%s>%s</option>', $key, selected( $value, $key, false ), $label );
@@ -296,6 +321,10 @@ class WeDevs_Settings_API {
296
  $html .= sprintf( '</select>' );
297
  $html .= $this->get_field_description( $args );
298
 
 
 
 
 
299
  echo $html;
300
  }
301
 
@@ -309,10 +338,15 @@ class WeDevs_Settings_API {
309
  $value = esc_textarea( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
310
  $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
311
  $placeholder = empty( $args['placeholder'] ) ? '' : ' placeholder="'.$args['placeholder'].'"';
 
312
 
313
- $html = sprintf( '<textarea rows="5" cols="55" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]"%4$s>%5$s</textarea>', $size, $args['section'], $args['id'], $placeholder, $value );
314
  $html .= $this->get_field_description( $args );
315
 
 
 
 
 
316
  echo $html;
317
  }
318
 
@@ -323,7 +357,13 @@ class WeDevs_Settings_API {
323
  * @return string
324
  */
325
  function callback_html( $args ) {
326
- echo $this->get_field_description( $args );
 
 
 
 
 
 
327
  }
328
 
329
  /**
@@ -362,16 +402,21 @@ class WeDevs_Settings_API {
362
  * @param array $args settings field args
363
  */
364
  function callback_file( $args ) {
365
-
366
- $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
367
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
368
- $id = $args['section'] . '[' . $args['id'] . ']';
369
- $label = isset( $args['options']['button_label'] ) ? $args['options']['button_label'] : __( 'Choose File', 'wp-user-frontend' );
370
-
371
- $html = sprintf( '<input type="text" class="%1$s-text wpsa-url" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s"/>', $size, $args['section'], $args['id'], $value );
 
372
  $html .= '<input type="button" class="button wpsa-browse" value="' . $label . '" />';
373
  $html .= $this->get_field_description( $args );
374
 
 
 
 
 
375
  echo $html;
376
  }
377
 
@@ -381,13 +426,17 @@ class WeDevs_Settings_API {
381
  * @param array $args settings field args
382
  */
383
  function callback_password( $args ) {
 
 
 
384
 
385
- $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
386
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
387
-
388
- $html = sprintf( '<input type="password" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s"/>', $size, $args['section'], $args['id'], $value );
389
  $html .= $this->get_field_description( $args );
390
 
 
 
 
 
391
  echo $html;
392
  }
393
 
@@ -397,13 +446,17 @@ class WeDevs_Settings_API {
397
  * @param array $args settings field args
398
  */
399
  function callback_color( $args ) {
 
 
 
400
 
401
- $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
402
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
403
-
404
- $html = sprintf( '<input type="text" class="%1$s-text wp-color-picker-field" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s" data-default-color="%5$s" />', $size, $args['section'], $args['id'], $value, $args['std'] );
405
  $html .= $this->get_field_description( $args );
406
 
 
 
 
 
407
  echo $html;
408
  }
409
 
@@ -512,8 +565,10 @@ class WeDevs_Settings_API {
512
  function show_forms() {
513
  ?>
514
  <div class="metabox-holder">
515
- <?php foreach ( $this->settings_sections as $form ) { ?>
516
- <div id="<?php echo $form['id']; ?>" class="group" style="display: none;">
 
 
517
  <form method="post" action="options.php">
518
  <?php
519
  do_action( 'wsa_form_top_' . $form['id'], $form );
@@ -528,7 +583,13 @@ class WeDevs_Settings_API {
528
  <?php endif; ?>
529
  </form>
530
  </div>
531
- <?php } ?>
 
 
 
 
 
 
532
  </div>
533
  <?php
534
  $this->script();
@@ -609,7 +670,10 @@ class WeDevs_Settings_API {
609
  // Finally, open the modal
610
  file_frame.open();
611
  });
612
- });
 
 
 
613
  </script>
614
 
615
  <style type="text/css">
139
  'min' => isset( $option['min'] ) ? $option['min'] : '',
140
  'max' => isset( $option['max'] ) ? $option['max'] : '',
141
  'step' => isset( $option['step'] ) ? $option['step'] : '',
142
+ 'is_pro_preview' => ! empty( $option['is_pro_preview'] ) ? $option['is_pro_preview'] : false,
143
  );
144
 
145
  add_settings_field( $section . '[' . $option['name'] . ']', $option['label'], (isset($option['callback']) ? $option['callback'] : array($this, 'callback_' . $type )), $section, $section, $args );
178
  $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
179
  $type = isset( $args['type'] ) ? $args['type'] : 'text';
180
  $placeholder = empty( $args['placeholder'] ) ? '' : ' placeholder="' . $args['placeholder'] . '"';
181
+ $disabled = ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ? 'disabled' : '';
182
 
183
+ $html = sprintf( '<input type="%1$s" class="%2$s-text" id="%3$s[%4$s]" name="%3$s[%4$s]" value="%5$s"%6$s %7$s/>', $type, $size, $args['section'], $args['id'], $value, $placeholder, $disabled );
184
  $html .= $this->get_field_description( $args );
185
 
186
+ if ( ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ) {
187
+ $html .= wpuf_get_pro_preview_html();
188
+ }
189
+
190
  echo $html;
191
  }
192
 
212
  $min = empty( $args['min'] ) ? '' : ' min="' . $args['min'] . '"';
213
  $max = empty( $args['max'] ) ? '' : ' max="' . $args['max'] . '"';
214
  $step = empty( $args['max'] ) ? '' : ' step="' . $args['step'] . '"';
215
+ $disabled = ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ? 'disabled' : '';
216
 
217
+ $html = sprintf( '<input type="%1$s" class="%2$s-number" id="%3$s[%4$s]" name="%3$s[%4$s]" value="%5$s"%6$s%7$s%8$s%9$s %10$s/>', $type, $size, $args['section'], $args['id'], $value, $placeholder, $min, $max, $step, $disabled );
218
  $html .= $this->get_field_description( $args );
219
 
220
+ if ( ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ) {
221
+ $html .= wpuf_get_pro_preview_html();
222
+ }
223
+
224
  echo $html;
225
  }
226
 
230
  * @param array $args settings field args
231
  */
232
  function callback_checkbox( $args ) {
233
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
234
+ $disabled = ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ? 'disabled' : '';
235
 
236
  $html = '<fieldset>';
237
  $html .= sprintf( '<label for="wpuf-%1$s[%2$s]">', $args['section'], $args['id'] );
238
  $html .= sprintf( '<input type="hidden" name="%1$s[%2$s]" value="off" />', $args['section'], $args['id'] );
239
+ $html .= sprintf( '<input type="checkbox" class="checkbox" id="wpuf-%1$s[%2$s]" name="%1$s[%2$s]" value="on" %3$s %4$s />', $args['section'], $args['id'], checked( $value, 'on', false ), $disabled );
240
  $html .= sprintf( '%1$s</label>', $args['desc'] );
241
  $html .= '</fieldset>';
242
 
243
+ if ( ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ) {
244
+ $html .= wpuf_get_pro_preview_html();
245
+ }
246
+
247
  echo $html;
248
  }
249
 
253
  * @param array $args settings field args
254
  */
255
  function callback_multicheck( $args ) {
256
+ $value = $this->get_option( $args['id'], $args['section'], $args['std'] );
257
+ $value = $value ? $value : [];
258
+ $disabled = ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ? 'disabled' : '';
259
 
 
 
260
  $html = '<fieldset>';
261
+ $html .= sprintf( '<input type="hidden" name="%1$s[%2$s]" value="" %3$s />', $args['section'], $args['id'], $disabled );
262
  foreach ( $args['options'] as $key => $label ) {
263
  $checked = in_array($key, $value) ? $key : '0';
264
  $html .= sprintf( '<label for="wpuf-%1$s[%2$s][%3$s]">', $args['section'], $args['id'], $key );
269
  $html .= $this->get_field_description( $args );
270
  $html .= '</fieldset>';
271
 
272
+ if ( ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ) {
273
+ $html .= wpuf_get_pro_preview_html();
274
+ }
275
+
276
  echo $html;
277
  }
278
 
282
  * @param array $args settings field args
283
  */
284
  function callback_radio( $args ) {
285
+ $value = $this->get_option( $args['id'], $args['section'], $args['std'] );
286
+ $disabled = ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ? 'disabled' : '';
287
+ $html = '<fieldset>';
288
 
289
  foreach ( $args['options'] as $key => $label ) {
290
  $html .= sprintf( '<label for="wpuf-%1$s[%2$s][%3$s]">', $args['section'], $args['id'], $key );
291
+ $html .= sprintf( '<input type="radio" class="radio" id="wpuf-%1$s[%2$s][%3$s]" name="%1$s[%2$s]" value="%3$s" %4$s %5$s />', $args['section'], $args['id'], $key, checked( $value, $key, false ), $disabled );
292
  $html .= sprintf( '%1$s</label><br>', $label );
293
  }
294
 
295
  $html .= $this->get_field_description( $args );
296
  $html .= '</fieldset>';
297
 
298
+ if ( ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ) {
299
+ $html .= wpuf_get_pro_preview_html();
300
+ }
301
+
302
  echo $html;
303
  }
304
 
308
  * @param array $args settings field args
309
  */
310
  function callback_select( $args ) {
311
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
312
+ $disabled = ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ? 'disabled' : '';
313
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular';
314
 
315
+ $html = sprintf( '<select class="%1$s" name="%2$s[%3$s]" id="%2$s[%3$s]" %4$s>', $size, $args['section'], $args['id'], $disabled );
 
 
316
 
317
  foreach ( $args['options'] as $key => $label ) {
318
  $html .= sprintf( '<option value="%s"%s>%s</option>', $key, selected( $value, $key, false ), $label );
321
  $html .= sprintf( '</select>' );
322
  $html .= $this->get_field_description( $args );
323
 
324
+ if ( ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ) {
325
+ $html .= wpuf_get_pro_preview_html();
326
+ }
327
+
328
  echo $html;
329
  }
330
 
338
  $value = esc_textarea( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
339
  $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
340
  $placeholder = empty( $args['placeholder'] ) ? '' : ' placeholder="'.$args['placeholder'].'"';
341
+ $disabled = ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ? 'disabled' : '';
342
 
343
+ $html = sprintf( '<textarea rows="5" cols="55" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]"%4$s %5$s>%6$s</textarea>', $size, $args['section'], $args['id'], $placeholder, $disabled, $value );
344
  $html .= $this->get_field_description( $args );
345
 
346
+ if ( ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ) {
347
+ $html .= wpuf_get_pro_preview_html();
348
+ }
349
+
350
  echo $html;
351
  }
352
 
357
  * @return string
358
  */
359
  function callback_html( $args ) {
360
+ $html = $this->get_field_description( $args );
361
+
362
+ if ( ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ) {
363
+ $html .= wpuf_get_pro_preview_html();
364
+ }
365
+
366
+ echo $html;
367
  }
368
 
369
  /**
402
  * @param array $args settings field args
403
  */
404
  function callback_file( $args ) {
405
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
406
+ $disabled = ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ? 'disabled' : '';
407
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular';
408
+ $id = $args['section'] . '[' . $args['id'] . ']';
409
+ $label = isset( $args['options']['button_label'] ) ? $args['options']['button_label'] : __( 'Choose File',
410
+ 'wp-user-frontend' );
411
+
412
+ $html = sprintf( '<input type="text" class="%1$s-text wpsa-url" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s" %5$s/>', $size, $args['section'], $args['id'], $value, $disabled );
413
  $html .= '<input type="button" class="button wpsa-browse" value="' . $label . '" />';
414
  $html .= $this->get_field_description( $args );
415
 
416
+ if ( ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ) {
417
+ $html .= wpuf_get_pro_preview_html();
418
+ }
419
+
420
  echo $html;
421
  }
422
 
426
  * @param array $args settings field args
427
  */
428
  function callback_password( $args ) {
429
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
430
+ $disabled = ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ? 'disabled' : '';
431
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular';
432
 
433
+ $html = sprintf( '<input type="password" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s" %5$s/>', $size, $args['section'], $args['id'], $value, $disabled );
 
 
 
434
  $html .= $this->get_field_description( $args );
435
 
436
+ if ( ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ) {
437
+ $html .= wpuf_get_pro_preview_html();
438
+ }
439
+
440
  echo $html;
441
  }
442
 
446
  * @param array $args settings field args
447
  */
448
  function callback_color( $args ) {
449
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
450
+ $disabled = ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ? 'disabled' : '';
451
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular';
452
 
453
+ $html = sprintf( '<input type="text" class="%1$s-text wp-color-picker-field" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s" data-default-color="%5$s" %6$s />', $size, $args['section'], $args['id'], $value, $args['std'], $disabled );
 
 
 
454
  $html .= $this->get_field_description( $args );
455
 
456
+ if ( ! empty( $args['is_pro_preview'] ) && $args['is_pro_preview'] ) {
457
+ $html .= wpuf_get_pro_preview_html();
458
+ }
459
+
460
  echo $html;
461
  }
462
 
565
  function show_forms() {
566
  ?>
567
  <div class="metabox-holder">
568
+ <?php foreach ( $this->settings_sections as $form ) {
569
+ $class = ! empty( $form['class'] ) ? esc_attr( $form['class'] ) : '';
570
+ ?>
571
+ <div id="<?php echo $form['id']; ?>" class="group <?php echo $class; ?>" style="display: none;">
572
  <form method="post" action="options.php">
573
  <?php
574
  do_action( 'wsa_form_top_' . $form['id'], $form );
583
  <?php endif; ?>
584
  </form>
585
  </div>
586
+ <?php
587
+ }
588
+ if ( ! wpuf()->is_pro() ) {
589
+ echo wpuf_get_pro_preview_html();
590
+ echo wpuf_get_pro_preview_tooltip();
591
+ }
592
+ ?>
593
  </div>
594
  <?php
595
  $this->script();
670
  // Finally, open the modal
671
  file_frame.open();
672
  });
673
+
674
+ // disable the pro preview checkboxes
675
+ $('span.pro-icon-title').siblings('input[type="checkbox"]').prop('disabled', true);
676
+ });
677
  </script>
678
 
679
  <style type="text/css">
readme.txt CHANGED
@@ -1,109 +1,109 @@
1
- === WP User Frontend - Membership, Profile, Registration & Post Submission Plugin for WordPress ===
2
  Contributors: tareq1988, nizamuddinbabu, wedevs
3
  Donate link: https://tareq.co/donate/
4
  Tags: Forms, registration, profile-builder, login, membership, frontend-post
5
  Requires at least: 4.0
6
- Tested up to: 6.0.2
7
  Requires PHP: 5.6
8
- Stable tag: 3.5.29
9
  License: GPLv2
10
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
11
 
12
- Frontend post submission, guest post, membership, login, registration and profile builder. The best frontend plugin for WordPress.
13
 
14
  == Description ==
15
 
16
- WP User Frontend is one of the best frontend builder plugin for WordPress. It includes frontend dashboard, frontend editor & publishing, and frontend uploader for WordPress user profile, post submissions, and memberships.
17
 
18
  <strong>FREE FEATURES</strong>
19
 
20
  <strong>#1 Frontend Post Submission, Membership, Profile Builder & WordPress Editor Plugin</strong>
21
 
22
- Unlimited post type form creation. The forms give users the ability to create new posts, edit their profile all from the site frontend, so that the user does not need to enter the backend admin panel to do action.
23
 
24
  <strong>Update Profile from the Frontend</strong>
25
 
26
  This WordPress Profile Plugin allows registered users to edit their profile using default fields from frontend without having backend access. Unlimited fields can be added using PRO.
27
 
28
- <strong>Flexibility for admins</strong>
29
 
30
- Admins can manage users from frontend as well as configure from backend those who can access the dashboard.
31
 
32
- <strong>Featured image & image</strong>
33
 
34
- Users can upload image from the frontend. Users can also upload post featured image. Image upload on post content area
35
 
36
- <strong>Drag-n-drop form builder</strong>
37
 
38
- Easily fill your form with fields using drag-n-drops and real-time preview that updates as you make changes. You can see how your form will look like eventually from the dashboard!
39
 
40
- <strong>Publish your WPUF forms using Gutenberg</strong>
41
 
42
- Easily add your published forms in Gutenberg editor with the WPUF block. When users want to publish forms on a page, they can simply select it from the drop-down included in the dedicated WPUF block for Gutenberg. The entire form automatically renders within the editor as well as on page. It’s much easier than manually copying and pasting shortcodes! Saves you a ton of time and clicks. But you can also do it the old style using the shortcodes block.
43
 
44
- <strong>Use anywhere easily with shortcodes</strong>
45
 
46
  All of the forms get an unique shortcode which you can paste on any page and the form will generate without breaking the style of your theme.
47
 
48
  <strong>WordPress Guest Post Submission</strong>
49
 
50
- Enable guests to post from your site frontend without registering with WP User Frontend, the WordPress User Registration Plugin. Choose to require name and email address to automatically register and allow them to comment on their posts. Allow email verification for guests.
51
 
52
- <strong>Role Base Support</strong>
53
 
54
- Enable certain user roles to make posts, create unauthorized message you want to show.
55
 
56
- <strong>Submit and update anything from Frontend</strong>
57
 
58
- Users can upload images, fill out forms, even entry data with multiple choice menus. Allow users to update their posts from the frontend.
59
 
60
- <strong>Build customized forms with custom post types</strong>
61
 
62
- Taking the advantage of custom post types will allow you to work on any platform. WP User Frontend is WooCommerce supported, so you can also create products using our forms.
63
 
64
- <strong>Set post status, post message, update post button text</strong>
65
 
66
- Assign separate default status for a new and edit post, the message you want to show to users after form submission, and change the text of submit buttons as you like.
67
 
68
- <strong>Custom Redirection after login and submission</strong>
69
 
70
- Redirect users to another page after logging in, form submission or edit form submission.
71
 
72
- <strong>Earn with subscription based posting</strong>
73
 
74
- Create subscription packs to take “Pay Per Post” payments. Submissions posted via these subscriptions have duration and posting limits.
75
 
76
- <strong>Schedule forms & restrict entries</strong>
77
 
78
- Choose to keep your form active for certain dates. Set a message when form expires. And limit entries to as many as required. The PRO version also allows setting up post expiration.
79
 
80
- <strong>Get reminded with emails</strong>
81
 
82
- Trigger emails on multiple events like new form submission, guest posts, publish notification and new subscriptions. With PRO, more email notifications can be set up.
83
 
84
  <strong>Integrate with Advanced Custom Fields (ACF)</strong>
85
 
86
- Connect form fields with ACF fields to view user submissions in ACF format from dashboard. Allow users to edit fields from frontend.
87
 
88
- <strong>Create subscription packs, pay-per-posts & receive payments from users</strong>
89
 
90
  Create and subscribe users to membership packs, allow pay per post, force subscription package purchase, and set fallback pay per post charges with this WordPress Membership Plugin.
91
 
92
- <strong>Manage Transactions</strong>
93
 
94
- Approve or make pending membership requests. View all details from a single screen.
95
 
96
- <strong>Manage or Import/Export forms</strong>
97
 
98
- Install required WPUF pages in a click, delete post forms, registration forms or subscriptions in one go. Import forms from other places and export forms as JSON.
99
 
100
- <strong>Custom Login/Registration Form</strong>
101
 
102
- This WordPress Registration Form Plugin also allows to build registration form using default forms. With PRO, more fields can be added.
103
 
104
  <strong>Display Custom Fields Data in Post</strong>
105
 
106
- Custom fields data are viewable to visitors on frontend on single post pages. Admins can disable this feature also.
107
 
108
  = How to download and install WPUF FREE =
109
 
@@ -127,35 +127,32 @@ Try an <a href="https://wedevs.com/in/wpuf/demo">Online Demo</a> of the FREE & P
127
  <strong>WP User Frontend PRO – Premium Features</strong>
128
 
129
  * 20+ Modules [BuddyPress, Paid Memberships Pro, Social Login, User Directory, User Activity, Stripe, MailChimp, Private Messaging, HTML Email Templates & more]
130
- * Content restriction
131
- * Menu restriction
132
- * Post expiration facility
133
- * Conditional logic
134
- * Profile form builder
135
- * 18 custom fields
136
- * Custom taxonomy support
137
- * Post update notification
138
- * Multistep forms
139
- * Payment invoice
140
- * Coupons
141
- * Different profile edit forms for different user roles
142
- * Profile fields are also generated on the backend
143
- * Custom taxonomies
144
- * Taxonomy restriction
145
- * Form layouts and form templates
146
- * WooCommerce support
147
- * Registration form builder
148
- * Assign new roles to forms
149
- * Captcha support
150
- * Update user profile information from frontend
151
- * Files & attachments upload
152
- * Avatar upload
153
- * User profiles in backend
154
- * Exclusive contents
155
- * Frontend Customizer
156
- * More email notification options
157
- * Tax in payments
158
- * Vendor registration template for Dokan, WC Marketplace, WC Vendors
159
 
160
  <strong>Premium Modules</strong>
161
 
@@ -263,6 +260,18 @@ First you need to go to the dashboard, then when you click "edit", you'll be
263
  redirected to the edit page with that post id. Then you'll see the edit post form.
264
 
265
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
266
  v3.5.29 (15 Sep, 2022) =
267
 
268
  * Enhancement - Short-code encryption updated for registration page
1
+ === WP User Frontend - Registration, User Profile, Membership, Content Restriction, User Directory, and Frontend Post Submission Plugin ===
2
  Contributors: tareq1988, nizamuddinbabu, wedevs
3
  Donate link: https://tareq.co/donate/
4
  Tags: Forms, registration, profile-builder, login, membership, frontend-post
5
  Requires at least: 4.0
6
+ Tested up to: 6.1.1
7
  Requires PHP: 5.6
8
+ Stable tag: 3.6.0
9
  License: GPLv2
10
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
11
 
12
+ Get frontend post, content access & restriction, user login & registration, subscription & membership, form builder, user directory & profile builder for your website.
13
 
14
  == Description ==
15
 
16
+ WP User Frontend makes the frontend better for you! It includes frontend dashboard, frontend editor, publishing, and uploader for WordPress user profile, post submissions, and memberships.
17
 
18
  <strong>FREE FEATURES</strong>
19
 
20
  <strong>#1 Frontend Post Submission, Membership, Profile Builder & WordPress Editor Plugin</strong>
21
 
22
+ Unlimited post-type form creation. The forms give users the ability to create new posts and edit their profile all from the site frontend, so that the user does not need to enter the backend admin panel to do action.
23
 
24
  <strong>Update Profile from the Frontend</strong>
25
 
26
  This WordPress Profile Plugin allows registered users to edit their profile using default fields from frontend without having backend access. Unlimited fields can be added using PRO.
27
 
28
+ <strong>Flexibility for Admins</strong>
29
 
30
+ Admins can manage users from the frontend as well as configure from the backend who can access the dashboard.
31
 
32
+ <strong>Featured Image & Image Upload</strong>
33
 
34
+ Users can upload images from the frontend. They can also upload featured image for a post using the Image Upload option on the post content area.
35
 
36
+ <strong>Drag-and-drop Form Builder</strong>
37
 
38
+ Quickly build your form with necessary fields using drag-and-drops and real-time preview that updates as you make changes. You can also see how your form will look like eventually from the dashboard!
39
 
40
+ <strong>Publish Your WPUF Forms Using Gutenberg</strong>
41
 
42
+ Easily add your published forms in the Gutenberg editor with the WPUF block. When users want to publish a form on a page, they can simply select it from the drop-down included in the dedicated WPUF block for Gutenberg. The entire form automatically renders within the editor as well as on the page. It’s much easier than manually copying and pasting shortcodes! Saves you a ton of time and clicks. But you can also do it the old style using the shortcodes block.
43
 
44
+ <strong>Use Forms Anywhere Easily with Shortcodes</strong>
45
 
46
  All of the forms get an unique shortcode which you can paste on any page and the form will generate without breaking the style of your theme.
47
 
48
  <strong>WordPress Guest Post Submission</strong>
49
 
50
+ Enable guests to post from your site frontend without registering with WP User Frontend, the WordPress User Registration plugin. Choose to require name and email address to automatically register and allow them to comment on their posts. Allow email verification for guests.
51
 
52
+ <strong>Role Based Access Control</strong>
53
 
54
+ Enable certain user roles to make posts, while restricting others. Create the unauthorized message you want to show for the restricted users.
55
 
56
+ <strong>Submit and Update Anything from Frontend</strong>
57
 
58
+ Users can upload images, fill out forms, even enter data with multiple choice menus. Allow users to update their posts from the front end.
59
 
60
+ <strong>Build Customized Forms with Custom Post Types</strong>
61
 
62
+ Taking the advantage of custom post types will allow you to work on any platform. WP User Frontend is WooCommerce supported, so you can also create products for your WooCommerce site using our forms.
63
 
64
+ <strong>Set Post Status, Post Message, Update Post Button text</strong>
65
 
66
+ Assign separate default statuses for new posts or edited posts. Set the message you want to show to users after form submission, and change the text of submit buttons as you like.
67
 
68
+ <strong>Custom Redirection After Login and Submission</strong>
69
 
70
+ Redirect users to another page after logging in, form submission, or editing form submission.
71
 
72
+ <strong>Earn with Subscription Based Posting</strong>
73
 
74
+ Create subscription packs to earn through “Pay Per Post” payments. Submissions posted via these subscriptions have duration and posting limits.
75
 
76
+ <strong>Schedule Forms & Restrict Entries</strong>
77
 
78
+ Choose to keep your form active for certain dates. Set a message when the form expires. And limit entries to as many as required. The PRO version also allows setting up post expiration.
79
 
80
+ <strong>Get Reminded with Emails</strong>
81
 
82
+ Trigger emails on multiple events like new form submissions, guest posts, publish notifications, and new subscriptions. More email notifications can be set up with the PRO version.
83
 
84
  <strong>Integrate with Advanced Custom Fields (ACF)</strong>
85
 
86
+ Connect form fields with ACF fields to view user submissions in ACF format from your dashboard. Allow users to edit fields from front end.
87
 
88
+ <strong>Create Subscription Packs, Pay-per-posts, & Receive Payments from Users</strong>
89
 
90
  Create and subscribe users to membership packs, allow pay per post, force subscription package purchase, and set fallback pay per post charges with this WordPress Membership Plugin.
91
 
92
+ <strong>Manage Transactions and Membership</strong>
93
 
94
+ Approve or keep membership requests pending you’re in complete control. View all details from a single screen.
95
 
96
+ <strong>Manage and Import/Export Forms Easily</strong>
97
 
98
+ Install required WPUF pages in a click, delete post forms, registration forms, or subscriptions in one go. Import forms from other places and export forms as JSON.
99
 
100
+ <strong>Custom Login & Registration Form</strong>
101
 
102
+ This WordPress Registration Form Plugin also allows you to build registration forms using default templates. More fields can be added with PRO.
103
 
104
  <strong>Display Custom Fields Data in Post</strong>
105
 
106
+ Custom field data are viewable to visitors on frontend on single post pages. Admins can also disable this if they don’t want to display custom fields to everyone.
107
 
108
  = How to download and install WPUF FREE =
109
 
127
  <strong>WP User Frontend PRO – Premium Features</strong>
128
 
129
  * 20+ Modules [BuddyPress, Paid Memberships Pro, Social Login, User Directory, User Activity, Stripe, MailChimp, Private Messaging, HTML Email Templates & more]
130
+ * Content restriction: Restrict or lock your exclusive content or pages or just a specific part of a content, based on registration, user roles, or subscriptions.
131
+ * Menu restriction: Lock or hide your website's menu links for certain users based on user roles, registration, or subscriptions.
132
+ * Post expiration facility: Automatically take down published posts on your sites after a given time based on subscription packs or specific forms.
133
+ * Conditional logic: Use conditional logic in your forms to show or hide fields, sections, and pages based on user selections.
134
+ * Profile form builder: Build your own custom profile form with as many fields you need.
135
+ * 20+ custom fields: Utilize fields like Text, Text Area, Dropdown, Multi Select, Hidden, Repeat, Phone, Time, Google Maps, and a lot more to customize your forms according to your requirements.
136
+ * Custom taxonomy support: Use custom taxonomies for WooCommerce products. Use them as drop-down, multi-select, or check-box lists.
137
+ * Post update notification: Get notified through email when an author updates a new post. Make the notification email dynamic using shortcodes.
138
+ * Multistep forms: Break down a form in multi steps easily from its settings.
139
+ * Payment invoice: For every successful transaction, an invoice is generated and emailed to the user. You can customize several fields of the invoice.
140
+ * Coupons: Create and manage coupons for your Subscription Packs.
141
+ * Personalized forms: Create different registration and profile edit forms for different user roles.
142
+ * User profiles in backend: The custom elements you create in Profile Forms are generated in the admin profile area too.
143
+ * Taxonomy restriction: Restrict users to post on a taxonomy/category based on subscription packs.
144
+ * Form layouts and form templates: Quickly create forms from pre-defined templates. Drag-and-drop fields to customize it further. Vendor registration templates are available for Dokan, WC Marketplace, and WC Vendors.
145
+ * WooCommerce support: Create a frontend interface to post and manage products of your WooCommerce powered site.
146
+ * Registration form builder: Use templates or build with your own set of registration elements to register users on your site.
147
+ * Assign new roles to forms: Create different registration forms for different user roles. New users will be assigned the role according to the form they used.
148
+ * Captcha support: Prevent bots and spam attacks using Google reCAPTCHA or Really Simple CAPTCHA.
149
+ * Update user profile information from frontend: No need to go to the backend to update your profile, do it from frontend.
150
+ * Files & attachments upload: Let users upload files and attachments or embed playable audio & video files using Post Forms.
151
+ * Avatar upload: Let users upload profile pictures. It supports Gravatar and locally uploaded avatars work side by side.
152
+ * Frontend Customizer: Allows admins to customize colors and labels for some important frontend elements and features of WPUF.
153
+ * More email notification options: Configure email notifications for the important events.
154
+ * Tax in payments: Apply custom country and state-wise tax rates to: Pay Per Post Forms and
155
+ Subscription Packs.
 
 
 
156
 
157
  <strong>Premium Modules</strong>
158
 
260
  redirected to the edit page with that post id. Then you'll see the edit post form.
261
 
262
  == Changelog ==
263
+ = v3.6.0 (23 Nov, 2022) =
264
+
265
+ * Enhancement - Admin dashboard news and update meta-box added
266
+ * Enhancement - Upgrade prompts design
267
+
268
+ * Fix - Email style handled
269
+ * Fix - text-area type selection(Normal, Rich text-area, Teeny Rich text-area) bug in field options
270
+ * Fix - Frontend form validation
271
+ * Fix - Default value not saving for radio, dropdown, checkbox
272
+
273
+ * Update - sweetalert2 version
274
+
275
  v3.5.29 (15 Sep, 2022) =
276
 
277
  * Enhancement - Short-code encryption updated for registration page
wpuf-functions.php CHANGED
@@ -824,8 +824,9 @@ function wpuf_get_gateways( $context = 'admin' ) {
824
  $return[ $id ] = $gate['admin_label'];
825
  } else {
826
  $return[ $id ] = [
827
- 'label' => $gate['checkout_label'],
828
- 'icon' => isset( $gate['icon'] ) ? $gate['icon'] : '',
 
829
  ];
830
  }
831
  }
@@ -1991,6 +1992,26 @@ function wpuf_get_post_form_templates() {
1991
  return apply_filters( 'wpuf_get_post_form_templates', $integrations );
1992
  }
1993
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1994
  /**
1995
  * Get countries
1996
  *
@@ -3437,15 +3458,15 @@ function get_formatted_mail_body( $message, $subject ) {
3437
  }
3438
 
3439
  try {
3440
-
3441
  // apply CSS styles inline for picky email clients
3442
  $emogrifier = new Emogrifier( $content, $css );
3443
- $content = $emogrifier->emogrify();
 
 
3444
  } catch ( Exception $e ) {
3445
  echo esc_html( $e->getMessage() );
3446
  }
3447
 
3448
- return $content;
3449
  }
3450
 
3451
  return $message;
@@ -4420,3 +4441,58 @@ function wpuf_get_image_sizes_array( $size = '' ) {
4420
  }
4421
  return $sizes;
4422
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
824
  $return[ $id ] = $gate['admin_label'];
825
  } else {
826
  $return[ $id ] = [
827
+ 'label' => $gate['checkout_label'],
828
+ 'icon' => isset( $gate['icon'] ) ? $gate['icon'] : '',
829
+ 'is_pro_preview' => ! empty( $gate['is_pro_preview'] ) ? esc_attr( $gate['is_pro_preview'] ) : false,
830
  ];
831
  }
832
  }
1992
  return apply_filters( 'wpuf_get_post_form_templates', $integrations );
1993
  }
1994
 
1995
+ /**
1996
+ * Get the pro form templates list
1997
+ *
1998
+ * @since 3.6.0
1999
+ *
2000
+ * @return mixed|null
2001
+ */
2002
+ function wpuf_get_pro_form_previews() {
2003
+ $template_names = [];
2004
+
2005
+ /**
2006
+ * Filter pro post form templates to preview
2007
+ *
2008
+ * @since 3.6.0
2009
+ *
2010
+ * @param array $template_names
2011
+ */
2012
+ return apply_filters( 'wpuf_get_pro_form_previews', $template_names );
2013
+ }
2014
+
2015
  /**
2016
  * Get countries
2017
  *
3458
  }
3459
 
3460
  try {
 
3461
  // apply CSS styles inline for picky email clients
3462
  $emogrifier = new Emogrifier( $content, $css );
3463
+ $emogrifier->enableCssToHtmlMapping();
3464
+
3465
+ return $emogrifier->emogrify();
3466
  } catch ( Exception $e ) {
3467
  echo esc_html( $e->getMessage() );
3468
  }
3469
 
 
3470
  }
3471
 
3472
  return $message;
4441
  }
4442
  return $sizes;
4443
  }
4444
+
4445
+ /**
4446
+ * The HTML preview part when hovering over a pro settings field
4447
+ *
4448
+ * @since 3.6.0
4449
+ *
4450
+ * @return string
4451
+ */
4452
+ function wpuf_get_pro_preview_html() {
4453
+ $crown_icon = WPUF_ROOT . '/assets/images/crown.svg';
4454
+ return sprintf( '<div class="pro-field-overlay">
4455
+ <a href="%1$s" target="%2$s" class="%3$s">Upgrade to PRO<span class="pro-icon icon-white"> %4$s</span></a>
4456
+ </div>', esc_url( WPUF_Pro_Prompt::get_upgrade_to_pro_popup_url() ), '_blank', 'wpuf-button button-upgrade-to-pro',
4457
+ file_get_contents( $crown_icon ) );
4458
+ }
4459
+
4460
+ /**
4461
+ * The HTML tooltip when hovering over a pro settings field
4462
+ *
4463
+ * @since 3.6.0
4464
+ *
4465
+ * @return string
4466
+ */
4467
+ function wpuf_get_pro_preview_tooltip() {
4468
+ $crown_icon = WPUF_ROOT . '/assets/images/crown.svg';
4469
+ $check_icon = WPUF_ROOT . '/assets/images/check.svg';
4470
+ $features = [
4471
+ '24/7 Priority Support',
4472
+ '20+ Premium Modules',
4473
+ 'User Activity and Reports',
4474
+ 'Private Messaging Option',
4475
+ 'License for 20 websites',
4476
+ ];
4477
+ $html = '<div class="wpuf-pro-field-tooltip">';
4478
+ $html .= '<h3 class="tooltip-header">Available in Pro. Also enjoy:</h3>';
4479
+ $html .= '<ul>';
4480
+
4481
+ foreach ( $features as $feature ) {
4482
+ $html .= sprintf(
4483
+ '<li><span class="tooltip-check">%1$s</span> %2$s</li>',
4484
+ file_get_contents( $check_icon ),
4485
+ esc_html( $feature )
4486
+ );
4487
+ }
4488
+
4489
+ $html .= '</ul>';
4490
+ $html .= sprintf( '<div class="pro-link"><a href="%1$s" target="%2$s" class="%3$s">Upgrade to PRO<span class="pro-icon icon-white"> %4$s</span></a></div>',
4491
+ esc_url( WPUF_Pro_Prompt::get_upgrade_to_pro_popup_url() ), '_blank', 'wpuf-button button-upgrade-to-pro',
4492
+ file_get_contents( $crown_icon ) );
4493
+
4494
+ $html .= '<i></i>';
4495
+ $html .= '</div>';
4496
+
4497
+ return $html;
4498
+ }
wpuf.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: WP User Frontend
4
  Plugin URI: https://wordpress.org/plugins/wp-user-frontend/
5
  Description: Create, edit, delete, manages your post, pages or custom post types from frontend. Create registration forms, frontend profile and more...
6
  Author: weDevs
7
- Version: 3.5.29
8
  Author URI: https://wedevs.com/?utm_source=WPUF_Author_URI
9
  License: GPL2 or later
10
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -12,7 +12,7 @@ Text Domain: wp-user-frontend
12
  Domain Path: /languages
13
  */
14
 
15
- define( 'WPUF_VERSION', '3.5.29' );
16
  define( 'WPUF_FILE', __FILE__ );
17
  define( 'WPUF_ROOT', __DIR__ );
18
  define( 'WPUF_ROOT_URI', plugins_url( '', __FILE__ ) );
@@ -318,6 +318,7 @@ final class WP_User_Frontend {
318
  include_once WPUF_ROOT . '/includes/class-whats-new.php';
319
  include_once WPUF_ROOT . '/includes/class-acf.php';
320
  include_once WPUF_ROOT . '/includes/class-privacy.php';
 
321
  } else {
322
  require_once WPUF_ROOT . '/class/frontend-dashboard.php';
323
  require_once WPUF_ROOT . '/includes/free/class-registration.php';
@@ -355,9 +356,9 @@ final class WP_User_Frontend {
355
  $this->container['customize'] = new WPUF_Customizer_Options();
356
  $this->container['log'] = new WPUF_Log();
357
 
358
- add_action( 'dokan_loaded', function () {
359
  $this->container['dokan_integration'] = new WPUF_Dokan_Integration();
360
- } );
361
 
362
  if ( class_exists( 'WCMp' ) ) {
363
  $this->container['wcmp_integration'] = new WPUF_WCMp_Integration();
@@ -379,6 +380,7 @@ final class WP_User_Frontend {
379
  $this->container['whats_new'] = new WPUF_Whats_New();
380
  $this->container['wpuf_acf'] = new WPUF_ACF_Compatibility();
381
  $this->container['privacy'] = new WPUF_Privacy();
 
382
  } else {
383
  $this->container['dashboard'] = new WPUF_Frontend_Dashboard();
384
  $this->container['payment'] = new WPUF_Payment();
@@ -417,11 +419,7 @@ final class WP_User_Frontend {
417
 
418
  require_once WPUF_ROOT . '/includes/class-upgrades.php';
419
 
420
- $upgrader = new WPUF_Upgrades();
421
-
422
- if ( $upgrader->needs_update() ) {
423
- $upgrader->perform_updates();
424
- }
425
  }
426
 
427
  /**
@@ -694,7 +692,7 @@ final class WP_User_Frontend {
694
  public function plugin_scripts() {
695
  wp_enqueue_style( 'wpuf-css' );
696
  wp_enqueue_style( 'jquery-ui', WPUF_ASSET_URI . '/css/jquery-ui-1.9.1.custom.css' );
697
- wp_enqueue_style( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.css', [], WPUF_VERSION );
698
 
699
  wp_enqueue_script( 'jquery' );
700
  wp_enqueue_script( 'jquery-ui-datepicker' );
@@ -705,7 +703,7 @@ final class WP_User_Frontend {
705
  wp_enqueue_script( 'wpuf-upload', WPUF_ASSET_URI . '/js/upload.js', [ 'jquery', 'plupload-handlers', 'jquery-ui-sortable' ] );
706
  wp_enqueue_script( 'wpuf-form' );
707
  wp_enqueue_script( 'wpuf-subscriptions' );
708
- wp_enqueue_script( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.js', [], WPUF_VERSION );
709
 
710
  wp_localize_script(
711
  'wpuf-form', 'wpuf_frontend', apply_filters(
4
  Plugin URI: https://wordpress.org/plugins/wp-user-frontend/
5
  Description: Create, edit, delete, manages your post, pages or custom post types from frontend. Create registration forms, frontend profile and more...
6
  Author: weDevs
7
+ Version: 3.6.0
8
  Author URI: https://wedevs.com/?utm_source=WPUF_Author_URI
9
  License: GPL2 or later
10
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
12
  Domain Path: /languages
13
  */
14
 
15
+ define( 'WPUF_VERSION', '3.6.0' );
16
  define( 'WPUF_FILE', __FILE__ );
17
  define( 'WPUF_ROOT', __DIR__ );
18
  define( 'WPUF_ROOT_URI', plugins_url( '', __FILE__ ) );
318
  include_once WPUF_ROOT . '/includes/class-whats-new.php';
319
  include_once WPUF_ROOT . '/includes/class-acf.php';
320
  include_once WPUF_ROOT . '/includes/class-privacy.php';
321
+ include_once WPUF_ROOT . '/admin/dashboard-metabox.php';
322
  } else {
323
  require_once WPUF_ROOT . '/class/frontend-dashboard.php';
324
  require_once WPUF_ROOT . '/includes/free/class-registration.php';
356
  $this->container['customize'] = new WPUF_Customizer_Options();
357
  $this->container['log'] = new WPUF_Log();
358
 
359
+ if ( class_exists( 'WeDevs_Dokan' ) ) {
360
  $this->container['dokan_integration'] = new WPUF_Dokan_Integration();
361
+ }
362
 
363
  if ( class_exists( 'WCMp' ) ) {
364
  $this->container['wcmp_integration'] = new WPUF_WCMp_Integration();
380
  $this->container['whats_new'] = new WPUF_Whats_New();
381
  $this->container['wpuf_acf'] = new WPUF_ACF_Compatibility();
382
  $this->container['privacy'] = new WPUF_Privacy();
383
+ $this->container['dashboard_mb'] = new Dashboard_Metabox();
384
  } else {
385
  $this->container['dashboard'] = new WPUF_Frontend_Dashboard();
386
  $this->container['payment'] = new WPUF_Payment();
419
 
420
  require_once WPUF_ROOT . '/includes/class-upgrades.php';
421
 
422
+ $this->container['upgrades'] = new WPUF_Upgrades();
 
 
 
 
423
  }
424
 
425
  /**
692
  public function plugin_scripts() {
693
  wp_enqueue_style( 'wpuf-css' );
694
  wp_enqueue_style( 'jquery-ui', WPUF_ASSET_URI . '/css/jquery-ui-1.9.1.custom.css' );
695
+ wp_enqueue_style( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.css', [], '11.4.30' );
696
 
697
  wp_enqueue_script( 'jquery' );
698
  wp_enqueue_script( 'jquery-ui-datepicker' );
703
  wp_enqueue_script( 'wpuf-upload', WPUF_ASSET_URI . '/js/upload.js', [ 'jquery', 'plupload-handlers', 'jquery-ui-sortable' ] );
704
  wp_enqueue_script( 'wpuf-form' );
705
  wp_enqueue_script( 'wpuf-subscriptions' );
706
+ wp_enqueue_script( 'wpuf-sweetalert2', WPUF_ASSET_URI . '/vendor/sweetalert2/dist/sweetalert2.js', [], '11.4.30' );
707
 
708
  wp_localize_script(
709
  'wpuf-form', 'wpuf_frontend', apply_filters(