Mr Bet Casino Testbericht Luxembourg, Infos Über Mister Bet 10 Bonus

Mr Bet Casino Übersicht 2024 Spiele & Casino Bonus!

Sie setzen innerhalb der Spiele ft, da du kostelose” “Rotates und Geld erhältst, um in perish verschiedenen Levels welcher Spiele zu gelangen. Es bietet viele große Auswahl a good Spielen, und ist als mobiles On line casino optimiert. Sie müssen es nur noch immer über den Administrationslink aktivieren und Du Profil vervollständigen. Vergessen Sie nicht, die Datenüberprüfung durchzuführen, bevor Sie Ihre erste Mr Bet Auszahlung vornehmen.

Die MrBet Plattform ist vonseiten der Malta Gambling Authority lizenziert und reguliert, was” “für österreichische Spieler zweifellos ein gutes Vorzeichen ist. Dies liegt daran, dass die Glücksspielagentur als eine der besten Regulierungsbehörden für Online-Spiele in Branche gilt. MGA überprüft regelmäßig Casinoseiten, um sicherzustellen, wenn sie den Spielern Sicherheit und Transparenz bieten. Sind die Bonusbedingungen akzeptabel, dann schneidet das Internet casino in unserem Check gut ab.

Fazit: Casino Mit Bekannten Angeboten

Der Neukundenbonus ist das Flaggschiff unter den unterschiedliche Casino Bonusangeboten. Wer die Mr Bet Seite zum ersten Mal besucht, deinem wird sofort dieses attraktive Bonus Angebot ins Auge springen. Das Mr Guess Bonuspaket gehört zu solchen, wo guy die Schleife wirklich nicht vorsichtig abzieht, jedoch eher abreist. Mr Bet Casino ist auch eine relativ unter Spieleplattform, die Foco Entertainment gehört. Seit seinem ersten Auftritt im Internet im or her Jahr 2017 sind immer mehrere Jahre vergangen. Während dieser Zeit hat das Spielcasino eine gute Sammlung von Spielautomaten, Tischspielen und Live-Spielen angehäuft mr bet.

Der Mr Bet Kundensupport ist natürlich per Live Chat, Telefon-Hotline und Email erreichbar. Die Mitarbeiter nehmen ihre Ausarbeitung ernst und verfügen über die” “nötige Kompetenz, um uns bei deinem Anstehen sofort helfen zu können. Der Kundenservice ist auf Deutsch verfügbar, welches heute leider keine Selbstverständlichkeit ist.

Mr Bet Spielkategorien – On The Internet Spielautomaten, Tischspiele Darüber Hinaus Video Slots

Schließlich offeriert der Betreiber noch eine spezielle Unterseite für alle Sportwetten-Fans, um Wetten zu platzieren und Spiele zu verfolgen. Mr Guess bietet Spielern unglaublich viele Alternativen für Einzahlungen und Abhebungen. Wer sein Spielerkonto per Sofortüberweisung, giropay oder aber Neosurf auffüllen möchte, kann sich einfach dieser Möglichkeiten bedienen. Auch die beliebte paysafecard findet den Weg ins Mister Bet Casino. Falls du im On the internet Casino mit paysafecard bezahlen willst, findest du auf dieser Sonderseite weitere Examen” “dazu. Und Fans von Kryptowährungen wie Bitcoin, Litecoin und Ethereum werden ebenfalls bedient. SlotsUp ist eine gewisse Glücksspiel-Website der frischen Generation, die kostenlose Glücksspiele anbietet, mit dem Ziel, alle kostenlos verfügbaren Spielautomaten zu überprüfen.

Obwohl dieses Casino alle erforderlichen Dokumente eingereicht hat, hat es keinen Zeitrahmen für pass away Untersuchung angegeben. Ein besonders Merkmal des digitalen Zeitalters ist die Internet-basierte Interaktion auf mobilen Endgeräten. Erfreut über expire Freiheiten der Flexibilität besuchen die Zocker von heute dieses Casino gerne im übrigen über ein Touch screen phone. Viele Glücksspielanbieter haben die Gunst dieser Stunde erkannt darüber hinaus ermöglichen Spielern ausgesprochen gute mobile Online casino Apps Erfahrungen zu sammeln.

Anbieter Vergleich

Natürlich können Sie die Dienste von Websites nutzen, die alle gängigen Spielotheken überprüfen, aber auf welche weise finden Sie pass away besten Casinoanbieter, perish alle Ihre Wünsche erfüllen? Mr Bet Casino bietet Ihnen nicht nur ehrliche Boni, sondern darüber hinaus ein ausreichend breites Spielangebot, in unserem jeder einen Spielbereich für sich hat. Hier können Sie nicht nur klassische Casinospiele wie Roulette, Blackjack und Poker spielen, sondern im übrigen wunderschöne 3D-Slots von beliebten Spieleentwicklern aus der ganzen Welt genießen. Wenn dieses” “Casinos ein Betrug ist natürlich, werden wir Sie in unseren Beiträgen darüber informieren.

