Roleta Online Regras E Dicas Para Jogar Roleta No Brasil

Melhores Sites Sobre Roleta Cassinos On The Internet Com Roleta 2024

Desenvolvida e gerenciada pela Playtech, la cual roleta francesa também segue a regra “La Partage”. A estratégia de roleta mais importante é gerenciar seu recurso financeiro corretamente. Nunca aposte mais dinheiro perform que está dedotto a perder, pois a tendência de uma roleta online é zerar o jogador. Se você tiver sorte, poderá querer o sistema, no entanto se não estiver disposto a arruinar, pode se distrair sem se abondonar influenciar pelos beneficios anteriores. As recomendações da roleta on the internet são ainda também fáceis do os quais as de uma mesa física, pois você não necessita acompanhar a localização das suas” “fichas. Basta baixar um aplicativo do cassino que você mais gosta ou então jogar seus games de roleta favoritos no navegador do seu celular a partir do teu site.

Prepare-se para girar a new grande roda electronic entrar no mundo seductor deste jogo apresentando os nossos especialistas. Selecione a opção “Cassino” e decisão qual jogo ag roleta mais te agrada. Se você estiver em dúvida sobre qual das mesas disponíveis selecionar, um bom critério é o canon mínimo e máximo de aposta. Porém, é preciso sony ericsson atentar acerca weil qualidade dessas aplicações móveis, e sony ericsson as mesmas contam com uma ampla seleção de títulos, com diferentes” “versões do jogo sobre roleta.

Superbet Gambling Establishment: Review Em Agosto De 2024

Como mencionamos, o conjunto de regras básicas de uma roleta não é difícil de ser compreendido por quem está começando. Primeiramente, você faz alguma aposta num número específico ou na uma combinação sobre números na comensales. A” “roleta então é girada com uma bolinha dentro, e um resultado da rodada é definida pelo número em la cual a bola termina posicionada. Enquanto alguns desenvolvedores são especializados em jogos sobre roleta mais clássicos, outros apostam em inovação e estão sempre lançando títulos únicos e diferenciados plataformas cassino online.

A disponibilidade para roleta online ao vivo é uma experiência diferenciada em virtude de quem quer jogar esse jogo, per lo più se você pretende se sentir como se estivesse no ano de um cassino para verdade. No caso da Parimatch, durante exemplo, é possível baixar o aplicativo de roleta online desse cassino e jogar em seu Android. Geralmente, os apps para jogar esse jogo estão disponíveis apenas em virtude de Android.

Linhas De Pagamento

Além de existir toda essa questão legal no País e do mundo e que durante aqui, infelizmente, não existem cassinos físicos, também consideramos diferentes fatores. Jogar roleta online também é vantajoso, pois lo proporciona momentos sobre lazer de dentro da sua odaie, ou qualquer outro lugar. É bastante maneira muito fácil de se entreter elizabeth ainda, eventualmente, lucrar dinheiro. Em termos de potencial sobre ganho, não há uma roda para roleta específica o qual gere mais dinheiro. As chances de ganhar são ciertas pela probabilidade matemática de cada expresamente, que é a new mesma em muchas tipos de roletas.

Com Drake como o de seus embaixadores, a Stake não se fica durante aí e apresenta apostas esportivas impressionantes. Com as estratégias e dicas mencionadas neste guia, é possível experimentar while melhores salas para roleta ao festón de maneira única. Lembre-se, porém, para praticar sempre u jogo responsável electronic não ir além dos seus próprios limites de apostas.

Conclusão Sobre Jogar Roleta Ao Vivo Num Cassino Online Em 2024

Os lignes de cada alguma variam bastante, então basta escolher some sort of alternativa que melhor te atende. O Jet Casino é um cassino on the internet moderno onde você pode jogar to jogo de roleta para ganhar recurso financeiro de verdade com tranquilidade. A plataforma é otimizada afin de mobile e possui ainda um ótimo aplicativo para Android e iOS afin de você jogar no qual quiser.

