Alle Aktuell Boni Und Promo Codes

“Expire Besten Boni 2024

Content

Sie können auch mehr einzahlen, der Bonusbetrag vermag ab dieser Summe jedoch nicht mehr größer. Zudem existiert es 70 Freispiele für das populäre Automatenspiel Big Bass sounds Splash von Sensible Play. Dabei bekommt der Spieler für eine Einzahlung den gewissen Prozentsatz dieses Einzahlungsbetrags als Reward gutgeschrieben. Zusätzlich gibt es meistens Freispiele für beliebte On line casino Slots.

In den meisten Fällen können Sie Ihre Anliegen hier selbst lösen und erneut sorgenfrei in unserem Casino spielen. Es gibt verschiedene Methoden, um den Vulkan Vegas Support zu kontaktieren. Sie können unseren Live Conversation nutzen, der bei der Website verfügbar ist.

Wer Erhält Im Vulkan Vegas Casino 25 European?

Dies koennte über Desktop, jedoch auch via Smartphone oder Tablet erfolgen. Bei dieser Aktion handelt es sich auch um den Vulkan Vegas Mobile phone Casino No Downpayment Bonus, der über mobile Endgeräte verfügbar ist. Dort hat man alle aktuellen Bonusaktionen und living area Kontostand des Vulkan” “Las vegas Bonus Guthabens. Die dritte Einzahlung eins neuen Spielers werden bei Vulkan Las vegas ebenfalls belohnt. Sie erhalten hier einen 120% Bonus von bis zu five hundred Euro, wenn Sie mindestens 15 Pound einzahlen.

Das Casino offeriert noch viele sonstige Vorteile an, sie Ihr Guthaben erhöhen und ihre Spielzeit verbessern können. Im Folgenden stellen unsereins Ihnen einige welcher anderen Bonusangebot jeder Seite vor. Mit dem Vulkan Las vegas 10 Euro Bonus können Sie expire verschiedenen Spiele in unserem Casino ausprobieren, ohne eine Einzahlung zu tätigen. Sie erhalten das Bonusgeld sofort, nachdem Sie die oben aufgeführten Schritte befolgen. Das Geld wird in Form von Bonusgeld ausgegeben sowie unterliegt einer Umsatzbedingung von 5x. Sie müssen diese innerhalb von 5 Tagen erreichen, sonst wird der Bonus automatisch gelöscht vulkan-vegas-login.com.

Vorteile Und Nachteile Des Bonusangebotes

Der maximale Auszahlungsbetrag aus dem Bonus liegt bei 25 European. Vulkan Vegas ist auch ein Casino, unter dem der Zocker im Mittelpunkt steht. Um einen Bonus in Anspruch zu nehmen, braucht man einen besonderen Vulkan Vegas Promo Signal.

Und schließlich haben wir family room größten Bonus unter abzug von Einzahlung, den Vulkan Vegas 25€ Zero Deposit Bonus. Dieser ist ebenfalls über denselben Bedingungen auf welche art die vorherigen Excédent gebunden, aber existiert Ihnen am meisten Bonusgeld zum Spielen. Sie können mit diesem Angebot von Vulkan Vegas twenty five Euro erhalten darüber hinaus damit spielen.

Vulkan Vegas Registrierung

Ab dem Levels 10 des Treueprogramms profitieren die Spieler davon, dass das Teil ihrer Verluste wieder auf dasjenige Spielerkonto gutgeschrieben werden. Je höher das Level im Treueprogramm, desto höher ist auch der wöchentliche Procuring. Als nächstes erklären wir Ihnen alle Bedingungen, die für den No Deposit Bonus gelten.

“Unter den meisten Bonusangeboten in Online Internet casinos erhalten die Zocker die Preise wirklich nicht direkt als Cash, sondern in Type von Bonusguthaben. Dieses Guthaben unterliegt sogenannten Umsatzanforderungen, die erzielt werden müssen, bevor Spieler das Bonusguthaben in Echtgeld umwandeln können. Alternativ bieten wir auch Freispiele als No Down payment Bonus an. Bestandskunden i am Vulkanvegas Casino können sich über unser Treueprogramm freuen. Bei diesem sammelt jeder Spieler Punkte, die später in Echtgeld umgetauscht werden können.

Willkommensbonus Bei Vulkan Vegas

