Online Slots Online Spielautomaten 1500 Bonus

“Internet Casino Österreich Mit Echtgeld Casino Online Spielen

Sie müssen sich einfach nur über den Browser auf unserer Seite in Ihre Konto einloggen und können danach alle Apps unserer Seite von unterwegs genießen. Bei Vulkan Vegas On line casino finden Sie eine gewisse beeindruckende Auswahl an Top-Online-Slots, die dieses außergewöhnliches Spielerlebnis entbieten (veraltet). Von klassischen Kapitel bis hin zu innovativen Spielfunktionen – hier ist für jeden Geschmack etwas dabei.

Um alle Spiele inside unserer Kollektion genießen zu können, ist auch das Einzige, was Sie dafür brauchen, eine Mitgliedschaft im portal. Navigieren Sie zum Zahlungsabschnitt in Einem persönlichen Bereich jeder Seite, um einander eine Liste aller verfügbaren Zahlungsmethoden anzeigen zu lassen. Wir unterstützen die EUR so dass Sie sich nicht durch Umrechnungskursen beschäftigen müssen. Wie zuvor doch erwähnt, können Sie jeden unserer Überschrift auch im Demomodus testen, indem Sie auf den “Demo” Button klicken. In diesem Fall beginnt das Spiel durch virtuellem Guthaben, so dass Sie perish Möglichkeit bekommen, alle Funktionen des Spiels kennenzulernen. Sweet Bonanza ist ein farbenfroher und unterhaltsamer Slot machine game, der ein süßes und fruchtiges Thema bietet.

Video Poker

Es gibt noch eine eigene Unterseite, perish Details zu den Bonusangeboten anzeigt. Dazu zählen unter anderem das Willkommenspaket, wöchentliche Boni, Cashback-Aktionen oder aber das Treueprogramm des Vulkan Vegas. Den vollen Funktionsumfang des Vulkan Casinos genießen nur unsere registrierten Spieler vulkan vegas promo code.

Wir haben hart daran gearbeitet, unseren Spielern die beste Auswahl an Titeln zu der Verfügung zu stellen, die diese internet marketing Internet finden können. Hier finden Sie Antworten auf die Fragen, welche die anderen Spieler von Vulkan Vegas besonders häufig stellen. In vielen Fällen können Sie Ihre Anliegen hier selbst lösen und wieder sorgenfrei in unserem Casino spielen. Wir anfertigen mit den beliebtesten Spieleentwicklern der Branche miteinander, um unseren Spielern die besten Apps anbieten zu können. Diese Unternehmen sind dafür bekannt, perish heißesten Spielautomaten und Tischspiele” “im Internet zu produzieren. Daher wissen Sie bereits im Vorfeld, dass Sie hochwertige Vulkan Vegas Online casino Erfahrungen machen sein.

Fangen Sie Jetzt An, Unter Vulkan Vegas über Spielen!

Vulkan Vegas offeriert eine Vielzahl vonseiten Boni und Promotionen, die Ihr Spielerlebnis noch aufregender machen. Von Willkommensboni bis hin zu hin zu regelmäßigen Aktionen – ha sido gibt immer eine Möglichkeit, Ihr Spiel zu bereichern. Informieren Sie sich über unsere aktuellen Angebote und nutzen Sie die Gelegenheit, mehr zu spielen sowie zu gewinnen. Wenn Sie in unserem Casino online mitspielen und dabei einmal eine besonders dringende Frage oder ein Problem haben sollten, können Sie unseren Kundensupport kontaktieren. Unsere Mitarbeiter sind rund um die Uhr, an sieben Tagen der Woche, für Sie zur Stelle.

Das Internet casino Vulkan Vegas verfügt über eine Glücksspiellizenz der Regierung kklk EU-Staates Curacao. Damit sind die Betreiber von Vulkan Vegas berechtigt, ihr Glücksspiel in der EUROPEAN anzubieten. Die Kontrollbehörde eCOGRA hat ein Wachsames Auge auf die angebotenen Spiele um zu gewährleisten, dass diese in keiner Weise manipuliert werden. Wenn Sie nicht nur vonseiten Ihrem Computer zuhause in unserem Online Casino spielen sollen, haben wir sehr gute Nachrichten. Vulkan Vegas ist auch within einer mobilen Edition verfügbar, die des jedem modernen Mobile phone oder Tablet aus genutzt werden kann. Egal, ob Sie ein Gerät mit Android oder iOS verwenden, unsere Software program ist damit garantiert kompatibel.

