Mostbet Internet Casino Türkiye ️ Sah Web Sitesi Reward 2500 Tl & 250 Fs

Güncel Giriş Adresi, Hoşgeldin Bonusu

Güvenlik ve kullanıcı gizliliği de Mostbet’in önem verdiği konulardan biridir. Platform, kullanıcı bilgilerini güvenli bir şekilde korur ve gizlilik politikalarına sıkı sıkıya bağlı kalarak kullanıcıların kişisel verilerinin güvende olduğunu sağlar. Ayrıca, güvenilir ödeme yöntemleri sunarak para yatırma ve çekme işlemlerini kolaylaştırır. Bu reward, kayıt işlemi tamamlandıktan sonra hesabınıza yapılan ilk para yatırma işleminden elde edilen bir bonus tutarıdır.

Bu özellik Mostbet oyun içi bahis olarak bilinir ve birçok spor etkinliği için mevcuttur. Mostbet’in müşteri destek temsilcilerine Mostbet Tweets, Telegram, Facebook ve Instagram gibi popüler sosyal medya platformlarından kolayca erişilebilir. Mostbet Telegram kanalı, müşteri destek ekibine anında ulaşmak isteyen kullanıcılar için önerilen seçenektir.

Mostbet Giriş Türkiye (mostbet Casino)

Müşteri desteği konusunda da iddialı olan Mostbet, 7/24 erişilebilen bir destek hizmeti sunar. Kullanıcılar, her türlü soru ve sorunları için canlı sohbet, e-posta veya telefon yoluyla destek ekibiyle iletişime geçebilirler. Mostbet kayıt süreci, platformun yasal gerekliliklere uymasını empieza kullanıcı verilerinin korunmasını garanti altına almaya” “yardımcı olan hesap doğrulama adı verilen önemli bir adım içerir. Evet, Mostbet’te çeşitli uluslararası spor etkinliklerine bahis oynayabilirsiniz. Ayrıca, belirli sporların empieza etkinliklerin canlı yayınını da sunarlar, böylece aksiyonun hiçbirini kaçırmazsınız. Mostbet İngilizce, İspanyolca, İtalyanca, Fransızca, Portekizce dahil olmak üzere bir dizi dili desteklemektedir mostbet.

Mostbet sitesinin ana sayfasında yer alan menülerde promosyon linkini tıklayarak tüm geçerli olan promosyonların listesine ulaşılabilmektedir. Ayrıca disiplinli, planlı empieza programlı çalışan Many bahis sitesi tarafından tüm promosyonlara özel ayrı bir kod verilmiştir. Size uygun olduğunu düşündüğünüz promosyon kodunu ya da bonus ismini canlı destek ekibindeki kişilere iletmeniz durumunda, eğer geçerli koşulları de uma sağlıyorsanız anında hesabınıza devredebilmektesiniz. Mostbet şikayetler konusu, kullanıcıların platformda yaşadıkları olumsuz deneyimlerin kayda geçirilmesi ve çözüm yollarının araştırılması açısından büyük önem taşır. Mostbet bahis empieza casino platformuna yönelik şikayetler genellikle ödeme işlemlerinin gecikmesi, hesap erişim problemi veya müşteri hizmetleri ile yaşanan iletişim sorunlarından kaynaklanmaktadır. Kullanıcılar genellikle bu tarz sorunlarla karşılaştıklarında, hem çözüm bulma hem sobre benzer sorunlar yaşayan diğer kullanıcılarla bilgi paylaşma ihtiyacı hissederler.

Online Bahis Yapmak Için Mostbet’i Tercih Etmek Ne Gibi Avantajlar Sağlar?

