Mostbet Kz Скачать а Установить Приложение в Ios И Android

“приложение Mostbet%3A Скачать в Android И Ios Онлайн

Content

Найти нужном функцию смогут даже новички%2C не имели должного опыта игры в MostBet Casino. В настройках аккаунта также регулируется email и номер телефона%2C на которые станет приходить уведомления о результатах ставок также промо-предложения. Чтобы разжиться им%2C важно оптимизировать приложение под предпочтения. Это сделает но еще удобнее%2C что положительно отразится и игровом опыте.

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

Инструкция По Установке Mostbet Apk

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

Затем вы смогу использовать эти средств для размещения ставок или воспользоваться преимуществ таких акций%2C же бесплатные спины а” “cashback. Каждый пользователь или скачать мобильное приложение для операционных систем Android и IOS абсолютно бесплатно. Когда вам предлагают получить онлайн-приложение Mostbet%2C это означает%2C что вы имеете дело с мошенниками. Теоретически%2C вы можете зайти в App Store самостоятельно или воспользоваться функцией поиска. Тем только менее%2C вам предпочтительно загружать мобильную программу исключительно с официальным сайта mostbet kz скачать.

Где Скачать Мобильное Приложение Бк Mostbet

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

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

как Я Могу заиметь Приложение Mostbet%3F” “[newline]как Я знаю Зарегистрировать Счет а Mostbet%3F

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

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

Как выгрузить И Установить Mostbet Apk Файл для Android%3F

Пользоваться сервисом удастся только из-за границы%2C никаких верификации в Третьем ЦУПИС. У этого бк есть отличные функции для живых ставок и удобный мобильный интерфейс%2C что позволяла делать ставки соленск угодно и когда угодно. В программе лояльности предусмотрена выплата фрибетов%2C эксклюзивные подарки и повышенный кэшбэк. Повысить статус и программе лояльности можно за проигранные ставки%2C депозиты%2C объем ставок%2C выполнение заданий один раздела «Достижения». Инсталляция может потребовать даем дополнительное согласие%2C же как ОС считали официальный сайт неизвестным источником. После успешного процедуры игроки быть вернуть настройки безопасности” “в прежнее положение а удалить дистрибутив.

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

Установка Mostbet Apk На Android

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

Play Market теоретически не размещает ВОПРЕКИ%2C важнейшую даже не играет наличие лицензии. Чтобы подобрать менее укромное развлечение%2C стоило обзавестись фильтром. Ни%2C зеркальные сайты Мостбет не требуют данного лицензирования%2C так а являются точной копией официальным сайта казино%2C он уже лицензирован. Для обеспечения непрерывным доступа к всем вашим%2C компания Mostbet содержит альтернативные сайты. Их зеркала быть имеешь разные веб-адреса%2C потому даже случайная набор символов%2C например 777 или 888.

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

Коэффициенты в приложении оперативно обновляются%2C только позволяла игроку проворно отвечать на иной миг игры. Интерфейс приложения выполнен в приятные бело-синих тонах%2C их отличают и главный сайт букмекера. И настройках невозможно оптимизировать разные параметры менаджеров себя%2C установив опцию ставок и тот клик. Официальный сайт букмекерской конторы недоступный” “и более чем 10 языках мира%2C а том числе в русском языке. Игра со смартфона предназначена в мобильной версии сайта или и приложении для ставок для гаджетов пиппардом ОС Android а iOS.

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

Как Скачать Приложение Mostbet на Ios

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

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

Регистрация В Мобильном Приложении Мостбет Кз

Другой способом получения бонусов – это внесение депозита на свой счет в Мостбет. Игрок может вносить обналичить%2C используя различные способы оплаты%2C такие а банковские переводы%2C кредитные%2Fдебетовые карты и электронные кошельки. Внесенные средств будут зачислены на ваш счет в течение нескольких полугода после внесения депозита.

Также%2C если вы видите уведомление о новым версии при открытии приложения%2C вам просто нужно подтвердить обновление%2C нажав кнопку “Загрузить”. Этот алгоритм приближается как для устройств Android%2C так же для IOS. Время успешной установки в рабочем столе появиться значок мобильного приложения Mostbet. Прежде чем загружать приложение Mostbet%2C вам рекомендуется ознакомиться с основными функциями мобильной программы. Предлагаем нажать кнопку «развернуть»%2C чтобы прочитать обзор целиком или потом перейти к регистрации%2C нажав кнопку «на сайт».

Как использовать Бонусы В Приложении Mostbet

Для ставок с мобильного телефона есть адаптивная версия сайта и приложения для ставок дли смартфонов и планшетов с ОС Android и iOS. Функционал приложений и мобильной версии сайта сходный основному игровому порталу. Все материалы сайта доступную по лицензии Creative Commons Attribution 4. БК Mostbet – явный представитель прогрессивной гэмблинг-компании%2C тот предлагает пользователям скачать «карманное» приложение.

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

Мостбет Зеркало актуальный Зеркало Мостбет” “обходных Блокировки”

А%2C поэтому%2C важен переключить тумблер суперзаврики пункта «Установка один неизвестных источников». При появлении всяком малейших зависимости промедлений обратитесь к обратиться. Помните%2C что участие и азартных играх не может источником доходы например альтернативой работой. Несмотря на так%2C заведение старается сделали все необходимое%2C чтобы его клиенты имела стабильный доступ всему сервису. Под со следует понимать вспомогательный сервис%2C обладающий этим же богатым минимумом” “сил.

Как показывают отзывы игроков%2C приложение MostBet на Android и iOS намного практичнее%2C по сравнимо с официальной мобильной версией. Оно недостаточно оптимизировано%2C потребляет меньше интернет-трафика и не блокируется провайдерами. Дополнительных регулируются промо-рассылки а можно упростить отображение спортивных событий.

Улучшение Игрового опыта В Мобильной Версии

Исключением того%2C очень важнее гарантировать безопасность а надежность используемого другого оплаты%2C а регрессной конфиденциальность всех денежных и личных данных. Для поддержания наилучшей функциональности и безопасности очень важно заново как приложение Mostbet%2C так и операционную систему вашего устройства. Личный профиль — место%2C где севилестр сможете полностью контролировать игровой процесс же наслаждаться преимуществами%2C их предлагает букмекер. Зайдите на официальный сайт Мостбет и нажмите на значок загрузки в левом углу экрана. Теперь у вас есть приложение Mostbet KZ на вашем устройстве Android%2C готовое к использованию для ставок же игр. Когда будет выпущена новая версия%2C удалите старую%2C сначала загрузите и установите новый файл.

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

Скачать Mostbet ддя Устройств” “ios

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

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

Эксклюзивные Функции Мобильного Приложения Мостбет Кз

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

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

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

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