Nützliche Tips Zum Spielen Vonseiten Casino Spielen

Aktuell haben wir rund 2. 000 Spiele und beliebte On line casino Slots in der Lobby, die für jeden Geschmack dasjenige passende Spielvergnügen bieten. Wer an Online Automaten Echtgeld einsetzen will, muss Cash auf sein Spielerkonto einzahlen. Wir unterstützen dafür eine Vielfältigkeit von Zahlungsmethoden und Währungen, um unseren Mitgliedern einen reibungslosen Zahlungsablauf zu gewährleisten. Neben klassischen Zahlungsmitteln wie Kreditkarten sowie Banküberweisungen unterstützt Vulkan Vegas auch E-Wallets und Kryptowährungen.

Dieses Spiel ist perfekt für diejenigen, die aufgrund einem lebhaften sowie freudigen Spielerlebnis suchen. Mit seinen bunten Symbolen, spannenden Bonus-Runden und großzügigen Auszahlungen ist Sweet Paz ein Muss für jeden Slot-Enthusiasten. Alle dieser Wettspiele werden von höchst professionellen und erfahrenen Croupiers durchgeführt. Diese sein dafür sorgen, dass Sie zu alle Sekunde Spaß feel Spiel haben sowie gleichzeitig tolle Gewinne einfahren können. Wenn Sie auch zuhause eine authentische Casino-Erfahrung erleben wollen, dann sollten Sie unsere Live Casino Spiele ausprobieren. Bei diesen Spielen sehen Sie echten Dealern c/o der Arbeit zu und fühlen sich dadurch so, als würden Sie selbst in einem echten Casino am Tisch sitzen.

Vulkan Vegas Online Casino Spiele

Im Kontroverse zu Automaten bieten unsere Instant Video games Ihnen allerdings hel neue Spielweisen sowie Themen. Werfen Sie einfach einen Blick in unsere Sammlung von Sofortgewinnspielen darüber hinaus überzeugen Sie gegenseitig selbst von meiner tollen Kollektion. Die einfachste Methode, um in unserem Casinos Österreich von Einem mobilen Gerät zu spielen, ist über den Browser. Unsere Website wurde thus entwickelt, dass gegenseitig die Software nicht aufgefordert an die Größe des verwendeten Bildschirms anpasst.

Natürlich unterstützen wir im VulkanVegas Casino eine Auswahl von Zahlungsmethoden, infolgedessen Sie möglichst direkt Einzahlungen machen und Ihre Gewinne abheben können. Auf die Weise sollte jeglicher Spieler eine umfassende Methode finden, o eine Zahlung vorzunehmen und in meinem Online Casino Echtgeld zu setzen. Trotz der Einfachheit jeder meisten Titel gibt es durchaus innovative Spielkonzepte, wie bei Minefield oder Penalty Shootout, zu ersp?hen. Sogar ein” “Soccer Manager Spiel ist auch in der Aufzählung vorhanden und lädt den Spieler dieses, sich eingehend über Taktik zu beschäftigen. Alle Sofortspiele aus dieser Kategorie können auch ohne living room Einsatz von Echtgeld ausprobiert werden. Das Vulkan Vegas Casino gehört zweifellos zu den besten On-line Casinos im Netz.

Die Vorteile Im Vulkan Vegas Online Casino

“Stippen (umgangssprachlich) Sie ein inside die aufregende Welt von Vulkan Sin city, dem führenden Casinos in Österreich. In der Welt jeder Online Casino Apps entfaltet Vulkan Vegas seine ganze Pracht. Mit einer umfangreichen Palette an Online casino Online Spielen entbieten (veraltet) wir jedem Zocker, ob Anfänger oder aber Profi, ein unvergessliches Erlebnis. Tauchen Sie ein in die Vielfalt unserer Apps, die von fesselnden Spielautomaten bis hin zu strategischen Tischspielen reichen. Unsere On-line Slots, bekannt für ihre lebendigen Grafiken und spannenden Themen, sind bei unseren Gästen besonders beliebt. Für Liebhaber kklk klassischen Casino-Feelings anhalten wir eine Auswahl an Roulette- sowie Blackjack-Varianten bereit.

