1xbet Mobile: Aplicativo De Apostas Esportivas Em Nosso País”

O B1 Bet É Confiável? Não! Entenda A Nossa Pontuação, 2 De 5

A 1xBet é uma plataforma online confiável e completa que permite a você apostar em distintos modalidades esportivas, jogar no cassino, seguir resultados em pace real e muito mais. Com altas odds e 1 serviço ao usuario de qualidade, the 1xBet oferece uma ótima opção pra quem deseja entrar no mundo dasjenige apostas esportivas online. Os principais provedores de jogos sobre cassino ao palpitante são Evolution, Ezugi, Playtech e Pragmatic Live. Além destes quatro principais, existem ainda outros provedores que trazem salas mais raras na comparação com outras plataformas de apostas ao vivo. Para quem gosta de bingo online recurso financeiro real, pode verificar salas de stop ao vivo no site. Após testear e explorar amplamente a plataforma weil B1. Bet País brasileiro,” “encontrei uma experiência de apostas e cassino online diversificada e confiável.

No entanto, é possível encontrar algumas reclamações de jogadores sobre the falta de transparência e justiça nos jogos. O B1 Bet é o cassino online o qual não tem licença para operar aqui no brasil. Portanto, é importante lembrar que o uso desse web site é ilegal at the pode resultar no ano de penalidades legais. Dito isso, vamos falar sobre a receita e lucro estimados do B1 Gamble. De acordo com o site Reclame Aca, alguns jogadores relataram que não receberam o pagamento sobre suas apostas ganhas.

B1bet Casino – Como Funciona

O B1. BET sabe bem disso at the oferece uma gama e quantidade para mercados, tipos sobre aposta e esportes satisfatórios. Por este motivo, nós estamos sempre montando avaliações completas e aprofundadas de todas because casas de apostas presentes em nosso mercado. E, neste artigo, você encontrará tudo o o qual precisa sobre alguma casa de apostas novata, o B1. BET b1.bet site.

Todas as salas mostram o número de participantes, desta maneira como os valores mínimos e máximos para apostar. Por isso, ao visitar o site verá opções suficientes pra não querer sair. Escolha entre, máquinas de slots, games de casino ao vivo, Esporte virtuais, Bingo ao festón e o Aviator. A área para casino da B1 Bet é impulsionada pelo software Large, que é excluido pelo governo sobre Curaçao, e consegue agregar an organizacion, além dos melhores jogos, os melhores provedores do mercado.

Quanto Tempo Leva Pra Eu Começar A Good Apostar Com Recurso Financeiro?

A principal opção de pagamento disponível é o Pics, uma transação bancária exclusiva do Brasil. Além de sua exclusividade, o Pix destaca-se como uma opção segura, uma ocasião que suas transações são supervisionadas através do Banco Central perform país. Ao explorar a seção de pagamentos na B1. Bet, é notável sua importância não apenas para transações, mas também como ponto de inserção dos códigos promocionais. Durante os depósitos, é possível asignar os códigos promocionais oferecidos pela incapere. Os saques são processados na mesma forma de deposito do depósito systems via transferência bancária quando possível. Starburst, Book of Deceased, Reactoonz e Gonzo’s Quest são muitos dos slots preferidos dos usuários do B1bet por suas mecânicas envolventes electronic temáticas cativantes.

Tudo o que você normalmente encontra em web pages de apostas está aqui, tanto em matéria de esportes quanto em cassino. Isso faz apresentando que o internet site seja” “muito completo, ideal afin de todos os meios de apostadores. Nem sempre um internet site de apostas precisa ter dezenas sobre meios de deposito para ser funcional. Na verdade, um ideal é la cual a plataforma ofereça uma experiência facilitada, dentro das demandas dos usuários. No momento, não temos a possibilidade de recomendar B1 Gamble, mas recomendamos Brazino777 https://b1betbrazil.com.br/bonus/.

O B1bet É Brasileiro?

Mas, escolher uma ou mais para uma casa para apostas pode servir uma tarefa difícil, tendo em vista a” “enorme quantidade de opções e alguns perigos invisíveis e indesejáveis. A B1 Wager é outra incapere de apostas o qual chegou ao Brasil e vem conquistando o seu espaço pelo País at the principalmente, com o público brasileiro. No entanto, um de motivos para o qual ela se torne popular é um seu principal game, o aviator. A ausência de aplicativos é compensada pela versão web otimizada, que mantém todas as funcionalidades do site principal.

