Bbrbet Online Casino Online La Reseña En México Agosto 2024

Bbrbet Casino Online 2024

El gambling establishment BBRBET actualiza sin parar sus promociones afin de mejorar el pacto y la satisfacción de los jugadores. Animamos a mis usuarios a consultar con frecuencia are generally página de promociones para conocer las últimas ofertas. El servicio de cooperación de la plataforma desempeña un papel important en la prestación sobre un servicio sobre calidad a mis usuarios.

No olvides revisar siempre mis requisitos de postura antes de reclamarlo para que sepas qué es lo que debes hacer para aprovecharlo. Existen muchas plataformas distintos que operan en México y prestan sus servicios perdio licencias internacionales u locales. Dado o qual los servicios sobre casino son similares en muchos aspectos, no es difícil encontrar una atajo.

Bbrbet Cassino

Más de 15 años de experiencia en el mundo de todas las apuestas y mis casinos, hacen sobre Mario Quintana mi de las importantes voces y plumas del nicho sobre México y nan parte de Latinoamérica. Se trata para un profesional os quais se ha dedicado a desenmarañar todos los mitos sobre torno a mis casinos online, y que ha hecho bien a que miles de personas logren arriesgar con tranquilidad. El casino ofrece una gran cantidad juegos diferentes para todos los gustos, por lo que le recomiendan que explore individualmente todos los ofertas en vente libre en el lugar web del online casino, en la sección «Juegos». BBRBET, fundada durante 2010, se styra hecho un hueco rápidamente en el panorama de todas las apuestas en línea de México bbrbet app.

No solo fue difícil saber, dada la variedad sobre dominios, países elizabeth idiomas, con quién estás tratando, sera claro que sobre caso de inconveniencias los canales afin de ayudarte no serán lo que sony ericsson dice” “expeditos. Pero, por añadidura, la cantidad para información que estás entregando para entretenerse ya debería ponerte nervioso. BBRBET destaca por su compromiso con el placer responsable, garantizando un entorno seguro sumado a agradable para los dos jugadores. El elemento visual de una web de BBRBET está diseñado sobre acuerdo con todas las tendencias de diseño actuales. La atractiva paleta de colores y los elegantes elementos decorativos subrayan el prestigio sobre la plataforma y crean una atmósfera agradable para los juegos. Pero no pasa nada cuando algo así llegara a suceder, are generally atención al usuario del casino resolverá tu problema lo más rápido loable.

¿qué Bonificaciones Ofrece Bbrbet?

Este sera uno de aquellas factores que la mayoría de jugadores para Casino online durante México como su busca y boy los bonos de bienvenida y de lealtad por quedarse jugando en el casino por bastante tiempo. Déjame decirte que Mr Gamble trata bien some sort of sus invitados sumado a les da muchas posibilidades de multiplicar” “aquel dinero invertido a new todos los mexicanos. Teniendo posibilidades para ganar grandes premios si la destino está de su lado, y no debes ser el experto, porque hay juegos para todos, desde novatos a los más experimentados. Ofrecemos todas las opciones para que les sientas seguro y cómodo al practicarse tus apuestas en nuestro casino sobre linea.

BBRbet Casino es refugio para mis entusiastas del gambling establishment, ofreciendo una jugabilidad sencilla para todos, incluso para estos que son nuevos en la expertise de BBRbet Gambling establishment. El respaldo sobre influencers como Yefferson Cossio, La Liendra y Luisa Castro no es garantía de nada y, con toda hipotesis, es parte sobre estrategias publicitarias la cual deberían ser divulgadas. Cada vez más voces alertan de que, sencillamente, not any es cierto os quais sea más fácil ganar que destruir.”

Bbrbet Casino: Algun Refugio Seguro Pra Los Entusiastas Delete Casino

Opera con una conformidad de Curazao, como garantiza un entorno de juego regulado y seguro. Con sede en Villa de México, BBRBET cuenta con una base” “sobre usuarios de más de 1 millón de jugadores activos, lo que refleja su confianza con popularidad. Para ter a possibilidade de registrarse en el sitio web, este usuario debe tolerar los Términos con condiciones generales. Regístrate, haz tu 1er depósito y diviértete con nuestros juegos online mientras deseos dinero real desde cualquier punto para México.

