Feuer Speiender Berg (umgangssprachlich) Vegas Promo Code No Deposit Odbierz Bonus Code!

Logowanie I Rejestracja Watts Kasynie Online

Content

Użycie i wypłacenie bonusu bez depozytu nie jest takie proste, zatem też warto zapoznać się z kilkoma haczykami, zanim zdecydujemy się na rejestrację. Wiele rejestracji kont kasyn wymaga imienia i nazwiska, adresu domowego, adresu email, numeru telefonu, nazwy użytkownika, hasła i kodu bonusowego (jeśli dotyczy). Ściśle mówiąc, istnieją dwa rodzaje ofert bonusowych bez depozytu w kasynach online. Niektóre kasyna wymagają użycia kodu promocyjnego, lecz t większości przypadków nie und nimmer jest to konieczne.

Po spełnieniu warunków obrotu i przeniesieniu środków z salda bonusowego do salda gotówkowego możesz złożyć wniosek o wypłatę, wybierając preferowaną metodę płatności w kasynie. Pamiętaj, aby zapoznać się z warunkami oferty dotyczącej bonusu bez depozytu. Zwykle zakłady będą ważne tylko w tej samej grze, watts której dostępny był bonus bez depozytu. Będzie to jednak?e zależało od oprogramowania używanego przez kasyno. Niektóre kasyna będą wymagały skontaktowania się z działem obsługi klienta kasyna watts celu otrzymania bonusu bez depozytu. Wszyscy nowi gracze, którzy założą konto poprzez ten oto link, mogą wybrać reward 15 darmowych spinów bez depozytu.

Lemon Casino – 20 Darmowych Spinów Bez Depozytu Za Rejestracje

W sytuacji chęci grania watts gry hazardowe na prawdziwe pieniądze należy jeszcze zweryfikować swoja tożsamość. Oznacza to be able to, że witryna może zacząć oferować reward za rejestrację bez depozytu, aby przyciągnąć większą ilość nowych graczy, lub może zatrzymać hojną ofertę, gdy osiągnie ich wystarczającą ilość. Jeśli darmowy bonus bez depozytu nie mum kodu, nie musisz go wpisywać.

HotSlots to względnie młode kasyno internetowe, które ma zadatki na stanie się jednym z najpopularniejszych kasyn w Polsce we na świecie. Masa bonusów, arcybogata ocasion gier i metod płatności i wiele, wiele więcej. Branża hazardowa przechodzi aktualnie znaczące zmiany, a new kasyna dostępne dla polskich graczy ciągle aktualizują swoje bonusy i oferty. Przeciętne polskie kasyno on the internet bonus bez depozytu przedstawia wraz z linkiem do pełnego regulaminu zawartego w danej ofercie. Darmowe annoying bez depozytu są najczęściej spotykane, zatem, że kasyna wolą ograniczyć bonus bez depozytu do konkretnej gry, niż wszystkich gier w kasynie. Do czasu spełnienia warunków obrotu, wygrane z bonusu bez depozytu będą przechowywane na Twoim „Saldzie Bonusowym”.

Dlaczego Warto Skorzystać Z Bonusu Bez Depozytu?

Są one aktywowane odpowiednim ciągiem znaków, który należy wpisać w formularzu płatności, rejestracyjnym lub w sekcji Bonusy na witrynie kasyna (w zależności od wybranej opcji). Wtedy użytkownik może skorzystać z przypisanych do danego kodu bardzo atrakcyjnych t większości wypadków korzyści. Oczywiście jest in order to bardzo miłe, gdy otrzymujesz IceCasino bonus bez depozytu 25€ za darmo. W tym akapicie przedstawimy wam Tips & Techniques, jak można zarobić i wygrać prawdziwe pieniądze dzięki temu bonusowi. W PolskieKasyno monitorujemy te zmiany i informujemy naszych czytelników o zaufanych i sprawdzonych kasynach online, które oferują bonus za rejestrację bez depozytu. Większość bonusów darmowych spinów bez depozytu jest ograniczona tylko carry out jednej gry, względnie kilku gier od tego samego dostawcy.

Gdy skończysz już grać z . Ice Casino added bonus za rejestrację, mhh twoim koncie będzie na pewno trochę środków do wypłacenia. Pamiętaj, że simply by móc korzystać ze zdobytych w 10 sposób środków konieczne jest dokonanie obrotu. Po tym będziesz mógł wybrać jedną z kilku procedur – w tym kryptowaluty.

7bitcasino – 30 Darmowych Spinów Mhh Slot Deep Sea

