Aviator Mobile App: Descarregar E Jogar Hoje

“aviator Moçambique 2024 Jogue Aviator Game Durante Spribe

A coisa mais importante que você deve lembrar é pressionar um botão de pagamento e retirar teus ganhos antes la cual o avião caia ou voe pra fora da tela, senão você perderá. O Aviator é um dos jogos de cassino on the internet mais populares elizabeth procurados em todo o globo, e é durante isso que você pode encontrá-lo no ano de centenas de viviendas de apostas distintas. No entanto, em virtude de ter as bons condições para jogar e apostar, você deve escolher 1 cassino confiáveis, os quais oferecem um site com bom funcionamento, bônus e outros benefícios.

Assim, quando o avião decolar e atingir um determinado ponto e coeficiente, a função de tiro automático será ativada. A oferece aos seus jogadores diversos bónus e promoções atractivas, concebidas pra aumentar as suas hipóteses de ganhar e melhorar a sua experiência sobre jogo em geral. O Aviador internet explorer ao abrigo ag licença n. º 026/IGJ/JDS/2023, que garante a imparcialidade e a segurança do trâmite de jogo. Mas, na última análise, o atrativo perform Aviador reside em promessa de opulencia, na oportunidade para ganhar dinheiro além” “de uma imaginação. A qualquer giro do multiplicador, os jogadores perseguem seus sonhos sobre riqueza e fortuna, esperando emergirem vitoriosos no jogo de azar. O game Aviator, uma blando mistura de antecipação e estratégia, é a joia weil coroa do jogo Aviator.

Como Jogar Aviator Online

Embora cada casino on the web tenha o seu próprio conjunto de bónus, reunimos certas das melhores ofertas para os jogadores do Aviador. A qualquer momento, um avião pode cair ou voar para fora da uraian, o que significa que todo jogador que não sacou antes desse dia perde, assim como os jogadores que conseguiram superar ganham. Lançado em 2019 pela Spribe Gaming, o jogo Aviator fez ímpetu entre todos os jogos de casino on-line e tornou-se um dos jogos néanmoins populares do mundo, comprehensive em Moçambique. Na tela, um avião é visto voando. Enquanto voa, operating-system números à tua esquerda mudam rapidamente. Esses números representam o multiplicador achacar qual sua expresamente será multiplicada not any futuro. Você age como um controlador de tráfego aéreo, com dois fameuses botões em seu painel de controle para confirmar apostas elizabeth para sacar aviator.

Com alguma vasta gama” “sobre esportes e eventos para escolher, operating system clientes podem satisfazer sua paixão por esportes enquanto apostam em seus horários e preferências favoritas. A integridade perform jogo é garantida pelo uso ag tecnologia criptográfica “Provably Fair”. O procedimento é ilustrado num diagrama, que demonstra como cada rodada é formada. Isso envolve a semente do servidor elizabeth as sementes (16 símbolos aleatórios) dos três primeiros jogadores sendo combinadas pra gerar um hash, que determina um resultado do game. Mas, em última análise, o atrativo do Aviator reside na promessa para riquezas, na oportunidade de ganhar dinheiro além da imaginação. A cada expresión do multiplicador, os jogadores perseguem teus sonhos de riqueza e fortuna, esperando emergir vitoriosos simply no jogo de circunstancia.

O Aviator Online É Real Ou Adulterado?

O fato é la cual todo o” “trâmite do jogo, perform começo ao fim, é construído em um gerador de números aleatórios, então ninguém pode prever 100% o resultado do jogo. Além disto, o jogo também usa tecnologias criptográficas que protegem um processo dele contra interferências de computer software de terceiros. Para jogar Aviatordo provedor Spribe, você precisa usar os serviços de cassino on the web. Para escolher uma ótima plataforma em Moçambique, os usuários têm que pesquisar bastante, pois algumas plataformas enganam os clientes elizabeth outras não são muito boas. Portanto, decidimos escolher algumas plataformas de cassino online de qualidade que oferecem the oportunidade de jogar Aviator.

Em diferentes palavras, o RTP mostra quanto por cento de muchas as apostas feitas pelos jogadores no ano de um determinado jogo serão devolvidas a eles com ganhos. Bem-vindo ao jogo do 888bets Aviator, o cassino néanmoins popular de Moçambique. O jogo Aviador agora tomou conta do mercado sobre apostas em todo o planeta, lhe oferece alguma oportunidade única em virtude de tentar a sua sorte e ganhar muito! A 888bets garante um jogo justo como também a segurança do usuário elizabeth muito mais. No entanto, entre as emoções e a motivação, existe uma luz orientada para aqueles que a buscam – um mentira de sabedoria popularizado como o guia do Aviador. Para o jogador inteligente em busca da emoção das apostas online no Aviator, o livro sobre esportes da Megagamelive oferece um web site para uma competição excepcional.

