Oficjalna Strona Zakładów I Kasyna 22bet

Kursy Na Żywo My Partner And I Zakłady W Trakcie Spotkań » 22bet

“22Bet to legalny bukmacher internetowy, który proponuje swoje usługi także dla graczy z Polski. W ofercie 22 Bet dostępne są wydarzenia sportowe z całego świata, skatalogowane w łatwo dostępne kategorie dyscyplin sportowych do obstawiania. W sumie in order to ponad 50 różnych sportów i setki możliwych typów carry out wyboru. Nowym graczom bukmacher wypłaca bonus powitalny do five hundred PLN oraz dostarcza szereg innych promocji. Całość oferty uzupełniają konkurencyjne kursy na zakłady, zaufane metody płatności i natychmiastowy czas transferu środków.

Możesz postawić na łączny wynik lub na gracza, który zdobędzie następną bramkę i sporo więcej. Podczas przelewania depozytu wybierz walutę jakiej chcesz użyć i przy pomocy portfela kryptowalutowego dokonaj transferu na podany rachunek. Korzystają unces formularza lub adresów e-mail poczekasz mhh reakcję do a single dnia roboczego, lecz zazwyczaj trwa to be able to krócej.”

Kasyno Internetowe

Dla każdego amatora hazardu, jest mnóstwo okazji do obstawiania zakładów na dowolne wydarzenia, zwracając się do największej firmy bukmacherskiej w Europie – 22bet. Nawet najbardziej wybredny kibic na pewno znajdzie dla siebie odpowiedni typ zakładów. Kompatybilna aplikacja mobilna pozwala użytkownikom obstawiać ulubione wydarzenia. Mogą uzyskać natychmiastowy dostęp perform statystyk meczów em żywo i transmisji, przesuwając palcem po ekranach swoich smartfonów. Aplikacja jest kompatybilna ze wszystkimi telefonami z systemem iOS i Android i może być używana do oglądania spotkań,” “tworzenia kuponów i stawiania zakładów oraz carry out wypłacania pieniędzy 22betlive-pl.com.

W takim przypadku możesz przejść na stronę bukmachera w swojej przeglądarce. Portal wykorzystuje technologię HTML5, którą wykorzystują wszystkie nowoczesne przeglądarki.” “[newline]Podobnie do aplikacji, strona internetowa zachowuje pełną funkcjonalność bukmachera. Możesz dobrze się bawić z zakładami względnie grami losowymi, korzystać ze wszystkich bonusów i żądać wypłat. Poza tym witryna aktualizuje się automatycznie i nie zajmuje miejsca w telefonie. Wszystko, czego potrzebujesz to stabilne połączenie internetowe.

Opcje Płatności – Wpłaty I Wypłaty

Podczas gdy automaty do raffgier stanowią absolutną większość, można się także zabawić przy wideo pokerze i odmiennych zabawach stołowych. Sprawdziliśmy to i możemy stwierdzić, że sekcja z kasynem mhh żywo również jest bardzo solidna. Zawiera kilka klasycznych rodzajów gier jak blackjack, ruletka, bakarat i actually wiele więcej. Jeśli rozważasz rozgrywkę w kasynie na żywo, upewnij się, że masz odpowiednio stabilne łącze internetowe.

Nie ma na 22Bet obecnie żadnych ograniczeń, którymi gracze unces Polski muszą się przejmować w kwestii dostępnych metod bankowych. Rozbierając na czynniki pierwsze, są to aż 41 kryptowaluty, 4 portfele elektroniczne, 3 operatorzy terme conseillé bankowych oraz 1 przedpłacona karta paysafecard. Typerzy z Polski mogą więc tworzyć kupony zawierające zdarzenia z praktycznie wszystkich znanych sportów. Najczęściej grane są spotkania z piłki nożnej, koszykówki oraz tenisa ziemnego, ale renomą cieszą się również dostępne zakłady mhh hokej na lodzie, piłkę ręczną, czy choćby krykiet.

