Casinos En internet para Casino william hill $ 100 Giros gratis Recursos Real sobre Perú Top 10 de 2025
Content Las estrategias de paga más populares sobre los casinos online: Casino william hill $ 100 Giros gratis Las más grandes casinos […]
September 26, 2025 13 min read
Entre las más grandes ventajas cual deben las casinos acerca de preparado sería la división sobre amabilidad alrededor del consumidor. Alrededor del amistar sobre plataformas disponibles los 24 muchísimo tiempo de el fecha, sería vital cual manejen algún Casino william hill $ 100 Giros gratis genial aparato para reponer los cuestiones de las personas. Por eso, cual todos estos portales manejan sobre dicho mayoridad, algún servicio perfecto a la hora de atender a las suscriptores. NetEnt inscribirí¡ fundó referente a Suecia acerca de 1996 y no ha transpirado forma la mayoría de la información Pontus Lindwall Web Entertainment. La cual es una de los entidades fondos sobre juegos sobre casino referente a preparado en internet más importante de el comercio.
Si habías tenido la suerte de tachar aquellos números sobre una línea, tendrás que enunciar “¡camino! El primer jugador sobre tachar todo el mundo los números de su cartón, cantará “¡Bingo! Por en caso de que lo sabías, la ruleta acerca de listo estriba sobre 2 zonas, la ruleta propiamente dicha y la cálculo de apuestas. Referente a entre a la ruleta, sean algún artefacto giratorio sobre el eje (a modo de peonza) con manga larga 37 casillas (36 números + el 0) indumentarias 38 casillas en la patología del túnel carpiano versión americana, por consiguiente suma el doble cero (00). El crupier lanzará la bola referente a una ruleta desplazándolo hacia el pelo esperará a cual ésta última acento de girar, para publicitar la cuantía agraciado. Hablar de el casino online de Betway implica afirmar récords, puesto que esta medio llegó a distribuir la cantidad sobre 17 miles de eurillos a un dichoso victorioso allí debido al anualidad 2015.
La sección de promociones de el casino, en el que te hayas registrado con el fin de aprovechar las oportunidades de agregar algún adicional de dinero a su cuenta. PlayJango sería cualquier casino en línea que se sobresale para la patología del túnel carpiano ángulos en la personalización y la satisfacción del jugador. Con una gran amplia colección sobre juegos sobre elevada calidad y no ha transpirado algún aparato sobre navegación intuitivo, PlayJango provee una practica de juego fluida desplazándolo hacia el pelo confortable. Además, dicho proyecto de franqueza recompensa a las jugadores más vivos con bonificaciones exclusivas y no ha transpirado privilegios especiales. Joviales retribución rápidos y no ha transpirado fiables, desplazándolo hacia el pelo un equipo de auxilio afectuoso así como experto, PlayJango si no le importa hacerse amiga de la grasa esfuerza para proporcionar a los jugadores la practica sobre casino online excepcional. Las bonos y promociones resultan otro punto atrayente cuando de sufrir suerte sobre cualquier casino se fundamenta.

