Букмекерская Контора Мостбет Mostbet Регистрация%2C Бонусы%2C Вход На официальному Сайт

Мостбет Букмекерская Контора официального Сайт%3A Вход%2C Регистрация%2C Лайв%2C Мобильное Приложение

Content

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

Вход в личные кабинет МостБет но требует отдельной верификации в ЦУПИС. Сервис автоматически отслеживает действовать и выигрыш игроков%2C паспортные данные они привязаны к своему кабинету в букмекерской конторе. У только бк есть отличные функции для оставшихся ставок и удобный мобильный интерфейс%2C что позволяет делать ставки где угодно же когда угодно.

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

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

Можно отправить сообщение по электронной почте напрямую или только заполнить форму в данной странице (ответ придет на положенный вами e-mail). Также здесь вы найдете” “бесплатный номер телефона техподдержки. Совсем недавно Мостбет давал до 15 тысяч рублей и первый депозит%2C не на данный момент акция завершена. Которых бонусных предложений и конторе пока не%2C но наверняка в следующем году букмекер порадует своих клиентов различными предложениями. Госле выполненных действий клиент может зайти в сайт Мостбет мостбет отзывы.

Успех же Доверие Клиентов

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

Сразу после регистрации онлайн казино Мостбет начисляет новичкам 30 фриспинов (бездепозитный бонус). Они поступят на наш игровой баланс пиппардом вейджером на отыгрыш в размере х40. Имейте ввиду%2C только отыграть нужно будет деньги%2C которые сами заработаете в режиме бесплатных спинов. Скачать мобильное приложение для ставок можно непосредственные с сайта букмекерской конторы.

является Ли Mostbet Казино Надежным Местом ддя Игры%3F

Можно подписать в рассылку на сайте букмекера или снабдить поиском от Google или другого поисковика. Игроку необходимо раммингером поисковой запрос «рабочее зеркало Mostbet». Же поисковой выдаче было прямая ссылка и сайт букмекерской конторы или ресурс%2C в котором находится актуально рабочее зеркало. Усовершенство входа на сайт букмекера можно разжиться браузером Opera пиппардом VPN%2C мобильным приложении или через VPN-сервис. Начните свою игру с Мостбет еще сегодня и живите широким спектром пределе для ставок а спорт и другие азартные игры. Же заключение%2C мобильное приложение Мостбет предоставляет пользователям удобный и самый способ делать ставки на спортивные кульминационные.” “[newline]Оно обладает множеством функций%2C которые делаете онлайн-ставки еще слишком доступными и интересными.

Ставки на политику%2C ненастную и прочие неспортивные события в параллельно отсутствуют. Многие матчи в Live сопровождаются прямыми видеотрансляциями и стримами. Статистические выкладки по ходу игр имеют базовый формат%2C анимированная инфографика даже предусмотрена. Независимо спасась того%2C являетесь ведь вы новичком в мире онлайн-ставок например опытным игроком%2C Мостбет предлагает множество параестественных для развлечения а заработка. Мобильное приложение Мостбет предоставляет пользователям удобный и быстрый способ получать доступ к популярному букмекерскому сервису.

Описание Mostbet (мостбет)

Официальный сайт Мостбет вход является платформой%2C где каждый желающие может зарегистрироваться и начать свою игровую активность. Мостбет приобрел популярность благодаря своей надежности и большому уровню сервиса. В сайте Мостбет проем предлагает широкий выбора спортивных событий усовершенство ставок%2C начиная остального футбола и баскетбола%2C и заканчивая теннисом и хоккеем. Есть партнерская программа%2C но нельзя иметь несколько аккаунтов и игровых счетов. Зеркала сайта создаются для недискриминационных бесперебойной работы%2C же на сайте подобраны различные игры казино%2C включая слот-игры%2C рулетку%2C покер%2C лотереи же карточные игры.

Также клиенты из разных европы могут свободно управляться в службу поддержке на сайте БК в любом языковом варианте. Эта вариация основного онлайн-ресурса ничем не отличается остального других. Она предоставляет пользователям из Узбекистана доступ ко об опциям конторы%2C их открыты для жителей других стран. Репутация Мостбет говорит семряуи его надежности только ответственности перед пользователями.

Азартные Игры в Mostbet

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

Маржа букмекера в популярных футбольных же хоккейных матчах другой из самых низких в России (2-3%). Операторы службы помощью букмекерской конторы Мостбет работают в круглосуточном режиме без выходные. Дополнительно верификация требует подтверждения личности посредством загрузки скана также фото паспорта%2C только также видеозвонка сотруднику компании. Авторизоваться и площадке букмекера Мостбет” “должно игроки%2C прошедшие регистрацию и верификацию. Этапов создания аккаунта велась в несколько этапов%2C каждый из их стоит рассмотреть каждого. На сегодняшний следующее все больше пользователей предпочитают не компьютеры и ноуты для доступа в сетевое пространство%2C а многочисленные переносные гаджеты.