Los bonos y promociones han sido diseñados para que los jugadores tengan una destreza inigualable buscando nuestro on line casino online. Las primeras” “cuatro veces que realices un depósito podrás disfrutar de la super bonificación. Con más de multitude of juegos de los que puedes usar, muchos de ellos hechos por distintos y los mas recomendables desarrolladores de juegos de casino. La plataforma ofrece una amplia gama sobre juegos de gambling establishment, como tragaperras, juegos de mesa sumado a juegos con crupier en vivo, os quais se adaptan some sort of las preferencias para los jugadores. Bbrbet ofrece un bono de bienvenida, bonos de depósito, tiradas gratis, ofertas sobre cashback y premios de fidelidad.

De Reembolso – Bonos De Casino Mr Bet

Gracias a la software ideal para guias Android y IOS, con la la cual puedes jugar durante cualquier lugar donde lo desees, así como en el momento que prefieras. En Mr Bet podrás jugar bad thing descargar la aplicación, ya que nuestra tablado se adapta some sort of los dos dispositivos, durante lo que tendrás una experiencia más personalizada. En nuestro internet casino no podía faltar un equipo de atención ing cliente a disposición de nuestros usuarios.

Auditorías periódicas independientes verifican la integridad de sus sistemas de juego, garantizando el juego inocente y la claridad. La adhesión sobre BBRBET a estos protocolos reafirma the los usuarios durante su fiabilidad con compromiso de dar un entorno de juego seguro. Nuestro casino cuenta con mi extensa variedad sobre juegos de gambling establishment, como son mis populares juegos para blackjack, ruleta, holdem poker, bingo, que también puedes jugar sobre el casino sobre vivo. Además, si eres aficionado a new las apuestas deportivas, encontrarás en Mr Bet diferentes deportes para apostar, entre los que están béisbol, fútbol, basket y otros. Por último, hemos integrado” “las apuestas a juegos eGaming, donde podrás apostar en tus juegos favoritos, asi como Dota 2, Little league of Legends, TIMORE y torneos populares de esta categoría. Probablemente, te ryan tocado esos internet casinos que por cualquier razón no ofrecen formas fáciles de retiro y depósito que vayan de acuerdo a tu país.

Seguridad Y Fiabilidad

Encarna la esencia de BBRbet México, adaptándose al moda de vida del jugador moderno. El proceso para largarse una cuenta durante Bbrbet casino es muy sencillo sumado a bastante práctico, ahora que lo terminarás en apenas algunos minutos. Sigue estos pasos para registrarte y empezar a new gozar de lo mejor que tiene em virtude de ofrecerte. Además para los aspectos técnicos de seguridad, BBRBET también sigue una estricta regulación sumado a supervisión por part de las autoridades que conceden las licencias. Significa o qual un programa honrado puede haber sido marcado de forma errónea como malpensado por alguno de los antivirus utilizados durante el proceso. Hemos escaneado el archivador y las URLs asociadas con exista programa con más de 50 anti-virus y no hemos encontrado ninguna advertencia.

Esto fue el juego para casino en línea en su acertadamente momento, con desafíos cuidadosamente calibrados que te mantienen arriesgado. Los jugadores tienen la oportunidad de pagar sus depósitos y retiradas utilizando diferentes métodos para pago. Esto ha sido conveniente para muchas las partes, ya que los usuarios obtendrán varios canales para una gestión cómoda de sus economía, y el gambling establishment recibirá muchas más transacciones. Esta respuesta se puede avalar por sí sola cuando se lleva en cuenta todas las numerosas ventajas que ofrecemos como casino online. Un catálogo impresionante de juegos, de la strato de los mejores desarrolladores de la industria de juegos de on line casino.

¿qué Idiomas Están Disponibles Pra Los Jugadores Durante La Bbrbet Application?

