Blaze Bet Cassino Online Brasileiro Página Oficial Cadastro

Blaze Apostas Esportivas: Cassino E Bônus Excelentes!

A oferta da Fire não consiste em utilizar um código de referência, systems seja, um código promocional Blaze atualmente do cadastro. Isso, portanto, facilita aos novos clientes a terem acesso ao bônus de boas vindas. Como o futebol é um grande destaque para apostas na Blaze, você verá várias opções para palpites. O catálogo é ainda maior no momento em que se trata de grandes eventos, asi como uma disputa de uma Liga dos Campeões.

O cassino online da Blaze é a main categoria da trampolín, que tem alguma área dedicadaos games originais. Se você quer apostar em esportes, saiba la cual essa é uma desvantagem do web site da Blaze. Além dos jogos tradicionais, a Blaze organiza torneios de” “cassino que adicionam uma camada extra sobre competição e diversão.

Depósitos Na Casa De Apostas Blaze

Se você já apostou no Tênis, sabe bem la cual, diferente do Futebol, ele é o esporte com pouca variedade de mercados de apostas. Os mercados de apostas são os modelos de palpites para Futebol que você pode dar na determinado jogo. Em resumo, tudo arata que an odaie de apostas é confiável, já la cual ela está para acordo com os requisitos para andar em nosso país e tem diversas provas para confiabilidade. Cada novo jogador ou apostador do Blaze recebe um bônus systems bônus de boas-vindas assim que” “se registra na plataforma. Para ativá-lo, você deve pressionar um botão Depósito e escolher o bônus de boas-vindas ao fazer seu depósito. Para se registar na Blaze só tem de fazer uma conta desta forma que entrar na plataforma http://blaze-casinos.com.

Assim são evitadas algumas inconsistências, como roubo de identidade, cumprindo as leis estabelecidas pela indústria de jogos online. Acompanhe as informações a seguir para manejar mais sobre u Blaze apostas asi como funciona o bônus de boas-vindas. A Blaze possui uma excelente oferta para os seus recém-lan?ados clientes e você não pode deixar de aproveitar. Portanto, aproveite agora ainda para baixar, instalar e se cadastrar em um dos grandes apps de apostas do mercado.

Blaze App Para Android Os (apk) E Ios — Praticidade Para Apostar Pelo Celular

Isso significa que você deve cumprir os requisitos da oferta para poder receber e também ter um direito de saque depois. Somente ao acessar a página de esportes da Blaze apostas você já encontrará muitos eventos de futebol para apostar. Enfim, nós sentimos falta do aplicativo e de bônus para apostas esportivas, 2 diferenciais importantes na plataformas no País brasileiro. Vale explicar la cual as odds sobre apostas esportivas são um dos maiores critérios utilizados mhh hora de escolher uma casa. O site de apostas Blaze não proporciona app para Android (apk), então não é possível fazer o download. Confira as opções para mercados – meios de apostas disponíveis – e suas respectivas odds.

3 – O encargo de 1ª through de Certificado sobre Especialização é realizada junto à Coordenação do seu respectivo Curso. 2 – O pedido de 1ª via do Diploma de Mestrado/Doutorado é feita reunido à Coordenação perform seu respectivo Curso. Caso já possua sido Reconhecido, coger em contato com o DEP para atualizar a situação zero Sistema SAG. Favor entrar em contato com a DINORM para verificar situação quanto ao Reconhecimento do Curso. O nosso boletim de apostas também aceita apostas múltiplas, além da simples e das combinadas. Sabemos que um apostador bem municiado para informação, tem também vantagens na” “hora de apostar.

Seleção De Games Do Blaze Casino

Você fará o download do Blaze apk e poderá realizar as apostas de qualquer lugar. Assim como acontece com muitas casas de apostas, a Blaze também conta com um bônus de boas vindas para os usuários. Dessa manera, na sequência, você vai saber los dos os detalhes sobre o bônus Fire disponível para operating-system novos” “usuários. A Blaze País brasileiro se destaca através do cassino e também pelas apostas esportivas.

Uma boa notícia é que operating-system ganhos obtidos possuindo os giros grátis não possuem skidding. Vale destacar la cual o bônus da Blaze tem o requisito de apostas de 35 vezes o valor recebido como bônus at the um prazo de 30 dias pra ser cumprido. A aposta máxima permitida por vez é de €5 et o equivalente na sua moeda regional. Portanto, aproveite esta oportunidade e garanta um excelente bônus de boas vindas através do nosso link promocional exclusivo. Isso pode ser feito ao perfeccionar o cadastro systems a qualquer mais um momento posterior.

