“Grandes Sites De Cassino Online No País Brasileiro 2022

Melhores Cassinos On-line Nacionais Conheça U Top Ten 2024

Content

Geralmente, os melhores cassinos online oferecem alguma bonificação nos teus primeiros depósitos. O Stake está na lista dos grandes cassinos online também devido ao fato de oferecer uma grande quantidade de criptomoedas como opção de depósito. Ao contrário de diferentes sites, o depósito em criptomoedas não é convertido pra reais e você aposta com while próprias criptomoedas.

Ao acessar um web site de jogos, transitamos por diferentes paginas em questão sobre minutos, tudo isso para testar the organização, o carregamento e a navegação entre um product e outro. Nos do brasilcasinos. apresentando. br nos cadastramos e jogamos em quaisquer cassinos da lista acima. É comum que novos apostadores sejam tentados por uma delicia de valor culto, sem que reconheçam detalhes, como operating-system requisitos de ex profeso ou validade. Lembrando que, o regreso ao jogador é uma porcentagem calculada ao longo sobre milhares de jogadas, servindo apenas tais como indicador para calcular a margem carry out apostador e weil casa. Um position com RTP sobre 95% assegura, teoricamente, que 95% perform montante de apostas seja distribuído aos apostadores e 5% permanecem para to cassino. Esses provedores são empresas os quais criam e inventam slots e mesas de cassino ao vivo.

Aplicativo De Cassino Systems Site Mobile

Opções populares, como Skrill, Neteller e PayPal, também estão amplamente disponíveis. Existem, inclusive, cassinos que aceitam criptomoedas para os fãs dessa modalidade. Pagar num cassino on-line deve oferecer diversas garantias de segurança e é nesse ponto que a validade de alguma licença importa bastante cassinos com opções de depósito e saque locais.

Esse é também um slot emocionante e também bem procurado nos grandes cassinos online. Agora basta dar u próximo passo electronic criar a tua conta nos bons cassinos no País brasileiro que estão na nossa lista. Caso não se lembre, retorne o post para cima electronic veja novamente um diferencial que cada site oferece.

Jogos De Cassino Ao Vivo

Destacamos ainda esse cassino por seu núcleo em oferecer os jogos mais buscados e as últimas novidades do lugar. Com base nas nossas avaliações elizabeth experiência enquanto jogadores de cassino na mais de 55 plataformas de apostas diferentes, reunimos alguma lista de 12 recomendações. Quando ze trata de chegar a uma resposta sobre qual é a recomendação número 1 entre os melhores cassinos on the internet, nós não descansamos até chegar” “the um veredito final para os nossos leitores. Ao acompanhar e avaliar um cassino há algunos fatores que precisam ser considerados. A qualidade e variedade dos jogos, at the se existem opções de games ao vivo e afin de dispositivos móveis, são alguns dos tópicos a serem verificados, entre vários diferentes.

Porém, fizemos o nosso melhor neste artigo para apresentar para você locais onde você pode se divertir com segurança e aproveitar algumas vantagens. Desse método, todos os cassinos parceiros de uma marca vão oferecer os games desenvolvidos por ela. Desse modo, procure sempre apostar na cassinos bem conhecidos e indicados por sites especializados como o nosso.

A Segurança É O Principal Para Os Sites De Cassino On The Internet Aqui No Brasil!

Dessa forma, ao decidir depositar, você encontrará com facilidade opções que está acostumado. Sendo alguma plataforma exclusiva para cassino online, oferece desde caça-níqueis até jogos de direccion clássicos. Além disto, com os Placares Diários do Continente europeo” “Gambling establishment os jogadores tem a possibilidade de ganhar recompensas durante sua colocação nas apostas. Popular entre os apostadores brasileiros, um Cassino Blaze ze destaca pela sua variedade de crash games, como o jogo do aviãozinho, jogos originais elizabeth seleção de jogos de mesa em português.

Ao desenvolver um processo de avaliação para identificar operating-system melhores cassinos on the web, esses especialistas criaram recomendações valiosas para os usuários. Tutoriais, regras claras, diversos exemplos e suporte em português, são pontos que não devem ser negociados na hora para escolher uma tablado de aposta. Os melhores cassinos on the web trabalham com provedores de jogos de igual importância. Na prática, os” “títulos exclusivos são raros e quase continuamente nascem de parcerias entre a plataforma e o provedor de jogos.

✅ Opinião De Usuários Brasileiros

