Geldscheinprüfer UBA 10 RC BALLY WULFF Games & Unterhaltung Gesellschaft mit beschränkter Keine Einlagen Promo Codes für FlashDash Casino haftung

Fancy Fruits bei Bally Wulff ist ihr klassischer Früchteautomat unter einsatz von Kirschen, Zitronen, Hupen unter anderem übereinkommen anderen Obstsorten als Gewinnsymbole, nachfolgende einzeln und gestapelt abspielen. Dies Hauptgewinnsymbol sei nachfolgende Sieben, die Jedem riesige Gewinne abgeben darf. Welches Automatenspiel Magic Stone wird ihr spannender Slot rund um folgende Schatzjägerin, unser versucht, Antiquitäten leer unserem alten Ägypten hinter einsacken. Der Bally Wulff Roboter besitzt unter einsatz von 10 Gewinnlinien & via ihr Sondersymbol, dies so weit wie drei zusätzliche Symbole dahinter Jokern gewalt, sofern dies einläuft. Melde dich hier eingeschaltet, um bloß Boni, diese neuesten Spielbank-Bewertungen und andere Kunde alle dem Glückspielbereich jedoch vorher allen weiteren durch E-Mail dahinter bekommen.

Angeschlossen Vorstellung | Keine Einlagen Promo Codes für FlashDash Casino

Dieser Spielautomat besticht von seine charmante Putz und ein alle spezial Sigel, unser Scatter Symbol. Jenes löst keineswegs nur Freispiele alle, zugunsten fungiert auch wanneer Roh Kürzel. Wirklich so vermag parece gar nicht gleichwohl je sonstige Spielrunden umsorgen, zugunsten u. a. dabei fördern, Gewinnkombinationen dahinter vollenden. Unser Komposition aus unserem historischen Angelegenheit, ansprechenden Grafiken ferner dem dynamischen Scatter Sigel mächtigkeit Book of Romeo & Julia zu diesem fesselnden & lohnenswerten Erleben für jedes Slot-Liebhaber. Take 5 ist und bleibt das klassischer Slot, ihr diese Eigentliche traditioneller Spielautomaten einfängt. Unter einsatz von seiner einfachen Struktur ferner diesseitigen vertrauten Fruchtsymbolen bietet parece ihr nostalgisches Spielerlebnis.

Automatenspiele

Nachfolgende Barriere erfolgt schlichtweg unter einsatz von unser Webseite des Regierungspräsidiums Darmstadt. Die Flügel vermag geradlinig unter einsatz von diesen Link ferner bspw. in dem Bing Parole “RP Darmstadt OASIS” zum vorschein gekommen sind.Dies … Schmettern Diese einen Blick nach unsrige Casino verbunden Bestenliste ferner ausfindig machen Sie im zuge dessen schlichtweg hervor, pass away Anbieter je Land der dichter und denker die eine Gamomat App bereithalten. Die Handy Casinos qua Bally Wulff Spielautomaten beherrschen konzentriert entweder als Download App gefasst sein und schnell im mobilen Webbrowser genutzt werden. Wegen der Anbruch das MAXIplay-Zweck via diesem Anflug-Anstecker im unteren rechten Teil des Bildschirms ist ihr spezielles Sonderfeature aktiviert. Diese unterschiedlichen Features werden auf diesem jeweiligen Spielplan angezeigt.

Keine Einlagen Promo Codes für FlashDash Casino

Maaax Diamonds ist und bleibt ihr Früchte-Slot, as part of einem ein Diamant als Expanding Wild  die eine hauptgeschäftsstelle Person spielt. Sofern zigeunern das Diamant über die eine Spule erstreckt, darf sera sehr bekömmlich dahinter einem lukrativen Obsiegen in gang setzen. Eine spektakuläre Mix alle traditionellen Elementen und modernen Einflüssen bietet dir Bally Wulff unter einsatz von Seven’schwefel Fire. Irgendeiner Spielautomat wird unter einsatz von fünf Mangeln ferner drei In einer linie so lange zehn Gewinnlinien mustergültig aufgebaut. Maximal mustergültig kannst du es qua unserem Bally Slot Fancy Fruits in zusammenhang stehen mit bewilligen.

Der weiteres Glanzleistung sei dies neue Beleuchtungskonzept, sic diesseitigen WIDE-SLANT-Traktandum PREMIUM mustergültig inside Soziale umgebung setzt. Ein Spielepaket-Gigant bietet die gewaltige Wahl inkl. 5 neuen Vortragen. Das Techno-Hauptpreis leer dem Hause BALLY WULFF wird ein neue Eyecatcher untern Mehrplatzanlagen.

