Pin Up Casino País Brasileiro: Análise E Bônus Incrível 2024

O Web Site Oficial Do Cassino Pin-up No Brasil

É por isso la cual o Pin-Up On-line Casino oferece a new seus usuários essa oportunidade. Na verdade, este é mais um tipo de bônus de boas-vindas, pois apenas novos usuários podem obtê-lo. As instruções abaixo descrevem como você pode obter rodadas grátis no Casino Pin number Up. O cassino adquiriu seus jogos dos principais desenvolvedores de software para garantir que since apostas sejam otimizadas.

Se você optar por usar o site móvel do Pin Up em vez carry out aplicativo ou weil versão para COMPUTER, nenhuma funcionalidade vai deferente. Porém, pra quem não deseja baixar o metodo Pin Up, é um ótimo substituto. Você pode chegar rapidamente ao seu local preferido graças ao design otimizado para dispositivos móveis da interface perform” “usuário. No geral, u nosso veredito após análise é o qual essa é uma plataforma que merece an atenção de usuários. É o tipo de página que vale servir testada, uma sucesión que existe uma enorme variedade para jogos para aproveitar e bônus para se beneficiar.

Licença Oficial

Preencha os detalhes necessários electronic siga as instruções para completar o processo de padrón. Achei as ofertas promocionais no Pin-Up Casino bastante atraentes com um style simples, e aproveitei sua oferta de bônus de boas-vindas. Entretanto, as exigências de apostas eram relativamente altas, tornando a retirada de meus ganhos um desafio. Os bônus são uma boa vantagem, mas a leitura dos termos electronic condições é essencial. Com sua imenso base de fãs, o serviço para apostas em críquete se tornou alguma parte significativa perform jogo” “afin de muitas pessoas. O Pin-Up Casino oferece excelentes opções para apostas em cricket para novatos e apostadores experientes pinup casino.

Você ainda precisa realizar uma aposta e se livrar sobre diferentes combinações de símbolos para ganhar nas slots. Todos eles têm o estilo único electronic cobrem uma variedade de tópicos. Visite o site formal para acessar um cliente PC do Pin Up em um computador. Ele opera sem inconveniencias e possui los dos os mesmos recursos e funcionalidades sobre qualquer outra versão. Você não terá problemas para usar an interface é realmente simples para entender. Se desejar, você pode llevar o idioma perform site só clicar no canto exceptional direito da calo onde tem since bandejas.

Como Jogar Simply No Pin Up Vello Celular?

Os requisitos devem ser cumpridos dentro do prazo para retirar um bônus. Para realizar isso, você necessita recuperar o canon, prestar atenção às probabilidades da ex profeso e à aposta. Todas essas atividades devem começar um mais tardar simply no período durante um qual an chollo está disponível. Na versão móvel do aplicativo Pin-up, operating-system formulários da uraian, menus e tamanhos dos botões de controle diferem do design do cassino no PC. O download do cassino PinUp vale a new” “pena para todos la cual estão cansados de apostar em o navegador em o PC ou laptop. A versão móvel oferece uma software de usuário também conveniente, gráficos para alta qualidade e alta velocidade.

Um ponto importante é que, no momento em o qual essa análise foi feita, o Pix assim como o boleto não estavam disponíveis. Assim, os jogadores la cual gostam desses métodos, precisarão achar outras alternativas para suas jogatinas. A etapa inicial envolve poucos passos e, assim que você confirma a criação weil conta, já tem a possibilidade de começar a jogar. Essa etapa sobre fazer o seu login é muito simples, com a great exigência de poucas informações em 1 primeiro momento.

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

Sim, o cassino é rigoroso quanto ao fornecimento de dados pessoais por zona dos usuários, exigindo apenas informações precisas. Mas a plataforma de jogos on the internet é a única responsável pela privacidade seus dados. O histórico de suas operações, ganhos, transferências não cairá nas mãos de gente mal intencionadas, você pode confiar completamente em nós. Se ainda tiver dúvidas, abra a seção “Política de Privacidade” em nosso web site e leia com atenção. A área de cassino ao vivo está cheia de opções legais para você escolher, pois há muitos jogos com supplier ao vivo.

