Mostbet Giriş: Çevrimiçi Spor Bahisleri Ve On Line Casino 9, 000’ye Kadar Bonus

Mostbet Online Casino Türkiye ️ Resmi Net Sitesi Bonus 2300 Tl + Two Hundred And Fifty Fs

Piyangolar, çevrimiçi bahislerinizden ekstra ödüller kazanmanın bir başka harika yoludur. Mostbet’te Powerball ve Super Millions gibi çeşitli piyango oyunları arasından seçim yapabilirsiniz. Bu piyangolarla, potansiyel olarak bazı büyük ödüller kazanabilir ve biraz ekstra para kazanabileceksiniz. Mostbet indir Android os için mobil uygulama yalnızca bahisçi ofisinin web sitesinden – resmi veya mobil olarak yapılabilir. Play Market’te, Google’ın kumarla ilgili uygulamaların oraya yerleştirilmesine izin vermemesi nedeniyle program yoktur. Ancak Mostbet Android os uygulamasını mobil siteden ücretsiz ve birkaç tıklamayla indirmede sorun yoktur.

Sitenin üyelik ve giriş yapma kısımları sobre üstte yer alırken, hemen altında bahis ve casino bölümleri yer almaktadır. Mostbet Türkiye indir bahisçi ofisinde mobil uygulama resmi veya mobil siteden indirilebilir. Özel bölümde iOS empieza Android için uygulamalara bağlantılar vardır, ancak programın tasarımı ve işlevselliği neredeyse aynı olsa da kurulum için kendi özelliklerine sahiptirler.

En İyi̇ Mostbet Oyunlari

Şirket herhangi bir ciddi kısıtlama olmaksızın dünyanın her yerinden bahisçileri kabul etmekte. Ek olarak kullanıcılar finansal işlemleri gerçekleştirme kolaylığı için mevcut birkaç para birimi arasından seçim yapabilmekte. Mostbet, güncel vardagskl?der ve maç durumuna göre sürekli güncellenen oranlarla Türk müşterilerine çeşitli spor dallarına canlı bahis yapma şansı sunuyor. Mostbet’in canlı bahis bölümü, uygun oranları empieza kullanıcı dostu arayüzü ile Türkiye’deki spor bahisçileri için popüler bir seçimdir. Bu nedenle, şu özel Most bet Türkiye bahis şirketinin yeni ziyaretçileri için” “ilk para yatırma de uma anında %100 sunduğu promosyonları alma iyi fırsatı hediye vardır mostbet.

Bonusları ile farklı bir hava veren, çeşitli dönemlerdeki promosyonları ile üyelerini mutlu eden Mostbet ayrıca kullanıcı dostu bir arayüze sahip. Sitenin bahis empieza casino kısmındaki oyunlarının çokluğu dikkat çekici. Ayrıca spor bahislerinde farklı seçenekler sunmakla birlikte canlı maç izleme olanağı vermekte.

Mostbet Casino

Amerikan futbolu hayranıysanız, Mostbet bahislerinizi yapmak için mükemmel bir yer olacaktır. Bunlar Mostbet tarafından sunulan avantajlardan sadece bazılarıdır, bu nedenle bahislerinizi oynarken mevcut tüm özelliklerden yararlandığınızdan emin olun. Bonusu, her biri için 1. 40’dan başlayan oranlarla en az 3 etkinlik için ekspres ile geri kazanmanız gerekir. Mostbet tüm önemli ödeme yöntemlerini kabul eder – banka kartları, e-cüzdanlar empieza kripto para birimi. Aşağıdaki tabloda, Most bet çevrimiçi bahis için mevcut olan sporları, ligleri empieza turnuvaları bulabilirsiniz. Bahis yaptıktan sonra maç başlamadan ya weil maç sırasında bahsini bozdurabileceğiniz bu özellik Mostbet’te.

Herhangi bir şüpheyi ortadan kaldırmak için, Mostbet casino ve bahis şirketinin hizmetlerini uluslararası tipte bir lisans — Curaçao temelinde sunduğunu etkinlik belirtmekte fayda var. Mostbet Destek ekibi, 7/24 ulaşılabilirliği empieza profesyonel çözüm yöntemleri ile dikkat çekmektedir. Kullanıcıların hesap güvenliği, para yatırma ve para çekme işlemleri, bonus kullanımı ve daha pek çok konuda merak ettikleri sorulara anında ve açıklayıcı yanıtlar sağlamaktadırlar. Most bet mükemmel bir spor kitabının yanı sıra popüler çevrimiçi casino oyunları da sunar.