Contudo, vale dizer que an ausência do aplicativo não está escrita na pedra, então a new qualquer momento a marca consegue em surpreender e proporcionar um app que torna as apostas pelo celular ainda mais fáceis. Os dados do b1bet casino são mantidos em segurança graças à criptografia de ponta a ponta. Portanto, toda informação enviada ou recebida necessita da criptografia para decifrá-la no padrão de 256 bits. Além disso, vale citar também que, apesar do b1bet ter the sua origem na São Paulo, o site responde às licenças” “mundiais de autoridade sobre jogos. Isso cuenta que não recomendamos o B1. WAGER para os nossos leitores, existem opções muito melhores presentes em nosso mercado. Além disso, a new plataforma enfatiza alguma política de game responsável, evidenciando teu compromisso com alguma experiência de apostas segura e saudável.

Dicas Para Novos Jogadores

Ao clicar em apostas esportivas, por exemplo, você pode selecionar” “um B1 Bet futebol ou outra modalidade. Dentro de cada uma, há uma grande seleção de partidas e, consequentemente, sobre mercados. Hoje, existe somente uma promoção ativa na plataforma, que dá 10% de reembolso em apostas esportivas, se você tenha perdas.

Para fazer uma expresamente, é necessário executar o login em plataforma,” “determinar a modalidade desejada, escolher o game de interesse at the indicar o canon dan aposta. Em seguida, suan aposta será processada electronic você poderá acompanhar o resultado ao vivo na organizacion. Então, sempre la cual apostar e destruir a suan expresamente em futebol, por exemplo, 10% deste valor pode voltar à banca mhh segunda seguinte. Convém destacar que somente an aposta esportiva é elegível à oferta. Seja você um veterano dos casinos ou novo nessa, o B1 Bet tem para tudo pra produzir valer an asociación.

Primeiros Passos No B1bet

Para efetuar um saque, é só acessar an organizacion e selecionar a forma de deposito desejada para garantir o valor the ser retirado. Este guia fornecerá informações importantes sobre tais como começar an apostar no 1xBet usando seu dispositivo móvel. Com os principais provedores de mesas ao vivo do mundo, você encontra salas da Advancement, da Playtech at the da Ezugi num só lugar. Portanto, existem salas VERY IMPORTANT PERSONEL e com supplier brasileiro para realizar as suas apostas! Entre os modos de apostar, você tem bacará, roleta, poker, blackjack at the” “sport shows.

Alguns gambling dens ainda optam durante disponibilizar jogos tradicionais, como o stop. Algumas boas opções de jogo de bingo online estão disponíveis no B1Bet e seus prêmios são em recurso financeiro real. Os Bônus ficam disponivel em muitos cassinos at the são considerados 1 presente de boas vindas ao teus novos usuários. Assim como” “because promoções que ficam disponivel para los dos e ajuda um apostador a possuir ganhos extras.

Design, Gráficos E Software Do Usuário

E apostar ao vivo é alguma emoção à parte, com odds transformando o tempo en absoluto. Futebol, basquete, tênis, esportes americanos e até esportes virtuais, tem de tudo. E o internet site é super” “fácil de usar, en paz e com chances que valem a pena. É só se cadastrar la cual o bônus cai direto na conta, e você já pode começar an explorar os games e apostas. Em busca de oír mais sobre a plataforma, tentamos contarse em contato através do casino de algumas maneiras.

Em resumo, a segurança do B1 Bet Casino é alguma questão que tem que ser considerada cuidadosamente pelos jogadores. Embora o site afirme ter medidas sobre segurança em vitality, a falta do índice de segurança verificado e alguma licença inverificável tem a possibilidade de serem motivo de preocupação para alguns jogadores. Embora” “possua um suporte o qual responde às dúvidas e certificado SSL em seu site, a B1Bet não tem licença sobre operação e, através de isso, não a new julgamos como confiável.

É Uma Proyecto De Capital Aberto?

Porém, não pudemos validar a new sua licença, electronic an Antillephone la cual é responsável através da validação das licenças indica que esta é inválida. Por isso, podemos dizer que o B1. BET não é uma plataforma sobre apostas esportivas confiável. Um dos primeiros aspectos que devem ser avaliados em uma casa de apostas é a sua segurança at the confiabilidade, e en absoluto apostador deve sostenerse ciente disso. Quando avaliamos o B1. BET, procuramos alguns requisitos básicos la cual poderiam atestar esses aspectos importantes. Podemos dizer que u ambiente de apostas nunca foi tão propício para um crescimento de apostadores quanto é neste momento.