In Aviator Destaques

As regras são tranquilo, porém enganosas, já que os jogadores devem navegar pelo multiplicador em ascensão, sabendo quando entregarse antes do inevitável accident. É um jogo de nervos elizabeth intuição, onde while apostas são altas e fortunas podem ser ganhas systems perdidas num instante. Muitos casinos online oferecem bónus generosos para os jogadores móveis. O explotación do telemóvel tem as suas vantagens, e uma delas é a gama de bónus la cual os casinos on-line oferecem aos seus jogadores móveis.

O Elephant Wager foi criado em 2016 e fornece seus serviços para jogos de circunstancia no país através da internet sob a new licença número 104/IGJ/JDS/2018. Para jogos sobre azar mobiles tais como o Aviator, to Elephant Bet proporciona a seus compradores a opção sobre baixar um application mobile para Android os e uma versão mobile do internet site. Aviator é um crash” “game (jogo de colisão) no qual os apostadores devem adivinhar quando um avião virtual cai systems voa para fora da tela. À medida que o avião continua some sort of voar, o multiplicador de aposta aumenta constantemente. Além disso, os jogadores que esperam mais pace para sacar the aposta têm a chance de ganhar mais dinheiro. Depois sobre fazer uma expresamente e o avião decolar, você verá um coeficiente emergente e uma quantidade de seus ganhos, que aumenta à medida que u coeficiente aumenta.

Baixar Aviator Apk Pra Android

O tamanho como também a automação da aposta/saque tem a possibilidade de ser ajustados utilizando a funcionalidade próxima. No entanto,” “entre as emoções e a excitação, existe uma luz orientadora para aqueles que a new procuram – um farol de sabedoria conhecido como u guia do Aviator. Aqui, os jogadores podem encontrar insights inestimáveis sobre to jogo, desde estratégias avançadas até análises especializadas do comportamento do multiplicador, capacitando-os a maximizar seus ganhos e minimizar suas perdas.

Lembre-se de os quais o layout e as etapas do site de cada casino online tem a possibilidade de serem ligeiramente diferentes. O saque automático é outro recurso o qual automatiza o trâmite de saque. Ao ativar esta função, você define operating-system parâmetros sob os quais deve fazer 1 saque automaticamente.

“aviator

Moçambique, no qual a brisa do Oceano Índico sussurra contos de andanza, lá se encontra o jogo Aviator operado pela renomada empresa” “para jogos Megagamelive. Aqui, no meio carry out suntuoso décor elizabeth da atmosfera eletrizante, o jogo Aviator reina supremo.”

Essa abordagem garante que ninguém possa manipular to resultado da rodada, ao mesmo beat em que permite que partes interessadas verifiquem sua justiça por meio carry out mecanismo fornecido. Certifique-se de que controllo os termos elizabeth condições de qualquer bónus antes de os reivindicar. Presta sempre atenção aos requisitos de apostas e às datas de expiração. A vantagem de usar um app é que você tem a possibilidade de apostar de qualquer lugar, funciona velocemente mesmo com uma conexão de world wide web baixa, tem função de notificação at the muitas outras vantagens. Bet7K surgiu asi como uma novidade dinâmica no cenário sobre apostas, desenvolvida de maneira especial para os entusiastas em nosso país.

All An Individual Need To Understand Regarding The Aviator Game

Para começar a new jogar você necessita se registrar em apenas alguns min e estará pronto para embarcar num voo de emoção e sorte. Após o registro, você tem a oportunidade de jogar simply no modo de demonstração para praticar elizabeth desenvolver uma estratégia que lhe trará lucros. Este game foi desenvolvido através da Spribe, um fornecedor líder na indústria. O Aviator é um jogo sobre queda popular, o qual está disponível pra as plataformas Android os e iOS. Agora vamos te dizer como jogar Aviator e onde os novos jogadores precisam começar.

Por isto, quer estejas a usar um touch screen phone ou um pill, podes desfrutar do jogo sem dudas. É importante conocer também que to Aviator tem um RTP alto em virtude de um cassino online de 97%, e volatilidade que é estimada de” “baixa a média. Claro, não é fácil vencer, porque você nunca pode vaticinar o resultado exato, mas ainda é possível. Também realizamos análises de lugar para lhe fornecer análises dos principais casinos online para jogar Aviator Moçambique.

Posso Jogar Este Jogo No Meu Capsule?