Mostbet Tr Casino’sunda Promosyon Kodları

Öte yandan, online casino ve spor bahisleri tutkunları için Mostbet, sunduğu kaliteli hizmet sayesinde oldukça popüler bir platformdur. Herkesin zevkine uygun birçok spor dalında bahis yapma imkanı bulunurken, casino kısmında slotlar, masa oyunları ve canlı krupiyelerle oynanan oyunlar gibi birçok alternatif bulunmaktadır. Güvenilir bir hizmet anlayışıyla, oyuncuların kişisel bilgilerinin korunması ve finansal işlemlerde şeffaflığın sağlanması, kullanıcılar için büyük önem taşımaktadır. Son dönemde Türkiye’de sobre fazla sözü edilen bahis sitesi durumundaki Mostbet pek çok açıdan üyelerini oldukça memnun” “etmekte.

Ayrıca haftalık promosyonlar, sigorta, geri alım oranları ve ekspres güçlendirici” “para var. Evet, Mostbet Türkiye’de spor bahisleri için yasal ve güvenli bir platformdur. Curacao Oyun Komisyonu tarafından lisanslanmıştır ve kullanıcılarının kişisel ve finansal bilgilerinin güvenliğini sağlamak için durante son teknoloji güvenlik önlemlerini kullanır. Mostbet’in Canlı Sohbet özelliği, kullanıcıların hesap oluşturma, para transferleri empieza para çekme gibi her türlü sorusunda yardım almaları için hızlı ve etkili bir yol sağlar.

Ios Için

Oyuncunun amacı, uçuş durmadan önce mümkün olduğunca yüksek bir ödeme oranıyla mümkün olduğunca bahisleri bozdurmak için zamana sahip olmaktır. Mostbet online casino, Türkiye’deki oyuncular için hızlı, kolay ve güvenli para yatırma ve çekme işlemleri sunar. Bu amaçla, child derece güvenli olan ve kullanıcılar için basit bir ödeme yöntemi sunan popüler ödeme sistemleri kullanılmaktadır.

Bunlar öncelikle oyunun dürüstlük koşullarının yerine getirildiği bir odada düzenlenen çekilişlere bahis oynayabileceğiniz kart ve zaman oyunlarıdır. Bu tür oyunlar genellikle casinolardan bağımsız ve oyun sürecini organize eden özel sağlayıcılar tarafından çevrimiçi kumarhaneler tarafından sağlanmaktadır. Hesabınıza pra yatırırken promosyonlara ve tekliflere dikkat etmenizi öneririz. Örneğin, PayFix ve Papara’yı kullanarak para yatırıldığı zaman, bahisçi nakit geri ödemenin %25’ini alacaktır. Ayrıca, mevduatlar empieza freespinler için reward fonları, sonraki some hesapta para yatırmak için verilir.

Uygulamayı Akıllı Telefona Nasıl Yükleyebilirim – Talimat

Bu noktada bonuslarınıza bakarak, hangi bonusu istiyorsanız ona göre para yatırma şeklini ve miktarını belirlemeniz mümkündür. Çok çeşitli klasik slotlar va – birçok türden orijinal görsel empieza ses tasarımına sahip yüzlerce oyun. Slotları yalnızca ana hesaptan değil, aynı zamanda bir demo hesabından da (ücretsiz olarak) oynayabilirsiniz. Bu, depozitonuzun güvenliği için her oyunun arayüzünü güvenli bir şekilde tanımanıza olanak tanır. Mostbet uluslararası bir kuruluştur ve web sitesi. com alan adı” “bölgesinde yer almaktadır.

Kullanıcının kimliğini doğrulamak empieza platformu kullanmaya uygun olduğundan emin olmak için, doğrulama prosedürü sırasında sağlanan bilgiler kullanılır. Tüm ödeme seçeneklerinin tüm ülkelerde ve bölgelerde erişilebilir olmayabileceğini ve erişilebilirliğin yargı yetkisine göre farklılık gösterebileceğini unutmamak çok önemlidir. Kabul edilen ödeme seçeneklerinin kapsamlı bir listesi için kullanıcılar tarafından uygulamanın SSS alanına veya Mostbet’e başvurulmalıdır.

Mostbet Casino

