Aviator Azərbaycanda Pulsuz Mostbet Kazinosunda Oynayır

Azərbaycanda Mostbet Kazinosunda Aviator Oyunu”

Mostbet ARIZONA kazinosunda Aviator hətta rəsmi internet saytının əsas menyusunda yerləşdirilib.” “[newline]Ancaq Spribe-nin əlamətdar xüsusiyyətinə çevrilən Aviator idi. Bu “sürətli oyunun” əsas xüsusiyyəti qaydaların sadəliyi və əlçatanlığıdır. Belə bir interfeysə öyrəşməyə belə ehtiyac yoxdur – hər şey dərhal aydın və əlçatandır. Aviator, həm də pul qazanmaq üçün real fürsət təmin etdiyi üçün Mostbet ARIZONA kazinosunda ən populyar “sürətli oyunlardan” birinə çevrilib. Peşəkar oyunçular bu maşında fərqli prinsiplər və mərc strategiyalarından istifadə edirlər.”

Hesab yaratdıqdan sonra xidmətin bütün funksiyalarına giriş açacaqsınız və aviator oyunu haqqinda daha ətraflı danışa bilərik. Most bet aviator bütün məqamı ondan ibarətdir ki, yeni raundun əvvəlində qarşınızda bir təyyarə peyda olur və uçmağa başlayır. Əvvəldən təyyarənin uçuş hündürlüyü eksponent olaraq artacaq və əmsal kimi göstəriləcək.

Aviator Mostbet Niyə Bu Qədər Populyardır?

Bu, oyunu təcrübədən keçirməyin və onun necə işlədiyini anlamağın əla yoludur. Bəli, Aviator oyununu real pulu riskə atmadan oynamaq istəyənlər Mostbet-də Aviator oyununun demo versiyasını oynaya bilər. Spribe tərəfindən hazırlanmış Aviator, innovativ formatı ilə onlayn qumar oyunlarını tamamilə yeni səviyyəyə qaldırır.

Apple cihazından istifadə edirsinizsə, bu halda da endirmə prosesi təxminən eyni olacaq. Sadəcə Android əvəzinə iOS seçimini edib tətbiqi App Store-da endirmə prosesinə keçə bilərsiniz. Aviator bu vaxta qədərki ən yaxşı oyunlardan biridir.

Aviator Mostbet – Qeydiyyat Və Oyun Qaydaları

İnternetdə Crash game axtarmağı və gəliri artırmaq üçün siqnallar və xüsusi proqramlar satan şübhəli şəxslərə” “etibar etməyi qətiliklə tövsiyə etmirik. Bukmeker kontor dərhal ədalətli oynamaq istəməyən oyunçuları tapır və girişi bərpa etmək hüququ olmadan onları bloklayır. Həqiqi pulla oynamazdan əvvəl aviator demo mostbet cəhdini tövsiyə edirik. Bu rejim sizə virtual pulla oynamağa imkan verəcək. Demo rejimini aktivləşdirmək üçün sadəcə hesabınızdan çıxın və oyunu işə salın mostbet.

MostBet, Curacao lisenziyalı № 8048/JAZ altında Bizbon And. V. Aviator onlayn oyunu öz sadəliyini görə dünyanın hər yerindən olan oyunçular arasında sürətlə populyarlıq qazanıb. İstifadəçilərin getdikcə artan əmsallara mərc etmək imkanı olur ki, bu weil pul qazanmağın yaxşı yolu olduğu üçün çox cəlbedicidir. Ancaq digər bir çox kazino oyunları kimi bu tip onlayn əyləncə təhlükəlidir. Əgər mərcləriniz üçün Aviator oyununu seçmisinizsə, əmin ola bilərsiniz ki, yaxşı vaxt keçirəcəksiniz. Bu oyun çox sadədir, onu hətta yeni başlayanlar de uma anlaya bilər.

Əvvəlcə Demo Ilə Məşq Edə Bilərəm?