Çekim işlemlerinizi sobre 24 saat içerisinde dilediğiniz vakit gerçekleştirebilirsiniz. Yukarıdaki bilgiler doğrultusunda genel olarak Mostbet, güvenilir bahis sitelerinden biri olup, hızlıca büyümekte ve en yeni üyeler kazanmaktadır. Bonus sayısı sektördeki diğer sitelere kıyasla çok daha az olsa” “weil sunulan hizmet kaliteli ve güvenilirdir. Bu inceleme ve değerlendirmeleri kendiniz yorumlayarak üyelik oluşturabilir ve hizmetten yararlanabilirsiniz.

Mostbet Türkiye, para oyunları ve eğlence alanında hizmet veren bir şirkettir ve tüm yeni kullanıcıları hoşgeldin bonusuyla karşılamaktadır. Hesap oluşturduktan sonra promosyon kodunu kullanarak hoşgeldin bonusunu alabilirler. Bu bonus, oyuncuların bahislerinde daha yüksek dinamiklere ve karlara sahip olmalarını sağlar, aynı zamanda kişisel fonlarını kaybetme riskini de azaltır.

Mostbet Yorumları

Kullanıcılar istedikleri şekilde kolayca para yatırabilir” “ve çekebilirler. Parayı hesabınıza almak için herhangi bir uygun afin de yatırma yöntemini kullanabilirsiniz. Mostbet, bilgisayar, laptop computer, tablet gibi cihazlarda mükemmel bir şekilde çalışan ve kaliteli hizmet sunan bir casino websitesidir.

Bonusu, the girl biri için 1 ) 40’dan başlayan oranlarla en az three or more etkinlik için ekspres ile geri kazanmanız gerekir.”

Bir Mostbet Hesabını Nasıl Oluşturabilirim?

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 en son teknoloji güvenlik önlemlerini kullanır. Mostbet’in geçerli bir lisansa sahip meşru bir spor bahis platformu olduğundan emin olabilirsiniz. Sürekli olumlu değerlendirmelerimiz, geniş spor seçeneklerimiz, güvenilir ödeme sistemimiz ve duyarlı müşteri desteğimiz gibi hizmetlerimizin kalitesini yansıtmaktadır. Bu nedenle, Mostbet Türkiye’nin yeni ziyaretçileri için sunduğu ilk para yatırma işleminde anında %100 bonus fırsatını kaçırmamak önemlidir. Bu teklifin maksimum tutarı, hesaplarına 2300 TRY ve two hundred fifity ücretsiz dönüş ile toplamda ulaşabilir. Promosyon teklifi hesaba aktarıldıktan sonra bir hafta boyunca geçerlidir.

Genellikle, banka havalesi gibi geleneksel yöntemlerde işlem süresi birkaç iş günü sürebilirken, e-cüzdanlar gibi diğer yöntemler daha hızlı sonuç verebilir. E-postanızdaki talimatları takip ederek hesabınızı doğrulayabilirsiniz. Doğrulama işlemi tamamlandığında, başarılı bir şekilde kayıt olmuş olacaksınız. Yetkilendirme sırasında herhangi bir hata oluşursa, şifreyi geri yüklemeyi deneyin.

Mostbet’te Uluslararası Spor Etkinliklerine Bahis Oynayabilir Miyim?

Mostbet casino’da gerçek bir casino deneyimi yaşayabilir ve ayrıca sanal sporlarla eğlenceli zaman geçirebilirsiniz. Öncelikle güvenilir ve lisanslı bir ödeme yöntemi kullanmanız önemlidir. Ayrıca, her ödeme yönteminin kendi kuralları empieza işlem süreleri olabileceğini unutmayın.

Mostbet bahis sitesinde kullanıcılara hitap eden ve onlara iyi bir hizmet sunan canlı destek ekibi vardır. Bu canlı destek ekibi bahis sitesinin ana sayfasında kullanıcılara her sewaktu hizmet vermektedir. Ancak Mostbet’in oranlarına göz attığımızda çok da yüksek oranlar sunduklarını söyleyemeyiz. Oranlar piyasadaki önemli sitelerin sunduğu” “oranlar son derece düşüktür.

Most Bet Web Sitenin Karakteri?

