1xbet Mobile Yukle 1xbet Apk As Well As App Android, Apple Iphone Ilə Idman Mərcləri Üçün Mobil Proqramlar 1xbet Azərbaycan Aze 1xbet Com”

1xbet Azərbaycan Onlayn Matçlar Bu Gün 1xbet İdman Yayımlarına Baxmaq İdman Üzrə Canlı Mərclər Aze 1xbet Com

futbol, ​​tennis və ya xokkey, eləcə də daha nadir idman növlərinə mərc edə bilərlər; Xəttlərini şaxələndirmək üçün bahisçilər qeyri-standart mərc formatlarından da istifadə edə bilərlər.

Bəziləri yeni kazinoda və ya holdem poker otağında ilk dəfə oynayarkən axtardığınızla eynidir, lakin bəziləri sadəcə ev oyunlarına xasdır – gəlin başlayaq! 1xBet proqramı dünyanın hər yerindən milyonlarla oyunçuya idman mərclərini mümkün qədər piel və dünyanın hər hansı bir yerindən mərc etməyə olanak verir! 1xBet App-i həm Android istifadəçiləri, həm də iOS cihaz sahibləri üçün yükləmək olar.

Bet Android-smartfonf Necə Yükləmək Olar?”

onun qumar saytının ziyarətçiləri üçün keçidini asanlaşdırır. Sonuncu, qeydiyyat zamanı göstərilən məlumatlarla müqayisə ediləcək şəxsi sənədlərin surətlərini göndərməli olacaq. Bu səbəbdən özünüz haqqında ən son məlumatı təqdim etmək çox vacibdir.

bilərsiniz. Qeydiyyat üçün eyni dərəcədə vacib bir tələb, kazinonun istənilən bölməsində real pul üçün mərc etmək imkanıdır.

Bukmeker Kontorunda Hesabı Necə Maliyyələşdirmək Olar?

Futbol, ​​voleybol, basketbol, ​​həndbol, golf, Amerika futbolu, xokkey, at sürmə və s. Futbol matçlarına bahis istifadəçilər arasında ən populyardır. 1XBet az oyunlarının başqa bir kateqoriyası kazino turnirləridir. İstifadəçilərin bu turnirdə iştirak etmək üçün yalnız 1XBet az qeydiyyatdan keçmələri lazımdır.

Oyunçular binqo biletləri və ahora binqo lövhələri kimi tanınan bir və ya daha çox binqo kartı alırlar. Oyun başlayanda 1xbet bingo maşını göstərilən” “diapazondan bir-bir nömrələr çəkməyə başlayır. Oyunçular maşın tərəfindən qeyd olunan nömrənin kartdakı nömrəyə uyğun olub olmadığını yoxlamaq üçün kartlarını yoxlayırlar https://1xbetcasinoz.com.

Bonus

” “bilərlər. Şrift ölçülərini şəxsi üstünlüklərə görə seçmək də asandır. 1xbet. com – da qeydiyyatdan keçmək bir neçə məqsədə xidmət edir. İlk növbədə,

Əgər onlar eynidirsə, kartlarını müvafiq olaraq qeyd edirlər. Oyunun məqsədi oyunçuların kartlarında müəyyən bir nümunəni (üfüqi sıra və ya diaqonal kimi) qeyd etmələri və ya müəyyən sayda rəqəmlər göstərmələridir. ” Asanlıqla oyunun qalibi olur və ödənilən mükafat adətən həmin oyun üçün 1xbet bingo kartlarının satışından əldə edilən pulun faizidir. ” Qaliblər arasında eyni sayda hədiyyələr bərabər bölünəcək və hamısı qalib olacaq. 1xbet slotunun ən maraqlı cəhətlərindən biri onun oynamaq çox asan olması və heç bir xüsusi təlim tələb etməməsidir. Oynaya biləcəyiniz minlərlə müxtəlif slot oyunu va, lakin hamısı eyni işləyir, lakin detallar fərqlidir.

«1xbet» Bukmeker Şirkəti – Idmana Onlayn Qoyulan Mərclər

1xBet Cell phone əla köməkçi olacaq, bildirişlər sayəsində siz vəziyyətə dərhal reaksiya verə və ən yaxşı əmsallar üzrə proqnoz verə biləcəksiniz!”

Çünki bu istifadəçilər bu proqramı APP SHOP vasitəsi ilə yükləyə və ya saytımızdakı linklərdən istifadə edə bilərlər. İstifadəçilər bu proqram üçün yükləmə linklərini bu saytın Telegram, Twitter və Instagram-dakı rəsmi səhifələrində əldə edə bilərlər. 1xbet indir iOS versiyasının digər proqramlar kimidir və əlavə əməliyyat tələb etmir.

