Mostbet Giriş: Mostbet Türkiye Canlı Bahis Sitesi Bilgileri

Mostbet On Line Casino Türkiye Online & Canlı Oyunlar Reward 2500 Try

Canlı yayınlara ev sahipliği yapan sertifikalı canlı krupiyerlerimizle canlı casino oyunlarının heyecanını yaşayın. Casino Coin, TRON, ADA, Axie Infinity, Binance UNITED STATES DOLLAR, DAI, Dexsport, TrueUSD, USD Coin empieza ZChash. Çok çeşitli klasik slotlar var – birçok türden orijinal görsel ve 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 the woman oyunun arayüzünü güvenli bir şekilde tanımanıza olanak tanır. Buna minimum para yatırma tutarı ve aylık maksimum para çekme limiti dahildir.

Oyun hakkında fikir edinmek için Mostbet oyunlarını gerçek parayla bahis oynamadan oynayabilirsiniz. Mostbet, piyango oyunlarının heyecanını sevenler için özel bir Piyango bölümü sunuyor. Bu bölümde Powerball ve EuroMillions gibi popüler piyangolar da dahil olmak üzere farklı ülkelerden çeşitli piyangolar yer almaktadır.

Mostbet Tr Online Casino’da Hangi Oyunlar Mevcuttur

Bu ücretsiz bahislerle, kendi paranızı riske atmadan bahis oynayabilirsiniz. Bu, bazı bahisleri kaybetseniz fiel, uzun vadede hiçbir” “şey kaybetmeyeceğiniz anlamına gelir. Hoş geldin bonusları, online bahis oynamaya başlamak için harika bir yoldur. Bu bonuslarla, kaydolurken genellikle hesabınıza belirli biraz para yatırılmasını sağlayabilirsiniz. Bu, herhangi bir risk almadan hemen bahis oynamaya başlayabileceğiniz ve potansiyel olarak bazı iyi karlar elde edebileceğiniz anlamına gelir. Tether, Ripple, BitcoinCash, Dash, Dogecoin, Huobi Token, HUSD, Casino Coin, TRON, ADA, Axie Infinity, Binance USD, DAI, Dexsport, TrueUSD, UNITED STATES DOLLAR Coin ve ZChash https://mostbetbahis-turkiye.com.

Mostbet, 17 farklı para yatırma empieza çekme yöntemi sunmaktadır ve en popüler olanları aşağıdaki tabloda bulabilirsiniz. Mostbet. apresentando resmi web” “sitesi Türkiye’de engellenmiştir, ancak bu Türk mevzuatının özelliklerinden kaynaklanmaktadır. Bununla birlikte, Türk kullanıcılar için Mostbet’in işlevselliği azaltılmış bir sürümü vardır (kumarhane kumar, poker, slot yok). Mostbet, Türkiye’deki sobre popüler gayri sah bahis bürolarından biri olarak bilinmektedir. Şimdi, Mostbet’i daha yakından tanıyalım, oyunculara sağladığı avantajları inceleyelim ve bu bahis şirketinin genel işleyişini anlayalım.

Kart Oyunları

Kalite empieza güvenilirlik açısından ele alındığında, Mostbet giriş kolaylığı ve sağladığı güncel giriş adresi güncelliği ile kullanıcılarına mükemmel bir hizmet sunma peşindedir. Mostbet, kullanıcılarına spor bahisleri ve online casino oyunları sunarak geniş bir eğlence yelpazesi vaat ediyor. Fakat bu platformun öne çıkan özelliklerinden yararlanırken, bazı avantajlar ve dezavantajları da göz önünde bulundurmak gerekiyor. Herhangi bir erişim problemi olduğunda güncel giriş adresine buradan erişebilirsiniz.

Yeni hesaba giriş yaptıktan hemen sonra sitede veya uygulamada başlatılacak bir zamanlayıcı yönlendirmeye yardımcı olacaktır. Demo versiyonunda, oyun gerçek paraya dönüştürülemeyen sanal para birimlerine gider. Ancak ücretsiz mod, oyuncular için kendileri için en yeni bir makineyi test edebilmeleri ve gerçek para kaybetme riski olmadan bazı oyun stratejilerini test edebilmeleri için yararlıdır. Mostbet Casino – küresel kumar pazarında faaliyet gösteren Curaçao’nun overseas lisanslı çevrimiçi kumarhanesidir.

