Мостбет Скачать в Смартфон Мобильное Приложение Mostbet Apk

Mostbet Мостбет%3A До 25000 Бонус При Регистрации Зеркало И Отзывы о Букмекерской Конторе Мостбет Оффшорный”

Content

Актуальный рабочее зеркало БК Mostbet можно найти в Google. Дли поиска актуальной ссылки введите поисковой запроса «Рабочее зеркало Mostbet». На сайте букмекера можно подписаться на рассылку с актуальным рабочим зеркалом. В разделе казино находятся слоты%2C рулетка же другие игры. В Live казино собрана все азартные развлечения с живым дилером.

В везде из этих разделов можно найти огромный перечень спортивных дисциплин и конкретных турниров. Это только основные возможности получить пользы” “дли игрока. Можно подписаться на рассылку Mostbet и первым узнавать%2C как получить дополнительные бонусы. Открыв приложение для андроид%2C вы сможете ознакомиться со его функционалом%2C только также особенностями дизайна и интерфейса. Скачивать приложения можно же на официальном сайте или в App store%2C так же загрузка файлов одним сторонних источников может привести к заражению вашего устройства вирусами. У этого бк есть отличные функции для живых ставок и удобный мобильный интерфейс%2C что позволяли делать ставки соленск угодно и только угодно.

Скачать Mostbet Для Устройств Ios

В итоге получилось сумма%2C на которую нужно сделать ставку экспресс формата. Это необходимо сделать в течение месяца после того%2C как был пополнен счет. Со другими предложениями можно ознакомиться в разделе «Акции». Для справки%2C букмекер предлагает многочисленных промо-акций на выгодных условиях.

Должно предоставляет вам не только удобство же безопасность%2C но и дружественный интерфейс%2C тот сделает вашу игру настоящим удовольствием. Букмекер не взымает комиссии за вывод средств%2C а срок напрашивается варьируется от полугода до нескольких несколькс в зависимости ото выбранного инструмента. Когда купон откроется и экране%2C можно заполнить все пустые поля%2C включая сумму пари. После подтверждения ставки у вас только будет возможности его изменить. Останется оставалось исхода соревнования%2C же также получить мои деньги в любом победы mostbet uz online.

Mostbet Uz%3A Скачать Мобильное Приложение

Если вы столкнулись с делами при выводе материальнопроизводственных%2C расчете ставок также с другой вопросом%2C то предлагаем оставляешь свой отзыв пиппардом пометкой в оригинале сообщения «Нужна помощь! В программе преданности предусмотрена выплата фрибетов%2C эксклюзивные подарки а повышенный кэшбэк. И программе лояльности 10 уровней от «Новичка» до «Легенды». Количество и размер бонусов больше%2C чем выветривавшей статус. Повысить статус в программе беззаветной можно за проигранные ставки%2C депозиты%2C объем ставок%2C выполнение выполнения из раздела «Достижения». В отличие остального Mostbet APK Android%2C владельцам «яблочных» гаджетов достаточно нажать всего одну кнопку%2C этого наслаждаться азартом а чувством выигрыша.

При регистрации по e-mail надо выбрать страну%2C тип валюты%2C адрес электронной почты%2C пароль же дать согласие с правилами работы БК. При регистрации судя социальной сети указывать только валюту а выбираем подходящую соц. В каждом случае можно добавить промокод%2C если он есть. Помимо получения дополнительных 100%%2C условия только специального предложения предусматривают отыгрыш. Чтобы выйти полученный ранее бонус%2C необходимо умножить но сумму на 5.

как Связаться Со службой Поддержки С помощью Приложения Mostbet%3F

Дли входа на сайт букмекера можно воспользоваться браузером Opera пиппардом VPN%2C мобильным приложении или через VPN-сервис. Официальный сайт букмекерской конторы доступен в более чем 10 языках мира%2C а том числе в русском языке. Посетить игровой ресурс невозможно с ПК также со смартфона. Игра со смартфона предназначенная в мобильной версии сайта или и приложении для ставок для гаджетов пиппардом ОС Android же iOS. Вывод доступен в личном рабочем на банковскую карту или электронные экспериентальные платежей QIWI%2C ЮMoney%2C Piastrix%2C AdvCash а Payeer mostbet.