Los torneos tienen un tiempo límite y algunos kid muy especiales por lo que conviene estar atentos the la sección especializada en la página o aplicación sobre Mr Bet. Nuestro casino es reciente y con espíritu fresco, en nuestros años de trabajo hemos conseguido elevados logros y seguiremos trabajando por llevar adelante de tu destreza la mejor sumado a más divertida, ya estamos bastante valla. Por otro reverso, también tenemos la aplicación para la cual puedas jugar a partir de cualquier sitio y en cualquier instante que decidas. Otros de los desarrolladores son Spigo, Betsoft, Nextgen, Red Gambling, Endorphina, Cryptologic, WorldMatch, Habanero, entre muchisimos otros. El obligación son apuestas para 40x y estará disponible dentro sobre 5 días después de que te registres. A influir de esto, hay estrategias que se pueden establecer durante el manejo para las apuestas, la cual con la práctica pueden mejorar sus posibilidades, principalmente sobre juegos como el Poker.” “[newline]Perfecto para jugadores casuales, BBRbet es la elección ideal total si tienes alone unos minutos libres como si os gustaria relajarte durante el período más largura.

Esto protege las informaciones personal y todas las transacciones financieras de acceso por part de terceros, garantía que cada transacción sea segura. Además, Mr Bet también cuenta con tu propia aplicación móvil, esto quiere decir que debe estar presente moderadores que contraen que estar atentos de la trampolín y de la atención al cliente de calidad. Por eso los juegos de casino, way depender del casualidad en mayor um menor medida, child impredecibles, lo la cual genera la emoción de muchos de nuestros jugadores sobre Mr Bet.

Importe Mínimo Y Máximo Delete Depósito

La combinación de dichos canales y funciones de asistencia garantiza que los usuarios de bbrbet puedan resolver sus inconveniencias con rapidez sumado a eficacia, mejorando tu experiencia general en la plataforma. BBRBET ofrece una amplia selección de juegos, desde emocionantes tragaperras hasta inmersivas experiencias con crupieres en vivo, garantizando alguma coisa para cada jugador. Desde su lanzamiento, la plataforma BBRBET ha experimentado un crecimiento constante y ha aumentado su popularidad entre mis jugadores de México. La constante incorporación de nuevos juegos y” “mejoras en el criados contribuyen a fascinar a un ancho público.

Desde el 2017 nos hemos expuesto a ofrecer experiencias increíbles y transparentes. Disponemos de conformidad para operar en tu país, así como de este cifrado de datos personales para guardar tu información que tiene total confidencialidad cuando hagas transacciones económicas en nuestro casino electronic. Entre” “las disciplinas deportivas más populares par jugadores mexicanos está el futbol (donde conlleva desde ligas a torneos regionales um mundiales), hocke y beisbol. El gambling establishment en línea Bbrbet incluye en su biblioteca juegos desarrollados por grandes companhias con buena reputación en el ramo.

Opciones De Jubilación Casino Mx

En tus artículos, Gustavo Torres presta especial atención al desarrollo de juego en México. Analiza los cambios legislativos, los nuevos proyectos de internet casinos y las tendencias de la industria de juego en el país. Un administrador es una companhia que desarrolla, actualiza y suministra juegos de azar the las plataformas sobre casino. Suelen producir un intermediario importante entre la trampolín de entretenimiento y los propios jugadores, ya que son los proveedores quienes sony ericsson aseguran de la cual todo el contenido que puedes mostrar funcione.

El personal de soporte está siempre de guardia, dispuesto a delimitar con prontitud cualquier duda o caso que pueda presentarse. Somos un on line casino que funciona en numerosos países que tiene regulaciones y licencias totalmente en especie, como evidencia que nuestros servicios child seguros y confiables. Al ser mi plataforma tan concurrida” “ademas de tantos juegos llevan que existir muchas problemas a mis que cualquier mexicano se podría verificar afectado mientras está pasando un acogedor momento en el propio casino. El estancia bono te de uma el 100% sobre lo depositado si bien esta vez hasta, pesos mexicanos.

Mr Gamble, Un Casino En Línea Seguro

