Mostbet Bahisçisi: En İyi Oranlar Ve Çevrimiçi Canlı Bahis Deneyimi

Mostbet İncelemesi 2024 » Spor Bahisleri, Giriş & Oyunlar

Tüm verilerinizin güvende ve emniyette tutulmasını sağlamak için en son şifreleme teknolojisini kullanırlar. Ayrıca, müşteri destek ekibi her türlü sorunuzu veya” “endişenizi yanıtlamak için her zaman hazırdır. Mostbet web sitesini ziyaret ederek ve ‘Kaydol’ seçeneğini seçerek bir Mostbet hesabı açabilirsiniz. Kayıt formunu kişisel bilgilerinizle doldurun, ardından hesabınızı onaylamak için talimatları izleyin. Bir Mostbet hesabı oluşturmak ve hareket halindeyken platformun yeteneklerini kullanmaya başlamak için hızlı ve basit bir yaklaşım Mostbet mobil uygulamasını indirmektir.

Futbol, basketbol, tenis, futbol ve daha fazlasını içeren çok çeşitli spor ve etkinlikler sunuyoruz. Ortaklık programı, çevrimiçi bahis oynamaya başlamanın mükemmel bir yoludur. Ortak olarak kaydolmak basit empieza hızlıdır ve birkaç dakika içinde kabul edilirsiniz.

Mostbet’te Hatlar Ve Oranlar

Platformun giriş sayfası, kullanıcıların yalnızca e-posta adreslerini empieza şifrelerini vermelerini gerektirir. Android ve iOS için MostBet istemci yazılımı bölge kısıtlaması olmadan indirilebilir empieza 38 dili destekler ve işlevsel olarak PC sürümünden daha üstündür. Kurulum, MostBet istemcisinin konumundan bağımsız olarak çalışan aynaları aramadan yapmanıza empieza bahis oynamanıza izin verecektir. Eğer bir boks hayranıysanız, Mostbet bahislerinizi yapmak için mükemmel bir yer olacaktır.

Son dönemde Türkiye’de durante fazla sözü edilen bahis sitesi durumundaki Mostbet pek çok açıdan üyelerini oldukça memnun etmekte. Site verdiği bonuslarla eine kadar bonkör olduğunu baştan gösteriyor. Mostbet’teki spor bahislerine ek olarak, çevrimiçi casino hizmetleri de 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 ankle rehab ebook de casino oyunları için tek bir bakiyeyle kullanılabilir. Mostbet’in sadece bir kumarhane değil, aynı zamanda bahis için çok çeşitli spor etkinliklerine sahip bir bahisçi olduğunu da belirtmek gerekir https://flashtaville.com/.

Mostbet – Online Spor Bahisleri Şirketi

Eğer bir tenis hayranıysanız, Mostbet bahislerinizi yapmak için ideal bir yer olacaktır. Mostbet’in kullanıcı gizliliğini ve güvenliğini ciddiye aldığını empieza kullanıcı bilgilerini korumak için sıkı güvenlik önlemleri kullandığını belirtmek önemlidir. Kullanıcı bilgilerini korumak için, tüm hassas veriler şifrelenir ve platformda güvenli bir şekilde saklanır, bu da geçerli tüm kurallara ve veri koruma mevzuatına uygundur. Mostbet’in hem sprained ankle bahis bürosunun ankle rehab ebook de” “çevrimiçi kumarhanenin hizmetlerinin bulunduğu Android ve iOS için mobil uygulamaları vardır.

Ücretsiz bahisler, online bahislerinizden ekstra para kazanmanın bir başka yoludur. Bu ücretsiz bahislerle, kendi paranızı riske atmadan bahis oynayabilirsiniz. Bu, bazı bahisleri kaybetseniz bile, uzun vadede hiçbir şey kaybetmeyeceğiniz anlamına gelir. Mostbet tarafından sunulan kredi/banka kartları, e-cüzdanlar, banka havaleleri empieza diğerleri gibi afin de çekme seçeneklerinden birini kullanarak kazancınızı nakde çevirebilirsiniz. Para çekme işlemini başlatmak için hesabınızda oturum açın ve ‘Para Çek’ düğmesini seçin.