O vídeo stop online no Casino. com oferece alguma experiência emocionante para jogo para jogadores de todos operating system níveis. Com alguma ampla seleção de variações de stop, os jogadores podem desfrutar do clássico bingo de 80 bolas e averiguar versões temáticas únicas como Immortal Relationship e Thunderstruck II Video Bingo. Os Esportes Virtuais trazem toda a emoção das competições esportivas diretamente para a sua tela, sem fallar esperar pelo próximo jogo ou corrida! Basta acessar the página de esportes virtuais para descobrir uma seleção de esportes como futebol, basquete, corrida sobre automóveis e bem mais.

Para que desta maneira os jogadores possam começar suas apostas com créditos de aposta extras. Bem como, úteis elementos e promoções que oferecem uma experiência distinta. O site betano é 1 dos mais completos do mundo, oferecendo diferentes possibilidades para jogos e métodos de pagamento voltado ao público do brasil.

Os Riscos De Jogar Em Cassinos Online Ilegais

Outra possibilidade é ganhar rodadas grátis em programas de fidelidade, e outros tipos sobre bônus. Com 1 layout 5×4 elizabeth uma trilha sonora emocionante, você tem a possibilidade de ganhar rodadas grátis e multiplicar seus ganhos se cair símbolos iguais numa de suas ten linhas. Também é possível ganhar rodadas grátis e conseguir multiplicadores aumentando seus ganhos e vitórias. Já os games de Crash podem ser bem tentadores em virtude de quem gosta sobre fazer apostas.

Essa ação facilitará todo um entendimento e navegação dentro da trampolín, sem a necessidade de ajuda do suporte ou uma tradução automática. Abaixo, descreveremos o porquê esse 10 produtos são indispensáveis ao escolher um cassino. Ao se cadastrar no BC. Sport o casino te presenteará com 1 bônus de 300% no seu primeiro depósito de no mínimo R$50.

Bingo

Ou seja, o quanto a empresa adaptou o seu web site para o ramo brasileiro, permitindo que brasileiros possam navegar utilizando seu idioma nativo. Na Izzi Casino, os novos jogadores são recebidos com um bônus de boas-vindas para 100% de até R$ 1. five-hundred, proporcionando um móvil inicial para investigar sua coleção sobre jogos. Além disso, o site mantém os jogadores atualizados sobre os custos acumulados dos jackpots, oferecendo a probability de ganhar elevados prêmios. Com games exclusivos, como Bright Wolf Moon electronic bônus regulares, o JackpotCity também possui diversos métodos para pagamento, como um Pix, com depósito mínimo de R$ 10. Mas não” “é só o bônus de boas-vindas os quais dá aquele impulso aos seus games, a plataforma também oferece rodadas grátis às terças-feiras nos depósitos, dando continuidade à diversão ao longo da hebdómada.

Com isso, é essential que um web-site seja seguro em virtude de estar no meio dos grandes casinos online do mercado. Os bons cassinos online utilizam medidas de segurança exigentes, como criptografia de dados SSL (Secure Socket Layer), para proteger suas informações pessoais electronic financeiras. Essa trampolín oferece também métodos de pagamento rápidos e confiáveis, games ao vivo no ano de Português” “assim como os melhores caça-níqueis.

Uma Boa Navegação E Experiência Zero Cassino É Fundamental

Você normalmente consegue encontrar u logotipo dessas entidades na parte inferior do site 2 cassinos parceiros. No momento, o País brasileiro não conta apresentando uma autoridade internacional responsável por monitorar os sites para cassino do país. Desse modo, em virtude de verificar a confiabilidade dessas plataformas é preciso analisar ze as mesmas têm licenças emitidas por entidades internacionais dedicadas à essa finalidade. Pode acontecer de o bônus servir creditado automaticamente, ou ser necessário inserir um código promocional ou ainda entrar em contato através do suporte para querer o” “benefício. Recomendamos que u usuário leia operating system Termos e Condições do Bônus continuamente que ingressar num cassino online. Geralmente, essa informação tem a possibilidade de ser verificada simply no rodapé dos internet sites de cassino.

Confira na maior detalhe lo que funciona esse criterio como também o estado dos cassinos legais on the internet no Brasil. Todas while transações levam breves minutos para ficarem concluídas, chegando some sort of ser pagos no ano de até 15 minutos depois da solicitação na plataforma. Nas demais alternativas, há sempre um detalhe ou outro o qual chame mais some sort of atenção. Neste sentido, vale a poquedad comparar as opções e ver que destaque vai de acordo com a new sua expectativa na hora de apostar. Atualmente, a licença de apostas do País brasileiro está em trâmite de estruturação.

Novos Cassinos Online Lançados Em 2024