Preisgekrönte Entwicklerteams auf welche weise NetEnt oder Play’n GO stellen dir Spiele in bester Qualität bereit. Aber auch kleinere Provider wie Yggdrasil oder aber Iron Dog Facility können mit family room Branchengrößen mithalten. Nicht zu vergessen sind immer wieder die bekannten und vertrauenswürdigen Bezahldienste, über denen du dein Spielerkonto aufladen oder aber Gewinne auszahlen lassen kannst. Ein schneller und vor allem sicherer Zahlungsverkehr ist natürlich bei diesem Anbieter garantiert, sodass man keine Angst vor Mr Bet Täuschung oder Abzocke haben musst.

Welche Online Online Casino Spiele Lohnen Einander Für Mich?

Gehst du links einen Aktionen-Fläche, entdeckst respons kein bisschen wirklich einen Mr Bet Spielbank Willkommensbonus internet marketing vorfeld. Ganz Selektion ihr Zahlungsoptionen ist sekundär gelungen ha sido sind keine folgenden Gebühren pro Welches- unter anderem Auszahlungen erhöht. Zur Kontaktaufnahme im griff haben Unser einen Chat nützlichkeit nachfolgende die eine, E-E-mail information. Der Spieler aus Thailand hat, nach wie vor bevor er jene Beschwerde einreichte, eine gewisse Auszahlung beantragt, aber leider sind die Gewinne bis zurzeit noch nicht ausbezahlt worden. Der Spieler aus Norwegen hat einen Gewinn von 5. 000 Euro, der aufgrund eins laufenden KYC-Verifizierungsprozesses einbehalten wurde.

Auf dieser Webseite von Mr. Bet DE befindet sich die Rubrik Online Sportwetten snabbt unter dem Menüpunkt Casino. Wie erwartet, können deutsche Spieler Wetten platzieren darüber hinaus Spiele und Ereignisse aus verschiedenen Sportarten verfolgen. Bei unserem Überangebot an Glücksspielseiten im Internet ist es ziemlich schwierig, eines der kürzlich gestarteten Casinos auszuprobieren und einen frischen Nervenkitzel beim Glücksspiel zu erleben.

Die Rechtslage Für Glücksspiel In Deutschland

Eine weitere positive Sache für die Plattform ist, dass sie für diejenigen verfügbar ist, die Onlinecasinos gerne unterwegs über ihre mobilen Geräte, Tablets oder Smartphones, spielen. Dies bedeutet, dass MrBet Web site die Skins automatisch aktualisiert, um sie kompatibel zu machen. Hinzu kommt expire Tatsache, dass perish Spiele dasselbe realisieren, und das mächtigkeit sie zu einem sorgenfreien Erlebnis für diejenigen, die einander über ihr Useful anmelden. Vor allem sollte Ihre Auszahlung vom Spielcasino freigegeben werden und vorwärts wird eine Identitätsprüfung durchgeführt, was bis zu einigen Tagen dauern kann.

Haben Sie den ganzen Spaß, den Sie wollen, indem Sie 2600+ kostenlose Glücksspiele spielen – ohne Download, Registrierung oder aber Einzahlung. Die Spielauswahl ist ziemlich beeindruckend und hier kannst du bestimmt das perfekte Spiel für dich finden. Und natürlich ist die Seite gut sicher und bietet eine gewisse mobile App für mehr Komfort. Du wirst es genießen, auf Mr. Bet zu spielen, also wäre es vernünftig, heute noch ein Konto zu erstellen und dich auch davon zu überzeugen.

Entdecken Sie Den Extra Chilli Slot Machine Bei Mr Bet

Bevorzugen Sie eher, gegen den echten Dealer über spielen, sind die Live Casino Spiele genau das Richtige für Sie! Natürlich bieten wir ebenso eine Live-Version von Blackjack an, bei der Ihnen die Karten von einem echten Dealer gezogen sein, der per Livestream übertragen wird. Wenn Sie Online Blackjack im Casino on-line spielen, treten Sie gegen einen Computer an. Zu Beginn jeder neuen Spielrunde werden die Karten von einem virtuellen Kartendeck gezogen.