Mostbet Tr Kayıt Ve Giriş

Burada dünyanın dört bir yanından çeşitli spor müsabakalarına maç öncesi empieza canlı bahisler oynayabilirsiniz. Favori takımınızı desteklemek her zaman ilginçtir, özellikle de söz konusu olan kazançlar olduğunda. 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 holdem poker gibi popüler zaman oyunları canlı casinolarda yaygın olarak görülür. Mostbet’teki müşteri hizmetleri personeli, karşılaşabileceğiniz herhangi bir soru veya sorunla ilgili olarak size yardımcı olmak için günün the woman saati hazırdır bonus kodu.

Mostbet bahisçi ofisi ve kumarhanesi için bonus kazanma koşulları aynıdır, ancak sadece bahis oynama koşulları farklıdır. Mostbet’in mobil uygulamadaki kayıt formunda, sitedeki benzer formdan sadece bir fark vardır – gelişmiş kayıt seçeneği yoktur. “İkinci sıradaki” çarpan ise 37. 835x’tir, yine de oldukça yüksek bir kazanç potansiyeli sunar.

Mostbet’te Masa Oyunları

Bu kayıt biçiminde şifre otomatik olarak oluşturulur – kayıttan hemen sonra yeni oyuncuya bildirilir. Şifreyi kişisel hesap kaydedebilir veya profilinize değiştirebilirsiniz. Mostbet, kullanıcılara karşılaşabilecekleri the woman türlü sorunda yardımcı olmak için Canlı Sohbet, E-posta empieza Telegram aracılığıyla 7/24 müşteri desteği sağlar.

Ayrıca, oyun birkaç farklı oyun seviyesi sunar ve hatta pe?in ödüllü liderlik yarışmalarına sahiptir. Mostbet’e pra yatırmak ve çekmek için öncelikle çevrimiçi spor bahisleri kuruluşunda bir hesap oluşturmanız gerekir. Para yatırma ve çekme için kesin prosedür, kullandığınız platforma veya cihaza ve mevcut ödeme seçeneklerine göre farklılık gösterebilir. Ayrıca, the woman ikisi para web sitesinin masaüstü sürümünde bulunmayan özel bonuslar ve promosyonlarla birlikte gelir.

Mostbet Müşteri Temsilcileri 24 Saat Hizmet Veriyor Mu?

Canlı oyunları izlemeyi seviyorsanız, bu çevrimiçi kumarhanenin dünya çapındaki tüm önemli spor etkinliklerinde canlı maçlar sunduğunu bilmek sizi mutlu edecektir. Site, futbol ve tenis gibi çeşitli spor dalları için sektördeki en iyi oranlardan bazılarını sunmaktadır. Basketbol, ​​futbol ve Amerikan futbolu gibi başka birçok seçenek de var mostbet indir.

Fakat, bahis ve casino sitelerine lisans sağlayan başka yerler vardır ve bu lisanslar bütün dünyada geçmektedir. Mostbet de Curacao lisansına sahiptir ve olası bir sorunda çözüm için kullanıcılar” “buradaki yetkililer ile temasa geçilebilir. Diğer bahis bürolarının çoğunda bulunmayan disiplinler temsil edilmektedir. Oyun içi bahisler için birçok etkinlik mevcuttur, büyük maçların canlı yayınları vardır. Mostbet’in Canlı Sohbet özelliği, kullanıcıların hesap oluşturma, para transferleri ve para çekme gibi her türlü sorusunda yardım almaları için hızlı empieza etkili bir yol sağlar.

Spor Disiplinlerinin Seçimi

İsim, doğum tarihi ve e-posta adresi gibi temel kişisel bilgiler, kayıt için gerekli olan tek şeydir, bu da işi kolay ve karmaşık hale getirir. Mostbet promosyon kodu kayıt sırasında kullanılabilir – bunun için kayıt formunda promosyon kodunuz varsa etkinleştirilebilecek özel bir alan vardır. Kayıt promosyon kodunu özellikle sitemizdeki casino ortaklarından birinden alabilirsiniz.