O conhecido “vinte e um” forma, ao reverso das roletas elizabeth dos slots, um trio de ouro dos sites de cassino. Nas mesas de blackjack você encontra emoção, estratégia e muita adrenalina, principalmente quando você entra numa sala ao vivo, possuindo um crupiê sobre carne e osso comandando a comensales via streaming sobre vídeo. Assim tais como a roleta, to blackjack tem várias variações nos internet sites do ramo, nestes casos vale a poquedad testar suas diferentes versões até você encontrar a sua favorita. Uma das poucas lacunas o qual notamos no cardápio é a carência de mesas ao vivo em português. A plataforma é toda traduzida, subsiste atendimento ao consumidor no nosso jerga e sua reputação no mercado community é cada ocasião melhor.

Por fim, os também incríveis cassinos online devem oferecer também um aplicativo de qualidade para que o jogador possa apostar para onde estiver. Assim, esse é 1 ponto essencial hoje em dia para sostenerse na lista 2 melhores cassinos on the internet. A escolha do melhor cassino on-line é crucial em virtude de uma experiência para jogo segura. Por isso, preparamos em virtude de você uma análise completa dos bons sites de cassino online do país e do mundo em 2024. Para um cassino on the internet ser considerado o dos melhores cassinos no Brasil ele precisa ter variedade de jogos. Ou seja incluir os clássicos, como slot machine games da frutinha, durante exemplo, bem tais como versões mais modernas, como os collision games.

Betway

Se você é um apaixonado por jogos de cartas e quer testar suas habilidades enquanto lucra com dinheiro para verdade, vale a new pena dar uma olhadinha no cassino online da 1xBet e aproveitar o bônus de boas-vindas. Dê uma olhadinha nos próximos tópicos” “no qual vamos nos aprofundar nos jogos os quais você irá encontrar nos cassinos on the internet. O mercado dos cassinos online tem apresentado um imenso crescimento e isso significa que há sempre novos sites chegando ao País e do mundo.

O cassino Sportsbet. io é perfeito para os jogadores que estão na busca de alguma experiência VIP, já que ele oferece um gerente pra sua conta, promoções exclusivas e lignes mais altos. O cassino Parimatch também é conhecido por qualidade de teus torneios, com opções para diversos games com altas premiações em dinheiro distribuídas no meio dos melhores colocados. No cassino Parimatch, os novos jogadores podem desfrutar para uma dos maiores bônus de boas-vindas do Brasil, em que é possível ganhar até R$ 7. 500 para começar a fazer suas apostas. Esse jogo é um grande clássico que está disponível em todos os cassinos em várias versões. Recentemente surgiram os jogos de Crash. Esses jogos viraram mania no mundo inteiro e você tem a possibilidade de encontrá-los facilmente na qualquer cassino.

Roleta Online

Um bom exemplo disso é a combinação de mecânicas sobre Slot com jogos de Bingo e com o próprio Jogo do Bicho. Nos jogos contra a new máquina, você ainda irá encontrar games com regras diversificadas e recursos que tornam as partidas mais interessantes e lucrativas. Algumas empresas também já disponibilizam atendimento via Telegram ou WhatsApp, já que o suporte via telefone ainda é bem insólito aqui no brasil. Também é muito importante la cual o cassino ofereça meios de comunicação diversificados e os quais vão além perform e-mail.

Essa oferta nada cependant é do os quais uma vantagem la cual permite que você ganhe créditos extras ao fazer to seu primeiro depósito no cassino de sua preferência. Isso funciona como se fosse um contemporáneo para que você jogue os seus jogos com ainda mais saldo. E, claro, só incluímos no nosso rank os cassinos on the web autorizados no Brasil. O bônus continua durante um ano inteiro, independentemente de quantos depósitos o jogador fizer. Além do Bônus de Boas-Vindas, os jogadores tem a possibilidade de desfrutar do Bônus de Lealdade Semanal, que garante recompensas regulares por sua fidelidade.

Tudo Sobre Operating-system Cassinos No Brasil

Desse modo, nossa análise identificou a bet365 asi como uma das grandes casas de apostas online para produzir depósitos e saques. Após um rigido processo de análise e comparação, apresentamos agora o” “nosso Top 3 dos melhores cassinos on the internet no Brasil. Essa seleção cuidadosamente elaborada pela nossa equipe leva em consideração uma ampla diversidade de fatores. Ao selecionar os melhores cassinos online not any Brasil, nossa equipe se empenhou no ano de analisar diferentes fatores. Você pode estafar seus ganhos num cassino online durante via de transferência bancária, pix ou outras opções o qual permitem saques. Considere que a grande parte dos cassinos online brasileiros só proporcionam levantamentos com métodos que já tenham sido validados ao efetuar um depósito.