Vulkan Vegas logowanie to proces bardzo szybki i prosty, który za chwilę przedstawimy. W ten sposób aktywowałeś kod promocyjny i przypisaną do niego ofertę bonusową! W podobny sposób postępujesz z kodami dla wpłaty we innymi — wówczas wpisujesz je watts formularzu płatności lub w sekcji um nazwie BONUSY. Odpowiednie informacje znajdziesz t opisie każdej konkretnej oferty. Dla tego konkretnego kasyna znajdziemy dwa rodzaje kodów promocyjnych.

Absolutna legenda wśród kasyn – Lemon Online casino – ma specjalną ofertę dla wszystkich, którzy z jakiegoś powodu nie założyli jeszcze konta. Będziemy aktualizować tę listę o najnowsze bonusy bez depozytu, gdy tylko się pojawią. Osoby, które nie und nimmer posiadają konta watts kasynie oraz keineswegs mają możliwości zalogowania się bezpośrednio, korzystając z mediów społecznościowych. Wtedy muszę przejść klasyczny proces, czyli Vulkan Vegas rejestracja. Gracz zostaje przeniesiony na stronę główną kasyna, an em górnym pasku powinna widnieć jego nazwa użytkownika bądź imię. Nie – do wyboru będziesz miał tylko jeden z . bonusów, dlatego dobrze zastanów się, który jest dla ciebie atrakcyjniejszy.

Czy Do Odebrania Bonusu Potrzebny Jest Ice Casino Kod Promocyjny?

Dzięki temu posiadanie Ice On line casino kod promocyjny bez depozytu ub kod na darmowe spiny nie jest konieczne, a ty sam nie musisz się martwić, że zapomnisz go wpisać podczas zakładania konta. Również na naszej stronie możesz otrzymać Playamo bonus za rejestracje. Strona opisanego przez nas kasyna przyciągaje Cię bonusem IceCasino 50 darmowych spinów bez depozytu we maje nadzieję, że będziesz zadowolony z . pobytu w kasynie. Gracze, którzy cieszą się pobytem w kasynie, prawdopodobnie dokonają depozytu na prawdziwe pieniądze po wykorzystaniu IceCasino 50 darmowych spinów. Kasyno chce przyciągnąć graczy grających na prawdziwe pieniądze, dlatego też chce zapewnić ci jak najlepsze wrażenia z momentu wejścia carry out witryny.

Jak najbardziej, promocję odbierzesz em dowolnym urządzeniu przenośnym, na którym strona kasyna działać będzie poprawnie – a new więc na telefonach i tabletach. Mówiąc o Ice Online casino free spins chcemy jeszcze na chwilę wrócić do wagera, który wynosi wy??cznie x3. To naprawdę korzystna okazja, gdyż często promocje tego typu mają znacznie wyższe obroty, często wynoszące x30.

Jakie Zasady Obowiązują W Przypadku Icecasino 50 Free Of Charge Spinów Bez Depozytu?

Wiele bonusów w kasynie online wymaga wpłaty, aby się zakwalifikować, ale bonus darmowych spinów gracze otrzymują tuż po rejestracji, bez konieczności depozytu. Pamiętaj jednak, że kasyna online zazwyczaj ograniczają graczy do jednej oferty darmowych spinów bez depozytu. Grając przy użyciu darmowego bonusu bez depozytu możesz zdecydować bądź chcesz dalej grać w kasynie, bądź też warto grać na danym automacie za prawdziwe pieniądze. W tym momencie na skrzynkę mailową powinna przyjść wiadomość potwierdzająca zakończenie procesu Vulkan Vegas rejestracja. Wystarczy wejść w link z wiadomości, który przekieruje gracza na stronę logowania kasyna.

Nie ma możliwości, aby to zmienić, ponieważ jest to tylko część sposobu, t jaki działają kasyna, jeśli chodzi um tego typu bonusy. Polskie kasyna są zobowiązane do uczciwego i odpowiedzialnego działania na podstawie posiadanej licencji, ale nie und nimmer zawahają się podjąć działania, jeśli uznają, że w jakiś sposób nadużyłeś bonusu. Należy uczciwie korzystać ze wszystkich ofert, w przeciwnym wypadku ryzykujemy utratę bonusu. Często zdarza się, że mamy tylko 24 godziny, sincero kilka dni em skorzystanie z bonusu bez depozytu. Jest to oczywiste, że łatwiej będzie wypłacić added bonus bez depozytu z koniecznością np.

Czy Mogę Jednocześnie Odebrać Ice Kasyno 50 Spinów Bez Depozytu Oraz Twenty-five Euro Darmowa Kasa?

Wszystkie one są konkurencją, ponieważ wszystkie chcą, abyś był ich graczem. Kasyna ght wykorzystują bonusy, promocje, gry, programy lojalnościowe i cashback, aby przyciągnąć nowych graczy. Bonusy są wyj?tkowo ważne dla nowych graczy i zatem właśnie kasyna on the internet je oferują. IceCasino 50 darmowych spinów przy rejestracji jest bardzo atrakcyjnym bonusem, ponieważ można wygrać prawdziwe pieniądze bez dokonywania wpłaty. Jeśli szukasz dla Vulkan Vegas casino bonus codes, to w?a?ciwie wybrałeś, jako że nasze kasyno znane jest między innymi z doskonałej wręcz oferty promocyjnej.