O guia” “abrangente da Megagamelive fornece um tutorial marcia a passo, guiando os jogadores através das complexidades perform jogo e capacitando-os a tomar decisões informadas nas mesas do Aviator. Ao se envolverem not any mundo excitante carry out Aviator, os jogadores logo percebem os quais o sucesso requer mais do la cual apenas sorte. Exige estratégia astuta elizabeth observação aguçada, capacidades aperfeiçoadas através de uma experiência e da sabedoria das dicas ou conselhos compartilhados por jogadores experientes. Graças a la cual funcionalidade, pode usar várias estratégias que podem aumentar since suas hipóteses de ganhar. Você pode jogar tanto simply no seu smartphone usando o app quanto na versão para PC.

É importante notar que exista valor de 97% é extremamente puro para um jogo de cassino. Para aqueles novos not any jogo, entender asi como jogar o Aviator é essencial. O guia abrangente weil Megagamelive fornece um tutorial passo the passo, orientando os jogadores através dieses complexidades do jogo e capacitando-os a new tomar decisões informadas nas mesas carry out Aviator. Ao ze envolverem no planeta excitante do Aviator, os jogadores logo design percebem que u sucesso exige mais do que só sorte. Exige estratégia astuta e observação aguçada, habilidades aprimoradas por meio de uma experiência e da sabedoria das conselhos ou conselhos compartilhados por jogadores experientes.

Online Aviator Game Sites: Play Aviator For Real Money

Ao jogar Aviator moçambique, recomendamos o uso de várias estratégias que serão úteis tanto em virtude de iniciantes quanto afin de jogadores experientes. Ter uma estratégia específica permitirá que você alcance o resultado desejado” “néanmoins rapidamente e ter mais confiança no que faz. Além disso, recomendamos la cual os iniciantes comecem a jogar com uma aposta em vez de duas, pois isso permitirá que você se concentre mais e tome uma decisão melhor. O game Aviator foi mozo pelo provedor Spribe com base em tecnologia Provably Good, o que cuenta que o usuário não pode ser enganado. As odds de ganhar cada rodada são baseadas num gerador para números aleatórios e não podem ser previstas. O RTP (Retorno Para o Jogador) em um jogo de cassino é uma porcentagem o qual mostra quanto das apostas de 1 jogador, em média, tem a possibilidade de serem retornadas asi como ganhos a longo prazo.

Para jogar através do Aviator apps, você precisa baixar e instalar o app de uma casa de apostas de sua seleção em seu smartphone. Se você não sabe qual incapere de apostas escolher, pode consultar the lista que fornecemos acima, todas elas fornecem apps bons e gratuitos. O Elephant Bet é outro casino well-known em Moçambique os quais fornece o Aviator entre seus serviços.

Bónus Móvel Em Virtude De Jogadores Aviator

Para o jogador penetrante em busca de uma emoção das apostas online no Aviator, o livro sobre esportes da Megagamelive oferece um portal para uma excitação incomparável. Com uma vasta gama para esportes e eventos para escolher, operating system clientes podem satisfazer sua paixão durante esportes enquanto apostam em seus occasions e atletas favoritos. Para a ter no teu aparato, tens de descarregar a respectiva aplicação do teu online casino online preferido. O jogo estará disponível na aplicação móvel do casino on the internet escolhido. O get da aplicação é simples, independentemente perform casino em o qual jogue.

Ao tornar-se cliente de 1 dos cassinos listados abaixo, você garante a segurança perform seu dinheiro electronic a proteção 2 dados pessoais. À medida que a noite avança at the as apostas se tornam mais altas, os jogadores são atraídos para while mesas do Aviador como mariposas pra uma chama, seduzidos pela promessa de riquezas incalculáveis ​​e pela adrenalina perform jogo. E ao amanhecer sobre um horizonte, aqueles que ousaram testar tua sorte no Palácio do Aviador emergem triunfantes, com operating system bolsos transbordando para riqueza e operating-system corações acesos pela emoção da vitória. À medida o qual a noite avança e as apostas se tornam néanmoins altas, os jogadores são atraídos em virtude de as mesas perform Aviator como mariposas para uma chama, seduzidos pela accordo de riquezas incalculáveis e pela adrenalina do jogo. E ao amanhecer em relação à o horizonte, aqueles que ousaram lindar sua sorte no Palácio do Aviator emergem triunfantes, apresentando os bolsos transbordando de” “oro e os corações acesos pela emoção da vitória. Mas é o jogo Aviator de accident que verdadeiramente cativa a imaginação.

How Must I Start Playing Aviator Game Intended For Real Money?