Embora ainda não seja tão popular entre operating-system jogadores de roleta ao vivo, the plataforma disponibiliza bônus promocionais compatíveis possuindo a modalidade. Combinar as suas operações em criptomoedas apresentando os jogos de roleta é alguma tarefa simples simply no Wild. io Casino. Totalmente adaptado para jogadores que investem em BTC, ETH e outros ativos digitais, a plataforma conta com uma grande variedade sobre títulos na categoria. Embora ainda não conte com recursos totalmente compatíveis” “através do mercado brasileiro, incluindo os métodos sobre pagamento disponíveis, the casa garante segurança operacional e boas ofertas para operating-system jogadores.

Instant Casino

Neste modelo para apostas planas, você mantém o canon da aposta regular em cada rodada, independentemente dos resultados anteriores. Esta estratégia é simples electronic ajuda a atender o bankroll search engine optimization grandes variações. Por exemplo, se sentenciar apostar R$10 no ano de cada rodada, manterá essa aposta até decidir” “aplazar ou mudar para estratégia.

Nosso compromisso consiste na apresentar somente internet sites de cassino por completo seguros e confiáveis, para que você possa jogar roleta online com tranquilidade. Por isso, los dos os sites mencionados nesse guia são licenciados e certificados pelas autoridades reguladoras competentes. Afinal, asi como qualquer jogo para” “circunstancia, as probabilidades estão a favor ag casa de apostas e não há como ter vitórias garantidas. Quem sienta a roleta online Bet365 tem some sort of oportunidade de curtir os melhores jogos de cassino ao vivo da classe.

Passo 3: Explore To Catálogo De Roleta Ao Vivo

A grande diferença da roleta americana é que ao invés de ter apenas 37 números, ela possui 38, pois há um zero duplo disponível. Na roleta americana, a vantagem da casa é 5, 26%, maior do que the da roleta europeia ou a roleta francesa. Ainda desta maneira, em apostas plenas num só número, é possível receber 35 para one nos resultados 2 pagamentos. A mais interessante roleta online é a francesa, pois ela conta com uma vantagem ag casa muito baixa e recursos extra supplies para jogar.

Existem diversas versões da roleta on the web como também a escolha weil melhor opção ajajai depender dos seus gostos pessoais. Escolher o site para jogar roleta cassino ganhar dinheiro nem sempre é alguma missão simples pois há muitos detalhes aos quais é importante se quebrantar. Confira a descender alguns pontos fundamentais de um cassino para qualidade. Existem 5 dicas que você precisa ter em mente ao decidir jogar roleta online. É importante conseguir algumas boas práticas así que usted a tua experiência com jogos na internet venha a ser ainda melhor.

Como Jogar A Roleta On The Internet Com Dinheiro Genuine Nos Melhores Cassinos Do Brasil

Sendo assim, elas contam com uma proporção de pagamento mais elevada, pra recompensar o jogador pelo risco adotado ao escolhê-las. Em quase todos operating-system sites, o prazo de processamento dos depósitos é instantâneo, mas tenha na mente que, com as retiradas, é necessário esperar um pouco mais. Cada método de deposito possui um pace específico de processamento, sendo que since carteiras eletrônicas, asi como o Neteller, costumam ser os cependant rápidos.

A roda weil roleta é dividida em casas numeradas, geralmente de 0 a 36 (roleta europeia) ou 00 a 36 (roleta americana). A locuinta 0 (ou 00) é geralmente verde, enquanto as outras casas são vermelhas ou pretas. Além disso, o 1XBet é conhecido durante suas ofertas sobre bônus de cassino e promoções sobre alto valor. Os novos jogadores tem a possibilidade de aproveitar bônus sobre boas-vindas atraentes, electronic os jogadores regulares são recompensados possuindo promoções regulares os quais incluem rodadas grátis e bônus sobre recarga. Assim tais como o Bet365, u Betway oferece mesas de roleta ao vivo, onde você pode jogar apresentando crupiês reais at the outros jogadores, criando uma atmosfera autêntica –” “você vai se sentir em Vegas. Além disso, o cassino oferece ótimos bônus de apostas elizabeth promoções para jogadores regulares, o os quais torna a experiência geral no internet site ainda mais gratificante.

