/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 39); /******/ }) /************************************************************************/ /******/ ({ /***/ 0: /***/ (function(module, exports) { var g; // This works in non-strict mode g = (function() { return this; })(); try { // This works if eval is allowed (see CSP) g = g || Function("return this")() || (1,eval)("this"); } catch(e) { // This works if the window reference is available if(typeof window === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }), /***/ 13: /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (C) 2014-2018 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Modal = __webpack_require__(18), $ = jQuery; var Import = function Import() { var self = this; // Set params this.params = []; // Set stop flag this.stopImport = false; // Set modal this.modal = new Modal(); // Set confirm listener this.modal.onConfirm = function (options) { self.onConfirm(options); }; // Set blogs listener this.modal.onBlogs = function (options) { self.onBlogs(options); }; // Set stop listener this.modal.onStop = function (options) { self.onStop(options); }; }; Import.prototype.setParams = function (params) { this.params = Ai1wm.Util.list(params); }; Import.prototype.start = function (options, retries) { var self = this; var retries = retries || 0; // Set stop flag if (retries === 0) { this.stopImport = false; } // Stop running import if (this.stopImport) { return; } // Initializing beforeunload event $(window).bind('beforeunload', function () { return ai1wm_locale.stop_importing_your_website; }); // Set initial status this.setStatus({ type: 'info', message: ai1wm_locale.preparing_to_import }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Import $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data, type) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (params) { if (params) { self.run(params); } }).fail(function () { var timeout = retries * 1000; if (retries >= 5) { return self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_start_the_import }); } retries++; setTimeout(self.start.bind(self, options, retries), timeout); }); }; Import.prototype.run = function (params, retries) { var self = this; var retries = retries || 0; // Stop running import if (this.stopImport) { return; } // Import $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data, type) { return Ai1wm.Util.json(data); } }).done(function (params) { if (params) { self.run(params); } }).fail(function () { var timeout = retries * 1000; retries++; setTimeout(self.run.bind(self, params, retries), timeout); }); }; Import.prototype.confirm = function (options, retries) { var self = this; var retries = retries || 0; // Stop running import if (this.stopImport) { return; } // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 150 }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Confirm $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data, type) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (params) { if (params) { self.run(params); } }).fail(function () { var timeout = retries * 1000; if (retries >= 5) { return self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_confirm_the_import }); } retries++; setTimeout(self.confirm.bind(self, options, retries), timeout); }); }; Import.prototype.blogs = function (options, retries) { var self = this; var retries = retries || 0; // Stop running import if (this.stopImport) { return; } // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 150 }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Blogs $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data, type) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (params) { if (params) { self.run(params); } }).fail(function () { var timeout = retries * 1000; if (retries >= 5) { return self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_prepare_blogs_on_import }); } retries++; setTimeout(self.blogs.bind(self, options, retries), timeout); }); }; Import.prototype.clean = function (options, retries) { var self = this; var retries = retries || 0; // Set stop flag this.stopImport = true; // Set initial status this.setStatus({ type: 'info', message: ai1wm_locale.please_wait_stopping_the_export }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 400 }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Clean $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data, type) { return Ai1wm.Util.json(data); } }).done(function () { // Unbinding the beforeunload event when we stop importing $(window).unbind('beforeunload'); // Destroy modal self.modal.destroy(); }).fail(function () { var timeout = retries * 1000; if (retries >= 5) { return self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_stop_the_import }); } retries++; setTimeout(self.clean.bind(self, options, retries), timeout); }); }; Import.prototype.getStatus = function () { var self = this; // Stop getting status if (this.stopImport) { return; } $.ajax({ url: ai1wm_import.status.url, type: 'GET', dataType: 'json', cache: false, dataFilter: function dataFilter(data, type) { return Ai1wm.Util.json(data); } }).done(function (params) { if (params) { self.setStatus(params); // Next status switch (params.type) { case 'done': case 'error': // Unbinding the beforeunload event when any case is performed $(window).unbind('beforeunload'); return; case 'confirm': case 'blogs': return; } } // Import is not done yet, let's check status in 3 seconds setTimeout(self.getStatus.bind(self), 3000); }).fail(function () { // Import is not done yet, let's check status in 3 seconds setTimeout(self.getStatus.bind(self), 3000); });; }; Import.prototype.setStatus = function (params) { this.modal.render(params); }; Import.prototype.onConfirm = function (options) { this.confirm(options); }; Import.prototype.onBlogs = function (options) { this.blogs(options); }; Import.prototype.onStop = function (options) { this.clean(options); }; module.exports = Import; /***/ }), /***/ 18: /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (C) 2014-2018 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var $ = jQuery; var Modal = function Modal() { var self = this; this.view = null; // Error Modal this.error = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-red').text(params.title); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append close button to action action.append(closeButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.overlay.show(); }; // Progress Modal this.progress = function (params) { if (this.view === 'progress') { // Update progress bar meter this.progress.progressBarMeter.width(params.percent + '%'); // Update progress bar percent this.progress.progressBarPercent.text(params.percent + '%'); } else { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold progress bar var header = $('

'); // Create paragraph to hold mesage var message = $('

'); // Create action section var action = $('
'); // Create progress bar var progressBar = $(''); // Create progress bar meter this.progress.progressBarMeter = $('').width(params.percent + '%'); // Create progress bar percent this.progress.progressBarPercent = $('').text(params.percent + '%'); // Create stop import var stopButton = $('').on('click', function () { $(this).attr('disabled', 'disabled'); self.onStop(); }); // Append text to stop button stopButton.append(' ' + ai1wm_locale.stop_import); // Append progress meter and progress percent progressBar.append(this.progress.progressBarMeter).append(this.progress.progressBarPercent); // Append stop button to action action.append(stopButton); // Append progress bar to section header.append(progressBar); // Append header to section section.append(header); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.overlay.show(); } }; // Confirm Modal this.confirm = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold warning var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create warning var warning = $(''); // Create close button var closeButton = $('').on('click', function () { $(this).attr('disabled', 'disabled'); self.onStop(); }); // Create confirm button var confirmButton = $('').on('click', function () { $(this).attr('disabled', 'disabled'); self.onConfirm(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append text to confirm button confirmButton.append(ai1wm_locale.confirm_import + ' >'); // Append close button to action action.append(closeButton); // Append confirm button to action action.append(confirmButton); // Append warning to section header.append(warning); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.overlay.show(); }; // Blogs Modal this.blogs = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-grey').text(params.title); // Create continue button var continueButton = $('').on('click', function () { $(this).attr('disabled', 'disabled'); self.onBlogs($(this).closest('form').serializeArray()); }); // Append text to continue button continueButton.append(ai1wm_locale.continue_import); // Append continue button to action action.append(continueButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.overlay.show(); }; // Info Modal this.info = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold loader var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create loader var loader = $(''); // Create warning var warning = $('

').html(ai1wm_locale.please_do_not_close_this_browser); // Create notice to be displayed during import process var notice = $('
'); // Append warning to notice notice.append(warning); // Append stop button to action action.append(notice); // Append loader to header header.append(loader); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.overlay.show(); }; // Done Modal this.done = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-green').text(params.title); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append close button to action action.append(closeButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.overlay.show(); }; // Create the overlay this.overlay = $('
'); // Create the modal container this.modal = $('
'); $('body').append(this.overlay) // Append overlay to body .append(this.modal); // Append modal to body }; Modal.prototype.render = function (params) { // Show modal switch (params.type) { case 'error': this.error(params); break; case 'confirm': this.confirm(params); break; case 'blogs': this.blogs(params); break; case 'progress': this.progress(params); break; case 'info': this.info(params); break; case 'done': this.done(params); break; } this.view = params.type; }; Modal.prototype.destroy = function () { this.modal.hide(); this.overlay.hide(); }; module.exports = Modal; /***/ }), /***/ 3: /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (C) 2014-2018 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ jQuery(document).ready(function ($) { 'use strict'; // Review $('#ai1wm-feedback-type-link-1').click(function (e) { var radio = $('#ai1wm-feedback-type-1'); if (radio.is(':checked')) { radio.attr('checked', false); } else { radio.attr('checked', true); } }); // Idea $('#ai1wm-feedback-type-link-2').click(function (e) { var radio = $('#ai1wm-feedback-type-2'); if (radio.is(':checked')) { radio.attr('checked', false); } else { radio.attr('checked', true); } }); // Help $('#ai1wm-feedback-type-3').click(function () { // Hide other options $('#ai1wm-feedback-type-1, #ai1wm-feedback-type-2').closest('li').hide(); // Change placeholder message $('.ai1wm-feedback-form').find('.ai1wm-feedback-message').attr('placeholder', ai1wm_locale.how_may_we_help_you); // Show feedback form $('.ai1wm-feedback-form').fadeIn(); }); // Cancel feedback form $('#ai1wm-feedback-cancel').click(function (e) { $('.ai1wm-feedback-form').fadeOut(function () { $('.ai1wm-feedback-type').attr('checked', false).closest('li').show(); }); e.preventDefault(); }); // Send feedback form $('#ai1wm-feedback-submit').click(function (e) { var self = $(this); var spinner = self.next(); var type = $('.ai1wm-feedback-type:checked').val(); var email = $('.ai1wm-feedback-email').val(); var message = $('.ai1wm-feedback-message').val(); var terms = $('.ai1wm-feedback-terms').is(':checked'); self.attr('disabled', true); spinner.css('visibility', 'visible'); $.ajax({ url: ai1wm_feedback.ajax.url, type: 'POST', dataType: 'json', async: true, data: { 'secret_key': ai1wm_feedback.secret_key, 'ai1wm_type': type, 'ai1wm_email': email, 'ai1wm_message': message, 'ai1wm_terms': +terms }, dataFilter: function dataFilter(data, type) { return Ai1wm.Util.json(data); } }).done(function (data) { self.attr('disabled', false); spinner.css('visibility', 'hidden'); if (data.errors.length > 0) { $('.ai1wm-feedback .ai1wm-message').remove(); var errorMessage = $('
').addClass('ai1wm-message ai1wm-error-message'); $.each(data.errors, function (key, value) { errorMessage.append($('

').text(value)); }); $('.ai1wm-feedback').prepend(errorMessage); } else { var successMessage = $('

').addClass('ai1wm-message ai1wm-success-message'); successMessage.append($('

').text(ai1wm_locale.thanks_for_submitting_your_feedback)); $('.ai1wm-feedback').html(successMessage); } }); e.preventDefault(); }); }); /***/ }), /***/ 39: /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(global) { /** * Copyright (C) 2014-2018 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Feedback = __webpack_require__(3), Report = __webpack_require__(4), Import = __webpack_require__(13); jQuery(document).ready(function ($) { 'use strict'; $('.ai1wm-backup-actions > a').hover(function () { $(this).addClass('ai1wm-button-on'); }, function () { $(this).removeClass('ai1wm-button-on'); }); // Delete file $('.ai1wm-backup-delete').click(function (e) { var self = $(this); // Delete file if (confirm(ai1wm_locale.want_to_delete_this_file)) { $.ajax({ url: ai1wm_backups.ajax.url, type: 'POST', dataType: 'json', data: { 'secret_key': ai1wm_backups.secret_key, 'archive': self.data('archive') }, dataFilter: function dataFilter(data, type) { return Ai1wm.Util.json(data); } }).done(function (data) { if (data.errors.length === 0) { self.closest('tr').remove(); if ($('.ai1wm-backups tbody tr').length === 0) { $('.ai1wm-backups').addClass('ai1wm-hide'); $('.ai1wm-backups-empty').removeClass('ai1wm-hide'); } } }); } e.preventDefault(); }); var model = new Import(); // Restore from file $('.ai1wm-backup-restore').click(function (e) { var storage = Ai1wm.Util.random(12); var options = Ai1wm.Util.form('#ai1wm-backups-form').concat({ name: 'storage', value: storage }).concat({ name: 'archive', value: $(this).data('archive') }); // Set global params model.setParams(options); // Start import model.start(); e.preventDefault(); }); }); global.Ai1wm = jQuery.extend({}, global.Ai1wm, { Feedback: Feedback, Report: Report, Import: Import }); /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) /***/ }), /***/ 4: /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (C) 2014-2018 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ jQuery(document).ready(function ($) { 'use strict'; $('#ai1wm-report-problem-button').click(function (e) { $(this).next('.ai1wm-report-problem-dialog').toggleClass('ai1wm-report-active'); e.preventDefault(); }); $('#ai1wm-report-cancel').click(function (e) { $(this).closest('.ai1wm-report-problem-dialog').removeClass('ai1wm-report-active'); e.preventDefault(); }); $('#ai1wm-report-submit').click(function (r) { var self = $(this); var spinner = self.next(); var email = $('.ai1wm-report-email').val(); var message = $('.ai1wm-report-message').val(); var terms = $('.ai1wm-report-terms').is(':checked'); self.attr('disabled', true); spinner.css('visibility', 'visible'); $.ajax({ url: ai1wm_report.ajax.url, type: 'POST', dataType: 'json', async: true, data: { 'secret_key': ai1wm_report.secret_key, 'ai1wm_email': email, 'ai1wm_message': message, 'ai1wm_terms': +terms }, dataFilter: function dataFilter(data, type) { return Ai1wm.Util.json(data); } }).done(function (data) { self.attr('disabled', false); spinner.css('visibility', 'hidden'); if (data.errors.length > 0) { $('.ai1wm-report-problem-dialog .ai1wm-message').remove(); var errorMessage = $('

').addClass('ai1wm-message ai1wm-error-message'); $.each(data.errors, function (key, value) { errorMessage.append($('

').text(value)); }); $('.ai1wm-report-problem-dialog').prepend(errorMessage); } else { var successMessage = $('

').addClass('ai1wm-message ai1wm-success-message'); successMessage.append($('

').text(ai1wm_locale.thanks_for_submitting_your_request)); $('.ai1wm-report-problem-dialog').html(successMessage); // Hide message setTimeout(function () { $('.ai1wm-report-problem-dialog').removeClass('ai1wm-report-active'); }, 2000); } }); e.preventDefault(); }); }); /***/ }) /******/ }); Saray Ruyasi Oynamak İçin Tıkla - GAMO888 สล็อตแตกดีมีรางวัลแจ็คพอตใหญ่ทางเข้าง่ายไม่ซับซ้อน

Saray Ruyasi Oynamak İçin Tıkla

Bu, sadece ücretsiz dönüşler sırasında büyük kazançlar elde edilebileceği anlamına gelmez, aynı zamanda kazançlar dramatik bir şekilde katlanabilir. Saray Rüyası’ndeki semboller, büyüleyici Arap temasını yansıtacak şekilde tasarlanmıştır. Daha düşük ödeme yapan semboller, 10, J, Q, K ve A gibi geleneksel kart değerleridir ve her biri karmaşık desenlerle süslenmiştir. Daha yüksek ödeme https://saray-ruyasi-slot.com/ yapan semboller ise süslü lambalar, hazine sandıkları ve büyüleyici prensesler gibi tematik ikonlardır ve oyunun sürükleyici deneyimine katkıda bulunur. Wild sembolü, scatter ve çarpan wild’lar dışındaki tüm sembollerin yerine geçerek kazanan kombinasyonlar oluşturulmasına yardımcı olur.

Saray Rüyası’nin Artıları ve Eksileri

  • Bununla birlikte, oyun yüksek volatilite ve 500x’e kadar çarpanlar gibi etkileyici özelliklere sahiptir.
  • Animasyonlar, özellikle kazanan kombinasyonlar ve bonus özellikler sırasında akıcı ve dinamiktir, böylece her bir dönüş heyecan verici bir şekilde canlı hissedilir.
  • Bu unsurlar bir araya gelerek oyuncuları tekrar tekrar dönmeye teşvik eden sürükleyici bir deneyim yaratır.
  • Yeni semboller düştükçe, oyuncular kazançlarının biriktiğini izleyebilir, bu da her bir dönüşü yeni bir macera haline getirir ve oyunun keyfini artırır.
  • Ayrıca, demo sürümü, gerçek para versiyonuyla aynı RTP ve matematiksel kuralları kullanarak slotun davranışını doğru bir şekilde temsil eder.
  • Saray Rüyası demo sürümü, oyunculara bu büyüleyici slotu finansal bir taahhütte bulunmadan deneme fırsatı sunar.
  • Ücretsiz Dönüşler özelliğini tetiklediğinizde, başlangıçta 15 ücretsiz dönüş kazanırsınız ve bu tur sırasında ek dönüşler kazanma şansınız olur.
  • Saray Rüyası, 6×5 ızgara düzeninde çalışan bir oyundur ve oyunculara geleneksel slot formatlarından farklı bir deneyim sunar.
  • Bu seçenek, oyunun en ödüllendirici özelliklerini doğal yollarla tetiklenmesini beklemeden deneyimlemek için alternatif bir yol sağlar.
  • Her bir sembolün değerini anlamak, kazancınızı en üst düzeye çıkarmanız için önemlidir.

Saray Rüyası demo sürümü, oyunculara bu büyüleyici slotu finansal bir taahhütte bulunmadan deneme fırsatı sunar. Bu demo sürümü, sayfanın en üstünde bulunabilir ve kullanıcıların oyunun özelliklerini ve mekaniğini risksiz bir şekilde keşfetmelerine olanak tanır. Dört veya daha fazla scatter sembolü, Ücretsiz Dönüşler özelliğini tetikler ve oyunculara başlangıçta 15 ücretsiz dönüş verir. Bu bonus turu sırasında, her üç yeni scatter ile ek dönüşler biriktirilebilir ve ücretsiz dönüş sayısında herhangi bir üst sınır bulunmaz. Oyuncular, ücretsiz dönüş sayılarının arttığını izlerken, bu turda kazandıkları wild çarpanlar da genel çarpanı artırarak heyecanı zirveye çıkarır.

  • Anında tatmin arayan oyuncular bu özelliği takdir edeceklerdir çünkü standart oynanışı atlayarak potansiyel olarak kazançlı ücretsiz dönüşlere doğrudan geçiş yapmalarını sağlar.
  • Ödeme tablosunu incelemek, oyununuzu stratejik hale getirmeniz ve bahislerinizi bilinçli bir şekilde yapmanız için hayati önem taşır.
  • Birden fazla wild bir arada geldiğinde ise bu çarpanlar bir araya gelerek daha büyük kazançlara olanak tanır.
  • Bu, sadece ücretsiz dönüşler sırasında büyük kazançlar elde edilebileceği anlamına gelmez, aynı zamanda kazançlar dramatik bir şekilde katlanabilir.
  • Scatter sembolleri, dört veya daha fazlası makaralara indiğinde Ücretsiz Dönüşler özelliğini tetiklerken, çarpan wild’lar rastgele görünebilir ve ödemeleri önemli ölçüde artırabilir.
  • Bu bonus turu sırasında, her üç yeni scatter ile ek dönüşler biriktirilebilir ve ücretsiz dönüş sayısında herhangi bir üst sınır bulunmaz.
  • Oyun, yüksek volatiliteye sahip olduğu için kazançlar daha az sıklıkla gerçekleşse de, elde edildiğinde büyük olabilir.
  • Bu wild’lar, kazanç kombinasyonları oluşturmak için diğer sembollerin yerine geçerken, aynı zamanda bir kazancın parçası olduklarında ödemeyi çarpar.
  • Bahislerinize sınır koyun ve eğlenceli bir oyun deneyimi yaşamak için gerektiğinde ara verin.
  • Ancak, benzersiz temalar ve mekanikler tercih ediyorsanız, Pragmatic Play’in geniş portföyündeki diğer seçenekleri keşfetmek isteyebilirsiniz.

Saray Rüyası’nin ödeme tablosu, oyunun sembollerini ve bunların karşılık gelen ödemelerini içerir. Her bir sembolün değerini anlamak, kazancınızı en üst düzeye çıkarmanız için önemlidir. Ödeme tablosunu incelemek, oyununuzu stratejik hale getirmeniz ve bahislerinizi bilinçli bir şekilde yapmanız için hayati önem taşır. Ücretsiz Dönüşler özelliğini tetiklediğinizde, başlangıçta 15 ücretsiz dönüş kazanırsınız ve bu tur sırasında ek dönüşler kazanma şansınız olur. Beş veya daha fazla bitişik sembolden oluşan grupları yakalamak, düşen makaralar özelliğini tetikler ve ardışık kazançlar için fırsatlar yaratır. Saray Rüyası’nin kurallarını anlamak, oyun deneyiminizi en üst düzeye çıkarmak için önemlidir.

Yeni semboller düştükçe, oyuncular kazançlarının biriktiğini izleyebilir, bu da her bir dönüşü yeni bir macera haline getirir ve oyunun keyfini artırır. Saray Rüyası, 6×5 ızgara düzeninde çalışan bir oyundur ve oyunculara geleneksel slot formatlarından farklı bir deneyim sunar. Oyun, sabit ödeme hatları yerine kümeli ödeme mekanizmasını kullanır; kazançlar, sabit hatlar yerine eşleşen sembol kümelerinin oluşmasıyla elde edilir. Oyuncular, bahislerini €0.20 ile €100 arasında ayarlayarak hem rahat oyunculara hem de yüksek bahisçilerin ihtiyaçlarına cevap verebilir.

  • Bu seçenek, oyunun en ödüllendirici özelliklerini doğal yollarla tetiklenmesini beklemeden deneyimlemek için alternatif bir yol sağlar.
  • Demo modunda gerçek para kazanılmasa da, Saray Rüyası’nin sürükleyici teması ve özelliklerini denemek için mükemmel bir yoldur.
  • Ante Bet özelliği, oyunculara bahislerini %25 artırarak bonus özellikleri tetikleme şanslarını artırma imkanı sunar.
  • Wild’lar, kazanç kombinasyonları oluşturmak için diğer sembollerin yerine geçerken, dört veya daha fazla scatter sembolü Ücretsiz Dönüşler özelliğini etkinleştirir.
  • İstediğiniz bahsi ayarladıktan sonra, oyunu başlatmak için döndürme düğmesine tıklayın.
  • Saray Rüyası’yi, Pragmatic Play oyunlarını sunan çeşitli çevrimiçi casinolarda oynayabilirsiniz.
  • Yüksek volatiliteye sahip slotları seviyor ve tanıdık bir yapıyı kabul ediyorsanız, Saray Rüyası kesinlikle denemeye değer.
  • Oyun yüklendikten sonra, bahis büyüklüğünüzü bahis seçim düğmelerine tıklayarak ayarlayın.
  • Bununla birlikte, oyun yüksek volatilite ve 500x’e kadar çarpanlar gibi etkileyici özelliklere sahiptir.
  • Bu seçeneği tercih eden oyuncular, oyun deneyimlerini artırabilir ve ücretsiz dönüşler veya diğer kârlı bonuslar elde etme olasılığını artırabilir.

Saray Rüyası Oynamak İçin Harika Bonuslar Sunan Casinolar

Anında tatmin arayan oyuncular bu özelliği takdir edeceklerdir çünkü standart oynanışı atlayarak potansiyel olarak kazançlı ücretsiz dönüşlere doğrudan geçiş yapmalarını sağlar. Saray Ruyasi’deki grafikler, büyüleyici temayı hayata geçiren yüksek çözünürlüklü görsellerle dikkat çekicidir. Arka plan, yumuşak ay ışığıyla aydınlanan güzel bir saray gösterir ve davetkar bir atmosfer yaratır. Görsellere eşlik eden, geleneksel Orta Doğu ezgileriyle modern oyun öğelerini harmanlayan hipnotize edici bir müzik, genel sürükleyiciliği artırır. Animasyonlar, özellikle kazanan kombinasyonlar ve bonus özellikler sırasında akıcı ve dinamiktir, böylece her bir dönüş heyecan verici bir şekilde canlı hissedilir. Bu unsurlar bir araya gelerek oyuncuları tekrar tekrar dönmeye teşvik eden sürükleyici bir deneyim yaratır.

Bununla birlikte, oyun yüksek volatilite ve 500x’e kadar çarpanlar gibi etkileyici özelliklere sahiptir. Bahsinizin 5000 katına kadar maksimum kazanç potansiyeli ve %96.50 RTP ile Saray Rüyası, yüksek riskli slotlardan hoşlananlar için sağlam kazanç fırsatları sunar. Oyuncular, oyunun volatilitesini test edebilir ve kazançların ne sıklıkla gerçekleştiğini anlayabilir, bu da oyun stratejilerini belirlemeleri için önemlidir. Ayrıca, demo sürümü, gerçek para versiyonuyla aynı RTP ve matematiksel kuralları kullanarak slotun davranışını doğru bir şekilde temsil eder. Demo modunda gerçek para kazanılmasa da, Saray Rüyası’nin sürükleyici teması ve özelliklerini denemek için mükemmel bir yoldur.

İstediğiniz bahsi ayarladıktan sonra, oyunu başlatmak için döndürme düğmesine tıklayın. Oyun yüklendikten sonra, bahis büyüklüğünüzü bahis seçim düğmelerine tıklayarak ayarlayın. Bütçenize ve oyun tarzınıza bağlı olarak €0.20 ile €100 arasında bir bahis seçebilirsiniz.

Wild’lar, kazanç kombinasyonları oluşturmak için diğer sembollerin yerine geçerken, dört veya daha fazla scatter sembolü Ücretsiz Dönüşler özelliğini etkinleştirir. Evet, çeşitli çevrimiçi casinolarda bulunan demo sürümüne erişerek Saray Rüyası’yi ücretsiz oynayabilirsiniz. Saray Rüyası’ye başlamak basit ve eğlencelidir, bu da hem yeni başlayanlar hem de deneyimli oyuncular için erişilebilir olmasını sağlar.

Aşağıdaki adım adım kılavuzu izleyerek oyunda gezin ve deneyiminizi en üst düzeye çıkarın. Gates of Olympus’un mekaniğine aşina olan oyuncular, Saray Rüyası’yi tanıdık bir yapı sunarken estetik açıdan ferahlatıcı bulabilirler. Yüksek volatiliteye sahip slotları seviyor ve tanıdık bir yapıyı kabul ediyorsanız, Saray Rüyası kesinlikle denemeye değer.

Saray Rüyası, oyuncuları büyüleyici bir Arap sarayı avlusuna götüren sürükleyici bir temaya sahiptir. Oyun, gizem ve macera hissi uyandıran karmaşık tasarımlar ve canlı renkler ile Orta Doğu kültüründen ilham alır. Makaralar dönerken oyuncular, güzel prensesler ve parlayan hazineler gibi egzotik sembollerle dolu bir dünyaya adım atar. Bu tematik zenginlik, sadece oynanışı geliştirmekle kalmaz, aynı zamanda oyuncuları oyunun dokusuna işlenmiş büyülü hikayeleri keşfetmeye davet eder. Gerçek parayla oynamadan önce, sayfanın en üstünde bulunan Saray Rüyası demo sürümünü denemeyi düşünün. Bu, oyun mekaniğini risksiz bir şekilde denemenize ve oyuna aşina olmanıza olanak tanır.

Scatter sembolleri, dört veya daha fazlası makaralara indiğinde Ücretsiz Dönüşler özelliğini tetiklerken, çarpan wild’lar rastgele görünebilir ve ödemeleri önemli ölçüde artırabilir. Bu sembollerin çeşitliliği, oyunun derinliğini artırırken, Saray Rüyası’nin genel estetik çekiciliğini de artırır. Ante Bet özelliği, oyunculara bahislerini %25 artırarak bonus özellikleri tetikleme şanslarını artırma imkanı sunar. Bu seçeneği tercih eden oyuncular, oyun deneyimlerini artırabilir ve ücretsiz dönüşler veya diğer kârlı bonuslar elde etme olasılığını artırabilir. Rastgele ortaya çıkan Çarpan Wild’lar, 2x’den başlayıp 500x’e kadar çıkabilen çarpanlarla kazançları önemli ölçüde artırabilir. Bu wild’lar, kazanç kombinasyonları oluşturmak için diğer sembollerin yerine geçerken, aynı zamanda bir kazancın parçası olduklarında ödemeyi çarpar.

%96.50 RTP oranıyla Saray Rüyası, sürükleyici oyun deneyimi ve ardışık kazançlar vaat eden heyecan verici bir oyun sunuyor. Düşen Makaralar özelliği, her kazanan kombinasyondan sonra etkinleşir ve kazanan semboller ızgaradan kaldırılır, yerlerine yeni semboller düşer. Bu ardışık etki, tek bir dönüşten birden fazla kazanç elde etme fırsatı yaratır ve oyunun dinamik ve heyecan verici olmasını sağlar.

  • Düşen Makaralar özelliği, her kazanan kombinasyondan sonra etkinleşir ve kazanan semboller ızgaradan kaldırılır, yerlerine yeni semboller düşer.
  • Oyuncular, ücretsiz dönüş sayılarının arttığını izlerken, bu turda kazandıkları wild çarpanlar da genel çarpanı artırarak heyecanı zirveye çıkarır.
  • Daha düşük ödeme yapan semboller, 10, J, Q, K ve A gibi geleneksel kart değerleridir ve her biri karmaşık desenlerle süslenmiştir.
  • Bu demo sürümü, sayfanın en üstünde bulunabilir ve kullanıcıların oyunun özelliklerini ve mekaniğini risksiz bir şekilde keşfetmelerine olanak tanır.
  • Oyuncular, oyunun volatilitesini test edebilir ve kazançların ne sıklıkla gerçekleştiğini anlayabilir, bu da oyun stratejilerini belirlemeleri için önemlidir.
  • Wild sembolü, scatter ve çarpan wild’lar dışındaki tüm sembollerin yerine geçerek kazanan kombinasyonlar oluşturulmasına yardımcı olur.
  • Daha yüksek ödeme yapan semboller ise süslü lambalar, hazine sandıkları ve büyüleyici prensesler gibi tematik ikonlardır ve oyunun sürükleyici deneyimine katkıda bulunur.
  • 6×5 ızgara düzenine sahip olan bu son derece volatil slot, ardışık semboller ve bahis miktarının 5000 katına kadar kazanç potansiyeli sunar.
  • Bu sembollerin çeşitliliği, oyunun derinliğini artırırken, Saray Rüyası’nin genel estetik çekiciliğini de artırır.
  • Makaralar dönerken oyuncular, güzel prensesler ve parlayan hazineler gibi egzotik sembollerle dolu bir dünyaya adım atar.
  • Saray Ruyasi’deki grafikler, büyüleyici temayı hayata geçiren yüksek çözünürlüklü görsellerle dikkat çekicidir.

Oyun, yüksek volatiliteye sahip olduğu için kazançlar daha az sıklıkla gerçekleşse de, elde edildiğinde büyük olabilir. %96.50 RTP ile Saray Rüyası, oyuncular için cazip bir geri dönüş sağlar ve heyecan arayanlar için çekici bir seçenek sunar. Hemen aksiyona atılmak isteyenler için Bonus Satın Al özelliği, oyunculara mevcut bahislerinin 100 katı karşılığında Ücretsiz Dönüşler turuna anında erişim satın alma imkanı sunar. Bu seçenek, oyunun en ödüllendirici özelliklerini doğal yollarla tetiklenmesini beklemeden deneyimlemek için alternatif bir yol sağlar.

Ancak, benzersiz temalar ve mekanikler tercih ediyorsanız, Pragmatic Play’in geniş portföyündeki diğer seçenekleri keşfetmek isteyebilirsiniz. Bu özellikler, Saray Rüyası’de dinamik ve sürükleyici bir oyun deneyimi sunarak çevrimiçi slot hayranları için cazip bir seçenek haline getirir. Bahislerinize sınır koyun ve eğlenceli bir oyun deneyimi yaşamak için gerektiğinde ara verin. Saray Rüyası’yi, Pragmatic Play oyunlarını sunan çeşitli çevrimiçi casinolarda oynayabilirsiniz.

Bu çarpanların makaralara indiğini görmek, oyuncuların kazançlarının nasıl çarpanlarla katlanacağını izlerken heyecanını artırır. Birden fazla wild bir arada geldiğinde ise bu çarpanlar bir araya gelerek daha büyük kazançlara olanak tanır. Saray Rüyası, Pragmatic Play’in büyüleyici bir çevrimiçi slot oyunudur ve oyuncuları, yüksek bahisli oyunların heyecanını yaşayabilecekleri etkileyici bir Arap sarayı avlusuna götürür. 6×5 ızgara düzenine sahip olan bu son derece volatil slot, ardışık semboller ve bahis miktarının 5000 katına kadar kazanç potansiyeli sunar. Oyuncular, Orta Doğu kültüründen ilham alan güzel tasarlanmış semboller arasında 15’e kadar ücretsiz dönüş ve 500x’e kadar çarpanlarla büyük ödüllerin peşinden koşabilirler.