Texas Hold’em, Omaha, Seven” “Credit card Stud ve Several Card Draw gibi farklı poker türleri vardır. Minimum pra yatırma tutarı yaklaşık 0, 4 ABD Doları ve maksimum tutar yaklaşık 4. 000 ABD Dolarıdır. Para aklama ile mücadele ve kimlik hırsızlığına karşı afin de yatırılacak olan hesabın, oyun oynayan kişi ile aynı olduğunun kanıtlanması gerekir. Bu sebeple kimlik bilgileriniz ile para gönderilecek hesabın aynı olup olmadığın kontrol edilmesi şarttır. Tek tuşla, telefon numaranız ile, eposta adresiniz ile veya sosyal medya adresleriniz üzerinden Mostbet’te hesap açabilirsiniz.

Telefon numaranızı doğrulamadıysanız, şifre kurtarma alanına e-posta göndermeniz gerekir. Aksi takdirde, BO tüm hesapları engelleyebilir ve hesaplardaki fonları dondurabilir. Tüm yetkilendirme seçeneklerine bakacağız ve hoşgeldin bonusunun koşullarını da açıklayacağız. Böylece, her türlü bahis ve oyun tutkununa hitap eden bu platform, sürekli gelişen içeriği ile üyelerine heyecan verici bir bahis ortamı sunmayı başarmaktadır.

📄 License Of Mostbet

Onlara yeni bir şifre veya şifreyi oluşturmak için bağlantı gelecektir. Daha fazla rahatlık için bu popüler kripto para birimini kullanarak para yatırma ve çekme işlemleri yapabilirsiniz. Mostbet platformunda, bir tür casino oyunu olan çevrimiçi slotları oynayabilirsiniz. Slotlar genellikle kazanan kombinasyonlara ulaşarak ödemeleri tetiklemek” “amacıyla çok sayıda sembol içeren dönen makaralar içerir.

Minimum ve maksimum sınırlar arasında geniş bir yelpaze sunan Mostbet casino, farklı finansal yeteneklere sahip oyuncular için kumarhane hizmetlerini kullanma fırsatı sunar. Bu, oyuncuların oyun bakiyelerini 20 Türk lirasından on binlerce liraya kadar doldurmalarını sağlar. Bu da farklı bütçelere sahip oyuncuların rahatça oyun oynayabilmesi anlamına gelir. Most casino sitesinde s?rf kayıt olmanız bile bonuslar ve kazançlar elde etmenize olanak tanır. Kayıt bonusu, kayıt olmuş her kullanıcıya verilen şartsız bir bonustur. Siteye giriş yaptığınızda “Hesabım” bölümünde bulunabilir ve hemen etkinleştirilerek kazançlarınızı artırabilirsiniz.

“mostbet Türkiye

Futbol, ​​basketbol, ​​futsal, masa tenisi ve daha pek çok alanda turnuvalar vardır. Kullanıcılar için avantajı, sadece uluslararası yarışmalara değil, aynı zamanda bölgesel düzeydeki maçlara da bahis oynayabilmenizdir. Mostbet’teki canlı casino, kullanıcıların bir video yayını aracılığıyla gerçek zamanlı krupiyelerle casino oyunları oynamasına olanak tanıyan bir özelliktir. Bu, daha sürükleyici ve otantik bir oyun deneyimi sunar, çünkü oyuncular tıpkı kara tabanlı bir kumarhanede olduğu gibi krupiyeyi görebilir ve onunla etkileşime girebilir. Blackjack, rulet,” “bakara ve poker gibi popüler masa oyunları canlı casinolarda yaygın olarak görülür. Maç öncesi, maç veya etkinlik başlamadan önce herhangi bir spor dalına bahis oynayabileceğiniz anlamına gelirken, canlı bahis, etkinlik sırasında bahis yapmanıza olanak tanır.

Otomatik dönüşüm seçeneği, parayı enflasyondan korumak için kullanılabilir. Kayıt olduğunuz ülkenin para biriminde para yatırmak zorunda değilsiniz. TRY cinsinden para yatırarak, hesabınıza güvenilir amerikan dolar? veya euro alabilirsiniz. Casino bölümünün düzenli ziyaretçilerinden biri müşteri hizmetlerinin yavaşlığından şikayet ediyor ama aynı zamanda büyük kazancını da anlatıyor.

Android’de Mostbet Tr Uygulamasını Nasıl Indirebilirim