Escolhendo O Jogo” “Perfeito Para Você Zero Blaze

A política que este web site tem para teus usuários é la cual eles devem sony ericsson limitar a conseguir apenas uma” “conta por pessoa. Por esse motivo, se an equipe técnica da Blaze identifique qualquer tentativa sobre duplicidade de conta, ela será identificada e removida da plataforma. Se estiver disponível, você terá um código promocional para obter 1 bónus. Tudo o que precisará é abrir um browser de internet at the digitar o hyperlink do site sobre apostas para utilizar a plataforma.

E para ganhar, usar e sacar o bônus, você precisa seguir os termos e condições da oferta. Enquanto os Giros Grátis são de usufructo exclusivo nos games originais da Blaze, como o Collision e Fruit Cut. Tal como a new maioria dos sites, a Blaze Apostas disponibiliza bônus para boas-vindas para operating-system novos apostadores.

Como Depositar At The Sacar Seu Recurso Financeiro No Blaze Apostas

“Bad fire Aposta é o destino ideal afin de quem busca emoção e diversão nas apostas online. Oferecendo oportunidades de apostas em populares ligas e torneios no Brasil, o site para aposta Blaze Expresamente também cobre uma ampla lista de jogos esportivos. São milhares de eventos todos os dias, para apostar ao vivo ou no modo pré-jogo. Aposte em futebol, basquete, tênis, natação at the até mesmo em esportes virtuais, como Counter Strike electronic LoL. Isso não é um problema para a Bad fire, que conta com uma seção de jogos de cassino completa e cheia de opções para jogadores de todos os tipos e gostos. Após avaliar minuciosamente a plataforma Fire Aposta Brasil, minha opinião final é bastante positiva.

Usando este recurso, você decide quando a suan aposta vai se tornar finalizadan automaticamente. Se você apostar R$100 e usar u botão 1/2, o valor apostado será reduzido pela metade, ou seja, R$50. Já o botão 2x, multiplica u valor da suan aposta por 2, isso é, suan aposta será de R$200. É importante entender que o jogo Crash é bastante rápido e suas decisões também precisam ser bem rápidas. Sendo assim, você pode usar operating-system botões 1/2 at the 2x para reduzir ou aumentar o valor apostado velocemente.

Perguntas Frequentes Sobre Blaze

Cada mercado oferece uma maneira única para se envolver possuindo o evento at the potencializar seus lucro no blaze jogo de aposta. Os jogos originais do Blaze, como Collision, Double, Mines, dentre outros, são alguma revolução no mundo dasjenige apostas online. Cada jogo tem suas características próprias, oferecendo diferentes formas sobre entretenimento e probabilities de ganho no blaze jogo para aposta.

Porém, você tem acesso u site de apostas pelo navegador perform seu celular. O bônus da Blaze oferece até R$1000 em bônus sobre boas-vindas para recém-lan?ados jogadores de crash ou cassino. Basta você criar tua conta e fazer um primeiro depósito no site la cual pode ser instantâneo via PIX. Em relação às apostas esportivas, a Fire oferece mais para 30 modalidades, como também o futebol é constantemente destacado! Apresentando chances bem competitivos, the casa de apostas não deixa a new desejar e atende perfeitamente ao público fanático por futebol. Para ter reconhecimento nas blaze apostas, é crucial adotar estratégias eficazes at the gerenciar bem sua banca.

Blaze Bet Apostas Esportivas

Enquanto agregador, promovemos electronic mostramos anúncios com links para serviços de jogo on the internet e outros provedores. Blazeapostas. online não está associado the nenhum dos websites externos” “ligados nesta página. Não nos responsabilizamos através de quaisquer danos a que os usuários estejam sujeitos ao visitar estes hyperlinks. A nossa afiliação poderá resultar numa comissão caso um usuário qualifique para certos requisitos em sites para que ligamos.

Crash e Increase da Blaze são sem sombra de dúvida os grandes de aposta online disponíveis no ramo. No final desses passos o registro estará concluído no cassino Blaze electronic já será possível aproveitar todos seus jogos. Os novatos costumam dizer o qual de madrugada é o melhor horário para jogar Fire. Sim, a Fire oferece apostas durante os eventos at the você apostar at the se divertir sempre que quiser, 24 horas por vida, de qualquer local do mundo.

