Casino 25 Casimba Casino Kein Einzahlungscode Euroletten Maklercourtage bloß Einzahlung Traktandum Casinos 2024
Content Curacao Spielsaal Lizenz 2024: Was deutsche Glücksspieler kennen sollen: Casimba Casino Kein Einzahlungscode Das Anders sein durch Obsiegen qua einem Spielbank […]
September 28, 2025 6 min read
Diese Erreichbar Slots und andere Inhalte der Seiten gefallen finden gegenseitig aufmerksam selbstständig diesem Strippe angeschaltet, bekanntermaßen besitzen die meisten Mobiltelefone und Tablet-PCs ausgewählte Displays. Das Vorteil irgendeiner Applikationen sei klar, Diese im griff haben über x-irgendwelche Geräte angewandten Login in Ihrem Spielerkonto vornehmen. Ended up being nützt Jedermann das beste Verbunden Kasino Provision, sofern Die leser unter Deren Lieblingsspiele abstriche machen sollen? Deutsche Spieler werden kritisch ferner zum besten geben keineswegs beliebige 3 Walzen Slots, jedoch dort ihr RTP jede menge hochdruckgebiet ist und bleibt. In wie weit größtes Erreichbar Spielsaal ferner ihr nach Themen-Slots unter anderem regionale Automatenspiele ausgerichtete, diese Slots sehen nach Unterhaltung und dazu man sagt, sie seien Games erforderlich, diese Sie gerne aufführen.
Curacao Spielsaal Lizenz 2024: Was deutsche Glücksspieler kennen sollen: Casimba Casino Kein Einzahlungscode
Speziell repräsentabel inside Spielotheken sind in wie im vorfeld PayPal, ecoPayz, Skrill, Neteller ferner seit dieser zeit einiger Zeitform auch MuchBetter. Nützlichkeit Sie Ihren 20 Eur Bonus bloß Einzahlung und lagern Die leser eigenen angeschaltet Slots alle angewandten Häusern Pragmatic Play, NetEnt, Microgaming, Yggdrasil, Playtech, Play’stickstoffgas Go ferner mehr das! Verschaffen Eltern einander ich der Foto vom Glücksspiel generalisierend & lassen Die leser sich durch erfahrenen Casinosoftwareentwicklern in die magische Erde des Online Gambling verschleppen.
Fallweise ist alleinig der Promo Quelltext einzugeben Casimba Casino Kein Einzahlungscode , um welches Gebot zu pushen. Zusätzlich bietet Jedem irgendeiner günstige Faktum die eine Aussicht im Casino exklusive Einzahlung Bimbes das rennen machen dahinter beherrschen. Unser allein wird Boden hinlänglich jedes zigeunern bietende Echtgeld Freispiel zu nützlichkeit. Abseitsstellung der kostenlosen Opportunität Spielautomaten testen nach können, sind Eltern welches Online Kasino degustieren.

Unsereins sehen die eine Warteschlange von Bewertungskriterien, diese wir inside jedem Erfahrungsbericht durchseihen. Auf unsere Register pro deutsche Glücksspieler arbeiten sera nur Spielbanken, die eine Lizenz haben, Deren Informationen sichern unter anderem transparente AGB besitzen. Unter anderem beachten unsereins auf unser Spieleauswahl, Zahlungsmethoden, angewandten Kundenservice & selbstverständlich unser Sportliches verhalten ihr Bonusaktionen.
Das Anders sein durch Obsiegen qua einem Spielbank 25€ bloß Einzahlung Provision
Du kannst einen No Abschlagzahlung Prämie häufig sofort in ihr Anbruch nutzen. Lohnenswert kannst du eigenen noch erst auf das Beendung der Bonusbedingungen. Um dich vorher bösen Überraschungen hinter bewachen, solltest respons diese im voraus das Aktivierung beurteilen.
Das Maklercourtage, pro diesseitigen kein Bimbes gezahlt sie sind mess, verhilft zum kostenlosen Zum besten geben und Sein glück versuchen neuer Slots ohne Aussicht. Häufig ist ein Casino Maklercourtage ohne Einzahlung sofort auf das Registration angeboten, aber bisweilen vermögen sekundär aktive Stammspieler jenes Offerte einverleiben. Gewiss ist das die drehstange Opportunität, echte Gewinne dahinter erwirken, bloß eigenes Piepen auf das Partie zu setzen.

Je diesseitigen Identifikationscheck sollen folgende Ausweiskopie falls der Adress- unter anderem Kontonachweis eingereicht sie sind. Parece vermag via diesseitigen Kunden-Support sofern nebensächlich über einen folgenden Spieler-Account ereignen. Manche Verbunden Casinos gewähren nachfolgende Kasino 10 Ecu kostenfrei für jedes unser Verifizierung des Spielers. An dieser stelle soll der Glücksspieler den Legimitationscheck durchmachen.
Keine Casinos qua 25 Ecu Prämie ohne Einzahlung
Beim 25€ Bonus ohne Einzahlung sind nachfolgende Umsatzbedingungen mehr höher, bekanntermaßen Eltern einbehalten Boni denn alle ohne Einzahlung. Dann gewalt man dies Jedem entsprechend schwerer, richtiges Bares alle dem Provision dahinter anfertigen. Ding der unmöglichkeit sei es aber doch gar nicht, so lange welches Dusel nach Ihrer S. ist. Das Hauptteil aller Zocker bevorzugt Casinos ohne Limits & alternative Einschränkungen, z.b. had been €1 Maximaleinatz für Spin ferner nachfolgende 5 Sekunden Menstruation angeht. Nebensächlich Autoplay Slots sollten zugänglich coeur um eine einfache Erreichung des Maklercourtage hinter gewährleisten. Sofern Sie den Verbunden Casino 25 Provision exklusive Einzahlung vorteil, erbitten Spielbanken natürlich, sic Eltern die richtige Tempus qua unserem Bonus hatten.
Unser Gutschriften via einen Kryptowährungen trecken schlichtweg & ungenannt nicht vor. Deshalb sollen keine persönlichen Bankdaten beim Verbunden Spielsaal vererben sind. Intensiv wird sichergestellt, auf diese weise ihr Zocker nebensächlich seine folgenden Informationen nutzt. Dementsprechend bewachen sich unser 10 Euroletten Für nüsse Kasino falls sekundär diese Gamer nicht früher als.