Bahis Şirkətinin Lisenziyası

Döngələrin, sıraların və ödəniş xətlərinin sayı qazana biləcəyiniz yolların sayına təsir göstərir. Lakin bütün slotlar, əsasən, fırlanma və qalib kombinasiyaların formalaşdırılması ilə bağlıdır. Saytımızdakı istifadəçilər dapatkan ünvana daxil olmaq və sayta daxil olmaq üçün 1xbet-dən istifadə edə bilərlər. Əsas saytın təklif etdiyi ən son giriş URL-ləri saytımıza daxil edilmişdir ki, istifadəçilər heç bir problem olmadan asanlıqla daxil olub istifadə edə bilsinlər 1xbet indir.

İstifadəçilər qeyd bonusundan yalnız bir dəfə istifadə edə bilərlər. Bir çox added bonus almaq üçün birdən çox hesab yaradan istifadəçilər sayt tərəfindən müəyyən ediləcək və bloklanacaq. 1xbet azerbaycan” “elaqe nomresi üçün ən vacib səbəblər saytın etibarlılığı və təhlükəsizliyi, sayt xidmətləri, canlı sayt dəstəyi, balompié bahisləri və qumar oyunlarıdır. Bu sayt istifadəçilərə çox diqqət yetirir və istifadəçilər vasitəsilə çox populyarlaşmışdır.

⚽bukmeker Kompaniyasinda Hansi Hadisələrə “online” Olaraq Mərc Etmək Olar?

Yeni oyunçular üçün faydalı məsləhət, mərc etmək niyyətində olduqları bölmədəki kotirovkaları öyrənməkdir. Bunu etmək üçün, geliştiricinin təqdim etdiyi vasitələrdən istifadə edin. Siz xəttə keçdikdən və orada təmsil olunan idman növlərini öyrəndikdən sonra mərc

Sayta daxil olmaqda problemi olan istifadəçilər problemlərini həll etmək və istədikləri zaman mərc etmək üçün 1xbet mobil istifadə edə bilərlər. 1xbet mobile oyunlarda futbol mərclərinin bir çox üstünlükləri va. Bunlardan biri də bu verilişdə dünya futbol matçlarının canlı yayımlanmasıdır. İstifadəçilər sevdikləri futbol matçını izləyərkən canlı bahis edə bilərlər. Bu şəkildə oyunun vacib hadisələrindən sonra mərc oyunlarını dəyişdirə və qazanma şanslarını artıra bilərlər.

Live Mərclər

“BK 1xBet 2007-ci ildə təsis edilib və ötən müddət ərzində bütün dünyada bukmeker biznesinin liderlərindən birinə çevrilib. Hər bir oyunçu sevimli komandanın oyun nəticəsi üçün proqnozlar etməyi sevir. Öz biliklərini və etibarlı statistikalarını istifadə edərək, oyunçu proqnozları gəlirlərə çevirə bilər. Bu və ya digər hadisənin nəticəsinin ehtimalını asanlıqla uyğunlaşdıraraq, oyunçu öz proqnozunu tərtib edə və kuponu tərtib edə bilər. Bundan başqa, 1xBet saytında uğurlu kombinasiya tərtib edə bilərsiniz və öz kuponunuzu paylaşa bilərsiniz.

Bukmeker kontorunun fərqli xüsusiyyəti ondan ibarətdir ki, hər gün mərc edə biləcəyiniz bir neçə min hadisə mövcuddur. Oyunçular 1500 futbol mərc bazarından istədiyini seçə edə bilər, buna görə də mərclər olduqca dəyişkən

Bukmeker Kontorunun Müsbət Və Mənfi Cəhətləri

Promosyon kodları kazino saytında və partnyor portallarında axtarılmalıdır. Proqramla mərc

seçə və en este momento AppStore-a baş çəkə bilərsiniz. Quraşdırma fayllarını yüklədikdən sonra oyunçuların mövcud parametrlərə əlavə və dəyişikliklər etməyə ehtiyacı yoxdur. Tətbiqin quraşdırılması minimum vaxt tələb edir və tamamlandıqdan

Bukmeker Kontorunda Idman Mərclərinin Növləri

Oyunçunun saytın hansı versiyasından istifadə etməsindən asılı olmayaraq, şəxsi hesabın funksionallığı eyni qalır. Bukmeker kontoru sizin mərc edə biləcəyiniz idman növlərinin siyahısını daim genişləndirir. Oyunçular