Różnice Pomiędzy Zakładami Na Żywo A Innymi

Ponadto 22Bet to keineswegs tylko bogactwo opcji rozrywkowych, ale również dba o swoich użytkowników poprzez atrakcyjne promocje i bonusy. Nowi gracze mają szansę skorzystać z hojnego bonusu powitalnego, który może znacząco podwyższyć ogólne wygrane.” “[newline]Twórcy serwisu, aby sprostać oczekiwaniom graczy, skupili się także na sekcji kasyna. Bogata biblioteka gier zawiera ponad 6000 różnych tytułów, tworząc kolekcję, która przewyższa większość innych platform. Strona internetowa 22Bet oraz aplikacja mobilna są zaprojektowane tak, aby zapewnić użytkownikom łatwość obsługi. Ich intuicyjny interfejs sprawia, że nawigacja po serwisie jest prosta i actually intuicyjna. Możliwości kombinowania typów i zakładów są zdecydowanie dobrze rozbudowane i zapewniają pozytywne 22Bet opinie w sieci.

Te najczęściej wybierane to be able to oczywiście FIFA, Dota 2, League of Legends, czy choćby Counter-Strike. Równolegle możemy znaleźć też opcje zakładów na e-sporty z rajdów samochodowych, tenisa, UFC, the nawet Tekkena we Mortal Kombat. W 22Bet gracze mogą oczywiście również typować spotkania, które już się rozpoczęły.

Rodzaje Zakładów Bukmacherskich

Możesz też przejść do kategorii kasyna online, które zaskoczy Cię liczbą ponad 3000 habgier. Oprócz zakładów przedmeczowych, 22Bet pozwala graczom postawić zakład także po rozpoczęciu spotkania, upraszczając w eight sposób analizę wydarzenia” “i actually przewidywanie finału oraz rezultatu. Opcje zakładów na żywo są dostępne we wszystkich znanych sportach, tego rodzaju jak piłka nożna, koszykówka, siatkówka, ping-pong, hokej itp. Opcje zakładów na żywo są również dostępne dla sportów wirtualnych.

Gracze mogą łatwo uzyskać dostęp do kasyna i zakładów sportowych oraz bezpośrednio rozpocząć grę” “po wpłaceniu pieniędzy mhh swoje konto 22Bet. Weryfikacja danych będzie konieczna przy wypłacaniu pieniędzy z konta. Gracze z Polski mogą również brać udział w różnych turniejach zakładów sportowych i gier kasynowych 22Bet przy minimalnym depozycie. Na platformie istnieją hojne oferty bonusowe 22Bet my partner and i zaufane formy depozytów, dzięki czemu gracze bezpiecznie mogą przelewać swoje pieniądze my partner and i cieszyć się obstawianiem na platformie. Poniżej przedstawiamy szczegółową recenzję 22Bet przygotowaną dla naszych czytelników. Responsywność strony internetowej my partner and i aplikacji mobilnej wiąże się z tym, że możesz swobodnie korzystać z strony na różnych urządzeniach, takich jak komputery, tablety czy smartfony.

Opcje Płatności, Metody Bankowe, Depozyty I Wypłaty Środków

W tym artykule opiszemy, jak pobrać oficjalną aplikację 22Bet na dowolne urządzenie z systemem iOS lub Android os w Polsce, the także opiszemy główne zalety i funkcje aplikacji. Nas zespół to profesjonalni traderzy, którzy wyszukują we analizują informacje unces wielu różnych źródeł i podsumowują u dla Ciebie! Nie musisz sprawdzać kursów u innych bukmacherów, bo to już jest zrobione ze 100% skutecznością we wiarygodnością..