Benutzern aus Ländern, within denen Online-Glücksspiel illegal ist, ist das Spielen auf Mr. Bet untersagt. Alle anderen Kunden müssen die Allgemeinen Geschäftsbedingungen lesen, um perish Dienstleistungen auf der” “Website nutzen zu können. Wir bieten Ihnen verschiedene Glücksrad-Spiele auf welche art Monopoly Live oder aber First Person Dream Catcher, die reichlich Spielspaß versprechen.

Betandplay Casino Check: 50 Freispiele Ohne Einzahlung

Durch die Zusammenarbeit mit GamCare oder Gamblers Anonymous wird jeder Spielerschutz gewährleistet. Die Quoten für Einzelwetten, Kombiwetten und Systemwetten können sich unter diesem Wettanbieter definitiv sehen lassen. Und bei einer Reside Wette springen pass away Quoten nicht selten urplötzlich in einen zweistelligen Bereich. Falls jemand virtuelle Sportwetten bevorzugt, bewegt seinen Cursor einfach wirklich auf eine beliebige E-Sport Wette, wählt einen Favoriten sowie platziert seinen Anwendung auf dem Wettschein. Hinzu kommen perish Tischspiele, die im or her Mr Bet On line casino unter Brettspiele dabei sind. Hier tummeln sich sämtliche Roulette und Blackjack Typen sowie einige Online casino Poker Spiele.

Millionen von Spielern auf der ganzen Welt erstellen täglich Spielerkonten in virtuellen Casinos. Aus Spielotheken bekannte Spielautomaten sind längst in der Internetversion realisiert. Daher konnten wir keine weiteren Nachforschungen anstellen und die Vorhaltung wurde zurückgewiesen. Jedes Mal, wenn Sie im Chat sprechen, heißt es 24 Stunden, aber ha sido kann zu Verzögerungen kommen, aber ich glaube nicht, wenn die Einzahlung jetzt erfolgt, aber perish Auszahlung ist eine gewisse Aufgabe.

Das Angebot I Am Detail

Die 2017 gelaunchte, elegante und einfache Plattform ist mit 1 guten Sammlung von Spielautomaten, Tischspielen sowie Live-Games erfolgreich. Um unsere Mr. Bet Bewertung zusammenzufassen,” “möchten wir sagen, wenn dieses Online-Kasino eindeutig eine anständige darüber hinaus unterhaltsame Glücksspielerfahrung bietet. Mr. Bet offeriert eine große Auswahl an progressiven Jackpot-Slots, aus denen du wählen kannst, 1 deine Chancen auf eine große Auszahlung zu erhöhen. Es gibt Turniere innerhalb des Online-Kasinos, unter denen du das ganze Jahr über gewinnen kannst. Online-Slots tätigen immer den größten Teil der Spiele in jedem Casino aus.

Zudem können Gewinne oft Wettanforderungen unterliegen, bevor sie ausgezahlt werden. Spieler sollten daher die Geschäftsbedingungen genau lesen, 1 potenzielle Einschränkungen zu verstehen. Wenn Sie Online” “Casino Freispiele ohne Einzahlung nutzen, machen Sie grundsätzlich nie sehr falsch. Wer doch ganz auf Bonusangebote verzichten möchte, jeder darf Slots im übrigen gern erst einmal im Übungsmodus untersuchen. Bei den meisten Online Casinos müssen Sie sich dafür nicht einmal registrieren. Mit dem Online Casino können Sie Ihr Wohnzimmer throughout eine echte Spielhalle verwandeln.

Der Spieler Hat Mühe, Seine Bonusgewinne Abzuheben

Beim Kampf jeder Drehungen geht sera darum so man sicher Punkte wie möglich an einem Glücksrad zu erdrehen. Aufmerksam steht die Qualität im Vordergrund, denn es man sagt, sie seien pass away mehrheit bekannten Softwareentwicklern verletzend das Gewerbe darstellen. Bei unserem Blackjack musst man etwas 50 Cent within dieser Beutel hatten, über ein vors z, teilhaben zu beherrschen. Within Parece- unter anderem Auszahlungen lohnt einander ihr Ansicht in die Kostenregelungen passes away Spielbank Versorger. Dies gewonnene Piepen ist echt und bleibt doch kein Bonusguthaben, für jedes Echtgeld ferner du kannst est dir bloß Umsatzbedingungen ausschütten bewilligen. Spielen über Bonusguthaben weiterbilden dich nach keinen angelegenheit für jedes anderen Maklercourtage.

Sie müssen allesamt Freispiele während dieses Zeitraums verwenden, und sie werden von Ihrem Konto weg. So sind jetzt erst erschienene Titel von Anfang the im BetAndPlay Gambling establishment verfügbar, während Zocker in anderen Online Casinos teilweise nach wie vor darauf warten müssen. Klassische Tischspiele, actuelle Varianten davon sowie Slots von aller Art sind in dem Online Online casino reichhaltig vertreten.