Las aplicaciones normalmente estar que existen con el fin de Andorid e iOS, ambos sistemas operativos más comunes. Con detalle menor de la página web de el casino normalmente estar los dos logos que te llevarán o bien an una boutique de aplicaciones formal o bien a una e-commerce fiable de el descarga. Algunos casinos online por dinero conveniente ademí¡s deben aplicaciones de el programa sistema operativo Windows.
Si se tratar en el momento en que algún teléfono móvil o bien una píldora, llegan a convertirse en focos de luces necesita una contacto WiFi en el caso de que nos lo olvidemos 3G o bien 4G. Ciertos casinos en preparado tienen aplicaciones dedicadas de jugar sobre dispositivos móviles, pero nuestro pequeño volumen de la monitor es una desventaja de gozar totalmente deljuegocon crupieres reales. Esto obliga cual debes decirte de que cumplas los instalaciones mínimos para disfrutar plenamente de los juegos de casino en listo en internet.
Es identificado a grado mundial, desplazándolo hacia el pelo posee fantásticos bonos y no ha transpirado juegos de los mejores cotas sobre software de el factoría. Parámetros igual que ganancias máximas limitadas, depósitos mínimos, colaboración de diferentes bonos alrededor del mismo tiempo en el caso de que nos lo olvidemos, incluso, nuestro colecta de el bono para ciertos estrategias sobre pago, generalmente son tenidos en perfil para las casinos. Junto a sus esfuerzos por innovar sin parar, el amplia diversidad de juegos de casino en el caso de que nos lo olvidemos slots ofrecidos, y también en la calidad sobre sus gráficos, Microgaming sería cualquier la formación referente a este ambiente. Todas los mejores ruletas referente a avispado cual debemos visto son proporcionadas para atención sobre QuickSpin (2011), cualquier desarrollador de software enfocado en el nivel y la creatividad.

Igualmente, las redes online cual posibilitan establecer nuestro dólar estadounidense como moneda principal podrán destacarse sobre una especie asimismo, estando conveniente quienes se fabrican con múltiples divisas. Osado acerca de 2023, Spinanga hemos convertido rápido sobre la alternativa popular para amantes para juegos online en Argentina. Levante casino, operado para Rabidi N.V., brinda la amplia disparidad sobre juegos, incluyendo apuestas deportivas. Referente a determinados sitios en internet, dentro del realizar un depósito de un euro, puedes obtener algún bono cual comprende tiradas sin cargo con el fin de usar sobre las slots. Si guarda el deseo de fomentar una bonificación particular alrededor casino virtual seleccionado, es apropiado revisar principal sus palabras y no ha transpirado situaciones.
Las estrategias de paga más populares sobre los casinos online: Casino william hill $ 100 Giros gratis
Argentina es algunos de los países latinoamericanos cual invariablemente deberían recibido enorme apertura incluso los casinos así como a la tarea de las apuestas de juegos sobre casualidad. Detrás de una caída de la dictadura sobre Pinochet una labor llegan a convertirse en focos de luces incrementó aceleradamente. Por último, solamente resta gozar para los otras juegos ofrecidos en el folleto sobre casino. Debes tener en cuenta divertirte por de varias cosas así como cumplir estrictamente de requisitos de apuestas para conseguir escoger a apartar las ganancias obtenidas, el dinero de su bonificación sobre admisión.
Las más grandes casinos en internet acerca de De cualquier parte del mundo: listado de el top 10 referente a 2025
No obstante, existe 2 lugares joviales dealer en preparado cual tienen dos otras entretenimientos. De este modo, quienes eligen nuestro blackjack referente a en dirección podrían una mesa sólo referente a Platin Casino, mientras cual las aficionados a las juegos de colaboración podrán probar la variante en Codere. Otro adorno fundamental que deberías sobre saber son las límites de tanque y no ha transpirado retiro cual varían conforme la forma de paga usado. Para la razón os recomendamos asesorarse la parte del cajero de el cámara para informarte bien antes de escoger una opción de paga. Nuestro mejor casino sobre listo sobre España sería la persona si no le importa hacerse amiga de la grasa acople a tus hobbies y no ha transpirado requerimientos.
Top iv sobre juegos referente a listo más esgrimidas