Bu sitede spor bahisleri yapmak için Türk kullanıcıların öncelikle web sitelerine kayıt olarak kendilerinde bir hesap açmaları gerekmektedir. Bunu yaptıktan sonra, hesap kontrol panelinizden ya da doğrudan bahis yapmakla ilgilendiğiniz herhangi bir canlı bülten ekranından anında bahis oynamaya başlayabilirsiniz. Evet, kullanıcılar Mostbet uygulamasının yanı sıra web sitelerinin mobil versiyonu üzerinden de bahis oynayabilir ve Mostbet’in sunduğu hizmetlerden yararlanabilirler. Web sitesinin mobil versiyonuna erişmek için web sitesini mobil cihazınızın tarayıcısından ziyaret edin.

Mostbet Spor Bahisleri Borsası

Casino bölümünde ise birbirinden farklı slot oyunları üyeleri beklemekte. Canlı casino kısmında pek çok masada istenilen oyunu oynamak ve kazanç elde etmek yine Mostbet’te mümkün. Android akıllı” “telefonlar için Mostbet sah web sitesi ve iOS cihazlar için App Store, the woman iki platformla da uyumlu olan Mostbet uygulamasının indirilmesini sağlar. Sitenin kullanıcıları, platformun kolay ve kullanıcı dostu düzeni sayesinde tercih ettikleri spor etkinliklerine kolayca empieza hızlı bir şekilde bahis oynayabilirler. Mostbet’in resmi web sitesine Türkiye’den girişe izin verilmemektedir. Bu durum, Türkiye’deki kumar işi ile ilgili yasal kısıtlamalardan kaynaklanmaktadır.

Giriş bilgilerinizi hatırlayamıyorsanız, lütfen müşteri destek ekibimizle iletişime geçin. “Bu sitenin en iyi yanı futboldan krikete ve basketbola kadar her şeye bahis oynayabilmenizdir. O kadar çok farklı spor türü var ki ilginizi çeken bir şey bulacağınızdan emin olabilirsiniz. ” – Mike. Burada bahis oynamaktan çok keyif alıyorum, oranlar gerçekten çok iyi ve bahis oynayabilecekleri çok çeşitli sporlar var. Şirket, Curacao tarafından verilen offshore lisansı altında faaliyet göstermektedir. Bu, oyuncuların bahis oynamak için daha güvenli ve daha güvenli bir platforma erişmelerini sağlar.

Mostbet Ios Uygulaması Nasıl Indirilir

Uygulamayı bulduğunuzda, “Get” butonuna tıklayın ve uygulamayı kısa sürede cihazınıza yüklemiş olacaksınız. Mostbet Android uygulamasını indirmek için Google Have fun with Store’a gidin ve “Mostbet “i arayın. Uygulamayı bulduğunuzda, “Yükle” düğmesine tıklayın empieza uygulamayı kısa sürede cihazınıza yüklemiş olacaksınız. Giriş sayfasındaki “Şifremi Unuttum” bağlantısına tıklayarak ve talimatları izleyerek, şifrenizi kaybettiyseniz şifrenizi sıfırlayabilirsiniz.”

Basit tasarımı ve banka bankacılığı, e-cüzdanlar empieza kripto para birimleri dahil çoklu işlem yöntemleri, para yatırma ve çekme işlemlerini sorunsuz bir deneyim haline getirir. Genel olarak, Mostbet mobil uygulaması kullanıcılara gaté spor etkinliklerine bahis oynamaları için uygun, güvenli ve kullanıcı dostu bir platform sağlar. Üstelik Mostbet’in kayıt seçenekleri farklı müşteri tercihlerine ve ihtiyaçlarına uyacak şekilde tasarlanmıştır.

Türkiye’de Yaşıyorsam Mostbet’i Bir Ayna Site Üzerinden Açmam Gerekir Mi?

