“On The Web Sports Betting Survive Betting Best Odds

Sito Ufficiale Di Scommesse E Casinò 22bet

Gli sviluppatori hanno curato disadvantage la massima attenzione ogni minimo dettaglio, in modo da soddisfare a pieno le esigenze degli appassionati. Che desiderano chiarezza nei contenuti, evitando di consumare tempo nella comprensione delle funzionalità. L’azienda ha il diritto di richiedere una tua carta d’identità o una bolletta per verificare la tua età at the il tuo indirizzo. Una volta terminato il controllo dei documenti, potrai sollecitare tutti i prelievi che desideri.

Inoltre, è addirittura possibile filtrare gli eventi in diretta per trovare unicamente quelli con streaming. Tutto il posizione è tradotto throughout italiano e dunque non ci sarà bisogno di frequentare l’inglese per agire sul sito. I tipi di scommesse in un terme conseillé sono fondamentali electronic variano notevolmente within base alla rilevanza del match. Più ce ne sono sul sito, più i giocatori saranno attratti e invogliati a giocare. Non c’è nessuno nel mondo dei bookies italiani che offra una scelta così vasta di activity. Gli scommettitori che effettuano la registrazione su questa grande piattaforma hanno una possibilità, non scontata, di utilizzare each i prelievi gli stessi metodi che utilizzano per we versamenti.

Come Accedere Allesamt Scommesse Dal Vivo

Vieni a new dare un’occhiata a 22Bet e diverrà di sicuro arianne tuo bookmaker pada fiducia. Ogni clase ha i suoi bonus di benvenuto e specifiche condizioni per riceverli. Ecco due metodi davvero semplici per creare un nuovo bordo su 22Bet. Uno consiste nella annotazione classica, l’altra modalità invece sfrutta arianne tuo” “accounts Google. Segui we passaggi della modalità che più ti aggrada per creare il tuo account sul sito in maniera facile, leggero e senza intoppi 22bet.

Partire lacet piede giusto, some sort of suon di generosi incentivi, rappresenta un forte stimolo. La fase numero uno consiste” “nell’autentificazione dell’identità del giocatore. Per completarlo vanno confermati i propri estremi d’identità, così da proteggersi da eventuali tentativi dalam incursione da zona di malintenzionati. Per scongiurare spiacevoli sorprese, l’operatore si avvale dei più evoluti sistemi di sicurezza, come il regola SSL, adottato anche da istituti bancari ed enti politici.

Facilità D’uso Scommesse Sportive

I vostri giochi di carte preferiti ritornano sotto una veste completamente mutamento all’interno del casinò live di 22Bet. In questa suddivisione si possono trovare room dedicate for each scommettere in approvazione, sfidando gli altri utenti connessi. Con 22Bet accedi ad un incredibile portale di sports betting studiato per mettere gli utenti a tipico agio e aiutarli a vincere alle schedine. Ogni festa si possono incrociare fantastiche quote for each tutti i migliori sport e campionati più conosciuti.

Ci si può registrare su presente book con este indirizzo e-mail oppure semplicemente utilizzando el numero di telefono associato ad el dispositivo mobile within proprio possesso. Gli utenti Android possono persino condividere i actually loro account di Google per realizzare l’iscrizione. In presente modo, potranno trasferire in un istante tutte le loro informazioni personali, inclusi i dati relativi alle carte pada credito.

Et Italia: Scommesse E Casinò Online

L’assistenza pada 22Bet si può contattare tramite form, chat e mail con la risposta garantita entro 24 ore. In particolare, per compilare il modulo on-line bisogna cliccare sulla pagina “Chi siamo” e poi “Contatti”. Qui appariranno una serie di informazioni tra cui este form in cui digitare la propria richiesta. Per effettuare depositi e prelievi occorre essere utenti registrati.

Gli eventi inclusi in questa sezione” “includono sport come calcio, basketball, Formula one, UFC e ciclismo. Quando si effettua una scommessa survive su 22Bet è possibile inoltre coprirla o incassarla throughout anticipo vendendo una schedina al bookmaker. Oltre alle position machine, 22Bet offre anche i classici giochi da casinò come blackjack, roulette e poker. Sia nella loro forma più pura che in divertenti male impotence eccitanti variazioni dei classici.

Et Esports

Nella recensione odierna proveremo a darvi algun quadro completo tu tutti gli aspetti più rilevanti pada questo elettrizzante localizado di scommesse on the web. Il processo di registrazione più chiaro e il fagotto di benvenuto più vantaggioso sono naturalmente inutili se not c’è nulla dalam interessante per cui utilizzare il reward. Ecco perché abbiamo dato un’occhiata più da vicino allesamt scommesse sportive disponibili e alle le quote. Puoi rendere l’intero processo ancora più semplice utilizzando i social system. Basta permettere way bookmaker di accedere alla tua pagina Facebook e quasi tutto il resto verrà fatto automaticamente.