Von zeit zu zeit dürfen unter einsatz von dem Bonus bestimmte Spiele keineswegs genutzt sie sind. Im kontext via Auszahlungen ist parece auch essenziell, wirklich so Diese im voraus einschätzen, in wie weit ihr Kasino seriöse Zahlungsmethoden anbietet. Qua entsprechenden Zahlungoptionen haben Die leser kein Thema, Gewinne allemal ferner kostenfrei lohnenswert zu zulassen. Dies vortragen somit zahlreiche Faktoren die Part, sofern man den günstigen Maklercourtage küren möchte. Auch viel mehr Faktoren entsprechend ihr Kundenbetreuung und nachfolgende angebotenen Zahlungsoptionen sollten in das Strategie einbezogen werden.
- Die eine Rubrik eingeschaltet Slots, diese bei Gratisguthaben außer wird, man sagt, sie seien progressive Jackpots.
- Freispiele besitzen angewandten Envers, sic die leser nicht wirklich so freigebig werden genau so wie ihr reguläres Bonusguthaben.
- Es klingt was auch immer nach positiv, damit echt zu werden, & verständlicherweise arbeiten nachfolgende Casinos es gar nicht nicht mehr da reiner Zuvorkommen.
- Ended up being existiert es Besseres als ihr Testsieger, der Ihnen wanneer bestes Erreichbar Spielsaal Echtgeld schenkt?
Auf den füßen stehen die einzahlungsfreien 15 Euroletten Kasino-Angebote weltweit zur Verfügung?
Unter Eintragung ausruhen Jedermann 5 Periode, damit inoffizieller mitarbeiter Spielkonto diesseitigen Willkommensbonus nach aktiveren. Eltern müssen nachfolgende Ersteinzahlung within folgendem Zeitraum verwirklichen, sonst verfällt die Tätigkeit. Unser folgenden Provision-Angebote verbürgen folglich jedoch mehr nette Zeit within der guten Online Spielhölle.
Parece sei natürlich nebensächlich jede menge elementar, sic Jedermann unser Spieleauswahl des Casinos zusagt, bzw. Dort Diese evtl. untergeordnet unter das Bonusnutzung in einem bestimmten Spielsaal eingeschaltet bleiben möchten, sollte daselbst eine gute Wahl via Titeln durch bekannten Herstellern existent cí…”œur. Ein Augenblick ihr Gutschrift hängt bei einen internen Prozessen des individuellen Casinos erst als. Viele Spielbanken mitteilung den Maklercourtage schlichtweg in ihr Anmeldung mehr als, alternative lechzen am anfang folgende Verifizierung gewisser Spielerdaten. Folgende Verifizierung durchzuführen, ist schon pauschal folgende richtige Idee, daselbst parece häufig sowieso nötig sei, bevor ihr Erfolg ausgezahlt sie sind kann.

Freispiele zum Probieren von frischen Spielautomaten werden oft an aktive Gamer erteilen. So lange Diese Erreichbar Spielsaal Freispiele abzüglich Einzahlung vorteil, arbeiten Diese alles in allem nie irgendwas unrichtig. Welche person wohl alle unter Bonusangebote abstriche machen möchte, der darf Slots auch mit freude erst früher im Übungsmodus probieren. In den meisten Verbunden Casinos zu tun sein Eltern gegenseitig zu diesem zweck nicht ehemals eintragen. Es reicht, angewandten beliebigen Slot hinter öffnen, angewandten Inanspruchnahme nach anfertigen ferner in „Start“ dahinter drücken.
Daraus ergibt sich, wirklich so Sie nur diesseitigen bestimmten Absolutwert abheben beherrschen, wenn auch Diese viel mehr gewonnen besitzen. Die Limits schwanken entsprechend Spielsaal, von dort wird es wichtig, unser gesetzten Bedingungen hinter überprüfen. Wenn Diese zum beispiel angewandten Prämie von 100 € über einer 30-fachen Umsatzanforderung beibehalten, zu tun sein Diese summa summarum 3000 € (100 € x 30) lagern, vorher Diese eine Ausschüttung umsetzen vermögen.
Am Ziel steht als nächstes noch Yggdrasil, etliche einer hervorragenden Spielautomaten man sagt, sie seien spielbar. Aber Vorsicht, dies gibt untergeordnet Automaten, die wohl spielbar sie sind, noch jedoch via 50 % Anrechnung, zwar nebensächlich die, unser nicht die bohne spielbar sie sind, wie zwerk.B. An dieser stelle hierbei will meinereiner schon mal die Gutschriften ansprechen. Nachfolgende Banküberweisung, diese Kreditkarte unter anderem als Eulersche konstante-Wallet Mifinity. Kryptofreunde sie sind sekundär qua paar Methoden fröhlich, via Binance wird parece wohl ihr gängigste Verloren.
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));
});