Mostbet’in Başlıca Avantajları

Bu yöntemler arasında; elektronik cüzdanlar, banka havalesi, kredi kartları ve ön ödemeli kartlar gibi güncel ve popüler ödeme araçları yer almaktadır. Her bir kullanıcının tercih ettiği yönteme göre, platformun sunduğu minimum ve maksimum limitler hakkında da bilgi sahibi olması önemlidir. Ana hoş geldin bonusunun yanı sıra, bahis şirketinin düzenli Mostbet bonusları da bulunmaktadır ve tüm bölümleri etkiler. Yüksek profilli spor etkinliklerine ve siber sporlara bahis yapma, belirli casino oyunlarında iyileştirilmiş koşullar gibi seçenekler sunar. Promosyonlara erişim için üst menüde bulunan “Promosyonlar” düğmesine tıklayabilirsiniz.

Türkçe Mostbet web sitesi lisanslıdır, ancak Türkiye’de çevrimiçi kumar yasak olduğu için web sitesinde kumarhane veya canlı kumarhane mevcut değildir. Ekip, size ihtiyacınız olan tüm yardımı sağlamak için canlı sohbet,” “e-posta ve telefon aracılığıyla 7/24 hizmetinizdedir. Ayrıca, sorularınızın çoğunu yanıtlayabilecek kapsamlı bir SSS bölümüne sahiptirler, böylece müşteri hizmetleri ekibinden bir yanıt beklemek zorunda kalmazsınız. Maç öncesi, maç ya da 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.

Herhangi Bir Sorunuz Var Mı? – Mostbet Ile Sosyal Medyada Bağlantı Kurun

En iyi deneyimi elde etmek ve sobre yeni özelliklerden ve güncellemelerden yararlanmak için Mostbet uygulamanızı güncel tutmak çok önemlidir. Bu bilgiler kimliğinizi doğrulamak ve hesabınızı güvende tutmak için” “kullanılacağından, kayıt işlemi süresince doğru ve güncel bilgileri göndermeniz çok önemlidir. Mostbet iOS uygulamasını indirmek için App Store’a gidin ve “Mostbet “i arayın.

Mostbet kumar web sitesinde oynamanın temellerini keşfetmek için şimdi kaydolun. Android akıllı telefonlar için Mostbet resmi web sitesi ve iOS cihazlar için App-store, her 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 ve hızlı bir şekilde bahis oynayabilirler. Mostbet’teki canlı casino, kullanıcıların bir video clip yayını aracılığıyla gerçek zamanlı krupiyelerle casino oyunları oynamasına olanak tanıyan bir özelliktir.

Mostbet’teki Oyun Sağlayıcıları

Basit tasarımı empieza 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. Bu Bahis Şirketi ayrıca heyecan verici Aviator oyununu weil sunmaktadır. Bu, spor etkinliklerine bahis oynamanın alternatif bir yolunu” “arayan müşteriler için benzersiz bir seçenektir. Bu oyunun arkasındaki fikir, sonucu önceden bilmeden hangi takımın ya da oyuncunun belirli bir maçı kazanacağını seçmektir. Bahis şirketi, müşterilerine en iyi değeri sağlamak için düzenli olarak ayarlanan fiyatlarla tüm spor dallarında rekabetçi oranlar sunar.

Dolayısıyla, Mostbet’te” “oynarken çeşitli eğlenceli seçenekler bulacağınıza güvenebilirsiniz. Mostbet ayrıca Amerikan, Avrupa ve Fransız gibi çeşitli rulet çeşitleri de sunmaktadır. Bu oyunlar gerçekçi grafiklerle gelir ve yarış pisti bahisleri empieza hızlı erişim için favori bahislerinizi kaydetme gibi ek özelliklere sahiptir. Mostbet ayrıca blackjack, rulet ve bakara gibi çeşitli masa oyunları da sunmaktadır.

Türkiye’de Mostbet’e Kayıt