Verás tu bono disponible dentro de 5 días después de registrarte y tiene un requisito de apuestas 40x. Percibirás los angeles misma calidad total si juegas directamente desde nuestro pagina web desde su teléfono inteligente tais como si descargas nuestra app para Google android o IOS. Sí, ya que cuenta con una licencia autorizada por Curaçao, sin embargo, no tiene este respaldo de una SEGOB, el cual sera el organismo oficial en México em virtude de regular los juegos online. Aunque esto no significa la cual sea ilegal, sí puedes correr este riesgo de quedarte un poco desprotegido ante posibles ataques o hackeos cibernéticos. En el casino Bbrbet se ofrecen diferentes tipos para bonificaciones, sin retención, te compartimos cuáles son las más populares.

BBRBET colabora con proveedores para juegos de special primer nivel para fiar una experiencia de juego diversa y de alta calidad. La siguiente listón muestra los principales proveedores de juegos y ejemplos para juegos populares que ofrecen en la plataforma de BBRBET. Los aficionados approach juego encontrarán en este sitio una amplia oferta de entretenimiento, desde tragaperras clásicas y para vídeo hasta juegos de mesa con novedades exclusivas. BBRBET se actualiza constantemente, ofreciendo nuevos juegos y manteniendo un interés de los usuarios a un alto nivel. Se ha ganado mi merecida reputación tais como uno de aquellas mas recomendables casinos en línea de México mil gracias a su criados confiable y some sort of la alta indole de su beneficio. El atractivo del sitio se ve reforzado por unas condiciones de intriga transparentes y unas bonificaciones favorables.

Atención Al Consumidor De Bbrbet

BBRbet sera el destino ideal para los entusiastas digitales y, disadvantage la aplicación para BBRbet, puedes necesitar esa emoción con ud donde quiera o qual vayas. Esto subraya una vez más la fiabilidad con popularidad de el casino, por lo que recomendamos some sort of los jugadores de México que utilicen sus servicios. En esta reseña, nuestros expertos te contarán todos los benefits y los contras de este online casino, así como los juegos más populares entre los usuarios y otros datos de interés. En resumen, aprovechando una fecha de publicación de esta restriccion, no caigas por inocente. Las apuestas en línea child una opción lawful, pero, si aquella es tu decisión personal, busca sitios regulados, con reglas claras y sistemas transparentes de cimiento. De lo contrario, inocente palomita, podrías ver tu dinero desparecer ante tus ojos.

Esto asegura transacciones financieras convenientes y seguras para todos los usuarios. El fundamento de criptodivisas diferencia especialmente ad modum trampolín de otros internet casinos, ya que ofrece anonimato y comisiones bajas. Con atención al cliente las 24 horas por medio de distintas canales, ofrecemos soluciones en tiempo récord y queremos destacar por llevarte dia a dia a las mas recomendables experiencias. Algunos de los proveedores de Mister Bet son de los más reconocidos y de los más gigantescos de los angeles industria proveyendo software program de alta importancia. Disfruta del computer software de desarrolladoras asi como Net Entertainment que se le conoce gracias a su magnífico trabajo para juegos tragaperras, juegos de mesa, tragamonedas progresivos, etc.

Temas Relacionadoscon Bbrbet Casino

“Conocida por su fiabilidad y su amplia selección de juegos, ofrece una expertise de juego inusual. Los jugadores disfrutan de una seguridad de primer jerarquia, diversas opciones de pago y un sólido servicio para atención al cliente. Explora una amplia gama de tragaperras, juegos de mesa y opciones de crupier en listo. Los que estan informados sobre de casinos on the internet México entienden lo difícil que es encontrar ese sitio en donde ght puedas divertir por horas y alcanzar dinero sin aburrirte. Contamos con mis proveedores de juegos más reconocidos, así como una suscripción seguridad para la cual no pares de divertirte.

Los bonos son la parte crucial para cualquier casino recente, ya que desempeñan un papel notable a la hora de atraer the nuevos usuarios the un coste parzialmente bajo para are generally plataforma. BBRBET fue una plataforma unificada creada como solución alternativa para mis jugadores de gambling establishment y los aficionados a las apuestas deportivas. Jugar es extremadamente sencillo, y el sistema lo permite hacerlo que tiene muy pocos pasos, dans le cas où bien pendiente de una verificación sumado a aprobación. El tema es que los jugadores deben possibilitar información personal lo que una copia sobre su documento de identidad -además, que incluye una selfie sosteniendo la identificación- y “un extracto bancario o factura sobre servicio público”.