Mümkün olduqda bacardığınız qədər mərc etməlisiniz ki, qazanacağınız məbləği artıra biləsiniz. Mostbet Aviator oyun təcrübəsini daha da rahat və çeşidli etmək üçün öz istifadəçilərinə iki diqqətəlayiq funksiya təklif edir. Ekranın yuxarısında oyunçular əvvəlki raundların statistikasını görə biləcəklər. Mostbet Azərbaycan Mostbet Aviator oyununda 550 AZN- qədər 100% salamlama bonusu təklif edir. Bu o deməkdir ki, 550 AZN məbləğinə qədər hesabınıza qoyduğunuz pul qədər Mostbet sizə bonus verəcək. Ancaq qeyd etmək lazımdır ki, salamlama bonusu qeydiyyatdan keçdikdən sonra bir həftə ərzində etibarlıdır, bundan sonra isə bonusu ala bilməyəcəksiniz.

İstənilən vaxt uçuş dayandırıla bilər və mosbet aviator de uma əsas vəzifəniz raund başlamazdan əvvəl etdiyiniz mərcinizi uçuş bitməzdən əvvəl satmağa vaxt tapmaqdır. Yeri gəlmişkən, təyyarə istənilən vaxt dövrəni başa vura bilər. Bu, one 01-dən 5. 000-ə qədər nisbətdə baş verə bilər. Əgər siz mərcinizi serial advanced technology attachment bilmisinizsə, o zaman o, satışın edildiyi əmsalla hesablanacaq və etməmisinizsə, mərc məbləğini itirirsiniz. Mostbet-az90 Aviator Azerbaycan əsas qaydası ədalətli oynamaqdır.

Mostbet Aviator Demo

Oyunun raundları təsadüfi qaydada təyin olunur, mərclər hər raundda qəbul edilir. Əlavə olaraq çoxaldıcı oyun zamanı təsadüfi olaraq seçilir. Mostbet Aviator oynamaq üçün sadəcə istədiyiniz mərc məbləğini qeyd edib “Mərc et” düyməsinə basmaq kifayətdir.

Oyun sadəliyi və etibarlılığı sayəsində oyunçular arasında semblante bir zamanda məşhurlaşan xətti qəza mexanikası ətrafında qurulmuşdur. Bununla belə, Aviator özünəməxsus xüsusiyyətləri və alətləri ilə sizi oyuna cəlb edən bu cür slotlar dünyasında “ağ qarğa” dır. Aviator-da çarxlar, ödəniş xətləri və hətta simvollar yoxdur. Fikir olduqca sadədir – təyyarə 1x-dən başlayan və qeyri-müəyyən müddətə qədər yüksələ bilən artan əmsalla havaya qalxır. Bunu etsəniz, mərciniz təyyarənin əmsalı ilə vurulacaq, əks halda uduzacaqsınız.

Mostbet Aviator Yukle Online Oyun

Bütün bu pulları istənilən rahat şəkildə yatıra bilərsiniz. Unutmayın ki, bu virtual puldur və əsas hesaba çəkilə bilməz. Bu rejim oyunçuların Aviator azərbaycan-ın bütün xüsusiyyətlərini və sınaq strategiyalarını başa düşməsi üçün yaradılmışdır. Aviator. az saytında pul qazanmaq üçün daimi olaraq kompüter arxasında oturmaq lazım deyil, çünki bukmeker kontorunda Android və İOS üçün mobil proqram var. Mostbet aviator indir üçün saytın yuxarı menyusundakı əməliyyat sisteminizin təsviri olan düyməni sıxın.

Bunun mümkün olduğuna inana bilmirsinizsə, bu düyməyə diqqət yetirin. Demo rejimini yandırmaqla siz mostbet aviator istifadə oluna bilən 3 thousands virtual pul vahidi əldə edəcəksiniz. Əlbəttə ki, bu pul saxtadır və geri götürülə bilməz, lakin demo rejiminin başqa üstünlükləri də varifr?n. Birincisi, bu rejimin köməyi ilə siz mümkün itkilərdən narahat olmadan sadəcə oynaya və oyundan həzz ala bilərsiniz. İkincisi, strategiyaları sınamaq üçün bu rejimdən istifadə edə bilərsiniz. Özünüz düşünün – heç nə itirməyəcəksiniz, ancaq hər turda təyyarənin necə davrandığına dair böyük təcrübə və anlayış əldə edəcəksiniz.

Aviator Mostbet Kazino Oyunu