Mostbet uygulaması resmi internet sitesinden veya iOS cihazlar için App Store’dan (Android cihazlar için) indirilebilir. Ayrıca, kullanılan ödeme yönteminin güvenliği ve emniyetinin yanı sıra tüm finansal ve kişisel verilerin gizliliğini assurée etmek çok önemlidir. Evet, Mostbet’te çeşitli uluslararası spor etkinliklerine bahis oynayabilirsiniz.

Bu bonus, kumarhaneye yönlendirdiğiniz ve para yatıran her arkadaşınız için verilir. Bu adımlardan sonra giriş yapacak ve yaklaşan tüm maçların ve oyunların sunulduğu ana sayfaya yönlendirileceksiniz. Bir bonusu kullanmadan önce, söz konusu teklif için geçerli olan hüküm ve koşulları okumak ve anlamak çok önemlidir.

Mostbet Türkiye Kumarhanesine Kayıt Ve Giriş

Uluslararası bahis” “şirketi Mostbet. com’un sah web sitesine, engellemeyi aşarak kolayca erişilebilir. Bunu yapmak için, trafik tasarrufu moduna sahip bir tarayıcı (Opera, Firefox) veya VPN hizmetleri kullanmanız gerekir. Ana sayfada, engelleme atlamalarının yanı sıra bahis şirketinin her zaman erişilebilir olduğu iOS empieza Android uygulamalarına bağlantılar içeren ek bir bölüm vardır. Mostbet APK indir işlemi, bahis platformunun sunduğu hizmetlerden sorunsuzca faydalanmak isteyenler için büyük öneme sahiptir. Android cihazlarınıza kolayca indirilebilen bu uygulama ile spor bahisleri, çeşitli canlı casino oyunları ve zengin slot machine seçeneklerine anında ulaşabilirsiniz. Ayrıca, uygulama üzerinden mevcut hesabınıza giriş yapabilir veya en yeni bir hesap oluşturabilirsiniz.

Bu bonus ile oyuncular Mostbet online casinoda kazanma şanslarını artırmak için paralarını önemli ölçüde artırabilirler. Mostbet-27 Bahis Şirketi ayrıca müşterilerine çeşitli bonuslar ve promosyonlar sunmaktadır. Site düzenli olarak hem spor hem de casino oyunlarında kullanılabilecek ücretsiz bahisler ve geri ödeme teklifleri gibi özel fırsatlar sunar. Mostbet platformu, kullanıcılarının karşılaştığı sorunlara hızlı empieza etkili çözümler sunmayı amaçlayan geniş bir destek ağına sahiptir. Bir avantaj olarak, kullanıcılara kolay bir giriş ve güncel giriş adresi sağlayarak erişim konusunda yaşanan sorunları minimize etmekte. Buna ek olarak, çeşitli bonuslar empieza promosyon kodları ile oyuncularını cezbetmekte.

Mostbet-27 Bahis Şirketi: Genel Bakış

Kullanılabilecekleri oyunlar veya bonus parayla kazanılabilecek maksimum miktar gibi bazı bonuslarda sınırlamalar olabilir. Mostbet bir oyuncuyla yaptığı finansal işlemlerin meşruiyetini sağlamak ve oyuncunun kurallara uygunluğunu doğrulamak için gereklidir. Örneğin, bir oyuncunun Mostbet yalnızca bir hesabı olmalıdır, kullanıcı 20 yaşından büyük olmalıdır. Bilgileriniz doğrulanmadan afin de yatıramaz, bahis oynayamaz, casino oynayamaz ya da para çekemezsiniz.

Ayrıca kullanıcılarına e-posta bültenleri, sosyal medya hesapları ve çeşitli iletişim kanalları üzerinden yeni adresleri iletir. Bu sayede, üyelerin platforma erişim i?in en ufak bir tereddüt yaşamadan, güvenli ve hızlı bir şekilde giriş yapabilmeleri sağlanmış olur. Platform; kullanıcı dostu arayüzü ile güncel adres üzerinden giriş yapan herkesin memnuniyetini en üst düzeyde tutmayı hedefler. Mostbet Aviator, basit kuralları ve yüksek kazanma olasılığı nedeniyle resmi internet sitemizdeki en popüler oyunlardan biridir. Oynamak için uçak uçmaya başlamadan önce bahis yapmanız ve artan oranları izlemeniz gerekir. Kontrol panelinde, aynı anda iki bahis yapma seçeneğiniz vardır ve ayrıca otomatik bahis özelliğini de” “seçebilirsiniz.

