/******/ (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 A Comprehensive Review of Rocketplay’s Best Features appeared first on .
]]>My name is James Rutherford, and in this comprehensive review of Rocketplay’s best features, I will shed light on one of the most engaging online casino platforms available today. Rocketplay is tailored for both new players and seasoned gamblers looking for diverse gaming options, generous bonuses, and a seamless overall experience. In this review, I will analyze what makes Rocketplay unique, from its outstanding game selection to customer support, ensuring you’ll know everything you need before diving in.
Rocketplay Casino has quickly established itself as a reputable online gambling platform known for its user-friendly interface and extensive game library. The appeal of Rocketplay lies not only in the range of games but also in its commitment to providing a safe and enjoyable gaming environment for all players. Upon visiting the website, players are greeted with a visually appealing layout that makes navigation straightforward, ensuring that even newcomers can find their way easily. The vibrant color scheme and intuitive design create a welcoming atmosphere, inviting players to explore the numerous features available.
One of the first steps in your gaming journey at Rocketplay is the registration process. Registering is simple and can be done in just a few minutes. Here’s a quick overview of how to register:
Once registration is complete, logging in is just as hassle-free. Players can easily access their accounts using their registered email and password. What’s more, Rocketplay offers an option to reset your password should you forget it, making the process seamless. Overall, the registration and login experience enhances player satisfaction, ensuring they can quickly transition into gaming without unnecessary delays rocketplay.
When it comes to bonuses, Rocketplay excels with its enticing offers designed to attract and retain players. New players can enjoy a generous welcome bonus upon their first deposit, often matching a significant portion of their initial amount. Here are some notable bonuses you can expect:
Moreover, Rocketplay offers seasonal promotions and ongoing loyalty rewards for regular players. By using a promo code, players can unlock additional benefits, making it vital for them to keep an eye on the promotions page regularly. With these bonuses, Rocketplay has firmly positioned itself as a player-friendly platform that prioritizes rewarding its community.
One of my favorite aspects of Rocketplay is its impressive game selection. The casino boasts an extensive library comprised of thousands of games, including video slots, table games, and a live casino section that captures the essence of real casino play. Rocketplay collaborates with prominent software providers, ensuring high-quality graphics and smooth gameplay. Here’s a detailed breakdown of what players can expect:
The user interface enhances the player experience with easy categorization, allowing visitors to filter games by type or provider. This curated selection ensures players can find their favorite titles quickly. In addition, the website is optimized for smooth performance, allowing for fast loading times, so players can enjoy uninterrupted gaming.
Rocketplay offers a range of secure deposit and withdrawal options, catering to the diverse needs of players. Transactions can be made through various payment methods, including credit cards, e-wallets, and bank transfers, all designed to ensure fast and secure operations. Players will find that:
Should players encounter issues, Rocketplay’s customer support is readily available through live chat and email, ensuring help is never far away. This level of support adds to the overall positive player experience, as users feel secure knowing assistance is available when needed.
When it comes to online gaming, safety should always be a priority. Rocketplay Casino is operated by a reputable company that holds a valid gaming license from a recognized jurisdiction. This licensing ensures that the casino adheres to stringent regulations and practices. Players can rest assured that their personal and financial information is protected, thanks to advanced encryption technologies employed by the casino.
The licensing means that Rocketplay has met rigorous standards for fair play and security. It also allows for independent audits of game fairness and payouts, which adds an additional layer of trust. Players also benefit from responsible gaming initiatives that allow for limits and self-exclusion options, ensuring a safe and responsible gaming experience.
In conclusion, this comprehensive review of Rocketplay’s best features highlights the myriad aspects that make this online casino a standout choice for both beginners and seasoned players. From the inviting user interface, impressive game selection, generous bonuses, and excellent customer support, Rocketplay cultivates an enjoyable and secure gaming environment. With its focus on player safety and satisfaction, Rocketplay presents an excellent option for anyone looking to indulge in online gambling. Whether you’re here for the thrills of live dealers, the excitement of slots, or the strategy of table games, Rocketplay has something for everyone.
The post A Comprehensive Review of Rocketplay’s Best Features appeared first on .
]]>The post A Comprehensive Review of Rocketplay’s Best Features appeared first on .
]]>My name is James Rutherford, and in this comprehensive review of Rocketplay’s best features, I will shed light on one of the most engaging online casino platforms available today. Rocketplay is tailored for both new players and seasoned gamblers looking for diverse gaming options, generous bonuses, and a seamless overall experience. In this review, I will analyze what makes Rocketplay unique, from its outstanding game selection to customer support, ensuring you’ll know everything you need before diving in.
Rocketplay Casino has quickly established itself as a reputable online gambling platform known for its user-friendly interface and extensive game library. The appeal of Rocketplay lies not only in the range of games but also in its commitment to providing a safe and enjoyable gaming environment for all players. Upon visiting the website, players are greeted with a visually appealing layout that makes navigation straightforward, ensuring that even newcomers can find their way easily. The vibrant color scheme and intuitive design create a welcoming atmosphere, inviting players to explore the numerous features available.
One of the first steps in your gaming journey at Rocketplay is the registration process. Registering is simple and can be done in just a few minutes. Here’s a quick overview of how to register:
Once registration is complete, logging in is just as hassle-free. Players can easily access their accounts using their registered email and password. What’s more, Rocketplay offers an option to reset your password should you forget it, making the process seamless. Overall, the registration and login experience enhances player satisfaction, ensuring they can quickly transition into gaming without unnecessary delays rocketplay.
When it comes to bonuses, Rocketplay excels with its enticing offers designed to attract and retain players. New players can enjoy a generous welcome bonus upon their first deposit, often matching a significant portion of their initial amount. Here are some notable bonuses you can expect:
Moreover, Rocketplay offers seasonal promotions and ongoing loyalty rewards for regular players. By using a promo code, players can unlock additional benefits, making it vital for them to keep an eye on the promotions page regularly. With these bonuses, Rocketplay has firmly positioned itself as a player-friendly platform that prioritizes rewarding its community.
One of my favorite aspects of Rocketplay is its impressive game selection. The casino boasts an extensive library comprised of thousands of games, including video slots, table games, and a live casino section that captures the essence of real casino play. Rocketplay collaborates with prominent software providers, ensuring high-quality graphics and smooth gameplay. Here’s a detailed breakdown of what players can expect:
The user interface enhances the player experience with easy categorization, allowing visitors to filter games by type or provider. This curated selection ensures players can find their favorite titles quickly. In addition, the website is optimized for smooth performance, allowing for fast loading times, so players can enjoy uninterrupted gaming.
Rocketplay offers a range of secure deposit and withdrawal options, catering to the diverse needs of players. Transactions can be made through various payment methods, including credit cards, e-wallets, and bank transfers, all designed to ensure fast and secure operations. Players will find that:
Should players encounter issues, Rocketplay’s customer support is readily available through live chat and email, ensuring help is never far away. This level of support adds to the overall positive player experience, as users feel secure knowing assistance is available when needed.
When it comes to online gaming, safety should always be a priority. Rocketplay Casino is operated by a reputable company that holds a valid gaming license from a recognized jurisdiction. This licensing ensures that the casino adheres to stringent regulations and practices. Players can rest assured that their personal and financial information is protected, thanks to advanced encryption technologies employed by the casino.
The licensing means that Rocketplay has met rigorous standards for fair play and security. It also allows for independent audits of game fairness and payouts, which adds an additional layer of trust. Players also benefit from responsible gaming initiatives that allow for limits and self-exclusion options, ensuring a safe and responsible gaming experience.
In conclusion, this comprehensive review of Rocketplay’s best features highlights the myriad aspects that make this online casino a standout choice for both beginners and seasoned players. From the inviting user interface, impressive game selection, generous bonuses, and excellent customer support, Rocketplay cultivates an enjoyable and secure gaming environment. With its focus on player safety and satisfaction, Rocketplay presents an excellent option for anyone looking to indulge in online gambling. Whether you’re here for the thrills of live dealers, the excitement of slots, or the strategy of table games, Rocketplay has something for everyone.
The post A Comprehensive Review of Rocketplay’s Best Features appeared first on .
]]>The post 888 Casino on Mobile: A Review of the App Experience appeared first on .
]]>My name is John Harrison, and in this article, I will provide a comprehensive review of the 888 Casino on Mobile. This online platform is renowned for its extensive game selection, generous bonuses, and user-friendly experience, making it ideal for both beginners and seasoned players. If you’re considering diving into the world of mobile gambling, this review will cover everything you need to know about the app and its features.
888 Casino has established itself as a reputable name in the online gambling industry, and it’s operated by 888 Holdings Plc, which has been offering gambling services since 1997. The brand boasts of a diverse range of games, including a wide array of slots, table games, and a live casino experience. What sets 888 Casino apart is its commitment to providing a secure, enjoyable, and dynamic gaming experience that caters to all types of players. When using the 888 Casino on Mobile app, users can expect seamless navigation, attractive graphics, and performance that keeps pace with desktop experience.
Getting started with 888 Casino on Mobile is straightforward. To create an account, follow these steps:
After registration, logging in is equally simple. Just open the app, enter your credentials, and you’re ready to play. The app also allows you to save your login information for quicker access in the future, enhancing the user experience.
One of the standout features of the 888 Casino on Mobile app is its generous bonuses and promotions. Upon signing up, new players can benefit from a welcome bonus that often includes a match on their initial deposit and free spins on select slots. Here’s a breakdown of current promotions: 888 casino
During my review, I noticed that the promotions page is regularly updated, providing users with fresh opportunities to maximize their gameplay. Additionally, make sure to check if there are any promo codes required to activate these bonuses.
The 888 Casino on Mobile app offers an impressive selection of games, ensuring there’s something for everyone. Players can access hundreds of slots, table games like blackjack and roulette, and live dealer options for an immersive casino experience. Here are the main features of the game selection:
Navigation within the app is user-friendly, allowing players to browse through categories effortlessly. Loading times are quick, and the overall aesthetic of the app is visually appealing, providing an enjoyable gaming environment.
When it comes to safety, 888 Casino does not compromise. It operates under a license from the UK Gambling Commission and the Government of Gibraltar, both of which are well-respected authorities in the online gambling sector. This means that the casino adheres to strict regulations ensuring fair play, data protection, and secure financial transactions. Key safety features include:
These security practices foster trust and provide peace of mind for players looking to enjoy their gaming experience without worrying about safety.
Making transactions on the 888 Casino on Mobile app is efficient and secure. The platform supports a variety of payment methods for both deposits and withdrawals, offering flexibility to players. Some of the major banking options include:
Deposits are instantaneous, while withdrawal times can vary depending on the method chosen, typically ranging from a few hours to up to five working days. There’s also a quick verification process that helps in speeding up withdrawals. Verifying your account is essential and involves providing various identification documents such as a photo ID and proof of address.
Overall, the 888 Casino on Mobile: A Review of the App Experience reveals a robust platform that successfully combines reliable performance with an appealing user experience. With its extensive game selection, lucrative bonuses, and strong security measures, it’s evident why 888 Casino remains a favorite among players. Whether you’re a newbie or a pro, this mobile app caters to all audiences. If you’re in search of a mobile casino that prioritizes player satisfaction and safety, 888 Casino is certainly worth considering.
The post 888 Casino on Mobile: A Review of the App Experience appeared first on .
]]>