' . __( 'You can use vars', 'creame-whatsapp-me' ) . ' ' .
'
? ' .
diff --git a/admin/class-joinchat-woo-admin.php b/admin/class-joinchat-woo-admin.php
index cbf5d2b..3df9c43 100644
--- a/admin/class-joinchat-woo-admin.php
+++ b/admin/class-joinchat-woo-admin.php
@@ -51,6 +51,8 @@ public function extra_settings( $settings ) {
'message_text_product' => '',
'message_text_on_sale' => '',
'message_send_product' => '',
+ 'woo_btn_position' => 'none',
+ 'woo_btn_text' => '',
);
return array_merge( $settings, $woo_settings );
@@ -68,6 +70,8 @@ public function settings_validate( $input ) {
$input['message_text_product'] = JoinChatUtil::clean_input( $input['message_text_product'] );
$input['message_text_on_sale'] = JoinChatUtil::clean_input( $input['message_text_on_sale'] );
$input['message_send_product'] = JoinChatUtil::clean_input( $input['message_send_product'] );
+ $input['btn_position'] = array_key_exists( $input['btn_position'], $this->btn_positions() ) ? $input['btn_position'] : 'none';
+ $input['woo_btn_text'] = JoinChatUtil::clean_input( $input['woo_btn_text'] );
return $input;
}
@@ -84,6 +88,7 @@ public function settings_i18n( $settings ) {
$settings['message_text_product'] = 'Call to Action for Products';
$settings['message_text_on_sale'] = 'Call to Action for Products on Sale';
$settings['message_send_product'] = 'Message for Products';
+ $settings['woo_btn_text'] = 'Product Button Text';
return $settings;
}
@@ -128,6 +133,28 @@ public function custom_taxonomies( $taxonomies ) {
}
+ /**
+ * Return Product Button available positions
+ *
+ * Array of WooCommerce action => named position
+ *
+ * @since 4.4.0
+ * @return array
+ */
+ private function btn_positions() {
+
+ $positions = array(
+ 'woocommerce_before_add_to_cart_form' => __( 'Before "Add To Cart" form', 'creame-whatsapp-me' ),
+ 'woocommerce_before_add_to_cart_button' => __( 'Before "Add To Cart" button', 'creame-whatsapp-me' ),
+ 'woocommerce_after_add_to_cart_button' => __( 'After "Add To Cart" button', 'creame-whatsapp-me' ),
+ 'woocommerce_after_add_to_cart_form' => __( 'After "Add To Cart" form', 'creame-whatsapp-me' ),
+ 'woocommerce_product_additional_information' => __( 'After "Additional information"', 'creame-whatsapp-me' ),
+ );
+
+ return array( 'none' => __( "Don't show", 'creame-whatsapp-me' ) ) + apply_filters( 'joinchat_woo_btn_positions', $positions );
+
+ }
+
/**
* Woocommerce sections and fields for 'joinchat_tab_visibility'
*
@@ -168,7 +195,11 @@ public function woo_tab_sections( $sections ) {
$woo_sections[ $key ] = "
$label " . JoinChatAdmin::vars_help( $key );
}
- $sections['chat'] = $woo_sections;
+ $sections['chat'] = $woo_sections;
+ $sections['button'] = array(
+ 'woo_btn_position' => '
' . __( 'Button Position', 'creame-whatsapp-me' ) . ' ',
+ 'woo_btn_text' => '
' . __( 'Button Text', 'creame-whatsapp-me' ) . ' ',
+ );
return $sections;
}
@@ -202,17 +233,20 @@ public function vars_help( $vars, $field ) {
*/
public function section_ouput( $output, $section_id ) {
- if ( 'joinchat_tab_visibility__woo' == $section_id ) {
-
- $output = '
' . __( 'WooCommerce', 'creame-whatsapp-me' ) . ' ';
-
- } elseif ( 'joinchat_tab_woocommerce__chat' == $section_id ) {
+ switch ( $section_id ) {
+ case 'joinchat_tab_visibility__woo':
+ $output = '
' . __( 'WooCommerce', 'creame-whatsapp-me' ) . ' ';
+ break;
- $output = '
' . __( 'Product Chat Window', 'creame-whatsapp-me' ) . ' ' .
- '
' .
- __( 'You can define other different texts for the Chat Window on the product pages.', 'creame-whatsapp-me' ) .
- '
';
+ case 'joinchat_tab_woocommerce__chat':
+ $output = '
' . __( 'Product Chat Window', 'creame-whatsapp-me' ) . ' ' .
+ '
' . __( 'You can define other different texts for the Chat Window on the product pages.', 'creame-whatsapp-me' ) . '
';
+ break;
+ case 'joinchat_tab_woocommerce__button':
+ $output = '
' . __( 'Product Button', 'creame-whatsapp-me' ) . ' ' .
+ '
' . __( 'Add a contact button on the product sheet.', 'creame-whatsapp-me' ) . '
';
+ break;
}
return $output;
@@ -233,25 +267,39 @@ public function field_ouput( $output, $field_id, $settings ) {
switch ( $field_id ) {
case 'message_text_product':
- $output = '
' .
'
' . __( 'Define a text for your products to encourage customers to contact', 'creame-whatsapp-me' ) . '
';
break;
case 'message_text_on_sale':
- $output = '
' .
'
' . __( 'Define a text for your products on sale to encourage customers to contact', 'creame-whatsapp-me' ) . '
';
break;
case 'message_send_product':
- $output = '
' .
'
' . __( 'Predefined text for the first message the client will send you', 'creame-whatsapp-me' ) . '
';
break;
+
+ case 'woo_btn_position':
+ $options = $this->btn_positions();
+
+ $output = '
';
+ foreach ( $options as $key => $option ) {
+ $output .= sprintf( '%s ', $key === $value ? ' selected' : '', esc_attr( $key ), esc_html( $option ) );
+ }
+ $output .= ' ' . __( 'Select the position of the button on the product page', 'creame-whatsapp-me' ) . '
';
+ break;
+
+ case 'woo_btn_text':
+ $output = '
';
+ break;
}
return $output;
@@ -287,14 +335,14 @@ public function help_tab_vars( $tab ) {
$tab['content'] .=
'
' . __( 'WooCommerce , in product pages you can also use:', 'creame-whatsapp-me' ) . '
' .
'
' .
- '{PRODUCT}
β ' . __( 'Product Name', 'creame-whatsapp-me' ) . ' , ' .
- '{SKU}
β ABC98798 , ' .
+ '{PRODUCT}
β ' . __( 'Product Name', 'creame-whatsapp-me' ) . ' ' .
+ '{SKU}
β ABC98798 ' .
'{PRICE}
β ' . strip_tags( wc_price( 7.95 ) ) . ' ' .
'
' .
'
' . __( 'For the Call to Action for Products on Sale , you can also use:', 'creame-whatsapp-me' ) . '
' .
'
' .
- '{REGULAR}
β ' . strip_tags( wc_price( 9.95 ) ) . ' , ' .
- '{PRICE}
β ' . strip_tags( wc_price( 7.95 ) ) . ' , ' .
+ '{REGULAR}
β ' . strip_tags( wc_price( 9.95 ) ) . ' ' .
+ '{PRICE}
β ' . strip_tags( wc_price( 7.95 ) ) . ' ' .
'{DISCOUNT}
β -20% ' .
'
';
diff --git a/admin/css/joinchat.css b/admin/css/joinchat.css
index 20b84eb..de6fd48 100644
--- a/admin/css/joinchat.css
+++ b/admin/css/joinchat.css
@@ -155,6 +155,10 @@ tr.joinchat--focus .joinchat_vars_help {
visibility: visible;
}
+#wp-joinchat_optin_text-editor-container {
+ max-width: 800px;
+}
+
/* Help */
.toplevel_page_joinchat .help-tab-content li ul,
diff --git a/admin/css/joinchat.min.css b/admin/css/joinchat.min.css
index 9d6bdae..a770cfa 100644
--- a/admin/css/joinchat.min.css
+++ b/admin/css/joinchat.min.css
@@ -1 +1 @@
-.joinchat-hidden{display:none !important}.js #joinchat_form textarea{overflow:hidden;min-height:100px}.joinchat-tab{display:none}.joinchat-tab-active{display:block !important}#joinchat_tab_visibility tr:hover{background:rgba(0,0,0,.05)}#joinchat_tab_visibility th,#joinchat_tab_visibility td{padding:7px 15px}#joinchat_tab_visibility label{margin-right:15px}#joinchat_tab_visibility .dashicons{opacity:.5}#joinchat_tab_visibility input[type=radio]+span{transition:all 200ms}#joinchat_tab_visibility input[type=radio]:checked+span{color:#79ba49;opacity:1}#joinchat_tab_visibility input[type=radio]:checked+.dashicons-hidden{color:#ca4a1f}.joinchat-show-help{display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;border-radius:50%;background:#999;color:#fff;font-weight:bold;text-decoration:none;text-align:center}.joinchat-show-help:hover,.joinchat-show-help:active,.joinchat-show-help:focus{background:#444;color:#fff}#tab-panel-styles-and-vars span{white-space:nowrap}.form-table td p.joinchat-addon{display:inline-block;padding:0 6px;border-radius:3px;background:#fffbe5;font-size:13px}.iti--allow-dropdown input{padding-left:52px !important}#joinchat_button_image_wrapper{position:relative;padding:8px 0 0 80px}#joinchat_button_image_holder{position:absolute;top:0;left:0;box-sizing:border-box;width:60px;height:60px;border:1px solid #25d366;border-radius:50%;background:#25d366 url('data:image/svg+xml;utf8,
') no-repeat center;box-shadow:1px 6px 24px 0 rgba(7,94,84,.24);overflow:hidden}[dir=rtl] #joinchat_button_image_wrapper{padding:8px 80px 0 0}[dir=rtl] #joinchat_button_image_holder{right:0;left:auto}.joinchat_vars_help{margin-top:5px;font-size:11px;font-weight:normal;line-height:1.9;opacity:0;transition:opacity .2s ease-out .2s}tr:hover .joinchat_vars_help,tr.joinchat--focus .joinchat_vars_help{opacity:1;transition-delay:.5s}.joinchat_vars_help code{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;padding:2px 1px;font-size:inherit;vertical-align:bottom}.joinchat_vars_help code:hover{background:rgba(0,0,0,0.2)}@media screen and (max-width:782px){.joinchat_vars_help{margin-top:2px;opacity:1}.joinchat_vars_help br{display:none}}#joinchat_form .iris-picker{visibility:visible}.toplevel_page_joinchat .help-tab-content li ul,.settings_page_joinchat .help-tab-content li ul{margin-top:6px}.toplevel_page_joinchat .help-tab-content li li,.settings_page_joinchat .help-tab-content li li{list-style-type:circle}.toplevel_page_joinchat .help-tab-content code,.settings_page_joinchat .help-tab-content code{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.joinchat-metabox .iti,.joinchat-metabox .iti input,.joinchat-metabox textarea{max-width:100%}.joinchat-metabox code{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;padding:2px 1px;font-size:smaller;vertical-align:baseline}.joinchat-metabox .dashicons{opacity:.5}.joinchat-metabox input::placeholder{color:#dedfe0}.joinchat-metabox input::-ms-input-placeholder{color:#dedfe0}.joinchat-metabox input[type=radio]{margin-right:1px}.joinchat-metabox input[type=radio]+span{margin-right:5px;transition:all 200ms}.joinchat-metabox input[type=radio]:checked+span{color:#79ba49;opacity:1}.joinchat-metabox input[type=radio]:checked+.dashicons-hidden{color:#ca4a1f}.js .joinchat-metabox textarea{overflow:hidden;min-height:3em}.form-field.joinchat-metabox input[type=radio]{margin-right:4px}.form-field.joinchat-metabox input[type=radio]+span{margin-right:15px}
+.joinchat-hidden{display:none !important}.js #joinchat_form textarea{overflow:hidden;min-height:100px}.joinchat-tab{display:none}.joinchat-tab-active{display:block !important}#joinchat_tab_visibility tr:hover{background:rgba(0,0,0,.05)}#joinchat_tab_visibility th,#joinchat_tab_visibility td{padding:7px 15px}#joinchat_tab_visibility label{margin-right:15px}#joinchat_tab_visibility .dashicons{opacity:.5}#joinchat_tab_visibility input[type=radio]+span{transition:all 200ms}#joinchat_tab_visibility input[type=radio]:checked+span{color:#79ba49;opacity:1}#joinchat_tab_visibility input[type=radio]:checked+.dashicons-hidden{color:#ca4a1f}.joinchat-show-help{display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;border-radius:50%;background:#999;color:#fff;font-weight:bold;text-decoration:none;text-align:center}.joinchat-show-help:hover,.joinchat-show-help:active,.joinchat-show-help:focus{background:#444;color:#fff}#tab-panel-styles-and-vars span{white-space:nowrap}.form-table td p.joinchat-addon{display:inline-block;padding:0 6px;border-radius:3px;background:#fffbe5;font-size:13px}.iti--allow-dropdown input{padding-left:52px !important}#joinchat_button_image_wrapper{position:relative;padding:8px 0 0 80px}#joinchat_button_image_holder{position:absolute;top:0;left:0;box-sizing:border-box;width:60px;height:60px;border:1px solid #25d366;border-radius:50%;background:#25d366 url('data:image/svg+xml;utf8,
') no-repeat center;box-shadow:1px 6px 24px 0 rgba(7,94,84,.24);overflow:hidden}[dir=rtl] #joinchat_button_image_wrapper{padding:8px 80px 0 0}[dir=rtl] #joinchat_button_image_holder{right:0;left:auto}.joinchat_vars_help{margin-top:5px;font-size:11px;font-weight:normal;line-height:1.9;opacity:0;transition:opacity .2s ease-out .2s}tr:hover .joinchat_vars_help,tr.joinchat--focus .joinchat_vars_help{opacity:1;transition-delay:.5s}.joinchat_vars_help code{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;padding:2px 1px;font-size:inherit;vertical-align:bottom}.joinchat_vars_help code:hover{background:rgba(0,0,0,0.2)}@media screen and (max-width:782px){.joinchat_vars_help{margin-top:2px;opacity:1}.joinchat_vars_help br{display:none}}#joinchat_form .iris-picker{visibility:visible}#wp-joinchat_optin_text-editor-container{max-width:800px}.toplevel_page_joinchat .help-tab-content li ul,.settings_page_joinchat .help-tab-content li ul{margin-top:6px}.toplevel_page_joinchat .help-tab-content li li,.settings_page_joinchat .help-tab-content li li{list-style-type:circle}.toplevel_page_joinchat .help-tab-content code,.settings_page_joinchat .help-tab-content code{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.joinchat-metabox .iti,.joinchat-metabox .iti input,.joinchat-metabox textarea{max-width:100%}.joinchat-metabox code{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;padding:2px 1px;font-size:smaller;vertical-align:baseline}.joinchat-metabox .dashicons{opacity:.5}.joinchat-metabox input::placeholder{color:#dedfe0}.joinchat-metabox input::-ms-input-placeholder{color:#dedfe0}.joinchat-metabox input[type=radio]{margin-right:1px}.joinchat-metabox input[type=radio]+span{margin-right:5px;transition:all 200ms}.joinchat-metabox input[type=radio]:checked+span{color:#79ba49;opacity:1}.joinchat-metabox input[type=radio]:checked+.dashicons-hidden{color:#ca4a1f}.js .joinchat-metabox textarea{overflow:hidden;min-height:3em}.form-field.joinchat-metabox input[type=radio]{margin-right:4px}.form-field.joinchat-metabox input[type=radio]+span{margin-right:15px}
diff --git a/admin/js/joinchat.js b/admin/js/joinchat.js
index ca5e482..1f7f810 100644
--- a/admin/js/joinchat.js
+++ b/admin/js/joinchat.js
@@ -82,7 +82,7 @@
// Toggle WhatsApp web option
$('#joinchat_mobile_only').on('change', function () {
- $('#joinchat_whatsapp_web').closest('tr').toggleClass('joinchat-hidden', this.checked);
+ $('#joinchat_whatsapp_web, #joinchat_qr').closest('tr').toggleClass('joinchat-hidden', this.checked);
}).trigger('change');
// Toggle badge option
@@ -109,6 +109,11 @@
.on('input', textarea_autoheight)
.each(textarea_autoheight);
+ // Show title when placeholder
+ $('#joinchat_form').find('.autofill')
+ .on('change', function () { this.title = this.value == '' ? joinchat_admin.example : ''; })
+ .on('dblclick', function () { if (this.value == '') { this.value = this.placeholder; this.title = ''; } })
+ .trigger('change');
// Visibility view inheritance
var $tab_visibility = $('#joinchat_tab_visibility');
@@ -197,6 +202,11 @@
$('#joinchat_header_custom').on('click', function () {
$(this).prev().find('input').prop('checked', true);
});
+
+ // Toggle Woo Product Button text
+ $('#joinchat_woo_btn_position').on('change', function () {
+ $('#joinchat_woo_btn_text').closest('tr').toggleClass('joinchat-hidden', $(this).val() == 'none');
+ }).trigger('change');
}
if ($('.joinchat-metabox').length) {
diff --git a/admin/js/joinchat.min.js b/admin/js/joinchat.min.js
old mode 100644
new mode 100755
index daba695..533e282
--- a/admin/js/joinchat.min.js
+++ b/admin/js/joinchat.min.js
@@ -1 +1 @@
-!function(r){"use strict";function h(){r(this).height(0).height(this.scrollHeight)}window.intl_tel_input_version=window.intlTelConf&&intlTelConf.version,r(function(){var n,t,a,e,i,o,c,l;function s(t,e){var n;t=t||"all",e=e||r('input[name="joinchat[view]['+t+']"]:checked').val(),r(".view_inheritance_"+t).toggleClass("dashicons-visibility","yes"==e).toggleClass("dashicons-hidden","no"==e),"cpts"==t?r("[class*=view_inheritance_cpt_]").toggleClass("dashicons-visibility","yes"==e).toggleClass("dashicons-hidden","no"==e):t in l&&(n=""===(n=r('input[name="joinchat[view]['+t+']"]:checked').val())?e:n,r.each(l[t],function(){s(this,n)}))}"function"==typeof intlTelInput&&r("#joinchat_phone").length&&(t=JSON.parse(localStorage.joinchat_country_code||"{}"),a=!(!t.code||t.date!=(new Date).toDateString())&&t.code,e=r("#joinchat_phone"),i=""===e.val()?e.attr("placeholder"):null,e.removeAttr("placeholder"),(o=intlTelInput(e.get(0),{hiddenInput:e.data("name")||"joinchat[telephone]",initialCountry:"auto",preferredCountries:[a||""],geoIpLookup:function(e){a?e(a):r.getJSON("https://ipinfo.io").always(function(t){t=t&&t.country?t.country:"";localStorage.joinchat_country_code=JSON.stringify({code:t,date:(new Date).toDateString()}),e(t)})},customPlaceholder:function(t){return intlTelConf.placeholder+" "+t},utilsScript:intlTelConf.utils_js})).hiddenInput.value=e.val(),"string"==typeof i&&""!=i&&o.promise.then(function(){o.setNumber(i),e.attr("placeholder",o.getNumber(intlTelInputUtils.numberFormat.NATIONAL)).val("")}),e.on("input countrychange",function(){var t=r(this),e=intlTelInputGlobals.getInstance(this);t.css("color",t.val().trim()&&!e.isValidNumber()?"#ca4a1f":""),e.hiddenInput.value=e.getNumber()}).on("blur",function(){var t=intlTelInputGlobals.getInstance(this);t.setNumber(t.getNumber())})),1===r("#joinchat_form").length&&(r(".nav-tab").on("click",function(t){t.preventDefault();var e=r(this),n=e.attr("href"),a=r("input[name=_wp_http_referer]"),t=a.val();a.val(t.substr(0,t.indexOf("page=joinchat"))+"page=joinchat&tab="+n.substr(14)),r(".nav-tab").removeClass("nav-tab-active").attr("aria-selected","false"),e.addClass("nav-tab-active").attr("aria-selected","true").get(0).blur(),r(".joinchat-tab").removeClass("joinchat-tab-active"),r(n).addClass("joinchat-tab-active").find("textarea").each(h)}),r("#joinchat_mobile_only").on("change",function(){r("#joinchat_whatsapp_web").closest("tr").toggleClass("joinchat-hidden",this.checked)}).trigger("change"),r("#joinchat_message_delay").on("change input",function(){r("#joinchat_message_badge, #joinchat_message_views").closest("tr").toggleClass("joinchat-hidden","0"==this.value)}).trigger("change"),r(".joinchat-show-help").on("click",function(t){t.preventDefault();t=r(this).attr("href");r("#contextual-help-wrap").is(":visible")?r("html, body").animate({scrollTop:0}):r("#contextual-help-link").trigger("click"),r("#"!=t?t:"#tab-link-styles-and-vars").find("a").trigger("click")}),r("textarea","#joinchat_form").on("focus",function(){r(this).closest("tr").addClass("joinchat--focus")}).on("blur",function(){r(this).closest("tr").removeClass("joinchat--focus")}).on("input",h).each(h),c=r("#joinchat_tab_visibility"),l=r(".joinchat_view_all").data("inheritance")||{all:["front_page","blog_page","404_page","search","archive","singular","cpts"],archive:["date","author"],singular:["page","post"]},r("input",c).on("change",function(){s()}),r(".joinchat_view_reset").on("click",function(t){t.preventDefault(),r('input[value=""]',c).prop("checked",!0),r(".joinchat_view_all input",c).first().prop("checked",!0),s()}),s(),r("#joinchat_button_image_add").on("click",function(t){t.preventDefault(),n||((n=wp.media({title:r(this).data("title")||"Select button image",button:{text:r(this).data("button")||"Use Image"},library:{type:"image"},multiple:!1})).on("select",function(){var t=n.state().get("selection").first().toJSON(),e=t.sizes&&t.sizes.thumbnail&&t.sizes.thumbnail.url||t.url;r("#joinchat_button_image_holder").css({"background-size":"cover","background-image":"url("+e+")"}),r("#joinchat_button_image").val(t.id),r("#joinchat_button_image_remove").removeClass("joinchat-hidden")}),n.on("open",function(){var t=wp.media.attachment(r("#joinchat_button_image").val());n.state().get("selection").add(t?[t]:[])})),n.open()}),r("#joinchat_button_image_remove").on("click",function(t){t.preventDefault(),r("#joinchat_button_image_holder").removeAttr("style"),r("#joinchat_button_image").val(""),r(this).addClass("joinchat-hidden")}),r("#joinchat_color").wpColorPicker(),r("#joinchat_header_custom").on("click",function(){r(this).prev().find("input").prop("checked",!0)})),r(".joinchat-metabox").length&&r(".joinchat-metabox textarea").on("focus input",h).each(h)})}(jQuery);
\ No newline at end of file
+!function(h){"use strict";function r(){h(this).height(0).height(this.scrollHeight)}window.intl_tel_input_version=window.intlTelConf&&intlTelConf.version,h(function(){var n,t,i,e,a,o,c,l;function s(t,e){var n;t=t||"all",e=e||h('input[name="joinchat[view]['+t+']"]:checked').val(),h(".view_inheritance_"+t).toggleClass("dashicons-visibility","yes"==e).toggleClass("dashicons-hidden","no"==e),"cpts"==t?h("[class*=view_inheritance_cpt_]").toggleClass("dashicons-visibility","yes"==e).toggleClass("dashicons-hidden","no"==e):t in l&&(n=""===(n=h('input[name="joinchat[view]['+t+']"]:checked').val())?e:n,h.each(l[t],function(){s(this,n)}))}"function"==typeof intlTelInput&&h("#joinchat_phone").length&&(t=JSON.parse(localStorage.joinchat_country_code||"{}"),i=!(!t.code||t.date!=(new Date).toDateString())&&t.code,e=h("#joinchat_phone"),a=""===e.val()?e.attr("placeholder"):null,e.removeAttr("placeholder"),(o=intlTelInput(e.get(0),{hiddenInput:e.data("name")||"joinchat[telephone]",initialCountry:"auto",preferredCountries:[i||""],geoIpLookup:function(e){i?e(i):h.getJSON("https://ipinfo.io").always(function(t){t=t&&t.country?t.country:"";localStorage.joinchat_country_code=JSON.stringify({code:t,date:(new Date).toDateString()}),e(t)})},customPlaceholder:function(t){return intlTelConf.placeholder+" "+t},utilsScript:intlTelConf.utils_js})).hiddenInput.value=e.val(),"string"==typeof a&&""!=a&&o.promise.then(function(){o.setNumber(a),e.attr("placeholder",o.getNumber(intlTelInputUtils.numberFormat.NATIONAL)).val("")}),e.on("input countrychange",function(){var t=h(this),e=intlTelInputGlobals.getInstance(this);t.css("color",t.val().trim()&&!e.isValidNumber()?"#ca4a1f":""),e.hiddenInput.value=e.getNumber()}).on("blur",function(){var t=intlTelInputGlobals.getInstance(this);t.setNumber(t.getNumber())})),1===h("#joinchat_form").length&&(h(".nav-tab").on("click",function(t){t.preventDefault();var e=h(this),n=e.attr("href"),i=h("input[name=_wp_http_referer]"),t=i.val();i.val(t.substr(0,t.indexOf("page=joinchat"))+"page=joinchat&tab="+n.substr(14)),h(".nav-tab").removeClass("nav-tab-active").attr("aria-selected","false"),e.addClass("nav-tab-active").attr("aria-selected","true").get(0).blur(),h(".joinchat-tab").removeClass("joinchat-tab-active"),h(n).addClass("joinchat-tab-active").find("textarea").each(r)}),h("#joinchat_mobile_only").on("change",function(){h("#joinchat_whatsapp_web, #joinchat_qr").closest("tr").toggleClass("joinchat-hidden",this.checked)}).trigger("change"),h("#joinchat_message_delay").on("change input",function(){h("#joinchat_message_badge, #joinchat_message_views").closest("tr").toggleClass("joinchat-hidden","0"==this.value)}).trigger("change"),h(".joinchat-show-help").on("click",function(t){t.preventDefault();t=h(this).attr("href");h("#contextual-help-wrap").is(":visible")?h("html, body").animate({scrollTop:0}):h("#contextual-help-link").trigger("click"),h("#"!=t?t:"#tab-link-styles-and-vars").find("a").trigger("click")}),h("textarea","#joinchat_form").on("focus",function(){h(this).closest("tr").addClass("joinchat--focus")}).on("blur",function(){h(this).closest("tr").removeClass("joinchat--focus")}).on("input",r).each(r),h("#joinchat_form").find(".autofill").on("change",function(){this.title=""==this.value?joinchat_admin.example:""}).on("dblclick",function(){""==this.value&&(this.value=this.placeholder,this.title="")}).trigger("change"),c=h("#joinchat_tab_visibility"),l=h(".joinchat_view_all").data("inheritance")||{all:["front_page","blog_page","404_page","search","archive","singular","cpts"],archive:["date","author"],singular:["page","post"]},h("input",c).on("change",function(){s()}),h(".joinchat_view_reset").on("click",function(t){t.preventDefault(),h('input[value=""]',c).prop("checked",!0),h(".joinchat_view_all input",c).first().prop("checked",!0),s()}),s(),h("#joinchat_button_image_add").on("click",function(t){t.preventDefault(),n||((n=wp.media({title:h(this).data("title")||"Select button image",button:{text:h(this).data("button")||"Use Image"},library:{type:"image"},multiple:!1})).on("select",function(){var t=n.state().get("selection").first().toJSON(),e=t.sizes&&t.sizes.thumbnail&&t.sizes.thumbnail.url||t.url;h("#joinchat_button_image_holder").css({"background-size":"cover","background-image":"url("+e+")"}),h("#joinchat_button_image").val(t.id),h("#joinchat_button_image_remove").removeClass("joinchat-hidden")}),n.on("open",function(){var t=wp.media.attachment(h("#joinchat_button_image").val());n.state().get("selection").add(t?[t]:[])})),n.open()}),h("#joinchat_button_image_remove").on("click",function(t){t.preventDefault(),h("#joinchat_button_image_holder").removeAttr("style"),h("#joinchat_button_image").val(""),h(this).addClass("joinchat-hidden")}),h("#joinchat_color").wpColorPicker(),h("#joinchat_header_custom").on("click",function(){h(this).prev().find("input").prop("checked",!0)}),h("#joinchat_woo_btn_position").on("change",function(){h("#joinchat_woo_btn_text").closest("tr").toggleClass("joinchat-hidden","none"==h(this).val())}).trigger("change")),h(".joinchat-metabox").length&&h(".joinchat-metabox textarea").on("focus input",r).each(r)})}(jQuery);
\ No newline at end of file
diff --git a/includes/class-joinchat-common.php b/includes/class-joinchat-common.php
index 0249d54..edcdc66 100644
--- a/includes/class-joinchat-common.php
+++ b/includes/class-joinchat-common.php
@@ -32,6 +32,7 @@ public function default_settings() {
'button_tip' => '',
'button_delay' => 3,
'whatsapp_web' => 'no',
+ 'qr' => 'no',
'message_text' => '',
'message_views' => 2,
'message_delay' => 10,
@@ -43,6 +44,9 @@ public function default_settings() {
'color' => '#25d366',
'dark_mode' => 'no',
'header' => '__jc__', // values: '__jc__', '__wa__' or other custom text
+ 'optin_text' => '',
+ 'optin_check' => 'no',
+ 'gads' => '',
);
return array_merge( $defaults, apply_filters( 'joinchat_extra_settings', array() ) );
diff --git a/includes/class-joinchat-i18n.php b/includes/class-joinchat-i18n.php
index 9b6f010..a93dac3 100644
--- a/includes/class-joinchat-i18n.php
+++ b/includes/class-joinchat-i18n.php
@@ -61,6 +61,7 @@ private function settings_i18n( $settings = null ) {
'message_text' => 'Call to Action',
'message_send' => 'Message',
'message_start' => 'Button Text',
+ 'optin_text' => 'Opt-in Text',
);
if ( isset( $settings['header'] ) && ! in_array( $settings['header'], array( '', '__jc__', '__wa__' ) ) ) {
diff --git a/includes/class-joinchat-util.php b/includes/class-joinchat-util.php
index a33202b..f640c6b 100644
--- a/includes/class-joinchat-util.php
+++ b/includes/class-joinchat-util.php
@@ -231,6 +231,7 @@ public static function replace_variables( $string ) {
array(
'SITE' => get_bloginfo( 'name' ),
'URL' => home_url( $wp->request ),
+ 'HREF' => home_url( add_query_arg( null, null ) ),
'TITLE' => self::get_title(),
)
);
@@ -313,11 +314,12 @@ public static function capability( $capability = '' ) {
* Plugin admin page is in options submenu
*
* @since 4.2.0
+ * @since 4.4.0 return false by default
* @return bool
*/
public static function options_submenu() {
- return apply_filters( 'joinchat_submenu', 'manage_options' === self::capability() );
+ return 'manage_options' === self::capability() && apply_filters( 'joinchat_submenu', false );
}
diff --git a/joinchat.php b/joinchat.php
index 5604626..123e0ab 100644
--- a/joinchat.php
+++ b/joinchat.php
@@ -9,7 +9,7 @@
* Plugin Name: Join.chat
* Plugin URI: https://join.chat
* Description: Connects a WordPress chat with WhatsApp. The best solution for marketing and support. Stop losing customers and increase your sales.
- * Version: 4.3.2
+ * Version: 4.4.0
* Author: Creame
* Author URI: https://crea.me
* License: GPL-2.0+
@@ -26,7 +26,7 @@
/**
* Define constants.
*/
-define( 'JOINCHAT_VERSION', '4.3.2' );
+define( 'JOINCHAT_VERSION', '4.4.0' );
define( 'JOINCHAT_FILE', __FILE__ );
define( 'JOINCHAT_DIR', plugin_dir_path( JOINCHAT_FILE ) );
define( 'JOINCHAT_BASENAME', plugin_basename( JOINCHAT_FILE ) );
diff --git a/languages/creame-whatsapp-me-es_ES.mo b/languages/creame-whatsapp-me-es_ES.mo
old mode 100644
new mode 100755
index 4190a86..17a1e99
Binary files a/languages/creame-whatsapp-me-es_ES.mo and b/languages/creame-whatsapp-me-es_ES.mo differ
diff --git a/languages/creame-whatsapp-me-es_ES.po b/languages/creame-whatsapp-me-es_ES.po
old mode 100644
new mode 100755
index 8508640..7dd8656
--- a/languages/creame-whatsapp-me-es_ES.po
+++ b/languages/creame-whatsapp-me-es_ES.po
@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: Join.chat\n"
"Report-Msgid-Bugs-To: JoinChat
\n"
"POT-Creation-Date: 2022-01-18 15:15+0000\n"
-"PO-Revision-Date: 2022-01-18 16:25+0100\n"
+"PO-Revision-Date: 2022-03-25 08:53+0000\n"
"Last-Translator: Pacotole \n"
"Language-Team: EspaΓ±ol\n"
"Language: es_ES\n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 2.4.2\n"
+"X-Generator: Loco https://localise.biz/\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Loco-Version: 2.5.7; wp-5.8.3\n"
-#: admin/class-joinchat-woo-admin.php:238
+#: admin/class-joinchat-woo-admin.php:285
msgid ""
"*Hi {SITE}!*\n"
"I have a question about *{PRODUCT} ({SKU})*"
@@ -25,105 +25,150 @@ msgstr ""
"*Β‘Hola {SITE}!*\n"
"Tengo una pregunta sobre *{PRODUCT} ({SKU})*"
-#: admin/class-joinchat-admin.php:263
+#: admin/class-joinchat-admin.php:572
+msgid "-1 to display directly without animation"
+msgstr "-1 para mostrar directamente sin animaciΓ³n"
+
+#: admin/class-joinchat-admin.php:609
+msgid "0 to disable"
+msgstr "0 para desactivar"
+
+#: admin/class-joinchat-admin.php:267
msgid "404 Page"
msgstr "PΓ‘gina 404"
-#: admin/class-joinchat-woo-admin.php:275
+#: admin/class-joinchat-woo-admin.php:336
msgid "WooCommerce , in product pages you can also use:"
msgstr ""
"WooCommerce , en las pΓ‘ginas de producto tambiΓ©n puedes usar:"
-#: admin/class-joinchat-admin.php:551
+#: admin/class-joinchat-woo-admin.php:248
+msgid "Add a contact button on the product sheet."
+msgstr "AΓ±ade un botΓ³n de contacto en la ficha del producto."
+
+#: admin/class-joinchat-admin.php:592
msgid "Add links, images, videos and more with %s"
msgstr "AΓ±ade enlaces, imΓ‘genes, vΓdeos y mΓ‘s con %s"
-#: admin/class-joinchat-admin.php:494
+#: admin/class-joinchat-admin.php:528
msgid "Add unlimited numbers with %1$s or multiple contacts with %2$s"
msgstr "AΓ±ade nΓΊmeros ilimitados con %1$s o varios contactos con %2$s"
-#: admin/class-joinchat-admin.php:825
-msgid "Add-ons"
-msgstr "Addons"
-
-#: admin/class-joinchat-admin.php:744
+#: admin/class-joinchat-admin.php:836
msgid "Adding some CSS classes in your HTML:"
msgstr "AΓ±adiendo algunas clases CSS en tu HTML:"
-#: admin/class-joinchat-admin.php:265
+#: admin/class-joinchat-admin.php:113
+msgid "Advanced"
+msgstr "Avanzado"
+
+#: admin/class-joinchat-woo-admin.php:149
+msgid "After \"Add To Cart\" button"
+msgstr "DespuΓ©s del botΓ³n \"AΓ±adir al carrito\""
+
+#: admin/class-joinchat-woo-admin.php:150
+msgid "After \"Add To Cart\" form"
+msgstr "DespuΓ©s del formulario \"AΓ±adir al carrito\""
+
+#: admin/class-joinchat-woo-admin.php:151
+msgid "After \"Additional information\""
+msgstr "DespuΓ©s de \"InformaciΓ³n adicional\""
+
+#: admin/class-joinchat-admin.php:269
msgid "Archives"
msgstr "Archivo"
-#: admin/class-joinchat-admin.php:267
+#: admin/class-joinchat-woo-admin.php:301
+msgid "Ask for More Info"
+msgstr "Pedir mΓ‘s informaciΓ³n"
+
+#: admin/class-joinchat-admin.php:271
msgid "Author Archives"
msgstr "Archivos de autor"
-#: admin/class-joinchat-admin.php:593
+#: admin/class-joinchat-admin.php:635
msgid "Auto (detects device dark mode)"
msgstr "Auto (detecta el modo oscuro del dispositivo)"
-#: admin/class-joinchat-admin.php:262
+#: admin/class-joinchat-admin.php:684
+msgid "AW-CONVERSION_ID/CONVERSION_LABEL"
+msgstr "AW-CONVERSION_ID/CONVERSION_LABEL"
+
+#: admin/class-joinchat-woo-admin.php:148
+msgid "Before \"Add To Cart\" button"
+msgstr "Antes del botΓ³n \"AΓ±adir al carrito\""
+
+#: admin/class-joinchat-woo-admin.php:147
+msgid "Before \"Add To Cart\" form"
+msgstr "Antes del formulario \"AΓ±adir al carrito\""
+
+#: admin/class-joinchat-admin.php:266
msgid "Blog Page"
msgstr "PΓ‘gina del blog"
-#: admin/class-joinchat-admin.php:421
+#: admin/class-joinchat-admin.php:446
msgid "Button"
msgstr "BotΓ³n"
-#: admin/class-joinchat-admin.php:233
+#: admin/class-joinchat-admin.php:236
msgid "Button Delay"
msgstr "Retardo del botΓ³n"
-#: admin/class-joinchat-admin.php:239
+#: admin/class-joinchat-woo-admin.php:200
+msgid "Button Position"
+msgstr "PosiciΓ³n del botΓ³n"
+
+#: admin/class-joinchat-woo-admin.php:201 admin/class-joinchat-admin.php:243
msgid "Button Text"
msgstr "Texto del botΓ³n"
-#: admin/class-joinchat-admin.php:238 admin/class-joinchat-admin.php:966
+#: admin/class-joinchat-admin.php:242 admin/partials/term_meta_box.php:24
+#: admin/partials/post_meta_box.php:22
msgid "Call to Action"
msgstr "Llamada a la acciΓ³n"
-#: admin/class-joinchat-woo-admin.php:149
+#: admin/class-joinchat-woo-admin.php:189
msgid "Call to Action for Products"
msgstr "Llamada a la acciΓ³n para productos"
-#: admin/class-joinchat-woo-admin.php:150
+#: admin/class-joinchat-woo-admin.php:190
msgid "Call to Action for Products on Sale"
msgstr "Llamada a la acciΓ³n para productos en oferta"
-#: admin/class-joinchat-admin.php:973
+#: admin/partials/term_meta_box.php:33 admin/partials/post_meta_box.php:29
msgid "Can use vars"
msgstr "Puedes usar variables"
-#: admin/class-joinchat-woo-admin.php:130
+#: admin/class-joinchat-woo-admin.php:170
msgid "Cart"
msgstr "Carrito"
-#: admin/class-joinchat-admin.php:245
+#: admin/class-joinchat-admin.php:249
msgid "Chat Delay"
msgstr "Retardo del chat"
-#: admin/class-joinchat-admin.php:426
+#: admin/class-joinchat-admin.php:451
msgid "Chat Window"
msgstr "Ventana de chat"
-#: admin/class-joinchat-admin.php:568
+#: admin/class-joinchat-admin.php:610
msgid "Chat Window auto displays after delay"
msgstr "La ventana de chat se muestra automΓ‘ticamente tras el retardo"
-#: admin/class-joinchat-admin.php:573
+#: admin/class-joinchat-admin.php:615
msgid "Chat Window auto displays from this number of page views"
msgstr ""
"La ventana de chat se muestra automΓ‘ticamente a partir del nΓΊmero de visitas"
-#: includes/class-joinchat-i18n.php:128
+#: includes/class-joinchat-i18n.php:129
msgid "Check translations"
msgstr "Revisar traducciones"
-#: admin/class-joinchat-woo-admin.php:131
+#: admin/class-joinchat-woo-admin.php:171
msgid "Checkout"
msgstr "Finalizar pago"
-#: public/partials/html.php:49
+#: public/partials/html.php:52
msgid "Close"
msgstr "Cerrar"
@@ -135,68 +180,68 @@ msgstr ""
"Conecta un chat de WordPress con WhatsApp. La mejor soluciΓ³n para marketing "
"y soporte. Deja de perder clientes y aumenta tus ventas."
-#: admin/class-joinchat-admin.php:492
+#: admin/class-joinchat-admin.php:526
msgid ""
-"Contact phone number (the button will not be shown if it's empty)"
-"strong>"
+"Contact phone number (the button will not be shown if it's empty)"
+" "
msgstr ""
"NΓΊmero de telΓ©fono de contacto (el botΓ³n no se mostrarΓ‘ si estΓ‘ "
"vacΓo) "
-#: admin/class-joinchat-admin.php:743 admin/class-joinchat-admin.php:755
+#: admin/class-joinchat-admin.php:835 admin/class-joinchat-admin.php:847
msgid "Contact us"
msgstr "ContΓ‘ctanos"
+#: admin/class-joinchat-admin.php:485
+msgid "Conversions"
+msgstr "Conversiones"
+
#. Author of the plugin
msgid "Creame"
msgstr "Creame"
-#: admin/class-joinchat-admin.php:451
+#: admin/class-joinchat-admin.php:476
msgid "Custom Post Types"
msgstr "Tipos de contenido personalizados"
-#: admin/class-joinchat-admin.php:606
+#: admin/class-joinchat-admin.php:648
msgid "Custom:"
msgstr "Personalizado:"
-#: admin/class-joinchat-admin.php:241 admin/class-joinchat-admin.php:587
+#: admin/class-joinchat-admin.php:245 admin/class-joinchat-admin.php:629
msgid "Dark Mode"
msgstr "Modo oscuro"
-#: admin/class-joinchat-admin.php:266
+#: admin/class-joinchat-admin.php:270
msgid "Date Archives"
msgstr "Archivos por fecha"
-#: includes/class-joinchat-i18n.php:125
+#: includes/class-joinchat-i18n.php:126
#, php-format
msgid "Default site language (%s)"
msgstr "Idioma predeterminado del sitio (%s)"
-#: admin/class-joinchat-admin.php:983
+#: admin/partials/term_meta_box.php:47 admin/partials/post_meta_box.php:39
msgid "Default visibility"
msgstr "Visibilidad por defecto"
-#: admin/class-joinchat-woo-admin.php:233
+#: admin/class-joinchat-woo-admin.php:280
msgid ""
"Define a text for your products on sale to encourage customers to contact"
msgstr ""
"Define un texto para tus productos en oferta que anime a los clientes a "
"contactar"
-#: admin/class-joinchat-woo-admin.php:226
+#: admin/class-joinchat-woo-admin.php:273
msgid "Define a text for your products to encourage customers to contact"
msgstr ""
"Define un texto para tus productos que anime a los clientes a contactar"
-#: admin/class-joinchat-admin.php:549
+#: admin/class-joinchat-admin.php:590
msgid "Define a text to encourage users to contact by WhatsApp"
msgstr "Define un texto para animar a los usuarios a contactar por WhatsApp"
-#: admin/class-joinchat-admin.php:701
-msgid "Dismiss"
-msgstr "Descartar"
-
-#: admin/class-joinchat-admin.php:579
+#: admin/class-joinchat-admin.php:621
msgid ""
"Display a notification balloon instead of opening the Chat Window for a "
"\"less intrusive\" mode"
@@ -204,27 +249,41 @@ msgstr ""
"Mostrar un globo de aviso en lugar de abrir la ventana de chat para un modo "
"\"menos intrusivo\""
-#: admin/class-joinchat-admin.php:1118
+#: admin/class-joinchat-admin.php:585
+msgid "Display QR code on desktop to scan with phone"
+msgstr "Mostrar cΓ³digo QR en el escritorio para escanear con el telΓ©fono"
+
+#: admin/class-joinchat-admin.php:1253
msgid "Do you like %1$s? Please help us with a %2$s rating."
msgstr "ΒΏTe gusta %1$s? AyΓΊdanos con un reseΓ±a de %2$s."
-#: admin/class-joinchat-admin.php:824
+#: admin/class-joinchat-admin.php:925
msgid "Documentation"
msgstr "DocumentaciΓ³n"
-#: admin/class-joinchat-admin.php:155
+#: admin/class-joinchat-woo-admin.php:154
+msgid "Don't show"
+msgstr "No mostrar"
+
+#: admin/class-joinchat-admin.php:158
msgid "e.g."
msgstr "p.ej."
-#: admin/class-joinchat-admin.php:743 admin/class-joinchat-admin.php:755
+#: admin/class-joinchat-admin.php:835 admin/class-joinchat-admin.php:847
msgid "Example:"
msgstr "Por ejemplo:"
-#: admin/class-joinchat-admin.php:778
+#: admin/class-joinchat-admin.php:674
+msgid ""
+"Explain how you will use the user's contact and the conditions they accept."
+msgstr ""
+"Explica cΓ³mo utilizarΓ‘s el contacto del usuario y las condiciones que acepta."
+
+#: admin/class-joinchat-admin.php:870
msgid "Follow %s on twitter."
msgstr "Sigue %s en twitter."
-#: admin/class-joinchat-woo-admin.php:281
+#: admin/class-joinchat-woo-admin.php:342
msgid ""
"For the Call to Action for Products on Sale , you can also "
"use:"
@@ -232,14 +291,14 @@ msgstr ""
"Para la Llamada a la acciΓ³n para productos en oferta "
"tambiΓ©n puedes usar:"
-#: admin/class-joinchat-admin.php:442
+#: admin/class-joinchat-admin.php:467
msgid ""
"From here you can configure on which pages the WhatsApp button will be "
"visible."
msgstr ""
"AquΓ puedes configurar en quΓ© pΓ‘ginas serΓ‘ visible el botΓ³n de WhatsApp."
-#: admin/class-joinchat-admin.php:261
+#: admin/class-joinchat-admin.php:265
msgid "Front Page"
msgstr "PΓ‘gina de inicio"
@@ -247,15 +306,23 @@ msgstr "PΓ‘gina de inicio"
msgid "General"
msgstr "General"
-#: admin/class-joinchat-admin.php:256
+#: admin/class-joinchat-admin.php:260
msgid "Global"
msgstr "Global"
-#: admin/class-joinchat-admin.php:242 admin/class-joinchat-admin.php:600
+#: admin/class-joinchat-admin.php:771
+msgid "Go to settings"
+msgstr "Ir a los ajustes"
+
+#: admin/class-joinchat-admin.php:309
+msgid "Google Ads Conversion"
+msgstr "ConversiΓ³n de Google Ads"
+
+#: admin/class-joinchat-admin.php:246 admin/class-joinchat-admin.php:642
msgid "Header"
msgstr "Cabecera"
-#: admin/class-joinchat-admin.php:548
+#: admin/class-joinchat-admin.php:589
msgid ""
"Hello π\n"
"Can we help you?"
@@ -263,12 +330,12 @@ msgstr ""
"Hola π\n"
"ΒΏEn quΓ© podemos ayudarte?"
-#: admin/class-joinchat-admin.php:557
+#: admin/class-joinchat-admin.php:598
msgid "Hi *{SITE}*! I need more info about {TITLE} {URL}"
msgstr "Hola *{SITE}*. Necesito mΓ‘s informaciΓ³n sobre {TITLE} {URL}"
-#: admin/class-joinchat-admin.php:479 admin/class-joinchat-admin.php:644
-#: admin/class-joinchat-admin.php:981
+#: admin/class-joinchat-admin.php:513 admin/class-joinchat-admin.php:721
+#: admin/partials/term_meta_box.php:45 admin/partials/post_meta_box.php:37
msgid "Hide"
msgstr "Ocultar"
@@ -280,7 +347,7 @@ msgstr "https://crea.me"
msgid "https://join.chat"
msgstr "https://join.chat"
-#: admin/class-joinchat-admin.php:435
+#: admin/class-joinchat-admin.php:460
msgid ""
"If it's defined a \"Call to Action\", the Chat Window can be displayed "
"automatically if conditions are met."
@@ -288,7 +355,7 @@ msgstr ""
"Si hay una \"Llamada a la acciΓ³n\" definida, la ventana de chat se puede "
"mostrar automΓ‘ticamente al cumplir las condiciones."
-#: admin/class-joinchat-admin.php:428
+#: admin/class-joinchat-admin.php:453
msgid ""
"If you define a \"Call to Action\" a window will be displayed simulating a "
"chat before launching WhatsApp."
@@ -296,36 +363,40 @@ msgstr ""
"Si defines una \"Llamada a la acciΓ³n\" se mostrarΓ‘ una ventana simulando un "
"chat antes de iniciar WhatsApp."
-#: admin/class-joinchat-admin.php:767
+#: admin/class-joinchat-admin.php:859
msgid "If you like Join.chat π"
msgstr "Si te gusta Join.chat π"
-#: admin/class-joinchat-admin.php:762
+#: admin/class-joinchat-admin.php:854
msgid ""
-"If you need help, first review our documentation and if you don't find a solution check the free plugin support forum or buy our premium support ."
+"If you need help, first review our "
+"documentation and if you don't find a solution check the free plugin support forum or buy our premium support ."
msgstr ""
-"Si necesitas ayuda, en primer lugar revisa la documentaciΓ³n y si no encuentras la soluciΓ³n comprueba el foro de soporte gratuito del plugin o "
-"compra nuestro soporte premium ."
+"Si necesitas ayuda, en primer lugar revisa la documentaciΓ³n y si no encuentras la soluciΓ³n comprueba "
+"el foro de soporte gratuito del plugin "
+" o compra nuestro soporte premium ."
-#: admin/class-joinchat-admin.php:230
+#: admin/class-joinchat-admin.php:233
msgid "Image"
msgstr "Imagen"
-#: admin/class-joinchat-admin.php:481
+#: admin/class-joinchat-admin.php:515
msgid "Inherit"
msgstr "Heredar"
+#: admin/class-joinchat-admin.php:168
+msgid "is an example, double click to use it"
+msgstr "es un ejemplo, doble clic para usarlo"
+
#. Name of the plugin
-#: admin/class-joinchat-admin.php:903
+#: admin/class-joinchat-admin.php:1003 admin/partials/term_meta_box.php:16
msgid "Join.chat"
msgstr "Join.chat"
-#: admin/class-joinchat-admin.php:856
+#: admin/class-joinchat-admin.php:956
msgid "Join.chat Settings"
msgstr "Ajustes de Join.chat"
@@ -350,119 +421,154 @@ msgctxt "Keywords in Elementor Finder"
msgid "woocommerce,shop,product"
msgstr "woocommerce,tienda,producto"
-#: admin/class-joinchat-admin.php:509
+#: admin/class-joinchat-admin.php:543
msgid "Left"
msgstr "Izquierda"
-#: admin/class-joinchat-admin.php:229 admin/class-joinchat-admin.php:970
+#: admin/class-joinchat-admin.php:232 admin/partials/term_meta_box.php:28
+#: admin/partials/post_meta_box.php:26
msgid "Message"
msgstr "Mensaje"
-#: admin/class-joinchat-woo-admin.php:151
+#: admin/class-joinchat-woo-admin.php:191
msgid "Message for Products"
msgstr "Mensaje para productos"
-#: admin/class-joinchat-admin.php:234 admin/class-joinchat-admin.php:501
+#: admin/class-joinchat-admin.php:237 admin/class-joinchat-admin.php:535
msgid "Mobile Only"
msgstr "Solo mΓ³vil"
-#: admin/class-joinchat-woo-admin.php:133
+#: admin/class-joinchat-woo-admin.php:173
msgid "My Account"
msgstr "Mi cuenta"
-#: admin/class-joinchat-admin.php:589
+#: admin/class-joinchat-admin.php:631
msgid "No"
msgstr "No"
-#: admin/class-joinchat-admin.php:247 admin/class-joinchat-admin.php:577
+#: admin/class-joinchat-admin.php:251 admin/class-joinchat-admin.php:619
msgid "Notification Balloon"
msgstr "Globo de aviso"
-#: admin/class-joinchat-admin.php:503
+#: admin/class-joinchat-admin.php:537
msgid "Only display the button on mobile devices"
msgstr "Solo mostrar el botΓ³n en mΓ³viles"
-#: admin/class-joinchat-admin.php:751
+#: admin/class-joinchat-admin.php:843
msgid "only show if it's an not seen CTA."
msgstr "mostrar solo si es un CTA no visto."
-#: admin/class-joinchat-admin.php:544
+#: admin/class-joinchat-admin.php:579
msgid "Open WhatsApp Web directly on desktop"
msgstr "Abrir directamente WhatsApp Web en el escritorio"
-#: admin/class-joinchat-admin.php:562 includes/class-joinchat-common.php:40
+#: admin/class-joinchat-admin.php:603 includes/class-joinchat-common.php:41
msgid "Open chat"
msgstr "Abrir chat"
-#: admin/class-joinchat-admin.php:526
+#: admin/class-joinchat-admin.php:480
+msgid "Opt-in"
+msgstr "Opt-in"
+
+#: admin/class-joinchat-admin.php:481
+msgid "Opt-in is a usersβ consent to receive messages from a business."
+msgstr ""
+"Opt-in es el consentimiento de los usuarios para recibir mensajes de una "
+"empresa."
+
+#: admin/class-joinchat-admin.php:306 admin/class-joinchat-admin.php:678
+msgid "Opt-in Required"
+msgstr "Opt-in obligatorio"
+
+#: admin/class-joinchat-admin.php:305
+msgid "Opt-in Text"
+msgstr "Texto de opt-in"
+
+#: public/partials/html.php:37
+msgid "or scan the code"
+msgstr "o escanear el cΓ³digo"
+
+#: admin/class-joinchat-admin.php:560
msgid "Other icons and more channels (Telegram, Messengerβ¦) with %s"
msgstr "Otros iconos y mΓ‘s canales (Telegram, Messengerβ¦) con %s"
-#: admin/class-joinchat-admin.php:269
+#: admin/class-joinchat-admin.php:273
msgid "Page"
msgstr "PΓ‘gina"
-#: admin/class-joinchat-admin.php:730
+#: admin/class-joinchat-admin.php:820
msgid "Page Title"
msgstr "TΓtulo de pΓ‘gina"
-#: admin/class-joinchat-admin.php:246
+#: admin/class-joinchat-admin.php:250
msgid "Page Views"
msgstr "Visitas"
-#: admin/class-joinchat-admin.php:770
+#: admin/class-joinchat-admin.php:862
msgid "Please leave us a %s rating. We'll thank you."
msgstr "Por favor, dΓ©janos una valoraciΓ³n de %s. Te lo agradeceremos."
-#: admin/class-joinchat-admin.php:232 admin/class-joinchat-admin.php:507
+#: admin/class-joinchat-admin.php:235 admin/class-joinchat-admin.php:541
msgid "Position on Screen"
msgstr "PosiciΓ³n en pantalla"
-#: admin/class-joinchat-admin.php:270
+#: admin/class-joinchat-admin.php:274
msgid "Post"
msgstr "Entrada"
-#: public/partials/html.php:42
+#: public/partials/html.php:45
msgid "Powered by"
msgstr "Powered by"
-#: admin/class-joinchat-admin.php:602
+#: admin/class-joinchat-admin.php:644
msgid "Powered by Join.chat"
msgstr "Powered by Join.chat"
-#: admin/class-joinchat-woo-admin.php:240
+#: admin/class-joinchat-woo-admin.php:287
msgid "Predefined text for the first message the client will send you"
msgstr "Texto predefinido para el primer mensaje que te enviarΓ‘ el cliente"
-#: admin/class-joinchat-admin.php:558
+#: admin/class-joinchat-admin.php:599
msgid "Predefined text for the first message the user will send you"
msgstr "Texto predefinido para el primer mensaje que te enviarΓ‘ el usuario"
-#: admin/class-joinchat-woo-admin.php:198
+#: admin/class-joinchat-admin.php:903
+msgid "Premium"
+msgstr "Premium"
+
+#: admin/class-joinchat-woo-admin.php:247
+msgid "Product Button"
+msgstr "BotΓ³n de producto"
+
+#: admin/class-joinchat-woo-admin.php:242
msgid "Product Chat Window"
msgstr "Ventana de chat de producto"
-#: admin/class-joinchat-woo-admin.php:277
+#: admin/class-joinchat-woo-admin.php:338
msgid "Product Name"
msgstr "Nombre de producto"
-#: admin/class-joinchat-woo-admin.php:129
+#: admin/class-joinchat-woo-admin.php:169
msgid "Product Page"
msgstr "PΓ‘gina de producto"
-#: admin/class-joinchat-admin.php:523
+#: admin/class-joinchat-admin.php:239 admin/class-joinchat-admin.php:583
+msgid "QR Code"
+msgstr "CΓ³digo QR"
+
+#: admin/class-joinchat-admin.php:557
msgid "Remove"
msgstr "Eliminar"
-#: admin/class-joinchat-admin.php:443
+#: admin/class-joinchat-admin.php:468
msgid "Restore default visibility"
msgstr "Restaurar visibilidad por defecto"
-#: admin/class-joinchat-admin.php:511
+#: admin/class-joinchat-admin.php:545
msgid "Right"
msgstr "Derecha"
-#: admin/class-joinchat-woo-admin.php:231
+#: admin/class-joinchat-woo-admin.php:278
msgid ""
"Save {DISCOUNT}! This *{PRODUCT}* can be yours for only ~{REGULAR}~ *{PRICE}"
"*.\n"
@@ -471,27 +577,31 @@ msgstr ""
"Β‘Ahorra {DISCOUNT}! Este *{PRODUCT}* puede ser tuyo solo por *{PRICE}*.\n"
"Si tienes alguna duda, pregΓΊntanos."
-#: admin/class-joinchat-admin.php:264
+#: admin/class-joinchat-admin.php:268
msgid "Search Results"
msgstr "Resultados de bΓΊsqueda"
-#: admin/class-joinchat-admin.php:537
+#: admin/class-joinchat-admin.php:572 admin/class-joinchat-admin.php:609
msgid "seconds"
msgstr "segundos"
-#: admin/class-joinchat-admin.php:567
-msgid "seconds (0 disabled)"
-msgstr "segundos (0 desactivado)"
-
-#: admin/class-joinchat-admin.php:521
+#: admin/class-joinchat-admin.php:555
msgid "Select an image"
msgstr "Selecciona imagen"
-#: admin/class-joinchat-admin.php:522
+#: admin/class-joinchat-admin.php:556
msgid "Select button image"
msgstr "Selecciona imagen de botΓ³n"
-#: admin/class-joinchat-admin.php:422
+#: admin/class-joinchat-woo-admin.php:297
+msgid "Select the position of the button on the product page"
+msgstr "Selecciona la posiciΓ³n del botΓ³n en la pΓ‘gina del producto"
+
+#: admin/class-joinchat-admin.php:685
+msgid "Send the conversion automatically at the chat start"
+msgstr "EnvΓa la conversiΓ³n automΓ‘ticamente al iniciar el chat."
+
+#: admin/class-joinchat-admin.php:447
msgid ""
"Set the contact number and where you want the WhatsApp button to be "
"displayed."
@@ -499,72 +609,73 @@ msgstr ""
"Establece el nΓΊmero de contacto y dΓ³nde quieres que se muestre el botΓ³n de "
"WhatsApp."
-#: admin/class-joinchat-admin.php:697 admin/class-joinchat-admin.php:801
+#: admin/class-joinchat-admin.php:893
msgid "Settings"
msgstr "Ajustes"
-#: admin/class-joinchat-admin.php:371
+#: admin/class-joinchat-admin.php:391
msgid "Settings saved"
msgstr "Ajustes guardados"
-#: admin/class-joinchat-woo-admin.php:128
+#: admin/class-joinchat-woo-admin.php:168
msgid "Shop"
msgstr "Tienda"
-#: admin/class-joinchat-admin.php:533
+#: admin/class-joinchat-admin.php:567
msgid "Short text shown next to button"
msgstr "Texto breve que se muestra junto al botΓ³n"
-#: admin/class-joinchat-admin.php:477 admin/class-joinchat-admin.php:642
-#: admin/class-joinchat-admin.php:979
+#: admin/class-joinchat-admin.php:511 admin/class-joinchat-admin.php:719
+#: admin/partials/term_meta_box.php:43 admin/partials/post_meta_box.php:35
msgid "Show"
msgstr "Mostrar"
-#: admin/class-joinchat-admin.php:436 admin/class-joinchat-admin.php:1055
+#: admin/class-joinchat-admin.php:461 admin/class-joinchat-admin.php:1190
msgid "Show Help"
msgstr "Ver ayuda"
-#: admin/class-joinchat-admin.php:268
+#: admin/class-joinchat-admin.php:272
msgid "Singular"
msgstr "Simple"
-#: admin/class-joinchat-admin.php:723
+#: admin/class-joinchat-admin.php:814
msgid "Styles and Variables"
msgstr "Estilos y variables"
-#: admin/class-joinchat-admin.php:774
+#: admin/class-joinchat-admin.php:866
msgid "Subscribe to our newsletter and visit our blog at %s."
msgstr "SuscrΓbete a nuestra newsletter y visita nuestro blog en %s."
-#: admin/class-joinchat-admin.php:759 admin/class-joinchat-admin.php:826
+#: admin/class-joinchat-admin.php:851 admin/class-joinchat-admin.php:926
msgid "Support"
msgstr "Soporte"
-#: admin/class-joinchat-admin.php:228 admin/class-joinchat-admin.php:962
+#: admin/class-joinchat-admin.php:231 admin/partials/term_meta_box.php:20
+#: admin/partials/post_meta_box.php:18
msgid "Telephone"
msgstr "TelΓ©fono"
-#: admin/class-joinchat-admin.php:563
+#: admin/class-joinchat-admin.php:604
msgid "Text to open chat on Chat Window button"
msgstr "Texto para abrir el chat en el botΓ³n de la ventana de chat"
-#: admin/class-joinchat-woo-admin.php:132
+#: admin/class-joinchat-woo-admin.php:172
msgid "Thank You"
msgstr "Agradecimiento"
-#: admin/class-joinchat-admin.php:524
+#: admin/class-joinchat-admin.php:558
msgid "The image will alternate with button icon"
msgstr "La imagen se alternarΓ‘ con el icono del botΓ³n"
-#: admin/class-joinchat-admin.php:240
+#: admin/class-joinchat-admin.php:244
msgid "Theme Color"
msgstr "Color del tema"
-#: includes/class-joinchat-i18n.php:126
+#: includes/class-joinchat-i18n.php:127
msgid "There are changes in fields that can be translated."
msgstr "Hay cambios en campos que se pueden traducir."
-#: admin/class-joinchat-woo-admin.php:224
+#: admin/class-joinchat-woo-admin.php:271
msgid ""
"This *{PRODUCT}* can be yours for only *{PRICE}*!\n"
"If you have any questions, ask us."
@@ -572,7 +683,7 @@ msgstr ""
"Β‘Este *{PRODUCT}* puede ser tuyo solo por *{PRICE}*!\n"
"Si tienes alguna duda, pregΓΊntanos."
-#: admin/class-joinchat-admin.php:538
+#: admin/class-joinchat-admin.php:573
msgid "Time since the page is opened until the button is displayed"
msgstr "Tiempo desde que se abre la pΓ‘gina hasta que se muestra el botΓ³n"
@@ -591,82 +702,81 @@ msgctxt "Title in Elementor Finder"
msgid "WooCommerce Settings"
msgstr "Ajustes de WooCommerce"
-#: admin/class-joinchat-admin.php:747
+#: admin/class-joinchat-admin.php:839
msgid "to hide Chat Window on click."
msgstr "para ocultar la ventana de chat al hacer click."
-#: admin/class-joinchat-admin.php:975
+#: admin/partials/term_meta_box.php:35 admin/partials/post_meta_box.php:31
msgid "to leave it blank use"
msgstr "para dejarlo en blanco usa"
-#: admin/class-joinchat-admin.php:741 admin/class-joinchat-admin.php:748
+#: admin/class-joinchat-admin.php:833 admin/class-joinchat-admin.php:840
msgid "to open WhatsApp directly on click."
msgstr "para lanzar WhatsApp directamente al hacer click."
-#: admin/class-joinchat-admin.php:752
+#: admin/class-joinchat-admin.php:844
msgid "to show always."
msgstr "para mostrar siempre."
-#: admin/class-joinchat-admin.php:740 admin/class-joinchat-admin.php:746
+#: admin/class-joinchat-admin.php:832 admin/class-joinchat-admin.php:838
msgid "to show Chat Window (or open WhatsApp if there is no CTA) on click."
msgstr ""
"para mostrar la ventana de chat (o lanzar WhatsApp si no hay CTA) al hacer "
"clic."
-#: admin/class-joinchat-admin.php:749
+#: admin/class-joinchat-admin.php:841
msgid ""
"To show Chat Window when an HTML element appears on screen when user scrolls:"
msgstr ""
"Mostrar la ventana de chat cuando un elemento HTML aparece en pantalla al "
"hacer scroll el usuario:"
-#: admin/class-joinchat-admin.php:231
+#: admin/class-joinchat-admin.php:234
msgid "Tooltip"
msgstr "InformaciΓ³n emergente"
-#: admin/class-joinchat-admin.php:735
+#: admin/class-joinchat-admin.php:827
msgid "Triggers"
msgstr "Disparadores"
-#: public/class-joinchat-public.php:216 admin/class-joinchat-admin.php:487
-#: admin/class-joinchat-admin.php:718 admin/class-joinchat-admin.php:822
-msgctxt "url lang slug (only available for spanish \"es\")"
-msgid "en"
-msgstr "es"
-
-#: admin/class-joinchat-admin.php:522
+#: admin/class-joinchat-admin.php:556
msgid "Use image"
msgstr "Usar imagen"
-#: admin/class-joinchat-admin.php:112
+#: admin/class-joinchat-admin.php:680
+msgid "User approval is required to enable the contact button"
+msgstr ""
+"Se requiere la aprobaciΓ³n del usuario para habilitar el botΓ³n de contacto"
+
+#: admin/class-joinchat-admin.php:112 admin/partials/term_meta_box.php:40
msgid "Visibility"
msgstr "Visibilidad"
-#: admin/class-joinchat-admin.php:441
+#: admin/class-joinchat-admin.php:466
msgid "Visibility Settings"
msgstr "Ajustes de visibilidad"
-#: admin/class-joinchat-admin.php:604
+#: admin/class-joinchat-admin.php:646
msgid "WhatsApp Logo"
msgstr "WhatsApp logo"
-#: admin/class-joinchat-admin.php:235 admin/class-joinchat-admin.php:542
+#: admin/class-joinchat-admin.php:238 admin/class-joinchat-admin.php:577
msgid "WhatsApp Web"
msgstr "WhatsApp Web"
-#: admin/class-joinchat-admin.php:738
+#: admin/class-joinchat-admin.php:830
msgid "With anchor links:"
msgstr "Con enlaces de ancla:"
-#: admin/class-joinchat-woo-admin.php:194
+#: admin/class-joinchat-woo-admin.php:238
msgid "WooCommerce"
msgstr "WooCommerce"
-#: admin/class-joinchat-admin.php:591
+#: admin/class-joinchat-admin.php:633
msgid "Yes"
msgstr "SΓ"
-#: admin/class-joinchat-woo-admin.php:200
+#: admin/class-joinchat-woo-admin.php:243
msgid ""
"You can define other different texts for the Chat Window on the product "
"pages."
@@ -674,17 +784,17 @@ msgstr ""
"Puedes definir otros textos diferentes para la ventana de chat en las "
"pΓ‘ginas de producto."
-#: admin/class-joinchat-admin.php:737
+#: admin/class-joinchat-admin.php:829
msgid "You can interact on your page with Join.chat in two ways:"
msgstr "Puedes interactuar en tu pΓ‘gina con Join.chat de dos formas:"
-#: admin/class-joinchat-admin.php:429
+#: admin/class-joinchat-admin.php:454
msgid ""
"You can introduce yourself, offer help or even make promotions to your users."
msgstr ""
"Puedes presentarte, ofrecer ayuda o incluso hacer promociones a tus usuarios."
-#: admin/class-joinchat-admin.php:726
+#: admin/class-joinchat-admin.php:817
msgid ""
"You can use dynamic variables that will be replaced by the values of the "
"page the user visits:"
@@ -692,23 +802,23 @@ msgstr ""
"Puedes usar variables dinΓ‘micas que serΓ‘n reemplazadas por los valores de la "
"pΓ‘gina que visita el usuario:"
-#: admin/class-joinchat-admin.php:725
+#: admin/class-joinchat-admin.php:816
msgid ""
-"You can use formatting styles like in WhatsApp: _italic _ "
-"*bold * ~strikethrough~."
+"You can use formatting styles like in WhatsApp: _italic _ *"
+"bold * ~strikethrough~."
msgstr ""
-"Puedes usar estilos de formato como en WhatsApp: _cursiva _ "
-"*negrita * ~tachado~."
+"Puedes usar estilos de formato como en WhatsApp: _cursiva _ *"
+"negrita * ~tachado~."
-#: admin/class-joinchat-admin.php:1054
+#: admin/class-joinchat-admin.php:1189
msgid "You can use vars"
msgstr "Puedes usar las variables"
-#: admin/class-joinchat-admin.php:696
+#: admin/class-joinchat-admin.php:770
msgid "You only need to add your WhatsApp number to contact with your users."
msgstr ""
"Solo necesitas aΓ±adir tu nΓΊmero de WhatsApp para contactar con tus usuarios."
-#: admin/class-joinchat-admin.php:532
+#: admin/class-joinchat-admin.php:566
msgid "π¬ Need help?"
msgstr "π¬ ΒΏNecesitas ayuda?"
diff --git a/languages/creame-whatsapp-me.pot b/languages/creame-whatsapp-me.pot
old mode 100644
new mode 100755
index 806e926..496bc43
--- a/languages/creame-whatsapp-me.pot
+++ b/languages/creame-whatsapp-me.pot
@@ -2,7 +2,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Join.chat\n"
-"POT-Creation-Date: 2022-02-09 15:09+0000\n"
+"POT-Creation-Date: 2022-03-25 08:45+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Your Name \n"
"Language-Team: Creame \n"
@@ -21,76 +21,120 @@ msgstr ""
"X-Poedit-SearchPath-0: .\n"
"Language: "
-#: admin/class-joinchat-woo-admin.php:251
+#: admin/class-joinchat-woo-admin.php:285
msgid ""
"*Hi {SITE}!*\n"
"I have a question about *{PRODUCT} ({SKU})*"
msgstr ""
-#: admin/class-joinchat-admin.php:263
+#: admin/class-joinchat-admin.php:572
+msgid "-1 to display directly without animation"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:609
+msgid "0 to disable"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:267
msgid "404 Page"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:288
+#: admin/class-joinchat-woo-admin.php:336
msgid "WooCommerce , in product pages you can also use:"
msgstr ""
-#: admin/class-joinchat-admin.php:548
+#: admin/class-joinchat-woo-admin.php:248
+msgid "Add a contact button on the product sheet."
+msgstr ""
+
+#: admin/class-joinchat-admin.php:592
#, php-format
msgid "Add links, images, videos and more with %s"
msgstr ""
-#: admin/class-joinchat-admin.php:491
+#: admin/class-joinchat-admin.php:528
#, php-format
msgid "Add unlimited numbers with %1$s or multiple contacts with %2$s"
msgstr ""
-#: admin/class-joinchat-admin.php:834
-msgid "Add-ons"
+#: admin/class-joinchat-admin.php:836
+msgid "Adding some CSS classes in your HTML:"
msgstr ""
-#: admin/class-joinchat-admin.php:753
-msgid "Adding some CSS classes in your HTML:"
+#: admin/class-joinchat-admin.php:113
+msgid "Advanced"
msgstr ""
-#: admin/class-joinchat-admin.php:265
+#: admin/class-joinchat-woo-admin.php:149
+msgid "After \"Add To Cart\" button"
+msgstr ""
+
+#: admin/class-joinchat-woo-admin.php:150
+msgid "After \"Add To Cart\" form"
+msgstr ""
+
+#: admin/class-joinchat-woo-admin.php:151
+msgid "After \"Additional information\""
+msgstr ""
+
+#: admin/class-joinchat-admin.php:269
msgid "Archives"
msgstr ""
-#: admin/class-joinchat-admin.php:267
+#: admin/class-joinchat-woo-admin.php:301
+msgid "Ask for More Info"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:271
msgid "Author Archives"
msgstr ""
-#: admin/class-joinchat-admin.php:590
+#: admin/class-joinchat-admin.php:635
msgid "Auto (detects device dark mode)"
msgstr ""
-#: admin/class-joinchat-admin.php:262
+#: admin/class-joinchat-admin.php:684
+msgid "AW-CONVERSION_ID/CONVERSION_LABEL"
+msgstr ""
+
+#: admin/class-joinchat-woo-admin.php:148
+msgid "Before \"Add To Cart\" button"
+msgstr ""
+
+#: admin/class-joinchat-woo-admin.php:147
+msgid "Before \"Add To Cart\" form"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:266
msgid "Blog Page"
msgstr ""
-#: admin/class-joinchat-admin.php:418
+#: admin/class-joinchat-admin.php:446
msgid "Button"
msgstr ""
-#: admin/class-joinchat-admin.php:233
+#: admin/class-joinchat-admin.php:236
msgid "Button Delay"
msgstr ""
-#: admin/class-joinchat-admin.php:239
+#: admin/class-joinchat-woo-admin.php:200
+msgid "Button Position"
+msgstr ""
+
+#: admin/class-joinchat-woo-admin.php:201 admin/class-joinchat-admin.php:243
msgid "Button Text"
msgstr ""
-#: admin/class-joinchat-admin.php:238 admin/partials/term_meta_box.php:24
+#: admin/class-joinchat-admin.php:242 admin/partials/term_meta_box.php:24
#: admin/partials/post_meta_box.php:22
msgid "Call to Action"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:162
+#: admin/class-joinchat-woo-admin.php:189
msgid "Call to Action for Products"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:163
+#: admin/class-joinchat-woo-admin.php:190
msgid "Call to Action for Products on Sale"
msgstr ""
@@ -98,35 +142,35 @@ msgstr ""
msgid "Can use vars"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:143
+#: admin/class-joinchat-woo-admin.php:170
msgid "Cart"
msgstr ""
-#: admin/class-joinchat-admin.php:245
+#: admin/class-joinchat-admin.php:249
msgid "Chat Delay"
msgstr ""
-#: admin/class-joinchat-admin.php:423
+#: admin/class-joinchat-admin.php:451
msgid "Chat Window"
msgstr ""
-#: admin/class-joinchat-admin.php:565
+#: admin/class-joinchat-admin.php:610
msgid "Chat Window auto displays after delay"
msgstr ""
-#: admin/class-joinchat-admin.php:570
+#: admin/class-joinchat-admin.php:615
msgid "Chat Window auto displays from this number of page views"
msgstr ""
-#: includes/class-joinchat-i18n.php:128
+#: includes/class-joinchat-i18n.php:129
msgid "Check translations"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:144
+#: admin/class-joinchat-woo-admin.php:171
msgid "Checkout"
msgstr ""
-#: public/partials/html.php:49
+#: public/partials/html.php:52
msgid "Close"
msgstr ""
@@ -136,37 +180,41 @@ msgid ""
"support. Stop losing customers and increase your sales."
msgstr ""
-#: admin/class-joinchat-admin.php:489
+#: admin/class-joinchat-admin.php:526
msgid ""
"Contact phone number (the button will not be shown if it's empty)"
" "
msgstr ""
-#: admin/class-joinchat-admin.php:752 admin/class-joinchat-admin.php:764
+#: admin/class-joinchat-admin.php:835 admin/class-joinchat-admin.php:847
msgid "Contact us"
msgstr ""
+#: admin/class-joinchat-admin.php:485
+msgid "Conversions"
+msgstr ""
+
#. Author of the plugin
msgid "Creame"
msgstr ""
-#: admin/class-joinchat-admin.php:448
+#: admin/class-joinchat-admin.php:476
msgid "Custom Post Types"
msgstr ""
-#: admin/class-joinchat-admin.php:603
+#: admin/class-joinchat-admin.php:648
msgid "Custom:"
msgstr ""
-#: admin/class-joinchat-admin.php:241 admin/class-joinchat-admin.php:584
+#: admin/class-joinchat-admin.php:245 admin/class-joinchat-admin.php:629
msgid "Dark Mode"
msgstr ""
-#: admin/class-joinchat-admin.php:266
+#: admin/class-joinchat-admin.php:270
msgid "Date Archives"
msgstr ""
-#: includes/class-joinchat-i18n.php:125
+#: includes/class-joinchat-i18n.php:126
#, php-format
msgid "Default site language (%s)"
msgstr ""
@@ -175,60 +223,73 @@ msgstr ""
msgid "Default visibility"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:246
+#: admin/class-joinchat-woo-admin.php:280
msgid ""
"Define a text for your products on sale to encourage customers to contact"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:239
+#: admin/class-joinchat-woo-admin.php:273
msgid "Define a text for your products to encourage customers to contact"
msgstr ""
-#: admin/class-joinchat-admin.php:546
+#: admin/class-joinchat-admin.php:590
msgid "Define a text to encourage users to contact by WhatsApp"
msgstr ""
-#: admin/class-joinchat-admin.php:576
+#: admin/class-joinchat-admin.php:621
msgid ""
"Display a notification balloon instead of opening the Chat Window for a "
"\"less intrusive\" mode"
msgstr ""
-#: admin/class-joinchat-admin.php:1162
+#: admin/class-joinchat-admin.php:585
+msgid "Display QR code on desktop to scan with phone"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:1253
#, php-format
msgid "Do you like %1$s? Please help us with a %2$s rating."
msgstr ""
-#: admin/class-joinchat-admin.php:833
+#: admin/class-joinchat-admin.php:925
msgid "Documentation"
msgstr ""
-#: admin/class-joinchat-admin.php:155
+#: admin/class-joinchat-woo-admin.php:154
+msgid "Don't show"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:158
msgid "e.g."
msgstr ""
-#: admin/class-joinchat-admin.php:752 admin/class-joinchat-admin.php:764
+#: admin/class-joinchat-admin.php:835 admin/class-joinchat-admin.php:847
msgid "Example:"
msgstr ""
-#: admin/class-joinchat-admin.php:787
+#: admin/class-joinchat-admin.php:674
+msgid ""
+"Explain how you will use the user's contact and the conditions they accept."
+msgstr ""
+
+#: admin/class-joinchat-admin.php:870
#, php-format
msgid "Follow %s on twitter."
msgstr ""
-#: admin/class-joinchat-woo-admin.php:294
+#: admin/class-joinchat-woo-admin.php:342
msgid ""
"For the Call to Action for Products on Sale , you can also "
"use:"
msgstr ""
-#: admin/class-joinchat-admin.php:439
+#: admin/class-joinchat-admin.php:467
msgid ""
"From here you can configure on which pages the WhatsApp button will be "
"visible."
msgstr ""
-#: admin/class-joinchat-admin.php:261
+#: admin/class-joinchat-admin.php:265
msgid "Front Page"
msgstr ""
@@ -236,29 +297,33 @@ msgstr ""
msgid "General"
msgstr ""
-#: admin/class-joinchat-admin.php:256
+#: admin/class-joinchat-admin.php:260
msgid "Global"
msgstr ""
-#: admin/class-joinchat-admin.php:689
+#: admin/class-joinchat-admin.php:771
msgid "Go to settings"
msgstr ""
-#: admin/class-joinchat-admin.php:242 admin/class-joinchat-admin.php:597
+#: admin/class-joinchat-admin.php:309
+msgid "Google Ads Conversion"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:246 admin/class-joinchat-admin.php:642
msgid "Header"
msgstr ""
-#: admin/class-joinchat-admin.php:545
+#: admin/class-joinchat-admin.php:589
msgid ""
"Hello π\n"
"Can we help you?"
msgstr ""
-#: admin/class-joinchat-admin.php:554
+#: admin/class-joinchat-admin.php:598
msgid "Hi *{SITE}*! I need more info about {TITLE} {URL}"
msgstr ""
-#: admin/class-joinchat-admin.php:476 admin/class-joinchat-admin.php:641
+#: admin/class-joinchat-admin.php:513 admin/class-joinchat-admin.php:721
#: admin/partials/term_meta_box.php:45 admin/partials/post_meta_box.php:37
msgid "Hide"
msgstr ""
@@ -271,23 +336,23 @@ msgstr ""
msgid "https://join.chat"
msgstr ""
-#: admin/class-joinchat-admin.php:432
+#: admin/class-joinchat-admin.php:460
msgid ""
"If it's defined a \"Call to Action\", the Chat Window can be displayed "
"automatically if conditions are met."
msgstr ""
-#: admin/class-joinchat-admin.php:425
+#: admin/class-joinchat-admin.php:453
msgid ""
"If you define a \"Call to Action\" a window will be displayed simulating a "
"chat before launching WhatsApp."
msgstr ""
-#: admin/class-joinchat-admin.php:776
+#: admin/class-joinchat-admin.php:859
msgid "If you like Join.chat π"
msgstr ""
-#: admin/class-joinchat-admin.php:771
+#: admin/class-joinchat-admin.php:854
#, php-format
msgid ""
"If you need help, first review our "
@@ -296,20 +361,24 @@ msgid ""
"href=\"%3$s\" target=\"_blank\">premium support ."
msgstr ""
-#: admin/class-joinchat-admin.php:230
+#: admin/class-joinchat-admin.php:233
msgid "Image"
msgstr ""
-#: admin/class-joinchat-admin.php:478
+#: admin/class-joinchat-admin.php:515
msgid "Inherit"
msgstr ""
+#: admin/class-joinchat-admin.php:168
+msgid "is an example, double click to use it"
+msgstr ""
+
#. Name of the plugin
-#: admin/class-joinchat-admin.php:912 admin/partials/term_meta_box.php:16
+#: admin/class-joinchat-admin.php:1003 admin/partials/term_meta_box.php:16
msgid "Join.chat"
msgstr ""
-#: admin/class-joinchat-admin.php:865
+#: admin/class-joinchat-admin.php:956
msgid "Join.chat Settings"
msgstr ""
@@ -334,228 +403,264 @@ msgctxt "Keywords in Elementor Finder"
msgid "woocommerce,shop,product"
msgstr ""
-#: admin/class-joinchat-admin.php:506
+#: admin/class-joinchat-admin.php:543
msgid "Left"
msgstr ""
-#: admin/class-joinchat-admin.php:229 admin/partials/term_meta_box.php:28
+#: admin/class-joinchat-admin.php:232 admin/partials/term_meta_box.php:28
#: admin/partials/post_meta_box.php:26
msgid "Message"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:164
+#: admin/class-joinchat-woo-admin.php:191
msgid "Message for Products"
msgstr ""
-#: admin/class-joinchat-admin.php:234 admin/class-joinchat-admin.php:498
+#: admin/class-joinchat-admin.php:237 admin/class-joinchat-admin.php:535
msgid "Mobile Only"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:146
+#: admin/class-joinchat-woo-admin.php:173
msgid "My Account"
msgstr ""
-#: admin/class-joinchat-admin.php:586
+#: admin/class-joinchat-admin.php:631
msgid "No"
msgstr ""
-#: admin/class-joinchat-admin.php:247 admin/class-joinchat-admin.php:574
+#: admin/class-joinchat-admin.php:251 admin/class-joinchat-admin.php:619
msgid "Notification Balloon"
msgstr ""
-#: admin/class-joinchat-admin.php:500
+#: admin/class-joinchat-admin.php:537
msgid "Only display the button on mobile devices"
msgstr ""
-#: admin/class-joinchat-admin.php:760
+#: admin/class-joinchat-admin.php:843
msgid "only show if it's an not seen CTA."
msgstr ""
-#: admin/class-joinchat-admin.php:541
+#: admin/class-joinchat-admin.php:579
msgid "Open WhatsApp Web directly on desktop"
msgstr ""
-#: admin/class-joinchat-admin.php:559 includes/class-joinchat-common.php:40
+#: admin/class-joinchat-admin.php:603 includes/class-joinchat-common.php:41
msgid "Open chat"
msgstr ""
-#: admin/class-joinchat-admin.php:523
+#: admin/class-joinchat-admin.php:480
+msgid "Opt-in"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:481
+msgid "Opt-in is a usersβ consent to receive messages from a business."
+msgstr ""
+
+#: admin/class-joinchat-admin.php:306 admin/class-joinchat-admin.php:678
+msgid "Opt-in Required"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:305
+msgid "Opt-in Text"
+msgstr ""
+
+#: public/partials/html.php:37
+msgid "or scan the code"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:560
#, php-format
msgid "Other icons and more channels (Telegram, Messengerβ¦) with %s"
msgstr ""
-#: admin/class-joinchat-admin.php:269
+#: admin/class-joinchat-admin.php:273
msgid "Page"
msgstr ""
-#: admin/class-joinchat-admin.php:739
+#: admin/class-joinchat-admin.php:820
msgid "Page Title"
msgstr ""
-#: admin/class-joinchat-admin.php:246
+#: admin/class-joinchat-admin.php:250
msgid "Page Views"
msgstr ""
-#: admin/class-joinchat-admin.php:779
+#: admin/class-joinchat-admin.php:862
#, php-format
msgid "Please leave us a %s rating. We'll thank you."
msgstr ""
-#: admin/class-joinchat-admin.php:232 admin/class-joinchat-admin.php:504
+#: admin/class-joinchat-admin.php:235 admin/class-joinchat-admin.php:541
msgid "Position on Screen"
msgstr ""
-#: admin/class-joinchat-admin.php:270
+#: admin/class-joinchat-admin.php:274
msgid "Post"
msgstr ""
-#: public/partials/html.php:42
+#: public/partials/html.php:45
msgid "Powered by"
msgstr ""
-#: admin/class-joinchat-admin.php:599
+#: admin/class-joinchat-admin.php:644
msgid "Powered by Join.chat"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:253
+#: admin/class-joinchat-woo-admin.php:287
msgid "Predefined text for the first message the client will send you"
msgstr ""
-#: admin/class-joinchat-admin.php:555
+#: admin/class-joinchat-admin.php:599
msgid "Predefined text for the first message the user will send you"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:211
+#: admin/class-joinchat-admin.php:903
+msgid "Premium"
+msgstr ""
+
+#: admin/class-joinchat-woo-admin.php:247
+msgid "Product Button"
+msgstr ""
+
+#: admin/class-joinchat-woo-admin.php:242
msgid "Product Chat Window"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:290
+#: admin/class-joinchat-woo-admin.php:338
msgid "Product Name"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:142
+#: admin/class-joinchat-woo-admin.php:169
msgid "Product Page"
msgstr ""
-#: admin/class-joinchat-admin.php:520
+#: admin/class-joinchat-admin.php:239 admin/class-joinchat-admin.php:583
+msgid "QR Code"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:557
msgid "Remove"
msgstr ""
-#: admin/class-joinchat-admin.php:440
+#: admin/class-joinchat-admin.php:468
msgid "Restore default visibility"
msgstr ""
-#: admin/class-joinchat-admin.php:508
+#: admin/class-joinchat-admin.php:545
msgid "Right"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:244
+#: admin/class-joinchat-woo-admin.php:278
msgid ""
"Save {DISCOUNT}! This *{PRODUCT}* can be yours for only ~{REGULAR}~ *{PRICE}"
"*.\n"
"If you have any questions, ask us."
msgstr ""
-#: admin/class-joinchat-admin.php:264
+#: admin/class-joinchat-admin.php:268
msgid "Search Results"
msgstr ""
-#: admin/class-joinchat-admin.php:534
+#: admin/class-joinchat-admin.php:572 admin/class-joinchat-admin.php:609
msgid "seconds"
msgstr ""
-#: admin/class-joinchat-admin.php:564
-msgid "seconds (0 disabled)"
-msgstr ""
-
-#: admin/class-joinchat-admin.php:518
+#: admin/class-joinchat-admin.php:555
msgid "Select an image"
msgstr ""
-#: admin/class-joinchat-admin.php:519
+#: admin/class-joinchat-admin.php:556
msgid "Select button image"
msgstr ""
-#: admin/class-joinchat-admin.php:419
+#: admin/class-joinchat-woo-admin.php:297
+msgid "Select the position of the button on the product page"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:685
+msgid "Send the conversion automatically at the chat start"
+msgstr ""
+
+#: admin/class-joinchat-admin.php:447
msgid ""
"Set the contact number and where you want the WhatsApp button to be "
"displayed."
msgstr ""
-#: admin/class-joinchat-admin.php:810
+#: admin/class-joinchat-admin.php:893
msgid "Settings"
msgstr ""
-#: admin/class-joinchat-admin.php:364
+#: admin/class-joinchat-admin.php:391
msgid "Settings saved"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:141
+#: admin/class-joinchat-woo-admin.php:168
msgid "Shop"
msgstr ""
-#: admin/class-joinchat-admin.php:530
+#: admin/class-joinchat-admin.php:567
msgid "Short text shown next to button"
msgstr ""
-#: admin/class-joinchat-admin.php:474 admin/class-joinchat-admin.php:639
+#: admin/class-joinchat-admin.php:511 admin/class-joinchat-admin.php:719
#: admin/partials/term_meta_box.php:43 admin/partials/post_meta_box.php:35
msgid "Show"
msgstr ""
-#: admin/class-joinchat-admin.php:433 admin/class-joinchat-admin.php:1099
+#: admin/class-joinchat-admin.php:461 admin/class-joinchat-admin.php:1190
msgid "Show Help"
msgstr ""
-#: admin/class-joinchat-admin.php:268
+#: admin/class-joinchat-admin.php:272
msgid "Singular"
msgstr ""
-#: admin/class-joinchat-admin.php:732
+#: admin/class-joinchat-admin.php:814
msgid "Styles and Variables"
msgstr ""
-#: admin/class-joinchat-admin.php:783
+#: admin/class-joinchat-admin.php:866
#, php-format
msgid "Subscribe to our newsletter and visit our blog at %s."
msgstr ""
-#: admin/class-joinchat-admin.php:768 admin/class-joinchat-admin.php:835
+#: admin/class-joinchat-admin.php:851 admin/class-joinchat-admin.php:926
msgid "Support"
msgstr ""
-#: admin/class-joinchat-admin.php:228 admin/partials/term_meta_box.php:20
+#: admin/class-joinchat-admin.php:231 admin/partials/term_meta_box.php:20
#: admin/partials/post_meta_box.php:18
msgid "Telephone"
msgstr ""
-#: admin/class-joinchat-admin.php:560
+#: admin/class-joinchat-admin.php:604
msgid "Text to open chat on Chat Window button"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:145
+#: admin/class-joinchat-woo-admin.php:172
msgid "Thank You"
msgstr ""
-#: admin/class-joinchat-admin.php:521
+#: admin/class-joinchat-admin.php:558
msgid "The image will alternate with button icon"
msgstr ""
-#: admin/class-joinchat-admin.php:240
+#: admin/class-joinchat-admin.php:244
msgid "Theme Color"
msgstr ""
-#: includes/class-joinchat-i18n.php:126
+#: includes/class-joinchat-i18n.php:127
msgid "There are changes in fields that can be translated."
msgstr ""
-#: admin/class-joinchat-woo-admin.php:237
+#: admin/class-joinchat-woo-admin.php:271
msgid ""
"This *{PRODUCT}* can be yours for only *{PRICE}*!\n"
"If you have any questions, ask us."
msgstr ""
-#: admin/class-joinchat-admin.php:535
+#: admin/class-joinchat-admin.php:573
msgid "Time since the page is opened until the button is displayed"
msgstr ""
@@ -574,7 +679,7 @@ msgctxt "Title in Elementor Finder"
msgid "WooCommerce Settings"
msgstr ""
-#: admin/class-joinchat-admin.php:756
+#: admin/class-joinchat-admin.php:839
msgid "to hide Chat Window on click."
msgstr ""
@@ -582,104 +687,102 @@ msgstr ""
msgid "to leave it blank use"
msgstr ""
-#: admin/class-joinchat-admin.php:750 admin/class-joinchat-admin.php:757
+#: admin/class-joinchat-admin.php:833 admin/class-joinchat-admin.php:840
msgid "to open WhatsApp directly on click."
msgstr ""
-#: admin/class-joinchat-admin.php:761
+#: admin/class-joinchat-admin.php:844
msgid "to show always."
msgstr ""
-#: admin/class-joinchat-admin.php:749 admin/class-joinchat-admin.php:755
+#: admin/class-joinchat-admin.php:832 admin/class-joinchat-admin.php:838
msgid "to show Chat Window (or open WhatsApp if there is no CTA) on click."
msgstr ""
-#: admin/class-joinchat-admin.php:758
+#: admin/class-joinchat-admin.php:841
msgid ""
"To show Chat Window when an HTML element appears on screen when user scrolls:"
msgstr ""
-#: admin/class-joinchat-admin.php:231
+#: admin/class-joinchat-admin.php:234
msgid "Tooltip"
msgstr ""
-#: admin/class-joinchat-admin.php:744
+#: admin/class-joinchat-admin.php:827
msgid "Triggers"
msgstr ""
-#: public/class-joinchat-public.php:221 admin/class-joinchat-admin.php:484
-#: admin/class-joinchat-admin.php:727 admin/class-joinchat-admin.php:831
-msgctxt "url lang slug (only available for spanish \"es\")"
-msgid "en"
+#: admin/class-joinchat-admin.php:556
+msgid "Use image"
msgstr ""
-#: admin/class-joinchat-admin.php:519
-msgid "Use image"
+#: admin/class-joinchat-admin.php:680
+msgid "User approval is required to enable the contact button"
msgstr ""
#: admin/class-joinchat-admin.php:112 admin/partials/term_meta_box.php:40
msgid "Visibility"
msgstr ""
-#: admin/class-joinchat-admin.php:438
+#: admin/class-joinchat-admin.php:466
msgid "Visibility Settings"
msgstr ""
-#: admin/class-joinchat-admin.php:601
+#: admin/class-joinchat-admin.php:646
msgid "WhatsApp Logo"
msgstr ""
-#: admin/class-joinchat-admin.php:235 admin/class-joinchat-admin.php:539
+#: admin/class-joinchat-admin.php:238 admin/class-joinchat-admin.php:577
msgid "WhatsApp Web"
msgstr ""
-#: admin/class-joinchat-admin.php:747
+#: admin/class-joinchat-admin.php:830
msgid "With anchor links:"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:207
+#: admin/class-joinchat-woo-admin.php:238
msgid "WooCommerce"
msgstr ""
-#: admin/class-joinchat-admin.php:588
+#: admin/class-joinchat-admin.php:633
msgid "Yes"
msgstr ""
-#: admin/class-joinchat-woo-admin.php:213
+#: admin/class-joinchat-woo-admin.php:243
msgid ""
"You can define other different texts for the Chat Window on the product "
"pages."
msgstr ""
-#: admin/class-joinchat-admin.php:746
+#: admin/class-joinchat-admin.php:829
msgid "You can interact on your page with Join.chat in two ways:"
msgstr ""
-#: admin/class-joinchat-admin.php:426
+#: admin/class-joinchat-admin.php:454
msgid ""
"You can introduce yourself, offer help or even make promotions to your users."
msgstr ""
-#: admin/class-joinchat-admin.php:735
+#: admin/class-joinchat-admin.php:817
msgid ""
"You can use dynamic variables that will be replaced by the values of the "
"page the user visits:"
msgstr ""
-#: admin/class-joinchat-admin.php:734
+#: admin/class-joinchat-admin.php:816
msgid ""
"You can use formatting styles like in WhatsApp: _italic _ *"
"bold * ~strikethrough~."
msgstr ""
-#: admin/class-joinchat-admin.php:1098
+#: admin/class-joinchat-admin.php:1189
msgid "You can use vars"
msgstr ""
-#: admin/class-joinchat-admin.php:688
+#: admin/class-joinchat-admin.php:770
msgid "You only need to add your WhatsApp number to contact with your users."
msgstr ""
-#: admin/class-joinchat-admin.php:529
+#: admin/class-joinchat-admin.php:566
msgid "π¬ Need help?"
msgstr ""
diff --git a/package-lock.json b/package-lock.json
old mode 100644
new mode 100755
index 4de65ee..c7ac224
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,17 +12,18 @@
"autoprefixer": "^10.4.2",
"cssnano-cli": "^1.0.5",
"del-cli": "^4.0.1",
- "postcss-calc": "^8.2.3",
+ "postcss-calc": "^8.2.4",
"postcss-cli": "^9.1.0",
- "postcss-discard-duplicates": "^5.0.2",
+ "postcss-discard-duplicates": "^5.1.0",
"postcss-hexrgba": "^2.0.1",
"postcss-inline-svg": "^5.0.0",
"postcss-scss": "^4.0.3",
+ "postcss-sort-media-queries": "^4.2.1",
"postcss-strip-inline-comments": "^0.1.5",
- "postcss-svgo": "^5.0.3",
+ "postcss-svgo": "^5.1.0",
"precss": "^4.0.0",
- "stylelint": "^14.3.0",
- "stylelint-config-standard": "^24.0.0"
+ "stylelint": "^14.5.3",
+ "stylelint-config-standard": "^25.0.0"
}
},
"node_modules/@babel/code-frame": {
@@ -364,31 +365,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/caniuse-api": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
- "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
- "dev": true,
- "dependencies": {
- "browserslist": "^1.3.6",
- "caniuse-db": "^1.0.30000529",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
- }
- },
- "node_modules/caniuse-api/node_modules/browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
- "dev": true,
- "dependencies": {
- "caniuse-db": "^1.0.30000639",
- "electron-to-chromium": "^1.2.7"
- },
- "bin": {
- "browserslist": "cli.js"
- }
- },
"node_modules/caniuse-db": {
"version": "1.0.30001038",
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001038.tgz",
@@ -396,14 +372,20 @@
"dev": true
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001306",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001306.tgz",
- "integrity": "sha512-Wd1OuggRzg1rbnM5hv1wXs2VkxJH/AA+LuudlIqvZiCvivF+wJJe2mgBZC8gPMgI7D76PP5CTx8Luvaqc1V6OQ==",
+ "version": "1.0.30001320",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz",
+ "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==",
"dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- }
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ }
+ ]
},
"node_modules/chalk": {
"version": "2.4.2",
@@ -700,6 +682,15 @@
"node": "*"
}
},
+ "node_modules/css-functions-list": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz",
+ "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ }
+ },
"node_modules/css-has-pseudo": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz",
@@ -943,6 +934,18 @@
"browserslist": "cli.js"
}
},
+ "node_modules/cssnano/node_modules/caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^1.3.6",
+ "caniuse-db": "^1.0.30000529",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
"node_modules/cssnano/node_modules/chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
@@ -1078,6 +1081,30 @@
"postcss": "^5.0.4"
}
},
+ "node_modules/cssnano/node_modules/postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^1.5.2",
+ "caniuse-api": "^1.5.2",
+ "postcss": "^5.0.4",
+ "postcss-selector-parser": "^2.2.2",
+ "vendors": "^1.0.0"
+ }
+ },
+ "node_modules/cssnano/node_modules/postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "dev": true,
+ "dependencies": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
"node_modules/cssnano/node_modules/postcss-svgo": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
@@ -1943,12 +1970,6 @@
"node": ">=6"
}
},
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -2491,9 +2512,9 @@
"dev": true
},
"node_modules/nanoid": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
- "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
+ "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
"dev": true,
"bin": {
"nanoid": "bin/nanoid.cjs"
@@ -2728,12 +2749,12 @@
}
},
"node_modules/postcss": {
- "version": "8.4.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
- "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
+ "version": "8.4.8",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.8.tgz",
+ "integrity": "sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==",
"dev": true,
"dependencies": {
- "nanoid": "^3.2.0",
+ "nanoid": "^3.3.1",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
@@ -2893,13 +2914,13 @@
}
},
"node_modules/postcss-calc": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.3.tgz",
- "integrity": "sha512-EGM2EBBWqP57N0E7N7WOLT116PJ39dwHVU01WO4XPPQLJfkL2xVgkMZ+TZvCfapj/uJH07UEfKHQNPHzSw/14Q==",
+ "version": "8.2.4",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz",
+ "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",
"dev": true,
"dependencies": {
- "postcss-selector-parser": "^6.0.2",
- "postcss-value-parser": "^4.0.2"
+ "postcss-selector-parser": "^6.0.9",
+ "postcss-value-parser": "^4.2.0"
},
"peerDependencies": {
"postcss": "^8.2.2"
@@ -3602,9 +3623,9 @@
}
},
"node_modules/postcss-discard-duplicates": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz",
- "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
+ "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
"dev": true,
"engines": {
"node": "^10 || ^12 || >=14.0"
@@ -4643,122 +4664,6 @@
"node": ">=0.8.0"
}
},
- "node_modules/postcss-merge-rules": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
- "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
- "dev": true,
- "dependencies": {
- "browserslist": "^1.5.2",
- "caniuse-api": "^1.5.2",
- "postcss": "^5.0.4",
- "postcss-selector-parser": "^2.2.2",
- "vendors": "^1.0.0"
- }
- },
- "node_modules/postcss-merge-rules/node_modules/ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-merge-rules/node_modules/browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
- "dev": true,
- "dependencies": {
- "caniuse-db": "^1.0.30000639",
- "electron-to-chromium": "^1.2.7"
- },
- "bin": {
- "browserslist": "cli.js"
- }
- },
- "node_modules/postcss-merge-rules/node_modules/chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-merge-rules/node_modules/chalk/node_modules/supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/postcss-merge-rules/node_modules/has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-merge-rules/node_modules/postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "dependencies": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
- "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
- "dev": true,
- "dependencies": {
- "flatten": "^1.0.2",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1"
- }
- },
- "node_modules/postcss-merge-rules/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-merge-rules/node_modules/supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "dependencies": {
- "has-flag": "^1.0.0"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/postcss-message-helpers": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
@@ -6220,6 +6125,21 @@
"node": ">=4"
}
},
+ "node_modules/postcss-sort-media-queries": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.2.1.tgz",
+ "integrity": "sha512-9VYekQalFZ3sdgcTjXMa0dDjsfBVHXlraYJEMiOJ/2iMmI2JGCMavP16z3kWOaRu8NSaJCTgVpB/IVpH5yT9YQ==",
+ "dev": true,
+ "dependencies": {
+ "sort-css-media-queries": "2.0.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.4"
+ }
+ },
"node_modules/postcss-strip-inline-comments": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/postcss-strip-inline-comments/-/postcss-strip-inline-comments-0.1.5.tgz",
@@ -6309,12 +6229,12 @@
}
},
"node_modules/postcss-svgo": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz",
- "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz",
+ "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==",
"dev": true,
"dependencies": {
- "postcss-value-parser": "^4.1.0",
+ "postcss-value-parser": "^4.2.0",
"svgo": "^2.7.0"
},
"engines": {
@@ -6868,9 +6788,9 @@
}
},
"node_modules/signal-exit": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
- "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"node_modules/slash": {
@@ -6932,6 +6852,15 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "node_modules/sort-css-media-queries": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.0.4.tgz",
+ "integrity": "sha512-PAIsEK/XupCQwitjv7XxoMvYhT7EAfyzI3hsy/MyDgTvc+Ft55ctdkctJLOy6cQejaIC+zjpUL4djFVm2ivOOw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.3.0"
+ }
+ },
"node_modules/sort-keys": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
@@ -7090,14 +7019,15 @@
"dev": true
},
"node_modules/stylelint": {
- "version": "14.3.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.3.0.tgz",
- "integrity": "sha512-PZXSwtJe4f4qBPWBwAbHL0M0Qjrv8iHN+cLpUNsffaVMS3YzpDDRI73+2lsqLAYfQEzxRwpll6BDKImREbpHWA==",
+ "version": "14.5.3",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.5.3.tgz",
+ "integrity": "sha512-omHETL+kGHR+fCXFK1SkZD/A+emCP9esggAdWEl8GPjTNeyRYj+H6uetRDcU+7E451zwWiUYGVAX+lApsAZgsQ==",
"dev": true,
"dependencies": {
"balanced-match": "^2.0.0",
"colord": "^2.9.2",
"cosmiconfig": "^7.0.1",
+ "css-functions-list": "^3.0.1",
"debug": "^4.3.3",
"execall": "^2.0.0",
"fast-glob": "^3.2.11",
@@ -7119,7 +7049,7 @@
"normalize-path": "^3.0.0",
"normalize-selector": "^0.2.0",
"picocolors": "^1.0.0",
- "postcss": "^8.4.5",
+ "postcss": "^8.4.6",
"postcss-media-query-parser": "^0.2.3",
"postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^6.0.0",
@@ -7134,7 +7064,7 @@
"svg-tags": "^1.0.0",
"table": "^6.8.0",
"v8-compile-cache": "^2.3.0",
- "write-file-atomic": "^4.0.0"
+ "write-file-atomic": "^4.0.1"
},
"bin": {
"stylelint": "bin/stylelint.js"
@@ -7148,24 +7078,24 @@
}
},
"node_modules/stylelint-config-recommended": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz",
- "integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz",
+ "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==",
"dev": true,
"peerDependencies": {
- "stylelint": "^14.0.0"
+ "stylelint": "^14.4.0"
}
},
"node_modules/stylelint-config-standard": {
- "version": "24.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-24.0.0.tgz",
- "integrity": "sha512-+RtU7fbNT+VlNbdXJvnjc3USNPZRiRVp/d2DxOF/vBDDTi0kH5RX2Ny6errdtZJH3boO+bmqIYEllEmok4jiuw==",
+ "version": "25.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-25.0.0.tgz",
+ "integrity": "sha512-21HnP3VSpaT1wFjFvv9VjvOGDtAviv47uTp3uFmzcN+3Lt+RYRv6oAplLaV51Kf792JSxJ6svCJh/G18E9VnCA==",
"dev": true,
"dependencies": {
- "stylelint-config-recommended": "^6.0.0"
+ "stylelint-config-recommended": "^7.0.0"
},
"peerDependencies": {
- "stylelint": "^14.0.0"
+ "stylelint": "^14.4.0"
}
},
"node_modules/stylelint/node_modules/ansi-regex": {
@@ -7433,26 +7363,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/typedarray-to-buffer": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-4.0.0.tgz",
- "integrity": "sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/uniq": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
@@ -7509,7 +7419,11 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
"integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
- "dev": true
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
"node_modules/whet.extend": {
"version": "0.9.9",
@@ -7610,15 +7524,13 @@
"dev": true
},
"node_modules/write-file-atomic": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.0.tgz",
- "integrity": "sha512-JhcWoKffJNF7ivO9yflBhc7tn3wKnokMUfWpBriM9yCXj4ePQnRPcWglBkkg1AHC8nsW/EfxwwhqsLtOy59djA==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz",
+ "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==",
"dev": true,
"dependencies": {
"imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^4.0.0"
+ "signal-exit": "^3.0.7"
},
"engines": {
"node": "^12.13.0 || ^14.15.0 || >=16"
@@ -7959,30 +7871,6 @@
"quick-lru": "^4.0.1"
}
},
- "caniuse-api": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
- "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
- "dev": true,
- "requires": {
- "browserslist": "^1.3.6",
- "caniuse-db": "^1.0.30000529",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
- },
- "dependencies": {
- "browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
- "dev": true,
- "requires": {
- "caniuse-db": "^1.0.30000639",
- "electron-to-chromium": "^1.2.7"
- }
- }
- }
- },
"caniuse-db": {
"version": "1.0.30001038",
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001038.tgz",
@@ -7990,9 +7878,9 @@
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001306",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001306.tgz",
- "integrity": "sha512-Wd1OuggRzg1rbnM5hv1wXs2VkxJH/AA+LuudlIqvZiCvivF+wJJe2mgBZC8gPMgI7D76PP5CTx8Luvaqc1V6OQ==",
+ "version": "1.0.30001320",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz",
+ "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==",
"dev": true
},
"chalk": {
@@ -8235,6 +8123,12 @@
"integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
"dev": true
},
+ "css-functions-list": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz",
+ "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==",
+ "dev": true
+ },
"css-has-pseudo": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz",
@@ -8408,6 +8302,18 @@
"electron-to-chromium": "^1.2.7"
}
},
+ "caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.3.6",
+ "caniuse-db": "^1.0.30000529",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
@@ -8511,6 +8417,30 @@
"postcss": "^5.0.4"
}
},
+ "postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.5.2",
+ "caniuse-api": "^1.5.2",
+ "postcss": "^5.0.4",
+ "postcss-selector-parser": "^2.2.2",
+ "vendors": "^1.0.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "dev": true,
+ "requires": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
"postcss-svgo": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
@@ -9177,12 +9107,6 @@
"integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
"dev": true
},
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -9593,9 +9517,9 @@
"dev": true
},
"nanoid": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
- "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
+ "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
"dev": true
},
"node-releases": {
@@ -9767,12 +9691,12 @@
"dev": true
},
"postcss": {
- "version": "8.4.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
- "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
+ "version": "8.4.8",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.8.tgz",
+ "integrity": "sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==",
"dev": true,
"requires": {
- "nanoid": "^3.2.0",
+ "nanoid": "^3.3.1",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
}
@@ -9895,13 +9819,13 @@
}
},
"postcss-calc": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.3.tgz",
- "integrity": "sha512-EGM2EBBWqP57N0E7N7WOLT116PJ39dwHVU01WO4XPPQLJfkL2xVgkMZ+TZvCfapj/uJH07UEfKHQNPHzSw/14Q==",
+ "version": "8.2.4",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz",
+ "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",
"dev": true,
"requires": {
- "postcss-selector-parser": "^6.0.2",
- "postcss-value-parser": "^4.0.2"
+ "postcss-selector-parser": "^6.0.9",
+ "postcss-value-parser": "^4.2.0"
}
},
"postcss-cli": {
@@ -10429,9 +10353,9 @@
}
},
"postcss-discard-duplicates": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz",
- "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
+ "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
"dev": true,
"requires": {}
},
@@ -11245,102 +11169,6 @@
}
}
},
- "postcss-merge-rules": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
- "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
- "dev": true,
- "requires": {
- "browserslist": "^1.5.2",
- "caniuse-api": "^1.5.2",
- "postcss": "^5.0.4",
- "postcss-selector-parser": "^2.2.2",
- "vendors": "^1.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
- "dev": true,
- "requires": {
- "caniuse-db": "^1.0.30000639",
- "electron-to-chromium": "^1.2.7"
- }
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true
- },
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "postcss-selector-parser": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
- "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
- "dev": true,
- "requires": {
- "flatten": "^1.0.2",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
- }
- },
"postcss-message-helpers": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
@@ -12514,6 +12342,15 @@
"util-deprecate": "^1.0.2"
}
},
+ "postcss-sort-media-queries": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.2.1.tgz",
+ "integrity": "sha512-9VYekQalFZ3sdgcTjXMa0dDjsfBVHXlraYJEMiOJ/2iMmI2JGCMavP16z3kWOaRu8NSaJCTgVpB/IVpH5yT9YQ==",
+ "dev": true,
+ "requires": {
+ "sort-css-media-queries": "2.0.4"
+ }
+ },
"postcss-strip-inline-comments": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/postcss-strip-inline-comments/-/postcss-strip-inline-comments-0.1.5.tgz",
@@ -12586,12 +12423,12 @@
}
},
"postcss-svgo": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz",
- "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz",
+ "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==",
"dev": true,
"requires": {
- "postcss-value-parser": "^4.1.0",
+ "postcss-value-parser": "^4.2.0",
"svgo": "^2.7.0"
}
},
@@ -13009,9 +12846,9 @@
"dev": true
},
"signal-exit": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
- "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"slash": {
@@ -13057,6 +12894,12 @@
}
}
},
+ "sort-css-media-queries": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.0.4.tgz",
+ "integrity": "sha512-PAIsEK/XupCQwitjv7XxoMvYhT7EAfyzI3hsy/MyDgTvc+Ft55ctdkctJLOy6cQejaIC+zjpUL4djFVm2ivOOw==",
+ "dev": true
+ },
"sort-keys": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
@@ -13187,14 +13030,15 @@
"dev": true
},
"stylelint": {
- "version": "14.3.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.3.0.tgz",
- "integrity": "sha512-PZXSwtJe4f4qBPWBwAbHL0M0Qjrv8iHN+cLpUNsffaVMS3YzpDDRI73+2lsqLAYfQEzxRwpll6BDKImREbpHWA==",
+ "version": "14.5.3",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.5.3.tgz",
+ "integrity": "sha512-omHETL+kGHR+fCXFK1SkZD/A+emCP9esggAdWEl8GPjTNeyRYj+H6uetRDcU+7E451zwWiUYGVAX+lApsAZgsQ==",
"dev": true,
"requires": {
"balanced-match": "^2.0.0",
"colord": "^2.9.2",
"cosmiconfig": "^7.0.1",
+ "css-functions-list": "^3.0.1",
"debug": "^4.3.3",
"execall": "^2.0.0",
"fast-glob": "^3.2.11",
@@ -13216,7 +13060,7 @@
"normalize-path": "^3.0.0",
"normalize-selector": "^0.2.0",
"picocolors": "^1.0.0",
- "postcss": "^8.4.5",
+ "postcss": "^8.4.6",
"postcss-media-query-parser": "^0.2.3",
"postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^6.0.0",
@@ -13231,7 +13075,7 @@
"svg-tags": "^1.0.0",
"table": "^6.8.0",
"v8-compile-cache": "^2.3.0",
- "write-file-atomic": "^4.0.0"
+ "write-file-atomic": "^4.0.1"
},
"dependencies": {
"ansi-regex": {
@@ -13320,19 +13164,19 @@
}
},
"stylelint-config-recommended": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz",
- "integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz",
+ "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==",
"dev": true,
"requires": {}
},
"stylelint-config-standard": {
- "version": "24.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-24.0.0.tgz",
- "integrity": "sha512-+RtU7fbNT+VlNbdXJvnjc3USNPZRiRVp/d2DxOF/vBDDTi0kH5RX2Ny6errdtZJH3boO+bmqIYEllEmok4jiuw==",
+ "version": "25.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-25.0.0.tgz",
+ "integrity": "sha512-21HnP3VSpaT1wFjFvv9VjvOGDtAviv47uTp3uFmzcN+3Lt+RYRv6oAplLaV51Kf792JSxJ6svCJh/G18E9VnCA==",
"dev": true,
"requires": {
- "stylelint-config-recommended": "^6.0.0"
+ "stylelint-config-recommended": "^7.0.0"
}
},
"supports-color": {
@@ -13449,12 +13293,6 @@
"integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
"dev": true
},
- "typedarray-to-buffer": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-4.0.0.tgz",
- "integrity": "sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==",
- "dev": true
- },
"uniq": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
@@ -13584,15 +13422,13 @@
"dev": true
},
"write-file-atomic": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.0.tgz",
- "integrity": "sha512-JhcWoKffJNF7ivO9yflBhc7tn3wKnokMUfWpBriM9yCXj4ePQnRPcWglBkkg1AHC8nsW/EfxwwhqsLtOy59djA==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz",
+ "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==",
"dev": true,
"requires": {
"imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^4.0.0"
+ "signal-exit": "^3.0.7"
}
},
"write-file-stdout": {
diff --git a/package.json b/package.json
index 557fd4f..6e9f639 100644
--- a/package.json
+++ b/package.json
@@ -9,17 +9,18 @@
"autoprefixer": "^10.4.2",
"cssnano-cli": "^1.0.5",
"del-cli": "^4.0.1",
- "postcss-calc": "^8.2.3",
+ "postcss-calc": "^8.2.4",
"postcss-cli": "^9.1.0",
- "postcss-discard-duplicates": "^5.0.2",
+ "postcss-discard-duplicates": "^5.1.0",
"postcss-hexrgba": "^2.0.1",
"postcss-inline-svg": "^5.0.0",
"postcss-scss": "^4.0.3",
+ "postcss-sort-media-queries": "^4.2.1",
"postcss-strip-inline-comments": "^0.1.5",
- "postcss-svgo": "^5.0.3",
+ "postcss-svgo": "^5.1.0",
"precss": "^4.0.0",
- "stylelint": "^14.3.0",
- "stylelint-config-standard": "^24.0.0"
+ "stylelint": "^14.5.3",
+ "stylelint-config-standard": "^25.0.0"
},
"browserslist": [
"defaults",
@@ -31,6 +32,10 @@
"css": "postcss src/scss/styles.scss -o public/css/joinchat.css -m",
"minify": "cssnano public/css/joinchat.css public/css/joinchat.min.css --no-svgo --safe",
"build": "npm run css && npm run minify",
+ "woo:css": "postcss src/scss/woo.scss -o public/css/woo.css -m",
+ "woo:minify": "cssnano public/css/woo.css public/css/woo.min.css --no-svgo --safe",
+ "woo:build": "npm run woo:css && npm run woo:minify",
+ "build-all": "npm run build && npm run woo:build",
"clean": "del dist/css/*"
}
}
diff --git a/postcss.config.js b/postcss.config.js
index 639a4f2..e05d7f5 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -1,14 +1,15 @@
module.exports = {
parser: 'postcss-scss',
plugins: [
- require('precss'),
+ require('precss')({ stage: 4 }),
require('postcss-strip-inline-comments'),
require('postcss-hexrgba'),
require('postcss-calc'),
+ require('postcss-sort-media-queries'),
require('autoprefixer'),
require('stylelint')({ fix: true }),
require('postcss-discard-duplicates'),
require('postcss-inline-svg'),
require('postcss-svgo'),
]
-}
\ No newline at end of file
+}
diff --git a/public/class-joinchat-public.php b/public/class-joinchat-public.php
index daf419e..6305617 100644
--- a/public/class-joinchat-public.php
+++ b/public/class-joinchat-public.php
@@ -113,20 +113,21 @@ public function get_settings() {
if ( is_array( $obj_settings ) ) {
$settings = array_merge( $settings, $obj_settings );
-
- // Allow override general settings with empty string with "{}"
- $settings['message_text'] = preg_replace( '/^\{\s*\}$/', '', $settings['message_text'] );
- $settings['message_send'] = preg_replace( '/^\{\s*\}$/', '', $settings['message_send'] );
}
+ // Replace "{}" with empty string
+ $settings['message_text'] = preg_replace( '/^\{\s*\}$/', '', $settings['message_text'] );
+ $settings['message_send'] = preg_replace( '/^\{\s*\}$/', '', $settings['message_send'] );
+
// Prepare settings
$settings['telephone'] = JoinChatUtil::clean_whatsapp( $settings['telephone'] );
$settings['mobile_only'] = 'yes' == $settings['mobile_only'];
$settings['whatsapp_web'] = 'yes' == $settings['whatsapp_web'];
$settings['message_badge'] = 'yes' == $settings['message_badge'] && '' != $settings['message_text'];
+ $settings['qr'] = 'yes' == $settings['qr'];
$settings['message_send'] = JoinChatUtil::replace_variables( $settings['message_send'] );
- // Set true to link http://web.whatsapp.com instead http://api.whatsapp.com
- $settings['whatsapp_web'] = apply_filters( 'joinchat_whatsapp_web', 'yes' == $settings['whatsapp_web'] );
+ $settings['whatsapp_web'] = 'yes' == $settings['whatsapp_web'];
+ $settings['optin_check'] = 'yes' == $settings['optin_check'];
// Only show if there is a phone number
if ( empty( $settings['telephone'] ) ) {
@@ -174,13 +175,24 @@ public function enqueue_styles() {
*
* @since 1.0.0
* @since 2.2.2 minified
+ * @since 4.4.0 added kjua script
* @return void
*/
public function enqueue_scripts() {
if ( $this->show ) {
- $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
- wp_enqueue_script( $this->plugin_name, plugins_url( "js/{$this->plugin_name}{$min}.js", __FILE__ ), array( 'jquery' ), $this->version, true );
+ $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+ $deps = array( 'jquery' );
+
+ wp_register_script( "{$this->plugin_name}-kjua", plugins_url( 'js/kjua.min.js', __FILE__ ), array(), '0.9.0', true );
+
+ // Note: caution with cache plugins and wp_is_mobile()
+ // If kjua script is missing it fails silently and don't shows QR Code :)
+ if ( ! $this->settings['mobile_only'] && $this->settings['qr'] && ! wp_is_mobile() ) {
+ $deps[] = "{$this->plugin_name}-kjua";
+ }
+
+ wp_enqueue_script( $this->plugin_name, plugins_url( "js/{$this->plugin_name}{$min}.js", __FILE__ ), $deps, $this->version, true );
}
}
@@ -210,6 +222,8 @@ public function footer_html() {
'color',
'dark_mode',
'header',
+ 'optin_text',
+ 'optin_check',
)
);
@@ -218,8 +232,8 @@ public function footer_html() {
if ( '__jc__' === $this->settings['header'] ) {
$powered_url = urlencode( home_url( $wp->request ) );
$powered_site = urlencode( get_bloginfo( 'name' ) );
- $powered_lang = _x( 'en', 'url lang slug (only available for spanish "es")', 'creame-whatsapp-me' );
- $powered_link = "https://join.chat/{$powered_lang}/powered/?site={$powered_site}&url={$powered_url}";
+ $powered_lang = false !== strpos( strtolower( get_locale() ), 'es' ) ? 'es' : 'en';
+ $powered_link = "https://join.chat/$powered_lang/powered/?site=$powered_site&url=$powered_url";
}
// Set custom img tag and bypass default image logic
@@ -238,17 +252,53 @@ public function footer_html() {
}
}
- $joinchat_classes = 'joinchat--' . $this->settings['position'];
+ $joinchat_classes = array();
+ $box_content = '';
+
+ // class position
+ $joinchat_classes[] = 'joinchat--' . $this->settings['position'];
+
+ // class dark mode
if ( 'no' !== $this->settings['dark_mode'] ) {
- $joinchat_classes .= 'auto' === $this->settings['dark_mode'] ? ' joinchat--dark-auto' : ' joinchat--dark';
+ $joinchat_classes[] = 'auto' === $this->settings['dark_mode'] ? 'joinchat--dark-auto' : 'joinchat--dark';
+ }
+
+ // class direct display (w/o animation)
+ if ( $this->settings['button_delay'] < 0 ) {
+ $data['button_delay'] = 0;
+ $joinchat_classes[] = 'joinchat--show';
+ $joinchat_classes[] = 'joinchat--noanim';
+
+ if ( $this->settings['mobile_only'] ) {
+ $joinchat_classes[] = 'joinchat--mobile';
+ }
}
- $box_content = '';
if ( $this->settings['message_text'] ) {
$box_content = '' . JoinChatUtil::formated_message( $this->settings['message_text'] ) . '
';
}
+
+ if ( $this->settings['optin_text'] ) {
+ $optin = nl2br( $this->settings['optin_text'] );
+ $optin = str_replace( 'settings['optin_check'] ) {
+ $optin = '' . $optin . ' ';
+ $joinchat_classes[] = 'joinchat--optout';
+ }
+
+ $box_content .= '' . $optin . '
';
+ }
+
$box_content = apply_filters( 'joinchat_content', $box_content, $this->settings );
+ // class only button
+ if ( empty( $box_content ) ) {
+ $joinchat_classes[] = 'joinchat--btn';
+ }
+
+ $joinchat_classes = apply_filters( 'joinchat_classes', $joinchat_classes, $this->settings );
+
ob_start();
include __DIR__ . '/partials/html.php';
$html_output = ob_get_clean();
diff --git a/public/class-joinchat-woo-public.php b/public/class-joinchat-woo-public.php
index 24fc8f1..60b8df9 100644
--- a/public/class-joinchat-woo-public.php
+++ b/public/class-joinchat-woo-public.php
@@ -10,6 +10,24 @@
*/
class JoinChatWooPublic {
+ /**
+ * Product Button Text
+ *
+ * @since 4.4.0
+ * @access private
+ * @var string $btn_text Product Button text.
+ */
+ private $btn_text;
+
+ /**
+ * Product Button Show
+ *
+ * @since 4.4.0
+ * @access private
+ * @var bool $btn_show Product Button is showed.
+ */
+ private $btn_show = false;
+
/**
* Initialize all hooks
*
@@ -30,6 +48,8 @@ public function init( $joinchat ) {
$loader->add_filter( 'storefront_handheld_footer_bar_links', $this, 'storefront_footer_bar' );
+ $loader->add_action( 'wp_footer', $this, 'enqueue_styles' );
+
}
/**
@@ -45,6 +65,8 @@ public function woo_settings( $settings ) {
'message_text_product' => '',
'message_text_on_sale' => '',
'message_send_product' => '',
+ 'woo_btn_position' => 'none',
+ 'woo_btn_text' => '',
);
return array_merge( $settings, $woo_settings );
@@ -62,6 +84,7 @@ public function settings_i18n( $settings ) {
$settings['message_text_product'] = 'Call to Action for Products';
$settings['message_text_on_sale'] = 'Call to Action for Products on sale';
$settings['message_send_product'] = 'Message for Products';
+ $settings['woo_btn_text'] = 'Product Button Text';
return $settings;
}
@@ -82,10 +105,12 @@ public function shop_settings( $settings ) {
if ( $product->is_on_sale() && $settings['message_text_on_sale'] ) {
$settings['message_text'] = $settings['message_text_on_sale'];
- } else {
- $settings['message_text'] = $settings['message_text_product'] ?: $settings['message_text'];
+ } elseif ( $settings['message_text_product'] ) {
+ $settings['message_text'] = $settings['message_text_product'];
+ }
+ if ( $settings['message_send_product'] ) {
+ $settings['message_send'] = $settings['message_send_product'];
}
- $settings['message_send'] = $settings['message_send_product'] ?: $settings['message_send'];
}
// Applies to shop catalog pages
elseif ( is_woocommerce() ) {
@@ -93,13 +118,18 @@ public function shop_settings( $settings ) {
if ( is_array( $shop_settings ) ) {
$settings = array_merge( $settings, $shop_settings );
-
- // Allow override general settings with empty string with "{}"
- $settings['message_text'] = preg_replace( '/^\{\s*\}$/', '', $settings['message_text'] );
- $settings['message_send'] = preg_replace( '/^\{\s*\}$/', '', $settings['message_send'] );
}
}
+ // Add Product Button
+ if ( is_product() && 'none' !== $settings['woo_btn_position'] ) {
+
+ $this->btn_text = $settings['woo_btn_text'];
+
+ add_action( $settings['woo_btn_position'], array( $this, 'product_button' ), apply_filters( 'joinchat_woo_btn_priority', 10 ) );
+
+ }
+
return $settings;
}
@@ -187,6 +217,8 @@ public function excluded_fields( $fields ) {
'message_text_product',
'message_text_on_sale',
'message_send_product',
+ 'woo_btn_position',
+ 'woo_btn_text',
);
return array_merge( $fields, $excluded );
@@ -275,7 +307,7 @@ public function storefront_footer_bar( $links ) {
add_filter(
'joinchat_classes',
function( $classes ) {
- return $classes . ' joinchat--footer-bar';
+ return array_merge( $classes, array( 'joinchat--footer-bar' ) );
}
);
@@ -283,4 +315,36 @@ function( $classes ) {
}
+ /**
+ * Product Button output
+ *
+ * @since 4.4.0
+ * @return void
+ */
+ public function product_button() {
+
+ $this->btn_show = true;
+
+ echo '' . esc_html( $this->btn_text ) . '
';
+
+ }
+
+ /**
+ * Enqueue Styles
+ *
+ * @since 4.4.0
+ * @return void
+ */
+ public function enqueue_styles() {
+
+ if ( $this->btn_show && ! wp_style_is( 'joinchat', 'done' ) ) {
+
+ $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+
+ wp_enqueue_style( 'joinchat-woo', plugins_url( "css/woo{$min}.css", __FILE__ ), array(), JOINCHAT_VERSION, 'all' );
+
+ }
+
+ }
+
}
diff --git a/public/css/joinchat.css b/public/css/joinchat.css
old mode 100644
new mode 100755
index 4f5daf4..25dd695
--- a/public/css/joinchat.css
+++ b/public/css/joinchat.css
@@ -1,8 +1,13 @@
+:root {
+ --joinchat-ico: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M3.516 3.516c4.686-4.686 12.284-4.686 16.97 0 4.686 4.686 4.686 12.283 0 16.97a12.004 12.004 0 0 1-13.754 2.299l-5.814.735a.392.392 0 0 1-.438-.44l.748-5.788A12.002 12.002 0 0 1 3.517 3.517zm3.61 17.043.3.158a9.846 9.846 0 0 0 11.534-1.758c3.843-3.843 3.843-10.074 0-13.918-3.843-3.843-10.075-3.843-13.918 0a9.846 9.846 0 0 0-1.747 11.554l.16.303-.51 3.942a.196.196 0 0 0 .219.22l3.961-.501zm6.534-7.003-.933 1.164a9.843 9.843 0 0 1-3.497-3.495l1.166-.933a.792.792 0 0 0 .23-.94L9.561 6.96a.793.793 0 0 0-.924-.445 1291.6 1291.6 0 0 0-2.023.524.797.797 0 0 0-.588.88 11.754 11.754 0 0 0 10.005 10.005.797.797 0 0 0 .88-.587l.525-2.023a.793.793 0 0 0-.445-.923L14.6 13.327a.792.792 0 0 0-.94.23z'/%3E%3C/svg%3E");
+ --joinchat-font: -apple-system, blinkmacsystemfont, "Segoe UI", roboto, oxygen-sans, ubuntu, cantarell, "Helvetica Neue", sans-serif;
+}
+
.joinchat {
--bottom: 20px;
--sep: 20px;
- --header: 70px;
- --btn: 60px;
+ --s: var(--btn, 60px);
+ --header: calc(var(--s)*1.16667);
--vh: 100vh;
--red: 37;
--green: 211;
@@ -17,15 +22,16 @@
--text: hsl(0deg 0% calc(var(--bw)*1%) / clamp(70%, calc(var(--bw)*1%), 100%));
--msg: var(--color);
+ display: none;
position: fixed;
- z-index: 1000;
+ z-index: 9999;
right: var(--sep);
bottom: var(--bottom);
color: var(--text);
- font: normal normal normal 16px/1.625em -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
+ font: normal normal normal 16px/1.625em var(--joinchat-font);
letter-spacing: 0;
- transform: scale3d(0, 0, 0);
- transition: transform 0.3s ease-in-out;
+ -webkit-animation: joinchat_show 500ms cubic-bezier(0.18, 0.89, 0.32, 1.28) 10ms both;
+ animation: joinchat_show 500ms cubic-bezier(0.18, 0.89, 0.32, 1.28) 10ms both;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
@@ -40,59 +46,31 @@
box-sizing: border-box;
}
-.joinchat:not(.joinchat--show) > div {
- display: none;
-}
-
.joinchat--show {
- transform: scale3d(1, 1, 1);
- transition: transform 0.5s cubic-bezier(0.18, 0.89, 0.32, 1.28);
+ display: block;
}
-.joinchat.joinchat--left {
+.joinchat--left {
right: auto;
left: var(--sep);
}
-@media (max-width: 480px), (orientation: landscape) and (max-width: 767px) {
- .joinchat {
- --bottom: 6px;
- --sep: 6px;
- --header: 55px;
- }
-}
-
-@media (max-width: 767px) {
- .joinchat.joinchat--footer-bar {
- --bottom: 76px;
- }
+.joinchat--dark {
+ --msg: var(--dark);
}
-.joinchat.joinchat--dark {
- --msg: var(--dark);
+.joinchat--noanim {
+ -webkit-animation: none;
+ animation: none;
}
-@media (prefers-reduced-motion) {
- .joinchat {
- transition: none !important;
- }
+.joinchat--hidden {
+ display: none !important;
}
@supports not (width: clamp(1px, 1%, 10px)) {
.joinchat {
- --text: rgb(var(--bw) var(--bw) var(--bw) / 90%);
- }
-}
-
-@media (color-index: 48) {
- .joinchat.joinchat--dark-auto {
- --msg: var(--dark);
- }
-}
-
-@media (prefers-color-scheme: dark) {
- .joinchat.joinchat--dark-auto {
- --msg: var(--dark);
+ --text: hsl(0deg 0% calc(var(--bw)*1%) / 90%);
}
}
@@ -103,12 +81,12 @@
z-index: 2;
bottom: 8px;
right: 8px;
- height: var(--btn);
- min-width: var(--btn);
+ height: var(--s);
+ min-width: var(--s);
max-width: 95vw;
background: #25d366;
color: inherit;
- border-radius: calc(var(--btn)/2);
+ border-radius: calc(var(--s)/2);
box-shadow: 1px 6px 24px 0 rgb(7 94 84 / 24%);
cursor: pointer;
transition: background 0.2s linear;
@@ -150,11 +128,30 @@
background: var(--hover);
}
+.joinchat--optout.joinchat--chatbox .joinchat__button {
+ background-color: #999;
+ opacity: 0.5;
+ pointer-events: none;
+}
+
+.joinchat--optout.joinchat--chatbox .joinchat__button .joinchat_svg__plain {
+ stroke-dasharray: 0;
+ -webkit-animation: none;
+ animation: none;
+}
+
+.joinchat--optout.joinchat--chatbox .joinchat__button .joinchat_svg__chat {
+ -webkit-animation: none;
+ animation: none;
+}
+
.joinchat__button__open {
- width: var(--btn);
- height: var(--btn);
- background: rgb(0 0 0 / 0%) url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M3.516 3.516c4.686-4.686 12.284-4.686 16.97 0 4.686 4.686 4.686 12.283 0 16.97a12.004 12.004 0 0 1-13.754 2.299l-5.814.735a.392.392 0 0 1-.438-.44l.748-5.788A12.002 12.002 0 0 1 3.517 3.517zm3.61 17.043.3.158a9.846 9.846 0 0 0 11.534-1.758c3.843-3.843 3.843-10.074 0-13.918-3.843-3.843-10.075-3.843-13.918 0a9.846 9.846 0 0 0-1.747 11.554l.16.303-.51 3.942a.196.196 0 0 0 .219.22l3.961-.501zm6.534-7.003-.933 1.164a9.843 9.843 0 0 1-3.497-3.495l1.166-.933a.792.792 0 0 0 .23-.94L9.561 6.96a.793.793 0 0 0-.924-.445 1291.6 1291.6 0 0 0-2.023.524.797.797 0 0 0-.588.88 11.754 11.754 0 0 0 10.005 10.005.797.797 0 0 0 .88-.587l.525-2.023a.793.793 0 0 0-.445-.923L14.6 13.327a.792.792 0 0 0-.94.23z'/%3E%3C/svg%3E") center no-repeat;
+ width: var(--s);
+ height: var(--s);
+ border-radius: 50%;
+ background: rgb(0 0 0 / 0%) var(--joinchat-ico) center no-repeat;
background-size: 60%;
+ overflow: hidden;
}
.joinchat--chatbox .joinchat__button__open {
@@ -165,8 +162,8 @@
position: absolute;
top: 1px;
right: 1px;
- width: calc(var(--btn) - 2px);
- height: calc(var(--btn) - 2px);
+ width: calc(var(--s) - 2px);
+ height: calc(var(--s) - 2px);
border-radius: 50%;
overflow: hidden;
opacity: 0;
@@ -197,12 +194,13 @@
.joinchat__button__send {
display: none;
- width: var(--btn);
- height: var(--btn);
- max-width: var(--btn);
- padding: 12px 11px 12px 13px;
- margin: 0;
flex-shrink: 0;
+ width: var(--s);
+ height: var(--s);
+ max-width: var(--s);
+ padding: calc(var(--s)*0.18);
+ margin: 0;
+ overflow: hidden;
}
.joinchat--chatbox .joinchat__button__send {
@@ -228,24 +226,12 @@
animation: joinchat_chat 6s 3.2s ease-in-out infinite;
}
-@media (prefers-reduced-motion) {
- .joinchat__button__send .joinchat_svg__plain {
- stroke-dasharray: 0;
- -webkit-animation: none;
- animation: none;
- }
-
- .joinchat__button__send .joinchat_svg__chat {
- -webkit-animation: none;
- animation: none;
- }
-}
-
.joinchat__button__sendtext {
padding: 0;
max-width: 0;
+ border-radius: var(--s);
font-weight: 600;
- line-height: var(--btn);
+ line-height: var(--s);
white-space: nowrap;
opacity: 0;
overflow: hidden;
@@ -263,12 +249,6 @@
padding: 0 24px 0 4px;
}
-@media (prefers-reduced-motion) {
- .joinchat__button__sendtext {
- transition: none !important;
- }
-}
-
.joinchat__badge {
position: absolute;
top: -4px;
@@ -300,8 +280,8 @@
.joinchat__tooltip {
position: absolute;
- top: calc(var(--btn)/2 - 16px);
- right: calc(var(--btn) + 16px);
+ top: calc(var(--s)/2 - 16px);
+ right: calc(var(--s) + 16px);
max-width: calc(100vw - 105px);
height: 32px;
padding: 0 14px;
@@ -325,7 +305,7 @@
right: -6px;
border: 8px solid transparent;
border-width: 6px 0 6px 8px;
- border-left-color: white;
+ border-left-color: #fff;
}
.joinchat__tooltip div {
@@ -338,22 +318,13 @@
animation: joinchat_tootlip 20s linear 5s 1 normal both;
}
-@media (hover: hover) {
- .joinchat__button:hover .joinchat__tooltip {
- opacity: 1;
- -webkit-animation: none;
- animation: none;
- transition: opacity 0.2s;
- }
-}
-
.joinchat--chatbox .joinchat__tooltip {
display: none;
}
.joinchat--left .joinchat__tooltip {
right: auto;
- left: 76px;
+ left: calc(var(--s) + 16px);
}
.joinchat--left .joinchat__tooltip::after {
@@ -361,7 +332,65 @@
right: auto;
border-color: transparent;
border-width: 6px 8px 6px 0;
- border-right-color: white;
+ border-right-color: #fff;
+}
+
+.joinchat__qr {
+ position: absolute;
+ bottom: calc(var(--s) + 16px);
+ right: 0;
+ display: none;
+ flex-direction: column-reverse;
+ width: 228px;
+ min-height: 200px;
+ padding: 14px 14px 10px;
+ border: none;
+ border-radius: 16px;
+ background: #fff;
+ color: rgb(0 0 0 / 80%);
+ text-align: center;
+ white-space: nowrap;
+ opacity: 1;
+ transition: opacity 0.3s ease-out 0.4s;
+ filter: drop-shadow(0 1px 4px rgb(0 0 0 / 40%));
+ -webkit-animation: joinchat_badge_in 400ms cubic-bezier(0.11, 0.84, 0.83, 1.01) 1s both;
+ animation: joinchat_badge_in 400ms cubic-bezier(0.11, 0.84, 0.83, 1.01) 1s both;
+ pointer-events: none;
+}
+
+.joinchat__qr::after {
+ content: "";
+ display: block;
+ position: absolute;
+ bottom: -6px;
+ right: calc(var(--s)/2 - 6px);
+ border: 8px solid transparent;
+ border-width: 8px 6px 0;
+ border-top-color: #fff;
+}
+
+.joinchat--left .joinchat__qr {
+ left: 0;
+ right: auto;
+}
+
+.joinchat--left .joinchat__qr::after {
+ left: calc(var(--s)/2 - 6px);
+ right: auto;
+}
+
+.joinchat__qr div {
+ font-size: 14px;
+ color: #4a4a4a;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.joinchat__qr canvas {
+ display: block;
+ width: 200px;
+ height: 200px;
+ margin: 0;
}
.joinchat__box {
@@ -375,7 +404,7 @@
max-width: 400px;
min-height: 170px;
max-height: calc(var(--vh) - var(--bottom) - var(--sep));
- border-radius: calc(var(--btn)/2 + 2px);
+ border-radius: calc(var(--s)/2 + 2px);
background: transparent;
box-shadow: 0 2px 6px 0 rgb(0 0 0 / 50%);
text-align: left;
@@ -407,6 +436,7 @@
position: relative;
flex-shrink: 0;
height: var(--header);
+ min-height: 50px;
padding: 0 70px 0 26px;
margin: 0;
background: var(--color);
@@ -462,12 +492,13 @@
}
.joinchat__close {
+ --size: 34px;
+
position: absolute;
- top: 50%;
+ top: calc(50% - var(--size)/2);
right: 24px;
- width: 34px;
- height: 34px;
- margin-top: -16px;
+ width: var(--size);
+ height: var(--size);
border-radius: 50%;
background: rgb(0 0 0 / 40%) url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M24 2.4 21.6 0 12 9.6 2.4 0 0 2.4 9.6 12 0 21.6 2.4 24l9.6-9.6 9.6 9.6 2.4-2.4-9.6-9.6L24 2.4z'/%3E%3C/svg%3E") center no-repeat;
background-size: 12px;
@@ -490,7 +521,7 @@
.joinchat__box__scroll {
padding: 20px 0 70px;
- padding-bottom: calc(var(--btn) + 10px);
+ padding-bottom: calc(var(--s) + 10px);
background: #fff linear-gradient(0deg, var(--bg), var(--bg));
overflow-x: hidden;
overflow-y: auto;
@@ -529,40 +560,91 @@
}
}
-@media (max-width: 480px), (orientation: landscape) and (max-width: 767px) {
- .joinchat__header__text {
- font-size: 17px;
- }
+.joinchat__optin {
+ padding: 0 16px;
+ margin-bottom: 16px;
+ color: #4a4a4a;
+ font-size: 13px;
+ line-height: 1.33;
+}
- .joinchat__close {
- margin-top: -14px;
- width: 28px;
- height: 28px;
- }
+.joinchat__optin a {
+ display: inline;
+ padding: 0;
+ color: inherit !important;
+ text-decoration: underline;
+}
- .joinchat__box__scroll {
- padding-top: 15px;
- }
+.joinchat__optin a:hover {
+ text-decoration-thickness: 2px;
}
-@media (color-index: 48) {
- .joinchat--dark-auto .joinchat__box__scroll {
- background: #1a1a1a;
- }
+.joinchat__optin input {
+ position: absolute;
+ visibility: hidden;
+}
- .joinchat--dark-auto .joinchat__header {
- background: var(--dark);
- }
+.joinchat__optin label {
+ position: relative;
+ display: block;
+ margin: 0;
+ padding: 0 0 0 30px;
+ color: inherit;
+ font: inherit;
+ cursor: pointer;
}
-@media (prefers-color-scheme: dark) {
- .joinchat--dark-auto .joinchat__box__scroll {
- background: #1a1a1a;
- }
+.joinchat__optin label::before {
+ content: "";
+ display: block;
+ position: absolute;
+ top: calc(50% - 11px);
+ left: 0;
+ width: 22px;
+ height: 22px;
+ border: 3px solid var(--color);
+ border-radius: 4px;
+ box-shadow: 0 0 0 1px var(--text);
+ transition: box-shadow 0.3s ease-in-out;
+}
- .joinchat--dark-auto .joinchat__header {
- background: var(--dark);
- }
+.joinchat__optin label::after {
+ content: "";
+ display: none;
+ position: absolute;
+ top: calc(50% - 8px);
+ left: 8px;
+ width: 6px;
+ height: 14px;
+ border: solid var(--text);
+ border-width: 0 3px 3px 0;
+ transform: rotate(45deg);
+}
+
+[dir="rtl"] .joinchat__optin label {
+ padding: 0 30px 0 0;
+}
+
+[dir="rtl"] .joinchat__optin label::before {
+ left: auto;
+ right: 0;
+}
+
+[dir="rtl"] .joinchat__optin label::after {
+ left: auto;
+ right: 8px;
+}
+
+.joinchat__optin input:checked + label::before {
+ box-shadow: 0 0 0 1px var(--text), inset 0 0 0 10px var(--color);
+}
+
+.joinchat__optin input:checked + label::after {
+ display: block;
+}
+
+.joinchat--dark .joinchat__optin {
+ color: #d8d8d8;
}
.joinchat__message {
@@ -587,8 +669,6 @@
width: 17px;
height: 25px;
background: inherit;
- -webkit-clip-path: url(#joinchat__message__peak);
- clip-path: url(#joinchat__message__peak);
-webkit-clip-path: var(--peak, url(#joinchat__message__peak));
clip-path: var(--peak, url(#joinchat__message__peak));
}
@@ -598,25 +678,15 @@
color: #d8d8d8;
}
-@media (color-index: 48) {
- .joinchat--dark-auto .joinchat__message {
- background: #505050;
- color: #d8d8d8;
- }
-}
-
-@media (prefers-color-scheme: dark) {
- .joinchat--dark-auto .joinchat__message {
- background: #505050;
- color: #d8d8d8;
+@-webkit-keyframes joinchat_show {
+ from {
+ transform: scale(0);
}
}
-@media (max-width: 480px), (orientation: landscape) and (max-width: 767px) {
- .joinchat__message {
- padding: 18px 16px;
- line-height: 24px;
- margin: 0 20px 20px;
+@keyframes joinchat_show {
+ from {
+ transform: scale(0);
}
}
@@ -625,11 +695,6 @@
opacity: 0;
transform: translateY(50px);
}
-
- to {
- opacity: 1;
- transform: translateY(0);
- }
}
@keyframes joinchat_badge_in {
@@ -637,11 +702,6 @@
opacity: 0;
transform: translateY(50px);
}
-
- to {
- opacity: 1;
- transform: translateY(0);
- }
}
@-webkit-keyframes joinchat_badge_out {
@@ -789,3 +849,120 @@
transform: scaleY(1);
}
}
+
+.joinchat__woo-btn__wrapper {
+ clear: both;
+}
+
+.joinchat__woo-btn {
+ --s: 40px;
+
+ display: inline-block;
+ box-sizing: border-box;
+ height: var(--s);
+ max-width: 100%;
+ padding: 0 calc(var(--s)/2) 0 var(--s);
+ background: #25d366 var(--joinchat-ico) calc(var(--s)*0.2) 50% no-repeat;
+ background-size: calc(var(--s)*0.6);
+ color: #fff;
+ border-radius: calc(var(--s)/2);
+ font: 700 normal calc(var(--s)*0.35)/var(--s) var(--joinchat-font);
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ cursor: pointer;
+ transition: background-color 200ms;
+}
+
+.joinchat__woo-btn:hover {
+ background-color: #128c7e;
+}
+
+@media (orientation: portrait) and (min-width: 481px), (orientation: landscape) and (min-height: 481px) {
+ .joinchat--mobile {
+ display: none !important;
+ }
+}
+
+@media (max-width: 767px) {
+ .joinchat--footer-bar {
+ --bottom: 76px !important;
+ }
+}
+
+@media (max-width: 480px), (orientation: landscape) and (max-height: 480px) {
+ .joinchat {
+ --bottom: 6px;
+ --sep: 6px;
+ --header: calc(var(--s)*0.91667);
+ }
+ .joinchat__header__text {
+ font-size: 17px;
+ }
+
+ .joinchat__close {
+ --size: 28px;
+ }
+
+ .joinchat__box__scroll {
+ padding-top: 15px;
+ }
+ .joinchat__message {
+ padding: 18px 16px;
+ line-height: 24px;
+ margin: 0 20px 20px;
+ }
+}
+
+@media (hover: hover) {
+ .joinchat__button:hover .joinchat__tooltip {
+ opacity: 1;
+ -webkit-animation: none;
+ animation: none;
+ transition: opacity 0.2s;
+ }
+ .joinchat--btn .joinchat__button:hover .joinchat__qr,
+ .joinchat--chatbox .joinchat__button:hover .joinchat__qr {
+ display: flex;
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+ .joinchat--dark-auto {
+ --msg: var(--dark);
+ }
+ .joinchat--dark-auto .joinchat__box__scroll {
+ background: #1a1a1a;
+ }
+
+ .joinchat--dark-auto .joinchat__header {
+ background: var(--dark);
+ }
+ .joinchat--dark-auto .joinchat__optin {
+ color: #d8d8d8;
+ }
+ .joinchat--dark-auto .joinchat__message {
+ background: #505050;
+ color: #d8d8d8;
+ }
+}
+
+@media (prefers-reduced-motion) {
+ .joinchat {
+ -webkit-animation: none;
+ animation: none;
+ }
+ .joinchat__button__send .joinchat_svg__plain {
+ stroke-dasharray: 0;
+ -webkit-animation: none;
+ animation: none;
+ }
+
+ .joinchat__button__send .joinchat_svg__chat {
+ -webkit-animation: none;
+ animation: none;
+ }
+ .joinchat__button__sendtext {
+ transition: none !important;
+ }
+}
diff --git a/public/css/joinchat.min.css b/public/css/joinchat.min.css
old mode 100644
new mode 100755
index 31212d0..23be4aa
--- a/public/css/joinchat.min.css
+++ b/public/css/joinchat.min.css
@@ -1 +1 @@
-.joinchat{--bottom:20px;--sep:20px;--header:70px;--btn:60px;--vh:100vh;--red:37;--green:211;--blue:102;--rgb:var(--red) var(--green) var(--blue);--color:rgb(var(--rgb));--dark:rgb(calc(var(--red) - 75) calc(var(--green) - 75) calc(var(--blue) - 75));--hover:rgb(calc(var(--red) + 50) calc(var(--green) + 50) calc(var(--blue) + 50));--bg:rgb(var(--rgb)/4%);--tolerance:210;--bw:calc((var(--red)*0.2126 + var(--green)*0.7152 + var(--blue)*0.0722 - var(--tolerance))*-10000000);--text:hsl(0deg 0% calc(var(--bw)*1%)/clamp(70%,calc(var(--bw)*1%),100%));--msg:var(--color);position:fixed;z-index:1000;right:var(--sep);bottom:var(--bottom);color:var(--text);font:normal normal normal 16px/1.625em -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:0;transform:scale3d(0,0,0);transition:transform .3s ease-in-out;-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:manipulation;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:rgb(0 0 0/0)}.joinchat *,.joinchat :after,.joinchat :before{box-sizing:border-box}.joinchat:not(.joinchat--show)>div{display:none}.joinchat--show{transform:scaleX(1);transition:transform .5s cubic-bezier(.18,.89,.32,1.28)}.joinchat.joinchat--left{right:auto;left:var(--sep)}@media (max-width:480px),(orientation:landscape) and (max-width:767px){.joinchat{--bottom:6px;--sep:6px;--header:55px}}@media (max-width:767px){.joinchat.joinchat--footer-bar{--bottom:76px}}.joinchat.joinchat--dark{--msg:var(--dark)}@media (prefers-reduced-motion){.joinchat{transition:none!important}}@supports not (width:clamp(1px,1%,10px)){.joinchat{--text:rgb(var(--bw) var(--bw) var(--bw)/90%)}}@media (color-index:48){.joinchat.joinchat--dark-auto{--msg:var(--dark)}}@media (prefers-color-scheme:dark){.joinchat.joinchat--dark-auto{--msg:var(--dark)}}.joinchat__button{display:flex;flex-direction:row;position:absolute;z-index:2;bottom:8px;right:8px;height:var(--btn);min-width:var(--btn);max-width:95vw;background:#25d366;color:inherit;border-radius:calc(var(--btn)/2);box-shadow:1px 6px 24px 0 rgb(7 94 84/24%);cursor:pointer;transition:background .2s linear;will-change:background-color,width}[dir=rtl] .joinchat__button{flex-direction:row-reverse}.joinchat__button:hover{background:#128c7e;transition:background 1.5s linear}.joinchat__button:active{background:#128c7e;transition:none}.joinchat--left .joinchat__button{right:auto;left:8px;flex-direction:row-reverse}[dir=rtl] .joinchat--left .joinchat__button{flex-direction:row}.joinchat--chatbox .joinchat__button{background:var(--color);transition:background .2s linear;box-shadow:0 1px 2px 0 rgb(0 0 0/30%)}.joinchat--chatbox .joinchat__button:active,.joinchat--chatbox .joinchat__button:hover{background:var(--hover)}.joinchat__button__open{width:var(--btn);height:var(--btn);background:rgb(0 0 0/0) url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M3.516 3.516c4.686-4.686 12.284-4.686 16.97 0 4.686 4.686 4.686 12.283 0 16.97a12.004 12.004 0 0 1-13.754 2.299l-5.814.735a.392.392 0 0 1-.438-.44l.748-5.788A12.002 12.002 0 0 1 3.517 3.517zm3.61 17.043.3.158a9.846 9.846 0 0 0 11.534-1.758c3.843-3.843 3.843-10.074 0-13.918-3.843-3.843-10.075-3.843-13.918 0a9.846 9.846 0 0 0-1.747 11.554l.16.303-.51 3.942a.196.196 0 0 0 .219.22l3.961-.501zm6.534-7.003-.933 1.164a9.843 9.843 0 0 1-3.497-3.495l1.166-.933a.792.792 0 0 0 .23-.94L9.561 6.96a.793.793 0 0 0-.924-.445 1291.6 1291.6 0 0 0-2.023.524.797.797 0 0 0-.588.88 11.754 11.754 0 0 0 10.005 10.005.797.797 0 0 0 .88-.587l.525-2.023a.793.793 0 0 0-.445-.923L14.6 13.327a.792.792 0 0 0-.94.23z'/%3E%3C/svg%3E") 50% no-repeat;background-size:60%}.joinchat--chatbox .joinchat__button__open{display:none}.joinchat__button__image{position:absolute;top:1px;right:1px;width:calc(var(--btn) - 2px);height:calc(var(--btn) - 2px);border-radius:50%;overflow:hidden;opacity:0}.joinchat__button__image img{display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.joinchat--show .joinchat__button__image{animation:joinchat_image_loop 20s linear 5s infinite normal both}.joinchat--image .joinchat__button__image{opacity:1;animation:none}.joinchat--chatbox .joinchat__button__image{display:none}.joinchat__button__send{display:none;width:var(--btn);height:var(--btn);max-width:var(--btn);padding:12px 11px 12px 13px;margin:0;flex-shrink:0}.joinchat--chatbox .joinchat__button__send{display:block}.joinchat__button__send path{fill:none!important;stroke:var(--text)!important}.joinchat__button__send .joinchat_svg__plain{stroke-dasharray:1097;stroke-dashoffset:1097;animation:joinchat_plain 6s .2s ease-in-out infinite}.joinchat__button__send .joinchat_svg__chat{stroke-dasharray:1020;stroke-dashoffset:1020;animation:joinchat_chat 6s 3.2s ease-in-out infinite}@media (prefers-reduced-motion){.joinchat__button__send .joinchat_svg__plain{stroke-dasharray:0;animation:none}.joinchat__button__send .joinchat_svg__chat{animation:none}}.joinchat__button__sendtext{padding:0;max-width:0;font-weight:600;line-height:var(--btn);white-space:nowrap;opacity:0;overflow:hidden;transition:none}.joinchat--chatbox .joinchat__button__sendtext{padding:0 4px 0 24px;max-width:200px;opacity:1;transition:max-width .2s linear,opacity .4s ease-out .2s}.joinchat--chatbox.joinchat--left .joinchat__button__sendtext{padding:0 24px 0 4px}@media (prefers-reduced-motion){.joinchat__button__sendtext{transition:none!important}}.joinchat__badge{position:absolute;top:-4px;right:-4px;width:20px;height:20px;border:none;border-radius:50%;background:#e82c0c;color:#fff;font-size:12px;font-weight:600;line-height:20px;text-align:center;box-shadow:none;opacity:0;pointer-events:none}.joinchat__badge.joinchat__badge--in{animation:joinchat_badge_in .5s cubic-bezier(.27,.9,.41,1.28) 1 both}.joinchat__badge.joinchat__badge--out{animation:joinchat_badge_out .4s cubic-bezier(.215,.61,.355,1) 1 both}.joinchat__tooltip{position:absolute;top:calc(var(--btn)/2 - 16px);right:calc(var(--btn) + 16px);max-width:calc(100vw - 105px);height:32px;padding:0 14px;border:none;border-radius:16px;background:#fff;color:rgb(0 0 0/80%);line-height:31px;white-space:nowrap;opacity:0;transition:opacity .3s ease-out .4s;filter:drop-shadow(0 1px 4px rgb(0 0 0 / 40%));pointer-events:none}.joinchat__tooltip:after{content:"";display:block;position:absolute;top:10px;right:-6px;border:8px solid transparent;border-width:6px 0 6px 8px;border-left-color:#fff}.joinchat__tooltip div{overflow:hidden;text-overflow:ellipsis}.joinchat--tooltip .joinchat__tooltip{animation:joinchat_tootlip 20s linear 5s 1 normal both}@media (hover:hover){.joinchat__button:hover .joinchat__tooltip{opacity:1;animation:none;transition:opacity .2s}}.joinchat--chatbox .joinchat__tooltip{display:none}.joinchat--left .joinchat__tooltip{right:auto;left:76px}.joinchat--left .joinchat__tooltip:after{left:-6px;right:auto;border-color:transparent;border-width:6px 8px 6px 0;border-right-color:#fff}.joinchat__box{display:flex;flex-direction:column;position:absolute;bottom:0;right:0;z-index:1;width:calc(100vw - var(--sep)*2);max-width:400px;min-height:170px;max-height:calc(var(--vh) - var(--bottom) - var(--sep));border-radius:calc(var(--btn)/2 + 2px);background:transparent;box-shadow:0 2px 6px 0 rgb(0 0 0/50%);text-align:left;overflow:hidden;transform:scale3d(0,0,0);opacity:0;transition:max-height .2s ease-out,opacity .4s ease-out,transform 0s linear .3s}[dir=rtl] .joinchat__box{text-align:right}.joinchat--chatbox .joinchat__box{opacity:1;transform:scaleX(1);transition:max-height .2s ease-out,opacity .2s ease-out,transform 0s linear}.joinchat--left .joinchat__box{right:auto;left:0}.joinchat__header{display:flex;flex-flow:row;align-items:center;position:relative;flex-shrink:0;height:var(--header);padding:0 70px 0 26px;margin:0;background:var(--color)}[dir=rtl] .joinchat__header{padding:0 26px 0 70px}.joinchat--dark .joinchat__header{background:var(--dark)}.joinchat__header__text{font-size:19px;font-weight:600;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.8}.joinchat__powered{font-size:11px;line-height:18px;color:inherit!important;text-decoration:none!important;fill:currentcolor;opacity:.8}.joinchat__powered svg{display:inline-block;width:auto;height:18px;vertical-align:-30%}.joinchat__powered:active,.joinchat__powered:hover{color:inherit!important;text-decoration:none!important;opacity:.9;filter:drop-shadow(0 1px 3px rgb(0 0 0 / 30%))}.joinchat__wa{height:28px;width:auto;fill:currentcolor;opacity:.8}.joinchat__close{position:absolute;top:50%;right:24px;width:34px;height:34px;margin-top:-16px;border-radius:50%;background:rgb(0 0 0/40%) url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M24 2.4 21.6 0 12 9.6 2.4 0 0 2.4 9.6 12 0 21.6 2.4 24l9.6-9.6 9.6 9.6 2.4-2.4-9.6-9.6L24 2.4z'/%3E%3C/svg%3E") 50% no-repeat;background-size:12px;cursor:pointer;transition:background-color .3s ease-out}.joinchat__close:hover{background-color:rgb(0 0 0/60%)}.joinchat__close:active{background-color:rgb(0 0 0/70%)}[dir=rtl] .joinchat__close{right:auto;left:24px}.joinchat__box__scroll{padding:20px 0 70px;padding-bottom:calc(var(--btn) + 10px);background:#fff linear-gradient(0deg,var(--bg),var(--bg));overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;will-change:scroll-position}.joinchat__box__scroll::-webkit-scrollbar{width:5px;background:rgb(0 0 0/0)}.joinchat__box__scroll::-webkit-scrollbar-thumb{border-radius:3px;background:rgb(0 0 0/0)}.joinchat--blur .joinchat__box__scroll{background:rgba(var(--rgb)/2%);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.joinchat--dark .joinchat__box__scroll{background:#1a1a1a}.joinchat__box__scroll:hover::-webkit-scrollbar-thumb{background:rgb(0 0 0/20%)}@supports (-webkit-overflow-scrolling:touch){.joinchat__box__scroll{overflow-y:scroll;-webkit-overflow-scrolling:touch}}@media (max-width:480px),(orientation:landscape) and (max-width:767px){.joinchat__header__text{font-size:17px}.joinchat__close{margin-top:-14px;width:28px;height:28px}.joinchat__box__scroll{padding-top:15px}}@media (color-index:48){.joinchat--dark-auto .joinchat__box__scroll{background:#1a1a1a}.joinchat--dark-auto .joinchat__header{background:var(--dark)}}@media (prefers-color-scheme:dark){.joinchat--dark-auto .joinchat__box__scroll{background:#1a1a1a}.joinchat--dark-auto .joinchat__header{background:var(--dark)}}.joinchat__message{position:relative;min-height:60px;padding:17px 20px;margin:0 26px 26px;border-radius:32px;background:#fff;color:#4a4a4a;word-break:break-word;filter:drop-shadow(0 1px 2px rgb(0 0 0 / 30%));transform:translateZ(0)}.joinchat__message:before{content:"";display:block;position:absolute;bottom:20px;left:-15px;width:17px;height:25px;background:inherit;-webkit-clip-path:url(#joinchat__message__peak);clip-path:url(#joinchat__message__peak);-webkit-clip-path:var(--peak,url(#joinchat__message__peak));clip-path:var(--peak,url(#joinchat__message__peak))}.joinchat--dark .joinchat__message{background:#505050;color:#d8d8d8}@media (color-index:48){.joinchat--dark-auto .joinchat__message{background:#505050;color:#d8d8d8}}@media (prefers-color-scheme:dark){.joinchat--dark-auto .joinchat__message{background:#505050;color:#d8d8d8}}@media (max-width:480px),(orientation:landscape) and (max-width:767px){.joinchat__message{padding:18px 16px;line-height:24px;margin:0 20px 20px}}@keyframes joinchat_badge_in{0%{opacity:0;transform:translateY(50px)}to{opacity:1;transform:translateY(0)}}@keyframes joinchat_badge_out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-20px)}}@keyframes joinchat_plain{0%,50%,to{stroke-dashoffset:1097}5%,45%{stroke-dashoffset:0}}@keyframes joinchat_chat{0%,50%,to{stroke-dashoffset:1020}5%,45%{stroke-dashoffset:0}}@keyframes joinchat_image_loop{0%{opacity:0}3%,20%{opacity:1}25%,to{opacity:0}}@keyframes joinchat_tootlip{0%{opacity:0;transform:scaleY(0)}1%,20%{opacity:1;transform:scaleY(1)}25%,to{opacity:0;transform:scaleY(1)}}
\ No newline at end of file
+:root{--joinchat-ico:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M3.516 3.516c4.686-4.686 12.284-4.686 16.97 0 4.686 4.686 4.686 12.283 0 16.97a12.004 12.004 0 0 1-13.754 2.299l-5.814.735a.392.392 0 0 1-.438-.44l.748-5.788A12.002 12.002 0 0 1 3.517 3.517zm3.61 17.043.3.158a9.846 9.846 0 0 0 11.534-1.758c3.843-3.843 3.843-10.074 0-13.918-3.843-3.843-10.075-3.843-13.918 0a9.846 9.846 0 0 0-1.747 11.554l.16.303-.51 3.942a.196.196 0 0 0 .219.22l3.961-.501zm6.534-7.003-.933 1.164a9.843 9.843 0 0 1-3.497-3.495l1.166-.933a.792.792 0 0 0 .23-.94L9.561 6.96a.793.793 0 0 0-.924-.445 1291.6 1291.6 0 0 0-2.023.524.797.797 0 0 0-.588.88 11.754 11.754 0 0 0 10.005 10.005.797.797 0 0 0 .88-.587l.525-2.023a.793.793 0 0 0-.445-.923L14.6 13.327a.792.792 0 0 0-.94.23z'/%3E%3C/svg%3E");--joinchat-font:-apple-system,blinkmacsystemfont,"Segoe UI",roboto,oxygen-sans,ubuntu,cantarell,"Helvetica Neue",sans-serif}.joinchat{--bottom:20px;--sep:20px;--s:var(--btn,60px);--header:calc(var(--s)*1.16667);--vh:100vh;--red:37;--green:211;--blue:102;--rgb:var(--red) var(--green) var(--blue);--color:rgb(var(--rgb));--dark:rgb(calc(var(--red) - 75) calc(var(--green) - 75) calc(var(--blue) - 75));--hover:rgb(calc(var(--red) + 50) calc(var(--green) + 50) calc(var(--blue) + 50));--bg:rgb(var(--rgb)/4%);--tolerance:210;--bw:calc((var(--red)*0.2126 + var(--green)*0.7152 + var(--blue)*0.0722 - var(--tolerance))*-10000000);--text:hsl(0deg 0% calc(var(--bw)*1%)/clamp(70%,calc(var(--bw)*1%),100%));--msg:var(--color);display:none;position:fixed;z-index:9999;right:var(--sep);bottom:var(--bottom);color:var(--text);font:normal normal normal 16px/1.625em var(--joinchat-font);letter-spacing:0;animation:joinchat_show .5s cubic-bezier(.18,.89,.32,1.28) 10ms both;-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:manipulation;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:rgb(0 0 0/0)}.joinchat *,.joinchat :after,.joinchat :before{box-sizing:border-box}.joinchat--show{display:block}.joinchat--left{right:auto;left:var(--sep)}.joinchat--dark{--msg:var(--dark)}.joinchat--noanim{animation:none}.joinchat--hidden{display:none!important}@supports not (width:clamp(1px,1%,10px)){.joinchat{--text:hsl(0deg 0% calc(var(--bw)*1%)/90%)}}.joinchat__button{display:flex;flex-direction:row;position:absolute;z-index:2;bottom:8px;right:8px;height:var(--s);min-width:var(--s);max-width:95vw;background:#25d366;color:inherit;border-radius:calc(var(--s)/2);box-shadow:1px 6px 24px 0 rgb(7 94 84/24%);cursor:pointer;transition:background .2s linear;will-change:background-color,width}[dir=rtl] .joinchat__button{flex-direction:row-reverse}.joinchat__button:hover{background:#128c7e;transition:background 1.5s linear}.joinchat__button:active{background:#128c7e;transition:none}.joinchat--left .joinchat__button{right:auto;left:8px;flex-direction:row-reverse}[dir=rtl] .joinchat--left .joinchat__button{flex-direction:row}.joinchat--chatbox .joinchat__button{background:var(--color);transition:background .2s linear;box-shadow:0 1px 2px 0 rgb(0 0 0/30%)}.joinchat--chatbox .joinchat__button:active,.joinchat--chatbox .joinchat__button:hover{background:var(--hover)}.joinchat--optout.joinchat--chatbox .joinchat__button{background-color:#999;opacity:.5;pointer-events:none}.joinchat--optout.joinchat--chatbox .joinchat__button .joinchat_svg__plain{stroke-dasharray:0;animation:none}.joinchat--optout.joinchat--chatbox .joinchat__button .joinchat_svg__chat{animation:none}.joinchat__button__open{width:var(--s);height:var(--s);border-radius:50%;background:rgb(0 0 0/0) var(--joinchat-ico) 50% no-repeat;background-size:60%;overflow:hidden}.joinchat--chatbox .joinchat__button__open{display:none}.joinchat__button__image{position:absolute;top:1px;right:1px;width:calc(var(--s) - 2px);height:calc(var(--s) - 2px);border-radius:50%;overflow:hidden;opacity:0}.joinchat__button__image img{display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.joinchat--show .joinchat__button__image{animation:joinchat_image_loop 20s linear 5s infinite normal both}.joinchat--image .joinchat__button__image{opacity:1;animation:none}.joinchat--chatbox .joinchat__button__image{display:none}.joinchat__button__send{display:none;flex-shrink:0;width:var(--s);height:var(--s);max-width:var(--s);padding:calc(var(--s)*0.18);margin:0;overflow:hidden}.joinchat--chatbox .joinchat__button__send{display:block}.joinchat__button__send path{fill:none!important;stroke:var(--text)!important}.joinchat__button__send .joinchat_svg__plain{stroke-dasharray:1097;stroke-dashoffset:1097;animation:joinchat_plain 6s .2s ease-in-out infinite}.joinchat__button__send .joinchat_svg__chat{stroke-dasharray:1020;stroke-dashoffset:1020;animation:joinchat_chat 6s 3.2s ease-in-out infinite}.joinchat__button__sendtext{padding:0;max-width:0;border-radius:var(--s);font-weight:600;line-height:var(--s);white-space:nowrap;opacity:0;overflow:hidden;transition:none}.joinchat--chatbox .joinchat__button__sendtext{padding:0 4px 0 24px;max-width:200px;opacity:1;transition:max-width .2s linear,opacity .4s ease-out .2s}.joinchat--chatbox.joinchat--left .joinchat__button__sendtext{padding:0 24px 0 4px}.joinchat__badge{position:absolute;top:-4px;right:-4px;width:20px;height:20px;border:none;border-radius:50%;background:#e82c0c;color:#fff;font-size:12px;font-weight:600;line-height:20px;text-align:center;box-shadow:none;opacity:0;pointer-events:none}.joinchat__badge.joinchat__badge--in{animation:joinchat_badge_in .5s cubic-bezier(.27,.9,.41,1.28) 1 both}.joinchat__badge.joinchat__badge--out{animation:joinchat_badge_out .4s cubic-bezier(.215,.61,.355,1) 1 both}.joinchat__tooltip{position:absolute;top:calc(var(--s)/2 - 16px);right:calc(var(--s) + 16px);max-width:calc(100vw - 105px);height:32px;padding:0 14px;border:none;border-radius:16px;background:#fff;color:rgb(0 0 0/80%);line-height:31px;white-space:nowrap;opacity:0;transition:opacity .3s ease-out .4s;filter:drop-shadow(0 1px 4px rgb(0 0 0 / 40%));pointer-events:none}.joinchat__tooltip:after{content:"";display:block;position:absolute;top:10px;right:-6px;border:8px solid transparent;border-width:6px 0 6px 8px;border-left-color:#fff}.joinchat__tooltip div{overflow:hidden;text-overflow:ellipsis}.joinchat--tooltip .joinchat__tooltip{animation:joinchat_tootlip 20s linear 5s 1 normal both}.joinchat--chatbox .joinchat__tooltip{display:none}.joinchat--left .joinchat__tooltip{right:auto;left:calc(var(--s) + 16px)}.joinchat--left .joinchat__tooltip:after{left:-6px;right:auto;border-color:transparent;border-width:6px 8px 6px 0;border-right-color:#fff}.joinchat__qr{position:absolute;bottom:calc(var(--s) + 16px);right:0;display:none;flex-direction:column-reverse;width:228px;min-height:200px;padding:14px 14px 10px;border:none;border-radius:16px;background:#fff;color:rgb(0 0 0/80%);text-align:center;white-space:nowrap;opacity:1;transition:opacity .3s ease-out .4s;filter:drop-shadow(0 1px 4px rgb(0 0 0 / 40%));animation:joinchat_badge_in .4s cubic-bezier(.11,.84,.83,1.01) 1s both;pointer-events:none}.joinchat__qr:after{content:"";display:block;position:absolute;bottom:-6px;right:calc(var(--s)/2 - 6px);border:8px solid transparent;border-width:8px 6px 0;border-top-color:#fff}.joinchat--left .joinchat__qr{left:0;right:auto}.joinchat--left .joinchat__qr:after{left:calc(var(--s)/2 - 6px);right:auto}.joinchat__qr div{font-size:14px;color:#4a4a4a;overflow:hidden;text-overflow:ellipsis}.joinchat__qr canvas{display:block;width:200px;height:200px;margin:0}.joinchat__box{display:flex;flex-direction:column;position:absolute;bottom:0;right:0;z-index:1;width:calc(100vw - var(--sep)*2);max-width:400px;min-height:170px;max-height:calc(var(--vh) - var(--bottom) - var(--sep));border-radius:calc(var(--s)/2 + 2px);background:transparent;box-shadow:0 2px 6px 0 rgb(0 0 0/50%);text-align:left;overflow:hidden;transform:scale3d(0,0,0);opacity:0;transition:max-height .2s ease-out,opacity .4s ease-out,transform 0s linear .3s}[dir=rtl] .joinchat__box{text-align:right}.joinchat--chatbox .joinchat__box{opacity:1;transform:scaleX(1);transition:max-height .2s ease-out,opacity .2s ease-out,transform 0s linear}.joinchat--left .joinchat__box{right:auto;left:0}.joinchat__header{display:flex;flex-flow:row;align-items:center;position:relative;flex-shrink:0;height:var(--header);min-height:50px;padding:0 70px 0 26px;margin:0;background:var(--color)}[dir=rtl] .joinchat__header{padding:0 26px 0 70px}.joinchat--dark .joinchat__header{background:var(--dark)}.joinchat__header__text{font-size:19px;font-weight:600;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.8}.joinchat__powered{font-size:11px;line-height:18px;color:inherit!important;text-decoration:none!important;fill:currentcolor;opacity:.8}.joinchat__powered svg{display:inline-block;width:auto;height:18px;vertical-align:-30%}.joinchat__powered:active,.joinchat__powered:hover{color:inherit!important;text-decoration:none!important;opacity:.9;filter:drop-shadow(0 1px 3px rgb(0 0 0 / 30%))}.joinchat__wa{height:28px;width:auto;fill:currentcolor;opacity:.8}.joinchat__close{--size:34px;position:absolute;top:calc(50% - var(--size)/2);right:24px;width:var(--size);height:var(--size);border-radius:50%;background:rgb(0 0 0/40%) url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M24 2.4 21.6 0 12 9.6 2.4 0 0 2.4 9.6 12 0 21.6 2.4 24l9.6-9.6 9.6 9.6 2.4-2.4-9.6-9.6L24 2.4z'/%3E%3C/svg%3E") 50% no-repeat;background-size:12px;cursor:pointer;transition:background-color .3s ease-out}.joinchat__close:hover{background-color:rgb(0 0 0/60%)}.joinchat__close:active{background-color:rgb(0 0 0/70%)}[dir=rtl] .joinchat__close{right:auto;left:24px}.joinchat__box__scroll{padding:20px 0 70px;padding-bottom:calc(var(--s) + 10px);background:#fff linear-gradient(0deg,var(--bg),var(--bg));overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;will-change:scroll-position}.joinchat__box__scroll::-webkit-scrollbar{width:5px;background:rgb(0 0 0/0)}.joinchat__box__scroll::-webkit-scrollbar-thumb{border-radius:3px;background:rgb(0 0 0/0)}.joinchat--blur .joinchat__box__scroll{background:rgba(var(--rgb)/2%);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.joinchat--dark .joinchat__box__scroll{background:#1a1a1a}.joinchat__box__scroll:hover::-webkit-scrollbar-thumb{background:rgb(0 0 0/20%)}@supports (-webkit-overflow-scrolling:touch){.joinchat__box__scroll{overflow-y:scroll;-webkit-overflow-scrolling:touch}}.joinchat__optin{padding:0 16px;margin-bottom:16px;color:#4a4a4a;font-size:13px;line-height:1.33}.joinchat__optin a{display:inline;padding:0;color:inherit!important;text-decoration:underline}.joinchat__optin a:hover{text-decoration-thickness:2px}.joinchat__optin input{position:absolute;visibility:hidden}.joinchat__optin label{position:relative;display:block;margin:0;padding:0 0 0 30px;color:inherit;font:inherit;cursor:pointer}.joinchat__optin label:before{content:"";display:block;position:absolute;top:calc(50% - 11px);left:0;width:22px;height:22px;border:3px solid var(--color);border-radius:4px;box-shadow:0 0 0 1px var(--text);transition:box-shadow .3s ease-in-out}.joinchat__optin label:after{content:"";display:none;position:absolute;top:calc(50% - 8px);left:8px;width:6px;height:14px;border:solid var(--text);border-width:0 3px 3px 0;transform:rotate(45deg)}[dir=rtl] .joinchat__optin label{padding:0 30px 0 0}[dir=rtl] .joinchat__optin label:before{left:auto;right:0}[dir=rtl] .joinchat__optin label:after{left:auto;right:8px}.joinchat__optin input:checked+label:before{box-shadow:0 0 0 1px var(--text),inset 0 0 0 10px var(--color)}.joinchat__optin input:checked+label:after{display:block}.joinchat--dark .joinchat__optin{color:#d8d8d8}.joinchat__message{position:relative;min-height:60px;padding:17px 20px;margin:0 26px 26px;border-radius:32px;background:#fff;color:#4a4a4a;word-break:break-word;filter:drop-shadow(0 1px 2px rgb(0 0 0 / 30%));transform:translateZ(0)}.joinchat__message:before{content:"";display:block;position:absolute;bottom:20px;left:-15px;width:17px;height:25px;background:inherit;-webkit-clip-path:var(--peak,url(#joinchat__message__peak));clip-path:var(--peak,url(#joinchat__message__peak))}.joinchat--dark .joinchat__message{background:#505050;color:#d8d8d8}@keyframes joinchat_show{0%{transform:scale(0)}}@keyframes joinchat_badge_in{0%{opacity:0;transform:translateY(50px)}}@keyframes joinchat_badge_out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-20px)}}@keyframes joinchat_plain{0%,50%,to{stroke-dashoffset:1097}5%,45%{stroke-dashoffset:0}}@keyframes joinchat_chat{0%,50%,to{stroke-dashoffset:1020}5%,45%{stroke-dashoffset:0}}@keyframes joinchat_image_loop{0%{opacity:0}3%,20%{opacity:1}25%,to{opacity:0}}@keyframes joinchat_tootlip{0%{opacity:0;transform:scaleY(0)}1%,20%{opacity:1;transform:scaleY(1)}25%,to{opacity:0;transform:scaleY(1)}}.joinchat__woo-btn__wrapper{clear:both}.joinchat__woo-btn{--s:40px;display:inline-block;box-sizing:border-box;height:var(--s);max-width:100%;padding:0 calc(var(--s)/2) 0 var(--s);background:#25d366 var(--joinchat-ico) calc(var(--s)*0.2) 50% no-repeat;background-size:calc(var(--s)*0.6);color:#fff;border-radius:calc(var(--s)/2);font:700 normal calc(var(--s)*0.35)/var(--s) var(--joinchat-font);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;cursor:pointer;transition:background-color .2s}.joinchat__woo-btn:hover{background-color:#128c7e}@media (orientation:landscape) and (min-height:481px),(orientation:portrait) and (min-width:481px){.joinchat--mobile{display:none!important}}@media (max-width:767px){.joinchat--footer-bar{--bottom:76px!important}}@media (max-width:480px),(orientation:landscape) and (max-height:480px){.joinchat{--bottom:6px;--sep:6px;--header:calc(var(--s)*0.91667)}.joinchat__header__text{font-size:17px}.joinchat__close{--size:28px}.joinchat__box__scroll{padding-top:15px}.joinchat__message{padding:18px 16px;line-height:24px;margin:0 20px 20px}}@media (hover:hover){.joinchat__button:hover .joinchat__tooltip{opacity:1;animation:none;transition:opacity .2s}.joinchat--btn .joinchat__button:hover .joinchat__qr,.joinchat--chatbox .joinchat__button:hover .joinchat__qr{display:flex}}@media (prefers-color-scheme:dark){.joinchat--dark-auto{--msg:var(--dark)}.joinchat--dark-auto .joinchat__box__scroll{background:#1a1a1a}.joinchat--dark-auto .joinchat__header{background:var(--dark)}.joinchat--dark-auto .joinchat__optin{color:#d8d8d8}.joinchat--dark-auto .joinchat__message{background:#505050;color:#d8d8d8}}@media (prefers-reduced-motion){.joinchat{animation:none}.joinchat__button__send .joinchat_svg__plain{stroke-dasharray:0;animation:none}.joinchat__button__send .joinchat_svg__chat{animation:none}.joinchat__button__sendtext{transition:none!important}}
\ No newline at end of file
diff --git a/public/css/woo.css b/public/css/woo.css
new file mode 100644
index 0000000..e565440
--- /dev/null
+++ b/public/css/woo.css
@@ -0,0 +1,32 @@
+:root {
+ --joinchat-ico: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M3.516 3.516c4.686-4.686 12.284-4.686 16.97 0 4.686 4.686 4.686 12.283 0 16.97a12.004 12.004 0 0 1-13.754 2.299l-5.814.735a.392.392 0 0 1-.438-.44l.748-5.788A12.002 12.002 0 0 1 3.517 3.517zm3.61 17.043.3.158a9.846 9.846 0 0 0 11.534-1.758c3.843-3.843 3.843-10.074 0-13.918-3.843-3.843-10.075-3.843-13.918 0a9.846 9.846 0 0 0-1.747 11.554l.16.303-.51 3.942a.196.196 0 0 0 .219.22l3.961-.501zm6.534-7.003-.933 1.164a9.843 9.843 0 0 1-3.497-3.495l1.166-.933a.792.792 0 0 0 .23-.94L9.561 6.96a.793.793 0 0 0-.924-.445 1291.6 1291.6 0 0 0-2.023.524.797.797 0 0 0-.588.88 11.754 11.754 0 0 0 10.005 10.005.797.797 0 0 0 .88-.587l.525-2.023a.793.793 0 0 0-.445-.923L14.6 13.327a.792.792 0 0 0-.94.23z'/%3E%3C/svg%3E");
+ --joinchat-font: -apple-system, blinkmacsystemfont, "Segoe UI", roboto, oxygen-sans, ubuntu, cantarell, "Helvetica Neue", sans-serif;
+}
+
+.joinchat__woo-btn__wrapper {
+ clear: both;
+}
+
+.joinchat__woo-btn {
+ --s: 40px;
+
+ display: inline-block;
+ box-sizing: border-box;
+ height: var(--s);
+ max-width: 100%;
+ padding: 0 calc(var(--s)/2) 0 var(--s);
+ background: #25d366 var(--joinchat-ico) calc(var(--s)*0.2) 50% no-repeat;
+ background-size: calc(var(--s)*0.6);
+ color: #fff;
+ border-radius: calc(var(--s)/2);
+ font: 700 normal calc(var(--s)*0.35)/var(--s) var(--joinchat-font);
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ cursor: pointer;
+ transition: background-color 200ms;
+}
+
+.joinchat__woo-btn:hover {
+ background-color: #128c7e;
+}
diff --git a/public/css/woo.min.css b/public/css/woo.min.css
new file mode 100644
index 0000000..a34e2dc
--- /dev/null
+++ b/public/css/woo.min.css
@@ -0,0 +1 @@
+:root{--joinchat-ico:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M3.516 3.516c4.686-4.686 12.284-4.686 16.97 0 4.686 4.686 4.686 12.283 0 16.97a12.004 12.004 0 0 1-13.754 2.299l-5.814.735a.392.392 0 0 1-.438-.44l.748-5.788A12.002 12.002 0 0 1 3.517 3.517zm3.61 17.043.3.158a9.846 9.846 0 0 0 11.534-1.758c3.843-3.843 3.843-10.074 0-13.918-3.843-3.843-10.075-3.843-13.918 0a9.846 9.846 0 0 0-1.747 11.554l.16.303-.51 3.942a.196.196 0 0 0 .219.22l3.961-.501zm6.534-7.003-.933 1.164a9.843 9.843 0 0 1-3.497-3.495l1.166-.933a.792.792 0 0 0 .23-.94L9.561 6.96a.793.793 0 0 0-.924-.445 1291.6 1291.6 0 0 0-2.023.524.797.797 0 0 0-.588.88 11.754 11.754 0 0 0 10.005 10.005.797.797 0 0 0 .88-.587l.525-2.023a.793.793 0 0 0-.445-.923L14.6 13.327a.792.792 0 0 0-.94.23z'/%3E%3C/svg%3E");--joinchat-font:-apple-system,blinkmacsystemfont,"Segoe UI",roboto,oxygen-sans,ubuntu,cantarell,"Helvetica Neue",sans-serif}.joinchat__woo-btn__wrapper{clear:both}.joinchat__woo-btn{--s:40px;display:inline-block;box-sizing:border-box;height:var(--s);max-width:100%;padding:0 calc(var(--s)/2) 0 var(--s);background:#25d366 var(--joinchat-ico) calc(var(--s)*0.2) 50% no-repeat;background-size:calc(var(--s)*0.6);color:#fff;border-radius:calc(var(--s)/2);font:700 normal calc(var(--s)*0.35)/var(--s) var(--joinchat-font);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;cursor:pointer;transition:background-color .2s}.joinchat__woo-btn:hover{background-color:#128c7e}
\ No newline at end of file
diff --git a/public/js/joinchat.js b/public/js/joinchat.js
index ff6412b..dea9352 100644
--- a/public/js/joinchat.js
+++ b/public/js/joinchat.js
@@ -17,9 +17,22 @@
};
// Trigger Analytics events
- joinchat_obj.send_event = function (label, action) {
- label = label || '';
- action = action || 'click';
+ joinchat_obj.send_event = function (params) {
+ params = $.extend({
+ event_label: '', // Destination url
+ event_action: '', // "chanel: id"
+ chat_channel: 'WhatsApp', // Channel name
+ chat_id: '--', // Channel contact (phone, username...)
+ is_mobile: this.is_mobile ? 'yes' : 'no',
+ page_location: location.href,
+ page_title: document.title || 'no title',
+ }, params);
+ params.event_label = params.event_label || params.link || '';
+ params.event_action = params.event_action || params.chat_channel + ': ' + params.chat_id;
+ delete params.link;
+
+ // Trigger event (params can be edited by third party scripts or cancel if return false)
+ if (false === $(doc).triggerHandler('joinchat:event', [params])) return;
// Can pass setting 'ga_tracker' for custom UA tracker name
// Compatible with GADP for WordPress by MonsterInsights tracker name
@@ -32,45 +45,55 @@
ga_tracker('set', 'transport', 'beacon');
var trackers = ga_tracker.getAll();
trackers.forEach(function (tracker) {
- tracker.send('event', 'JoinChat', action, label);
+ tracker.send('event', 'JoinChat', params.event_action, params.event_label);
});
}
- // Send Google Analytics custom event (Google Analytics 4 - gtag.js)
+ // GA4 param max_length of 100 chars (https://support.google.com/analytics/answer/9267744)
+ $.each(params, function (k, v) { params[k] = typeof v == 'string' ? v.substring(0, 100) : v; });
+
+ // gtag.js
if (typeof gtag == 'function' && typeof data_layer == 'object') {
+ // Google Analytics 4 send recomended event "generate_lead"
+ var ga4_params = $.extend({
+ event_category: 'JoinChat',
+ transport_type: 'beacon',
+ }, params);
+ // Already defined in GA4
+ delete ga4_params.page_location;
+ delete ga4_params.page_title;
+
data_layer.forEach(function (item) {
if (item[0] == 'config' && item[1].substring(0, 2) == 'G-') {
- gtag('event', action, {
- 'event_category': 'JoinChat',
- 'event_label': label,
- 'send_to': item[1],
- 'transport_type': 'beacon',
- });
+ ga4_params.send_to = item[1];
+ gtag('event', 'generate_lead', ga4_params);
}
});
+
+ // Send Google Ads conversion
+ if (this.settings.gads) {
+ gtag('event', 'conversion', { send_to: this.settings.gads });
+ }
}
// Send Google Tag Manager custom event
if (typeof data_layer == 'object') {
- data_layer.push({
- 'event': 'JoinChat',
- 'eventAction': action,
- 'eventLabel': label,
- });
+ data_layer.push($.extend({ event: 'JoinChat' }, params));
}
// Send Facebook Pixel custom event
if (typeof fbq == 'function') {
- fbq('trackCustom', 'JoinChat', { eventAction: action, eventLabel: label });
+ fbq('trackCustom', 'JoinChat', params);
}
};
// Return WhatsApp link with optional message
joinchat_obj.whatsapp_link = function (phone, message, wa_web) {
+ message = typeof message != 'undefined' ? message : this.settings.message_send || '';
wa_web = typeof wa_web != 'undefined' ? wa_web : this.settings.whatsapp_web && !this.is_mobile;
- var link = wa_web ? 'https://web.whatsapp.com/send' : 'https://api.whatsapp.com/send';
+ var link = (wa_web ? 'https://web.whatsapp.com/send?phone=' : 'https://wa.me/') + encodeURIComponent(phone || this.settings.telephone);
- return link + '?phone=' + encodeURIComponent(phone) + '&text=' + encodeURIComponent(message || '');
+ return link + (message ? (wa_web ? '&text=' : '?text=') + encodeURIComponent(message) : '');
};
joinchat_obj.chatbox_show = function () {
@@ -110,19 +133,27 @@
}
};
- joinchat_obj.open_whatsapp = function (phone, msg) {
- var args = { link: this.whatsapp_link(phone || this.settings.telephone, msg || this.settings.message_send) };
+ joinchat_obj.open_whatsapp = function (phone, message) {
+ phone = phone || this.settings.telephone;
+ message = typeof message != 'undefined' ? message : this.settings.message_send || '';
+
+ var params = {
+ link: this.whatsapp_link(phone, message),
+ chat_channel: 'WhatsApp',
+ chat_id: phone,
+ chat_message: message,
+ };
var secure_link = new RegExp("^https?:\/\/(wa\.me|(api|web|chat)\.whatsapp\.com|" + location.hostname.replace('.', '\.') + ")\/.*", 'i');
- // Trigger custom event (args obj allow edit link by third party scripts)
- $(doc).trigger('joinchat:open', [args, this.settings]);
+ // Trigger event (params can be edited by third party scripts or cancel if return false)
+ if (false === $(doc).triggerHandler('joinchat:open', [params])) return;
// Ensure the link is safe
- if (secure_link.test(args.link)) {
+ if (secure_link.test(params.link)) {
// Send analytics events
- this.send_event(args.link);
+ this.send_event(params);
// Open WhatsApp link
- win.open(args.link, 'joinchat', 'noopener');
+ win.open(params.link, 'joinchat', 'noopener');
} else {
console.error("Join.chat: the link doesn't seem safe, it must point to the current domain or whatsapp.com");
}
@@ -187,6 +218,11 @@
joinchat_obj.$('.joinchat__button').on('click', joinchat_click);
joinchat_obj.$('.joinchat__close').on('click', save_and_hide);
+ // Opt-in toggle
+ joinchat_obj.$('#joinchat_optin').on('change', function () {
+ joinchat_obj.$div.toggleClass('joinchat--optout', !this.checked);
+ });
+
// Only scroll Join.chat message box (no all body)
// TODO: disable also on touch
joinchat_obj.$('.joinchat__box__scroll').on('mousewheel DOMMouseScroll', function (e) {
@@ -263,6 +299,17 @@
}
}
+ // Add QR Code
+ if (joinchat_obj.settings.qr && !joinchat_obj.is_mobile && typeof kjua == 'function') {
+ joinchat_obj.$('.joinchat__qr').kjua({
+ text: joinchat_obj.whatsapp_link(undefined, undefined, false),
+ render: 'canvas',
+ rounded: 80,
+ });
+ } else {
+ joinchat_obj.$('.joinchat__qr').remove();
+ }
+
// Fix message clip-path style broken by some CSS optimizers
if (has_chatbox) {
joinchat_obj.$div.css('--peak', 'ur' + 'l(#joinchat__message__peak)');
@@ -317,6 +364,8 @@
if (joinchat_obj.is_mobile || !joinchat_obj.settings.mobile_only) {
joinchat_magic();
} else {
+ // Ensure don't show
+ joinchat_obj.$div.removeClass('joinchat--show');
// Launch WhatsApp when click on nodes with classes "joinchat_open" "joinchat_app" or links with href
$(doc).on('click', '.joinchat_open, .joinchat_app, a[href="#joinchat"], a[href="#whatsapp"]', function (e) {
e.preventDefault();
diff --git a/public/js/joinchat.min.js b/public/js/joinchat.min.js
index 9c3ebae..2a6d68c 100644
--- a/public/js/joinchat.min.js
+++ b/public/js/joinchat.min.js
@@ -1 +1 @@
-!function(p,d,u){"use strict";function t(){p(u).trigger("joinchat:starting");var t,o,e=1e3*joinchat_obj.settings.button_delay,n=1e3*joinchat_obj.settings.message_delay,i=!!joinchat_obj.settings.message_hash,a=!!joinchat_obj.$(".joinchat__box").length,s=parseInt(joinchat_obj.store.getItem("joinchat_views")||1)>=joinchat_obj.settings.message_views,h=-1!==(joinchat_obj.store.getItem("joinchat_hashes")||"").split(",").filter(Boolean).indexOf(joinchat_obj.settings.message_hash||"none");function c(){clearTimeout(o),joinchat_obj.chatbox_show()}function j(){joinchat_obj.save_hash(),joinchat_obj.chatbox_hide()}var _,r,b,l="joinchat--show";function g(){var t=(u.activeElement.type||"").toLowerCase();0<=["date","datetime","email","month","number","password","search","tel","text","textarea","time","url","week"].indexOf(t)?joinchat_obj.chatbox?(joinchat_obj.chatbox_hide(),setTimeout(function(){joinchat_obj.$div.removeClass("joinchat--show")},400)):joinchat_obj.$div.removeClass("joinchat--show"):joinchat_obj.$div.addClass("joinchat--show")}h||i&&n&&!joinchat_obj.settings.message_badge&&s||(l+=" joinchat--tooltip"),setTimeout(function(){joinchat_obj.$div.addClass(l)},e),i&&!h&&n&&(joinchat_obj.settings.message_badge?o=setTimeout(function(){joinchat_obj.$(".joinchat__badge").addClass("joinchat__badge--in")},e+n):s&&(o=setTimeout(c,e+n))),a&&!joinchat_obj.is_mobile&&joinchat_obj.$(".joinchat__button").on("mouseenter",function(){t=setTimeout(c,1500)}).on("mouseleave",function(){clearTimeout(t)}),joinchat_obj.$(".joinchat__button").on("click",function(){a&&!joinchat_obj.chatbox?c():Date.now()>joinchat_obj.showed_at+600&&(j(),joinchat_obj.open_whatsapp())}),joinchat_obj.$(".joinchat__close").on("click",j),joinchat_obj.$(".joinchat__box__scroll").on("mousewheel DOMMouseScroll",function(t){t.preventDefault();t=t.originalEvent.wheelDelta||-t.originalEvent.detail;this.scrollTop+=30*(t<0?1:-1)}),joinchat_obj.is_mobile&&(p(u).on("focus blur","input, textarea",function(t){p(t.target).closest(joinchat_obj.$div).length||(clearTimeout(_),_=setTimeout(g,200))}),p(d).on("resize",function(){clearTimeout(r),r=setTimeout(function(){joinchat_obj.$div[0].style.setProperty("--vh",window.innerHeight+"px")},200)}).trigger("resize")),p(u).on("click",'.joinchat_open, .joinchat_app, a[href="#joinchat"], a[href="#whatsapp"]',function(t){t.preventDefault(),!a||p(this).is('.joinchat_app, a[href="#whatsapp"]')?joinchat_obj.open_whatsapp():c()}),p(u).on("click",".joinchat_close",function(t){t.preventDefault(),joinchat_obj.chatbox_hide()}),a&&"IntersectionObserver"in d&&(0<(n=p(".joinchat_show, .joinchat_force_show")).length&&(b=new IntersectionObserver(function(t){p.each(t,function(){if(0=joinchat_obj.settings.message_views,h=-1!==(joinchat_obj.store.getItem("joinchat_hashes")||"").split(",").filter(Boolean).indexOf(joinchat_obj.settings.message_hash||"none");function c(){clearTimeout(o),joinchat_obj.chatbox_show()}function j(){joinchat_obj.save_hash(),joinchat_obj.chatbox_hide()}var _,r,l,b="joinchat--show";function g(){var t=(u.activeElement.type||"").toLowerCase();0<=["date","datetime","email","month","number","password","search","tel","text","textarea","time","url","week"].indexOf(t)?joinchat_obj.chatbox?(joinchat_obj.chatbox_hide(),setTimeout(function(){joinchat_obj.$div.removeClass("joinchat--show")},400)):joinchat_obj.$div.removeClass("joinchat--show"):joinchat_obj.$div.addClass("joinchat--show")}h||i&&n&&!joinchat_obj.settings.message_badge&&s||(b+=" joinchat--tooltip"),setTimeout(function(){joinchat_obj.$div.addClass(b)},e),i&&!h&&n&&(joinchat_obj.settings.message_badge?o=setTimeout(function(){joinchat_obj.$(".joinchat__badge").addClass("joinchat__badge--in")},e+n):s&&(o=setTimeout(c,e+n))),a&&!joinchat_obj.is_mobile&&joinchat_obj.$(".joinchat__button").on("mouseenter",function(){t=setTimeout(c,1500)}).on("mouseleave",function(){clearTimeout(t)}),joinchat_obj.$(".joinchat__button").on("click",function(){a&&!joinchat_obj.chatbox?c():Date.now()>joinchat_obj.showed_at+600&&(j(),joinchat_obj.open_whatsapp())}),joinchat_obj.$(".joinchat__close").on("click",j),joinchat_obj.$("#joinchat_optin").on("change",function(){joinchat_obj.$div.toggleClass("joinchat--optout",!this.checked)}),joinchat_obj.$(".joinchat__box__scroll").on("mousewheel DOMMouseScroll",function(t){t.preventDefault();t=t.originalEvent.wheelDelta||-t.originalEvent.detail;this.scrollTop+=30*(t<0?1:-1)}),joinchat_obj.is_mobile&&(d(u).on("focus blur","input, textarea",function(t){d(t.target).closest(joinchat_obj.$div).length||(clearTimeout(_),_=setTimeout(g,200))}),d(p).on("resize",function(){clearTimeout(r),r=setTimeout(function(){joinchat_obj.$div[0].style.setProperty("--vh",window.innerHeight+"px")},200)}).trigger("resize")),d(u).on("click",'.joinchat_open, .joinchat_app, a[href="#joinchat"], a[href="#whatsapp"]',function(t){t.preventDefault(),!a||d(this).is('.joinchat_app, a[href="#whatsapp"]')?joinchat_obj.open_whatsapp():c()}),d(u).on("click",".joinchat_close",function(t){t.preventDefault(),joinchat_obj.chatbox_hide()}),a&&"IntersectionObserver"in p&&(0<(n=d(".joinchat_show, .joinchat_force_show")).length&&(l=new IntersectionObserver(function(t){d.each(t,function(){if(0>e&1);l[Math.floor(e/3)][e%3+s-8-3]=n}for(e=0;e<18;e+=1){n=!t&&1==(r>>e&1);l[e%3+s-8-3][Math.floor(e/3)]=n}},d=function(t,r){for(var e=f<<3|r,n=m.getBCHTypeInfo(e),o=0;o<15;o+=1){var i=!t&&1==(n>>o&1);o<6?l[o][8]=i:o<8?l[o+1][8]=i:l[s-15+o][8]=i}for(o=0;o<15;o+=1){i=!t&&1==(n>>o&1);o<8?l[8][s-o-1]=i:o<9?l[8][15-o-1+1]=i:l[8][15-o-1]=i}l[s-8][8]=!t},v=function(t,r){for(var e=-1,n=s-1,o=7,i=0,a=m.getMaskFunction(r),u=s-1;0>>o&1)),a(n,u-c)&&(f=!f),l[n][u-c]=f,-1==--o&&(i+=1,o=7))}if((n+=e)<0||s<=n){n-=e,e=-e;break}}},p=function(t,r,e){for(var n=S.getRSBlocks(t,r),o=M(),i=0;i8*u)throw"code length overflow. ("+o.getLengthInBits()+">"+8*u+")";for(o.getLengthInBits()+4<=8*u&&o.put(0,4);o.getLengthInBits()%8!=0;)o.putBit(!1);for(;!(o.getLengthInBits()>=8*u||(o.put(236,8),o.getLengthInBits()>=8*u));)o.put(17,8);return function(t,r){for(var e=0,n=0,o=0,i=new Array(r.length),a=new Array(r.length),u=0;u',e+="";for(var n=0;n";for(var o=0;o ';e+=""}return e+=" ",e+=""},h.createSvgTag=function(t,r,e,n){var o={};"object"==typeof arguments[0]&&(t=(o=arguments[0]).cellSize,r=o.margin,e=o.alt,n=o.title),t=t||2,r=void 0===r?4*t:r,(e="string"==typeof e?{text:e}:e||{}).text=e.text||null,e.id=e.text?e.id||"qrcode-description":null,(n="string"==typeof n?{text:n}:n||{}).text=n.text||null,n.id=n.text?n.id||"qrcode-title":null;var i,a,u,f=h.getModuleCount()*t+2*r,c="",l="l"+t+",0 0,"+t+" -"+t+",0 0,-"+t+"z ";for(c+='",c+=n.text?''+y(n.text)+" ":"",c+=e.text?''+y(e.text)+" ":"",c+=' ',c+=' ',c+=" "},h.createDataURL=function(o,t){o=o||2,t=void 0===t?4*o:t;var r=h.getModuleCount()*o+2*t,i=t,a=r-t;return P(r,r,function(t,r){if(i<=t&&t "};var y=function(t){for(var r="",e=0;e":r+=">";break;case"&":r+="&";break;case'"':r+=""";break;default:r+=n}}return r};return h.createASCII=function(t,r){if((t=t||1)<2)return function(t){t=void 0===t?2:t;for(var r,e,n,o,i=+h.getModuleCount()+2*t,a=t,u=i-t,f={"ββ":"β","β ":"β"," β":"β"," ":" "},c={"ββ":"β","β ":"β"," β":" "," ":" "},l="",s=0;s>>8),r.push(255&n)):r.push(a)}return r}};var r,t,a=1,u=2,o=4,f=8,w={L:1,M:0,Q:3,H:2},e=0,n=1,c=2,l=3,s=4,g=5,h=6,d=7,m=(r=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],(t={}).getBCHTypeInfo=function(t){for(var r=t<<10;0<=v(r)-v(1335);)r^=1335<>>=1;return r}var p=function(){for(var r=new Array(256),e=new Array(256),t=0;t<8;t+=1)r[t]=1<>>8)},writeBytes:function(t,r,e){r=r||0,e=e||t.length;for(var n=0;n>>o-6),o-=6},t.flush=function(){if(0>>r!=0)throw"length over";for(;8<=u+r;)a.writeByte(255&(t<>>=8-u,u=f=0;f|=t<>>7-t%8&1)},put:function(t,r){for(var e=0;e>>r-e-1&1))},getLengthInBits:function(){return n},putBit:function(t){var r=Math.floor(n/8);e.length<=r&&e.push(0),t&&(e[r]|=128>>>n%8),n+=1}};return o},A=function(t){var r=a,n=t,e={getMode:function(){return r},getLength:function(t){return n.length},write:function(t){for(var r=n,e=0;e+2>>8&255)+(255&n),t.put(n,13),e+=2}if(e=e.length){if(0==i)return-1;throw"unexpected end of file./"+i}var t=e.charAt(n);if(n+=1,"="==t)return i=0,-1;t.match(/^\s$/)||(o=o<<6|a(t.charCodeAt(0)),i+=6)}var r=o>>>i-8&255;return i-=8,r}},a=function(t){if(65<=t&&t<=90)return t-65;if(97<=t&&t<=122)return t-97+26;if(48<=t&&t<=57)return t-48+52;if(43==t)return 62;if(47==t)return 63;throw"c:"+t};return r},P=function(t,r,e){for(var n=k(t,r),o=0;o>6,128|63&n):n<55296||57344<=n?r.push(224|n>>12,128|n>>6&63,128|63&n):(e++,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),r.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return r}(t)},o=[],void 0===(i="function"==typeof(n=function(){return a})?n.apply(r,o):n)||(t.exports=i)},function(t,r,e){function c(t,r,e,n,o,i){t.is_dark(o,i)&&r.rect(i*n,o*n,n,n)}function a(t,r,e){var n,o;n=r,(o=e).back&&(n.fillStyle=o.back,n.fillRect(0,0,o.size,o.size)),function(t,r,e){if(t){var n=0
-