Masa Tenisi

MostBet, “kendi” bölgelerinde objektif bir fayda elde ederken, önde gelen uluslararası bahisçilerle rekabet edebilir. Türkiye’den müşteriler için, internet sitesinin tüm bölümlerinin kendi ana dillerine tam bir çevirisi vardır ve yerel para biriminde hesap açma ve bahis yapma olanağı vardır. Aşağıda, söz konusu bahis şirketinin gerçek müşterilerinden gelen referanslar yer almaktadır. Hoş Geldin Bonusuna ek olarak, Mostbet mevcut oyuncular için yeniden yükleme bonusları weil sunmaktadır.

Mostbet’e para yatırmak ve çekmek için öncelikle çevrimiçi spor bahisleri kuruluşunda bir hesap oluşturmanız gerekir. Para yatırma empieza çekme için kesin prosedür, kullandığınız platforma veya cihaza ve mevcut ödeme seçeneklerine göre farklılık gösterebilir. Mostbet spor bahisleri, spor etkinliklerinin veya oyunlarının sonucu üzerine bahis yapma faaliyetini ifade eder. Bir spor bahisleri organizasyonu olan Mostbet, kullanıcılara futbol, basketbol, ping-pong ve diğerleri gibi bir dizi spor dalında bahis yapma şansı sağlayacaktır. Moneyline, point spread ve over/under gibi geleneksel bahislerin yanı sıra bireysel oyuncu ya da takım performansına dayalı daha spesifik prop bahisleri de mümkündür. Evet, Mostbet Bahis Şirketi müşterileri arasında mükemmel bir üne sahiptir.

Para Yatirmadan Bonus

Evet, Mostbet hesabınıza pra yatırmak için kripto para cüzdanı Bitcoin, Ether, USDT, Dogecoin, Dash’i kullanabilirsiniz. Bir oyuncunun sanal slot machine game makinesinin arayüzüne alışması veya kumar bileşeni olmadan oynaması için bir demo hesabı gereklidir. Yükleme” “düğmesi (aynı zamanda mevcut bakiyeyi de gösterir), çeşitli ödeme sistemleri içeren yükleme penceresini açar. Bunlardan herhangi birini seçerseniz, yatırmak istediğiniz tutarı seçebileceğiniz bir ekran göreceksiniz. 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.

Mostbet uygulamasının kullanıcıları, uygulamanın basit ve güvenli ödeme yöntemleri sayesinde hızlı bir şekilde pra yatırabilir ve çekebilir. Ek olarak, site, tüketicilere sahip olabilecekleri herhangi bir soru veya sorunla ilgili yardımcı olmak için 7/24 müşteri yardımı sağlar. Para çekme işlemi, hesaba pra yatırma işlemi sırasında kullanılan yöntemle gerçekleştirilir.

Mostbet On Line Casino Promosyonları

Bu oyunlar gerçekçi grafiklere sahiptir ve size mümkün olan en iyi oyun deneyimini sunmak için tasarlanmıştır. Ayrıca, kazancınızı önemli ölçüde artırabilecek dolar topu ikramiyeleri ve aşamalı ikramiyeler gibi reward özelliklerle birlikte gelirler. Ayrıca bahis oynayabileceğiniz daha az bilinen birçok spor dalı da vardır.

Şirket 2008 yılında kuruldu ve this year yılında Türkiye online kumar pazarına giriş yaptı. Bu süre zarfında şirket ismini değiştirme gereği duymadı ve büyük bir skandala karışmadı. Bu lisans, İtalyan veya İspanyol lisanslarına kıyasla daha kolay alınabilir, ancak bu zayıflık diğer faktörlerle dengelenmektedir. Mostbet İngilizce, İspanyolca, İtalyanca, Fransızca, Portekizce dahil olmak üzere bir dizi dili desteklemektedir. Yani, nereden olursanız olun, bu bahis sitesini kendi ana dilinizde kullanabileceksiniz. Eğer bir tenis hayranıysanız, Mostbet bahislerinizi yapmak için ideal bir yer olacaktır.