Bei uns findet man bis zu 1. 500 European zusätzlich sowie one hundred and fifty Freispiele für diverse der beliebtesten Spielautomaten. Aber keine Worry vor den großen Beträgen, denn schon ab einer Einzahlung von 10€ bzw. 15€ sind Sie dabei und können von dem Willkommenspaket profitieren.

So beträgt der optimisée Wert des Cashbacks für besonders aktive User ganze 2000€. Auch das Treueprogramm können Highroller besonders schnell durchlaufen. Diese positiven Faktoren trösten darüber hinweg, dass es ansonsten keinen expliziten eigenen Benefit für diese User-Gruppe gibt. Die Bonusbeträge können jeweils wirklich nicht im Live Gambling establishment von Vulkan Vegas umgesetzt werden. Solange ein Bonus aktiv ist, sollten End user mit der Anforderung einer Auszahlung vorsichtig sein. Das vorhandene Echtgeld kann wohl jederzeit zur Auszahlung gebracht werden, allerdings wird in dem” “Fall der zusätzliche Bonusbetrag storniert.

Bonusguthaben Im Casino

Die 15 Euro ohne Einzahlung sind daher nur ein kleiner Vorgeschmack auf die vielen Vorteile, die Sie als Spieler bei Vulkan Vegas genießen können. Besuchen Sie nach Ihrer Kontoerstellung am besten geradlinig die Bonus-Seite internet marketing Casino, um einander von den Angeboten zu überzeugen. Wie unsere treuen Spieler sicher wissen, hat Vulkan Vegas etliche der besten Boni und Werbeaktionen auf dem Markt.

Unsere On the internet Casino Boni besitzen faire Konditionen, expire auch für” “Einsteiger und Anfänger sehr gut geeignet sind. Im Folgenden wollen unsereiner den Bonus genauer erläutern und auf die Besonderheiten eingehen. Bestandskunden können sich bei Vulkan Las vegas über jede Menge Bonusangebote freuen. Grundlage für diese zusätzlichen Promotions ist within der Regel dieses Treueprogramm des On-line Casinos. Mit jeder Einzahlung und jeglicher Drehung mit Echtgeld steigt der Consumer hier nach darüber hinaus nach im Phoned auf und koennte sich so über immer bessere Benefit Varianten freuen. Außerdem steht über dasjenige Treueprogramm auch in regelmäßigen Abständen dieses Dreh am Glücksrad zur Verfügung, bei wem weitere lukrative Preise warten.

Freispiele Ohne Einzahlung

Stellen Sie sich vor, Sie würden ein Spiel ausprobieren, das Sie nicht kennen. Deswegen ist so dieses Bonus besonders hilfreich, um die nützlichsten Chancen zu beteuern. Des Weiteren kann der Bonus nicht bei allen Slot machine games umgesetzt werden. Diese speziellen Angebote können ganz unterschiedliche Ausprägungen haben. Einzahlungsboni oder Freispiele können ebenso” “beinhaltet sein wie Gewinnspiele und Preisausschreiben.

So steht unter unserem Strich ein gutes Bonusangebot, welches für besonders aktive Consumer und Highroller auch zu einem ausgesprochen guten Angebot werden kann. Dies liefert auch eine positive Antwort auf pass away Frage ist Vulkan Vegas seriös ebenso sicher. Neben seinem umfangreichen Angebot an Slots und Tischspielen hat Vulkan Las vegas auch ein Livecasino, welches laufend erweitert wird. Grundsätzlich können die Bonusangebote des Online Casinos aber nicht bei living room Live Spielen eingesetzt werden.

Wie Holt Person Sich Den Vulkan Vegas Promo Code?

Für den Bonus gilt eine Auszahlungsbeschränkung von 200 Pound pro Woche. Mit der ersten Einzahlung gewähren wir einen Bonus von bis hin zu zu 500″ “European. Alles, was Sie tun müssen, ist echt, sich innerhalb der ersten fünf Tage nach der erfolgreichen Registrierung den Bonus zu sichern. Anschließend tätigen Sie expire erste Einzahlung mit einem Zahlungsanbieter Ihrer Wahl. Ab 1 Einzahlung von ten Euro gibt sera 120 Prozent Added bonus auf den Einzahlungsbetrag. Zahlen Sie ten Euro ein, bekommen Sie 12 Pound zusätzlich von mir spendiert.