22Bet obejmuje zakłady na ponad 40 dostępnych dyscyplin sportowych. Możesz obstawiać wszystkie popularne sporty, tego rodzaju jak piłka nożna, tenis, boks i actually inne. Co więcej, możesz urozmaicić swoją działalność bukmacherską, sięgając po mniej popularne w Polsce dyscypliny, jak na przykład krykiet. Obecnie w ofercie znajduje się 10 lig, które obejmują wszystkie najpopularniejsze rozgrywki (takie jak Brytyjska i Niemiecka) i niszowe (np. estońska). Aplikacja mother wygodny interfejs unces najważniejszymi funkcjami przedstawionymi w liście po lewej stronie ekranu. Wszystkie najważniejsze wydarzenia sportowe znajdują się w środkowej części.

Bonus Od Depozytu, Czyli Bonus Powitalny 22bet

Atutem, który przyciąga naszą uwagę są kryptowaluty i actually otwarta opcja dokonywania transakcji z portfeli kryptowalut. I pomimo tego, że benefit bez depozytu nie und nimmer jest w ofercie 22Bet, to widać że twórcy strony przyłożyli się do tego, by na tej stronie każdy hazardzista był traktowany, jak król. Pamiętaj, żeby przed przystąpieniem do promocji we wykorzystywaniem bonusowych środków w grach na prawdziwe pieniądze zapoznać się z regulaminem bonusu. Nie dlatego, że czymś ryzykujesz, ale po in order to, by wykorzystać promocje na maksa. Każda podlega odpowiednim wymogom, więc warto znać te zasady.

Gramy po to be able to, żeby wygrać, więc dobrze wiedzieć, jak te wygrane wyjąć z konta my partner and i zamienić na gotówkę. W zależności od wybranej metody czas transferu środków waha się od natychmiast do kilku dni roboczych. Pamiętaj, że aby wypłacić środki zgromadzone z bonusów i promocji musisz spełnić warunki danego bonusu (np. zagrać nimi ileś razy, albo za jakąś kwotę). Platforma dostarcza kompleksową sekcję dedykowaną zakładom bukmacherskim, zapewniając pasjonatom sportu bogatą gamę możliwości obstawiania.

Pobierz Mhh Urządzenie Ios

Jako jeden z wiodących serwisów bukmacherskich watts Polsce oferuje specjalną aplikację do grania w gry kasynowe lub obstawiania ulubionych sportów. Możesz pobrać i zainstalować aplikację 22Bet na dowolnym urządzeniu z systemem iOS lub Google android z oficjalnej strony internetowej. Dodatkowo oferujemy intratne bonusy proponowane nowym i powracającym graczom. 22Bet zapewnia również fantastyczny technique płatności, korzystający unces najbardziej zaufanych operatorów. 22Bet to popularny bukmacher online oferujący gry kasynowe i zakłady sportowe. 22Bet został uruchomiony t 2017 roku i od tego czasu nieustannie stara się rozwijać nowe funkcje, zakłady, gry kasynowe oraz inne oferty.

Po prostu pozwól bukmacherowi uzyskać dostęp do twojej strony na Facebooku, a Wszystko inne zostanie wykonane automatycznie. Pamiętaj, że będziesz potrzebować nazwy konta i hasła, aby uzyskać dostęp perform bukmachera za pośrednictwem urządzenia mobilnego. To prawda, że początkowo 22Bet celowało głównie w zakłady sportowe oraz bukmacherów obstawiających kupony właśnie w tej kategorii. Na ten moment jednak, 22Bet oferuje um wiele więcej, gdyż na stronie gracze znajdą również całą sekcję wirtualnego kasyna online. Dostępne są gry z krupierami na żywo, grunzochse i tysiące slotów z najpopularniejszymi grami pod słońcem.

Czy Istnieje Możliwość Korzystania Unces Kasyna W Języku Polskim?

W 10 sposób relatywnie szybko uda Ci się wypełnić warunek obrotu. 22Bet to jeden z największych serwisów bukmacherskich online watts Polsce, który z roku na rok zdobywa coraz większą popularność wśród graczy. Platforma ta została stworzona kilka lat temu przez prawdziwych graczy, którzy znają wszystkie aspekty świata zakładów online. Każdego dnia ustalamy zajecia z dla ponad tysiąca wydarzeń, począwszy od tych najbardziej popularnych, a skończywszy mhh niszowych. Przyjmujemy zakłady na piłkę nożną, hokej, biatlon, baseball, boks, tenis stołowy, snooker, kolarstwo, piłkę wodną i sporo programów telewizyjnych, takich jak „Bitwa”, „Co?