Blaze Cadastro: Guia Para Produzir A Sua Conta

O Blaze promove o jogo responsável fornecendo aos usuários ferramentas para gerenciar suas atividades para jogo de maneira saudável. Os jogadores podem estabelecer limites pessoais de depósito, perda e speed de jogo, além de terem an opção de automobile exclusão, caso sintam a necessidade para fazer uma parsimonia. A segurança dos usuários e a new prática do jogo responsável são prioridades no Blaze, alguma plataforma que valoriza an integridade at the o bem-estar sobre seus jogadores. Vamos explorar como um Blaze garante um ambiente seguro e promove práticas para jogo responsáveis.

Após entrar em sua conta na Blaze, toque em “Menu” no vibrazione inferior esquerdo weil tela e groupe em “Esportes”. Já que a” “odaie pode solicitar cópias dos seus arquivos para comprovar as informações e desobstruir o primeiro saque. O bônus para boas-vindas ao cassino Blaze oferece 100% até R$ one 000 + 40 Rodadas Grátis. Após efetuar o 1º depósito, o bônus será automaticamente creditado em sua conta. Nos últimos anos, sua marca tem conquistado uma crescente atenção por zona dos apostadores brasileiros, especialmente devido às estratégias de marketing adotadas.

Entrar Da Blaze Bet Simply No Brasil

Se a trampolín pagar menos o qual seus concorrentes, u apostador é quem sairá perdendo. As odds da Bad fire são competitivas electronic nós identificamos o qual, em certos games da Série B do Brasileirão, elas estão acima de uma média do ramo. Assim como nos depósitos, o Pics é o único meio de deposito disponível para concluir na Blaze.

Participar desses torneios permite que operating system jogadores compitam no meio de si em jogos como poker, baccarat e roleta, através da chance de ganhar prêmios exclusivos. Esses torneios oferecem uma oportunidade única sobre testar suas capacidades contra outros jogadores. Mergulhe em nossos cativantes caça-níqueis, apresentados por fornecedores renomados, como Pragmatic Have fun, PG Soft at the Evolution Gaming. Ultrapassando os limites de jogos on-line, oferecemos experiências de cassino inovadoras e exclusivas. Por fim, a new Blaze oferece um atendimento ao consumidor eficiente e responsivo, pronto para ajudar os usuários em caso de dúvidas ou problemas. A presença de o suporte dedicado reforça a credibilidade weil plataforma, fornecendo um canal confiável pra solucionar questões at the garantir a satisfação dos clientes.

O Que É Blaze?

Os jogadores podem apostar em competições de jogos populares como League associated with Legends, Dota two e CS. Para aqueles que buscam uma experiência de cassino autêntica, a Blaze disponibiliza jogos com dealer ao vivo. Esses jogos são transmitidos no ano de alta definição electronic permitem que os jogadores interajam possuindo dealers reais, recriando an atmosfera para um cassino físico. Jogos como black jack, roleta e baccarat com dealer ao vivo oferecem alguma experiência de jogo envolvente e sensato. A Blaze possui um serviço de atendimento ao usuario dedicado e responsivo para auxiliar operating-system usuários em suas dúvidas, problemas e consultas.

Assim, você tem a possibilidade de levar a Bad fire para onde desejar, fazer e analisar as suas apostas em tempo genuine com o Blaze jogo cadastro. O app Blaze” “traz muito mais comodidade para dar os seus palpites online de onde estiver, basta selecionar a good opção Blaze cadastrar. Ela possui grande presença no setor mundial de apostas e cassinos on the internet, sendo uma dieses mais acessadas aqui no brasil. Para galera cependant moderna, ligada nos eSports, também é possível lançar a new sorte em partidas de counter-strike, Dota e outros games eletrônicos. Só simply no Blaze apostadores podem apostar na também variedade gama para jogos esportivos electronic jogos de eSport. O Cassino Fire tem sido um líder na indústria global de games online, conhecido durante sua marca confiável e compromisso na oferecer uma experiência de jogo de alta qualidade.

O Pix É Bom Para Sacar Os Ganhos?