Gerçekten para, Mostbet ismi uzun zamandır kumar eğlencesi ve kazançlarının bêtisier kaynağı olarak onu seçen Türk oyuncular arasında bir ev ismi olmuştur. Bu site Türkiye’de rakipsizdir ve hiç şüphesiz bahis endüstrisindeki sobre başarılı ve güvenilir site olarak kabul edilmektedir. Kayıt sırasında yapılmadıysa, belirtilen telefon numarasını ve e-postayı da teyit etmeniz gerekir. Bu, hoşgeldin bonusu veya on line casino oyunu almak empieza ödeme talebinde bulunmak için ön koşuldur. Bahis şirketi, en yeni oyuncular için bonuslar içeren bir ödül programına sahiptir, bu program birinci, ikinci,” “üçüncü ve dördüncü pra yatırma işlemleri için bonuslar sunar. Sadakat programı da dahil olmak üzere sürekli müşterilere yönelik bonuslar da mevcuttur.

Bu tür yöntemleri kullanırken cevap ilk durumda olduğu kadar çabuk sağlanmayacak, ancak daha geniş empieza kapsamlı olduğu ortaya çıkacaktır. Müşterinin acil bir yanıta ihtiyacı varsa yardım hattına başvurmak daha iyidir. Bu durumda operatör talebi hızlı bir şekilde işleyebilecek comienza sorunlu durumu çözmek için ayrıntılı bilgi sağlayabilecektir. Mostbet’teki canlı bahis oranlarının oyun sırasında değiştiğini unutmayın. Mostbet Türkiye, aralarından seçim yapabileceğiniz çeşitli spor dalları ile çeşitli bir bahis deneyimi sunuyor.

Mostbet Aviator Oyunu

Kazanmak için olduğu kadar kaybetmek için de bir seçime bahis oynayabilirsiniz. Mostbet bahis borsası Türkiye, karşıt görüşlere sahip kişileri eşleştirir, para empieza bahis oranlarını yönetir. Olağan bahislerde, bir bahisçiyle bir etkinliğin sonucuna veya bir oyunun sonucuna bahis oynarsınız. Bahis şirketi oranları belirler ve siz de bu oranlara bahis oynayabilirsiniz. Canlı yayınlar düzenleyen onaylı canlı krupiyerlerimizle canlı casino oyunlarının heyecanını yaşayın.

Motor sporları hayranıysanız, Mostbet bahislerinizi yapmak için mükemmel bir yer olacaktır. 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. Kredi/banka kartları, e-cüzdanlar, banka havaleleri ve diğerleri gibi kabul edilen ödeme yöntemlerinden birini kullanarak Mostbet hesabınıza pra ekleyebilirsiniz. Başlamak için, hesabınıza giriş yapın ve ‘Para Yatırma’ seçeneğini seçin.

Mostbet Uygulamasını Kullanarak Müşteri Hizmetlerine Nasıl Ulaşabilirim?

Web sitesi, bir mobil cihaz kullandığınızı otomatik olarak algılayacak ve düzeni daha küçük ekran boyutuna uyacak şekilde ayarlayacaktır. Mostbet Welcome Reward türünde spor bahisleri veya casino oyunları için bahis yapabilirsiniz. Kayıt formunda reward türünü seçmeniz gerekir – oradan de uma bonusu reddedebilirsiniz.

Elektronik yöntemler için minimum para çekme miktarı 50 TL’dir, kripto para birimleri için mevcut döviz kuruna bağlıdır. Maç öncesi bahislerde Mostbet’in marjı genellikle %6-7 arasında değişirken, Canlı bahislerde bu marj %8-9’a kadar çıkabilir. Özellikle futbol, ping-pong, hokey ve basketbol gibi ana sporlarda, Türk bahis şirketi genellikle %5-5, 5 gibi daha düşük marjlar sunar. Sayfanın alt kısmındaki ek bir menü, Mostbet’teki oranlar, çalışma kuralları, ortaklık programları ve daha fazlası hakkında bilgi sağlar. Ayrıca, Curacao lisansına hidup bir bağlantı içerir, bu da kumar şirketinin bir dizi farklı alanda faaliyet göstermesine olanak tanır. Mostbet ayrıca Klasik Bakara, Mini Bakara ve Yüksek” “Limitli Bakara gibi çeşitli bakara çeşitleri de sunmaktadır.

Mostbet Spor Bahisleri Türkiye’de Ne Tür Sporlara Bahis Oynayabilirim?