Diese Seite Empfehlen

Wer einander mit Fußball,” “Tennis games oder Basketball auskennt und über den sportlichen Scharfsinn verfügt, der kann über etwas Glück living room richtigen Tipp landen. Dir stehen über 20 verschiedene Sportarten zur Auswahl bereit, darunter Pre-Matche-Wetten ebenso Live Wetten, bei wem du direkt ins Geschehen eingreifen vermagst. Diese Vielfalt hast du nicht wirklich dem Mr Bet Casino allein über verdanken, auch die Softwarehersteller tragen ihren Teil dazu unter – schließlich einstellen sie die zahlreichen Spiele zur Verfügung.

Der solches Verbunden Spielbank ist Pass away Gewinne gar nie und nimmer mindern, zugunsten Jedem wanneer den neuesten Kunden sogar substitute Boni offerieren. Respons wirst etwas ansprechendes sehen, sic einander manche Gamer je spezielle Apps durch die angebotenen Boni entscheidung treffen. Bei keramiken kannst Respons Deine Gewinne qua Visa, Skrill, Neteller und andere beliebte Zahlungsoptionen within ein paar wie 24 Stunden einbehalten. Curacao ist echt und bleibt ihr Standort, am jene Mr Bet Spielsaal Lizenz ausgestellt worden ist und bleibt.

Neuseeland: Online Casinos Sollen Legalisiert

Der nächste Punkt im Mister Bet Casino Testbericht sind die Werbeangebote des Betreibers, beginnend mit dem Willkommensbonus. Neueinsteiger können” “den 400%igen Willkommensbonus bis zu 1500 € auf die ersten vier Einzahlungen je nach der Registrierung auf der Webseite erlangen. In der Main receiving area gibt es unglaublich viele Videospielautomaten zu unterschiedliche Themen, darunter Fantasy, Action, Abenteuer darüber hinaus sogar einige Hotshots, die auf Blockbuster-Hits basieren. Wenn guy also ein echter Spielautomaten-Fan ist, ist es einem within diesem Online On line casino sicher nicht langweilig, wenn man einander in der Lobby befindet. Ist eine gewisse Glücksspiellizenz als Evidenz für Fairplay nicht ausreichend, sorgen unabhängige Prüfstellen für zusätzliche Sicherheit.

Auch hier bleibt das Mr Bet Online casino online in Deutschland seinen exzellenten Criteria treu und bietet eine exquisite” “Auswahl an Tischspielen auf welche art Roulette, Blackjack, Baccarat und Poker. Nachfolgende polnischen Abfertigungsstellen guy sagt, sie seien dergestalt überlastet, wirklich so einander diese Grad doch um haaresbreite drei Kilometer indicate für tag weiterbewegt. Unser Spieler auftreiben Spiele bei Sensible Play, Net Vergnügen, Evolution Gaming bauer anderem anderen. Die Grundstock von Aufführen, die Mr. Wager energy fruits $ 5 Kaution anbietet, umfasst Spielautomaten, Live-Drogenhändler und Tischspiele.

Gates Involving Olympus

Die Mitarbeiter des Internet casinos verarbeiten Auszahlungsanfragen internet marketing Laufe des Tages. Die Dauer der Auszahlung hängt von der gewählten Konzept und dem Auszahlungsbetrag ab.” “[newline]Wenn der Betrag a couple of. 000 Euro übersteigt, kann eine zusätzliche Prüfung stattfinden. Auch wenn das Konto nicht verifiziert ist natürlich, kann sich dieser Zahlungsvorgang verzögern. Sie können immer ein neues aufregendes Runde finden, das Sie nicht nur aufheitern wird, sondern im übrigen die Chance offeriert, echtes Geld über gewinnen. Darüber dieses Geld Dem Sparkonto gutgeschrieben wird, zu tun sein Sie unser Telefonnummer via Einem Konto konstruieren. Untergeordnet diese Anfrage lässt einander letzter schrei auf keinen fall endlich beantworten.

Sie können sich sowohl auf der mobilen wie auch auf welcher Desktop-Version der offiziellen Mr Bet Seite registrieren. Die Liste der zulässigen Zahlungssysteme führt das On line casino in den allgemeinen Regeln auf. Skrill oder Neteller von den akzeptablen Einzahlungsmethoden für den Bewahrung eines Bonus ausgeschlossen.

Finden Sie Uns Bei Social Media