Bu sayt yarandığı gündən bəri arzu olunan xidmətlər təqdim edərək onlayn mərc üçün ən yaxşı şəraiti təmin etmək üçün hər cür səy göstərdi. Android telefonlarından istifadə edənlər 1xbet azerbaycan yukle müxtəlif yollarla istifadə edə bilərlər. Saytımızdakı və ya saytdakı bağlantılar vasitəsilə istifadə edə bilərlər. İstifadəçilər bu proqramı yükləmək üçün digər saytların linklərindən də istifadə edə bilərlər, lakin yükləmək üçün saxta linklərdən istifadə etməməyə diqqət yetirin. Bu yaxınlarda yeni oyun mağazası qaydalarına görə 1xbet azerbaycan yukle bu şəkildə mümkün deyil.

Oyun Nəticələri

Bəzi bölgələrdə istifadəçilərin giriş problemi onda bilər və bu halda istifadəçilər 1xbet vpn ilə bu problemi həll edə bilərlər. İstifadəçilər üçün bu problem daimi olaraq həll edilmir və bir müddət vpn istifadə etdikdən sonra yenidən trouble yaranır. İşçilər bir sonraki a?amada 1xbet vpn ilə daxil olmalı, məsələlərə mərc etməli və onlayn mərclər etməlidirlər.

bukmeker kontoru” “reward məbləğini 100 ABŞ dolları məbləğində müəyyən edir ki, bu da hesabı 100 ABŞ dollarına (depozit təşviqi şəklində 100 faiz) doldurarkən əldə edilə bilər.

Bet-də Bonuslardan Necə Düzgün Istifadə Etmək Olar?

üçün edilə bilən proqnozlar oyunçular üçün əla seçim olaraq qalır. Proqnoz tərtib edərkən bir sıra parametrlər nəzərə alınmalıdır. Oyunçuların komandaların hansı formada olması barədə təsəvvürləri olmalıdır. Turnirin

Bukmeker kontorları daim bir-biri ilə rəqabət aparır ki, bu da əmsalların ölçüsünə müsbət təsir göstərir. Gözlənildiyi” “kimi, futbol matçları oyunçuları ən sərfəli əmsallarla

Bet-də Mərc Etmək Üçün Məşhur Idman Növləri

edə bilərsiniz. Maraqlı bir matç tapıb siçan ilə üzərinə vurduğunuz zaman bu hadisə üçün təklif olunan bütün mərcləri görə biləcəksiniz.

müxtəlif üsullarla yayına biləcəyiniz blokadaya hazır olmalısınız. 1 xbet Azerbaycan rəsmi dildə ver`siyası, həmçinin manatla hesab açmaq imkanı var. Sırada siz milli futbol çempionatı və ya Çempionlar Liqası çərçivəsində baş tutan matçlar de uma daxil olmaqla müxtəlif idman tədbirlərini tapa bilərsiniz.

Push Bildiriş Sizi Xəbərdarlıq Edəcək

Bu sayt çox etibarlı bir curacao bahis lisenziyasına malikdir. Bu lisenziyanı istifadə edərək, bu sayt istifadəçilərin bu saytda asanlıqla işləməsini təmin etdi. 1XBET ARIZONA poker turnirlərində, dilerin yanında günün xəbərlərini göstərən bir televizor var. Bu sayədə istifadəçilər oyunun canlı oynandığından və heç bir qanun pozuntusu ehtimalından əmin onda bilməzlər.

Bu dəstək 130 fərqli dildə sərbəst danışır və istifadəçilərin problemlərinə twenty four saat cavab verir. Güclü dəstək komandasının olması iştirakçıların bu saytda özlərini təhlükəsiz hiss etməsinə səbəb olub və hər gün daha çox istifadəçi bu saytda qeydiyyatdan keçib. 1xbet canlı dəstəyi Instagram, Twitter və Telegram virtual səhifələrində də aktivdir və istifadəçiləri ən son müsabiqə xəbərləri ilə tanış edir.

Total Üzrə Mərclər

1-2 qol vurulduqda, mərc itirilir, three or more və da artıq olduqda qazanır. Yalnız bukmeker xəttində göstərilənlə müqayisədə daha arizona qol vurulduqda ”daha az total” balompié üzrə mərc qalib gəlir. 1xbet Arizona onlayn mərc oyunları sayti 2012-ci ildə Rusiyada fəaliyyətə başlayıb və istifadəçilərə balompié və kazino oyunları sahəsində xidmətlər göstərir.

sonra proqramı işə salmaq üçün iş masasında qısa yol yaranır. AppStore qumar siyasəti daha liberaldır, ona görə də qumarbazların proqramı yükləmək üçün saytdan

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