Após an instalação da plataforma móvel de jogos, u usuário poderá lançar os caça-níqueis on-line ou offline, usando o método sobre demonstração ou jogando por dinheiro. O bônus de boas-vindas do Pin-up Online casino é uma ótima maneira de bater na porta sobre entrada desse cassino e conhecer the casa com benefícios” “incríveis. Novos jogadores recebem até R$1. five hundred e 250 giros grátis ao fazer uma conta. O visual intrigante electronic atraente do Pin Up é apenas alguma dos fatores o qual tornaram esse cassino o sucesso la cual ele é.

O Suporte Ao Cliente Está Disponível Simply No Brasil?

Dependendo do que está acontecendo simply no jogo, você tem a possibilidade de apostar em alguma série de previsões prováveis. Você tem a possibilidade de fazer login na sua conta usando o aplicativo para computador ou dispositivo móvel. Depois sobre fazer um depósito e o dinheiro ter sido depositado em sua conta, an oferta é válida por 1 determinado período para tempo. Digite um código promocional atual no campo ao registrar uma conta para receber bônus adicionais. Existem muitos códigos promocionais o qual você pode utilizar no Pin Up para ativar certos bônus e promoções. Por exemplo, 30 rodadas grátis, bônus de reembolso at the outras promoções.

Wilds pode ser substitutos de qualquer outro símbolo, dando ainda mais oportunidades de ganhar em importante quando você joga o Money Teach 2. Com teu design intuitivo, navegar através do aplicativo é uma cefiro. A instalação perform aplicativo Pin-Up Casino em seu aparato móvel nunca foi tão fácil. Tudo que você deve fazer é visitar an App Shop se tiver um sistema operacional iOS e digitar “Pin-Up Casino”, Ele estará bem ali, esperando por você. Uma vez instalado, você poderá acessar los dos os mesmos games e bônus disponíveis na versão desktop do site. Na parte inferior, há informações sobre a great empresa, política para privacidade e licença, além de uma listagem de fornecedores e métodos para huida de depósitos.

Formas Sobre Pagamento No Brasil

No Pin Upwards Casino, entendemos como é importante para nossos clientes ter acesso a seus ganhos de manera rápida e fácil. É portanto o qual nos esforçamos afin de processar quaisquer saques dentro de 24 horas após u recebimento de teu pedido. E por último, quando regarding hora de concluir seus fundos, o Pin-Up Casino oferece pagamentos seguros electronic rápidos com notificações por e-mail para que você possa sempre acompanhar suas transações. A administração exige obrigatoriamente o verificação para prevenir lavagem de dinheiro at the operações fraudulentas. Aqui será necessário pujar scans de documentos (passaporte, carteira sobre motorista ou pasado de residência). Depois, é necessário confirmar o endereço sobre residência, carregando o documento correspondente.

Pin-Up Casino proporciona os mais emocionantes e emocionantes games de Roleta – todos acessíveis possuindo apenas alguns cliques de seu computer mouse! Seu design fácil de usar vuelta o Pin-Up fácil de encontrar o jogo de Roleta que você’está procurando, quer você prefira a roleta americana ou européia. E com seu depósito mínimo e opções de jogo bônus, você’terá muitas possibilities de ganhar. Para atrair clientes, a new plataforma faz regularmente ofertas lucrativas.

Como Entrar Na Tua Conta Pin Up

Os slot machines desatualizados às vezes não funcionam em smartphones modernos assim como os novos jogos não funcionam em aparelhos móveis mais antigos. Você pode realizar o download por completo gratuito através para nosso link ou visitando o site oficial do Pin Up Brasil Club. A versão móvel carry out cassino, no momento, é adequada afin de a última versão do Android, desta maneira você pode executá-la em quase qualquer smartphone ou capsule.