Açılan səhifədə siz android üçün apk yükləyə və sonrakı quraşdırma üçün işə sala bilərsiniz. Quraşdırma zamanı xəta baş verərsə, telefon parametrlərinə keçin və təhlükəsizlik menyusunda naməlum mənbələrdən tətbiqlərin quraşdırılmasına icazə verin. Tətbiqi iPhone-da quraşdırdığınız zaman siz App Store-a yönləndiriləcəksiniz, oradan onu cihazınızda hər hansı digər proqram kimi yükləyə bilərsiniz.

Mostbet AZ bukmeker kontorunun rəsmi saytını açmaq üçün bu səhifədəki güzgüdən istifadə edə bilərsiniz. Bundan sonra, düyməni vurmalısınız – bukmekerin saytında “qeydiyyat”, şəxsi məlumatları göstərməyiniz lazım olan məlumatları doldurmaq üçün bir forma açılacaq. 1 kliklə – sayt öz-özünə logon və parol yaradacaq ki, siz mostbet aviator giriş tamamlaya biləsiniz; E-poçt ünvanı vasitəsilə (əlavə olaraq, hesabınız üçün parol təyin etməlisiniz);

Aviator Oyunçularına Hansı Bonuslar Verilir?

“Əgər siz hələ Mostbet Aviator haqqında eşitməmisinizsə, o zaman bu materialı mütləq oxumalısınız. Bu oyun sizə çox səy göstərmədən böyük pul qazanmağa imkan verir. Aviator azerbaycan-ın yeni istifadəçiləri, eləcə də daimi oyunçular burada iş strategiyası və uğurlu qazanc üçün məsləhətlər tapacaqlar. Aviator spribe oyununun orijinal versiyası Mostbet bukmeker kontorunun saytındadır. Onu oynamaq üçün müştərinin bu saytda hesabı olmalıdır və indi biz sizə aviator qeydiyyat necə getdiyini söyləyəcəyik.

Beləliklə, siz pulunuzu təkcə mostbet aviator deyil, həm də bukmeker kontorunun internet saytındakı istənilən digər bölmədə istifadə edə biləcəksiniz. Nəzərə alın ki, hesabınızı ilk dəfə doldurduğunuz zaman siz 5550 AZN-ə qədər bonus əldə edəcəksiniz. Məhz bu məbləğ üçün ilk dəfə əmanət qoymaq tövsiyə olunur və sonra siz mostbet aviator uğurla oynaya biləcəyiniz asan pul əldə etməyə arxalana bilərsiniz. Mostbet aviator hər bir oyunçu üçün mövcud olan ən faydalı xüsusiyyətlərdən biri pulsuz oyundur.

Mostbet Az Idman Mərc Oyunları Və Kazino

Çoxlarına elə gələ bilər ki, almost all bet aviator da pul qazanmaq çətin olmayacaq. Bununla belə, heç bir şeyin belə asanlıqla gəlməyəcəyinə hazır olmalısınız. Ümid edirik ki, bu material sizin üçün faydalı oldu. Yuxarıdakı strategiyadan istifadə edin və” “biz əminik ki, siz çox yaxın gələcəkdə uğur qazanacaqsınız. Böyük kapitalla oynamağa başlamağınıza imkan verəcək artan ilk depozit bonusu əldə etmək üçün promo kodumuzla indi qeydiyyatdan keçmək üçün mostbet. com aviator gedin. Sadə qaydalar, turların sürətli hesablanması və böyük qələbələr və əla rəylər – bu oyunun artan populyarlığının açarıdır. Minimum mərc məbləği 0, 1 AZN-dir, lakin əksər ödəniş sistemlərində depozit üçün minimum məbləğ 12 AZN-dir.

Mostbet Azərbaycan bilir ki, mərclərini mobil cihazda etməyə üstünlük verən oyunçular çoxdur. Buna görə də həm Android, həm də iOS əməliyyat sistemləri üçün əla tətbiq yaradıb, elə burada de uma Aviator oyununu oynaya bilərsiniz. Bundan sonra tətbiqdə hesabınıza daxil olub həyəcanlı oyundan zövq ala bilərsiniz.

“aviator Mostbet Azərbaycan Rəsmi Saytında Yükləyin Və Oynayın

Qeydiyyat formasında tələb olunan məlumatları daxil edin Təyyarə havaya qaldıqda oyun başlayır, təyyarə yoxa çıxdıqda isə oyun başa çatır. Aviator Mostbet sizə uçuş zamanı qazanc əldə etmək imkanı verir. Uçuş başa çatmazdan əvvəl sövdələşmələr başa çatmalıdır.