Zazwyczaj oznacza to, że kod promocyjny zostanie automatycznie dodany perform Twojego konta. Niestety nie każde kasyno z bonusem na start bez depozytu jest takie samo. W rzeczy samej, każde kasyno mother własny proces, za pomocą którego zyskuje się bonusy bez depozytu.

Bonus Bez Depozytu Icecasino – 50 Darmowych Spinów Czy Twenty Five Euro Bez Depozytu!

Bonusy oferowane przez kasyna Polakom zwykle zmieniają się od czasu do czasu. Często jest to adición pieniężna, lub darmowe spiny, które są oferowane bez konieczności dokonania wpłaty. Kasyna robią to t nadziei, że gracze pokochają ich platformę, oraz mały darstellung hojności, a następnie zaczną deponować pieniądze i będą grać dalej. Vulkan Vegas to jeszcze jedno z kasyn, które zaskarbiły sobie przychylność i sympatię polskich graczy.

Może to be able to być paszport, dowód osobisty, prawo jazdy lub selfie se swoim identyfikatorem. Użytkownik może ukryć numer i serię paszportu, z wyjątkiem dwóch dowolnych znaków. Ten plik albo zdjęcie o wysokiej jakości trzeba przeciągnąć watts pierwsze pole u nazwie Numer identyfikacyjny fotografii.

Darmowe Spiny Za Rejestrację Bez Depozytu

Polecamy uprzednio dokładnie przeczytać pełny regulamin promocji mhh stronie kasyna, aby dowiedzieć się grunzochse zdobyć darmowe pieniądze za rejestrację bez depozytu. Bonus bez depozytu lub innymi słowami darmowy reward to nic innego jak gratis oferowany przez kasyna online dla swoich graczy. Darmowa kasa za rejestrację bez depozytu jest również oferowana dla obecnych klientów kasyna, którzy byli nieaktywni przez pewien czas, lub w ramach oferty specjalnej. Poniżej znajduje się lista kasyn online w Polsce, które oferują nowym graczom topowe bonusy za rejestrację bez depozytu.

Kiedy już wypełnisz informacje, zaakceptuj Regulamin Kasyna i potwierdź je. Aby upewnić się, że adres e-mail podany podczas rejestracji jest prawidłowy, przejdź do swojej skrzynki pocztowej i kliknij na back link aktywacyjny. Po spełnieniu podstawowych zasad rejestracji, Twoje konto jest gotowe. Wejdź na stronę, zaloguj się i sprawdź – Twój bonus powinien zostać naliczony automatycznie. Dla większości graczy korzystanie z bonusu kasynowego bez depozytu będzie procesem bezproblemowym. W większości przypadków, będziesz musiał spełnić wymagania dotyczące zakładów lub gry, zanim będziesz watts vulkanvegaspl.com stanie wypłacić swój bonus bez depozytu. My jednak zebraliśmy w jednym miejscu pokaźną ofertę bonusów bez depozytu oferowanych aktualnie przez kasyna internetowe.

Czy Aktywuję Glaciers Casino Kasyno Added Bonus Przez Urządzenie Mobilne?

By odebrać darmowe spiny za rejestrację, koniecznie skorzystaj z naszego specjalnego linku. Warto więc pamiętać o tym okresie rejestrując się w kasynie, które oferuje bonus bez depozytu, ponieważ po tym czasie reward przepadnie. Każdy unces nas na pewno choć raz słyszał powiedzenie, że t życiu nie ma nic za darmo. Po części taka sytuacja również występuje w przypadku bonusu bez depozytu. Bonus bez depozytu jest najbardziej poszukiwany wśród użytkowników kasyn on-line. Ponadto, istnieje możliwość dodania kolejnego dokumentu po kasyno Vulkan Vegas logowanie, jeśli istnieje konieczność dokładniejszego określenia swojej tożsamości.

Raz jeszcze przypominamy, że regulamin zawsze będzie zawierał informację, w jakim czasie należy spełnić wymagania dotyczące rozgrywki. Bonusy bez depozytu są zazwyczaj objęte warunkami obrotu od x20 do x40. WestCasino to ciekawe kasyno z intrygującą, utrzymaną w wesołym tonie, szata graficzną. Oferta 30 FS bez depozytu dla osób, które zarejestrują się przy użyciu naszego linku, który przygotowaliśmy specjalnie dla Was. Weryfikacja KYC jest niezbędna do odblokowania możliwości wypłacania środków na swoje konto.

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