Wählen Sie zwischen verschiedenen Varianten auf welche art amerikanischem, europäischem oder aber französischem Roulette On-line und genießen Sie die authentische Casino-Atmosphäre. Mit einer Gruppe von Themen, hohen Auszahlungsraten und spannenden Bonusfunktionen bieten unsere Slots Unterhaltung für jeden Geschmack. Von klassischen Fruchtmaschinen bis hin zu modernen Videoslots – unter Vulkan Vegas finden Sie Ihr perfektes Spiel.

Sofortgewinn Spiele

Genau wie c/o Spielautomaten, müssen Sie auch beim Roulette kein großes Vorwissen mitbringen. Sie können selbst als Anfänger sofort einsteigen und dennoch gute Gewinnchancen genießen. Bei Feuer speiender berg (umgangssprachlich) Vegas legen unsereins großen Wert auf verantwortungsbewusstes Spielen.

Wir sind dem Gastro-Shop der großen Beliebtheit von Roulette gezielt, weshalb wir unz?hlige Varianten davon anbieten. So können Sie diesen legendären Kopfzeile auf viele verschiedenen Arten genießen sowie immer wieder neu erleben. Neben Baccarat und Poker zählt natürlich auch Roulette zu den absoluten Klassikern, die man in einem On line casino unbedingt spielen so muss.

Online Roulette

Nachdem Sie unser kurzes Registrierungsformular ausgefüllt und Ihren Account aktiviert besitzen, können Sie sofort mit dem Spielen beginnen! Unsere Empfehlung ist, sich unter jedem Slot, living room Sie ausprobieren sollen, die Auszahlungstabelle anzuschauen. Sie ist bei jedem unserer Apps einsehbar und erklärt Ihnen die Regeln, alle Symbole und wie hoch jene auszahlen. Mit living area bereitgestellten Demoversionen können Sie unsere Spielautomaten kostenlos spielen, had been immer eine sehr gute Idee ist, bevor man echtes Geld riskiert.

Dabei setzen wir auf einen Spiele-Mix jeder großen Hersteller darüber hinaus kleineren Software Häuser. Oberstes Prinzip ist natürlich natürlich, dass ha sido sich dabei o faire und sehr gute Spiele und Slot machine games handelt. Das Herzstück unseres Vulkan Vegas Casino Online sind pass away Casino Spiele, pass away wir anbieten.

Kartenspiele

Weil wir eine gewisse riesige Auswahl a great Spielen aller Fine art haben, einen unkomplizierten Zugang für die Kunden anbieten und im portal Datenschutz sowie Sicherheit großgeschrieben werden. Unsere Spiele werden von der eCOGRA auf Fairness darüber hinaus Zuverlässigkeit überprüft darüber hinaus wir besitzen noch eine Glücksspiellizenz der Regierung von Curacao. Wir stellen uns gerne der Herausforderung, perish besten Online On line casino Spiele für Sie zu finden darüber hinaus in unserem Vulkan Vegas Casino darzubieten. Als besonderen Support können die meisten der Online Slots und Automaten internet marketing Demo Modus gespielt werden. So ist natürlich es möglich, ohne Anmeldung und ohne den Einsatz des Bargeld das Spiel kostenlos auszuprobieren. Bei Vulkan Vegas brauchen Sie keine Application herunterzuladen, um Automatenspiele zu spielen.

Ob Sie Wundern haben oder Unterstützung benötigen, unser Staff ist immer bereit zu helfen. Erleben Sie die authentische Online Casino-Atmosphäre mit unseren Live On line casino Spielen. Spielen Sie mit echten Dealern und genießen Sie eine interaktive Erfahrung, die so nah wie möglich an ein echtes Casino herankommt. Wer gegenseitig für die Vulkanvegas Spielhalle entscheidet, bekommt viele Vorteile. Da wäre zum einen die einfache und selbsterklärende Navigation auf unserer Webseite, pass away mit allen Browsern, Betriebssystemen und Geräte einwandfrei funktioniert. Mit diesem Ansatz ist es uns möglich, regelmäßig neue beliebte Spielautomaten zu ihrem” “bestehenden Sortiment hinzuzufügen.

Beliebte Casinospiele In Feuer Speiender Berg (umgangssprachlich) Vegas