Seja participando do torneio emocionante ou tentando a sorte na nossos caça-níqueis, há sempre algo novo para descobrir. Com uma variedade la cual vai desde caça-níqueis vibrantes até games de mesa clássicos, nossa plataforma oferece entretenimento sem fim para quaisquer gostos. Infelizmente não é possível qual é o limite sobre saque da B1Bet, mas isso não é problema – nós mesmos testamos a casa para apostas para você e temos since respostas, e desta forma temos todos os informações relevantes à mão. Você pode sostenerse conhecendo a B1Bet agora apenas, at the por isso é importante que, logo design no começo, saiba quais são as principais características dessa casa de apostas. Lembre-se sempre” “sobre ler os termos e condições de B1 Bet electronic as políticas para saque disponíveis no website da empresa.

B1 Bet Jogos Electronic Produtos

E ao buscar por mais informações nos seus meios de comunicação, não obtivemos regreso. Mas em resumo, o casino não tem licença pra operar legalmente, mas utiliza de libro de proteção afin de os jogos e para a trampolín. O B1. BET se mostra ao lado de seus jogadores, já o qual oferece jogos o qual foram desenvolvidos através de grandes provedoras sobre jogos do ramo. Provedoras que são reconhecidas pela segurança e confiabilidade de seus jogos, deixando o jogador cependant tranquilo e livre para se obsesionar com sua experiência e apostas nos jogos. Porém, a plataforma ainda não está completamente terminada e oferece o número bem limitado de jogos. Não adianta oferecer uma plataforma com 1 bom visual at the layout se não entregar boas opções em modalidades at the esportes para operating system seus apostadores.

É bem comum que as casas de apostas ofereçam bônus para boas-vindas e/ou promoções aos seus usuários. Contudo, analisando the B1Bet, notamos o qual an empresa tem apenas uma oferta ativa. Já simply no cassino online, o usuário pode arriesgar em jogos virtuais de caça-níqueis, roletas, jogos de tarjetas e vários diversos. Tudo é feito no ambiente online da B1. Wager, que se compromete a pagar operating system apostadores vencedores. É como alguns apostadores chamam essa trampolín de jogos, que conta com apostas esportivas e game titles de cassino no seu catálogo.

Como A Plataforma Prova Seus Documentos?

Esses problemas alteram desde questões sobre imparcialidade do software program até falhas, cálculos errados e falta de fundos. Porém, an empresa fornece algumas outras informações importantes e vale a pena chegar a sessão de Termos & Condições. O B1Bet Cassino tem muitas opções, apresentando inúmeros jogos produzidos por grandes provedores do mercado asi como PlayTech, PragmaticPlay electronic PG Soft, por exemplo. Um enorme destaque dessa trampolín é que ela conta com alguma área exclusiva pra as apostas Crash.

A junção dessas personalidades do esporte, pode trazer credibilidade at the confiança aos teus apostadores. O B1 Bet é um site novo electronic foi desenvolvido zero ano de 2021, a plataforma ainda está caminhando para conseguir seu espaço no mercado. E deu seu 1º passo em direção ao reconhecimento ao patrocinar o moment alagoano, Centro Leale Alagoano para toda a temporada sobre 2022. Informações de uso gerais, contato de profissionais electronic em muitos casos sistema de autoproteção ficam disponíveis.

Criando Uma Conta Na” “b1 Bet

Essa plataforma, que conta com ótima variedade de games, foi avaliada vello nosso time at the atingiu nota some de 5. Entenda como foi feita essa análise at the como a huella garantiu uma ótima posição no nosso ranking. Jogue apresentando responsabilidade, levando no ano de conta os riscos de dependência. Se você perceber o qual tem um caso com jogos sobre azar, procure ajuda especializada. Por último, como uma observação pessoal, gostaria de enfatizar an importância de apostar possuindo responsabilidade e jamas en la vida exceder seus limites.

Basta muitos minutos navegando no website do B1. WAGER, para perceber o qual esta marca tem uma identidade própria que apresenta o visual interessante. Além disso, é 1 site bem desenvolvido e pensado para que o usuário não tenha que procurar muito para buscar as opções importantes, economizando tempo at the, consequentemente, dinheiro. O B1. BET ainda não possui uma reputação sólida zero mercado brasileiro.

Melhores Casas Sobre Apostas​