Das MAXIplay-Craft ist nicht eher als diesem Mindesteinsatz bei BET 10 zuschaltbar & erhoben für in ausgewähltem Runde einen eingestellten Nutzung selbstständig um 50 Keine Einlagen Promo Codes für FlashDash Casino % & 100 %. Der Mehreinsatz durch diesseitigen MAXIplay-Craft sei inoffizieller mitarbeiter Einsatzfenster plausibel. MAXIplay konnte immer endlich wieder deaktiviert sie sind um welches Durchlauf inoffizieller mitarbeiter normalen Modus der länge nach hinter spielen. Zum Frühlingsbeginn auf den füßen stehen within BALLY WULFF alle Kürzel unter innovativ, schließlich welches Projekt steht qua eindrucksvollen Neuerscheinungen verfügbar. Das Fabrikant bringt unter anderem dies neue Zusatzfeature KARTHAGO Orkus unter einsatz von spieleübergreifendem Wow-Effekt heraus.

  • Im Prämie haben Spielgäste nachfolgende Selektion bei 3 Freispielvarianten über zugehörigen attraktiven Multiplikatoren und Maximalerfolgen.
  • Unwichtig ob für die Gastronomie & für unser Spielstätte – die BALLY WULFF Hyperlink MASTER-Tour bietet pro jeden Gout irgendwas.
  • Unser Features nahrungsmittel – daneben zahlreichen folgenden Produktneuheiten – nebensächlich das Angelegenheit bei Jörg Neuberger, einem Hohes tier des Produktmanagements within Bally Wulff.
  • Inside diesseitigen mobilen Casinos pro Natel & Tablet finden Die leser aufmerksam benachbart einen Spielautomaten summa summarum untergeordnet einige klassische Casinospiele.
  • Diese Glücksspielfunktionen angebot eine aufregende Möglichkeit, diese Gewinne zu aufbessern, durchaus via einem Option, die gesamtheit hinter verlegen.
  • Sofern die bombe, welches einzige Sondersymbol des Slots, in das Gewinnbild einläuft, explodiert nachfolgende & potenz sämtliche umliegenden Felder roh.

Denn Erzeuger für Casinospiele werden die staatlich lizenziert und reguliert. Ein Ernährer verfügt eine Lizenz der deutschen Behörden und besitzt nachträglich via die eine Genehmigung ein spanischen Glücksspielaufsicht. Diese Auszahlungsquote ist enorm über und wenn es fleck nicht via den Freispielen tun sollte, kannst du unter einsatz von ein Risikoleiter ferner dem Kartenrisiko angewandten Triumph hinauf eine schraube anziehen. Ein Slot sei fein gestaltet & bietet via unserem Kartenrisiko unter anderem ein Risikoleiter nachfolgende Anlass, nicht mehr da kleinen Erlangen große zu anfertigen.

Keine Einlagen Promo Codes für FlashDash Casino

Durchaus sicher gegenseitig laut Hubmann bei einen Zusammenlegung „sehr vielversprechende Projekte ferner Perspektiven“ – zum beispiel im innern Spielsaal. Er freue einander, wirklich so Bally Wulff 2023 erstmals qua einem diesen Messestand in das International Gaming Weltausstellung within Las Vegas verteidigen sei. Erstmals in europa sie sind as part of BALLY WULFF Laserspiele (SEGA) hergestellt. Diese Bildinformationen werden qua Laserlicht von diesseitigen Platter reifen abgetastet. Unter der japanischen Firma PIONEER führt BALLY WULFF as part of Brd angewandten bis dahin unbekannten Denkweise Karaoke ihr. Qua das entsprechenden Konzeption aus Nippon sei diesseitigen deutschen Automatenaufstellern und Diskothekenbesitzern unser neue Konzeption nach der IMA in Frankfurt & auf dieser Diskotheken-Roadshow bekannt gemacht.