Einer jeder anderen großen Verwenden von Vulkan Las vegas ist unser umfangreiches Bonusangebot. Wenn Sie Casino Spiele mit Startguthaben ohne Einzahlung ausführen, bekommen Sie die Möglichkeit, unentgeltlich Geld zu abbauen. Außerdem bieten unsereiner Ihnen unseren fantastischen Gratis-Modus an, über dem Sie Online casino Spiele ohne Einzahlung testen können.” “[newline]Schließlich wollen wir, wenn alle unsere Spieler eine möglichst super Zeit auf Vulkan Vegas genießen. Befolgen Sie diese Tipps, um stets dieses Maximum herauszuholen, falls Sie unsere Online casino Spiele online mitspielen. Wir haben klassische Fruchtmaschinen, Slots zum Wilden Westen oder aber zu bekannten Filmen, Serien oder Videospielen. Außerdem haben unsereins viele neue Slots für Sie im Angebot, mit denen Sie die innovativsten Features genießen können.

Hier sind einige dieser Casino Spiele on the internet, die Sie im portal sofort genießen können. Spielen Sie Ihre Lieblingsspiele von überall mit der Vulkan Vegas Mobile App. Verfügbar für Android os und iOS, offeriert unsere App noch eine nahtlose und benutzerfreundliche Erfahrung, sodass Sie jederzeit und überall spielen können. Video Poker kombiniert perish Aufregung von Poker mit der Schnelligkeit von Spielautomaten. Entdecken Sie verschiedene Typen von Video Poker bei Vulkan Sin city und genießen Sie ein Spiel, dasjenige sowohl Fähigkeiten als auch Glück erfordert. Für alle Besitzer von Android-Geräten besitzen wir zudem eine gewisse spezielle Vulkan Vegas App entwickelt.

Wie Registriere Ich Ein Konto Bei Vulkan Sin City?

Sie können bei dem Gastro-Shop außerdem mit Yandex Money, WebMoney, Bitcoin, QIWI, NETELLER, Skrill, Mobilanbietern und vielen anderen bequemen Dienstleistern bezahlen. Ramses Guide ist ein faszinierender Online-Slot, der Zocker ins alte Ägypten entführt. Mit seinen lebhaften Grafiken darüber hinaus spannenden Bonusfunktionen offeriert dieses Spiel noch eine unvergessliche Erfahrung. Die Spieler haben pass away Möglichkeit, in die geheimnisvolle Welt der Pharaonen einzutauchen darüber hinaus nach verborgenen Schätzen zu suchen. Ramses Book ist sowohl im” “Demo-Modus als auch als Echtgeld-Spiel verfügbar sowie verspricht spannende Vergnügen.

Diese Titel sein vor allem deshalb geliebt, weil sie den Spielern eine gewisse klassische und Elegante Casino-Erfahrung ermöglichen. Außerdem haben die meisten Kartenspiele ein strategisches Element, was sie für viele Zocker interessanter macht als reine Glücksspiele. So wie es sich gehört, machen Spielautomaten den größten Modul unserer Spielesammlung aus. Für viele Menschen sind Automaten pass away besten Casino Apps, weil sie ihnen einige Vorteile offerieren. So sind bei Slot-Spielen keine Regeln oder Strategien nötig, um am Spaß teilzuhaben.

Was Macht Den Spielautomaten Beliebt?

Sie können unsere Video Online poker Spiele gratis ausprobieren und so ganz einfach Erfahrung sammeln. Wenn Sie sich sicher genug fühlen, wechseln Sie dann einfach in den Echtgeld-Modus und kämpfen um große Gewinne. Auch in Bezug gerade auf Kartenspiele finden Sie bei Vulkan Sin city eine fantastische Auswahl. Sie können unter uns beste On line casino Spiele mit Karten genießen, und das ganz gemütlich von zuhause aus.

Sie besitzen die verschiedenen Arten von Spielen kennengelernt, die Ihnen auf unserer Seite zur Verfügung stehen. Außerdem haben Sie erlernt, dass wir Ihnen nicht nur Apps is Computer, jedoch auch mobile On line casino Spiele anbieten. Sie können also ebenso von Ihrem Perfect oder Tablet bei unsere fantastische Spieleauswahl zugreifen und die von jedem beliebigen Ort genießen. Zusammen unter einsatz der Anbietern TVBET und Betgames haben wir eine Gruppe von exklusiven Friendly Wettspielen für Sie im Angebot. Wir haben viele verschiedenen Poker Casino Spiele kostenlos oder o Echtgeld für Sie vorhanden, die nur darauf warten, wenn Sie Ihre Fähigkeiten unter Beweis stellen.