No” “momento do cadastro, a plataforma não controllo os seus arquivos. A única regra é que u B1 Bet é legal somente afin de maiores de idade. Apesar de haver uma página sobre Jogo Responsável simply no B1 Bet casino e esportes, o conteúdo disponibilizado é bem sucinto electronic pouco orientativo.

Usamos da plataforma reclame aca, pois entendemos o qual o site além de imparcial é um dos illustres parâmetros para um consumidor brasileiro. Uma outra possibilidade é você enviar o e-mail para, la cual assim você consegue, inclusive, ter as informações como também o motivo do contato registrados, para o caso de ser preciso comprovar algo futuramente. Se você desejar falar com o suporte, esse contato poderá ser feito de duas maneiras. Entrando na aba de ajuda de uma plataforma e acessando o chat online, para que assim possa ser tudo resolvido através de ali. Se desejar entender um bocado mais sobre since políticas de tiro, o usuário deverá acessar o product de número ten dos termos sobre uso da organizacion.

O Que É Bet Online?

A user interface oferece um modos claro e escuro, permitindo uma adaptação confortável em diferentes ambientes. Os menus em um appassionato laranja proporcionam destaque e clareza, facilitando a localização para seções importantes. Cartões de crédito electronic débito, transferências bancárias, carteiras” “digitais como Skrill e Neteller, boleto bancário e criptomoedas para depósitos. O Waterways Casino Portsmouth é conhecido por trazer lendários artistas de entretenimento para ze apresentar no cassino. O cassino já recebeu artistas tais como Elvis Presley, Frank Sinatra e diferentes. Os hóspedes tem a possibilidade de desfrutar de uma noite inesquecível para entretenimento e música ao vivo zero Rivers Casino Portsmouth.

Em seguida, insira o monto desejado e harmonie em “Retirar” afin de confirmar an operação. Antes de confirmar suan aposta, compruebe o possível regreso caso você ganhe. Se estiver satisfeito, clique em “Confirmar” para finalizar an aposta.

Tipos De Bônus

As grandes plataformas estão continuamente imprimindo um ritmo forte de inovação e mudança así que usted possam se sustentar relevantes, fazem isto oferecendo diferentes modelos de vantagens afin de os seus usuários. Como ferramentas auxiliares de apostas, recomendamos alguns softwares verificados pela casa para apostas Betfair, nomeadamente Wagertool e Wise Pro Trading. Se procura saber na qual canais de televisão ou casas para apostas pode mirar de forma legitimate os seus games de futebol favoritos, use an organizacion Firstrow Television. Desde questões” “ligadas a depósitos e saques até informações sobre bônus, configurações da conta, cassino, jogos e práticas de jogo responsável, a central para ajuda cobre alguma ampla gama de tópicos. Entre operating-system pontos positivos, destacam-se an interface intuitiva, variedade de jogos, odds competitivas e bônus atraentes. Pontos negativos incluem limitações de mercados no ano de alguns países at the falta de transmissão ao vivo para alguns eventos.

Além disso, as políticas de saque tem a possibilidade de incluir limites sobre valor mínimo e máximo para retiradas, o que também afetará o speed que leva pra o dinheiro chegar à sua” “conta. Em alguns casos, saques menores podem ser processados mais de manera acelerada do que saques maiores. Além disto, o aplicativo também oferece outras opções como “Apostas ao vivo”, “Cassino” at the “Jogos”, aumentando suas opções de entretenimento e possibilidades sobre ganhar.

O B1bet É Confiável?

A fastidiar daqui, suan aposta será processada electronic você poderá acompanhar o resultado ao vivo na organizacion. Sugerimos o acesso através do telefone móvel, já la cual através do site mostrou algumas inconsistências no acesso. Além de ser um método mais utilizado, fazer transações através do PIX não é cobrado taxa” “como também o saque é imediato. Muitos Jackpots estão disponíveis com elevados prêmios em dinheiro. Faça rodadas em modo de demonstração e escolha o seu slots selecto. Baseado nisso, pontuamos com 2 de 5 estrelas um item bônus at the promoções.

Porém, também observamos la cual o cassino é impulsionado” “durante um Software, o qual faz toda a gestão dos jogos da plataforma. A plataforma chega ao Brasil em desea de atrair muitos clientes. Principalmente vello fato do País ter um grande público com verlangen em apostas esportivas. Para poder começar a jogar, é preciso que rapines você crie uma conta e possua um depósito realizado. Feito isso, você poderá ir em aba “Zepelin Aviator” do menu lateral e escolher a good opção Aviator.

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