Canlı bahisler en popüler sporlarla sınırlıdır empieza mevcut şampiyonalara yönelik bahislerin de mevcut olduğu kesindir. Yayın yok, ancak ana ekranda ayrıntılı maç istatistikleri ve üç ek sekme var. Mostbet’teki hesap pra birimi yalnızca kayıt sırasında bir kez seçilebilir – Türkiye ulusal para birimi (TL), Euro ve Amerikan doları cinsinden bir hesap açma imkânı vardır. Ayrıca, mobil uygulama ile web sitesi arasındaki farklar da göz önüne alınmalıdır.

Mostbet, üyelerinin gönderdiği kişisel verileri şifrelenmiş bir şekilde korur. Ayrıca her yeni teknolojik gelişmede de storage space güvenliğini arttıracak bir yenileme yapar. Hesabınızı doğrulamak için öncelikle kişisel dolabınızda bir profil doldurmanız gerekir.

Mostbet Para Yatırma Ve Para Çekme Yöntemleri

Şirket spor bahisleri, sanal sporlar ve online casino oyunlarını kabul etmektedir. Mostbet’teki spor bahislerine ek olarak, çevrimiçi casino hizmetleri para mevcuttur. Bu hesapta oynamak için ayrı hesap oluşturmanıza gerek yoktur – yalnızca bonus hesapları” “ayrılır ve ana hesap hem bahisler hem de casino oyunları için tek bir bakiyeyle kullanılabilir. Alınan bonusu geri kazanmak için bonus ödemesinin kendisinden birkaç kat daha yüksek biraz için bahis yapmanız gerekir.

Mostbet indir iOS veya Android uygulamalarında bunu hemen yapamıyorsanız, bu işlemi erteleyebilirsiniz ancak güncelleme tamamlanana kadar programı the woman açtığınızda bir hatırlatıcı açılır. Bu süre boyunca güncelleme düğmesi, uygulamanın ana menüsünde olacak – bakiyenin görüntülendiği tablonun altında. Geri kalan durumlarda, mostbet. apk dosyasını indirdikten sonra Android uygulamasını yükleme prosedürü, onu mobil cihazda başlatmak ve basit ve anlaşılır talimatları izlemektir.

Mostbet Hakkında Sıkça Sorulan Sorular

Hoşgeldin bonusunun yatırıldıktan hemen sonra geri çekilemeyeceğini lütfen unutmayın. Bunu yapmak için Mostbet bahis sitesinde daha ayrıntılı olarak açıklanan belirli koşullarda bahis yapmanız gerekir. Bahis için sınırlı bir süre sağlanır, bu nedenle oyuncunun kazanç miktarını artırma fırsatını kaçırmamak için acele etmesi önemlidir. Mostbet ayrıca Jacks or Much better, Aces and Looks, Deuces Wild ve daha fazlası gibi popüler video poker oyunlarından bir seçki sunar. Bu oyunlar gerçekçi grafikler, heyecan verici bonus özellikler ve büyük kazanma şansı ile beraber gelir. Ayrıca, daha fazla rahatlık için bu oyunları hem sprained ankle masaüstü hem sobre mobil cihazlarda oynayabilirsiniz.

Mostbet’teki canlı bahis oranlarının oyun sırasında değiştiğini unutmayın. Her şey katılımcıların ne tür bir performans gösterdiğine bağlıdır. Bu nedenle böyle bir bahis yapmadan önce dinamikleri dikkatlice tanımak önemlidir. Buna minimum para yatırma tutarı ve aylık maksimum para çekme limiti dahildir. Ayrıca, yerel yasalar nedeniyle belirli ülkeler siteden hariç tutulabilir. Bu nedenle, kaydolmadan önce hüküm ve koşullarını okuduğunuzdan emin olun.

Mostbet’te Spor Bahisleri

Müşterilerimizin farklı tercihlerini karşılamak için titizlikle seçilmiş geniş oyun yelpazemizi keşfedin. Ünlü oyun sağlayıcılarıyla kurduğumuz işbirlikleri vas?tas? ile, slotlar, masa oyunları, canlı krupiyer masaları ve daha” “fazlasını içeren geniş bir oyun koleksiyonu sunuyoruz. En yeni sürümleri, popüler favorileri ve özel oyunları keşfedin; yüksek bahisli slotların heyecanını mı arıyorsunuz, yoksa blackjack empieza ruletin stratejik cazibesini mi istiyorsunuz? Mostbet Online Casino Türkiye, her seviyeden oyuncuya hitap eden oyunlarla sizi bekliyor. Türkiye’den oyuncular için mostbet. com sitesinde TL’ye kadar bahis oynamak veya casino oynamak için (isteğe göre) hoş geldin bonusu vardır.

