Los diez mejores bonos carente tanque: Bonos de sometimiento
Content Juegos sobre baccarat online gratuito con el fin de participar para entretenimiento ¿Los primero es antes resultan las bonos de tragaperras […]
October 19, 2025 11 min read
Anında erişim sağlamak isteyen kullanıcılar spor bahisleri versiyonunu tercih ediyor.
Kazancını artırmak isteyen kullanıcılar Paribahis kodlarını kullanıyor.
Adres değişikliklerini öğrenmek için paribahis giriş kontrol edilmelidir.
eryamato.com">Bettilt 2025 fırsatları kazancı artırıyor.
Bahisçilerin finansal işlemleri koruyan Paribahis linkini kullanıyor.
Yatırım yapanlar için özel olarak hazırlanan Bahsegel kampanyaları büyük ilgi görüyor.
Her oyuncu kolay erişim için Bahsegel giriş adresini ziyaret ediyor.
İnternette kazanç arayanların adresi Paribahis giriş kategorileri oluyor.
Gerçek casino deneyimini yaşatan Bettilt giriş seçenekleri kullanıcıları büyülüyor.
İnternette kazanç arayanların adresi Bettilt giriş kategorileri oluyor.
Yeni üyeler, hızlı ve kolay erişim sağlamak için Bahsegel giriş bağlantısını tercih ediyor.
Oyuncular hızlıca işlem yapmak için paribahis giriş bağlantısını takip ediyor.
Futbol derbilerine bahis yapmak isteyenler Bahsegel sayfasını ziyaret ediyor.
2025 yılında yeni sürümüyle Bahsegel giriş piyasaya çıkıyor.
Bahis piyasasında güvenilir bir isim olan Bettilt giriş Türkiye’de öne çıkıyor.
Türkiye’de en hızlı ödeme yapan sitelerden biri Bettilt giriş olarak tanınıyor.
Engellemeler nedeniyle erişim sıkıntısı yaşayan kullanıcılar Bettilt üzerinden bağlantı kuruyor.
Es tu deber informarte y no ha transpirado asentir en el caso de que nos lo olvidemos denegar refrán bono, si las T&A donde vogueplay.com mi empresa pudiera llegar nunca son para nada claros en el caso de que nos lo olvidemos son bastante exigentes. Los bonos sobre recibo sin tanque sobre tiradas gratuito resultan un gran incentivo para comenzar a buscar el casino desprovisto encontrarse que pensar abundante sobre los recursos. Aunque, pero son muchos las ingresos, puede que demás aspectos de este bono nunca lo perfectamente resultan tanto. Después, os ilustraremos las pros y las contras de estas promociones joviales giros de balde. Los bonos desprovisto depósito se pueden transformar en competente retirable conveniente todo el tiempo cual si no le importa hacerse amiga de la grasa cumplan los términos así como formas establecidos.
Uno de los lugares en donde puedes dar con cualquier juego de Baccarat online regalado resultan los casinos en internet. Muchos sobre varones se fabrican con la ocasión sobre participar alrededor del baccarat sin invertir. Solamente debes encontrar un casino online especializada, registrarte así como elegir el modo sobre entretenimiento gratuito. Lo cual le permitirá sumergirse en la atmósfera de el entretenimiento desplazándolo hacia el pelo apreciarlo desprovisto arriesgar su dinero. El disección esmerado de las ofertas, con medidas empezando por una emoción autentico de las relaciones con el pasar del tiempo crupieres acerca de vivo hasta las sustanciosas bonificaciones y promociones, representa una apoyo de los avales. Nuestro Baccarat en internet deberían ganadería prestigio referente a Chile, ofreciendo a los jugadores una practica excitante así como accesible desde la confort sobre las hogares.
Ofrece diversas versiones demo, incluidos juegos acerca de 3D y alternativas optimizadas para móviles. Dicho juego sobre baccarat gratuito es cómodo de ingresar — no tienes cuenta siquiera descargas. Si prefieres competir a tu ritmo desplazándolo hacia el pelo falto distracciones, el baccarat RNG es su preferible opción.
Referente a Betzoid, siempre deseamos casinos que trabajen joviales los mejores cotas, así que se podrí¡ imaginar sobre que tu entretenimiento será justamente desplazándolo hacia el pelo indudablemente. En caso de que cualquier casino de la DGOJ tiene asuntos pendientes con los jugadores en el caso de que nos lo olvidemos nunca pago los ganancias, puedes estar seguros que nunca llegan a convertirse en focos de luces publicará en esta página. En caso de que posee cualquier impedimento con el pasar del tiempo un casino español, se podrí¡ ponerte en conexión con nosotros sitio intentaremos resolver el problema por vd.. Con +5 años como analista así como periodista de guías de iGaming a grado genérico, Alejandro hemos ganado cualquier importancia como profesional alrededor campo en Argentina.