Die Besten Casino Apps Im Vulkan Vegas Casino

Mit seiner einfachen Spielmechanik und living room zufälligen Preisen bietet Plinko eine unterhaltsame und zugängliche Spielerfahrung für alle Arten von Spielern. Da die erfahrensten Spieler bereits den Großteil der oben beschriebenen Titel kennen, fügen wir immer neuerlich andere” “neue Casino Spiele zu unserem Angebot dazu. Genau wie bei dem Großteil unserer anderen Titel, können Sie auch diese On line casino Spiele kostenlos weniger Anmeldung ausprobieren. Außerdem stehen Ihnen perish Games nicht lediglich auf dem Pc zur Verfügung, denn immer so bei Vulkan Vegas können Sie ebenso vom Handy Casino Spiele genießen. Und wenn nicht, mit der zeit ist unser Demo-Modus die perfekte Trainingsmethode, um es zu lernen.

Ein Großteil unserer Game titles funktioniert übrigens auch fehlerfrei auf mobilen Geräten. Mobile Spielautomaten eignen sich prima, wenn Sie unterwegs einige Spins starten möchten. Plinko ist natürlich ein einzigartiger sowie innovativer Online-Slot, der sich durch sein unkonventionelles Gameplay auszeichnet. Dieses Spiel ist auch inspiriert von jeder klassischen TV-Show und bietet eine frische und aufregende Option zu traditionellen Slot-Spielen.

Qualitativ Hochwertiger Kundenservice

Die Spieler können dabei wirklich nicht nur eine tolle Erfahrung genießen darüber hinaus viel Spaß haben, sondern zum Modul lebensverändernde Gewinne erzielen. Zu den bekanntesten Spielen bei Feuer speiender berg (umgangssprachlich) Vegas gehören noch eine Vielzahl von Online-Slots, Roulette, Blackjack und Live-Casino-Spiele.”

Dadurch bekommen Sie zu jeder Zeit des Tages (oder der Nacht) Hilfe für Ihre Anstehen. Bestandskunden im Vulkanvegas Casino können sich über unser Treueprogramm freuen. Bei diesem sammelt jeder Zocker Punkte, die später in Echtgeld umgetauscht werden können. Zudem gibt es wöchentliche Cashbacks für die Verluste sowie ebenfalls wöchentliche Einzahlungsboni darüber hinaus Promo Code Angebote. Je höher dieser Rang des Spielers, desto höher jeder Cashback beziehungsweise dieser Einzahlungsbonus. Wir arbeiten unter einsatz der besten und beliebtesten Providern zusammen, wie NetEnt, Play’n Go oder Microgaming.

Vorteile Von On-line Spielautomaten

Jedes Spiel in unserem Portfolio ist sorgfältig ausgewählt, um Qualität und Fairness zu gewährleisten. Zusätzlich bieten wir die Möglichkeit, im Casinos durch Echtgeld zu zocken, was Ihr Spielerlebnis noch aufregender stärke. Wenn auch Sie gerne Casino Spiele um echtes Cash oder auch gratis spielen, dann sind immer wieder Sie bei mir genau richtig. Die Plattform von Feuer speiender berg (umgangssprachlich) Vegas bietet Ihnen alle Casino Spiele, die Sie sich wünschen könnten.

Möchten Sie durch echtem Geld zocken, können Sie treu sein, dass ha sido bei Vulkan Sin city stets fair zugeht. Unser Online On line casino wird regelmäßig durch die eCOGRA kontrolliert, um Fairness bei ihrem Spielen zu gewährleisten. Die Zuverlässigkeit unserer Games wird durch die MD5 Rational Play Technologie garantiert. Außerdem gehören unsereins zu den wenigen Casinos, die RTP-Werte ihrer Spiele veröffentlichen. Alles in Allem können wir Ihnen versichern, dass Sie hier fair, sicher und gut geschützt an unseren Automaten spielen” “können. Auch wir sind immer wieder Spieler bei Feuer speiender berg (umgangssprachlich) Vegas und unsereins spielen regelmäßig on the internet Automatenspiele, weshalb Sie bei uns wirklich die besten Überschrift finden.

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