Melhor Websites Para Jogar Roleta Online

Uma boa notícia para os jogadores é que os cassinos online mais respeitáveis oferecem vários bônus e campanhas afin de incentivar a jogatina. Se você callar um tempo para analisá-los, encontrará ótimas ofertas para jogar roleta online. Devido à natureza carry out jogo, não se trouve um método seguro que dite como ganhar na roleta online sempre. Por isso, em ocasião de focar na ter vantagem contrarrevolución o sistema para roleta online, procure tentar se divertir enquanto joga. Para algumas pessoas, isto significa continuar possuindo os jogos sobre roleta online gratuitos. E para ajudar quem deseja jogar valendo dinheiro, la cual seção destaca alguns estilos populares para roleta, as várias maneiras de incrementar as chances sobre ganhar e quais estratégias devem se tornar evitadas.

Nele, você encontrará um catálogo possuindo mais seis mil jogos, tendo atualizações constantes. Como mencionamos anteriormente, ao contrário do que ze poderia pensar, u jogo da roleta tem tudo a ver com uma grande estratégia. Um combate contínuo, a cada volta da roda, entre estatísticas, sorte e possíveis combinações. Apesar sobre não ser aceito por quaisquer operadores de cassino, to Neteller continua sendo uma ótima opção, pois garante transações ainda mais seguras. Através dele, os usuário não precisam compartilhar dados pessoais do cartão sobre crédito com o site, por exemplo, sendo ideal em virtude de os jogadores o qual preferem preservar tua privacidade. A program ainda oferece pagamentos rápidos por Pix e presenteia operating system novos usuários possuindo um bônus de 100% do 1º depósito até R$500.

Nossos Bônus De Cassino Online Favoritos

Existem diversas variações dasjenige melhores mesas de roleta, em formato de jogo digital. Algumas já tem a possibilidade de conhecer, mas daremos informações sobre because principais formas para jogar roleta com dinheiro real. Com quase metade das chances a benefit do jogador, since pessoas buscam u jogo de roleta online como forma de entretenimento elizabeth também de ganhar dinheiro. Por isto, a Top10cassinos elaborou um guia eficaz sobre como jogar roleta online e ganhar.

Além de perder tempo, você corre o risco para usar um cassino online sem segurança e não creditado. Devido à possibilidade de roubo para identidade ou defraudación financeira, é essencial que você permaneça diligente ao tentar um cassino on the internet. Recomendamos que você consulte os guias online da JustGamblers para cassinos específicos para, dessa manera, tomar uma decisão segura sobre em que você joga roleta online. Da clássica roleta ao listo a jogos de roleta inovadores, diferentes de tudo o qual você já viu, os provedores sobre jogos atuais oferecem alguns dos melhores jogos disponíveis simply no Brasil. O cassino da Melbet conta com a também completa área de jogos de roleta online, com quase 200 opções sobre mesas com crupiês ao vivo. Tanto a seção sobre apostas como a de cassino são abrangentes na Megapari.

Roleta Europeia

Analisamos se o site conta com licenças de funcionamento emitidas por autoridades reguladoras respeitadas, como a Malta Gaming Authority ou the UK Gambling Percentage. Na versão mobile, compatível com Android electronic iOS, é possível encontrar os mesmos recursos disponíveis no ano de computadores. Mesmo em conexões de dados móveis, a tablado entrega um grande desempenho e não compromete a experiência de jogo.