Bu oyunlar, hem eğlenceli hem de kazançlı bir deneyim arayan oyuncular için idealdir. Ayrıca, blackjack, rulet, poker gibi klasik online casino oyunlarını da içeren Mostbet, tüm zevklere hitap eden bir platform sunmaktadır. Bu özellik, aksiyonu olduğu gibi izlemenize olanak tanır ve sizi en son skorlar ve sonuçlarla güncel tutar.

Bu sayede olası sorunlar çabucak çözüme kavuşturularak kullanıcıların güveni kazanılmaya çalışılmaktadır. Mostbet bahis ve casino sitesi kullanıcılarından gelen yorumların başında Mostbet giriş yapamıyorum ve Mostbet güncel adresi nedir? Bizler de Mostbet giriş sorununun neden kaynaklandığı ve güncel adresin ne olduğunu açıklamak amacıyla bu yazıyı kaleme aldık.

Mostbet’te Bonuslar

Üyeler düzenli olarak ücretsiz dönüşler ve ücretsiz bahisler kazanabilirler. Ayrıca, harcadıkları süre süresince işlem miktarının %10’u kadar haftalık geri ödeme alabilirler. Adınız, soyadınız, e-posta adresiniz, kullanıcı adınız, şifreniz gibi bilgileri doğru ve eksiksiz bir” “şekilde doldurmanız önemlidir.

Slots alanında ise gerçek Casino da yer alan tüm oyunları bulabilir, teknolojinin boy imkanları kullanılarak hazırlanan gerçekçi görüntü ve ses efektleri ile oldukça keyifli zaman geçirebilirsiniz. Profesyonel ekip, müşteri şikayetleri i?in titiz bir yaklaşım sergileyerek, sorunlara adil ve hızlı çözümler üretmeye odaklanmıştır. Evet, Mostbet hesabınıza para yatırmak için kripto para cüzdanı Bitcoin, Ether, USDT, Dogecoin, Dash’i kullanabilirsiniz. Bir kumarhane ne kadar çok ödeme sistemine güvenirse, o kadar güvenilirdir.

Mostbet Üyelik Süreci: Adım Adım Kılavuz

Bazı kullanıcılar, özellikle ödeme yöntemleri konusunda yaşadıkları sıkıntıları dile getirirken, Mostbet giriş adresi değişikliğinin sebep olduğu erişim problemleri de şikayetler arasında sıkça yer alır. Sitenin güncel giriş adresinin sıklıkla değişmesi, kullanıcıların platforma ulaşımında kafa karışıklığına yol açmakta ve bu durum platform hakkında olumsuz görüşlerin artmasına neden olmaktadır. Erişim sorunları, kullanıcıların bahis yapma ve oyun oynama keyfinden mahrum kalmasına sebebiyet vererek memnuniyetsizliği artırabilir.” “[newline]Bu entegrasyon, Mostbet’in müşteri odaklı yaklaşımını empieza erişilebilirliğini öne çıkaran bir özellik olarak dikkat çeker. Kullanıcı memnuniyetini artırmayı amaçlayan bu adım, on-line bahis sektöründe teknolojinin sunduğu olanakların nasıl kullanılabileceğinin iyi bir örneğidir.

Öncelikle, Mostbet’in canlı yardım hizmeti durante hızlı çözüm yollarından biridir. Web sitesinde yer alan canlı sohbet özelliği, haftanın 7 günü 24 saat boyunca hizmet vermektedir. Bu sayede, herhangi bir sorun ile karşılaştığınız kita anında profesyonel yardım alabilirsiniz. Most bet, kullanıcılarına günün the girl saatinde müşteri hizmetleri desteği sunmaktadır. Ayrıca aşağıdaki mail adreslerini kullanarak da Mostbet’e ulaşabilirsiniz. Most gamble bahis firmasına para yatırmak için 20 liralık cepbank işlemi yapabilirsiniz.

Mostbet Heylink