Conforme to crepúsculo desce em relação à a cidade, u piso do livro de esportes ganha vida com a new excitação enquanto operating-system clientes se reúnem em torno dos quiosques do Aviator ansiosos para testear sua sorte elizabeth habilidade. O finalidad do jogo é retirar a sua aposta antes os quais o avião saia do ecrã. Quanto mais tempo um avião permanecer zero ar, maiores serão os seus ganhos potenciais. Esse valor pro Aviator é de 97%, u que significa que, em média, para todo o recurso financeiro que você apostou ao longo do tempo, aproximadamente 97% voltarão para você com ganhos, enquanto 3% serão levados pela plataforma perform cassino.

Pesquisamos distintas plataformas de apostas e selecionamos since melhores cassinos aviator para jogadores sobre Moçambique, que estão listadas abaixo. O 888Bets em Moçambique é um provedor experiente de games de cassino at the outros serviços, incluindo o Aviator, os quais está no mercado desde 2008. Você pode usar o aplicativo mobile em dispositivos Android afin de jogar o Aviator, e uma versão mobile do site também está disponível para todos os dispositivos. A bottom para as operações legais” “perform 888Bet em Moçambique é a licença número 026/IGJ/JDS/2023.

Et Aviator Destaques

“A new Betika também foi criada em 2016 e fornece serviços de jogos de azar online em Moçambique desde então. Para usuários os quais desejam começar a new jogar Aviator em um smartphone, existe 1 aplicativo mobile para o sistema Android, bem como uma versão cellular do site. O objetivo do Aviator é pilotar um avião o néanmoins alto possível, até que ele caia, para obter os maiores ganhos. Para determinar seus ganhos, você precisa multiplicar o coeficiente através da aposta que spass no início perform jogo.

Então, confiando na sua intuição, a qualquer momento do jogo você precisa sacar antes que um avião caia ou voe para fora da tela. O valor dos teus ganhos dependerá do valor do coeficiente no qual você fez o saque. As regras são simples, porém enganosas, já que operating-system jogadores devem navegar pelo multiplicador em ascensão, sabendo no momento em que desistir antes carry out resultado crash.

Aplicação Móvel Aviator

As aplicações dos casinos são de fácil utilização e optimizadas para vários tamanhos para ecrã. O game usa um algoritmo gerador de números aleatórios que responsable que o esfuerzo de cada rodada seja completamente imprevisível e não venha a ser controlado por ninguém. Algumas casas sobre apostas oferecem alguma versão de demonstração gratuita para que você possa testar um jogo. No entanto, vale lembrar que você não pode jogar esta versão com dinheiro true.

Além disso, no início para cada rodada, anteriormente a o avião decolar, você precisa realizar uma aposta fundamentada no seu orçamento e pressionar “Aposta”. Se você conseguiu a tempo elizabeth fez uma ex profeso enquanto o avião já havia decolado, sua aposta participará da próxima rodada. Isto significa la cual os ganhos são moderadamente frequentes e que o game oferece um equilíbrio entre o tamanho dos ganhos electronic a frequência dos mesmos. Isto cuenta que o game devolve uma média de 97, a few MZN por qualquer 100 MZN apostados a longo prazo. No entanto, possua em mente os quais esta é uma média estatística e pode não refletir resultados a curto prazo.

Top Online Casinos 2024 With The Finest Aviator Game Action

É um jogo sobre nervosismo e intuição, onde as apostas são altas elizabeth fortunas podem ser ganhas ou perdidas num instante. Se um apostador não pressionar “Sacar” antes la cual o avião decole, a rodada é considerada perdida, electronic o dinheiro weil aposta é faltante. Se bem-sucedido, u multiplicador no rato do pressionamento sobre “Sacar” é aplicado às apostas efetuadas. Se bem-sucedido, to multiplicador no dia do pressionamento de “Sacar” é empollón às apostas efetuadas. Essencialmente, o finalidad do jogo é sacar antes que o avião voe. Jogando Aviator moçambique você pode possuir certeza de que este jogo é 100% honesto.

O Premier Bet é uma plataforma noua de jogos de cassino que proporciona aos seus usuários o Aviator electronic muitos outros games de várias categorias. O Premier Gamble foi criado na 2013 e safari em Moçambique sob várias licenças perform Reino Unido, perform Betting Control plus Licensing Board do Quênia, da Ghana Gaming Commission electronic da National Lottery Regulatory Commission de uma Nigéria. Os usuários do Premier Wager têm acesso a um aplicativo cellular para Android, bem como a uma versão mobile do web site. Muitos usuários preferem apostar e jogar diretamente de teus dispositivos móveis, porque isso oferece a possibilidade de jogar o Aviator em qualquer lugar e a qualquer hora. O Aviator moçambique está disponível para apostas através de muchas apps.

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