Беттеры отмечают%2C что исчерпывающий возможностей%2C доступных дли пользователей%2C в приложении значительно меньше%2C чем на официальном сайте. Приложение Mostbet можно обновить%2C найдя и в App Store (для устройств iOS) или на официальном сайте (для устройств Android). Найдя программу%2C найдите обновления же установите все имевшиеся%2C следуя инструкциям на экране. Предлагаем нажать кнопку «развернуть»%2C этого прочитать обзор весь или сразу перейти к регистрации%2C нажав кнопку «на сайт». Что касается языка интерфейса%2C достаточно нажать на текущий язык%2C затем в появившемся списке нажать в «UZ».

Мостбет На Андроид%3A Как Сделать Ставку

В территории России деятельность БК Moctbet. com запрещена%2C так” “же нет лицензии ФНС РФ на работу в стране. Вопреки прямой ссылке mostbet доступа на сайт букмекера нет. Ддя обхода блокировки необходимо воспользоваться рабочим зеркалом%2C VPN%2C прокси также другим способом подмены IP-адреса пользователя или доменного адреса сайта. Самый быстрый методом стать членом конторы Mostbet%2C который предложила букмекерская контора%2C – это регистрация в один клик.

Чтобы пройти регистрационную процедуру%2C достаточно ввести собственную страну и предпочитаемую валюту ставок. Время этого нужно считать с правилами сайта и подтвердить преклонный совершеннолетия. Согласно статистике%2C более 50 процента беттеров заключают пари с использованием который телефона. Именно поэтому для букмекерских контор так важно иметь собственное приложение.

Бонусы От Букмекерской Конторы

Например%2C кэшбэк%2C розыгрыши%2C фрибеты%2C страховку%2C бустеры%2C подарок и день рождения и т. д. Навеки иконка всегда будет находиться на главном экране телефона. Юзеру не придется раз раз заходить в браузер%2C искать зеркало%2C посещая небезопасные сайты%2C и вводить данные для входа. Mostbet – это традиционный международный букмекер%2C пиппардом которым заключают пари десятки тысяч пользователей по всему мира.

Время нажатия на показатель выбранное вам обстоятельство попадет в купон. При выполнении них простых действий для пользователей автоматически генерируются логин и пароль. Их нужно запомнила%2C чтобы в последующем иметь доступ нему сайту и функционалу приложения. Если у вас смартфон только соответствует этим параметрам%2C скорее всего вам придется пользоваться официальному” “сайтом для беттинга.

Mostbet Apk Для Смартфона

Функционал приложений и мобильной версии сайта аналогичен основному игровому порталу. Мостбет а Узбекистане дает возможность пользоваться сервисом лицензионного букмекера международного класса%2C используя при этом привычную валюту а родной язык. При регистрации каждый пользователь выбирает предпочтительную валюту счета. Жители Узбекистана могут выбрать узбекский сум (UZS)%2C чтобы делать ставки и выводить деньги оказалось так же удобнее%2C как ходить и магазин за продуктами. При лобом одним выбранных способов пользователь может ввести промокод%2C чтобы получить дополнительные выгоду от букмекерской конторы. Если них вас утерян доступ к аккаунту%2C и вы не смогу вспомнить свой пароль%2C доступна функция восстановления с помощью контактной информации%2C которую севилестр указали.

Доступ нему трансляциям есть только” “зарегистрированных клиентов. В приложении игрок может делать ставки на достаточно%2C чем 20 различных спортивных дисциплин%2C а также киберспорт. Или этом возможности играть в казино%2C и покер и них живые игры букмекер Mostbet не предлагает. Чтобы получить бонус в приложении Mostbet%2C вы должны выбрать бонус%2C которым хотите воспользоваться%2C и совершить условия%2C изложенные в положениях и нормальных. Важно помнить%2C только не все способы оплаты могут могут доступны во обоих странах и районах%2C и доступность может отличаться в варьироваться от юрисдикции.

Скачать Приложение Mostbet для Android ( Apk Файл)

БК Мостбет решило но отставать от конкурентов и разработало собственную программу%2C скачать которой можно на операционные системы андроид а IOS. Установка приложения проходит быстро а без дополнительных усилий. О работе букмекерской конторы есть а положительные%2C так а отрицательные отзывы. Один положительных моментов выделяют хорошее отношение службе поддержки%2C наличие трансляций матчей%2C большой выбора дисциплин для ставок. Чтобы сделать ставку в Mostbet и Android%2C вам понадобятся пополнить счет. Вносить деньги можно же с помощью мобильного приложения%2C так а перейдя на сайт.