Die Spielerin aus Spanien hatte einen Serverprobleme, die sie nach einem Gewinn daran hinderten, bei die Seite kklk Online-Casinos zuzugreifen. Wir haben den Zocker um eine Bestätigung gebeten, ob dasjenige Problem behoben wurde, haben jedoch keine Antwort erhalten. Es gibt sogar so viele Spiele, dass es schwierig sein könnte, sich zu entscheiden, wo guy anfangen soll. Andere bemerkenswerte Spielgenres, die Sie bei Mister Bet Casino on the web finden können, sind Baccarat, Dragon Gambling, Hi Lo, Dadu und Rubbelkarten. Unnötig zu erwähnen, wenn jeder der über genannten Titel within mehreren Varianten angeboten wird. Der Bereich der Tischspiele ist auch zweifelsohne eine welcher beliebtesten Kategorien bei der Online Glücksspielszene.

Die elegante und einfache Plattform ermöglichte es dem Site, eine große Stammkundenbasis zu gewinnen. Um erfolgreich zu sein, muss man allesamt Merkmale der Glücksspielbranche kennen und within der Lage sein, die Wünsche welcher Spieler zu erfüllen. Durch seinen Geschäftsansatz gelang es ihm, den Plan jeder meisten Spieleplattformen umzusetzen, nämlich die große und ständig wachsende Anzahl von Spielern auf der Plattform. Welche Slots sind oftmals erlaubt, wie meistens muss der Added bonus umgesetzt werden, wie hoch darf man maximal setzen und wie lange ist natürlich der gratis Reward gültig.

So Haben Sie Ihr Cash Zurück

Allein welches Inhalt deiner Einzahlungen entscheidet unter einsatz vonseiten deinen Befindlichkeit. Da sehen wir durchaus within ein Gewerbe zusätzliche Angebote entdeckt, diese uns viel mehr vom hocker reißen. Unser Online-Bahnsteig läuft within einem Mr. Bet Spielsaal Probe in ein Leitung bei Faro Unterhaltung N. Vanadium unter einsatz von Glücksspiellizenz in Curaçao (No. 1668/JAZ).

An dieser Einhaltung weiterer Sicherheitsstandards haben wir außerdem erkannt, dass unter Mr Bet Abzocke ausgeschlossen werden muss. Eine moderne 256-bit TLS-Verschlüsselung der Casa Cloudflare Inc. sorgt dafür, dass deine Daten für ungewollte Mitleser im Netz unzugänglich sind. Weiterhin kooperiert die Spielothek mit Hilfsorganisationen auf welche weise Gamblers Anonymous und GamCare, um dich vor einem problematischem Spielverhalten zu schützen. Als Spieler müssen Sie sich wenig Gedanken machen, dass Sie strafrechtlich verfolgt haben, weil Sie das illegale On the web Glücksspiel von Mr. Bet genutzt besitzen. Sofern Sie wirklich nicht wussten, dass sera sich um ein Online Casino weniger entsprechend gültige Lizenz handelte, trifft Sie keine Schuld. Trotz allem ist sera empfehlenswert, dass Sie” “als Verbraucher einen Anwalt einschalten, um gegen den Glücksspiel-Anbieter vorzugehen.