Recursos acessíveis, plataforma intuitiva e uma enorme variedade de salas ao vivo é o que fazem do Mega Chop Casino uma boa escolha para quem gosta de jogar no ano de salas de roleta com dealers profisionais. A roleta Europeia é mais popular no Reino Unido e no ano de todo o universo por este tema. Sistema algum irá lhe dar possibilidade de vitória sobre 100%, cada cambio de roleta tem uma porcentagem sobre vantagem da odaie, essa porcentagem não vai diminuir systems aumentar, não importa o que você faça. Uma outra diferença importante no meio de a Roleta on the internet ao vivo elizabeth sua contra part virtual é la cual há um limite de tempo pra fazer apostas na Roleta ao listo. O limite para tempo é normalmente entre 30 segundos e um primo, mas a média é de forty segundos. Pode parecer um curto período de tempo, no entanto isso é autosuficiente para fazer alguma aposta, se você sabe o la cual está fazendo.

#5 20bet – Jogue A Sua Roleta Tradicional Favorita 🔥

Existem três versões principais ag roleta, que são a francesa, a americana e a new europeia. O structure das roletas francesa e europeia são idênticos, com 37 bolsos numerados entre 0 e 36, havendo apenas certas pequenas diferenças nas mesas de apostas. Em tese, você pode realizar operating-system mesmos tipos de apostas em ambas as versões, contudo em cada” “alguma delas os nomes dessas apostas como também o posicionamento das mesmas aparecem de manera distinta. Apesar weil grande maioria dos jogadores preferirem jogar roleta online achacar computador, algumas pessoas querem aproveitar este jogo pelo móvil.

Você pode optar por usar um método em vez para outro, dependendo de uma sua situação financeira pessoal. Somos some sort of favor do usufructo de cartões Visa for australia ou Mastercard, pois dão milhas para viagens. Fique gentil se o cassino online que você está usando cobra taxas de processamento por qualquer um desses métodos. Se você já ze perguntou por la cual deveria confiar na nossas análises de cassinos online, temos a resposta em virtude de você. A roleta americana é alguma mesa rara devido ao número adicional 00 na roleta. Os jogos de roleta estão ganhando popularidade” “devido à acessibilidade e simplicidade das dinâmicas de jogo.

Guia Weil Roleta Online: Conselhos Para Jogar Grátis Ou Valendo Dinheiro

Na verdade, no caso weil roleta, há apenas uma maneira errada de jogar, que” “é através do “método do celeiro” explicado abaixo. Você está pronto para jogar valendo dinheiro genuine, explorando todas as mesas de roleta emocionantes disponíveis. No mundo da roleta online, isso significa que, se os números vermelhos vencerem por várias rodadas, os jogadores D’alembert acreditam que um número preto tem que ser escolhido. O jogo de roleta com dinheiro actual no Brasil é fácil, graças à excelente variedade para sites confiáveis que oferecem o game. Apesar de miner muitas casas de apostas e de cassino com roleta, nem todas têm uma oferta vantajosa para seus usuários. Por isso, além de lhe darmos a conhecer várias operadoras com el jogo, esta seleção reúne aqueles web sites que vale simplemente a pena visitar.

Há opções de jogos de roleta no ano de que você pode apostar apenas just one crédito, ou até menos. Porém, problema sua intenção seja realmente jogar possuindo apostas mais baixas, é fundamental liquidar qual o théatre mínimo de depósito do site selecionado e confirmar la cual esteja de acordo com o teu planejamento. A arrancar, reunimos uma retahíla com os melhores cassinos online em virtude de jogar roleta apresentando apostas baixas.

O Que Acontece Apresentando Minhas Apostas No Ano De Paridade Quando A Bola Cai Zero Zero?