Os usuários também culpam o relativo gerenciamento inconveniente dos caça-níqueis nos smartphones. Alguns jogos (vídeo pôquer, roleta, etc. ) exigem uma seleção precisa de certas posições. Com o dedo em uma pequena tela sensível ao toque, não é fácil apuntar os números ou cartas de game desejados. Nem todos os jogos funcionam na versão móvel do cassino Pin number Up.

É Fácil Criar Uma Conta No Casino Pin Number Up?

O Pin Up Gambling Golf club oferece a los dos para experimentar um aplicativo móvel afin de Android e iOS. Você pode baixá-lo gratuitamente do Play Market ou App-store, assim como carry out site oficial. Os convidados do cassino podem baixar com facilidade qualquer aplicativo Pin Up instalando-os em distintos aparelhos.

Só é importante ter em mente la cual todo e qualquer bônus para jogar no cassino vem acompanhado das suas” “próprias regras. O la cual significa que você não poderá utilizá-lo sem cumprir apresentando aquilo que foi acordado. Sim, u Pin-Up é compatível com dispositivos Android os e oferece o aplicativo oficial para smartphones que utilizam esse sistema operacional.

Quais São As Etapas Para O Uso Da Aplicação Móvel?

Temos acesso assegurado a todos operating-system jogos, apoio twenty-four horas por talk, email e telefone, além de” “promoções exclusivas. Eu tive um pequeno problematica enquanto jogava um jogo de dealer ao vivo no Pin-Up Casino, electronic entrei em contato com sua squadra de suporte through chat ao palpitante. O agente foi rápido e cortês e me ajudou a resolver u problema em poucos minutos.

Ao criar sua conta, você será solicitado an escolher uma moeda que pretende usar. É essencial escolher uma moeda que seja provvidenziale para você electronic que você esteja familiarizado. Configure lignes de depósito, perda ou tempo sobre jogo para asegurar que você mantenha o controle em relação à sua atividade sobre jogo.

Bônus De Boas-vindas Com Depósito

Usando o modo demo, você entenderá an operação e as complexidades das máquinas caça-níqueis. Obtenha a melhor experiência divertida search engine marketing estourar seu orçamento. Sim, o Pin-Up oferece uma variedade de jogos o qual você pode jogar de graça. Essa é uma ótima maneira de percibir novos jogos at the ter uma ideia de como a new plataforma funciona.

Adicionalmente, há suporte ao cliente e maneiras de entrar em contato com o manipulador. Tudo sobre Pin Up Bookmaker electronic quais opções sobre apostas ela proporciona? Além disso, você pode realizar apostas em esportes eletrônicos, eventos políticos, sociais e até no ano de programas de televisão. Os jogadores têm acesso a centenas de jogos sobre cassino em diversos formatos, incluindo operating-system mais recentes lançamentos com grandes oportunidades de ganhos. Com todos os serviços de jogos disponíveis em um único web site, os jogadores têm an oportunidade para explorar e potencialmente ganhar grandes prêmios.

Jogos Disponíveis Zero Cassino Ao Festón Do Pin Up

O Pin-up regularmente realiza sorteios de prêmios materiais e no ano de dinheiro, atraindo possuindo novas oportunidades pra dobrar os lucros. O principal é ficar atento às atualizações no site para estar constantemente informado. Sem a new confirmação da conta, o jogador simplesmente obtém acesso à sua conta pessoal, onde no dessin recebe informações em relação à” “u saldo da conta. Para se deliberar usando um endereço de e-mail, você precisará selecionar a great opção apropriada zero formulário. Em seguida, digite seu mail, crie uma senha, verifique se há marcas verdes indicando que você concorda com as regras e clique no ano de “Registrate”.

Depois disso, um dinheiro deve aparecer instantaneamente na sua conta. Uma aposta de sistema consiste em várias apostas expressas idênticas na um conjunto predeterminado de resultados. O lucro de qualquer acumulador no libro é somado para determinar o dividendo. Esta é uma aposta muito arriscada, mas o retorno vale a cosa.

Pin Up Casino Provedores De Jogos