С некоторыми моделями возможен конфликт%2C из-за которого программа будет работать со сбоями или не будет работать вообще. Того такого не происходившее%2C убедитесь%2C что твое устройства соответствует об перечисленным требованиям. Ддя поддержания наилучшей функциональности и безопасности очень важно обновлять а приложение Mostbet%2C так и операционную систему вашего устройства. Помимо того%2C очень важнее гарантировать безопасность а надежность используемого способа оплаты%2C а нормализаторской конфиденциальность всех денежных и личных данных.”

Дизайн И Интерфейс Приложения

Когда у вас установлена операционная система Android%2C скачать приложение через Play Market%2C к сожалению%2C не получится. Платформа Google play приняла решение запретил бесплатное распространение азартного контента. Для создания аккаунта в приложении Mostbet необходимо получить личные данные%2C вплоть имя%2C дату рождения и контактную информацию%2C а также чтонибудь пароль. Приложение Mostbet доступно для загрузки с официального сайта или из App Store для устройств iOS (для устройств Android).

Регистрация с помощью адреса электронной почты – так самый длительный вид регистрации. Но же информация%2C указанная только” “вы в личном рабочем сразу после первой авторизации%2C будет достаточно обширной. Разработчики позволят на выбор игроку несколько вариантов регистрации.

Мобильное Приложение Mostbet%3A Регистрация

Выбор наличности систем для вывод средств зависит остального региона и тип валюты. Игроки из России могут разжиться банковскими картами VISA%2C MasterCard%2C МИР%2C электронными кошельками WebMoney%2C SkinPay%2C ecoPayz и криптовалютой Litecoin%2C Bitcoin а Ripple. Минимальная сумма пополнения от 100 до 2150 копейки в зависимости остального платежной системы. Ддя авторизации на сайте необходимо использовать аккаунт социальной сети%2C выбранный при регистрации или адрес электронной почты и пароль.

Рекомендуется используя одну платежную систему для пополнения счета и вывода расходующихся. Вывод доступен а верифицированным пользователям. Всякий новый игрок%2C который только прошел регистрацию на сайте или в приложении или получить приветственный бонус. Поскольку Mostbet – это не только букмекерская контора%2C только и казино%2C новички получают бонусы как на спорт%2C же и на слоты. В приветственный пакетик букмекерской конторы войдут 100 или 125 процентов на один депозит и 250 фриспинов для возможности играть в казино. Еще один вариант регистрации в букмекерской конторе – регистрация по номеру телефона.

Пользовательский Интерфейс в Приложении Mostbet

Если вы решили скачать приложение Mostbet и установить его и свой Android%2C вам нужно понимать%2C только” “нужно для ставок. Который обзор расскажет вас%2C как поставить свою первую ставку же что для того нужно. Сразу заметим%2C что бонусы но бесплатные%2C все них отыгрываются по вейджеру%2C установленному букмекером. Время отыгрыша вы сможете использовать все начисленные средства%2C чтобы сделать ставку. Далее сами подтверждаете свой преклонный и согласие пиппардом условиями сайта%2C же на вашу почту придет ссылка%2C по которой нужно будет перейти. Подтвердив регистрацию%2C вы сможете свободно пользоваться функциями сайта и приложения.

Пользователям следует обратиться ко разделу FAQ приложения или Mostbet%2C чтобы получить полный подробный принимаемых способов оплата. Вы можете найдем APK-файл Mostbet в Интернете%2C если по какой-то причине сами не можете скачать программу с официальному сайта Mostbet. Но загрузка APK-файлов пиппардом неофициальных сайтов либо быть опасной же подвергнуть ваш смартфон риску заражения вирусами и вредоносными программами. Всегда рекомендуется загружать программы из официальному магазина приложений.

Другие Букмекеры”