Pur sprovvista della licenza ADM italiana, 22bet è un casinò on-line sicuro e esperto. Infatti, è autorizzata dal governo pada Curaçao, che styra elevati standard dalam sicurezza e trasparenza. Nella loro semplicità, le slot device riescono sistematicamente a riscuotere l’interesse ordinario. Di conseguenza, 22bet ha parecchio weil fornire in proposito, complici i proficui accordi sottoscritti insieme” “advertisement alcuni degli sviluppatori migliori al trasparente. Ciascun ingresso inside catalogo vanta distinto stile unico at the distintivo, anche nell’ambientazione. È risaputo che il gioco d’azzardo può creare dipendenza se non cuando presta attenzione.

Et Promozioni Elizabeth Codici Bonus Per Le Scommesse Sportive

La chat dal vivo è stata di gran lunga la più rapido, anche se abbiamo dovuto aspettare qualche minuto per osteggiare una risposta. Oltre alle scommesse sportive, anche gli appassionati di giochi de uma casinò sono ben accolti. Potrai divertirti con il cosmo colorato delle slot machine game o con my partner and i giochi dal festón nelle pause compresa tra una partita electronic l’altra, in un’atmosfera da casinò unica. A proposito, se ti mancano the sale da gara, dovresti partecipare a new una sessione pada gioco con este croupier in carne e ossa. Sul sito ci sono oltre 100 tavoli dal vivo dove puoi giocare a new blackjack, roulette e baccarat dal listo.

Il servizio clienti lavora 7 giorni su 7 senza interruzioni, in inglese um in altre lingue europee. Gli operatori possono essere contattati via chat on the web o per email. Inizialmente il servizio era specializzato solitary nell’industria delle scommesse.

Recensioni Di Altri Giocatori

I giocatori che hanno completato disadvantage successo sia l’iscrizione che la controllo dei loro bank account possono richiedere il bonus di benvenuto 22Bet. Alcune persone hanno un telefono Windows o semplicemente non vogliono togliere nulla. Utilizza la tecnologia HTML5 che tutti i moderni browser mobili sono in grado di elaborare. Proprio appear l’app, il luogo web mobile lata tutte le funzioni delle scommesse sportive. Puoi divertirti que incluye le scommesse to il gioco d’azzardo, accedere a tutti i bonus electronic richiedere prelievi. Inoltre, il sito dans le cas où aggiorna automaticamente elizabeth non occupa margine nella memoria de tuo telefono.

Se sei un utente registrato puoi anche contattare il supporto corso la live conversation, disponibile h24. I nuovi arrivati su 22Bet. com possono sbloccare il added bonus di benvenuto; mi promozione che présente il 100% afilado a 122 € sul primo bidón di almeno one €. Su presente sito esiste più” “dalam un modo per effettuare la registrazione. Gli utenti che amano giocare weil PC possono iscriversi dal sito internet ufficiale di 22Bet, che si trova all’indirizzo 22bet. possuindo.

Come Si Ricarica Il Conto

Inoltre, i termini electronic le condizioni di 22Bet stabiliscono che i depositi at the i prelievi devono essere effettuati continuamente con lo stesso metodo. Questo function, tra l’altro, a prevenire il riciclaggio di denaro male impotence è una pratica standard nel parte. L’esperienza di un vero casinò è quasi a piatto di mano grazie a questi particolari tipi di giochi da tavolo. Giochi con giocatori reali in tutto elle mondo e, soprattutto, con un favorevole croupier.

Solo all’interno del proprio nota personale, infatti, cuando possono svolgere le operazione di estrazione e deposito. 22Bet offre agli utenti tutte le informazioni necessarie per guadagnare le loro scommesse offrendo loro votre possibilità in speed reale delle probabili vincite di una squadra. Grazie alle estimate scommesse il giocatore può fare puntate più realistiche e mettere a effetto le proprie conoscenze e abilità nel campo delle scommesse. Non mancano informazioni aggiornate in speed reale per permettere un gioco più piacevole e brillante, oltre ad la sezione live ben strutturata. A ambito grafico il posizione è comprensibile electronic facilmente navigabile, suddiviso per sport virtuali, statistiche e risultati.

Et” “Bonus Di Benvenuto Elizabeth Altri Bonus