Ekranın yuxarısında əvvəlki raundların əmsallarını göstərən sətri görmək olar. Sağda daha da yuxarıda isə oyunun təsviri olan tab, balansın göstərildiyi pəncərə, eləcə də səs və animasiya parametrləri olan açılan menyunu görmək olar. Sizin üçün rahat olan istənilən brauzerdə” “rəsmi Mostbet veb-saytını açın

Mostbet Oyunçuları Üçün Bonuslar

Bu oyun çox kazinolarda slot aparatlarından biri kimi xarakterizə olunsa da, bu oyun” “adi Mostbet slotlarından çox fərqlənir. Çox oyunçu real pul qazanmaq üçün bu fürsətdən artıq yararlanıb, bəziləri üçün isə bu hələ yenidir. Ancaq bu oyunun populyarlığı artmaqda davam edir, ona görə ki, Aviator oyununu oynamaq çox asandır. Aviator oyununda istifadə edə biləcəyiniz ilk taktika ikiqat mərc və avto mərc seçimləridir. Aviator sizə bir dəfəyə 2 mərc qoymaq imkanı verir, bu isə sizə imkan yaradır ki, oyun müddətindən maksimum yararlana biləsiniz.

İstifadəçi mərc etməlidir, sonra isə təyyara havaya qalxacaq. Ancaq təyyarə hər an düşə bilər, bu halda oyunçu mərci uduzacaq. Oyun tamamilə ədalətli və şəffafdır, çünki o təsadüfi nömrə yaradıcısına əsaslanır. Hər raund başlanmazdan əvvəl mexanizm təyyarənin çatacağı maksimum əmsalı əvvəlcədən təyin edir. Əlavə olaraq sağ bloku ekranın yuxarı sağ küncündəki x işarəsinə basmaqla yığcamlaşdıra bilərsiniz. Soldakı statistika blokunda tablar bütün tariflərə, yalnız sizin tariflərinizə və ən son yüksək ödənişlərə baxa bilərsiniz.

Mostbet Az Kazinosunda Aviator-da Pul Qazanmaq Mümkündürmü?”

Əgər mərc oynanıbsa və siz two əmsalı ilə qələbə qazanmısınızsa, o zaman bankın 1%-i ilə yeni raund başlayın. Mərc itirildikdə, məbləği 2 dəfə artırmaq lazımdır.” “[newline]Əgər növbəti raundda yenidən uğursuz olarsanız, mərc məbləğini bir daha ikiqat artırın. Beləliklə, 4% udmaq lazım olacaq, başqa bir itki halında isə 8%, 16% və s. Bu strategiyanın işlədiyini görmək üçün əvvəlki tirajlara baxa bilərsiniz. Burada uzun qısa zolaqların nadir olduğunu görəcəksiniz, ona görə də əminliklə sınaqdan keçirə və sonra oyun strategiyamızla real pul oyununa keçə bilərsiniz.

Tətbiqdə standart hesabın doldurulmasından və pul vəsaitlərinin çıxarılmasından başlayaraq aviator game mostbet kupon parametrləri ilə bitən bütün funksiyalar mövcud olacaq. Aviator kazino çoxlu pul gətirən ən məşhur strategiyalardan biri ənənəvi tutmadır. Əmsal 2-yə çatdıqda kupon parametrlərində avtomatik satışı təyin etməlisiniz. Bu parametrlərlə mərciniz two əmsala çatdıqda avtomatik olaraq satılacaq. Daha sonra ilk mərcinizdə bankınızın 1%-nə bərabər məbləğ mərc edin.

Aviator Oyununda Necə Qazanmalı?

Təyyarə havaya qalxmazdan dərhal əvvəl pul çıxarmaq üçün mümkün qədər uzun müddət gözləməyə vadar edən itkin düşmə qorxusu adlanır. Digər tərəfdən, bir az aşsanız, hər şeyi itirəcəksiniz. Müasir onlayn kazinolar minlərlə qumar əyləncəsini təklif edir – slotlar, ruletlər, kart və stolüstü oyunlar, poker otaqları, skretch lotereyaları və s. Lakin bəzi interaktiv maşınlar xüsusilə böyük müştəri auditoriyasının diqqətini cəlb edir.

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