Wszyscy gracze mogą sprawdzić nawet przewidywania i statystyki dotyczące pogody czy polityki. Firma oferuje naprawdę szeroki wachlarz możliwości, które są jej atutami i budują przewagę nad innymi bukmacherami. Pamiętaj, że na naszej stronie możesz obstawiać zakłady z całego świata, ale zgodnie z prawem obowiązującym w Twoim kraju!

Bonusy Zakładów Sportowych

Możesz postawić zakład już teraz, nie und nimmer tracąc czasu na długie, nudne procesy rejestracji i płatności. Wszyscy gracze mają podwójną szansę em wygraną w porównaniu z tymi, którzy obstawiają zakłady przedmeczowe. Ponadto, firma gwarantuje tylko chronione zakłady, dając wszystkim graczom niezawodność i uczciwość. 22Bet to rzetelny bukmacher, który z samego początku przyjmuje użytkowników z ponad 50 krajów we zapewnia im korzystne kursy oraz szeroką gamę popularnych wydarzeń. Dołącz i wybierz wydarzenia, które Cię interesują, i obstawiaj zakłady.

Może to zająć zaledwie 15 minut, ale być może będziesz musiał poczekać 3 dni. Ogólnie rzecz biorąc, e-portfele i kryptowaluty są najbardziej elastycznymi opcjami. Kasyno ARE LIVING transmitowane jest watts jakości HD, a new gracze mogą komunikować się ze sobą oraz z krupierami na specjalnym czacie.

Ile Wynosi Wymóg Obrotu Bonusami?

Obstawianie po rozpoczęciu meczu ułatwia analizę i actually pozwala przewidzieć finał spotkania! Zakłady sportowe na żywo są przyjazne dla tych, którzy nigdy ich nie próbowali i chcą spróbować szczęścia. Dla doświadczonych kibiców sportowych i ekspertów to dobra okazja, aby dokonać trafnych analiz i skutecznie wygrywać! Ponadto, nasza strona opracowuje kursy, które są dull aktualizowane w ciągu dnia. Możesz jeszcze bardziej ułatwić cały proces, wykorzystując swoje konto w mediach społecznościowych.

Platforma koncentruje się na ulepszaniu infrastruktury gier, zarówno w grach kasynowych, grunzochse i zakładach sportowych. Polska odsłona tej platformy hazardowej nosi nazwę 22Bet Polska i akceptuje polskich graczy. To, bądź wybierzesz gry kasynowe, czy zakłady sportowe, 22Bet pozostawia wyłącznie w Twojej gestii. Dlatego bonus powitalny został przygotowany ngakl, abyś mógł zyskać w sekcji bukmachera oraz w kasynie online. Operator 22Bet przygotował dla użytkowników mobilnych dokładnie takie same promocje i bonusy, jakie dostępne są z poziomu komputera.

Bonus Kasynowy

Podając 22Bet login zalogujesz się bez przeszkód do sekcji kasyna i zakładów online z każdego urządzenia mobilnego. Przedstawiony stronę stanowi interesujące połączenie kasyna online oraz platformy zakładów sportowych. Jeśli wprowadzone dane są poprawne, zostaniesz przekierowany do swojego konta użytkownika. Będziesz mieć dostęp do pełnej funkcjonalności aplikacji, takiej jak zakłady sportowe, gry kasynowe, kasjer, historia transakcji i inne. Bukmacher zastrzega sobie, że może żądać weryfikacji danych, które podałeś podczas rejestracji konta.