O globo dos jogos para mesa é no qual tudo começou e seria difícil pensar o jogo on the web sem alguns games de alta qualidade de Blackjack, Bacará, Roleta, Pad Gow e Sic Bo.” “[newline]Como jogador de Black jack, você quer jogar em um cassino online com muitas mesas e no qual você nunca necessita esperar antes la cual um assento fique disponível. É por isso que a new análise que fazemos de todos os cassinos online começa a new partir dos jogos. Com tantas alternativas disponíveis no mercado, escolher o cassino online certo tem a possibilidade de ser uma tarefa difícil. Paola é a responsável através da edição e redação do Casino. org em Portugal e Brasil. Sua profesión na indústria para cassinos online começou três anos atrás como escritora independente para distintos web sites na América Latino. Se gosta para grandes bônus, um Europa Casino pode ser a escolha perfeita, graças ao seu bônus de boas-vindas.

Por Que Cassino On The Internet É Permitido Zero Brasil?

Na verdade, você irá compartilhar diversas informações pessoais, bancárias electronic de contato” “com o cassino. Confira todos os termos e condições na página weil oferta para não perder nenhum detalhe. Veja com atenção os limites sobre apostas individuais assim como os prazos para u cumprimento do skidding. Os jogadores o qual usam Doge Gold coin podem aproveitar uma série de bônus e promoções, la cual vão desde bônus de boas-vindas até recompensas por lealdade.

Entretanto, os cassinos físicos continuam vetados, sendo considerados games ilegais no Brasil. Ao nos cadastrar na cassinos que analisamos, conseguimos experienciar since complicações ou while facilidades oferecidas vello site, e no ano de seguida descrevemos quais foram as informações solicitadas. Priorizem casinos que oferecem esta rede de apoio 24 horas por dia, com agentes falantes de Luso via chat ao vivo ou telefone. Os bônus em grande maioria são ofertados aos novos membros, com to objetivo que você conheça a tablado, teste novas estratégias e potencialize os seus ganhos. Outro fator que interfere diretamente na experiência dos usuários, é a data de início nessa plataforma. Quanto menor o pace, menos sabemos informar sobre a qualidade” “carry out serviço oferecido.

Recomendações Carry Out Melhorescassinosonline Com Afin De Pagar Num Cassino Em Segurança

Bônus elizabeth promoções especiais ao acessar o cassino online da tua preferência com o seu dispositivo móvel através do nosso site. Nosso mais objetivo é nos tornarmos o guia mais completo em relação à análises de games de cassino perform Brasil e perform mundo, e isto só é possível graças ao teu apoio. Os cassinos mais confiáveis disponibilizam um serviço de suporte 24 horas por dia elizabeth 7 dias por semana, sempre prontos para auxiliá-lo com uma dúvida systems problema a qualquer hora do dia. Esses aplicativos de cassino móvel são compatíveis com quase todos os dispositivos iOS e Android, sendo portanto acessíveis a praticamente qualquer usuário. Já na relação aos games, são centenas de títulos disponíveis elizabeth prontos para ficarem acessados de celulares e tablets, search engine optimization perder em ni siquiera un poco na qualidade para o computador.

Você pode jogar nele mesmo os quais não tenha concluído o procedimento para registro. O modos grátis é uma ótima oportunidade afin de desenvolver suas capacidades antes de jogar com dinheiro real. O administrador está sempre em contato, então você não precisa se preocupar se ninguém tem a possibilidade de ajudar em se de dificuldades. O procedimento de padrón no cassino Pin Up é fácil, rápido e confortável. Em nosso cassino on the web Brasil você encontrará variações como Tige or Better, onde será necessário somente ter um valete,” “aristócrata, rei ou ás para receber créditos pelo valor que você jogou.

Pin Up Casino – Um Líder No Mundo Do Entretenimento Sobre Jogos De Apostas

Então, constantemente avalie com cuidado cada uma dasjenige ofertas que buscar nos melhores cassinos online. O 1xBet está na retahíla dos melhores casinos online não só pelo seu bônus de boas vindas, mas também por toda a qualidade que a casa oferece para operating system seus clientes. Além disso, a segurança do web-site de cassino the dinheiro real também foi avaliada através da nossa equipe.

O bônus de registro costuma ser fundamental na hora de escolher o cassino online para jogar. Sabendo disso, os cassinos competem nestas ofertas para conseguir a atenção dos jogadores brasileiros e fazer com que eles experimentem suas plataformas. Você pode jogar aqui com depósitos para apenas R$1, at the há centenas de jogos aos quais terá acesso sony ericsson decidir jogar aqui.

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