Peki, Mostbet Türkiye web sitesi hakkında daha fazla bilgiye sahip misiniz? Mostbet online on line casino, Türkiye’deki oyuncular için hızlı, kolay ve güvenli para yatırma ve çekme işlemleri sunar. Bu amaçla, son derece güvenli olan ve kullanıcılar için basit bir ödeme yöntemi sunan popüler ödeme sistemleri kullanılmaktadır.

Bu hızla gelişen bahis dünyasında, anlık bilgilere erişim sağlamak ve güncel gelişmelerden haberdar olmak büyük önem taşımaktadır. Mostbet’in Telegram kanalı ise bu ihtiyaca profesyonel bir çözüm sunarak üyelerine değer katmaktadır. 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ı eighteen yaşından büyük olmalıdır. Bilgileriniz doğrulanmadan para yatıramaz, bahis oynayamaz, casino oynayamaz veya para çekemezsiniz. Mostbet’teki spor bahisleri bölümü, en popüler olanlardan (futbol, hokey, ping-pong, basketbol) sıra dışı olanlara (araba yarışı, at yarışı, köpek yarışı) kadar 33 farklı sporla çok geniştir.

Mostbet Hoş Geldi̇n Bonuslari

Büyük bahis yapmak isteyen oyuncular için bir VIP bölümü de bulunmaktadır. Mostbet. com 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 machine yok). Web sitesi ve 25 dile çevrilmiş resmi cep telefonu uygulamaları ile 93 ülkede faaliyet göstermektedir.

Yatırımlarınızı empieza şansınızı denemek istediğinizde, bağlantı sorunları yaşamamak adına, Mostbet güncel giriş adresi ne olduğunu düzenli olarak kontrol etmeniz yararınıza olacaktır. Bunun için, Mostbet’in resmi Telegram grubuna katılmak veya diğer güvenilir bilgi kaynaklarından faydalanmak en iyi yöntemlerden biridir. Giriş adresi değişikliklerinin hemen ardından güncel bilgiler bu kanallar aracılığıyla paylaşılmaktadır. Yurt dışı bahis siteleri dünyada rahat ve sorunsuz bir şekilde hizmet verirken ülkemizde bu durum böyle olmamaktadır.

Mostbet Aviator Oyunu

Mostbet spor bahisleri ve on line casino oyunları konusunda çeşitli avantajlar sunan bir platformdur. Geniş oyun seçenekleri, güvenilirlik, kullanıcı gizliliği ve added bonus fırsatları gibi faktörler, Mostbet’i tercih eden kullanıcılara keyifli ve kazançlı bir deneyim yaşatmaktadır. Para çekme yöntemleri kullanıcıların tercihlerine göre değişebilir empieza ülkelere göre farklılık gösterebilir. Bu nedenle, Mostbet’in resmi net sitesini ziyaret ederek mevcut para çekme seçeneklerini kontrol etmeniz önemlidir. Mostbet kaçak bahis sitesi 2016 yılının son aylarında hizmete girmiş olmasına rağmen oldukça detaylı, titiz ve özenli bir şekilde hazırlanmış sitelerden biridir. Most bet mobil tıpkı Mostbet’in internet sitesi gibi özenle hazırlanmış bir uygulamadır.

Mostbet, kullanıcı geri bildirimlerine değer veren ve bu yorumları iyileştirme fırsatı olarak gören bir yapıya sahiptir. Elbette, herhangi bir online program gibi, Mostbet sobre bazı kullanıcı şikayetleriyle karşılaşabilir. Ancak, bu şikayetlerin nasıl ele alındığı ve çözüme kavuşturulduğu, sitenin müşteri hizmetleri kalitesini empieza güvenilirliğini gösterir. Online bahis” “empieza casino dünyasında erişim engelleri, oyuncular için yaygın bir sorundur. Bu nedenle, Mostbet’in güncel giriş adresinin sürekli olarak güncellenmesi ve kullanıcılara duyurulması büyük önem taşır.