Che permette agli appassionati di mettere alla analisi le rispettive conoscenze in una pluralità di discipline. Lo spazio maggiore viene, da prassi, antecedente al calcio, sia nelle competizioni principali sia in quelle inferiori. Oltre allesamt gare maschili, ci sono pure le donne, con una Champions League che ne costituisce elle piatto forte. Registrandosi sul casinò dalam 22Bet Online cuando ha accesso anche ad un grandma numero di tavoli di roulette, poker, blackjack e baccarat. Gli utenti potranno giocare a tutte le loro varianti preferite e battere piatti in denaro reale. 22Bet présente ogni giorno 100+ eventi live aje clienti del suo sportsbook.

Il procedimento each utilizzare i codici promozionali 22Bet è davvero semplice. Troverai una barra contrassegnata dalla dicitura “codice promozionale”. Spesso electronic volentieri, infatti, in occasione di partite di cartello appear quelle di Winners League, sono disponibili delle quote maggiorate davvero incredibili. Quello richiesto per elle prelievo è arianne livello uno at the consiste nel trasmettere la foto fronte-retro della carta d’identità, patente o passaporto. Molti giocatori perdono la voglia dalam registrarsi ad mi nuova piattaforma a causa della difficoltà del processo.

Cosa Garantisce La Società Pada Scommesse 22bet?

Tuttavia, solo votre slot machine contano ai fini de requisito di puntata e non tutte. I giocatori devono informarsi in anticipo se il gioco a cui vogliono giocare conta. Anche in questo se, 22Bet dà aje giocatori sette giorni di tempo for every soddisfare le condizioni.

Il bookmaker accetta le richieste di prelievo anche nel weekend e, nella grande maggioranza dei casi, li elabora entro 24 ore. Per depositare denaro sul proprio nota di gioco 22Bet, bisogna accedere de flesta propria area riservata. Da questa web si dovrà quindi cliccare sul adatto saldo e osservare le istruzioni fornite sullo schermo for every ricaricarlo. Gli scommettitori italiani possono guadagnare pronostici sul calcio per le leghe Serie A, Successione B, Serie D e Eccellenza. Questo allibratore vanta throughout tutto il ambiente decine di migliaia di utenti, che lasciano per 22Bet recensioni online inside cui condividono una loro esperienza. Queste sono prevalentemente positive ed il razon di ciò è imputabile in nan parte alla qualità dei suoi servizi.

Bonus Dalam Compleanno

Quello applicato weil 22bet ha valenza internazionale, definito nei minimi dettagli secondo i principi dell’onestà e della buona fede. Infine, completano il quadro my partner and i crash game, 1 dei trend emergenti degli ultimi anni. Le inedite modalità di interazione contribuiscono al coinvolgimento. In proposito, credo vada concessa una opportunity a Space XY, una proposta accattivante, semplice nella grafica ed elettrizzante nei meccanismi che ne regolano il meccanica. Tra i titoli più popolari ni consigliamo poi dalam provare Athena’s Wonder, Joker Coins, Book of Rebirth, Takutiki e-book of Anksunamun.

Prima di contattare l’assistenza, puoi dare un’occhiata alla sezione delle FAQ che contengono le domande più frequenti poste dai giocatori allo staff members del sito. Una volta effettuata la registrazione, potrai accedere al sito naturalmente inserendo le tue credenziali. Per superiore praticità puoi anche memorizzarle, in metodo da non doverle inserire ogni volta. Pochi istanti dopo aver inviato la tua richiesta pada iscrizione, riceverai nella casella di posta elettronica che haifisch indicato il hyperlink con cui confermare il tuo accounts.

Come Creare Velocemente Un Nuovo Account Per Scommettere

Questo casinò mi è piaciuto fin dai primi minuti che ho trascorso sul luogo. La registrazione è semplice e rapido e non è necessario ricaricare arianne conto. Ma 22Bet offre anche nuovi giochi di casinò di sviluppatori esordienti. 22Bet ha un’offerta di scommesse survive versatile rispetto ad altri fornitori dalam scommesse sportive.

Queste sono el indice di probabilità, e più bolle sono, più è probabile che risultino vincenti. Le opzioni tramite le quali è possibile farlo sono le stesse di quelle alle quali si ricorre scommettendo prima dell’inizio di una lotta. Finalizzate le formalità, gli aderenti al circuito ottengono accesso immediato a statistiche dettagliate, un pagamento rapido delle commissioni e un’ampia gamma di materiale promozionale. Chiunque scelga di concedere una chance a 22bet, sarà ben lieto pada constatarne l’altissima qualità. La licenza pada” “gioco è un elemento fondamentale nel giudizio complessivo. 22bet possiede il lasciapassare delete Governo di Curaçao, una delle giurisdizioni più rinomate nel settore del betting.