Es una manera importante para casinos que dan bonos falto depósito porque generen interés así como atraen jugadores. En el esparcimiento de el baccarat, igual que sobre cualquier otro esparcimiento de azar, tenemos alternativas y no ha transpirado alternativas de conseguir. La probabilidad de conseguir de un jugador es sobre por las proximidades el 46,6%, de una banca sería de el 44,8% y la alternativa sobre empate es de el 9,6%. Pero, nunca debe pensar solo en los alternativas, por consiguiente al final cualquier depende de el fortuna desplazándolo hacia el pelo el suerte. Con el fin de aumentar sus posibilidades de conseguir, suele usar diversas estrategias y no ha transpirado tácticas que le asistirán an elaborar apuestas más informadas y rentables.
El Chemin sobre Fer es una traducción francesa del Baccarat así como sería distinguido sobre Europa. A diferencia del Aspecto Banco, sobre Chemin de Fer las jugadores tienen más dominación acerca del entretenimiento. La banca rota excursión alrededor sobre la mesa y las jugadores podrán escoger por demandar una carta o continuar con la mano que tienen. Una sola diferenciación es que en el colocar debido a la banca así como la gana, nunca si no le importa hacerse amiga de la grasa descuenta casi nada labor de los ganancias del jugador. Resultan el modelo excelente para algunos que desean impedir nuestro alto riesgo del arquetipo de envite.
La emboscada ganadora acerca de una apuesta de jugador da igual que consecuencia nuestro remuneración mayormente gran de doblar el postura. Estadísticamente, la mascara de el banquero ganará el 488.6 % de las veces, brevemente más que la capa del jugador joviales un 44.seis %. Estadísticamente, la postura a cual nuestro banquero gana guarda los de edad chances de triunfo, puesto que el banco posee la ligera ventaja. Expresado esto, si nuestro banco anhelo, inscribirí¡ paga la pequeña comisión (5 %) sobre las ganancias de el apuesta en el banco. Las jurisdicciones son más limitadas, por consiguiente las instalaciones estrictos se encuentran sesgados inclusive las mayúsculos jugadores igual que FanDuel o bien Caesars.
Juegos sobre baccarat online gratuito con el fin de participar para entretenimiento
La elección de el casino es importante, puesto que debes registrarte en lugares confiables así como con el pasar del tiempo facultad. Igualmente, es indispensable leer detenidamente los palabras y no ha transpirado condiciones asociados con todos estos bonos con el fin de enterarse los requisitos de apuesta y no ha transpirado restricciones especiales. Por lo tanto te sugerimos examinar modelos reseñas sobre casinos en internet de haber más grandes la mecánica y la bicicleta en el momento de investigar algún bono vano.
¿Los primero es antes resultan las bonos de tragaperras desprovisto depósito?

Cuando juegue en el baccarat en internet, puede idear y superar su estrategia explorando otras opciones de apuesta y no ha transpirado encontrando nuestro juego. Dispongas en perfil cual nuestro éxito en el baccarat dependerí¡ de su aptitud para coger decisiones informadas así como estructurar la patología del túnel carpiano bankroll. Una vez que hayas solicitado su propuesta, el tablero de el casino mostrará su bono activado. Si habías solicitado giros de balde o bien cualquier bono de invitaciones de balde, deben brotar acreditados sobre las juegos especialistas donde la proposición es válida.
Durante la investigación, hemos llegado a la resultado sobre que Winner Casino MX sería nuestro mejor sitio de competir con bonos sin tanque. De obtener ganancias regulares con cualquier entretenimiento sobre ideas, llegan a convertirse en focos de luces recomienda elegir cualquier casino probado, tomar nuestro extremo en buena condición física de bonos desplazándolo hacia el pelo llegan a convertirse en focos de luces esfuerzan por prosperar el propio estilo sobre entretenimiento rentable. Ademí¡s vale estar seguros que el casino brinda una variedad sobre juegos y no ha transpirado bonos lucrativos de jugadores cero millas y típicos. Varios casinos igualmente tienen programas de franqueza, que podrían ayudarle an alcanzar ingresos así como prerrogativas extras. Además, vale escuchar las palabras y formas de el casino antes de iniciar en competir con el fin de eludir sorpresas desagradables en el porvenir. Determinados casinos deben bonos desplazándolo hacia el pelo promociones, aunque importa saber las condiciones desplazándolo hacia el pelo las campos de poder aspirar en el varí³n y no ha transpirado utilizarlos.
- Invariablemente está seguro de atender los términos y no ha transpirado características para decirte que te encuentras jugando en juegos elegibles.
- En caso de que entiendes cual los campos resultan bastante altos, en el caso de que nos lo olvidemos no entiendes que la predicción son justas, recuerda cual no te encuentras necesario a asentir el agasajo.
- Seleccionar el modo de pago inmejorable es indispensable para jugadores cual quieren incrementar los ingresos para bonos carente depósito en los casinos online.
- Ten sobre perfil cual esa elección nunca hay la con el fin de todo el mundo para juegos con crupier referente a vivo.
¿La manera sobre cómo obtener algún bono carente tanque?
Acerca de Baccarat-TipsEstamos seguros de que, con el pasar del tiempo estas métodos presente, hay fundamento para que nunca te sea posible sufrir cualquier la conmoción que ofrece Mini Baccarat. OnlineCasino.mx os asistencia a contrastar las mejores casinos en internet desplazándolo hacia el pelo dar con los ofertas sobre bonos más profusamente exclusivas. Filtra según cosa que mayormente os sirve desplazándolo hacia el pelo encuentra los casinos que mejor inscribirí¡ ajusten a hacen de necesidades. Los límites de la puesta si no le importa hacerse amiga de la grasa especifican en la mesa sobre esparcimiento, acostumbran a acerca de una tabla particular. Tras hacer una puesta, nuestro jugador y no ha transpirado nuestro crupier reciben dos términos todos. Bastantes jugadores de lugares del mundo occidentales a chico discuten sobre en qué lugar inscribirí¡ originó exactamente el esparcimiento de términos.
Esos bonos incorporan los bonos falto depósito, los códigos promocionales así como nuestro bono de recibo. Los criterios sobre juegos de casino acerca de avispado invierten muchas horas y no ha transpirado esfuerzo de producir juegos sobre baccarat guay especie. Cubo que tenemos bastantes precios involucrados (salarios de los distribuidores, luz, etc.) en el ejecutar cualquier casino sobre listo en línea, los sitios sobre casino nunca podrían lograr mostrar esos juegos sobre forma gratuita.