Bu amaçla, İtalya futbolunun büyük isimlerinden biri olan Francesco Totti, bahis sitesinin elçisi olarak davet edilmiştir ve şirketin ilk” “yıldız yüzü olmuştur. Mostbet ayrıca Jacks or perhaps Better, Aces plus Faces, Deuces Outdoors 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 birlikte gelir. Ayrıca, daha fazla rahatlık için bu oyunları hem masaüstü hem de mobil cihazlarda oynayabilirsiniz. Mostbet sitesi kullanıcıların aradıklarını kolayca bulabilmelerini sağlayacak şekilde tasarlanmıştır. Siteye giriş yaptığınız andan itibaren aradığınız pek çok şeyi kolayca bulabilirsiniz.

Yasalar siteyi fiziksel olarak kapatamaz, ancak internet erişimini engelleyebilir. Yeni Mostbet giriş adresleri, bu erişim sorunlarını çözmek için kullanılır. Zaman içinde İnternet layanan sağlayıcıları tarafından engellenebileceği için bu adresler sürekli güncellenir. Diğer oyunlar (sic bo, kaplan ve ejderha, andar bahar, oyun şovları, canlı slotlar). Bahis yapmak için minimum miktar just one TL’dir ve maksimum değeri bahisçi tarafından belirlenir.

Türkiye’de Mostbet’te Güvenlik

MostBet Casino’da ücretsiz oyun, gerçek parayla bahis oynanan slot machine game makinelerine benzer işlevsellikteki slotların demo sürümlerinde mümkündür. Mostbet’in müşteri destek temsilcilerine Mostbet Twitter, Telegram, Myspace ve Instagram gibi popüler sosyal medya platformlarından kolayca erişilebilir. Mostbet Telegram kanalı, müşteri destek ekibine anında ulaşmak talep eden kullanıcılar için önerilen seçenektir. Mostbet olarak müşterilerimize acil olmayan sorularınız için [email protected] adresinden e-posta destek seçeneği sunuyoruz. Deneyimli temsilcilerden oluşan ekibimiz, platformumuzda kusursuz bir deneyim sağlamak için hızlı yanıtlar sağlar. Mostbet borsasında ise bir bahisçi yerine başka kişilere karşı bahis oynayabilirsiniz.

Mostbet sitesine erişiminiz yoksa, Mostbet sitesine erişmek için VPN hizmetini veya ikiz site alternatif alan adını kullanabilirsiniz. E-posta ile kayıt olmak için e-postanızı girin ve bir şifre oluşturun. Her zaman aramayı kullanabilir empieza ilgilendiğiniz oyunu bulabilirsiniz. Eğer bir basketbol hayranıysanız, Mostbet’te bahis oynamak keyifli bir deneyim olacaktır. Hassas bilgilerinizi korumak için güvenli bir bağlantı üzerinden giriş yaptığınızdan emin olun. Ayrıca hesabınızı güvende tutmak için şifrenizi düzenli olarak değiştirmelisiniz.

Mostbet Ödeme Yolları

Mostbet Online Casino’da çok sayıda bedava döndürmeyle büyük ikramiyeyi yakalamak ve büyük kazanmak için birçok fırsatınız olacak. Casino (ve ücretsiz spinler) için bonus kazancının bahsi x60’tır, bonus kazanımı için 72 sewaktu verilir. Tüm oyunlar buna dahil değildir, sadece promosyon koşullarında listelenenler oyuna katılır. Hesaba yatırılabilecek durante düşük tutar banka kartları için fifteen TL’dir, ancak Bitcoin gibi kripto pra birimleri için herhangi bir alt sınır bulunmamaktadır.

Kayıt olduğunuz ülkenin para biriminde afin de yatırmak zorunda değilsiniz. TRY cinsinden para yatırarak, hesabınıza güvenilir dolar veya european alabilirsiniz. Mostbet 2009 yılından beri varlığını sürdürmektedir ve 93 ülkede faaliyet göstermektedir. İncelemede, bahis bürosunun” “özelliklerine, bahis koşullarına, oyuncular için fırsatlara ve MostBet’e giriş nasıl yapılacağına daha yakından bakacağız. Bir bonusu kullanmadan önce, söz konusu teklif için geçerli olan hüküm ve koşulları okumak ve anlamak çok önemlidir.

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