Se procura saber em que canais de televisão ou casas de apostas pode ver sobre forma legal operating-system seus jogos para futebol favoritos, make use of a plataforma Firstrow Television. Mais carry out que apostas esportivas, há App e, por exemplo, métodos de pagamento” “o qual incluem a possibilidade de apostar possuindo criptomoedas. O cassino dessa operadora não desilude e, cependant impressionante, há até apostas esportivas com tudo que você precisa para uma ótima experiência. Com apostas esportivas completas instructions até de CS2 e outros esportes – ela possui chamado muito the atenção. Isso é apenas uma pequena parte de tudo que a Parimatch tem para proporcionar.

Embora esta regra seja regular no jogo de uma roleta Europeia, ela não está disponí­vel, geralmente, aos jogadores da roleta Americana. Sim, muitos cassinos online oferecem some sort of opção de jogar roleta diretamente pelo celular, por meio de aplicativos dedicados ou sites otimizados para dispositivos móveis. Você vai achar jogos de roleta dos mais tradicionais até variações cependant modernas para se entreter jogando.

Dicas Pra Jogar Roleta Online

Se você nunca jogou este jogo antes, systems se já é um jogador de cassinos que deseja apostar online, este guia responderá todos os seus questionamentos sobre estratégias de roleta. Continue lendo a seguir elizabeth descubra mais a respeito de como você pode jogar roleta em casa, sem largarse mão da diversão e emoção que a atmosfera dos cassinos proporciona. Atualmente considera-se a roleta online um 2 jogos mais conocidos, atrás apenas carry out BlackJack, dominante simply no segmento. Com um relevante crescimento 2 jogos de apostas e a facilidade do acesso à” “world wide web, surgiram centenas para sites de cassinos online. Neles jogadores tem a possibilidade de fazer o seu login de admissão ao site, dormir o dinheiro electronic jogar à vontade. Escolha um casino online selecionado por equipe CasinoTop10 at the ganhe bônus atrativos para começar a jogar.

Seja num película de Hollywood, num vídeo de Vimeo ou num cassino de verdade, quase todos nós já vimos como funciona o jogo weil roleta. Usar alguma estratégia de roleta é divertido, mas certifique-se de jogar com responsabilidade at the nunca jogue por mais dinheiro perform que você pode perder. HD electronic 4K indicam la cual a transmissão ao vivo é realizada usando apenas some sort of melhor qualidade para imagem possível, um que proporcionará alguma visão nítida perform jogo em pace real. As mesas de roleta Their são encontradas mhh parte de Cassino ao Vivo para Roleta ao Listo.

Quais São Operating System Tipos Comuns Sobre Bônus Para Roleta Ao Vivo?

“O dos nossos favoritos é o 888 Casino por ser totalmente certificado pela eCOGRA, e proceder no Brasil comummente. Oferece aos jogadores a experiência íntegral do cassino online e a possibilidade sobre jogar roleta ao vivo. Os jogadores que procuram jogos adicionais e oportunidades, encontrarão apostas esportivas e mais de mil outros jogos para cassino disponíveis em virtude de jogar gratuitamente ou com dinheiro real. Os melhores cassinos online oferecem bônus para você ter rodadas grátis at the créditos para produzir apostas nos primeiros depósitos. Sem falar que ao jogar roleta online online casino você também tem a possibilidade de estar ganhando bônus e prêmios durante o jogo o qual devem ser usados ao seu benefit para ter 1 resultado positivo.

Portanto, fique de olho para não destruir nada e ze inteirar sobre as últimas novidades. 💰Registre-se com o nosso banner e obtain o uso perform código promocional Blaze para ganhar até R$1. 000 de bônus + 45 rodadas grátis em virtude de os Originais da Blaze. Não subsiste uma roleta on the web melhor quando comparamos a ao festón com a tradicional. A ideia é que você conheça que ambas existem e possa aproveitá-las no cassino o qual pretende se cadastrar. Lançada em 2018 pela Evolution, a new Roleta Lightning é a opção excellent para apostadores os quais gostam de apostar no número repleto e buscam pagamentos melhores que o habitual.

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