Esto es algo en particular exacto para esos cual desarrollan una mente «ganadora» desplazándolo hacia el pelo inscribirí¡ obsesionan con procurar conseguir recursos. Entre los definitivos inconvenientes sobre competir alrededor del baccarat en internet es una falta interactivo colectivo. El baccarat suele ser algún esparcimiento social en el cual llegan a convertirse en focos de luces tratar con otros semejantes, aunque cuando inscribirí¡ hace el trabajo en línea, las jugadores nunca pueden interactuar dentro de sí.
Se supone que tenemos algún empate, la cual sería uno de los objetivos esperados alrededor baccarat. Resulta una de las apuestas a su disposición dentro del baccarat, unido gracias empate y también en la banca. El superior bono carente depósito sería el cual prometa un gran galardón y cual, por otra parte, disponga de características de rollover factibles. Si aceptas un bono con un premio genial, aunque con una gran condición sobre rollover mejor en el 50x, vas a tener muchas dificultades de cobrarlo desplazándolo hacia el pelo se podrí¡ cual eches por tierra recursos sobre nuestro tanteo.
Sobre cómo elegir nuestro conveniente casino sobre bacará online
Dicho nombre, derivado del alemán primitivo “Baccara”, que significa “cero”, lleva sobre relieve que los cartas con caras así como los dieces tienen concepto 0 sobre oriente entretenimiento de ritmo veloz. Las reglas resultan sencillos sobre enterarse, lo cual atrae tanto en mayoritariamente igual que en jugadores experimentados. Para finalizar, vale sostener una materia y no ha transpirado no emplazar unas lo que pueda poder desperdiciar. Pero Mini Baccarat acerca de vivo puede ser apasionante, tiene que ajuntar igual que forma sobre entretenimiento y no ha transpirado no como manera de lucro. En caso de que fija una número hacia la cual vaya confortable confortable apostando, inscribirí¡ asegurará de que nuestro esparcimiento prosiga siendo alegre entretanto dure.

Con el fin de transformar el bono carente tanque sobre dinero conveniente, debería cumplir a los campos sobre envite establecidos por el casino. En el ajuntar sobre un bono cual nunca requiere depósito, los instalaciones sobre puesta suelen ser estrictos y no ha transpirado podrán mejorar entre 20 y 60 veces el valor de el bono. Sobre palabras atractivos, quiere decir que debe emplazar referente a recursos favorable la n⺠semejante a la recibida multiplicada para cuarenta – 60.
Con parte live los consumidores podrían latir la practica mayormente realista referente a cualquier casino en internet. Albergarán una oportunidad de participar con el pasar del tiempo algún crupier real de pulpa y no ha transpirado hueso sobre avispado. Algunos casinos en internet españoles tienen bonos sin tanque alrededor darnos de elevada. Contempla más de esta bonos sobre casino, y no ha transpirado comienza en colocar y no ha transpirado jugar desprovisto necesidad de obtener tu dinero.
Para efectuarlo, tienes que cumplir con los requisitos sobre envite cual estipula cualquier casino. Poliedro cual este bono nunca necesita comercios, las instalaciones sobre puesta suelen ser estrictos desplazándolo hacia el pelo pueden mejorar dentro de 40 así como 60 ocasiones el coste del bono. Lo cual implica cual deberías emplazar sobre recursos favorable una cantidad igual a una recibida multiplicada por 10-60. Nuestro tema primero podría ser usted tiene la ocasión de ganar dinero favorable referente a las juegos sin depósito.