(function () { var searchreplace = (function () { 'use strict'; var Cell = function (initial) { var value = initial; var get = function () { return value; }; var set = function (v) { value = v; }; var clone = function () { return Cell(get()); }; return { get: get, set: set, clone: clone }; }; var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); function isContentEditableFalse(node) { return node && node.nodeType === 1 && node.contentEditable === 'false'; } function findAndReplaceDOMText(regex, node, replacementNode, captureGroup, schema) { var m; var matches = []; var text, count = 0, doc; var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap; doc = node.ownerDocument; blockElementsMap = schema.getBlockElements(); hiddenTextElementsMap = schema.getWhiteSpaceElements(); shortEndedElementsMap = schema.getShortEndedElements(); function getMatchIndexes(m, captureGroup) { captureGroup = captureGroup || 0; if (!m[0]) { throw new Error('findAndReplaceDOMText cannot handle zero-length matches'); } var index = m.index; if (captureGroup > 0) { var cg = m[captureGroup]; if (!cg) { throw new Error('Invalid capture group'); } index += m[0].indexOf(cg); m[0] = cg; } return [ index, index + m[0].length, [m[0]] ]; } function getText(node) { var txt; if (node.nodeType === 3) { return node.data; } if (hiddenTextElementsMap[node.nodeName] && !blockElementsMap[node.nodeName]) { return ''; } txt = ''; if (isContentEditableFalse(node)) { return '\n'; } if (blockElementsMap[node.nodeName] || shortEndedElementsMap[node.nodeName]) { txt += '\n'; } if (node = node.firstChild) { do { txt += getText(node); } while (node = node.nextSibling); } return txt; } function stepThroughMatches(node, matches, replaceFn) { var startNode, endNode, startNodeIndex, endNodeIndex, innerNodes = [], atIndex = 0, curNode = node, matchLocation = matches.shift(), matchIndex = 0; out: while (true) { if (blockElementsMap[curNode.nodeName] || shortEndedElementsMap[curNode.nodeName] || isContentEditableFalse(curNode)) { atIndex++; } if (curNode.nodeType === 3) { if (!endNode && curNode.length + atIndex >= matchLocation[1]) { endNode = curNode; endNodeIndex = matchLocation[1] - atIndex; } else if (startNode) { innerNodes.push(curNode); } if (!startNode && curNode.length + atIndex > matchLocation[0]) { startNode = curNode; startNodeIndex = matchLocation[0] - atIndex; } atIndex += curNode.length; } if (startNode && endNode) { curNode = replaceFn({ startNode: startNode, startNodeIndex: startNodeIndex, endNode: endNode, endNodeIndex: endNodeIndex, innerNodes: innerNodes, match: matchLocation[2], matchIndex: matchIndex }); atIndex -= endNode.length - endNodeIndex; startNode = null; endNode = null; innerNodes = []; matchLocation = matches.shift(); matchIndex++; if (!matchLocation) { break; } } else if ((!hiddenTextElementsMap[curNode.nodeName] || blockElementsMap[curNode.nodeName]) && curNode.firstChild) { if (!isContentEditableFalse(curNode)) { curNode = curNode.firstChild; continue; } } else if (curNode.nextSibling) { curNode = curNode.nextSibling; continue; } while (true) { if (curNode.nextSibling) { curNode = curNode.nextSibling; break; } else if (curNode.parentNode !== node) { curNode = curNode.parentNode; } else { break out; } } } } function genReplacer(nodeName) { var makeReplacementNode; if (typeof nodeName !== 'function') { var stencilNode_1 = nodeName.nodeType ? nodeName : doc.createElement(nodeName); makeReplacementNode = function (fill, matchIndex) { var clone = stencilNode_1.cloneNode(false); clone.setAttribute('data-mce-index', matchIndex); if (fill) { clone.appendChild(doc.createTextNode(fill)); } return clone; }; } else { makeReplacementNode = nodeName; } return function (range) { var before; var after; var parentNode; var startNode = range.startNode; var endNode = range.endNode; var matchIndex = range.matchIndex; if (startNode === endNode) { var node_1 = startNode; parentNode = node_1.parentNode; if (range.startNodeIndex > 0) { before = doc.createTextNode(node_1.data.substring(0, range.startNodeIndex)); parentNode.insertBefore(before, node_1); } var el = makeReplacementNode(range.match[0], matchIndex); parentNode.insertBefore(el, node_1); if (range.endNodeIndex < node_1.length) { after = doc.createTextNode(node_1.data.substring(range.endNodeIndex)); parentNode.insertBefore(after, node_1); } node_1.parentNode.removeChild(node_1); return el; } before = doc.createTextNode(startNode.data.substring(0, range.startNodeIndex)); after = doc.createTextNode(endNode.data.substring(range.endNodeIndex)); var elA = makeReplacementNode(startNode.data.substring(range.startNodeIndex), matchIndex); for (var i = 0, l = range.innerNodes.length; i < l; ++i) { var innerNode = range.innerNodes[i]; var innerEl = makeReplacementNode(innerNode.data, matchIndex); innerNode.parentNode.replaceChild(innerEl, innerNode); } var elB = makeReplacementNode(endNode.data.substring(0, range.endNodeIndex), matchIndex); parentNode = startNode.parentNode; parentNode.insertBefore(before, startNode); parentNode.insertBefore(elA, startNode); parentNode.removeChild(startNode); parentNode = endNode.parentNode; parentNode.insertBefore(elB, endNode); parentNode.insertBefore(after, endNode); parentNode.removeChild(endNode); return elB; }; } text = getText(node); if (!text) { return; } if (regex.global) { while (m = regex.exec(text)) { matches.push(getMatchIndexes(m, captureGroup)); } } else { m = text.match(regex); matches.push(getMatchIndexes(m, captureGroup)); } if (matches.length) { count = matches.length; stepThroughMatches(node, matches, genReplacer(replacementNode)); } return count; } var FindReplaceText = { findAndReplaceDOMText: findAndReplaceDOMText }; var getElmIndex = function (elm) { var value = elm.getAttribute('data-mce-index'); if (typeof value === 'number') { return '' + value; } return value; }; var markAllMatches = function (editor, currentIndexState, regex) { var node, marker; marker = editor.dom.create('span', { 'data-mce-bogus': 1 }); marker.className = 'mce-match-marker'; node = editor.getBody(); done(editor, currentIndexState, false); return FindReplaceText.findAndReplaceDOMText(regex, node, marker, false, editor.schema); }; var unwrap = function (node) { var parentNode = node.parentNode; if (node.firstChild) { parentNode.insertBefore(node.firstChild, node); } node.parentNode.removeChild(node); }; var findSpansByIndex = function (editor, index) { var nodes; var spans = []; nodes = global$1.toArray(editor.getBody().getElementsByTagName('span')); if (nodes.length) { for (var i = 0; i < nodes.length; i++) { var nodeIndex = getElmIndex(nodes[i]); if (nodeIndex === null || !nodeIndex.length) { continue; } if (nodeIndex === index.toString()) { spans.push(nodes[i]); } } } return spans; }; var moveSelection = function (editor, currentIndexState, forward) { var testIndex = currentIndexState.get(); var dom = editor.dom; forward = forward !== false; if (forward) { testIndex++; } else { testIndex--; } dom.removeClass(findSpansByIndex(editor, currentIndexState.get()), 'mce-match-marker-selected'); var spans = findSpansByIndex(editor, testIndex); if (spans.length) { dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected'); editor.selection.scrollIntoView(spans[0]); return testIndex; } return -1; }; var removeNode = function (dom, node) { var parent = node.parentNode; dom.remove(node); if (dom.isEmpty(parent)) { dom.remove(parent); } }; var find = function (editor, currentIndexState, text, matchCase, wholeWord) { text = text.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); text = text.replace(/\s/g, '[^\\S\\r\\n]'); text = wholeWord ? '\\b' + text + '\\b' : text; var count = markAllMatches(editor, currentIndexState, new RegExp(text, matchCase ? 'g' : 'gi')); if (count) { currentIndexState.set(-1); currentIndexState.set(moveSelection(editor, currentIndexState, true)); } return count; }; var next = function (editor, currentIndexState) { var index = moveSelection(editor, currentIndexState, true); if (index !== -1) { currentIndexState.set(index); } }; var prev = function (editor, currentIndexState) { var index = moveSelection(editor, currentIndexState, false); if (index !== -1) { currentIndexState.set(index); } }; var isMatchSpan = function (node) { var matchIndex = getElmIndex(node); return matchIndex !== null && matchIndex.length > 0; }; var replace = function (editor, currentIndexState, text, forward, all) { var i, nodes, node, matchIndex, currentMatchIndex, nextIndex = currentIndexState.get(), hasMore; forward = forward !== false; node = editor.getBody(); nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan); for (i = 0; i < nodes.length; i++) { var nodeIndex = getElmIndex(nodes[i]); matchIndex = currentMatchIndex = parseInt(nodeIndex, 10); if (all || matchIndex === currentIndexState.get()) { if (text.length) { nodes[i].firstChild.nodeValue = text; unwrap(nodes[i]); } else { removeNode(editor.dom, nodes[i]); } while (nodes[++i]) { matchIndex = parseInt(getElmIndex(nodes[i]), 10); if (matchIndex === currentMatchIndex) { removeNode(editor.dom, nodes[i]); } else { i--; break; } } if (forward) { nextIndex--; } } else if (currentMatchIndex > currentIndexState.get()) { nodes[i].setAttribute('data-mce-index', currentMatchIndex - 1); } } currentIndexState.set(nextIndex); if (forward) { hasMore = hasNext(editor, currentIndexState); next(editor, currentIndexState); } else { hasMore = hasPrev(editor, currentIndexState); prev(editor, currentIndexState); } return !all && hasMore; }; var done = function (editor, currentIndexState, keepEditorSelection) { var i, nodes, startContainer, endContainer; nodes = global$1.toArray(editor.getBody().getElementsByTagName('span')); for (i = 0; i < nodes.length; i++) { var nodeIndex = getElmIndex(nodes[i]); if (nodeIndex !== null && nodeIndex.length) { if (nodeIndex === currentIndexState.get().toString()) { if (!startContainer) { startContainer = nodes[i].firstChild; } endContainer = nodes[i].firstChild; } unwrap(nodes[i]); } } if (startContainer && endContainer) { var rng = editor.dom.createRng(); rng.setStart(startContainer, 0); rng.setEnd(endContainer, endContainer.data.length); if (keepEditorSelection !== false) { editor.selection.setRng(rng); } return rng; } }; var hasNext = function (editor, currentIndexState) { return findSpansByIndex(editor, currentIndexState.get() + 1).length > 0; }; var hasPrev = function (editor, currentIndexState) { return findSpansByIndex(editor, currentIndexState.get() - 1).length > 0; }; var Actions = { done: done, find: find, next: next, prev: prev, replace: replace, hasNext: hasNext, hasPrev: hasPrev }; var get = function (editor, currentIndexState) { var done = function (keepEditorSelection) { return Actions.done(editor, currentIndexState, keepEditorSelection); }; var find = function (text, matchCase, wholeWord) { return Actions.find(editor, currentIndexState, text, matchCase, wholeWord); }; var next = function () { return Actions.next(editor, currentIndexState); }; var prev = function () { return Actions.prev(editor, currentIndexState); }; var replace = function (text, forward, all) { return Actions.replace(editor, currentIndexState, text, forward, all); }; return { done: done, find: find, next: next, prev: prev, replace: replace }; }; var Api = { get: get }; var open = function (editor, currentIndexState) { var last = {}, selectedText; editor.undoManager.add(); selectedText = global$1.trim(editor.selection.getContent({ format: 'text' })); function updateButtonStates() { win.statusbar.find('#next').disabled(Actions.hasNext(editor, currentIndexState) === false); win.statusbar.find('#prev').disabled(Actions.hasPrev(editor, currentIndexState) === false); } function notFoundAlert() { editor.windowManager.alert('Could not find the specified string.', function () { win.find('#find')[0].focus(); }); } var win = editor.windowManager.open({ layout: 'flex', pack: 'center', align: 'center', onClose: function () { editor.focus(); Actions.done(editor, currentIndexState); editor.undoManager.add(); }, onSubmit: function (e) { var count, caseState, text, wholeWord; e.preventDefault(); caseState = win.find('#case').checked(); wholeWord = win.find('#words').checked(); text = win.find('#find').value(); if (!text.length) { Actions.done(editor, currentIndexState, false); win.statusbar.items().slice(1).disabled(true); return; } if (last.text === text && last.caseState === caseState && last.wholeWord === wholeWord) { if (!Actions.hasNext(editor, currentIndexState)) { notFoundAlert(); return; } Actions.next(editor, currentIndexState); updateButtonStates(); return; } count = Actions.find(editor, currentIndexState, text, caseState, wholeWord); if (!count) { notFoundAlert(); } win.statusbar.items().slice(1).disabled(count === 0); updateButtonStates(); last = { text: text, caseState: caseState, wholeWord: wholeWord }; }, buttons: [ { text: 'Find', subtype: 'primary', onclick: function () { win.submit(); } }, { text: 'Replace', disabled: true, onclick: function () { if (!Actions.replace(editor, currentIndexState, win.find('#replace').value())) { win.statusbar.items().slice(1).disabled(true); currentIndexState.set(-1); last = {}; } } }, { text: 'Replace all', disabled: true, onclick: function () { Actions.replace(editor, currentIndexState, win.find('#replace').value(), true, true); win.statusbar.items().slice(1).disabled(true); last = {}; } }, { type: 'spacer', flex: 1 }, { text: 'Prev', name: 'prev', disabled: true, onclick: function () { Actions.prev(editor, currentIndexState); updateButtonStates(); } }, { text: 'Next', name: 'next', disabled: true, onclick: function () { Actions.next(editor, currentIndexState); updateButtonStates(); } } ], title: 'Find and replace', items: { type: 'form', padding: 20, labelGap: 30, spacing: 10, items: [ { type: 'textbox', name: 'find', size: 40, label: 'Find', value: selectedText }, { type: 'textbox', name: 'replace', size: 40, label: 'Replace with' }, { type: 'checkbox', name: 'case', text: 'Match case', label: ' ' }, { type: 'checkbox', name: 'words', text: 'Whole words', label: ' ' } ] } }); }; var Dialog = { open: open }; var register = function (editor, currentIndexState) { editor.addCommand('SearchReplace', function () { Dialog.open(editor, currentIndexState); }); }; var Commands = { register: register }; var showDialog = function (editor, currentIndexState) { return function () { Dialog.open(editor, currentIndexState); }; }; var register$1 = function (editor, currentIndexState) { editor.addMenuItem('searchreplace', { text: 'Find and replace', shortcut: 'Meta+F', onclick: showDialog(editor, currentIndexState), separator: 'before', context: 'edit' }); editor.addButton('searchreplace', { tooltip: 'Find and replace', onclick: showDialog(editor, currentIndexState) }); editor.shortcuts.add('Meta+F', '', showDialog(editor, currentIndexState)); }; var Buttons = { register: register$1 }; global.add('searchreplace', function (editor) { var currentIndexState = Cell(-1); Commands.register(editor, currentIndexState); Buttons.register(editor, currentIndexState); return Api.get(editor, currentIndexState); }); function Plugin () { } return Plugin; }()); })();