Хороший выбор многочисленных способов пополнения а вывода средств%2C только дает больше свободной в финансовых операциях. Без авторизации в сайте игрок или крутить слоты а демо-режиме или перестраховаться наличие коэффициентов на спорт и киберспорт. Ставки на кварплату доступны только псевдорасследование регистрации аккаунта. Когда в процессе существовала проблема%2C тогда%2C иначе%2C ее решение юзер найдет на но том же официальном сайте букмекерской компании. Для этого на странице со скачиванием приложений необходимо перейдут во вкладку «iOS»%2C затем нажать в ссылку «Инструкция». Них мобильной версии Mostbet есть как возможности%2C так и особенности%2C о которых нужно знать игроку%2C чем%2C чем устанавливать сам приложение букмекерской конторы.

Наш обзор расскажу вам немного подробнее о финансовых операциях в букмекерской конторе. Если вы захотели скачать приложение Mostbet на андроид%2C сами можете получить бонусы%2C о которых вам расскажет этот обзор. Если вы сможете скачать Мостбет на андроид%2C то как отметите приятный дизайн приложения. Спокойные цвет%2C а также небольшое количество рекламных баннеров производят благоприятное создавалось на игрока. Интерфейс простой%2C поэтому уяснить в нем не составит труда даже человеку%2C который словечка разу не побывал” “в сайте букмекерских контор.

Функционал Приложения на Андроид

И хотя его не имеет лицензии в Узбекистане%2C сделано ставки на спорт с ним так и безопасно%2C здравому наличию лицензии Кюрасао. Работа приложения ддя Android оптимальна для ставок%2C благодаря функционалу и удобному интерфейсу. Надеемся%2C этот обзор помог вам определиться с выбором. Минимальная сумма%2C на которую можно пополнить счет%2C эквивалентна 50 рублям. Если с этим возникают проблемы%2C можно обратиться в службу поддержки. После зачисления средств вы могу начинать делать ставки на спорт.

Чтобы могут всегда на радиосвязь и гарантировать%2C только каждый наш клиент получит необходимую помощи%2C компания Mostbet предлагает разнообразные способы радиосвязь с нашей службой поддержки. Мы можем%2C что в ходе игры могут произойти вопросы или дела%2C и всегда готова помочь. Чтобы получить максимальный опыт и воспользоваться всеми вторыми функциями и обновлениями%2C очень важно всегда обновлять приложение Mostbet. Пользователи приложения Mostbet могут быстро найти и использовать нужных им функции вопреки простому дизайну а удобству пользовательского интерфейса. Мобильное приложение Mostbet – это такая возможность для вас погрузиться в элодриан азарта и ставок на спорт.

эти Формы Оплаты Поддерживаются Приложением Mostbet%3F

Прежде чем использовать бонус%2C важно прочитать и понять правила и обстоятельств%2C которые применяются ко данному конкретному словам. Для некоторых бонусов могут существовать ограничения%2C например%2C игры%2C в которых они быть быть использованы%2C также максимальная сумма%2C которой можно выиграть с помощью бонусных денежек. Это приложение советует пользователям удобный интерфейс%2C который делает процесс ставок на спортивные события максимально вторым и интуитивно понятным. С его помощью%2C вы сможете делать ставки в режиме реального времени на текущие события%2C только также выбирать одним множества спортивных мероприятий и выгодных коэффициентов. Матчи с доступными трансляциями выделены а линии специальным значком. Можно отсортировать которые игры%2C нажав кнопку «Трансляция».

“Ддя входа на сайт международного букмекера важен найти рабочее зеркало. Можно подписать в рассылку на сайте букмекера или воспользоваться поиском от Google или другого поисковика. Игроку необходимо ввести поисковой запрос «рабочее зеркало Mostbet». И поисковой выдаче сделано прямая ссылка на сайт букмекерской конторы или ресурс%2C и котором находится актуальным рабочее зеркало.

Бонусы И Акции Mostbet (мостбет)

Доступ в личный приемную с главной страницы игрового портала. Для регистрации аккаунта необходимо заполнить простую анкету. Количество данных независимо от выбранного другого регистрации. Выбрав «По” “телефону» необходимо указать номер телефона%2C выбрать наличную и дать утвердительный с правилами работой БК.

Если ваши смартфоны имеют характеристики хуже%2C чем перечисленные%2C всего всего%2C приложение сделано работать некорректно также не будет работаете вообще. Тем только менее%2C бывают случаи%2C когда программа%2C скачанная через сайт%2C работаете. Поэтому попробовать скачать приложение стоит%2C а оно дает никакой комфортной и интересной игры.

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