Casinò Mobile Di 22bet

Poter guadagnare scommesse dopo che un evento è iniziato è primero dei vantaggi che la moderna tecnologia ci offre e di cui corrente bookmaker ha eretto ampio utilizzo. Piazzare una scommessa con una bookmaker è un ottimo modo for each mettere alla prova la tua bonanza, ricevere una bella scarica di adrenalina e, perché zero, guadagnare. Centinaia dalam siti di scommesse offrono i essi servizi a milioni di appassionati a cui piace scommettere online sugli sport. La società di scommesse 22bet si distingue tra tutti i boomaker online e, sebbene sia relativamente giovane, ha già conquistato la fiducia di various centinaia di migliaia di appassionati. La navigabilità è buona e tutte le informazioni sono fornite in beat reale dal crew di 22Bet. Inoltre, il sito è moderno e utile da scorrere elizabeth comprendere in tutte le sue proposte.

Di regola è sufficiente aver effettuato correttamente la processo di iscrizione the 22Bet per poter usufruire di tutte le modalità di pagamento. Tuttavia, within alcuni casi può essere richiesta una verifica ulteriore al momento del prelievo a protezione de tuo account elizabeth dei tuoi fondi. Le quote sportive rappresentano il cuore di ogni bookmaker, dato che indicano quanto lo scommettitore potrà ottenere within caso di colpo vincente. Un altro punto di forza di 22 Wager è l’ampia scelta di scommesse throughout grado di compiacere gli scommettitori pada ogni livello dalam esperienza e abilità. Ogni giorno, my partner and i nostri trader quotano più di este migliaio di eventi, da quelli più noti a quelli di nicchia. Inoltre, l’account gioco anordna valore esclusivamente personale, e per questa ragione non è possibile crearne uno per conto pada terzi.

Verifica Del Nota Gioco Su 22bet

Il bookmaker 22Bet fa piacere ai suoi clienti italiani que incluye bonus regolari che coprono tutte the attività sulla piattaforma. Inoltre, puoi accedere a tutto anche in movimento corso il tuo dispositivo mobile. 22Bet présente anche una sezione casinò, dove puoi giocare alle slot machine machine e ai giochi con croupier dal vivo que incluye soldi veri. 22Bet è un sito largamente fornito e bill pensato per chi ama il mondo delle scommesse, degli eSports, ma anche del bingo e del casinò. Ovvero, vengono presentati i actually bonus di benvenuto, i servizi” “(oltre 1000 eventi, oltre 200 metodi di pagamento, supporto twenty-four ore su twenty four e 7 giorni su 7, oltre al negozio fan).

Nell’ambito delle scommesse, si tratta di investire somme in eventi sportivi, e dunque we mercati sono connessi alle tipologie dalam scommesse effettuabili. Il servizio di aiuto clienti lo abbiamo trovato celere elizabeth competente nelle risposte. Interagire da chat crediamo sia are generally soluzione più appropriata per dubbi u procedure di ordinaria amministrazione. Altrimenti, è preferibile inviare direttamente un’e-mail, così de uma interagire direttamente con i tecnici. Se hai difficoltà que tiene l’utilizzo di 22bet o hai bisogno di chiarimenti specifici, puoi contattare arianne servizio clienti. Oltre a un modulo da compilare direttamente sulla piattaforma, lo staff è disponibile telefonicamente e by way of e-mail.

L’assistenza Clienti

“Puoi accedere a queste scommesse sportive tramitación PC o mecanismo mobile. Se scegli la seconda scelta, puoi scaricare l’app o utilizzare un’opzione mobile-friendly. Centinaia pada eventi sportivi giornalieri vengono offerti aje clienti mobili. Il casinò di 22Bet ospita più di 3000 giochi, rendendolo uno dei più grandi nell’intera industria di scommesse. Pochi casinò possono vantare una selezione così di slot, tavoli da gioco elizabeth altri tipi di intrattenimento.

L’aspetto abbondante del catalogo dalam giochi da casinò di 22Bet è che si tratta sempre di giochi dal vivo. Di solito si compila una scheda di scommessa prima dello svolgimento dell’evento. Inoltre, dobbiamo ricordare che su 22Bet è disponibile un’opzione dalam scommesse live for every la maggior lado degli sport. Questo ti permette dalam adattare la tua scommessa live allesamt condizioni correnti delle partite. Le offer vengono modificate de flesta velocità della barlume, quindi hai molte possibilità di vincere, ma devi anche avere un po’ di dimestichezza. Una volta completata la registrazione, potrai accedere al sito ogni volta con i actually tuoi dati pada login sul tuo PC o aparato mobile.

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