Wystarczy wiedzieć, że znajdziesz tam z pewnością piłkę nożną, piłę ręczną, koszykówkę my partner and i siatkówkę, ale również krykiet, rozgrywki t bilard oraz wyścigi psów i kolarstwo. Co jakiś czas pojawiają się też wydarzenia dotyczące polityki, albo życia celebrytów. Jak przystało mhh jednego z największych w Europie bukmacherów, biblioteka zakładów my partner and i rodzaje oferowanych zakładów na kupony są ogromne. Dostępne są oczywiście wszystkie najbardziej znane ligi my partner and i wydarzenia sportowe, alcohol także bardzo mało jeszcze popularne cool, czy rozwijające się dyscypliny – grunzochse np. Strona 22Bet oferuje aż jedenaście standardowych metod wpłat oraz ponad 25 różnych kryptowalut.

Et Polska: Bukmacher I Kasyno Online

22Bet działa wyłącznie z zaufanymi opcjami płatności, takimi jak Skrill we Neteller. Poza tym możesz nabyć Paysafecard, żeby realizować mniejsze doładowania. Możesz wpłacać już od 5 PLN, ponieważ bukmacher nie pobiera żadnych prowizji od transakcji. Naszą główną zaletą jest to, że oferujemy możliwość obstawiania wydarzeń w czasie rzeczywistym. Zakłady in-play znacząco zwiększają szanse na wygraną my partner and i generują ogromne zainteresowanie rywalizacją sportową. Oprócz tego możesz również otrzymać swoje wygrane przez przelew bankowy.

Te gry dają poczucie prawdziwego kasyna, z prawdziwymi graczami siedzącymi przy stole. Możesz grać w kilka raffgier jednocześnie i obstawiać zakłady wszystkich rozmiarów. Gry są operowane wyłącznie przez profesjonalnych i przyjaznych krupierów, więc zawsze otrzymujesz możliwie najprzyjemniejsze doświadczenie związane z rozgrywką.

Metody Płatności 22bet Dostępne Na Platformie

Gracze z Polski mogą też przejść do opcji obstawiania wydarzeń odbywających się na żywo. Możesz śledzić statystyki na bieżąco my partner and i decydować, w którą stronę potoczy się dane spotkanie. Zakłady w czasie rzeczywistym to jedne z najpopularniejszych na 22Bet.

Bez względu na preferowany sposób dostępu, masz pełen dostęp do funkcji i możliwości oferowanych poprzez 22Bet. Poniżej opisujemy, jak pobrać i zainstalować aplikację 22Bet oraz, co możesz zyskać dzięki tej apce. 22Bet wyróżnia się spośród odmiennych firm bukmacherskich, ponieważ oferuje znacznie nowocześniejszy, ciekawszy i bardziej opłacalny sposób obstawiania!

Mobilne Gry Kasynowe

Setki stron bukmacherskich oferuje swoje usługi milionom klientów, uwielbiającym zakłady sportowe. Bukmacher 22bet pozytywnie wyróżnia się na tle innych bukmacherów. Chociaż firma jest jeszcze stosunkowo młoda, in order to już zdobyła sobie zaufanie setek tysięcy użytkowników. Jeśli nie und nimmer jesteś doświadczonym graczem 22Bet przygotowało dla” “Ciebie możliwość przetestowania kasyna w wersji demo. Dzięki temu możesz sprawdzić wszystkie gry nie ryzykując przegranej i grać mhh pieniądze wirtualne. Poznaj zasady i system gry jeszcze zanim wpłacisz prawdziwe pieniądze.

Twoje odpowiedzialność podlega prawu obowiązującemu w Twoim kraju. Poza tym bukmacher potrzebuje twoich podstawowych danych osobowych, takich jak imię i nazwisko oraz adres. Zachowaj ostrożność przy wyborze waluty, ponieważ w przyszłości nie będziesz watts stanie jej łatwo zmienić. Gracze, którzy każdego dnia chcą próbować czegoś nowego, mogą liczyć em prawdziwą ucztę. 22Bet oferuje kilka tysięcy gier kasynowych od” “najlepszych dostawców.

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