O verdadeiro apelo la cual essa casa sobre apostas oferece está na junção para passado e futuro que o jogador experimenta quando entra no site. Por um lado, since fotos de belas mulheres vestidas em estilo vintage vão te levar para o passo. Por outro lado, os slots trazem toda an inovação dasjenige tecnologias mais modernas.

Que tal se divertir possuindo um jogo cependant antigo, como o blackjack ou jogo do 21? Ou, se preferir, ze aventurar em uma espaçonave alien com as moderníssimas slots on the internet? São centenas para jogos de roleta, 21, poker, bacará, game shows e caça-níqueis online imperdíveis. Muita gente tem a possibilidade de achar que é besteira olhar para os fornecedores sobre jogos quando escolhemos por cassino on-line. Por sorte, no cassino Pin-up, títulos de qualidade foram criados por provedores como Red Tiger, NetEnt, Gamomat, Endorphina e Blueprint.” “[newline]Novos jogadores contam apresentando um super bônus de até 100% no valor carry out primeiro depósito, podendo começar com u dobro para dar.

Termos & Condições

Portanto, sem dúvida, você obtém uma trampolín inteligente com coeficientes competitivos e uma ampla seleção ao se registrar no PinUp. Dezenas sobre diferentes variações perform mundialmente famoso jogo de Blackjack também estão disponíveis zero PinUp Casino. Este é um game muito popular o qual tanto iniciantes quanto jogadores experientes gostam de jogar.

Residentes de vários países podem jogar no Pin-Up, incluindo Brasil, Índia, Canadá, Austrália e muitos outros países. No entanto, existem muitos países onde u jogo online é proibido como também os residentes desses países tem a possibilidade de não conseguir visitar a plataforma. É importante verificar since leis do seu país antes de sony ericsson inscrever em uma conta na Pin-Up.

Como Conseguir O Bônus Para Boas-vindas No Pin-up?

Alguns usuários acreditam erroneamente que não precisam de suporte técnico pelo tema de” “a new plataforma online funcionar por conta própria. Quem entende o trabalho dos sites confirmará que tal raciocínio está resabiado. Além disso, às vezes surgem certos problemas e u usuário não consegue encontrar uma solução. Sim, em todos os países la cual atua, o Pin number Up conta com milhares de jogadores. Isso não é por acaso, já que an companhia tem jogos at the slots de distintas provedores, que são uma terceira part que regula justamente as probabilidades. Não é o PinUp que define suas chances de ganhar, e sim esses provedores externos, u que torna a great experiência ainda também confiável.

Se sua previsão estiver correta, então eles serão imediatamente creditados na conta. Experimente agora mesmo este moderno aplicativo para smartphone electronic você não se arrependerá. Fundado no ano de 2016, o Cassino Pin-Up tornou-se o dos sites para jogos online” “cependant populares do Brasil. Conhecido pela segurança, variedade e bônus atraentes, já conquistou uma legião de usuários brasileiros.

Jogos At The Apostas Ao Vivo

Uma aposta que cobre várias posições ao mesmo speed é chamada de aposta combinada. Somente se todos os palpites dos participantes estiverem corretos, este jogo será lucrativo. Como resultado, esta é uma escolha arriscada, mas pode servir lucrativa se u seu palpite estiver correto.

Este excitante game apresenta cinco carretéis e dez linhas de pagamento, possuindo um design para temática egípcia antiga que certamente irá cativá-lo. A expresamente mínima é só €0, 10, para que todos possam ayudar da diversão. Pin-Up Casino oferece alguma seleção fantástica de jogos de tabuleiro clássicos para cambiar sua experiência para jogo online intensamente emocionante! Se você’é fã de games de cartas tradicionais como Blackjack at the Poker ou prefere a natureza estratégica dos jogos sobre tabuleiro de estratégia como Backgammon e Damas, Pin-Up possui tudo isso. Jogar jogos de cassino em movimento neste momento é mais fácil do que nunca com o aplicativo móvel Pin-Up On line casino.

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