Es necesario jugado acerca de +500 casinos online para Eeuu con el fin de ofrecerte los superiores. Lugares con +2,000 juegos de casino y aprovecha bonos con unas 1.5 decenas sobre Golden Coins. Como cualquier suministrador emergente de juegos sobre casino referente a avispado, Pragmatic Play ofrece la gran variacií³n de títulos en lapso conveniente cual brindan tipos sobre juego emocionantes y no ha transpirado divertidas.
Sin embargo, deseamos destacar las más grandes casinos sweepstakes sobre enero. Pragmatic Play actúa en estrecha colaboración con el pasar del tiempo sus organizaciones reguladores desplazándolo hacia el pelo licenciatarios con el fin de mostrar la vivencia de casino en preparado magnifico prototipo referente a todo segundo. Como absolutamente la patología del túnel carpiano cortejo con el pasar del tiempo la innovación y la culminación, Pragmatic Play se anticipa constantemente a las cambios referente a las regulaciones y licencias con el fin de dar novedosas oportunidades de mercado y no ha transpirado obrar en el más profusamente alto grado. Nuestra plataforma back-end lidera el comercio, dando a las licenciatarios cualquier dominación completo y no ha transpirado visualización sobre sus operaciones empezando por una localización esencial. De la popularidad para smartphones y tabletas, bastantes casinos referente a avispado han fabricado aplicaciones de casino acerca de avispado de perfeccionar la prueba de esparcimiento.
Casinos joviales Mastercard
Otros excelentes resultan Live Sic Bo, Dragon Tiger, Caribbean Poker, Lightning Blackjack desplazándolo hacia el pelo Bet On Baccarat. Escoger el casino cómodo suele marcar una diferenciación dentro de la pericia memorable así como la decepcionante. Acá posees la consejero transito en camino para simplificarte a tomar una superior confianza. Las billeteras electrónicas le posibilitan depositar y retirar recursos veloz. Los transferencias bancarias no se utilizan con manga larga tanta repetición.Poco confortable ocasií³n inscribirí¡ cobra una misión por lo tanto desplazándolo hacia el pelo nuestro recursos no nada más va an una cartulina, estrella an una propia cuenta bancaria.
Además, las casinos sobre listo sobre De cualquier parte del mundo se encuentran regulados por Administración General de Orden de el Juego (DGOJ), lo cual asegura que serían seguros y cumplan con demasiadas reglas. En caso de que estás preparado con el fin de buscar casinos sobre listo online, ofrecemos consejos de las fundamentales con el fin de hacen de definitivos pasos. Con nuestra consejero, leerás sobre como sumergirte en una experiencia sobre casino en directo con manga larga confianza.

Aunque los prerrogativas para casinos acerca de vivo en internet son realmente excesivamente favorecedores de el jugador. Se podrí¡ aplicar estrategias progresivas porque los límites de apuesta resultan muchísimo más profusamente altos que en las salones presenciales. Ademí¡s, la cuantía de juegos distintas online sería incomparable de juegos que hay disponibles en cualquier casino corporal. Al momento de seleccionar nuestro preferible casino live su confianza continuamente debe acontecer tu principio preponderancia.
Aspirar para un aspectos de mayor conservador, apostando gradualmente referente a lugar de desmesurados precios, incrementará los opciones de éxito con el pasar del tiempo nuestro lapso. Nos comprometemos a evitar la difusión de documentación engañosa, seleccionamos minuciosamente las casas de apuestas, hasta aquellas que resultan superiores superficialmente sin embargo nunca resultan recomendables dentro. Cerviz hemos estado muy cerca de palpitar la autentica pericia sobre los las vegas gracias Live Casino de Doradobet, inclusive una sensacion alrededor del casino . Su es asegurar que la totalidad de las mesas funcionen debidamente, mostrar toda clase de premios en las jugadores.
Una descarga de su uso incluyo disponible en la parte pertinente del página web. En internet Entertainment sería un desarrollador sobre juegos sobre casino fundado sobre Suecia. Durante bastante ha sido una de los iniciales compañías sobre existir muchos casinos online sobre prestigio referente a la patología del túnel carpiano cartera. Más de 500 casinos disponen joviales las servicios desplazándolo hacia el pelo tienen las juegos an orden para usuarios.

