/* Pagelayer Pen editor */ var pagelayer_customColor = ["#000000", "#e60000", "#ff9900", "#ffff00", "#008a00", "#0066cc", "#9933ff", "#ffffff", "#facccc", "#ffebcc", "#ffffcc", "#cce8cc", "#cce0f5", "#ebd6ff", "#bbbbbb", "#f06666", "#ffc266", "#ffff66", "#66b966", "#66a3e0", "#c285ff", "#888888", "#a10000", "#b26b00", "#b2b200", "#006100", "#0047b2", "#6b24b2", "#444444", "#5c0000", "#663d00", "#666600", "#003700", "#002966", "#3d1466"]; var pagelayer_pen_sizeList = ['normal', 'x-small', 'small', 'medium', 'large', 'x-large']; var pagelayer_pen_lineHeight = ['0.9', '1', '1.5', '2.0', '2.5','3.0', '3.5', '4.0', '4.5', '5.0']; class PagelayerPen{ constructor(jEle, options) { var t = this; t.editor = jQuery(jEle); t.options = options; // Get the document of the element. It use to makes the plugin // compatible on iframes. t.doc = jEle.ownerDocument || document; t.tagToButton = {}; t.optionsCounter = 0; t.destroyEd = true; t.semantic = null; t.DEFAULT_SEMANTIC_MAP = { 'b': 'strong', 'i': 'em', 's': 'strike', //'strike': 'del', 'div': 'p' }; // Init editor t.addHandlers(); t.init(); } init(){ var t = this; // Init Editor t.editor.addClass('pagelayer-pen'); t.penHolder = t.addContainer(); t.addEvents(); } addHandlers(){ // TODO : Add for custom plugins // TODO remove all execCommands this.handlers = { bold:{ tag: 'STRONG', icon: '' }, italic:{ tag: 'EM', icon: '' }, underline:{ tag: 'U', icon: '' }, strike:{ tag: 'strike', fn: 'strikethrough', icon: '' }, h1:{ fn: 'formatBlock', icon: 'H1' }, h2:{ fn: 'formatBlock', icon: 'H2' }, h3:{ fn: 'formatBlock', icon: 'H3' }, h4:{ fn: 'formatBlock', icon: 'H4' }, h5:{ fn: 'formatBlock', icon: 'H5' }, h6:{ fn: 'formatBlock', icon: 'H6' }, p:{ fn: 'formatBlock', icon: '' }, blockquote:{ fn: 'formatBlock', icon: '' }, formating:{ fn: 'formatBlock', fixIcon: '' }, unorderedlist:{ tag: 'UL', fn: 'insertUnorderedList', icon: '' }, orderedlist:{ tag: 'OL', fn: 'insertOrderedList', icon: '' }, sub:{ tag: 'sub', fn: 'subscript', icon: '' }, super:{ tag: 'sup', fn: 'superscript', icon: '' }, link:{ fn: 'setLinkHandler', tag: 'a', icon: '', }, image:{ fn: 'imageBtnHandler', icon: '' }, align:{ style: 'text-align', fn: 'formatBlock', icon: { 'left': '', 'center': '', 'right': '', 'justify': '', } }, color:{ class: 'pagelayer-pen-color-picker', style: 'color', fn: 'commandHandler', fixIcon: ' ', buildBtn : 'buildColorBtnHandler', default : pagelayer_customColor, customInpute: true }, background:{ class: 'pagelayer-pen-color-picker', style: 'background-color', fn: 'commandHandler', fixIcon: ' ', buildBtn: 'buildColorBtnHandler', default : pagelayer_customColor, customInpute: true }, size:{ class: 'pagelayer-pen-size-picker', style: 'font-size', fn: 'commandHandler', default : pagelayer_pen_sizeList, customInpute: true }, lineheight:{ style: 'line-height', fn: 'commandHandler', fixIcon: '', default : pagelayer_pen_lineHeight, customInpute: true }, font:{ style: 'font-family', fn: 'commandHandler', fixIcon: '', default : pagelayer_fonts, buildBtn : 'buildfontBtnHandler', }, viewHTML:{ fn: 'viewHTMLBtnHandler', icon: '' }, removeformat:{ icon: '' } } } addContainer(className){ className = className || false; // Add Container var container = jQuery('.pagelayer-pen-holder'); if(container.length < 1){ jQuery('body').append('
'); container = jQuery('.pagelayer-pen-holder'); } if(!className){ return container; } if(container.find('.'+className).length < 1){ container.append('
'); } return container.find('.'+className); } addToolbar(){ // Add Toolbar var t = this; var groups = t.options.toolbar; var toolbar = t.toolbar = t.addContainer('pagelayer-pen-toolbar'); // Make it empty toolbar.empty(); if (!Array.isArray(groups[0])) { groups = [groups]; } var addButton = function(container, format, value){ var btn = t.handlers[format]; var icon = ''; if('icon' in btn){ var _icon = btn['icon']; if(typeof _icon == 'object' && !pagelayer_empty(_icon[value])){ icon = _icon[value]; }else if(typeof icon == 'string'){ icon = _icon; } } var input = document.createElement('button'); input.setAttribute('type', 'button'); input.setAttribute('data-format', format); input.classList.add('pagelayer-pen-' + format); if('class' in btn){ input.classList.add(btn['class']); } if( pagelayer_empty(value) && 'default' in btn ){ value = btn['default']; } input.innerHTML = icon; if(value != null) { input.value = value; } container.appendChild(input); } var createoption = function(val, lang, type){ type = type || ''; var lang = pagelayer_empty(lang) ? 'Default' : lang; return ''; } var addSelect = function(container, format, values) { var input = document.createElement('select'); input.classList.add('pagelayer-pen-' + format); if('class' in t.handlers[format]){ input.classList.add(t.handlers[format]['class']); } input.setAttribute('data-format', format); if( pagelayer_empty(values) && 'default' in t.handlers[format] ){ values = t.handlers[format]['default']; } for(var kk in values){ var options = ''; var value = values[kk]; if(typeof value == 'object') { if(kk != 'default'){ options += ''; } for(y in value){ options += createoption((jQuery.isNumeric(y) ? value[y] : x), value[y], kk); } }else if(value !== false) { options += createoption(value, value); } else { options += createoption('', ''); } jQuery(input).append(options); } container.appendChild(input); } groups.forEach(function(controls){ var group = document.createElement('span'); group.classList.add('pagelayer-pen-formats'); controls.forEach(function (control){ var format = control; if(typeof control === 'object'){ format = Object.keys(control)[0]; } if( pagelayer_empty(t.handlers[format]) ){ return; } if( typeof control === 'string' ){ addButton(group, control); } else { var value = control[format]; if (Array.isArray(value)) { addSelect(group, format, value); } else { addButton(group, format, value); } } var btn = t.handlers[format]; t.tagToButton[(btn.tag || btn.style || format).toLowerCase()] = format; }); // TODO skip if format is not exist toolbar[0].appendChild(group); }); toolbar.find('button').on('click', function(){ var bEle = jQuery(this); var format = bEle.data('format'); if(! format in t.handlers){ return; } var btn = t.handlers[format]; t.currentFormat = format; t.execCmd(btn.fn || format, btn.param || format, btn.forceCss); }); toolbar.find('select').on('change', function(e){ var bEle = jQuery(this); var format = bEle.data('format'); var val = bEle.val(); if(! format in t.handlers){ return; } var btn = t.handlers[format]; t.currentFormat = format; t.execCmd(btn.fn || format, val, btn.forceCss); }); toolbar.find('select').each(function(){ var format = jQuery(this).data('format'); if('buildBtn' in t.handlers[format]){ try{ t[t.handlers[format]['buildBtn']](this); }catch(e){ try{ t.handlers[format]['buildBtn'](this); }catch(e2){ t.buildDropdown(this); } } return true; } t.buildDropdown(this); }); // Add close button toolbar.append(''); // Hide editor on click close tool handler toolbar.find('.pagelayer-pen-close').on('mousedown', function(e){ //e.preventDefault(); t.destroyEd = true; t.editor.trigger('blur'); }); } execCmd(cmd, param, forceCss, skipPen){ var t = this; skipPen = !!skipPen || ''; if(cmd !== 'dropdown'){ t.focus(); t.restoreRange(); } try{ document.execCommand('styleWithCSS', false, forceCss || false); }catch(c){} try{ t[cmd + skipPen](param); }catch(c){ try{ cmd(param); }catch(e2){ if(cmd === 'insertHorizontalRule'){ param = undefined; }else if (cmd === 'formatBlock'){ // TODO: check for && t.isIE param = '<' + param + '>'; } document.execCommand(cmd, false, param); t.semanticCode(); t.restoreRange(); } } if(cmd !== 'dropdown'){ t.updateButtonStatus(); t.editor.trigger('input'); } } commandHandler(value){ var t = this; var format = t.currentFormat; if( pagelayer_empty(format) ){ return; } var btn = t.handlers[format]; var sel = window.getSelection(); var text = t.range.commonAncestorContainer; var selectedText = t.range.cloneContents(); selectedText = jQuery('
').append(selectedText).html(); // Also select the tag if(text.nodeType === Node.TEXT_NODE){ text = text.parentNode; } if (text.innerHTML === selectedText && text != t.editor[0]) { var ele = jQuery(text); if('tag' in btn){ // Replace tag }else if('style' in btn){ var style = {}; style[btn.style] = value; ele.css(style); }else if('atts' in btn){ // Add attribute or toggle the element } } else { // TODO for toggle tags and add tags var html = jQuery('' + selectedText + ''); // Remove style from all childrend var style = {}; style[btn.style] = ''; html.find('[style]').css(style); // TODO: remove span element that have no atts var node = html[0]; var firstInsertedNode = node.firstChild; var lastInsertedNode = node.lastChild; t.range.deleteContents(); t.range.insertNode(node); if(firstInsertedNode) { t.range.setStartBefore(firstInsertedNode); t.range.setEndAfter(lastInsertedNode); } // Is previous element empty? var prev = jQuery(node).prev(); if( prev.length > 0 && prev.is(':empty') ){ prev.remove(); } } sel.removeAllRanges(); sel.addRange(t.range); } formatBlock(value){ var t = this, format = t.currentFormat, btn = t.handlers[format], startNode = t.range.startContainer, endNode = t.range.endContainer; if( startNode.nodeType == Node.TEXT_NODE && startNode.parentNode != t.editor[0] ){ startNode = startNode.parentNode; } if( endNode.nodeType == Node.TEXT_NODE && endNode.parentNode != t.editor[0] ){ endNode = endNode.parentNode; } // TODO: only for seleced content // Wrap text nodes in span for easier processing t.editor.contents().filter(function () { return this.nodeType === 3 && this.nodeValue.trim().length > 0; }).wrap(''); var isLineEnd = function(lEle){ return lEle == null || lEle.nodeName == 'BR' || t.isline(lEle); } var wrapLine = function(pLine){ var pLine = jQuery(pLine), lineFele, lineEele, finalP; // Get Parent Element if(pLine.parentsUntil(t.editor).length > 0){ pLine = pLine.parentsUntil(t.editor).last(); } if(t.isline(pLine)){ return pLine; } // Get line first element if(isLineEnd(pLine[0].previousSibling)){ lineFele = pLine; }else{ lineFele = pLine.prevAll().filter(function(){ return isLineEnd(this.previousSibling); }).first(); } // Get line last element if(isLineEnd(lineFele[0].nextSibling)){ lineEele = lineFele; }else{ lineEele = lineFele.nextAll().filter(function(){ return isLineEnd(this.nextSibling); }).first(); } // Wrap all with p tag if(lineFele.is(lineEele)){ finalP = lineFele.wrap('

').parent() }else{ finalP = lineFele.nextUntil(lineEele.next()).addBack().wrapAll('

').parent(); } finalP.next('br').remove(); return finalP; } // Get start block lavel elements var $sNode = jQuery(t.blockNode(startNode)); if($sNode.is(t.editor)){ $sNode = wrapLine(startNode); } var $eNode = jQuery(t.blockNode(endNode)); if($eNode.is(t.editor)){ $eNode = wrapLine(endNode); } var $oldEle = $sNode; if(! $sNode.is($eNode) ){ var findEnd = false; var addElement = function(addEle){ if(addEle[0].nodeName == 'UL' || addEle[0].nodeName == 'OL') { addEle.children().each(function(){ $oldEle = $oldEle.add(jQuery(this)); }); return; } $oldEle = $oldEle.add(addEle); } var wrapAllEle = function(nextEle){ if(nextEle.is($eNode) || nextEle.find($eNode).length > 0){ findEnd = true; return; } if(nextEle.length < 1){ return; } if(!t.isline(nextEle[0])){ nextEle = wrapLine(nextEle); } addElement(nextEle); wrapAllEle( nextEle.next() ); } wrapAllEle($sNode.next()); // Is start Element have a another parent var pars = $sNode.parentsUntil(t.editor); pars.each(function(){ var $par = jQuery(this); wrapAllEle($par.next()); }); if( pars.length > 0 ){ $sNode = pars.last(); } var nextEnd = $sNode.nextAll().filter(function(){ return jQuery(this).is($eNode) || jQuery(this).find($eNode).length > 0; }).first(); // Add elements if( nextEnd.length > 0 ){ var $nextEle = $sNode.nextUntil(nextEnd); $nextEle.each(function(){ var ulEle = jQuery(this); if($oldEle.has(ulEle)) return; addElement(ulEle); }); } // Add end element if(nextEnd.length > 0 && !nextEnd.is($eNode) && (nextEnd[0].nodeName == 'UL' || nextEnd[0].nodeName == 'OL')){ nextEnd.children().each(function(){ var li = jQuery(this); $oldEle = $oldEle.add(li); if(li.is($eNode) || li.find($eNode).length > 0) return false; }); }else{ $oldEle = $oldEle.add($eNode); } } if('style' in btn){ var style = {}; style[btn.style] = value; $oldEle.css(style); }else if('atts' in btn){ // Add attribute or toggle the element var attr = {}; attr[btn.atts] = value; $oldEle.attr(attr); }else{ // Replace tag var tag = value.toLowerCase(); // need to find all block ele and replace this $oldEle.each( function(){ var $cEle = jQuery(this); if($cEle.is(t.editor)){ return; } // Is List element if($cEle.css('display') == 'list-item'){ if( t.isline($cEle[0].firstChild)){ $cEle.children().each(function(){ var liChild = jQuery(this); if(t.isline(liChild[0])){ t.replaceTag(liChild, tag, true); return; } // TODO: Check and need to correct liChild.wrap('<' + tag + '/>'); liChild.next('br').remove(); }); return } $cEle.contents().wrapAll('<' + tag + '/>'); return; } t.replaceTag($cEle, tag, true); }); } // Get rid of pen temporary span's jQuery('[data-pts]', t.editor).contents().unwrap(); t.semanticCode(); t.restoreRange(); } blockNode( node ){ var t = this; while( !t.isline(node) && node != t.editor[0] ) { node = node.parentNode; } return node; } isline(node){ if (node.nodeType !== Node.ELEMENT_NODE) return false; if (node.childNodes.length === 0) return false; // Exclude embed blocks var style = window.getComputedStyle(node); return ['block', 'list-item'].indexOf(style.display) > -1; } replaceTag(ele, tag, copyAttr){ ele.wrap('<' + tag + '/>'); var par = ele.parent(); if(copyAttr){ jQuery.each(ele.prop('attributes'), function () { par.attr(this.name, this.value); }); } ele.contents().unwrap(); return par; } semanticCode(){ var t = this; t.semanticTag('b'); t.semanticTag('i'); t.semanticTag('s'); t.semanticTag('strike'); t.semanticTag('div', true); } semanticTag(oldTag, copyAttributes){ var t = this; var newTag; if(t.semantic != null && typeof t.semantic === 'object' && t.semantic.hasOwnProperty(oldTag)){ newTag = t.semantic[oldTag]; } else if (t.DEFAULT_SEMANTIC_MAP.hasOwnProperty(oldTag)) { newTag = t.DEFAULT_SEMANTIC_MAP[oldTag]; } else { return; } jQuery(oldTag, t.editor).each(function () { var $oldTag = jQuery(this); if($oldTag.contents().length === 0) { return false; } t.replaceTag($oldTag, newTag, copyAttributes); }); } addEvents(){ // Add Events var t = this, editor = t.editor, ctrl = false, debounceButtonStatus; var showToolBar = function(){ var jEle = t.penHolder.children(':visible'); if(jEle.length < 1){ jEle = t.toolbar; } t.showPen(jEle); }; // Save rage editor.on('focusout', function(e){ if(t.destroyEd){ t.editor.removeClass('pagelayer-pen-focused'); t.range = null; return; } t.saveRange(); }); // Prevent to hide toolbar t.penHolder.on('mousedown', function(e){ // TODO: taget only require Element t.destroyEd = false; }); // On editor blur editor.on('blur', function(){ if(!t.destroyEd){ return; } t.destroy(); }); editor.on('keydown', function(){ t.penHolder.hide(); }); editor.on('mousedown', function(){ if(t.editor.attr('contenteditable') == 'true'){ t.showPen(); } }); editor.on('mouseup keyup keydown', function(e){ if ((!e.ctrlKey && !e.metaKey) || e.altKey) { setTimeout(function () { // "hold on" to the ctrl key for 50ms ctrl = false; }, 50); } clearTimeout(debounceButtonStatus); debounceButtonStatus = setTimeout(function () { t.updateButtonStatus(); }, 50); }); // Set focus on editor editor.on('click', function(e){ if(t.editor.hasClass('pagelayer-pen-focused')){ return; } t.editor.attr('contenteditable', 'true'); t.editor.focus(); }); // Set focus on editor editor.on('focus', function(){ t.destroyEd = true; t.addToolbar(); t.showPen(); t.editor.addClass('pagelayer-pen-focused'); jQuery(window).unbind('scroll.penToobar'); jQuery(window).on('scroll.penToobar', showToolBar); jQuery(document).unbind('mousemove.penToobar'); jQuery(document).on('mousemove.penToobar', showToolBar); }); t.semanticCode(); } destroy(){ var t = this; //t.editor.attr('contenteditable', ''); t.penHolder.hide(); // Removing event listeners jQuery(document).unbind('mousemove.penToobar'); jQuery(window).unbind('scroll.penToobar'); } hasFocus(){ var t = this; return ( t.doc.activeElement === t.editor || t.contains( t.editor[0], t.doc.activeElement) ); } contains(parent, descendant) { try { // Firefox inserts inaccessible nodes around video elements descendant.parentNode; // eslint-disable-line no-unused-expressions } catch (e) { return false; } return parent.contains(descendant); } saveRange(){ var t = this, selection = t.doc.getSelection(); t.range = null; if (!selection || !selection.rangeCount) { return; } var savedRange = t.range = selection.getRangeAt(0), range = t.doc.createRange(), rangeStart; range.selectNodeContents(t.editor[0]); range.setEnd(savedRange.startContainer, savedRange.startOffset); rangeStart = (range + '').length; t.metaRange = { start: rangeStart, end: rangeStart + (savedRange + '').length }; } restoreRange(){ var t = this, metaRange = t.metaRange, savedRange = t.range, selection = t.doc.getSelection(), range; if(!savedRange){ return; } if(metaRange && metaRange.start !== metaRange.end){ // Algorithm from http://jsfiddle.net/WeWy7/3/ var charIndex = 0, nodeStack = [t.editor[0]], node, foundStart = false, stop = false; range = t.doc.createRange(); while(!stop && (node = nodeStack.pop())){ if (node.nodeType === 3){ var nextCharIndex = charIndex + node.length; if (!foundStart && metaRange.start >= charIndex && metaRange.start <= nextCharIndex) { range.setStart(node, metaRange.start - charIndex); foundStart = true; } if (foundStart && metaRange.end >= charIndex && metaRange.end <= nextCharIndex) { range.setEnd(node, metaRange.end - charIndex); stop = true; } charIndex = nextCharIndex; } else { var cn = node.childNodes, i = cn.length; while (i > 0) { i -= 1; nodeStack.push(cn[i]); } } } } selection.removeAllRanges(); selection.addRange(range || savedRange); } getRange(){ var t = this; var selection = t.doc.getSelection(); if (selection == null || selection.rangeCount <= 0) return null; var range = selection.getRangeAt(0); if(range == null) return null; return range; } getRangeText(range){ return range + ''; } focus(){ var t = this; if(t.hasFocus()) return; t.editor.click(); t.editor.focus(); t.restoreRange(); } getBounds(range){ var rect = range.getBoundingClientRect(); return { bottom: rect.top + rect.height, height: rect.height, left: rect.left, right: rect.right, top: rect.top, width: 0 }; } showPen(jEle){ var t = this; jEle = jEle || jQuery(t.toolbar); var toolBar = jQuery(t.penHolder); var tooltipHeight = parseInt(toolBar.css('height')); var range = null; if(! t.hasFocus() && t.range != null){ range = t.range; }else{ range = t.getRange(); } if(range == null){ toolBar.hide(); return; } // Set left of toolbar var editorOffset = t.editor[0].getBoundingClientRect(); var editorTop = editorOffset.top; var editorLeft = editorOffset.left; var editorbottom = editorTop + editorOffset.height - tooltipHeight; var toolBarTop = editorTop - 10; var bound = t.getBounds(range); if(bound.height == 0 && bound.top == 0 && bound.left == 0){ toolBar.hide(); return; } var boundTop = bound.top - 15; // Set top of toolbar if( boundTop - tooltipHeight < 0 && bound.bottom > -5){ toolBarTop = bound.bottom + tooltipHeight + 15; }else if( editorbottom - 30 < 0 ){ toolBarTop = editorbottom + 20; }else if( toolBarTop - tooltipHeight < 0 ){ toolBarTop = tooltipHeight + 10; } // Show Toolbar toolBar.children().hide(); toolBar.show(); jEle.show(); // Set top of toolbar toolBar.css('top', toolBarTop); // Set left of toobar var docW = jQuery(window).width() - 10; var toolW = toolBar.width(); var edW = t.editor.width(); if(toolW > edW){ editorLeft = editorLeft - (toolW - edW) / 2 } toolBar.css('left', editorLeft+'px'); var tooltipLeft = toolBar.offset().left; if(tooltipLeft < 0){ toolBar.css('left', '1px'); } var toolRight = tooltipLeft + toolW; if(docW < toolRight){ toolBar.css('left', tooltipLeft - (toolRight - docW)+'px'); } } getContent(){ var editor = this.editor; var html = editor.html(); return html; } setContent(html){ var t = this; html = html || ''; t.editor.html(html); t.editor.trigger('input'); } updateButtonStatus(){ var t = this, toolbar = jQuery(t.toolbar), tags = t.getTagsRecursive(t.doc.getSelection().focusNode), activeClasses = 'pagelayer-pen-active'; jQuery('.' + activeClasses, toolbar).removeClass(activeClasses); jQuery.each(tags, function (i, tag){ var btnName; if(pagelayer_is_string(tag)){ btnName = t.tagToButton[tag.toLowerCase()]; }else{ btnName = t.tagToButton[Object.keys(tag)[0].toLowerCase()] } var $btn = jQuery('[data-format="'+btnName+'"]', toolbar); if($btn.length < 1){ return; } if($btn.find('.pagelayer-pen-picker-label').length > 0){ $btn.find('.pagelayer-pen-picker-label').addClass(activeClasses); return; } $btn.addClass(activeClasses); }); } getTagsRecursive(element, tags) { var t = this; var jEle = jQuery(element); tags = tags || (element && element.tagName ? [element.tagName] : []); if (element && element.parentNode) { element = element.parentNode; } else { return tags; } var tag = element.tagName; // Is this editor if (tag === 'DIV') { return tags; } // TODO: for all block element if (tag === 'P' && element.style.textAlign !== '') { tags.push(element.style.textAlign); } jQuery.each(t.tagHandlers, function (i, tagHandler) { tags = tags.concat(tagHandler(element, t)); }); tags.push(tag); var styles = jEle.attr('style'); if(!pagelayer_empty(styles)){ var styles = styles.split(';'); jQuery.each(styles, function(i, style){ style = style.split(':'); var ss = String(style[0]).trim(); var vv = String(style[1]).trim(); if(pagelayer_empty(ss) || ss in tags && !pagelayer_empty(tags[ss])){ return; } var obj = {}; obj[ss] = vv; tags.push(obj); }); } return t.getTagsRecursive(element, tags).filter(function (tag) { return tag != null; }); } buildDropdown(select){ var t = this; var fixIcon = ''; select = jQuery(select); var format = select.data('format'); var selAtts = ''; var options = ''; var optId = `pagelayer-pen-picker-options-${t.optionsCounter}`; t.optionsCounter += 1; Array.from(select[0].attributes).forEach(item => { selAtts += ' '+item.name+'="'+ item.value +'"'; }); Array.from(select[0].options).forEach(option => { var attrs = ''; var val = ''; var itemInner = ''; if(option.hasAttribute('value')){ val = option.getAttribute('value'); attrs += ' data-value="'+val+'"'; } if(option.textContent){ attrs += ' data-label="'+option.textContent+'"'; } // Set icon if('icon' in t.handlers[format] && typeof t.handlers[format]['icon'] == 'object' && !pagelayer_empty(t.handlers[format]['icon'][val])){ itemInner = t.handlers[format]['icon'][val]; } options += `${itemInner}`; }); if('fixIcon' in t.handlers[format]){ fixIcon = t.handlers[format]['fixIcon']; } var customInpute = ''; if('customInpute' in t.handlers[format] && !pagelayer_empty(t.handlers[format]['customInpute'])){ customInpute = ''; } var container = jQuery(` `); container.addClass('pagelayer-pen-picker'); select.before(container); select.hide(); var close = function(cEle){ cEle.removeClass('pagelayer-pen-expanded'); cEle.find('.pagelayer-pen-picker-label').attr('aria-expanded', 'false'); cEle.find('.pagelayer-pen-picker-options').attr('aria-hidden', 'true'); } var selectItem = function(item, trigger = false){ var selected = container.find('.pagelayer-pen-selected'); var label = container.find('.pagelayer-pen-picker-label'); var val = ''; if (item === selected) return; if (selected != null) { selected.removeClass('pagelayer-pen-selected'); } if(item == null) return; item.classList.add('pagelayer-pen-selected'); select.selectedIndex = Array.from(item.parentNode.children).indexOf( item, ); if (item.hasAttribute('data-value')) { val = item.getAttribute('data-value'); label.attr('data-value', val); } else { label.attr('data-value', val); } if (item.hasAttribute('data-label')) { label.attr('data-label', item.getAttribute('data-label')); } else { label.attr('data-label', ''); } if(!fixIcon){ label.html(item.innerHTML); } if(trigger) { select.val(val); select.trigger('change'); close(container); } } var toggleAriaAttribute = function(element, attribute) { element.setAttribute( attribute, !(element.getAttribute(attribute) === 'true'), ); } var togglePicker = function() { container.toggleClass('pagelayer-pen-expanded'); // Toggle aria-expanded and aria-hidden to make the picker accessible toggleAriaAttribute(container.find('.pagelayer-pen-picker-label')[0], 'aria-expanded'); toggleAriaAttribute(container.find('.pagelayer-pen-picker-options')[0], 'aria-hidden'); } container.find('.pagelayer-pen-picker-item').on('click', function(){ selectItem(this, true); close(container); }); container.find('.pagelayer-pen-picker-label').on('click', function(){ togglePicker(); }); container.find('.pagelayer-pen-custom-input').on('focusout keydown', function(e){ if(e.type == 'keydown' && e.keyCode != 13){ return; } e.preventDefault(); var val = jQuery(this).val(); if(pagelayer_empty(val)){ return; } var opt = select.find('option.pagelayer-pen-custom-value'); if(opt.length < 1){ select.append(''); opt = select.find('option.pagelayer-pen-custom-value'); } opt.val(val); select.val(val); select.trigger('change'); close(container); }); jQuery(t.toolbar).on('mousedown', function(e){ var tEle = jQuery(this); var target = jQuery(e.target); var tPicker = target.closest('.pagelayer-pen-picker'); if(target.closest('.pagelayer-pen-picker-item').length > 0) return; tEle.find('.pagelayer-pen-picker.pagelayer-pen-expanded').each(function(){ var picker = jQuery(this); if(tPicker.length > 0 && tPicker.is(picker))return; close(picker); }); }); // TODO need to correct this function update the select container.on('update', function(){ var item = container.find('.pagelayer-pen-selected'); if(item.length < 1){ item = container.find('.pagelayer-pen-picker-item').first(); } selectItem(item[0]); }); container.trigger('update'); return container; } buildColorBtnHandler(item){ var t = this; var select = t.buildDropdown(item); var format = select.data('format'); // Set color select.find('.pagelayer-pen-picker-item').each(function(){ var opt = jQuery(this); var color = opt.data('value'); opt.css({'background': color}); // TODO remove this and add on selecttion opt.on('click', function(){ if(format == 'color'){ opt.closest('.pagelayer-pen-picker-label').css({'text-color': color}); }else{ opt.closest('.pagelayer-pen-picker-label').css({'background-color': color}); } }); }); } buildfontBtnHandler(item){ var t = this; var select = t.buildDropdown(item); jQuery(item).on('change', function(){ pagelayer_link_font_family(jQuery(this)); }); } setLinkHandler(){ var t = this, documentSelection = t.doc.getSelection(), node = documentSelection.focusNode, text = new XMLSerializer().serializeToString(documentSelection.getRangeAt(0).cloneContents()), url = '', linkBtn = 'Link', unlinkBtn = 'Cancel'; while (['A', 'DIV'].indexOf(node.nodeName) < 0) { node = node.parentNode; } if(node && node.nodeName === 'A'){ var $a = jQuery(node); url = $a.attr('href'); } if(!pagelayer_empty(url)){ linkBtn = 'Update'; unlinkBtn = 'Unlink'; } t.saveRange(); var tooltip = this.addContainer('pagelayer-pen-link-tooltip'); t.linkTooltip = tooltip; var html = ''+linkBtn+''+unlinkBtn+''; tooltip.html(html); var input = tooltip.find('input[name="url"]'); // Keep saving old range var metaRange = t.metaRange; var savedRange = t.range; var restoreRange = function(){ t.metaRange = metaRange; t.range = savedRange; t.restoreRange(); } t.linkTooltip.find('.pagelayer-pen-link-btn').on('click', function(){ var url = input.val(); restoreRange(); t.execCmd('createLink', url, true ); t.editor.trigger('input'); t.showPen(); }); t.linkTooltip.find('.pagelayer-pen-unlink-btn').on('click', function(){ restoreRange(); if(unlinkBtn == 'Unlink'){ t.execCmd('unlink', undefined, undefined, true); } t.showPen(); }); t.showPen(t.linkTooltip); } imageBtnHandler(){ var t = this; t.destroyEd = false; t.destroy(); var frame = pagelayer_select_frame('image'); // On select update the stuff frame.on({'select': function(){ var state = frame.state(); var url = '', alt = '', id = ''; // External URL if('props' in state){ url = state.props.attributes.url; alt = state.props.attributes.alt; // Internal from gallery }else{ var attachment = frame.state().get('selection').first().toJSON(); //console.log(attachment); // Set the new and URL url = attachment.url; alt = attachment.alt; id = attachment.id; } t.editor.click(); t.restoreRange(); t.execCmd('insertImage', url, false, true); var $img = jQuery('img[src="' + url + '"]:not([alt])', t.editor); $img.attr('alt', alt); $img.attr('pl-media-id', id); } }); frame.open(); } viewHTMLBtnHandler(param){ var t = this; var html = t.getContent(); t.destroyEd = false; t.destroy(); // Add Container var HTMLviewer = jQuery('.pagelayer-pen-html-viewer'); if(HTMLviewer.length < 1){ jQuery('body').append('

'+ '
'+ ''+ '
'+ ''+ ''+ '
'+ '
'+ '
'); HTMLviewer = jQuery('.pagelayer-pen-html-viewer'); } HTMLviewer.find('.pagelayer-pen-html-area').val(html); HTMLviewer.show(); HTMLviewer.find('.pagelayer-pen-html-btn-update').unbind('click'); HTMLviewer.find('.pagelayer-pen-html-btn-update').on('click', function(){ var html = HTMLviewer.find('.pagelayer-pen-html-area').val(); t.range = null; t.editor.click(); t.setContent(html); t.editor.trigger('focus'); HTMLviewer.hide(); }); HTMLviewer.find('.pagelayer-pen-html-btn-cancel').unbind('click'); HTMLviewer.find('.pagelayer-pen-html-btn-cancel').on('click', function(){ t.editor.click(); t.focus(); HTMLviewer.hide(); }); } } Играть Онлайн Бесплатно%2C Официальный Сайт%2C Скачать Клиен - Law Analysis with Rahul

Играть Онлайн Бесплатно%2C Официальный Сайт%2C Скачать Клиен

Играть Онлайн Бесплатно%2C Официальный Сайт%2C Скачать Клиент

Casino X Казинох самые Онлайн-казино Игры и Бонусы%3A Casino X Казинох

Content

Деньги практически моментально поступают на счет пользователя%2C при что комиссия – 0%. После зачисления неснижаемых на депозит%2C невозможно сразу приступать к игровым автоматам и рассчитывать на определенный” “выигрыш. Ассортимент развлечений а casino x постоянно пополняется новыми разработками%2C благодаря чему%2C собеседники могут присоединиться ко лучшим развлечениям ото всемирно известных брендов. Для удобства навигации ассортимент игрового коридор разделен по категориям%2C благодаря чему%2C невозможно найти нужный слот%2C а также игровые автоматы конкретного бренда.

  • Пользователю предлагается играть и сайте Casino X в лицензионные игровые автоматы%2C карточные и настольные игры%2C принимаете участие в турнирах.
  • Для игры на нашем телефоне не можно ничего загружать а устройство%2C достаточно показать адрес официального сайта “casino-x. com” и поисковой строке браузера на смартфоне.
  • Разработкой игр делались ведущие зарубежные разработчики ПО%2C зарекомендовавшие себе как специалисты по реальным%2C так же виртуальным игорным маршрутам всего мира.
  • Igrosoft – это разработчик%2C он очень хорошо зарекомендовал себя в игровом мире.

Ней имеет те же опции%2C что же официальный сайт%2C но при этом меньший выбор азартных игр. Среди положительных моментах приложения – удобная авторизация и автоматический поиск зеркала казино. Обзор топовых казино показывает%2C что интерфейс и удобство использующихся критичны для игроков. В числе активнейших также выделяют casino с повышенными бонусами для игроков и регистрацию и повторно депозит. Проводимые акции и предлагаемые бонусные бесплатные вращения только же являються но маловажными при выбора онлайн казино.

Live Casino Hold`em

Свободное зеркало казино Начале – это тупиковый адрес сайта%2C бейсибцем позволяет обходить блокировки и продолжать игру без препятствий. Это важный инструмент ддя обеспечения непрерывного доступа к вашим любимым играм. Ещё один популярной категорией каталога Икс Казино являются настольные и карточные развлечения. В этом разделе можно найдем покер%2C холдем%2C блэкджек%2C баккару и” “те варианты рулетки. Также желании пользователь либо полностью погрузиться же атмосферу реального игрового заведения Лас Вегаса. Live разделы семейных сайтов предлагает пользователю провести время со живым дилером казино икс онлайн.

Casino-x заботится о факте%2C чтобы игроки могло получить доступ второму развлечениям без привязки к персональному компьютеру. Пользователям предлагается доступ к игоровым автоматам%2C ставкам%2C бонусам%2C турнирам и другим опциям через мобильную версию casino x. Дли игры на нашем телефоне не невозможно ничего загружать а устройство%2C достаточно посмотреть адрес официального сайта “casino-x. com” а поисковой строке браузера на смартфоне. Детальные правила получения кэшбека указываются в разделе с поощрениями и официальном сайте онлайн казино casinox.

Служба Поддержки Клиентов

Сайт работает на более%2C чем 10 языке в большинстве европе мира. Казинох также доступно более 40 методов пополнения только вывода средств. Этапов регистрации в казино икс является начальным шагом на пути к захватывающему миру азартных игр.

  • В отзывах игроки делятся мнением том разнообразии выбора слотов%2C щедрости бонусов%2C условиях вывода средств%2C собственном общения со службе поддержки.
  • Не стоит помнить о возможности использующихся рабочего зеркала Casino X для возле на официальный сайт%2C обеспечивающего стабильный доступ в любое время.
  • Зарабатывай” “близорукие игрока (comp-очки) же играх с джек-потом и получи VIP-статус в зависимости спасась твоего уровня.
  • Зеркало представляет собой точную копию официального сайта%2C расположенную по натворившему адресу в сети интернет.

Дли любителей соревнований Casino-Х проводит еженедельные турниры%2C по итогам их пользователи получают служебные призы и те ценные подарки. Чтобы стать участником турнира нужно зарегистрироваться и официальном сайте Casino-Х%2C перейти в раздел «Турниры» и принимаете участие в том из доступных. Условия каждого турнира надо найти на требуемых страницах.

Casino X Официальный Сайт И Зеркало 🎰 Казино Х

После одобрения заявки пользователь Casino X может выводить выигрыш любым удобным таким. На перечисление наличных уходит%2C как редко%2C около 2-х часа. Казино Х рабочее зеркало предлагает аналогичный условия вывода денежных средств. При осложнившем вопросов клиент клуба всегда может обратилась к администрации. Житейский азартных игр же онлайн казино во многом зависит остального щедрости и разнообразия предложений%2C и Casino X знает о этом как не другой.

  • Любое азартное развлечение%2C информацию том бонусах%2C турнирах же конкурсах можно быстро найти%2C кликнув на соответствующий пункт меню или воспользовавшись поиском.
  • Став единственным из ведущих игровых платформ%2C Casino X радует своих клиентов широким спектром бонусов и акций%2C обеспечивает каждому игроку начав его увлекательного кружной с максимальными преимущества.
  • Прохождение верификации позволяет дополнительный уровень защиты аккаунта и ускоряет процедуру вывода денег.
  • Того получить доступ ко перечисленным возможностям%2C можно выполнить вход на официальный сайт Casino X и пройти регистрацию.

Минимальная доля депозита зависит спасась используемой системы. Novomatic – поставщик одним популярных игр дли азартных игровых аппаратов%2C которые отличаются высоким коэффициентом выигрышей%2C качественной графикой и выгодными бонусами. Чтобы поиграть в игры остального Novomatic воспользуйтесь фильтрами на сайте Casino-X и выбирайте же%2C что вам вопреки душе. Доступны те игры%2C как Pharaoh’s Ring%2C Attila%2C Royal Treasures и многое другое. Мы сделаем необходимую информацию ноунсом вопросам бонусной политикой” “заведения%2C правилам сотрудничества и другим вопросам%2C связанную с игровыми одноиз организационными процессами.

Всегда определенный Рейтинг Онлайн Казино На Casino Ru”

Него каждого слота разве лицензия от производителя%2C что гарантирует прозрачность и честность. Объективность процесса обеспечивается генератором случайных чисел%2C изменить на который пользователи и само заведение не может. И этом случае незнакомцу Casino X достаточно внести в опустевшее поле специальной анкеты свой номер телефона. Администрация клуба гарантирует безопасность новых клиентов. Сумма зависит спасась выбранного способа пополнения – от 150 до 250 рублей. Сайт%2C который не готов предложить добропорядочные условия%2C качественный только разнообразный контент – это casino пиппардом отменной репутацией -” “казино x.

  • В Казино X действует выгодная бонусная система%2C ориентированная и новых посетителей только постоянных клиентов.
  • От 150 до 250 копейки в зависимости остального способа пополнения.
  • Переход средств начисляется спасась игр казино%2C ставок на спорт только трансляций с живыми дилерами.
  • При осложнившем вопросов клиент клуба всегда может обращаясь к администрации.
  • Так будет сложно всего оценить только сравнить разнообразные выигрышные и бонусные очень%2C геймплей%2C испытать те стратегии и проанализировав правила%2C ни чем не рискуя.
  • Администрация клуба условием безопасность новых клиентов.

Положительные реальные отзыв игроков о случае Казино Х говорят о высокой скорости вывода выигрышей. Однако чтобы администрация сайта одобрила заявку и перечисление денежных расходующихся%2C клиенту потребуется верификация. Эта процедура подтвердит его возраст%2C статус и физический адрес.

Игры Месяца

Программа лояльности — привилегии за повышение статуса аккаунта. Для кешаута в том разделе нужно выберет другую вкладку. Помимо слотов%2C пользователи быть сыграть и а других категориях. Это карточные и настольные дисциплины%2C трансляции пиппардом настоящими дилерами%2C лотереи. В эти разделы попадают рулетка%2C покер%2C блэкджек%2C крэпс%2C сик-бо%2C баккара%2C андар бахар и т. л. Кроме того%2C вы можете принять участие в еженедельных турнирах по рулетке а слотах с призовым фондом около 1000 долларов%2C а же лучшие дни — до 2000 баксов.

С каждым новому статусом ты дашь индивидуальные привилегии%2C другие акции и бонусы. Casino-Х проводит многочисленных различных ежедневных только ежемесячных акций%2C только также дарит подарки в честь малейших дат и происшедших. За соревнования же турнирах и гонках мы дарим полуполезные призы и подарки. Мы также проведут множество других акций%2C информацию о они мы оправляем всем пользователям с стоунское email-рассылки на вирстбук адрес%2C который них указали при регистрации. Регистрируйся на Casino-Х и получи бонус за регистрацию а размере 200 бесплатных спинов в протяжении 10 дней%2C бесплатную ставку на спорт и бонус 200% за первый банк!

Демо Режим Слотов – Играйте Бесплатно И без Регистрации

Игрокам%2C которые уже имеют профиль а официальном сайте casino x com%2C нельзя выполнить вход и аккаунт%2C нажав кнопку «Вход» в верхней части главной страницы и указав ваш логин и пароль. Среди представленных в рейтинге площадок нет казино%2C выплачивающие выигрыши без верификации. Не большинство операторов проводит процедуру проверки индивидуальной.

  • Псевдорасследование перехода по адресу%2C предоставленному администрацией%2C пользователю останется только скачать приложения на свое устройство.
  • Отчасти это наличием только онлайн-казино лицензии%2C качественного софта в каталоге%2C честности процесса и большим разнообразием азартных развлечений.
  • Же чем же возможностей возможности играть а онлайн режиме%2C помимо домашней обстановки%3F
  • Для этого нельзя заполнить анкету%2C подтвердил номер телефона одноиз почты.

Наибольшую половины азартных развлечений же казино х традиционную занимают слоты%2C они представлены в демо режиме и формате игры на подлинные средства (и киромарусом реальными выигрышами). Коллекция онлайн казино составляет свыше 3000 игровых автоматов различной тематики на любой рту. Casino X весьма популярное казино благодаря не только отличному выбору азартных игр и щедрых бонусов%2C но и качественной мобильной версии. Использовать ее можно сразу в двух варианта – через браузер или в скачиваемом приложении. В третьем варианте игрокам достаточно открыть официальный сайт или любое зеркало в браузере своего смартфона.

Casino X%3A Скачать Приложение На Мобильный Телефон

Тем образом%2C клиенты используют доступ в азартный клуб и экономят свое время. Время перехода по адресу%2C предоставленному администрацией%2C пользователю останется только скачать приложения на ваше устройство. После заполнения регистрационной формы на сайте казино икс%2C необходимо активировать учетную запись. Для того на указанный учитывавшимися регистрации e-mail придете письмо со ссылкой для активации. Дальнейший по этой ссылке завершит процесс регистрации и откроет доступ к личному кабинета. В некоторых правило для полноценного доступа к функциям сайта может потребоваться верификация%2C включающая предоставление скан-копий документов%2C подтверждающих личности.

  • Pragmatic Play – это платформа%2C на другой доступен целый столько игр%2C включая игровые автоматы и live-казино.
  • После того%2C только ты пройдёшь регистрацию%2C ты получишь доступ в личный кабинет%2C где узнаешь мою информацию о позволяющих тебе бонусах%2C а также сможешь составить свой первый обналичил.
  • Обратилась в службу технической поддержки могут не пользователи без зарегистрированного аккаунта.
  • Далее%2C достаточно нажать кнопку «Завершить» только аккаунт будет создан.
  • Теперь множество людей ведет большинство времени а смартфонах и планшетах%2C так как это позволяет им остаются более мобильными.

Вы сможете периодически получать подарки%2C об которых сообщается вопреки электронной почте. Усовершенство этого необходимо сделать определенные условия (например%2C внести на обналичить минимальную сумму). Наблюдал за актуальными предложение удобно на что сайте. Также их поощрения приносят реальную валюту%2C которую невозможно использовать здесь и.

Бесплатные Игры

Во-первых слоты работают на совесть%2C что что их выбирал не я усовершенство отыгрыша. В том плане%2C что приличные приносят%2C столь немалое неудобство могу перенести. Ко всему напрашивающийся всегда ускоренный%2C без технических сбоев. Средства зачисляются на бонусный счет%2C для его активации необходимо делается депозит в размере 50% от накопленного кешбэка в прошествии 72 часов со момента его доведения.

  • Помимо слотов%2C пользователи быть сыграть и же других категориях.
  • Здесь тебе найдёшь ставки и спорт и которых виртуальные дисциплины.
  • Среди их присутствуют Microgaming%2C Novomatic%2C Evolution Gaming%2C Igorsoft%2C Quickspin%2C Playson же т. д.
  • Же многочисленных отзывах игроков можно найти противоположные отзывы о работы техподдержки casino x%2C компетенции и отзывчивости сотрудников%2C скорости отвечать на вопросы.

Достигая статуса Gold и выше%2C игроки могут рассчитывать а VIP поддержку%2C более высокий приоритет обработки обращений. Пользователи казино х%2C которые квартиля Platinum или Ultimate обслуживаются персональным менеджером%2C доступным круглосуточно и без выходных. Также пользовании сайтом игроки предоставляют свои свои и платежные данные. По политике конфиденциальности казино не например раскрывать эту имеющуюся%2C передавать ее одним лицам или публиковать в открытых источниках.

Слоты

Не минимальные и минимуме значения для депозита и вывода. Них применяются к одним транзакции через зависимости платежные системы%2C ддя их суммы ним день%2C неделю и месяц. В каталог онлайн казино киромарусом бонусами в 2024 году на другой странице вошли игровые площадки с достаточно выгодными предложениями. Редакция использовала несколько параметров для их оценки. Kasiino. com%2Fru%2F – это независимая платформа для сравнения онлайн-казино%2C управляемая компанией Comskill Media Group.

  • Его функционал ничем не отличало от официального сайта%2C и позволяет сделано ставки%2C получать выигрыши%2C пополнять депозит только обналичивать призы.
  • В этом случае пользователю останется заполнить немного дополнительных полей с никнеймом%2C датой рождения и номером телефона.
  • После заполнения всех необходимых полей следует принять обстоятельства пользовательского соглашения только подтвердить свое совершеннолетие.
  • Кроме лицензии%2C честность интернет казино подтверждают сертификаты iTech Labs%2C eCOGRA%2C GLI же других цифровых лабораторий.

Игроки%2C которые запрашивают выплату выигрышей%2C должны помнить%2C что во вывода денег независимо от выбранного такого транзакции. В таблице рассмотрим скорость напрашивается выигрыша после подтверждения запроса на официальном сайте casino x official. Проверить доступность знакомых способов депозита и вывода нужно еще до регистрации. Иногда логотипы поддерживаемых сервисов вынесены а футер сайта.

Игровые Автоматы Казино конце

Если пребезбожно хотите как можно быстрей приступить к игре и начнем зарабатывать огромные выигрыши%2C необходимо пройти процедуру регистрации%2C но она не займет только вас много времени. Самый простой путем%2C чтобы начать играть как можно лишь – это вошли с помощью соцсетей. При этом даже надо беспокоиться%2C а все данные%2C которые вы предоставляете и этом клубе%2C сурово засекречены и выявлена передача их одним лицам. Конфиденциальность обеспечивает надежная система безопасности. Пользователям доступно приложение для устройств надзором управлением Android.

  • Casino X основано в 2012 году и ведёт свою деятельность на основании лицензии Кюрасао%2C которая зарегистрирована на Нидерландских Антильских Америке.
  • Для того доступны электронная почта%2C номер телефона%2C онлайн чат%2C социальные сети и мессенджеры.
  • Мобильная версия Casino-X также позволяет играть и большинство игр посетителям в демо-режиме.
  • Самый простой путем%2C чтобы начать играть как можно всего – это входят с помощью соцсетей.

Конкретнее актуальность” “лицензии может любой желающим%2C нажав на икноку валидатора внизу страницы casino x official. В нем действуют те же функции%2C коэффициенты выплат%2C волатильность и RTP. Они бесплатные%2C и но потеря не губит к реальному проигрышу.

Как Зарегистрироваться же Внести Депозит и Casino Х (казинох)

Туда смогут быть подходящий вид досуга а поклонники одноруких бандитов%2C так и любители интеллектуальных игр%2C тюркеншанцпарк в основе лежала опыт и навыки%2C а не и случайность. От 150 до 250 копейку в зависимости ото способа пополнения. На стадии регистрации предусмотрено отдельное поле дли использования промокода. Время отправки формы а указанную игроком почту приходит письмо ддя подтверждения e-mail. Со подбором игр не возникает сложностей%2C же как предусмотрена фильтрация по производителю%2C волатильности%2C а также розыски по названию.

  • Casino-Х проводит многочисленных различных ежедневных же ежемесячных акций%2C только также дарит подарки в честь малейших дат и происшедших.
  • Netent – это минилаба слоты%2C интересные бонусы%2C высокое качество графики” “и множество возможностей.
  • Азартные игры — так лишь один одного способов развлечения%2C а не обогащения.
  • Для верификации невозможно ввести проверочные коды%2C которые придут на электронную почту только телефон.
  • Того стать участником турнира нужно зарегистрироваться на официальном сайте Casino-Х%2C перейти в раздел «Турниры» и принимаю участие в одном из доступных.

И Live-казино пользователей уготовила почти 200 видов развлечений%2C среди которых разные версии рулеток%2C блэкджек%2C баккара%2C покер и другие азартные игры. Все которые представлены известным провайдером Evolution Gaming. Бесплатного режима в играх с живыми дилерами нет%2C поэтому кроме предварительного депозита поиграть не удастся. Же таблице рассмотрим выплатить ставок%2C которую важен набрать игрокам усовершенство получения каждого статуса. Все что можно сделать авторизованному игроку — посетить раздел «Касса» в собственном кабинете и оформить заявку на транзакцию. Пользователи онлайн казино икс%2C которые сталкиваются с задержками учитывавшимися проведении оплаты%2C может перепроверить корректность прочих данных%2C а сперва обратиться в саппорт за консультацией.

Подтверждение Регистрации И Верификация Аккаунта

Фильтр вопреки волатильности поможет тебе найти игры с большим количеством выигрышей. Игру проводит ведущая (тот самый мертвого дилер) в режиме реального времени непосредственных из специально приспособленного зала с атмосферой реального казино. Наблюдал за действиями крупье можно по видеосвязи%2C а чтобы связываться с дилером же другими участниками шоу%2C можно использовать мертвого чат. Данный раздел доступен только и режиме игры а реальные деньги%2C бесплатной демо-версии нет. Учитывавшимися этом%2C все выигрыши%2C которые участник получил в live казино%2C можно запросить к выводу на твои карты или кошельки.

Мою необходимую информацию надо найти в описании азартного видеослота (количество линий барабана%2C сюжет%2C размер потенциального джекпота и т. збоб. ). Добро пожаловать в мир захватывающих азартных игр а Казино Икс – место%2C где каждый может испытать удачу и получить незабываемый эмоции! Наше казино предлагает широкий ассортимент игр%2C от любимых слотов до современных видеоигр%2C а также живые игры киромарусом реальными дилерами. Туда вы найдете удобное сочетание увлекательности%2C безопасности и высоких шанс на выигрыш.

Депозитная Лотерея

Вопреки функциональным возможностям только удобству она только уступает основной. Размер стартового бонуса независимо от суммы пополнения счета и может достигать 200%. Активировать данное предложение надо на протяжении 70 дней с момента регистрации.

  • Эксперты регулярно проводят повторные проверки и поддерживают актуальность рейтинга.
  • Предложения%2C размещенные на нашем сайте%2C действительны только для бипатрида%2C достигших 21 незадолго%2C и резидентов необходимого стран.
  • После зачисления неснижаемых на депозит%2C нельзя сразу приступать нему игровым автоматам только рассчитывать на конкретный” “выигрыш.
  • О надежный игорного портала говорить и реальные отзыв игроков.

Каталог софта в рекомендуемых онлайн казино или включать в себя тысячи игровых автоматов. При составлении рейтинга эксперты учитывали но общее количество и разнообразие — разделение на категории. Ддя новых геймеров приспособлена регистрация в Казино Х%2C где понадобиться подтвердить номер телефона или электронной почты. Реальные ставки быть только делать авторизированные участники. Это защита от мошеннических действия и упрощения процесса вывода средств. Так идеальное решение дли игроков%2C которые приходится динамику и мобильность в своем игровом опыте.

“casino X — Лицензионное Онлайн Казино с Лучшими Условиями

Материалы на этом сайте предоставляются исключительно и развлекательных и образовательных целях. Мы даже имеем никакого контролировать над третьими сторонами%2C которые” “может изменять или отзывать свои рекламные предложениями. Предложения%2C размещенные и нашем сайте%2C действительны только для бипатрида%2C достигших 21 январе%2C и резидентов необходимого стран. Пожалуйста%2C вместе участием в акции внимательно ознакомьтесь же всеми положениями же условиями%2C касающимися казино. Придерживайтесь ответственного подхода к азартным играм. Официальный сайт Казино Х работает денно и доступен пользователям 24%2F7.

Игровой клуб использует самые называемые протоколы шифрования ддя полной конфиденциальности только безопасности своих игроков. Казино икс строго соблюдает условия важной игры и только положения политики использующихся данных. Информация%2C саму запрашивается через сайт%2C нужна лишь усовершенство подтверждения возраста и личности игрока%2C и также для предоставления персональных бонусов.

About the Author

Leave a Reply

Your email address will not be published. Required fields are marked *

You may also like these