Den vollen Funktionsumfang des Vulkan Internet casinos genießen nur die registrierten Spieler. Zögern Sie also bei weitem nicht, sondern legen Sie jetzt ihr persönliches Kundenkonto an. Starten Sie noch heute in ihr persönliches Casinoabenteuer und registrieren Sie sich im Vegas Casino. Für die meisten Fragen haben wir zudem einen FAQ-Bereich eingerichtet. Hier finden Sie Antworten auf perish Fragen, welche expire anderen Spieler vonseiten Vulkan Vegas herausragend häufig stellen.

Insta Spiele

Jede Aktion verfügt über einen geliebten Bonus Code, welcher aktiviert werden so muss. Das Portfolio von Vulkan Vegas koennte sich durchaus entdecken lassen. Trotz der Einfachheit der meisten Titel gibt sera durchaus innovative Spielkonzepte, wie bei Minefield oder Penalty Shootout, zu entdecken. Sogar ein Football Manager Spiel ist in der Aufzählung im internet und lädt family room Spieler ein, sich eingehend mit Akal zu beschäftigen. Alle Sofortspiele aus eben dieser Kategorie können im übrigen ohne den Anwendung von Echtgeld ausprobiert werden.

Die Kontrollbehörde eCOGRA head wear ein Wachsames Importancia auf die angebotenen Spiele um über gewährleisten, dass die in keiner Melodie manipuliert werden. Die einfachste Methode, 1 in unserem Online Casino Österreich vonseiten Ihrem mobilen Gerät zu spielen, ist auch über den Browser. Unsere Website wurde so entwickelt, dass sich die Application automatisch an expire Größe des verwendeten Bildschirms anpasst. Sie müssen sich anspruchslos nur über living room Browser auf der Seite in Ihre Konto einloggen und können danach alle Spiele unserer Internetseite von unterwegs genießen.

Einige Tips Für Sicheres Spielen Um Echtes Geld

Hier gibt es hohe Bonusbeträge, umfangreiche Cashback-Aktionen und verhältnismäßig faire Bedingungen. Wer dem Casino die Treue hält, wird regelmäßig belohnt und muss sich immer wieder über zusätzliche Special offers freuen. Auch perish Turniere sind unterschiedlich und lukrativ gestaltet. Neukunden können dieses gesamte Angebot im übrigen mit Freispielen oder aber einem Bonus ohne Einzahlung austesten.

Neben den oben beschriebenen No Down payment Boni, bietet Vulkan Vegas auch weitere Boni ohne Einzahlung an. Und wohl bekommen neue Zocker im Casino Freispiele als Teil des Willkommensbonus. Sie erlangen dabei weitere” “kostenlose Spins direkt nach Ihrer Registrierung.

Die Verschiedenen No Deposit Boni Von Vulkan Vegas

Sie können also mit dem Bonus nicht lieber als diese Summe gewinnen. Reich werden Sie mit unserem Angebot also wirklich nicht, aber es ist echt ein guter Aus, das Angebot kklk Casinos zu untersuchen, ohne dass Sie dafür Ihr eigenes Geld riskieren müssen. Wenn Sie likewise kostenloses Geld zum Spielen von Automaten und Tischspielen besitzen wollen, dann lesen Sie weiter.

Diese Hersteller sind dafür bekannt, die heißesten Spielautomaten und Tischspiele im Internet zu produzieren. Daher wissen Sie bereits im Vorfeld, dass Sie hochwertige Vulkan Vegas On line casino Erfahrungen machen werden. Bei diesem speziellen Bonus ohne Einzahlung handelt es sich um einen Registrierungsbonus.

Sichern Sie Sich Gleich Den Der No Deposit Boni Von Vulkan Vegas!

Da wäre zum einen die einfache und selbsterklärende Navigation auf der Webseite, die über allen Browsern, Betriebssystemen und Geräte einwandfrei funktioniert. Für allesamt Besitzer von Android-Geräten haben wir zudem eine spezielle Vulkan Vegas App entwickelt. Sie können die auf unserer Website herunterladen und damit ein noch besseres mobiles Erlebnis genießen.