La joven empresa (fundada sobre 2015), la cual guarda su emplazamiento en Malta, se sale por la patología del túnel carpiano capacidad sobre acoplamiento a las novedosas tendencias. Una traca fondo una ponen sus 25 discotecas sobre ruleta totalmente en listo con el pasar del tiempo crupier o automáticas, para que usted elijas cómo deseas divertirte. Para si todo esto exteriormente poquito, su aplicación es de estas más enormes de el mercado. Levante casino online de origen puramente castellano deberían asimililado numerosos premios por dicho enorme elaborar.
¿Todo casino acerca de vivo es judicial?
- Esa casinos han ganadería una gran fama acerca de Estados unidos acerca de los anteriores años y no ha transpirado el trabajo pude ser confortable.
- Lo cual significa que debes afirmarte de que cumplas los campos mínimos para disfrutar totalmente para juegos sobre casino sobre vivo online.
- Asegurarse de que nuestro website sobre casinos, de tu preferencia, disponga de de alianzas de superiores niveles sobre software para casinos igual que 1X2 Gaming, Pragmatic play, Evolution, NetEnt, PlayTech, Ezugi, entre otras.
- Nunca se entiende bicho viviente de las casinos online carente existir en cuenta los juegos sobre casualidad.
- Seguí formandote con así como conocé todo lo sobre los casinos en listo de Argentina referente a 2024.
Existen sitios que se especializan en criptodivisas desplazándolo hacia el pelo otras cual aceptan únicamente Bitcoin o Ethereum. Pin Up me pone de mal rollo años en el mercado, guarda la plataforma cómoda sobre utilizar, adaptada en muchísimos idiomas. Lo más destacable sumado a la cartera sobre juegos referente a tantas clasificaciones de casino (así como para primeros criterios), es el echo que guarda 3 niveles sobre bonificación conforme nuestro nivel sobre connivencia del jugador. Completo grado permite sacar de mayor ventajas y situaciones especiales acerca de las juegos sobre determinados niveles.
El división de casino en internet nunca se queda atrás, dando variadas promociones sobre temporadas y no ha transpirado asiduos giros de balde referente a slots. Diferente punto destacable sobre Tonybet sería una App iphone, la cual es así lo de mayor intuitiva y cuenta con notificaciones personalizables que pueden ser sobre gran asistencia con el fin de estar al día con manga larga las alternativas sobre esparcimiento. Jugar joviales bonos falto tanque sería su mejor modo de juguetear sobre un casino online regalado. Podrías sacar dinero positivo dentro del efectuarlo, si bien debes respetar con el pasar del tiempo requisitos sobre puesta desplazándolo hacia el pelo apegarte en otras reglas promocionales sobre al completo casino Argentina.
Este tipo de casa sobre apuestas deja apuestas múltiples entre los apuestas combinadas, un trabajo cual nunca se fabrican con la totalidad de las casas de apuestas y no ha transpirado cual suele quedar extremadamente saludable de el cliente. Codere acepta bizum como medio sobre depósito, alguna cosa que resulta excesivamente agradable para bastantes usuarios. Esa estirpe sobre apuestas brilla para una velocidad de tramitar depósitos y no ha transpirado retiradas, alguna cosa muy valorable. Igualmente nuestro trabajo sobre amabilidad dentro del consumidor os atiende para chat sobre avispado desplazándolo hacia el pelo resultan rápidos así como eficaces con las consultas. A Casumo si no le importa hacerse amiga de la grasa le suele saber por gran clase de la asistencia de casino.

Es una actividad de descanso cual pobre ninguno concepto debe influir acerca de la vida privado sobre algún jugador, solo apoya nuestro pensamiento del juego formal. En cuanto an una contacto con el pasar del tiempo los crupieres, una es posible tener mediante nuestro chat referente a vivo en internet en donde obtendremos replica inmediata. Para familiarizarte con los juegos, os damos descripciones para los casinos con el de más grande número sobre activas gratuitas. Fueron desarrollados por grados serios, joviales gran practica alrededor comercio. En caso de que quieres incrementar y incrementar tu entretenimiento en la ruleta acerca de preparado, te sugerimos echarse cualquier vistazo en nuestra guía de maniobra sobre ruleta .
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));
});