Su vivencia incluye la código de juegos de azar, ciberseguridad desplazándolo hacia el pelo entretenimiento serio, dando una visión global desplazándolo hacia el pelo documentada al siguiente público sobre casinosnuevos.org. Dicho labor mira la combinación única sobre expertise técnico así como compromiso joviales un entretenimiento justo y no ha transpirado moral. Hay determinados tipos sobre casinos cual tienen experiencias diferentes según las gustos y exigencias para los jugadores. En lo perfectamente generoso de el tiempo, la desarrollo de la ciencia y no ha transpirado la solicitud de los gente han cubo espacio a distintas modalidades sobre entretenimiento, desde los habituales casinos físicos inclusive las plataformas online y no ha transpirado móviles.
Maneras usadas de apartar un bono
Evolution Gaming Baccarat resulta una traducción mejorada de el juego a como es cual obtendrías en las casinos físicos. Cuando sean jugar referente a Argentina en casinos móviles sin depósito, todo lo que precisas es algún móvil o bien la tableta con contacto a la red acceso LTE, 4G, 3G en el caso de que nos lo olvidemos WiFi. Incluso es posible registrarte, elaborar depósitos así como eximir dinero sobre la velocidad, para aprovecharte de el utilidad definitiva de estas apuestas en internet.
if (typeof TrustindexJsLoaded === 'undefined') {
var TrustindexJsLoaded = {};
}
TrustindexJsLoaded.common = true;
String.prototype.ucfirst = function() {
return this.charAt(0).toUpperCase() + this.slice(1)
}
function popupCenter(w, h)
{
let dleft = window.screenLeft !== undefined ? window.screenLeft : window.screenX;
let dtop = window.screenTop !== undefined ? window.screenTop : window.screenY;
let width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
let height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
let left = parseInt((width - w) / 2 + dleft);
let top = parseInt((height - h) / 2 + dtop);
return ',top=' + top + ',left=' + left;
}
jQuery.fn.expand = function() {
let textarea = jQuery(this);
let val = textarea.val();
textarea.css('height', textarea.get(0).scrollHeight + 'px');
textarea.val('').val(val);
};
jQuery(document).ready(function() {
/*************************************************************************/
/* PASSWORD TOGGLE */
jQuery('.ti-toggle-password').on('click', function(event) {
event.preventDefault();
let icon = jQuery(this);
let parent = icon.closest('.ti-form-group');
if (icon.hasClass('dashicons-visibility')) {
parent.find('input').attr('type', 'text');
icon.removeClass('dashicons-visibility').addClass('dashicons-hidden');
}
else {
parent.find('input').attr('type', 'password');
icon.removeClass('dashicons-hidden').addClass('dashicons-visibility');
}
});
// toggle opacity
jQuery('.ti-toggle-opacity').css('opacity', 1);
/*************************************************************************/
/* TOGGLE */
jQuery('#trustindex-plugin-settings-page .btn-toggle').on('click', function(event) {
event.preventDefault();
jQuery(jQuery(this).attr('href')).toggle();
return false;
});
/*************************************************************************/
/* FILTER */
// checkbox
jQuery('.ti-checkbox:not(.ti-disabled)').on('click', function() {
let checkbox = jQuery(this).find('input[type=checkbox], input[type=radio]');
checkbox.prop('checked', !checkbox.prop('checked')).trigger('change');
return false;
});
// custom select - init
jQuery('.ti-select').each(function() {
let el = jQuery(this);
let selected = el.find('ul li.ti-selected');
if (selected.length === 0) {
selected = el.find('ul li:first');
}
el.data('value', selected.data('value')).find('font').html(selected.html());
});
// custom select - toggle click
jQuery(document).on('click', '.ti-select', function() {
let el = jQuery(this);
el.toggleClass('ti-active');
if (el.hasClass('ti-active')) {
jQuery(window).unbind().on('click', function(event) {
if (!jQuery(event.target).is(el) && jQuery(event.target).closest('.ti-select').length === 0) {
el.removeClass('ti-active');
jQuery(window).unbind();
}
});
}
});
// custom select - select item
jQuery(document).on('click', '.ti-select li', function() {
let el = jQuery(this);
el.parent().parent().data('value', el.data('value')).trigger('change').find('font').html(el.html());
el.parent().find('li').removeClass('ti-selected');
el.addClass('ti-selected');
});
var isNoReviewsWithFilter = false;
// get reviews to memory
var reviewsElement = jQuery('.ti-widget-editor-preview .ti-widget').clone();
// set reviews' rating and empty to attributes
reviewsElement.find('.ti-review-item').each(function() {
let el = jQuery(this);
let rating = el.find('.ti-stars .ti-star.f, .stars .ti-star.f').length;
// facebook recommendations
if (el.find('.ti-recommendation-icon.positive').length) {
rating = 5;
}
else if (el.find('.ti-recommendation-icon.negative').length) {
rating = 1;
}
if (el.find('.ti-polarity-icon.positive').length) {
rating = 5;
}
else if (el.find('.ti-polarity-icon.neutral').length) {
rating = 3;
}
else if (el.find('.ti-polarity-icon.negative').length) {
rating = 1;
}
// ten scale
if (el.find('.ti-rating-box').length) {
rating = Math.round(parseFloat(el.find('.ti-rating-box').text()) / 2);
}
let selector = '.ti-review-content';
if (el.find('.ti-review-content .ti-inner').length) {
selector = '.ti-review-content .ti-inner';
}
else if (el.find('.ti-review-text').length) {
selector = '.ti-review-text';
}
el.attr('data-rating', rating);
if (typeof el.attr('data-empty') === 'undefined') {
el.attr('data-empty', el.find(selector).text().trim() == "" ? 1 : 0);
}
});
// check badge type
var isBadgeWidget = function() {
let layoutId = jQuery('.ti-widget-editor-preview .ti-widget').data('layout-id');
return [ 11, 12, 20, 22, 24, 25, 26, 27, 28, 29, 35, 55, 56, 57, 58, 59, 60, 61, 62 ].indexOf(layoutId) != -1;
};
// apply filter when change or init
var applyFilter = function(init) {
let styleId = parseInt(jQuery('.ti-widget').data('layout-id'));
// get stars
let stars = (jQuery('#ti-filter-star').data('value') + "").split(',').map(function(i) { return parseInt(i); });
// only ratings
let showOnlyRatings = jQuery('#ti-filter-only-ratings').prop('checked');
// filter removed
if (!jQuery('#ti-filter-star').length) {
stars = [ 1, 2, 3, 4, 5 ];
showOnlyRatings = false;
}
// remove current review elements
jQuery('.ti-widget .ti-reviews-container-wrapper .ti-review-item').remove();
// remove all event listeners on the widget
let widget = document.querySelector('.ti-widget');
widget.replaceWith(widget.cloneNode(true));
// iterate through stored reviews
let results = 0;
reviewsElement.find('.ti-review-item').each(function() {
let el = jQuery(this);
// check rating
if (stars.indexOf(el.data('rating')) !== -1) {
// check only ratings
if (showOnlyRatings && el.data('empty')) {
return;
}
// return after 5 results (vertical widgets)
if ([ '8', '9', '10', '18', '33' ].indexOf(styleId) !== -1 && results > 4) {
return;
}
// clone and append element
let clone = el.clone();
jQuery('.ti-widget-editor-preview .ti-widget .ti-reviews-container-wrapper').append(clone);
clone.hide();
clone.fadeIn();
// increase count
results++;
}
});
// clear pager interval
if (typeof Trustindex !== 'undefined' && Trustindex.intervalPointer) {
clearInterval(Trustindex.intervalPointer);
}
// show empty text
if (results === 0 && !isBadgeWidget()) {
jQuery('.ti-widget-editor-preview .ti-widget').hide().next().fadeIn();
isNoReviewsWithFilter = true;
}
else {
jQuery('.ti-widget-editor-preview .ti-widget').fadeIn().next().hide();
isNoReviewsWithFilter = false;
if (typeof Trustindex !== 'undefined') {
Trustindex.pager_inited = true;
Trustindex.init_pager(document.querySelectorAll('.ti-widget'));
Trustindex.resize_widgets();
}
}
// ajax save
if (init !== true) {
jQuery.post('', {
command: 'save-filter',
_wpnonce: jQuery('#ti-filter-star').data('nonce'),
filter: JSON.stringify({
'stars': stars,
'only-ratings': showOnlyRatings
})
});
}
}
// hooks
jQuery('#ti-filter-star').on('change', applyFilter);
jQuery('#ti-filter-only-ratings').on('change', function(event) {
event.preventDefault();
applyFilter();
return false;
});
// init
if (reviewsElement.length) {
applyFilter(true);
}
// background post save - style and set change
jQuery('#ti-widget-selects select, #ti-widget-options input[type=checkbox]:not(.no-form-update)').on('change', function() {
let form = jQuery(this).closest('form');
let data = form.serializeArray();
// include unchecked checkboxes
form.find('input[type=checkbox]:not(.no-form-update)').each(function() {
let checkbox = jQuery(this);
if (!checkbox.prop('checked') && checkbox.attr('name')) {
data.push({
name: checkbox.attr('name'),
value: 0
});
}
});
// show loading
jQuery('#ti-loading').addClass('ti-active');
jQuery('li.ti-preview-box').addClass('disabled');
jQuery.ajax({
url: form.attr('action'),
type: 'post',
dataType: 'application/json',
data: data
}).always(() => location.reload(true));
return false;
});
// layout select filter
jQuery('input[name=layout-select]').on('change', function(event) {
event.preventDefault();
let ids = (jQuery('input[name=layout-select]:checked').data('ids') + "").split(',');
console.log('filter', ids);
if (ids.length === 0 || ids[0] === "") {
jQuery('.ti-preview-boxes-container').find('.ti-full-width, .ti-half-width').fadeIn();
}
else {
jQuery('.ti-preview-boxes-container').find('.ti-full-width, .ti-half-width').hide();
ids.forEach(id => jQuery('.ti-preview-boxes-container').find('.ti-preview-boxes[data-layout-id="'+ id + '"]').parent().fadeIn());
}
return false;
});
/*************************************************************************/
/* MODAL */
jQuery(document).on('click', '.btn-modal-close', function(event) {
event.preventDefault();
jQuery(this).closest('.ti-modal').fadeOut();
});
jQuery(document).on('click', '.ti-modal', function(event) {
if (event.target.nodeName !== 'A') {
event.preventDefault();
if (!jQuery(event.target).closest('.ti-modal-dialog').length) {
jQuery(this).fadeOut();
}
}
});
/*************************************************************************/
/* NOTICE HIDE */
jQuery(document).on('click', '.ti-notice.is-dismissible .notice-dismiss', function() {
let button = jQuery(this);
let container = button.closest('.ti-notice');
container.fadeOut(200);
if (button.data('command') && !button.data('ajax-run')) {
button.data('ajax-run', 1); // prevent multiple triggers
jQuery.post('', { command: button.data('command') });
}
});
jQuery('.ti-checkbox input[type=checkbox][onchange]').on('change', function() {
jQuery('#ti-loading').addClass('ti-active');
});
/*************************************************************************/
/* DROPDOWN */
// change dropdown arrow positions
let fixDropdownArrows = function() {
jQuery('.ti-button-dropdown-arrow').each(function() {
let arrow = jQuery(this);
let button = arrow.closest('td').find(arrow.data('button'));
// add prev buttons' width
let left = 0;
button.prevAll('.ti-btn').each(function() {
left += jQuery(this).outerWidth(true);
});
// center the arrow
left += button.outerWidth() / 2;
arrow.css('left', left + 'px');
});
};
fixDropdownArrows();
/*************************************************************************/
/* AI REPLY */
let generateAiReply = function(text, callback) {
let tiWindow = window.open('', 'trustindex-generate-ai-reply', 'width=500,height=500,menubar=0' + popupCenter(500, 500));
let form = document.createElement('form');
let input = document.createElement('input');
// create form to pass POST data
form.target = 'trustindex-generate-ai-reply';
form.method = 'POST';
form.action = 'https://admin.trustindex.io/integration/generateAiReply';
form.style.display = 'none';
// data will be in a hidden input
input.type = 'hidden';
input.name = 'json';
input.value = JSON.stringify({ text: text, language: jQuery('#ti-widget-language').val() });
form.appendChild(input);
// add form to body
document.body.appendChild(form);
if (tiWindow) {
form.submit();
}
// remove added form
form.remove();
// popup close interval
let timer = setInterval(function() {
if (tiWindow.closed) {
callback(false);
clearInterval(timer);
}
}, 1000);
// wait for response from Trustindex
jQuery(window).one('message', function(event) {
// event comes from the correct window
if (tiWindow == event.originalEvent.source) {
clearInterval(timer);
callback(event.originalEvent.data.reply);
tiWindow.close();
}
});
};
let postReply = function(data, reconnect, callback) {
let tiWindow = window.open('', 'trustindex-post-reply', 'width=600,height=600,menubar=0' + popupCenter(600, 600));
let form = document.createElement('form');
let input = document.createElement('input');
// create form to pass POST data
form.target = 'trustindex-post-reply';
form.method = 'POST';
form.action = 'https://admin.trustindex.io/integration/postReply?type=google';
form.style.display = 'none';
if (reconnect) {
form.action += '&reconnect=1';
}
// data will be in a hidden input (JSON)
input.type = 'hidden';
input.name = 'json';
input.value = JSON.stringify(data);
form.appendChild(input);
// add form to body
document.body.appendChild(form);
if (tiWindow) {
form.submit();
}
// remove added form
form.remove();
// popup close interval
let timer = setInterval(function() {
if (tiWindow.closed) {
callback(undefined);
clearInterval(timer);
}
}, 1000);
// wait for response from Trustindex
jQuery(window).one('message', function(event) {
// event comes from the correct window
if (tiWindow == event.originalEvent.source) {
clearInterval(timer);
callback(!!event.originalEvent.data.success);
tiWindow.close();
}
});
};
// show reply section
// - generate reply with AI if not edit
jQuery(document).on('click', '.btn-show-ai-reply', function(event) {
event.preventDefault();
let btn = jQuery(this);
let td = btn.closest('td');
btn.addClass('ti-btn-loading').blur();
let replyBox = td.find('.ti-reply-box');
replyBox.find('.btn-post-reply').attr('data-reconnect', 0);
replyBox.find('.ti-alert').addClass('ti-d-none');
// generate reply with AI if not edit
if (replyBox.attr('data-state') === 'reply' || replyBox.attr('data-state') === 'copy-reply') {
let data = JSON.parse(replyBox.next().html());
generateAiReply(data.review.text, function(reply) {
btn.removeClass('ti-btn-loading');
// popup closed
if (reply === false) {
return;
}
btn.addClass('ti-btn-default-disabled');
replyBox.addClass('ti-active');
td.find('.ti-highlight-box').removeClass('ti-active');
td.find('.btn-show-highlight').removeClass('ti-btn-default-disabled');
let textarea = replyBox.find('.state-'+ replyBox.attr('data-state') +' textarea');
textarea.val(reply).focus().expand();
if (!data.review.text.trim()) {
replyBox.find('.ti-alert.ti-alert-empty-review').removeClass('d-none');
}
// save in DB
jQuery.ajax({
method: 'POST',
url: window.location.href,
data: { 'save-reply-generated': 1 }
});
});
}
else {
btn.removeClass('ti-btn-loading').addClass('ti-btn-default-disabled');
replyBox.addClass('ti-active');
td.find('.ti-highlight-box').removeClass('ti-active');
td.find('.btn-show-highlight').removeClass('ti-btn-default-disabled');
}
});
// hide reply section
jQuery(document).on('click', '.btn-hide-ai-reply', function(event) {
event.preventDefault();
let btn = jQuery(this);
btn.blur();
let replyBox = btn.closest('td').find('.ti-reply-box');
replyBox.attr('data-state', replyBox.attr('data-original-state'));
if (replyBox.attr('data-state') !== 'replied') {
replyBox.removeClass('ti-active');
}
btn.closest('td').find('.btn-show-ai-reply').removeClass('ti-btn-default-disabled');
});
// show edit reply section
jQuery(document).on('click', '.btn-show-edit-reply', function(event) {
event.preventDefault();
let btn = jQuery(this);
let replyBox = btn.closest('td').find('.ti-reply-box');
replyBox.attr('data-state', 'edit-reply');
replyBox.find('.state-edit-reply textarea').focus().expand();
});
// hide edit reply section
jQuery(document).on('click', '.btn-hide-edit-reply', function(event) {
event.preventDefault();
let btn = jQuery(this);
let replyBox = btn.closest('td').find('.ti-reply-box');
replyBox.find('.ti-alert').addClass('ti-d-none');
replyBox.attr('data-state', 'replied');
});
// post reply
jQuery(document).on('click', '.btn-post-reply', function(event) {
event.preventDefault();
let btn = jQuery(this);
let replyBox = btn.closest('td').find('.ti-reply-box');
let data = JSON.parse(replyBox.next().html());
let textarea = btn.closest('.ti-reply-box-state').find('textarea');
let reply = textarea.val().trim();
textarea.removeClass('is-invalid');
if (reply === "") {
return textarea.addClass('is-invalid');
}
btn.addClass('ti-btn-loading').blur();
data.reply = reply;
postReply(data, btn.attr('data-reconnect') == 1, function(isSuccess) {
btn.removeClass('ti-btn-loading');
// popup closed
if (isSuccess === undefined) {
return;
}
if (isSuccess) {
// save in DB
jQuery.ajax({
method: 'POST',
url: window.location.href,
data: {
id: btn.attr('href'),
_wpnonce: btn.data('nonce'),
'save-reply': reply
}
});
// show replied section
replyBox.attr('data-state', 'replied').attr('data-original-state', 'replied');
replyBox.find('.state-replied p').html(reply);
replyBox.find('.state-edit-reply textarea').val(reply);
replyBox.find('.state-replied .ti-alert').removeClass('ti-d-none');
// change Reply with AI button text
let replyButton = replyBox.closest('td').find('.btn-show-ai-reply:not(.btn-default)');
if (replyButton.length) {
replyButton.html(replyButton.data('edit-reply-text')).addClass('btn-default');
setTimeout(fixDropdownArrows, 100);
}
}
else {
// set try again button state
replyBox.find('.state-copy-reply .btn-try-reply-again').data('state', replyBox.attr('data-state'));
// show copy section
replyBox.attr('data-state', 'copy-reply');
replyBox.find('.state-copy-reply textarea').val(reply).focus().expand();
replyBox.find('.state-copy-reply .ti-alert').removeClass('ti-d-none');
}
});
});
/*************************************************************************/
/* HIGHLIGHT */
// show highlight section
jQuery(document).on('click', '.btn-show-highlight', function(event) {
event.preventDefault();
let btn = jQuery(this);
let td = btn.closest('td');
let replyBox = td.find('.ti-reply-box');
btn.addClass('ti-btn-default-disabled').blur();
td.find('.ti-highlight-box').addClass('ti-active');
replyBox.attr('data-state', replyBox.attr('data-original-state'));
replyBox.removeClass('ti-active');
td.find('.btn-show-ai-reply').removeClass('ti-btn-default-disabled');
});
// hide highlight section
jQuery(document).on('click', '.btn-hide-highlight', function(event) {
event.preventDefault();
let btn = jQuery(this);
let td = btn.closest('td');
btn.blur();
td.find('.ti-highlight-box').removeClass('ti-active');
td.find('.btn-show-highlight').removeClass('ti-btn-default-disabled');
td.find('.ti-reply-box[data-state="replied"]').addClass('ti-active');
if (td.find('.ti-reply-box').attr('data-state') === 'replied') {
td.find('.btn-show-ai-reply').addClass('ti-btn-default-disabled');
}
});
// highlight save
jQuery(document).on('click', '.btn-save-highlight', function(event) {
event.preventDefault();
let btn = jQuery(this);
let highlightContent = btn.closest('td').find('.ti-highlight-content .ti-selection-content');
let data = TI_highlight_getSelection(highlightContent.get(0));
if (data.start !== null) {
data.id = btn.attr('href');
data._wpnonce = btn.data('nonce');
data['save-highlight'] = 1;
btn.addClass('ti-btn-loading').blur();
btn.closest('td').find('.ti-btn').css('pointer-events', 'none');
jQuery.ajax({
method: 'POST',
url: window.location.href,
data: data
}).always(() => location.reload(true));
}
});
// highlight remove
jQuery(document).on('click', '.btn-remove-highlight', function(event) {
event.preventDefault();
let btn = jQuery(this);
btn.addClass('ti-btn-loading').blur();
btn.closest('td').find('.ti-btn').css('pointer-events', 'none');
jQuery.ajax({
method: 'POST',
url: window.location.href,
data: {
id: btn.attr('href'),
_wpnonce: btn.data('nonce'),
'save-highlight': 1
}
}).always(() => location.reload(true));
});
// review download notification email
jQuery(document).on('click', '.btn-notification-email-save', function(event) {
event.preventDefault();
let container = jQuery(this).closest('.ti-notification-email');
let input = container.find('input[type="text"]');
let type = input.data('type');
let nonce = input.data('nonce');
let email = input.val().trim().toLowerCase();
// hide alerts
container.find('.ti-notice').hide();
// check email
if (email !== "" && !/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(email)) {
return container.find('.ti-notice').fadeIn();
}
// show loading
jQuery('#ti-loading').addClass('ti-active');
// save email
jQuery.post("", {
'save-notification-email': email,
'type': type,
'_wpnonce': nonce
}, () => location.reload(true));
});
});
// - import/btn-loading.js
// loading on click
jQuery(document).on('click', '.ti-btn-loading-on-click', function() {
let btn = jQuery(this);
btn.addClass('ti-btn-loading').blur();
});
// - import/copy-to-clipboard.js
jQuery(document).on('click', '.btn-copy2clipboard', function(event) {
event.preventDefault();
let btn = jQuery(this);
btn.blur();
let obj = jQuery(btn.attr('href'));
let text = obj.html() ? obj.html() : obj.val();
// parse html
let textArea = document.createElement('textarea');
textArea.innerHTML = text;
text = textArea.value;
let feedback = () => {
btn.removeClass('ti-toggle-tooltip').addClass('ti-show-tooltip');
if (typeof this.timeout !== 'undefined') {
clearTimeout(this.timeout);
}
this.timeout = setTimeout(() => btn.removeClass('ti-show-tooltip').addClass('ti-toggle-tooltip'), 3000);
};
if (!navigator.clipboard) {
// fallback
textArea = document.createElement('textarea');
textArea.value = text;
textArea.style.position = 'fixed'; // avoid scrolling to bottom
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
var successful = document.execCommand('copy');
feedback();
}
catch (err) { }
document.body.removeChild(textArea);
return;
}
navigator.clipboard.writeText(text).then(feedback);
});
// - import/feature-request.js
jQuery(document).on('click', '.btn-send-feature-request', function(event) {
event.preventDefault();
let btn = jQuery(this);
btn.blur();
let container = jQuery('.ti-feature-request');
let email = container.find('input[name="email"]').val().trim();
let text = container.find('textarea[name="description"]').val().trim();
// hide errors
container.find('.is-invalid').removeClass('is-invalid');
// check email
if (email === "" || !/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(email)) {
container.find('input[name="email"]').addClass('is-invalid');
}
// check text
if (text === "") {
container.find('textarea[name="description"]').addClass('is-invalid');
}
// there is error
if (container.find('.is-invalid').length) {
return false;
}
// show loading animation
btn.addClass('ti-btn-loading');
let data = new FormData(jQuery('.ti-feature-request form').get(0));
// ajax request
jQuery.ajax({
type: 'POST',
data: data,
cache: false,
contentType: false,
processData: false
}).always(function() {
btn.removeClass('ti-btn-loading');
btn.addClass('ti-show-tooltip').removeClass('ti-toggle-tooltip');
setTimeout(() => btn.removeClass('ti-show-tooltip').addClass('ti-toggle-tooltip'), 3000);
});
});
// - import/rate-us.js
// remember on hover
jQuery(document).on('mouseenter', '.ti-quick-rating', function(event) {
let container = jQuery(this);
let selected = container.find('.ti-star-check.ti-active, .star-check.active');
if (selected.length) {
// add index to data & remove all active stars
container.data('selected', selected.index()).find('.ti-star-check, .star-check').removeClass('ti-active active');
// give back active star on mouse enter
container.one('mouseleave', () => container.find('.ti-star-check, .star-check').eq(container.data('selected')).addClass('ti-active active'));
}
});
// star click
jQuery(document).on('click', '.ti-rate-us-box .ti-quick-rating .ti-star-check', function(event) {
event.preventDefault();
let star = jQuery(this);
let container = star.parent();
// add index to data & remove all active stars
container.data('selected', star.index()).find('.ti-star-check').removeClass('ti-active');
// select current star
star.addClass('ti-active');
// show modals
if (parseInt(star.data('value')) >= 4) {
// open new window
window.open(location.href + '&command=rate-us-feedback&_wpnonce='+ container.data('nonce') +'&star=' + star.data('value'), '_blank');
jQuery('.ti-rate-us-box').fadeOut();
}
else {
let feedbackModal = jQuery('#ti-rateus-modal-feedback');
if (feedbackModal.data('bs') == '5') {
feedbackModal.modal('show');
setTimeout(() => feedbackModal.find('textarea').focus(), 500);
}
else {
feedbackModal.fadeIn();
feedbackModal.find('textarea').focus();
}
feedbackModal.find('.ti-quick-rating .ti-star-check').removeClass('ti-active').eq(star.index()).addClass('ti-active');
}
});
// write to support
jQuery(document).on('click', '.btn-rateus-support', function(event) {
event.preventDefault();
let btn = jQuery(this);
btn.blur();
let container = jQuery('#ti-rateus-modal-feedback');
let email = container.find('input[type=text]').val().trim();
let text = container.find('textarea').val().trim();
// hide errors
container.find('input[type=text], textarea').removeClass('is-invalid');
// check email
if (email === "" || !/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(email)) {
container.find('input[type=text]').addClass('is-invalid').focus();
}
// check text
if (text === "") {
container.find('textarea').addClass('is-invalid').focus();
}
// there is error
if (container.find('.is-invalid').length) {
return false;
}
// show loading animation
btn.addClass('ti-btn-loading');
container.find('a, button').css('pointer-events', 'none');
// ajax request
jQuery.ajax({
type: 'post',
dataType: 'application/json',
data: {
command: 'rate-us-feedback',
_wpnonce: btn.data('nonce'),
email: email,
text: text,
star: container.find('.ti-quick-rating .ti-star-check.ti-active').data('value')
}
}).always(() => location.reload(true));
});