Wie Sie sehen können, bietet Vulkan Vegas eine große Auswahl an verschiedenen Bonusangeboten weniger Einzahlung. Sie können sich von Vulkan Vegas 10 European Ohne Einzahlung oder sogar stolze twenty-five Euro sichern. Und auch der Vulkan Vegas 15 Euro Bonus ist natürlich nicht zu verachten. Zusätzlich zu dem Boni ohne Einzahlung, findet man auch wichtige Einzahlungsboni. Diese Freispiele können auf verschiedenen Spielautomaten verwendet werden, die im On line casino angeboten werden. Die Bedingungen für die Spins finden Sie auf der Bonus-Seite von Vulkan Vegas.

Die Vorteile Im Vulkan Vegas Online Casino

Wer zum ersten Mal ein Konto bei unserem Online Casino eröffnet, muss sich diese passende Summe direkt zum Start auf sein Konto zahlen lassen. Die Freispielrunden mögen zwar relativ reichhaltig auf einmal wirken, aber sind sie doch schneller gespielt, als man denkt. Es sollte Ihnen durchaus gelingen, die Freirunden innerhalb des genannten Zeitraumes über nutzen und darüber hinaus umzusetzen. Erstens müssen Spieler auf unserer Webseite auf den Link mit diesem speziellen Angebot klicken.”

Genau wie beim Angebot mit 5 European, werden auch pass away 7 Euro als Bonusguthaben gewährt. Sie müssen es” “binnen von 5 Plockad insgesamt 5 Mal bei den Spielen im Casino nutzen, damit es zu echtem Geld werden und Sie damit frei verfügen können. Neben dem Bonus mit 25 Pound haben wir bei Vulkan Vegas auch einen Bonus weniger Einzahlung für twelve Euro.

Die Berühmtesten Spieleentwickler Bei Vulkan Vegas Casino

Oder Sie schreiben eine E-mail an unseren Support, welcher Ihnen möglichst schnell antworten ist. Zu guter Letzt haben wir ebenso eine Telefonhotline für Sie eingerichtet, hierdurch Sie direkt durch unserem Support-Team sprechen können. Unsere Kollege sind rund o die Uhr, a good sieben Tagen der Woche, für Sie zur Stelle.” “[newline]Dadurch bekommen Sie zu jeder Zeit kklk Tages (oder jeder Nacht) Hilfe für Ihre Anliegen.

Zudem gibt sera wöchentliche Cashbacks für die Verluste sowie ebenfalls wöchentliche Einzahlungsboni und Promo Signal Angebote. Je höher der Rang kklk Spielers, desto höher der Cashback beziehungsweise der Einzahlungsbonus. Viele Spezialangebote kommen in Form von Freispielen für bekannte darüber hinaus beliebte Slots wie Book of Dead, Fire Joker, Starburst oder Fortune Pups daher. Oftmals sind sie nur über spezielle Links bei unseren Partnerseiten angeschlossen. Ob Angebote für unsere VIP-User, Neukunden oder Bestandskunden, hier ist für alle etwas dabei.

Gibt Es Bei Vulkan Vegas In Der Tat Einen Bonus Ohne Einzahlung?

Zudem offeriert Vulkan Vegas andere Vorteile, wie dieses Treueprogramm, indem Spieler Punkte sammeln können, mit denen sie weitere Boni erlangen. Es gibt auch verschiedene andere Promotionen, die in regelmäßigen Abständen stattfinden darüber hinaus neu registrierten Spielern zusätzliche Vorteile bringen. Das nächste Angebot ist der Vulkan Vegas 15 European No Deposit Bonus. Dieser Reward ist etwas größer als der vorherige und ermöglicht Ihnen zusätzliche Spins an den verschiedenen Automatenspielen, die Vulkan Vegas bietet. Die Gewinne aus den Freispielen werden als Bonusgeld ausgezahlt, das Umsatzbedingungen von 3x unterliegt.

Wir haben eine Fülle von tollen Angeboten, die von Excédent ohne Einzahlung bis hin zu einem Willkommensbonus oder immerhin speziellen Boni über Ihrem Geburtstag genügen. Zusätzlich dazu veranstalten wir auch bislang viele regelmäßige Turniere und ähnliche Promotionen, die Ihnen ein paar Vorteile bringen können. Und zwar gibt es dabei einen Vulkan Vegas 25€ No Deposit Added bonus.

Leave a Reply

Your email address will not be published. Required fields are marked *

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