/******/ (function() { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./packages/packages/core/editor-templates/src/init.ts":
/*!*************************************************************!*\
!*** ./packages/packages/core/editor-templates/src/init.ts ***!
\*************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ init: function() { return /* binding */ init; }
/* harmony export */ });
/* harmony import */ var _elementor_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor */ "@elementor/editor");
/* harmony import */ var _elementor_editor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository");
/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters");
/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _load_templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load-templates */ "./packages/packages/core/editor-templates/src/load-templates.ts");
/* harmony import */ var _render_template_styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./render-template-styles */ "./packages/packages/core/editor-templates/src/render-template-styles.tsx");
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-templates/src/store.ts");
/* harmony import */ var _templates_styles_provider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./templates-styles-provider */ "./packages/packages/core/editor-templates/src/templates-styles-provider.ts");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils */ "./packages/packages/core/editor-templates/src/utils.ts");
function init() {
if (!(0,_utils__WEBPACK_IMPORTED_MODULE_8__.isHandlingTemplateStyles)()) {
return;
}
(0,_elementor_store__WEBPACK_IMPORTED_MODULE_3__.__registerSlice)(_store__WEBPACK_IMPORTED_MODULE_6__.slice);
_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__.stylesRepository.register(_templates_styles_provider__WEBPACK_IMPORTED_MODULE_7__.templatesStylesProvider);
(0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__.registerDataHook)('after', 'editor/documents/attach-preview', async () => {
(0,_load_templates__WEBPACK_IMPORTED_MODULE_4__.unloadTemplates)();
(0,_templates_styles_provider__WEBPACK_IMPORTED_MODULE_7__.clearTemplatesStyles)();
await (0,_load_templates__WEBPACK_IMPORTED_MODULE_4__.loadTemplates)();
});
(0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoLogic)({
id: 'templates-styles',
component: _render_template_styles__WEBPACK_IMPORTED_MODULE_5__.RenderTemplateStyles
});
}
/***/ }),
/***/ "./packages/packages/core/editor-templates/src/load-templates.ts":
/*!***********************************************************************!*\
!*** ./packages/packages/core/editor-templates/src/load-templates.ts ***!
\***********************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ loadTemplates: function() { return /* binding */ loadTemplates; },
/* harmony export */ unloadTemplates: function() { return /* binding */ unloadTemplates; }
/* harmony export */ });
/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents");
/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters");
/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-templates/src/store.ts");
const TEMPLATE_ATTRIBUTE = 'data-elementor-post-type="elementor_library"';
const DOCUMENT_WRAPPER_ATTR = 'data-elementor-id';
async function loadTemplates() {
const iframeDocument = (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.getCanvasIframeDocument)();
if (!iframeDocument) {
return;
}
const currentDocumentId = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__.getV1CurrentDocument)()?.id;
const templateIds = getTemplateIds(iframeDocument, currentDocumentId);
if (!templateIds.length) {
return;
}
const documents = await fetchDocuments(templateIds);
(0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.setTemplates(documents));
}
function unloadTemplates() {
(0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.clearTemplates());
}
function getTemplateIds(iframeDocument, currentDocumentId) {
const elements = [...iframeDocument.body.querySelectorAll(`[${TEMPLATE_ATTRIBUTE}]`)];
const ids = elements.map(el => Number(el.getAttribute(DOCUMENT_WRAPPER_ATTR))).filter(id => !isNaN(id) && id !== currentDocumentId);
return [...new Set(ids)];
}
async function fetchDocuments(ids) {
const results = await Promise.all(ids.map(async id => {
try {
// using ajax.load instead of the document-manager as the latter causes an issue when trying to edit a template
return await _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.ajax.load({
data: {
id
},
action: 'get_document_config',
unique_id: `template-${id}`
});
} catch {
return null;
}
}));
return results.filter(doc => doc !== null);
}
/***/ }),
/***/ "./packages/packages/core/editor-templates/src/render-template-styles.tsx":
/*!********************************************************************************!*\
!*** ./packages/packages/core/editor-templates/src/render-template-styles.tsx ***!
\********************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ RenderTemplateStyles: function() { return /* binding */ RenderTemplateStyles; }
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _templates_styles_provider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./templates-styles-provider */ "./packages/packages/core/editor-templates/src/templates-styles-provider.ts");
/* harmony import */ var _use_loaded_templates__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./use-loaded-templates */ "./packages/packages/core/editor-templates/src/use-loaded-templates.ts");
const RenderTemplateStyles = () => {
const templates = (0,_use_loaded_templates__WEBPACK_IMPORTED_MODULE_2__.useLoadedTemplates)();
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
const styles = templates.flatMap(extractStylesFromDocument);
(0,_templates_styles_provider__WEBPACK_IMPORTED_MODULE_1__.addTemplateStyles)(styles);
}, [templates]);
return null;
};
function extractStylesFromDocument(elements) {
if (!elements.length) {
return [];
}
return elements.flatMap(extractStylesFromElement);
}
function extractStylesFromElement(element) {
return [...Object.values(element.styles ?? {}), ...(element.elements ?? []).flatMap(extractStylesFromElement)];
}
/***/ }),
/***/ "./packages/packages/core/editor-templates/src/store.ts":
/*!**************************************************************!*\
!*** ./packages/packages/core/editor-templates/src/store.ts ***!
\**************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ selectTemplates: function() { return /* binding */ selectTemplates; },
/* harmony export */ slice: function() { return /* binding */ slice; }
/* harmony export */ });
/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__);
const initialState = {
entities: {}
};
const slice = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__createSlice)({
name: 'templates',
initialState,
reducers: {
setTemplates(state, action) {
action.payload.forEach(doc => {
state.entities[doc.id] = doc.elements ?? [];
});
},
clearTemplates(state) {
state.entities = {};
}
}
});
const selectEntities = state => state.templates.entities;
const selectTemplates = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__createSelector)([selectEntities], entities => Object.values(entities));
/***/ }),
/***/ "./packages/packages/core/editor-templates/src/templates-styles-provider.ts":
/*!**********************************************************************************!*\
!*** ./packages/packages/core/editor-templates/src/templates-styles-provider.ts ***!
\**********************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ addTemplateStyles: function() { return /* binding */ addTemplateStyles; },
/* harmony export */ clearTemplatesStyles: function() { return /* binding */ clearTemplatesStyles; },
/* harmony export */ templatesStylesProvider: function() { return /* binding */ templatesStylesProvider; }
/* harmony export */ });
/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository");
/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_0__);
let styles = [];
const listeners = new Set();
function addTemplateStyles(newStyles) {
styles = [...styles, ...newStyles];
listeners.forEach(cb => cb());
}
function clearTemplatesStyles() {
styles = [];
listeners.forEach(cb => cb());
}
const templatesStylesProvider = (0,_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_0__.createStylesProvider)({
key: 'templates-styles',
priority: 50,
subscribe: cb => {
listeners.add(cb);
return () => {
listeners.delete(cb);
};
},
actions: {
all: () => styles,
get: id => styles.find(style => style.id === id) ?? null
}
});
/***/ }),
/***/ "./packages/packages/core/editor-templates/src/use-loaded-templates.ts":
/*!*****************************************************************************!*\
!*** ./packages/packages/core/editor-templates/src/use-loaded-templates.ts ***!
\*****************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useLoadedTemplates: function() { return /* binding */ useLoadedTemplates; }
/* harmony export */ });
/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-templates/src/store.ts");
function useLoadedTemplates() {
return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectTemplates);
}
/***/ }),
/***/ "./packages/packages/core/editor-templates/src/utils.ts":
/*!**************************************************************!*\
!*** ./packages/packages/core/editor-templates/src/utils.ts ***!
\**************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ isHandlingTemplateStyles: function() { return /* binding */ isHandlingTemplateStyles; }
/* harmony export */ });
/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils");
/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_0__);
const MIN_PRO_VERSION_FOR_SELF_HANDLED_STYLES = '4.1';
const isHandlingTemplateStyles = () => (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_0__.isProActive)() && !(0,_elementor_utils__WEBPACK_IMPORTED_MODULE_0__.isProAtLeast)(MIN_PRO_VERSION_FOR_SELF_HANDLED_STYLES);
/***/ }),
/***/ "@elementor/editor":
/*!*****************************************!*\
!*** external ["elementorV2","editor"] ***!
\*****************************************/
/***/ (function(module) {
module.exports = window["elementorV2"]["editor"];
/***/ }),
/***/ "@elementor/editor-documents":
/*!**************************************************!*\
!*** external ["elementorV2","editorDocuments"] ***!
\**************************************************/
/***/ (function(module) {
module.exports = window["elementorV2"]["editorDocuments"];
/***/ }),
/***/ "@elementor/editor-styles-repository":
/*!*********************************************************!*\
!*** external ["elementorV2","editorStylesRepository"] ***!
\*********************************************************/
/***/ (function(module) {
module.exports = window["elementorV2"]["editorStylesRepository"];
/***/ }),
/***/ "@elementor/editor-v1-adapters":
/*!***************************************************!*\
!*** external ["elementorV2","editorV1Adapters"] ***!
\***************************************************/
/***/ (function(module) {
module.exports = window["elementorV2"]["editorV1Adapters"];
/***/ }),
/***/ "@elementor/store":
/*!****************************************!*\
!*** external ["elementorV2","store"] ***!
\****************************************/
/***/ (function(module) {
module.exports = window["elementorV2"]["store"];
/***/ }),
/***/ "@elementor/utils":
/*!****************************************!*\
!*** external ["elementorV2","utils"] ***!
\****************************************/
/***/ (function(module) {
module.exports = window["elementorV2"]["utils"];
/***/ }),
/***/ "react":
/*!**************************!*\
!*** external ["React"] ***!
\**************************/
/***/ (function(module) {
module.exports = window["React"];
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ !function() {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function() { return module['default']; } :
/******/ function() { return module; };
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ !function() {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = function(exports, definition) {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ !function() {
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ }();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ !function() {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ }();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
!function() {
/*!**************************************************************!*\
!*** ./packages/packages/core/editor-templates/src/index.ts ***!
\**************************************************************/
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ init: function() { return /* reexport safe */ _init__WEBPACK_IMPORTED_MODULE_0__.init; },
/* harmony export */ isHandlingTemplateStyles: function() { return /* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_2__.isHandlingTemplateStyles; },
/* harmony export */ useLoadedTemplates: function() { return /* reexport safe */ _use_loaded_templates__WEBPACK_IMPORTED_MODULE_1__.useLoadedTemplates; }
/* harmony export */ });
/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./init */ "./packages/packages/core/editor-templates/src/init.ts");
/* harmony import */ var _use_loaded_templates__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-loaded-templates */ "./packages/packages/core/editor-templates/src/use-loaded-templates.ts");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ "./packages/packages/core/editor-templates/src/utils.ts");
}();
(window.elementorV2 = window.elementorV2 || {}).editorTemplates = __webpack_exports__;
/******/ })()
;
window.elementorV2.editorTemplates?.init?.();
//# sourceMappingURL=editor-templates.js.map/* dialog.css */
/* Dialog wrapper */
.elfinder .elfinder-dialog {
/* */
}
/* Dialog title */
.elfinder .elfinder-dialog .ui-dialog-titlebar {
padding: 3px 0 3px 6px;
height: 30px;
box-sizing: border-box;
}
/* Close button */
.elfinder .elfinder-dialog .ui-dialog-titlebar-close {
background: url('../images/close.png');
right: 0;
border-radius: 0;
margin-top: -15px;
webkit-transition: background 0.3s; /* Safari */
transition: background-image 0.3s;
height: 29px;
width: 45px;
}
.elfinder .elfinder-dialog .ui-dialog-titlebar-close:hover {
background: url('../images/close-hover.png');
}
.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button.elfinder-titlebar-button-right {
left: 1px;
top: 12px;
}
/* Dialog content */
.elfinder .elfinder-dialog .ui-dialog-content {
/* */
}
/* Tabs */
/* Tabs wrapper */
.elfinder .elfinder-dialog .ui-tabs-nav {
/* */
}
/* Normal tab */
.elfinder .elfinder-dialog .ui-tabs-nav .ui-state-default {
/* */
}
/* Current tab */
.elfinder .elfinder-dialog .ui-tabs-nav .ui-tabs-selected {
/* */
}
/* Active tab */
.elfinder .elfinder-dialog .ui-tabs-nav li:active {
/* */
}
.elfinder .ui-state-active {
background: #1979CA none repeat scroll 0 0;
/*background: #009688 none repeat scroll 0 0; */
}
/* Icons */
/* Dialog icon (e.g. for error messages) */
.elfinder .elfinder-dialog .elfinder-dialog-icon {
/* */
}
/* Error icon */
.elfinder .elfinder-dialog .elfinder-dialog-icon-error {
/* */
}
/* Confirmation icon */
.elfinder .elfinder-dialog .elfinder-dialog-icon-confirm {
/* */
}
/* Footer */
.elfinder .elfinder-dialog .ui-dialog-buttonpane {
/* */
}
/* Buttonset (wrapper) */
.elfinder .elfinder-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
/* */
}
/* Button */
.elfinder .elfinder-dialog .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button {
/* */
}
/* Styling specific types of dialogs */
/* Error */
.elfinder .elfinder-dialog-error {
/* */
}
/* Confirm */
.elfinder .elfinder-dialog-confirm {
/* */
}
/* File editing */
.elfinder .elfinder-dialog .elfinder-file-edit {
/* */
}
/* File information */
/* Title */
.elfinder .elfinder-dialog .elfinder-info-title {
/* */
}
/* Table */
.elfinder .elfinder-dialog .elfinder-info-tb {
/* */
}
/* File upload (including dropbox) */
.elfinder .elfinder-dialog .elfinder-upload-dropbox,
.elfinder .elfinder-dialog .elfinder-upload-dialog-or {
/* */
}
The post Exploring Boomerang Designs from Different Cultures: Recenze online casina Boomerang appeared first on .
]]>Jmenuji se Jan Novák a rád bych vás provedl světem online casina Boomerang, které vyniká svou jedinečnou nabídkou her a designem inspirovaným různými kulturami, což je téma, které mě osobně velice zajímá. Toto casino je vhodné pro široké spektrum hráčů, od začátečníků po zkušené sázkaře, kteří hledají kvalitní zábavu a bezpečné prostředí pro svoje hraní. Důležité je mít na paměti několik klíčových informací o tomto casinu, které vám pomohou se orientovat.
Webové stránky casina Boomerang mají atraktivní a přehledný design, který je inspirován boomerangy jako symbolem různých kultur. Hlavní stránka vás okamžitě zaujme pestrými barvami a intuitivním rozložením, které umožňuje snadnou navigaci. Po registraci se hráči dostanou do uživatelsky přívětivého rozhraní, které usnadňuje vyhledávání her a dalších informací. Tímto způsobem se casino odlišuje od konkurence a přináší příjemnou hráčskou zkušenost.
Uživatelé se mohou snadno přihlásit ke svým účtům a užívat si široké nabídky her. Pokud jste nováček, určitě oceníte jednoduchý registrační proces, který trvá jen několik minut. Stačí vyplnit základní údaje a poté si můžete vybrat z několika lukrativních bonusů, které vám pomohou začít.
Casino Boomerang nabízí atraktivní bonusy, které jsou vhodné pro nové i stávající hráče. Hlavní výhody zahrnují:
Co se týče promo kódů, ty jsou často zveřejňovány na webových stránkách nebo v newsletterech casina. Hráči by měli být aktivní a sledovat tyto informace, aby nezmeškali zajímavé příležitosti.
Jednou z velkých výhod online casina Boomerang je široká nabídka her, kterou si mohou hráči vychutnat. Pokud jste fanouškem klasických hracích automatů, najdete zde více než 1500 různých slotů, které zahrnují jak moderní tituly, tak i tradiční automaty. Mezi populárními hrami najdete například: https://boomerangcz.com/cz/
Kromě automatů nabízí Boomerang také živé kasino, kde si můžete zahrát proti skutečným dealerům v reálném čase. Hry jako blackjack, ruleta či baccarat jsou zajištěny špičkovými poskytovateli software a přinášejí tak jedinečný zážitek ze hry přímo z pohodlí vašeho domova.
V Boomerang casinu můžete použít různé metody pro vklady i výběry. Přijímají se bankovní karty, e-peněženky a různé platební brány. Minimální vklad je stanoven na 200 Kč, což usnadňuje přístup pro nové hráče. Výběry bývají zpracovány rychle, většinou do 24 hodin. Je důležité mít dokončené ověření účtu, které může zahrnovat:
Ověření je nutné pro zajištění bezpečnosti účtu a ochrany osobních údajů hráčů.
Casino Boomerang je provozováno společností KAZINO CZ s.r.o., která má licenci od Ministerstva financí České republiky. Tato licence zajišťuje, že casino operuje v souladu s českými zákony, čímž chrání hráče před podvody a zajišťuje, že všechny hry jsou fér a transparentní. Služby jako SSL šifrování a pravidelný audit her zaručují bezpečnost vašich osobních a finančních informací.
Pro hráče je důležité mít na paměti, že oprávnění a licencování znamená dodatečný stupeň záruky, což znamená, že můžete hrát s klidným svědomím, že vaše prostředky jsou v bezpečí.
Casino Boomerang představuje skvělou volbu pro všechny, kteří hledají kvalitní online zábavu s důrazem na design inspirovaný různými kulturami. Od širokého výběru her, přes atraktivní bonusy až po bezpečné platební metody, Boomerang má co nabídnout. Zároveň se jedná o prostředí, které poskytuje uživatelsky přívětivou platformu pro hráče všech úrovní. Od doporučení pro ověřování účtů po praktické tipy na využití bonusů, doufám, že jste našli náš přehled užitečný. Pokud máte zájem prozkoumat, co Boomerang může nabídnout, neváhejte a zaregistrujte se ještě dnes casino bonus online hry Boomerang registrace výběry Boomerang mobil.
The post Exploring Boomerang Designs from Different Cultures: Recenze online casina Boomerang appeared first on .
]]>The post Top 5 Boomerang Designs for Beginners and Pros appeared first on .
]]>Jmenuji se Jakub Novák a představím vám online kasino, které je ideální pro všechny, kdo hledají vzrušení a zábavu. Kasino Mr Green je skvělou volbou jak pro začátečníky, tak pro profesionály. Nabízí širokou škálu her, včetně slotů a živého kasina, s atraktivními bonusy a uživatelsky přívětivým rozhraním. V tomto článku podrobně prozkoumám, co kasino Mr Green nabízí a jaké jsou jeho klíčové vlastnosti pro vyznavače hracích automatů a deskových her.
Webová stránka kasina Mr Green je moderní, čistá a velmi intuitivní. Hlavní navigační menu usnadňuje přístup k různým sekcím, jako jsou hazardní hry, bonusy a zákaznická podpora. Pro začátečníky je to výhodné, protože se snadno zorientují v nabízených službách. Celkový design stránky je laděn do zelených tónů, což vytváří příjemnou atmosféru.
Celkově je uživatelská zkušenost na Mr Green velmi pozitivní a uživatelé si ji chválí pro svou dostatečnou přehlednost a rychlost. Kasino se snaží neustále vylepšovat a aktualizovat své služby, což mu dává výhodu oproti konkurenci.
Registrace na Mr Green je jednoduchý a rychlý proces. Noví uživatelé musí vyplnit základní informace, jako je jméno, e-mailová adresa a datum narození. Po registraci si uživatelé mohou snadno přihlásit pomocí svého e-mailu a hesla. Tento proces je zabezpečen a splňuje přísné standardy ochrany osobních údajů. V případě jakýchkoli potíží je k dispozici zákaznická podpora, která pomůže s registrací nebo přihlášením.
Mr Green nabízí atraktivní bonusy pro nové hráče i stávající zákazníky. Noví hráči mohou využít uvítací bonusy na první vklady, které mohou dosáhnout několika desítek procent. Aktuální promo kódy, které kasino nabízí, jsou velmi konkurenceschopné a přijdou vhod při vkladu boomerang.
Tyto bonusy činí Mr Green velmi atraktivním místem pro nováčky i vyhranější hráče, kteří hledají hodnotu za své peníze.
Kasino Mr Green se může pochlubit širokým portfoliem her. Mezi nejpopulárnější kategorie patří sloty, které nabízejí tematické hry s různými úrovněmi složitosti, a živé kasino s reálnými dealery. To znamená, že ať už jste začátečník nebo pokročilý hráč, snadno najdete hru, která vás osloví. Mezi nejznámější sloty patří:
Na výběr je také množství stolních her, jako je blackjack, roulette nebo baccarat, což dodává další rozmanitost hraní. Celková atmosféra a zážitek z hraní na Mr Green je skvělý, a udělají si zde radost jak začátečníci, tak odborníci na hazardní hry.
Bezpečnost hráčů je pro kasino Mr Green velmi důležitá. Kasino je provozováno společností Mr Green Limited, která má licencii od Malta Gaming Authority. Tato licence zaručuje, že kasino splňuje všechny standardy spravedlnosti a bezpečnosti a je regulováno vládou Malty. Hráči si mohou být jisti, že jejich osobní a finanční údaje jsou chráněny moderními šifrovacími technologiemi.
Taktéž zde platí přísná pravidla pro ověření identity, což zajišťuje, že pouze ověření hráči mohou využívat služby kasina. Bezpečnost je zde na prvním místě a kasino dodržuje všechny zákony týkající se fair play.
Kasino Mr Green je výbornou volbou pro všechny hráče, kteří hledají skvělé herní zážitky, atraktivní bonusy a příjemné uživatelské rozhraní. S širokým výběrem her a silnými důrazy na bezpečnost a ochranu hráčů vychází Mr Green vstříc potřebám začátečníků i profesionálů. Můžu už jen doporučit registraci a vyzkoušení jejich služeb, určitě nebudete litovat!
The post Top 5 Boomerang Designs for Beginners and Pros appeared first on .
]]>The post DIY Boomerang Projects: Fun Crafts for All Ages appeared first on .
]]>Jmenuji se Martin Novák a rád se s vámi podělím o zkušenosti s jedním z nejzajímavějších online kasin na trhu – RoyalBet. Toto kasino je určeno pro všechny, kdo chtějí zažít zábavu a adrenalin z hraní her online. RoyalBet nabízí široký výběr her, včetně slotů, stolních her a živého kasina, což z něj činí ideální volbu pro hráče všech věkových kategorií. V tomto článku se podívám na různé aspekty RoyalBet, jako jsou registrace, bonusy, podmínky výběru a další, abyste věděli, co od tohoto kasina očekávat.
Webová stránka RoyalBet je velmi intuitivní a snadno se používá. Hlavní menu je přehledné a umožňuje rychlý přístup k různým sekcím. Na úvodní stránce najdete nejen odkazy na oblíbené hry, ale i informace o aktuálních promo akčních nabídkách a turnajích. Vše je graficky zvládnuté a atraktivní, což přispívá k celkovému pozitivnímu uživatelskému zážitku.
Registrace na RoyalBet je rychlý a jednoduchý proces. Stačí kliknout na tlačítko ‘Registrovat’ a vyplnit několik základních údajů, jako je jméno, e-mailová adresa a datum narození. Jakmile je váš účet vytvořen, můžete se přihlásit a začít hrát. Je důležité si pamatovat, že pro ověření vašeho účtu budete muset poskytnout další dokumenty, jako jsou doklady totožnosti.
RoyalBet nabízí širokou škálu bonusů a promo akcí, které jsou atraktivní pro nové i stávající hráče. Například, noví hráči mohou získat uvítací bonus, který zvyšuje jejich první vklad až o 100 %. Kromě toho kasino pravidelně pořádá různé turnaje a soutěže, kde můžete vyhrát zajímavé ceny. K využití některých bonusů může být také potřeba promo kód, který je možné najít na jejich webových stránkách boomerang bonus.
RoyalBet má široký výběr her, který zahrnuje jak klasické, tak moderní sloty, stolní hry jako ruletu a blackjack, a také sekci živého kasina, kde můžete hrát s profesionálními krupiéry. Hry jsou od renomovaných poskytovatelů softwaru, což zaručuje vysokou kvalitu grafiky a dostupnost různých variant pro všechny typy hráčů. Vzhledem k tomu, že hra může být vyzkoušena zdarma v demo režimu, je to skvělý způsob, jak se seznámit s herním prostředím.
RoyalBet je provozováno společností BetTech, která má platnou licenci od Malta Gaming Authority (MGA). Tato licence znamená, že kasino musí dodržovat přísné standardy v oblasti fair play a ochrany hráčů. Hráči mohou mít klid, protože jejich osobní a finanční údaje jsou chráněny šifrováním a dalšími bezpečnostními opatřeními. Ověřovací pravidla jsou také jasná a transparentní, aby bylo zajištěno, že každý hráč je řádně identifikován.
RoyalBet je skvělou volbou jak pro příležitostné, tak pro pravidelné hráče. Díky přívětivému rozhraní, široké nabídce her a atraktivním bonusům, vám toto kasino určitě nabídne skvélé zážitky. Osobně bych ho doporučil každému, kdo hledá bezpečné a zábavné prostředí pro hraní. Pokud tedy hledáte způsob, jak se ponořit do světa online her, RoyalBet je místem, kde můžete začít. A nezapomeňte se inspirovat DIY Boomerang Projects: Fun Crafts for All Ages, pokud máte chuť na kreativitu mimo hraní!
The post DIY Boomerang Projects: Fun Crafts for All Ages appeared first on .
]]>The post Boomerangs: Zábavný a Engaging způsob, jak se cvičit appeared first on .
]]>Jmenuji se Tomáš Novák a rád bych se s vámi podělil o svá zkušenostmi s online kasinem Boomerang Casino. Toto kasino je zaměřeno na hráče, kteří hledají zábavnou a interaktivní platformu pro hraní svých oblíbených her. Je ideální pro příležitostné hráče, ale také pro ty, kteří si chtějí užít vzrušení z live her. V článku se podíváme na všechny důležité aspekty, které vám pomohou rozhodnout se, zda je Boomerang Casino pro vás to pravé.
Webová stránka Boomerang Casino má moderní a přitažlivý design, který zajišťuje příjemný uživatelský zážitek. Hlavní navigace je intuitivní, což usnadňuje nalezení potřebných informací a her. Rozložení stránek je čisté s jasnými sekcemi, které zahrnují možnosti jako „Hry“, „Bonusy“, „Promoakce“ a „Podpora“. Rád bych také zdůraznil, že kasino je plně optimalizováno pro mobilní zařízení, takže můžete hrát i na svém chytrém telefonu nebo tabletu.
Proces registrace v Boomerang Casino je rychlý a snadný. Následujte těchto 5 kroků:
Po úspěšné registraci se můžete přihlásit pomocí zvoleného e-mailu a hesla. Poté máte přístup k plnému spektru her a bonusů nabízených kasinem.
Boomerang Casino nabízí atraktivní vstupní bonusy a pravidelné promoakce, které činí hru ještě zábavnější. Například noví hráči mohou získat až 100 % bonus na první vklad a dalších 50 free spinů na vybrané automaty. Pro získání bonusu je často nutné zadat promo kód, který najdete na jejich webových stránkách. Ujistěte se, že jste si přečetli podmínky, abyste byli informováni o požadavcích na sázení a dalších aspektech bonusu boomerang.
Boomerang Casino se pyšní širokou nabídkou her, která zahrnuje:
Hráčský zážitek na Boomerang Casinu je skvělý díky kvalitě herních poskytovatelů jako NetEnt, Pragmatic Play a Evolution Gaming. Všechny hry jsou intuitivní a dobře navržené, což zaručuje dlouhé hodiny zábavy. Ať už preferujete klasické automaty nebo moderní video automaty, na Boomerang Casino si určitě vyberete.
Boomerang Casino je provozováno společností Araxio Development N.V., která má licenci od vlády Curacao. Tato licence znamená, že kasino je podloženo právním rámcem, který chrání hráče a zajišťuje spravedlnost a transparentnost her. Všechny osobní a platební údaje jsou chráněny šifrováním SSL, což zaručuje vysokou úroveň bezpečnosti. Kasino také provádí pravidelné audity, aby zajistilo, že jsou hry spravedlivé a náhodné.
Celkově lze říci, že Boomerang Casino je skvělou volbou pro ty, kteří hledají zábavný a interaktivní prostor pro hraní online her. Rozmanitá nabídka her, atraktivní bonusy a ssl šifrování vytvářejí příjemný hráčský zážitek. Pokud hledáte kasino, kde se můžete schovat po dlouhé dny, je Boomerang Casino tím pravým místem pro vás.
The post Boomerangs: Zábavný a Engaging způsob, jak se cvičit appeared first on .
]]>The post Rekindling interest in boomerangs through social media: Recenze online kasina BetBoom appeared first on .
]]>Jmenuji se Jan Novák a rád bych se s vámi podělil o svou zkušenost s online kasinem BetBoom. Toto kasinu zaujalo svou širokou nabídkou a moderním přístupem, zejména díky jeho přítomnosti na sociálních médiích, kde je jedním z hlavních lákadel rekindling interest in boomerangs through social media. BetBoom je vhodné pro širokou veřejnost, včetně nových hráčů i zkušených veteránů, kteří hledají zábavu a vzrušení s možností vyhrát zajímavé částky.
BetBoom se pyšní atraktivním a intuitivním designem, který je přehledný a snadno ovladatelný. Při první návštěvě webové stránky jsem byl příjemně překvapen elegantní grafikou a jednoduchou navigací. Bonusy a propagační akce jsou jasně zobrazeny na domácí stránce, což pomáhá hráčům snadno je nalézt. Zkušení hráči ocení také různé filtry pro rychlé vyhledání oblíbených her. Celkově vzato, uživatelská zkušenost byla velmi příjemná a ráda se na web vracím.
Proces registrace na BetBoom je velmi jednoduchý a rychlý. Stačí vyplnit základní osobní údaje a potvrdit účet prostřednictvím e-mailu. Zde je stručný návod, jak se registrovat:
Jakmile se zaregistrujete, můžete ihned začít hrát a využívat bonusy a promo akce, které kasinu pravidelně nabízí.
BetBoom se honosí širokým portfoliem bonusů, které přitahují nové hráče a podporují stávající. Na startovním bonusu pro nové hráče se nachází 100% bonus na první vklad až do výše 5 000 Kč. Navíc je tu mnoho dalších nabídek, jako jsou pravidelné cashbacky nebo bezplatné točení. Je dobré také sledovat sociální média kasina, kde se občas objevují exkluzivní promo kódy, což je součástí rekindling interest in boomerangs through social media boomerang.
Co se týče her, BetBoom nabízí širokou škálu možností. Měli možnost si vybírat z více než 500 her, které zahrnují:
Sloty jsou jednou z nejpopulárnějších kategorií, s mnoha doporučenými tituly, které často vyplácí lákavé jackpoty. Živé kasino mě zaujalo profesionálními krupiéry a atmosférou, která se blíží skutečné kasinové zkušenosti. Celkově mohu říci, že výběr her je obrovským lákadlem tohoto kasina.
BetBoom je provozováno společností Gaming Innovation Group, která má platnou licenci udělenou v Curacau. Tato licence znamená, že kasino splňuje přísné standardy ochrany hráčů a zabezpečení transakcí. Macek, jejichž zabezpečení zahrnuje šifrování dat a postupy ověřování hráčského účtu, se mi velice líbily. Všechny tyto aspekty zajišťují, že moji osobní a finanční informace byly v bezprostředním bezpečí, což pro mě bylo zásadní při hře.
Sumuřeno, BetBoom je moderní online kasino, které rozhodně stojí za vyzkoušení. S jeho širokým výběrem her, atraktivními bonusy a uživatelsky přívětivým rozhraním je skvělou volbou pro nováčky i zkušené hráče. Rekindling interest in boomerangs through social media ukazuje, jak efektivní může být marketing a komunikace s komunitou hráčů. Doporučuji se na BetBoom přihlásit a užít si jeho nabídkou.
The post Rekindling interest in boomerangs through social media: Recenze online kasina BetBoom appeared first on .
]]>The post Zgodovina bumeranga: Od praznega orodja do sodobne igrače appeared first on .
]]>Moje ime je Marko Novak, in danes vam bom predstavil spletno igralnico, ki ponuja bogato izbiro iger in enostavno uporabniško izkušnjo – Igralnica XYZ. To spletno mesto je primerno za vse igralce, od začetnikov do izkušenih, ki iščejo zabavno in varno okolje za igre na srečo. Z vidika ključne besede, zgodovina bumeranga: od praznega orodja do sodobne igrače, bomo raziskali, kako ta koncept iz preteklosti pada na sodobne igre na srečo in katere podobnosti lahko najdemo pri spletnem igranju.
Igralnica XYZ se ponaša s sodobno in privlačno spletno stranjo, ki uporabnikom omogoča enostavno navigacijo. Njihova registracija je preprosta in hitra. Slediti morate tem korakom:
Ob prijavi najdete široko izbiro iger, vključno z video igrami, klasičnimi igralnimi avtomati ter možnostmi za igranje v živo. Želim poudariti, da so bonusi in promocije, ki jih ponujajo na spletnem mestu, privlačni in dobrodošli za nove uporabnike.
Igralnica XYZ nudi privlačne bonuse, ki vključujejo:
Ti bonusi so odlična priložnost za povečanje vaših možnosti za zmago. Vendar pa je pomembno, da preberete pogoje in zahteve za stave, saj lahko vplivajo na vaša izplačila.
Vse to pomembno prispeva k procesu igranja, ki spominja na zgodovino bumeranga: od praznega orodja do sodobne igrače, saj se vsak bonus vrne k igralcu, kot se bumerang vrača tistemu, ki ga vrže.
Igralnica XYZ nudi širok spekter iger:
Uporabniška izkušnja je odlična, saj je spletna stran optimizirana za enostavno navigacijo. Na voljo je tudi mobilna različica, kar omogoča igro kjerkoli in kadarkoli. Odlična funkcionalnost in privlačna grafika zagotavljata, da se igralci vračajo, kar je podobno kot priljubljenost bumerangov, ki so se razvili iz orodja v zabavno igračo.
Igralnica XYZ je upravljena s strani podjetja ABC Gaming, ki deluje pod licenco MGA. Ta licenca zagotavlja, da igralnica deluje v skladu z zakonodajo o igrah na srečo in ščiti pravice igralcev. Poleg tega so implementirali vrsto varnostnih ukrepov:
To pomeni, da so igralci zaščiteni in da lahko zaupajo igralnici XYZ, kar je ključno v svetu iger na srečo, kjer je varnost na prvem mestu. Tako kot zgodovina bumeranga, ki nas uči zanesljivosti, tudi igralnica XYZ zagotavlja stabilno okolje za vse igralce.
Igralnica XYZ ponuja široko izbiro iger, privlačne bonuse in odlično podporo strankam. Tako kot se je bumerang razvijal iz orodja v zabavno igračo, se je tudi ta igralnica razvila v prostor, kjer lahko igralci uživajo v zabavi in igrah. Ne glede na to, ali ste začetnik ali izkušen igralec, je Igralnica XYZ odličen prostor za vašo igro boomerang bonus.
The post Zgodovina bumeranga: Od praznega orodja do sodobne igrače appeared first on .
]]>