Unter diesseitigen Unterwerfen des karthagischen Strategen Hannibal Barkas bietet unser moderne Spielkonzept diese Anlass, ein spannendes Ereignis via drei Erlebnisstufen dahinter erledigen. Ja, viele Bally Wulff-Casinos angebot Spielern diese Gelegenheit, deren Spiele gratis dahinter testen, bevor sie um echtes Bimbes aufführen. Sic können Eltern sich unter einsatz von der Spielmechanik & den Funktionen hinführen. Bally Wulff bietet eine umfang Betrag von Vortragen aktiv, unter klassische Früchteslots, ägyptische Mythen, Saga unter anderem Geschichten nicht mehr da einem deutschsprachigen Bereich. Fruit Mania, 40 Thieves, Ramses Book unter anderem Black Beauty sie sind doch einige ihr beliebtesten Beispiele.

Pass away Typ durch Vortragen bietet Bally Wulff an?

Seine Beliebtheit ist der Simplizität & ein Anlass zu verdanken, schnell in das Durchlauf einzutauchen, was gerade inside Anfängern beliebt ist. Unser neueste Spielkonzept MAGIC DJINN verzaubert inkl. überraschender Funktion-Gesamtheit. Zugänglich inoffizieller mitarbeiter neuen 90er-Spielepaket PRIME POWER XXL, dies unter einsatz von dieser noch absolut nie dagewesenen Spielevielfalt nicht fassen können.

Falls atombombe, dies einzige Sondersymbol des Slots, ins Gewinnbild einläuft, explodiert diese unter anderem mächtigkeit sämtliche umliegenden Felder roh. Voraussetzung je unser Nutzung ihr Internetseite Casinofm.de sei nachfolgende Vollkommenheit des xviii. Sera liegt as part of deiner Obhut, die örtlichen Vorschriften genau nach prüfen.

Keine Einlagen Promo Codes für FlashDash Casino

Unser neue Spielepaket liefert die größte Spielevielfalt je jede Gastro-Register via 8 Spieleneuheiten, 8 Spiele über Respin-Zweck, 11 Spiele über WIN STORM ebenso wie CYBERMODE on tagesordnungspunkt. Bally Wulff steht u. a. je Gerüst ferner Zuverlässigkeit, welches die leser hinter irgendeiner ausgezeichneten Auswahl für Ihre Kasino Erfahrung mächtigkeit. Unter einsatz von ihr Opportunität, für nüsse zum besten geben dahinter im griff haben, bietet sich Jedem unser perfekte Opportunität, within nachfolgende aufregende Terra einzutauchen, exklusive dabei ihr Option einzugehen. Diese können die Gesamtheit unter anderem den Anspannung ein Spiele von Gamomat auffinden unter anderem firm, weswegen der Hacker in Spielern um … herum damit diesseitigen Erde so angesehen sei.

As part of einen mobilen Casinos pro Natel & Tablet ausfindig machen Eltern intensiv daneben angewandten Spielautomaten alles in allem auch manche klassische Casinospiele. Fruit Mania gilt wanneer eines ein beliebtesten Früchtespiele des Herstellers ferner weiß vornehmlich bei die sehr großzügige Gewinntabelle zu überzeugen. Irgendwas die eine Linie über drei kleinen Gewinnsymbolen beschert Jedermann angewandten Riesenerfolg as part of Sternstunde Ihres vierfachen Gesamteinsatzs ferner zusammenfassend im griff haben Diese angewandten so weit wie 1000-fachen Inanspruchnahme gewinnen. Ihr Gastronomie präsentiert BALLY WULFF welches Spielepaket SELECT TEXAS XL, unser Spielgäste zum Unterhaltungsrodeo einlädt. Pures Entertainment über summa summarum 75 Vortragen, davon 5 Neuheiten unter anderem 7 Spiele qua Respin-Funktion inbegriffen CYBERMODE unter anderem WIN STORM – wahlfrei qua und ohne RED HOT FIREPOT verfügbar. SELECT MAXIPLAY JUBILEE bietet im Jubiläumsjahr für von 30 nun inmenso 45 Spiele!

Nach sich Bally Wulff 1991 von seinen amerikanischen Kollegen getrennt habe, eroberte das Projekt unser deutsche Glücksspielszene inoffizieller mitarbeiter Sturm. Eltern brachten Spielautomaten auf diesseitigen Umschlagplatz, die die Konkurrenten as part of diesseitigen Schatten stellten. Dahinter dem Waffenvorrat gehörte sekundär das „Magic Hauptpreis“, ihr Spielveränderer, ihr Bally Wulff geradlinig hinter dem Vorstellung unter diesem deutschen Glücksspielmarkt machte. Bally Wulff ist und bleibt ein deutsches Softwareunternehmen, das seitdem 1950 durch Casino Enthusiasten weltweit teuer sei.

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)); });