Mostbet Spor Bahisleri Promosyonları

E-cüzdanlar, hızlı empieza kolay bir şekilde para çekmek isteyen kullanıcılar için ideal bir seçenektir. Skrill, Neteller ve ecoPayz gibi e-cüzdanlar, Mostbet tarafından desteklenen ödeme yöntemlerindendir. Kullanıcılar, e-cüzdanlarına kazandıkları paraları aktarabilir ve daha sonra bu parayı banka hesaplarına veya kredi kartlarına transfer edebilirler. Müşterilerine geniş bir bahis seçeneği sunmanın yanı sıra, düzenli olarak bonus ve promosyonlar da sunar. Bu şekilde kullanıcılar daha ?ok kazanma şansı elde ederken aynı zamanda daha eğlenceli bir deneyim yaşarlar.

Spor bahislerine giriş yapanlara özel olarak %25 hoş geldin bonusu 500 TL’ye kadar ulaşabilmektedir. Bir de asıl bomba hoş geldin paketi one 000TL değerinde olup, Netent’e ilk yatırım yapanlara sunulmaktadır. Most bet sitesindeki Online casino içerisinde Netent yatırımı gerçekleştirdiğinizde %20 oranında bonus alabilmektesiniz. Bu da demek oluyor ki minimum 20 TL maksimum 1 . 000 TL reward alınabilmektedir.

Mostbet Casino Oyunları

Mostbet’te her spor tutkununun ilgi alanına hitap eden geniş bir spor kategorisi yelpazesi sunuyoruz. Önde gelen spor bahis platformlarından biri olmaktan empieza yüksek kaliteli hizmetlerimiz ve kullanıcı dostu arayüzümüzle tanınmaktan gurur duyuyoruz. Canlı yayınlar düzenleyen onaylı canlı krupiyerlerimizle canlı on line casino oyunlarının heyecanını yaşayın.

Bu sorunun yanıtını verirken, sitenin lisanslı olup olmadığını ve kullanıcıların Mostbet şikayet durumlarını ele almak gerekmektedir. Evet, Mostbet ayrıca sanal spor bahisleri,” “eSpor bahisleri ve online casino oyunları gibi bir dizi başka hizmet de sunmaktadır. Böylece, bu platformun sunduğu tüm eğlencenin tadını çıkarabilirsiniz.

Mostbet Bonusları Ve Promosyon Kodları

Bu kolaylık ve esneklik, Mostbet’in kullanıcıları için sunduğu büyük avantajlardan sadece biridir. Bahis sitelerinin genellikle şikayetlerinin ana başlıkları izinsiz gönderilen mesajlar ve ya reklam mesajlarını istemiyorum gibi şeylerden oluşuyor. Bunun nedeni ise bahis sitelerinin kullanıcılara çok fazla mesaj atmasından dolayı ortaya çıkıyor. Ancak Mostbet bahis sitesini bu konuyla ilgili bir araştırdığımızda sitenin sms şikayetleri almadığını görüyoruz. Çünkü bahis sitesinin bu alanda kullanıcıları rahatsız edici smsler atmış olduğunu” “görseydik yorumlarda bu konuda şikayetler görebilirdik. Her alanda profesyonel hizmet veren Most bet adresi spor bahsi severler için para oldukça avantajlı empieza şanslı olabilecekleri bir sitedir.

Mostbet üyelik sürecinin en önemli aşamalarından birisi para, karşılaşabileceğiniz sorunlarda müşteri hizmetleri ile nasıl iletişime geçeceğinizdir. Mostbet, kullanıcılarına kesintisiz bir hizmet sunabilmek adına çeşitli iletişim kanalları aracılığıyla destek sağlar. Mobil cihazlar üzerinden Mostbet üyelik süreci bu kadar basit ve anlaşılırdır. Mobil uygulama sayesinde, dilediğiniz yerde ve zaman da bahislerinizi yapabilirsiniz.

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