Mostbet’e Şimdi Kaydolun!

Promosyon Kodları çeşitli spor bahisleri ve bahis siteleri için mevcuttur, bu nedenle herhangi bir bahis oynamadan önce en iyi fırsatları kontrol ettiğinizden emin olun. Kullanıcıların çok sayıda spor etkinliği ve müsabakası üzerine bahis oynamasını sağlar. Şirketin canlı bahis, maç öncesi bahis ve sanal spor bahisleri gibi bir dizi bahis alternatifi sunması beklenmektedir. Mostbet, kullanıcılara karşılaşabilecekleri her türlü sorunda yardımcı olmak için Canlı Sohbet, E-posta ve Telegram aracılığıyla 7/24 müşteri desteği sağlar. Ayrıca internet 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. Ekibe 7/24 ulaşılabilir empieza e-posta, telefon ya da canlı sohbet yoluyla ulaşılabilir.

Oyun, dinamik oranlara sahiptir ve oranlar lehinize olduğunda kazancınızı hızlı bir şekilde artırmanıza olanak tanır. Ayrıca, oyun birkaç farklı oyun seviyesi sunar empieza hatta nakit ödüllü liderlik yarışmalarına sahiptir. Bu Bahis Şirketi ayrıca müşterilerine çeşitli heyecan verici on line casino oyunları da sunmaktadır.

Mostbet’te Ücretsiz Bahisler

Türkiye için ayrı bir alan yoktur – çeviri sürümünü değiştirmek, ekranın üst kısmındaki simgeler arasında geçiş yaparak yapılır, bu da ekran görüntüsünde açıkça görülebilir. Mostbet, dünyanın çoğu ülkesinde faaliyet gösteren uluslararası bir bahis şirketidir. Yıllar geçtikçe, çevrimiçi kumar platformumuz kullanıcılar arasında mükemmel bir ün kazanmıştır. Evet, mobil cihazınızda, mobil duyarlı web sitesi aracılığıyla ya da hem Android hem de iOS cihazlar için mevcut olan Mostbet uygulamasını indirerek oyunlarımızda kumar oynayabilirsiniz.

Mostbet ayrıca Klasik Bakara, Mini Bakara ve Yüksek Limitli Bakara gibi çeşitli bakara çeşitleri de sunmaktadır. Mostbet bonus para çekme bonus fonları, belirli bir bonus ya da promosyonda belirtilen şartlara göre çekildikten sonra ana hesaba aktarılırsa mümkündür. Mostbet, balompié, kriket, basketbol, ping-pong ve daha pek çok popüler spor da dahil olmak üzere çok çeşitli spor bahis seçenekleri sunmaktadır.

Mostbet’te Hoş Geldin Bonusları

Böylece, bu platformun sunduğu tüm eğlencenin tadını çıkarabilirsiniz. Daha fazla rahatlık için bu popüler kripto para birimini kullanarak para yatırma ve çekme işlemleri yapabilirsiniz. Mostbet ayrıca Jacks or Much better, Aces and Looks, Deuces Wild ve daha fazlası gibi popüler video online 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 ?ok rahatlık için bu oyunları hem masaüstü hem de mobil cihazlarda oynayabilirsiniz.

Yeni Türk oyunculara 2. five-hundred TL + two hundred and fifty FS’ye kadar ilk para yatırma işleminde hoşgeldin bonusundan yararlanmalarını tavsiye” “ediyoruz. Canlı Mostbet casino, ekranlar aracılığıyla en ba?ar?l? krupiyelerle gerçek parayla oyun oynama fırsatı sunar. Sitemiz, dünyanın yasal yazılım sağlayıcılarından bir eğlence koleksiyonuna sahiptir. Herhangi bir müşterisi, bahis şirketinin yönetimine ilgili bir talep gönderdikten empieza yapılan tüm bahisleri oynadıktan sonra hesabını silebilir. Mostbet ayrıca oyuncuların yaptıkları the girl bahis için puan kazanabilecekleri bir Sadakat Programına sahiptir. Bu puanlar daha sonra nakit para, ödüller ve daha fazlası için kullanılabilir.

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