Clique no banner zero final da uraian para ser redirecionado para o internet site de apostas Fire. Então, se necessário, clique no botão rosa “Cadastre-se” simply no topo da uraian. A oferta para abertura de conta é válida apenas para os jogos de cassino e, além dela, há alguns torneios possuindo duração limitada.

Com o Blaze cadastro você pode dar com qualidade em uma plataforma holistica. Acompanhe nossa análise neste artigo afin de saber mais em relação à confiabilidade, os recursos e as vantagens da Blaze País e do mundo. No Brasil u site blaze é licenciado pela Curaçao Gaming, autoridade gerida pelo governo” “sobre Curaçao.

Avalie Os Mercados E Odds De Apostas

Tanto em blaze apostas quanto nos” “jogos de apostas blaze, a plataforma oferece uma diversidade la cual atende a quaisquer gostos. Essa é alguma pergunta que vários apostadores em começo de carreira costumam fazer. Basicamente, since odds são operating system cálculos que since casas de apostas fazem para descobrir quais as chances de determinado acontecimiento acontecer.

Entre os favoritos estão o Bad fire Crash, Mines, Chop e Plinko, jogos originais que oferecem uma experiência de aposta rápida at the dinâmica. Além disso, a possibilidade sobre subir de nível dentro do web site aumenta an empolgação, com recompensas que vão se transformando mais e mais atraentes à medida que você avança. Por outro lado, o web site Blaze só da voie jogadores maiores de idade como titulares de conta. Para tal, é necessário apresentar os documentos que lhe são solicitados, como a sua identificação(RG). Assim que sua conta for verificada, você poderá acessar os jogos de sua preferência. No se da Blaze você pode baixar 1 aplicativo no food selection da casa sobre apostas.

Como Faço Para Abrir Uma Conta Zero Blaze?

Isso quer dizer que jogadores podem apostar em partidas de futebol, ULTIMATE FIGHTER CHAMPIONSHIPS, basquete, MMA, tênis e muitos diversos. Como Brasileiros são apaixonados por jogos e lutas, esta é uma dasjenige modalidades preferidas dentre os apostadores. Nada melhor do que torcer para o moment do coração e ainda levar alguma bolada com sua vitória. Para baixar o app Fire para celular é necessário entrar no site, abrir o menus e solicitar u download. Isso acontece porque plataformas para apostas nem continuamente estão disponíveis simply no Play Store (Android) ou no App Store (IOS). Também é possível fazer o download em sua forma APK no ano de sites que oferecem o aplicativo.

Blaze é sem dúvida uma excelente opção para quem curte jogos crash e também para quem pretende fazer apostas esportivas. Sim, afin de se registrar no Blaze, é necessário ter mais de 18 anos e fornecer informações básicas, como e-mail e senha. O processo é rápido at the fácil, permitindo acesso a todos operating-system jogos na fire. Focado no touro de ouro, oferece multiplicadores wild at the a possibilidade de ganhos até 2000x o valor apostado. A seção sobre jogos ao festón no Blaze proporciona uma jornada imersiva e interativa no mundo do cassino, onde a tecnologia moderna se encontra através da tradição” “2 jogos de mesa e game displays. Eles vêm no ano de diversos temas e mecânicas, garantindo horas de diversão electronic emoção.

Tipos De Apostas Esportivas Na Blaze

Continue conosco afin de descobrir mais sobre o emocionante mundo dos jogos de aposta Blaze at the todas as oportunidades que ele possui an oferecer. Acessar o site Blaze é an alternativa para você ze divertir com esses jogos e a garantia de alguma plataforma que respeita seus usuários. Isso porque por entra?ar dinheiro nas apostas e eventos sobre resolução rápida, é” “fundamental que você consiga falar com 1 atendente no momento que precisar. Se for usar um iPhone ou apple ipad terá que visitar o site, o qual tem todos operating-system recursos, imagens at the botões redimensionados pra caber perfeitamente em sua tela.

Os jogos no Blaze refletem u compromisso com a great alta qualidade at the a constante inovação. Eles são projetados com gráficos avançados e uma experiência sonora imersiva, proporcionando um ambiente para jogo cativante. Utilize as ferramentas sobre jogo responsável oferecidas pelo Blaze paran uma experiência feliz y sana. Antes de jogar, certifique-se de o qual sua conexão é segura para guardar seus dados. Outro aspecto que produz parte da gestão da sua conta é a verificação dos seus dados, conforme explicaremos a seguir.

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