¿por Qué Entretenerse En Mr Wager México?

Nuestro software en forma de talk presta una asistencia instantánea a los jugadores en en absoluto momento. No importa el día sumado a la hora, este equipo de fundamento te dará respuesta personalizada y al instante todos los días del año, las 24 horas, los 7 días de la hebdómada sin interrupciones. Más de 1000 juegos de este formato conservan la efigie de los juegos de casino físicos de hace hundred años, pero cuando hablamos de un casino online efectivo real debe acudir bonos que pudieran multiplicar tu fortuna. Aunque no nos engañemos, la conocimiento” “sobre ir a este establecimiento de juegos de azar sigue siendo necesaria. Estos son diseñados por los mejores proveedores y además cuentan con altos índices de pago pra aquellos jugadores durante México que buscan desde un riesgo mínimo hasta uno más elevado. Bbrbet casino es este casino online o qual tiene menos para un año de ser conocido durante la industria sobre juegos en línea.

Esto sera solo la apice del iceberg de lo que BBRbet Casino y BBRbet Casino Leader llevan para ofrecer durante el mercado para BBRbet México. Sumérgete en el planeta del casino en línea de BBRbet y descubre el nuevo reino de juegos digitales. Uno de los aspectos más atractivos para BBRbet Casino es su inclusividad, asegurando un campo de juego nivelado para todos. No necesitas habilidades especiales national insurance experiencia previa em virtude de disfrutar de mis juegos de BBRbet y la emoción que ofrecen. Todos tienen las mismas oportunidades de gozo, haciendo que una alegría del intriga de casino sea accesible para los dos. El casino destina a los jugadores un buen frugalidad en varias etapas, sin arriesgar prácticamente sus fondos.

Plataforma

Todos los usuarios registrados podrán utilizar mis fondos de bonificación para realizar apuestas, para lo que existe la alta probabilidad para ganar premios reales. Bbrbet garantiza o qual todos los transacciones estén protegidas mediante cifrado SSL y autenticación de dos factores (2FA) cuando proceda. Además, los métodos de pago asi como las criptomonedas ofrecen tecnología blockchain em virtude de mejorar la amparo. Los usuarios pueden estar seguros de que su estadía sobre ela plataforma BBRBET es segura. La” “trampolín utiliza tecnologías avanzadas de protección sobre datos, incluido este certificado SSL válido que cifra todos los datos transmitidos.

Este 1er bono de bienvenida te da una posibilidad de sumar el 150% para lo que depositas (hasta 3800 pesos mexicanos). Verás tu recibo disponible dentro para 5 días después de registrarte con tiene un requisito de apuestas 45x. Estés donde estés, queremos acompañarte sobre tu día a día y ofrecerte una experiencia descontraída asegurada con nuestros juegos para móvil en alta resolución. Un consejo si eres novato es que pruebes los juegos en su versión “Demo” con luego que en este momento estés familiarizado que incluye las reglas, sube de nivel some sort of las apuestas disadvantage dinero real.

Programas Gratis Afin De Mezclar Música Lo Que Un Dj

Esto puede hacer que los jugadores estén escépticos de la fiabilidad sobre este operador, por otra parte, este casino on the web ha probado ser seguro, atractivo sumado a funcional. Por otro lado, ofrece el registro muy rápido y conveniente em virtude de los nuevos jugadores. BBRBET opera perdio un estricto marco regulatorio, con mi licencia de la Autoridad de Placer Electrónico de Curaçao, lo que garantiza el cumplimiento de todas las normas internacionales para juego. La trampolín emplea cifrado SSL avanzado para proteger los datos para los usuarios con las transacciones financieras.

Además, BBRBET cuenta que tiene una versión móvil del sitio correctamente adaptada, que permite a los jugadores disfrutar de tus juegos favoritos durante cualquier momento sumado a lugar. La versión móvil se obligación fácilmente en todas dispositivos modernos, ofreciendo gráficos de calidad sumado a un rendimiento estable de los juegos. Los torneos child una excelente opción para jugar en Mr Bet casinos México por premios mayores a los habituales, en una competencia que conlleva a otros sobre nuestros jugadores, disputándose por los primeros lugares.

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