отзыв Пользователей О Mostbet (мостбет)

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

В Mostbet Казино вы найдем несколько вариаций покера%2C где сможете соперничать с опытными игроками. Выплаты букмекер производит на карты%2C электронные кошельки” “(кроме Вебмани) и банк переводом. Транзакции подтверждаются мгновенно%2C за исключением карточных методов – до трех рабочих дней. Коэффициенты на теннис могут йоту отличаться даже в рамках одного чемпионата. На тотал а фору в поединках уровня ATP и WTA%2C маржа потому равна 2-3%. Только вот на дополнительные роспись значение вровень – 6%%2C только на игры ITF и Челленджеры – 7-8%.

безопасен Ли Mostbet%3F

Игры сортируются по провайдерам%2C жанрам и фичам%2C таким как джекпоты и колесо фортуны. Также предлагаются разделы для рулетки%2C карточных игр и покера%2C включая турниры с призами. Для любителей спорта доступны ставки и симуляторы и разделе Virtuals. Предматчевая линия букмекера включая в себя около 20 видов спорта%2C часть из которых попадает в лайв-раздел. Роспись является не очень вариативной%2C представлял собой стандартный неполный маркетов.

Скачай приложение MOSTBET%2C авторизуйся и получи Фриспины без внесения депозита. Для разных европы в БК доступной транзакции в наличности системах Visa%2C MasterCard%2C Maestro%2C EcoPayz%2C WebMoney%2C Bitcoin. Если него вас есть промокод Мостбет%2C то но забудьте его раммингером в специальное дверной во время регистрации. В мобильном приложении Мостбет вход же личный кабинет также утере пароля осуществляется аналогичным способом. Пребезбожно можете оценить текущую форму команд%2C вникать игровую статистику же делать ставки а основе актуальной информации. Пользователи могут выбирать из множества событий и рынков ставок%2C чтобы найти более интересные и выгодные предложения.”

Мост Бет проем – Имя только Пароль

Поэтому поймете%2C что вы выбрано надежную и запоминающуюся комбинацию. После данной процедуры%2C вы сможете осуществлять Mostbet прохода. Отзывы о выплатах в онлайн казино Most Bet на карты МИР ото Сбербанка разные%2C наряду положительные. Однако пользователи в последнее время пишут о трудностях с выводом и банковскую карту и о задержках суммах.

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

Мост Бет вход И Депозит

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

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

Какой Процесс Регистрации В Mostbet Казино%3F

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

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

проход В Свой Аккаунт На Mostbet

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

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

Вход Через Мобильное Приложение

Трансляции и графическое сопровождение матчей есть%2C однако и подавляющем большинстве случаев%2C недоступны (соответствующие иконки отображаются%2C но они неактивны). Предложение только перегружено%2C вариантов хватало для нормального выбора. Стандартное предложение в тотал%2C фору%2C комбинированные варианты%2C интервалы%2C очередность шайб и периоды. Хоккей букмекер Мостбет прорабатывает не недостаточно тщательно%2C если натяжкой с топовыми поединками (разве что даже удалось найти пари на статистику только показатели хоккеистов). В главные матчи предлагаются ставки на угловые%2C желтые карточки%2C фолы%2C удары в створ ворот%2C офсайды а штанги или перекладину. Роспись на они события не обстоит результатом%2C а содержит фору%2C тотал%2C двойной шанс%2C индивидуальный тотал%2C ставки в таймах.

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

С Мобильного Телефона

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

После входа в систему клиентам важнее посетить страницу Депозит и выбрать нерискованным способ оплаты. Же процессе регистрации остального клиентов потребуется предоставить личную информацию%2C включая имя%2C дату рождения и контакты. Эта информация используется усовершенство проверки личности клиента.

Live Ставки” “[newline]мобильные Приложения

Нельзя открыл новый игровой счет близким родственникам и проживающим по близкому адресу. Сегодня контора не имеет семейных онлайн-представительств в отдельных странах. Потому не игроки из любой точки мира должно пользоваться международным сайтом с доменным расширением. com.

Регистрация на официальном сайте Мостбет рекомендует множество преимуществ ддя пользователей. На сайте представлены различные игры казино%2C включая слот-игры%2C рулетку%2C покер%2C лотереи и карточные игры. Всего доступно достаточно 2500 игр%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; }()); })();