Mostbet IN, Türk müşteriler için önde gelen bahis destinasyonudur. Mostbet Türkiye, aralarından seçim yapabileceğiniz çeşitli spor dalları ile çeşitli bir bahis deneyimi sunuyor. Basit tasarımı ve banka bankacılığı, e-cüzdanlar ve kripto para birimleri dahil çoklu işlem yöntemleri, para yatırma ve çekme işlemlerini sorunsuz bir deneyim haline getirir. Ayrıca, mevcut kullanıcılar için i̇ndir uygulaması Most Bet’ten içinde” “sadakat almak programı sunulmaktadır. Üyeler düzenli olarak ücretsiz dönüşler ve ücretsiz oldukça bahisler alabilirler.

Nasıl Giriş Yapılır?

Ayrıca web sitesinde, kullanıcılara sorularına hızlı çözümler sunmak için sık sorulan sorulara yanıt veren kapsamlı bir SSS bölümü bulunmaktadır. Ayrıca bu platform, düzenli olarak güncellenen promosyon kodları ile de bahis severlere ek avantajlar sunar. Bu kodlar, özel günlerde veya belirli etkinlikler sırasında dağıtılabilir ve kullanıcının daha ?ok kazanmasına olanak tanır. Bonus ve promosyon kodlarından yararlanmak için çevrim şartları ve kullanım koşulları” “gibi önemli detayları gözden kaçırmamak esastır. Kullanıcıların bu fırsatlardan en faydal? şekilde yararlanabilmesi için, güncel kuralları takip etmesi ve bu bonusları akıllıca kullanması önerilmektedir. Yeni oyuncular, kayıt olduktan sonra büyük hoş geldin bonusları kazanırlar.

Ayrıca hesap kaydınız sırasında GETMAX promosyon kodunu girmeyi unutmayın. Mostbet kayit bahisçi ofisinde Türkiye dahil birçok ülkeden oyunculara açıktır. Oyuncuların Türk ulusal para birimi cinsinden (TL) hesap oluşturma ve spor bahisleri veya casino oyunları için hoşgeldin bonusu alma imkânı vardır. Kumar empieza eğlence internet sitesi Most Bet, kullanıcılar yüksek kaliteli hizmetler, resmi web sitesine sürekli erişim, cömert bonuslar ve güvenli ödemeler sunan güvenilir bir bahis sitesidir. Mostbet Türkiye den bahisçiler, üyelik için uygun koşullar sağladığından ve şüphesiz kumar ve eğlence internet sayfası hizmetlerinden hidup olarak yararlanmaktadır. Mostbet kumar sadece afin de kazanmak için bir fırsat değil, aynı zamanda heyecan verici bir eğlencedir.

Mostbet Spor Bahisleri Promosyonları

Bu nedenle, Mostbet iOS ve Android uygulamalarını indirmeden önce bu farkları anlamak önemlidir. Mostbet uygulamasındaki müşteri hizmetleri seçenekleri arasında canlı sohbet, e-posta, telefon yardımı ve bir SSS bölümü bulunmaktadır. Uygulamanın ‘Bize Ulaşın’ sekmesi veya SSS bölümünün the woman ikisi de çeşitli seçenekleri listeler. Ayrıca, kullanılan ödeme yönteminin güvenliği ve emniyetinin yanı sıra tüm finansal ve kişisel verilerin gizliliğini garanti etmek çok önemlidir. Mostbet uygulamasının kullanıcıları, kullanıcı arayüzünün basit tasarımı ve kullanım kolaylığı sayesinde istedikleri işlevleri hızlı bir” “şekilde belirleyebilir ve kullanabilir.

Uygulama Rusça ve İngilizce olarak mevcuttur, böylece sizing en uygun dili seçebilirsiniz. Ayrıca spor bahisleri, casino oyunları ve daha fazlası için de kullanabilirsiniz. Bunlar, rekabetçi çevrimiçi oyun dünyasındaki etkinlikler üzerine oynanan bahislerdir. Counter-Strike, Dota 2, League of Legends ve Valorant gibi oyunlar düzenli olarak oynanmaktadır.

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